Re-enable hazard warnings for setting render targets that are currently bound as SRVs.
We can manually unset applied textures in SetRenderTargets. This should fix the spurious warnings
while still showing a warning on error cases.
BUG=
R=geofflang@chromium.org, shannonwoods@chromium.org
Review URL: https://codereview.appspot.com/15880044
diff --git a/src/libGLESv2/Renderbuffer.cpp b/src/libGLESv2/Renderbuffer.cpp
index 1275137..98d33ec 100644
--- a/src/libGLESv2/Renderbuffer.cpp
+++ b/src/libGLESv2/Renderbuffer.cpp
@@ -129,6 +129,11 @@
return mTexture2D->getRenderTargetSerial(mTarget);
}
+unsigned int RenderbufferTexture2D::getTextureSerial() const
+{
+ return mTexture2D->getTextureSerial();
+}
+
///// RenderbufferTextureCubeMap Implementation ////////
RenderbufferTextureCubeMap::RenderbufferTextureCubeMap(TextureCubeMap *texture, GLenum target) : mTarget(target)
@@ -193,6 +198,11 @@
return mTextureCubeMap->getRenderTargetSerial(mTarget);
}
+unsigned int RenderbufferTextureCubeMap::getTextureSerial() const
+{
+ return mTextureCubeMap->getTextureSerial();
+}
+
////// Renderbuffer Implementation //////
Renderbuffer::Renderbuffer(rx::Renderer *renderer, GLuint id, RenderbufferInterface *instance) : RefCountObject(id)
@@ -292,6 +302,11 @@
return mInstance->getSerial();
}
+unsigned int Renderbuffer::getTextureSerial() const
+{
+ return mInstance->getTextureSerial();
+}
+
void Renderbuffer::setStorage(RenderbufferStorage *newStorage)
{
ASSERT(newStorage != NULL);
diff --git a/src/libGLESv2/Renderbuffer.h b/src/libGLESv2/Renderbuffer.h
index eca2f3a..d46fd44 100644
--- a/src/libGLESv2/Renderbuffer.h
+++ b/src/libGLESv2/Renderbuffer.h
@@ -60,6 +60,7 @@
GLuint getStencilSize() const;
virtual unsigned int getSerial() const = 0;
+ virtual unsigned int getTextureSerial() const = 0;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferInterface);
@@ -85,6 +86,7 @@
virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const;
+ virtual unsigned int getTextureSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTexture2D);
@@ -113,6 +115,7 @@
virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const;
+ virtual unsigned int getTextureSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTextureCubeMap);
@@ -141,6 +144,7 @@
virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const;
+ virtual unsigned int getTextureSerial() const { return 0; }
static unsigned int issueSerial();
static unsigned int issueCubeSerials();
@@ -193,6 +197,7 @@
GLsizei getSamples() const;
unsigned int getSerial() const;
+ unsigned int getTextureSerial() const;
void setStorage(RenderbufferStorage *newStorage);
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 6f4da5c..150e14c 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -243,8 +243,6 @@
{
D3D11_MESSAGE_ID hideMessages[] =
{
- D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD,
- D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD,
D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET
};
@@ -919,6 +917,25 @@
renderTargetFormat = colorbuffer->getActualFormat();
missingColorRenderTarget = false;
}
+
+#ifdef _DEBUG
+ // Workaround for Debug SETSHADERRESOURCES_HAZARD D3D11 warnings
+ for (unsigned int vertexSerialIndex = 0; vertexSerialIndex < gl::IMPLEMENTATION_MAX_VERTEX_TEXTURE_IMAGE_UNITS; vertexSerialIndex++)
+ {
+ if (colorbuffer->getTextureSerial() != 0 && mCurVertexTextureSerials[vertexSerialIndex] == colorbuffer->getTextureSerial())
+ {
+ setTexture(gl::SAMPLER_VERTEX, vertexSerialIndex, NULL);
+ }
+ }
+
+ for (unsigned int pixelSerialIndex = 0; pixelSerialIndex < gl::MAX_TEXTURE_IMAGE_UNITS; pixelSerialIndex++)
+ {
+ if (colorbuffer->getTextureSerial() != 0 && mCurPixelTextureSerials[pixelSerialIndex] == colorbuffer->getTextureSerial())
+ {
+ setTexture(gl::SAMPLER_PIXEL, pixelSerialIndex, NULL);
+ }
+ }
+#endif
}
}