summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Madill <jmadill@chromium.org>2013-10-30 11:27:17 -0400
committerJamie Madill <jmadill@chromium.org>2013-10-30 11:27:17 -0400
commit297eb16dd3c2e7c02d75c681569d76884e6e520c (patch)
tree0ae93272a7760c118911bcdb663494370aa4a9b0
parent0f0edf94bfe1fc28979b0d12747a900164bb966a (diff)
downloadangle_dx11-297eb16dd3c2e7c02d75c681569d76884e6e520c.tar.gz
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
-rw-r--r--src/libGLESv2/Renderbuffer.cpp15
-rw-r--r--src/libGLESv2/Renderbuffer.h5
-rw-r--r--src/libGLESv2/renderer/Renderer11.cpp21
3 files changed, 39 insertions, 2 deletions
diff --git a/src/libGLESv2/Renderbuffer.cpp b/src/libGLESv2/Renderbuffer.cpp
index 12751374..98d33ec6 100644
--- a/src/libGLESv2/Renderbuffer.cpp
+++ b/src/libGLESv2/Renderbuffer.cpp
@@ -129,6 +129,11 @@ unsigned int RenderbufferTexture2D::getSerial() const
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 @@ unsigned int RenderbufferTextureCubeMap::getSerial() const
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 @@ unsigned int Renderbuffer::getSerial() const
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 eca2f3a7..d46fd445 100644
--- a/src/libGLESv2/Renderbuffer.h
+++ b/src/libGLESv2/Renderbuffer.h
@@ -60,6 +60,7 @@ class RenderbufferInterface
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 @@ class RenderbufferTexture2D : public RenderbufferInterface
virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const;
+ virtual unsigned int getTextureSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTexture2D);
@@ -113,6 +115,7 @@ class RenderbufferTextureCubeMap : public RenderbufferInterface
virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const;
+ virtual unsigned int getTextureSerial() const;
private:
DISALLOW_COPY_AND_ASSIGN(RenderbufferTextureCubeMap);
@@ -141,6 +144,7 @@ class RenderbufferStorage : public RenderbufferInterface
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 @@ class Renderbuffer : public RefCountObject
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 6f4da5c6..150e14c2 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -243,8 +243,6 @@ EGLint Renderer11::initialize()
{
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 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
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
}
}