Commit 87f6da1f by Jamie Madill

Move the Context ReadPixels logic into RendererD3D.

BUG=angle:789 Change-Id: I0a678f8fe31a3e7ddd9a675a0e3cb0342299b0e3 Reviewed-on: https://chromium-review.googlesource.com/226064Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent a93bef2e
...@@ -1353,14 +1353,7 @@ Error Context::clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLi ...@@ -1353,14 +1353,7 @@ Error Context::clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLi
Error Context::readPixels(GLint x, GLint y, GLsizei width, GLsizei height, Error Context::readPixels(GLint x, GLint y, GLsizei width, GLsizei height,
GLenum format, GLenum type, GLsizei *bufSize, void* pixels) GLenum format, GLenum type, GLsizei *bufSize, void* pixels)
{ {
Framebuffer *framebuffer = mState.getReadFramebuffer(); return mRenderer->readPixels(getData(), x, y, width, height, format, type, bufSize, pixels);
GLenum sizedInternalFormat = GetSizedInternalFormat(format, type);
const InternalFormat &sizedFormatInfo = GetInternalFormatInfo(sizedInternalFormat);
GLuint outputPitch = sizedFormatInfo.computeRowPitch(type, width, mState.getPackAlignment());
return mRenderer->readPixels(framebuffer, x, y, width, height, format, type, outputPitch, mState.getPackState(),
reinterpret_cast<uint8_t*>(pixels));
} }
Error Context::drawArrays(GLenum mode, GLint first, GLsizei count, GLsizei instances) Error Context::drawArrays(GLenum mode, GLint first, GLsizei count, GLsizei instances)
......
...@@ -91,9 +91,8 @@ class Renderer ...@@ -91,9 +91,8 @@ class Renderer
virtual gl::Error clearBufferiv(const gl::Data &data, GLenum buffer, GLint drawbuffer, const GLint *values) = 0; virtual gl::Error clearBufferiv(const gl::Data &data, GLenum buffer, GLint drawbuffer, const GLint *values) = 0;
virtual gl::Error clearBufferfi(const gl::Data &data, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) = 0; virtual gl::Error clearBufferfi(const gl::Data &data, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) = 0;
// TODO(jmadill): pass state and essetial params only virtual gl::Error readPixels(const gl::Data &data, GLint x, GLint y, GLsizei width, GLsizei height,
virtual gl::Error readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum format, GLenum type, GLsizei *bufSize, void* pixels) = 0;
GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels) = 0;
virtual gl::Error blitFramebuffer(const gl::Data &data, virtual gl::Error blitFramebuffer(const gl::Data &data,
GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "libGLESv2/ResourceManager.h" #include "libGLESv2/ResourceManager.h"
#include "libGLESv2/State.h" #include "libGLESv2/State.h"
#include "libGLESv2/VertexArray.h" #include "libGLESv2/VertexArray.h"
#include "libGLESv2/formatutils.h"
#include "common/utilities.h" #include "common/utilities.h"
namespace rx namespace rx
...@@ -780,4 +781,17 @@ gl::Error RendererD3D::blitFramebuffer(const gl::Data &data, ...@@ -780,4 +781,17 @@ gl::Error RendererD3D::blitFramebuffer(const gl::Data &data,
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error RendererD3D::readPixels(const gl::Data &data, GLint x, GLint y, GLsizei width, GLsizei height,
GLenum format, GLenum type, GLsizei *bufSize, void* pixels)
{
const gl::Framebuffer *framebuffer = data.state->getReadFramebuffer();
GLenum sizedInternalFormat = gl::GetSizedInternalFormat(format, type);
const gl::InternalFormat &sizedFormatInfo = gl::GetInternalFormatInfo(sizedInternalFormat);
GLuint outputPitch = sizedFormatInfo.computeRowPitch(type, width, data.state->getPackAlignment());
return readPixels(framebuffer, x, y, width, height, format, type, outputPitch, data.state->getPackState(),
reinterpret_cast<uint8_t*>(pixels));
}
} }
...@@ -57,6 +57,9 @@ class RendererD3D : public Renderer ...@@ -57,6 +57,9 @@ class RendererD3D : public Renderer
gl::Error clearBufferiv(const gl::Data &data, GLenum buffer, int drawbuffer, const GLint *values) override; gl::Error clearBufferiv(const gl::Data &data, GLenum buffer, int drawbuffer, const GLint *values) override;
gl::Error clearBufferfi(const gl::Data &data, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) override; gl::Error clearBufferfi(const gl::Data &data, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) override;
gl::Error readPixels(const gl::Data &data, GLint x, GLint y, GLsizei width, GLsizei height,
GLenum format, GLenum type, GLsizei *bufSize, void* pixels) override;
gl::Error blitFramebuffer(const gl::Data &data, gl::Error blitFramebuffer(const gl::Data &data,
GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
...@@ -109,7 +112,7 @@ class RendererD3D : public Renderer ...@@ -109,7 +112,7 @@ class RendererD3D : public Renderer
virtual gl::Error copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat, virtual gl::Error copyImage2DArray(gl::Framebuffer *framebuffer, const gl::Rectangle &sourceRect, GLenum destFormat,
GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level) = 0; GLint xoffset, GLint yoffset, GLint zOffset, TextureStorage *storage, GLint level) = 0;
virtual gl::Error readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, virtual gl::Error readPixels(const gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels) = 0; GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels) = 0;
// RenderTarget creation // RenderTarget creation
......
...@@ -2722,7 +2722,7 @@ gl::Error Renderer11::blitRect(const gl::Framebuffer *readTarget, const gl::Rect ...@@ -2722,7 +2722,7 @@ gl::Error Renderer11::blitRect(const gl::Framebuffer *readTarget, const gl::Rect
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error Renderer11::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, gl::Error Renderer11::readPixels(const gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels) GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels)
{ {
ID3D11Texture2D *colorBufferTexture = NULL; ID3D11Texture2D *colorBufferTexture = NULL;
......
...@@ -130,7 +130,7 @@ class Renderer11 : public RendererD3D ...@@ -130,7 +130,7 @@ class Renderer11 : public RendererD3D
gl::Error blitRect(const gl::Framebuffer *readTarget, const gl::Rectangle &readRect, const gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect, gl::Error blitRect(const gl::Framebuffer *readTarget, const gl::Rectangle &readRect, const gl::Framebuffer *drawTarget, const gl::Rectangle &drawRect,
const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter) override; const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter) override;
virtual gl::Error readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, virtual gl::Error readPixels(const gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels); GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels);
// RenderTarget creation // RenderTarget creation
......
...@@ -2638,7 +2638,7 @@ gl::Error Renderer9::blitRect(const gl::Framebuffer *readFramebuffer, const gl:: ...@@ -2638,7 +2638,7 @@ gl::Error Renderer9::blitRect(const gl::Framebuffer *readFramebuffer, const gl::
return gl::Error(GL_NO_ERROR); return gl::Error(GL_NO_ERROR);
} }
gl::Error Renderer9::readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, gl::Error Renderer9::readPixels(const gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels) GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels)
{ {
ASSERT(pack.pixelBuffer.get() == NULL); ASSERT(pack.pixelBuffer.get() == NULL);
......
...@@ -138,7 +138,7 @@ class Renderer9 : public RendererD3D ...@@ -138,7 +138,7 @@ class Renderer9 : public RendererD3D
const gl::Rectangle *scissor, bool blitRenderTarget, const gl::Rectangle *scissor, bool blitRenderTarget,
bool blitDepth, bool blitStencil, GLenum filter) override; bool blitDepth, bool blitStencil, GLenum filter) override;
virtual gl::Error readPixels(gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, virtual gl::Error readPixels(const gl::Framebuffer *framebuffer, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels); GLenum type, GLuint outputPitch, const gl::PixelPackState &pack, uint8_t *pixels);
// RenderTarget creation // RenderTarget creation
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment