Commit be184c7d by Geoff Lang

Support syncing pixel pack and unpack buffers in StateManagerGL.

BUG=angleproject:1149 Change-Id: I641693e67bf35733a591107fdd3812d0badd17f2 Reviewed-on: https://chromium-review.googlesource.com/297083Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 5ade8459
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "libANGLE/Data.h" #include "libANGLE/Data.h"
#include "libANGLE/Framebuffer.h" #include "libANGLE/Framebuffer.h"
#include "libANGLE/VertexArray.h" #include "libANGLE/VertexArray.h"
#include "libANGLE/renderer/gl/BufferGL.h"
#include "libANGLE/renderer/gl/FramebufferGL.h" #include "libANGLE/renderer/gl/FramebufferGL.h"
#include "libANGLE/renderer/gl/FunctionsGL.h" #include "libANGLE/renderer/gl/FunctionsGL.h"
#include "libANGLE/renderer/gl/ProgramGL.h" #include "libANGLE/renderer/gl/ProgramGL.h"
...@@ -254,13 +255,14 @@ void StateManagerGL::bindTexture(GLenum type, GLuint texture) ...@@ -254,13 +255,14 @@ void StateManagerGL::bindTexture(GLenum type, GLuint texture)
void StateManagerGL::setPixelUnpackState(const gl::PixelUnpackState &unpack) void StateManagerGL::setPixelUnpackState(const gl::PixelUnpackState &unpack)
{ {
GLuint unpackBufferID = 0;
const gl::Buffer *unpackBuffer = unpack.pixelBuffer.get(); const gl::Buffer *unpackBuffer = unpack.pixelBuffer.get();
if (unpackBuffer != nullptr) if (unpackBuffer != nullptr)
{ {
UNIMPLEMENTED(); unpackBufferID = GetImplAs<BufferGL>(unpackBuffer)->getBufferID();
} }
setPixelUnpackState(unpack.alignment, unpack.rowLength, unpack.skipRows, unpack.skipPixels, setPixelUnpackState(unpack.alignment, unpack.rowLength, unpack.skipRows, unpack.skipPixels,
unpack.imageHeight, unpack.skipImages); unpack.imageHeight, unpack.skipImages, unpackBufferID);
} }
void StateManagerGL::setPixelUnpackState(GLint alignment, void StateManagerGL::setPixelUnpackState(GLint alignment,
...@@ -268,7 +270,8 @@ void StateManagerGL::setPixelUnpackState(GLint alignment, ...@@ -268,7 +270,8 @@ void StateManagerGL::setPixelUnpackState(GLint alignment,
GLint skipRows, GLint skipRows,
GLint skipPixels, GLint skipPixels,
GLint imageHeight, GLint imageHeight,
GLint skipImages) GLint skipImages,
GLuint unpackBuffer)
{ {
if (mUnpackAlignment != alignment) if (mUnpackAlignment != alignment)
{ {
...@@ -317,22 +320,26 @@ void StateManagerGL::setPixelUnpackState(GLint alignment, ...@@ -317,22 +320,26 @@ void StateManagerGL::setPixelUnpackState(GLint alignment,
// TODO: set dirty bit once one exists // TODO: set dirty bit once one exists
} }
bindBuffer(GL_PIXEL_UNPACK_BUFFER, unpackBuffer);
} }
void StateManagerGL::setPixelPackState(const gl::PixelPackState &pack) void StateManagerGL::setPixelPackState(const gl::PixelPackState &pack)
{ {
GLuint packBufferID = 0;
const gl::Buffer *packBuffer = pack.pixelBuffer.get(); const gl::Buffer *packBuffer = pack.pixelBuffer.get();
if (packBuffer != nullptr) if (packBuffer != nullptr)
{ {
UNIMPLEMENTED(); packBufferID = GetImplAs<BufferGL>(packBuffer)->getBufferID();
} }
setPixelPackState(pack.alignment, pack.rowLength, pack.skipRows, pack.skipPixels); setPixelPackState(pack.alignment, pack.rowLength, pack.skipRows, pack.skipPixels, packBufferID);
} }
void StateManagerGL::setPixelPackState(GLint alignment, void StateManagerGL::setPixelPackState(GLint alignment,
GLint rowLength, GLint rowLength,
GLint skipRows, GLint skipRows,
GLint skipPixels) GLint skipPixels,
GLuint packBuffer)
{ {
if (mPackAlignment != alignment) if (mPackAlignment != alignment)
{ {
...@@ -365,6 +372,8 @@ void StateManagerGL::setPixelPackState(GLint alignment, ...@@ -365,6 +372,8 @@ void StateManagerGL::setPixelPackState(GLint alignment,
// TODO: set dirty bit once one exists // TODO: set dirty bit once one exists
} }
bindBuffer(GL_PIXEL_PACK_BUFFER, packBuffer);
} }
void StateManagerGL::bindFramebuffer(GLenum type, GLuint framebuffer) void StateManagerGL::bindFramebuffer(GLenum type, GLuint framebuffer)
......
...@@ -101,9 +101,14 @@ class StateManagerGL final : angle::NonCopyable ...@@ -101,9 +101,14 @@ class StateManagerGL final : angle::NonCopyable
GLint skipRows, GLint skipRows,
GLint skipPixels, GLint skipPixels,
GLint imageHeight, GLint imageHeight,
GLint skipImages); GLint skipImages,
GLuint unpackBuffer);
void setPixelPackState(const gl::PixelPackState &pack); void setPixelPackState(const gl::PixelPackState &pack);
void setPixelPackState(GLint alignment, GLint rowLength, GLint skipRows, GLint skipPixels); void setPixelPackState(GLint alignment,
GLint rowLength,
GLint skipRows,
GLint skipPixels,
GLuint packBuffer);
gl::Error setDrawArraysState(const gl::Data &data, gl::Error setDrawArraysState(const gl::Data &data,
GLint first, GLint first,
......
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