aboutsummaryrefslogtreecommitdiff
path: root/src/libGLESv2/renderer/d3d
diff options
context:
space:
mode:
authorGeoff Lang <geofflang@chromium.org>2014-07-25 13:48:02 -0400
committerGeoff Lang <geofflang@chromium.org>2014-09-08 19:08:47 +0000
commitcc79b8c6b3c713904fa6d0613018b3e2f7fd8eac (patch)
tree96ef78a1d5a16853eeff0627b5e314ad0df8c2d0 /src/libGLESv2/renderer/d3d
parent2a1c15a1ab1852ab11fb8d12822c98aac11619ae (diff)
downloadangle-cc79b8c6b3c713904fa6d0613018b3e2f7fd8eac.tar.gz
Update clear calls to return Error objects instead of calling gl::error.
BUG=angle:520 Change-Id: I474a6ed29b882963f7f3425515e7d65f8f69b3e4 Reviewed-on: https://chromium-review.googlesource.com/211440 Reviewed-by: Shannon Woods <shannonwoods@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>
Diffstat (limited to 'src/libGLESv2/renderer/d3d')
-rw-r--r--src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp26
-rw-r--r--src/libGLESv2/renderer/d3d/d3d11/Clear11.h3
-rw-r--r--src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp11
-rw-r--r--src/libGLESv2/renderer/d3d/d3d11/Renderer11.h2
-rw-r--r--src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp8
-rw-r--r--src/libGLESv2/renderer/d3d/d3d9/Renderer9.h2
6 files changed, 29 insertions, 23 deletions
diff --git a/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp b/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
index ba9970bf..8aac2f1d 100644
--- a/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
+++ b/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
@@ -148,7 +148,7 @@ Clear11::~Clear11()
SafeRelease(mRasterizerState);
}
-void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
+gl::Error Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
{
// First determine if a scissored clear is needed, this will always require drawing a quad.
//
@@ -183,7 +183,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
else
{
UNREACHABLE();
- return;
+ return gl::Error(GL_INVALID_OPERATION);
}
if (clearParams.scissorEnabled && (clearParams.scissor.x >= framebufferSize.width ||
@@ -192,7 +192,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
clearParams.scissor.y + clearParams.scissor.height <= 0))
{
// Scissor is enabled and the scissor rectangle is outside the renderbuffer
- return;
+ return gl::Error(GL_NO_ERROR);
}
bool needScissoredClear = clearParams.scissorEnabled && (clearParams.scissor.x > 0 || clearParams.scissor.y > 0 ||
@@ -214,8 +214,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(attachment->getRenderTarget());
if (!renderTarget)
{
- ERR("Render target pointer unexpectedly null.");
- return;
+ return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
}
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(attachment->getInternalFormat());
@@ -259,8 +258,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
ID3D11RenderTargetView *framebufferRTV = renderTarget->getRenderTargetView();
if (!framebufferRTV)
{
- ERR("Render target view pointer unexpectedly null.");
- return;
+ return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
}
const gl::InternalFormat &actualFormatInfo = gl::GetInternalFormatInfo(attachment->getActualFormat());
@@ -289,8 +287,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
RenderTarget11 *renderTarget = RenderTarget11::makeRenderTarget11(attachment->getRenderTarget());
if (!renderTarget)
{
- ERR("Depth stencil render target pointer unexpectedly null.");
- return;
+ return gl::Error(GL_OUT_OF_MEMORY, "Internal depth stencil view pointer unexpectedly null.");
}
const gl::InternalFormat &actualFormatInfo = gl::GetInternalFormatInfo(attachment->getActualFormat());
@@ -307,8 +304,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
ID3D11DepthStencilView *framebufferDSV = renderTarget->getDepthStencilView();
if (!framebufferDSV)
{
- ERR("Depth stencil view pointer unexpectedly null.");
- return;
+ return gl::Error(GL_OUT_OF_MEMORY, "Internal depth stencil view pointer unexpectedly null.");
}
UINT clearFlags = (clearParams.clearDepth ? D3D11_CLEAR_DEPTH : 0) |
@@ -355,8 +351,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
ID3D11RenderTargetView *rtv = renderTarget->getRenderTargetView();
if (!rtv)
{
- ERR("Render target view unexpectedly null.");
- return;
+ return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
}
rtvs[i] = rtv;
@@ -378,8 +373,7 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
HRESULT result = deviceContext->Map(mVertexBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
if (FAILED(result))
{
- ERR("Failed to map masked clear vertex buffer, HRESULT: 0x%X.", result);
- return;
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to map internal masked clear vertex buffer, HRESULT: 0x%X.", result);
}
const gl::Rectangle *scissorPtr = clearParams.scissorEnabled ? &clearParams.scissor : NULL;
@@ -444,6 +438,8 @@ void Clear11::clearFramebuffer(const gl::ClearParameters &clearParams, gl::Frame
// Clean up
mRenderer->markAllStateDirty();
}
+
+ return gl::Error(GL_NO_ERROR);
}
ID3D11BlendState *Clear11::getBlendState(const std::vector<MaskedRenderTarget>& rts)
diff --git a/src/libGLESv2/renderer/d3d/d3d11/Clear11.h b/src/libGLESv2/renderer/d3d/d3d11/Clear11.h
index be1a9c72..be8e187c 100644
--- a/src/libGLESv2/renderer/d3d/d3d11/Clear11.h
+++ b/src/libGLESv2/renderer/d3d/d3d11/Clear11.h
@@ -10,6 +10,7 @@
#define LIBGLESV2_RENDERER_CLEAR11_H_
#include "libGLESv2/angletypes.h"
+#include "libGLESv2/Error.h"
#include <map>
#include <vector>
@@ -31,7 +32,7 @@ class Clear11
~Clear11();
// Clears the framebuffer with the supplied clear parameters, assumes that the framebuffer is currently applied.
- void clearFramebuffer(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer);
+ gl::Error clearFramebuffer(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer);
private:
Renderer11 *mRenderer;
diff --git a/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp b/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
index 46d5e7d0..7c45105b 100644
--- a/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
+++ b/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
@@ -1521,10 +1521,17 @@ void Renderer11::applyUniforms(const gl::ProgramBinary &programBinary)
}
}
-void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
+gl::Error Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
{
- mClear->clearFramebuffer(clearParams, frameBuffer);
+ gl::Error error = mClear->clearFramebuffer(clearParams, frameBuffer);
+ if (error.isError())
+ {
+ return error;
+ }
+
invalidateFramebufferSwizzles(frameBuffer);
+
+ return gl::Error(GL_NO_ERROR);
}
void Renderer11::markAllStateDirty()
diff --git a/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h b/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
index 47fcf290..a3d52a71 100644
--- a/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
+++ b/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
@@ -89,7 +89,7 @@ class Renderer11 : public Renderer
virtual void drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices,
gl::Buffer *elementArrayBuffer, const TranslatedIndexData &indexInfo, GLsizei instances);
- virtual void clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer);
+ virtual gl::Error clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer);
virtual void markAllStateDirty();
diff --git a/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp b/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
index 7450fc03..5583dfe1 100644
--- a/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
+++ b/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
@@ -1713,13 +1713,13 @@ void Renderer9::applyUniformnbv(gl::LinkedUniform *targetUniform, const GLint *v
applyUniformnfv(targetUniform, (GLfloat*)vector);
}
-void Renderer9::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
+gl::Error Renderer9::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer)
{
if (clearParams.colorClearType != GL_FLOAT)
{
// Clearing buffers with non-float values is not supported by Renderer9 and ES 2.0
UNREACHABLE();
- return;
+ return gl::Error(GL_INVALID_OPERATION);
}
bool clearColor = clearParams.clearColor[0];
@@ -1729,7 +1729,7 @@ void Renderer9::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *f
{
// Clearing individual buffers other than buffer zero is not supported by Renderer9 and ES 2.0
UNREACHABLE();
- return;
+ return gl::Error(GL_INVALID_OPERATION);
}
}
@@ -1926,6 +1926,8 @@ void Renderer9::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *f
mDevice->Clear(0, NULL, dxClearFlags, color, depth, stencil);
}
+
+ return gl::Error(GL_NO_ERROR);
}
void Renderer9::markAllStateDirty()
diff --git a/src/libGLESv2/renderer/d3d/d3d9/Renderer9.h b/src/libGLESv2/renderer/d3d/d3d9/Renderer9.h
index 5858d2d2..e1398f2f 100644
--- a/src/libGLESv2/renderer/d3d/d3d9/Renderer9.h
+++ b/src/libGLESv2/renderer/d3d/d3d9/Renderer9.h
@@ -90,7 +90,7 @@ class Renderer9 : public Renderer
virtual void drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices,
gl::Buffer *elementArrayBuffer, const TranslatedIndexData &indexInfo, GLsizei instances);
- virtual void clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer);
+ virtual gl::Error clear(const gl::ClearParameters &clearParams, gl::Framebuffer *frameBuffer);
virtual void markAllStateDirty();