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 @@
#include "libANGLE/Data.h"
#include "libANGLE/Framebuffer.h"
#include "libANGLE/VertexArray.h"
#include "libANGLE/renderer/gl/BufferGL.h"
#include "libANGLE/renderer/gl/FramebufferGL.h"
#include "libANGLE/renderer/gl/FunctionsGL.h"
#include "libANGLE/renderer/gl/ProgramGL.h"
......@@ -254,13 +255,14 @@ void StateManagerGL::bindTexture(GLenum type, GLuint texture)
void StateManagerGL::setPixelUnpackState(const gl::PixelUnpackState &unpack)
{
GLuint unpackBufferID = 0;
const gl::Buffer *unpackBuffer = unpack.pixelBuffer.get();
if (unpackBuffer != nullptr)
{
UNIMPLEMENTED();
unpackBufferID = GetImplAs<BufferGL>(unpackBuffer)->getBufferID();
}
setPixelUnpackState(unpack.alignment, unpack.rowLength, unpack.skipRows, unpack.skipPixels,
unpack.imageHeight, unpack.skipImages);
unpack.imageHeight, unpack.skipImages, unpackBufferID);
}
void StateManagerGL::setPixelUnpackState(GLint alignment,
......@@ -268,7 +270,8 @@ void StateManagerGL::setPixelUnpackState(GLint alignment,
GLint skipRows,
GLint skipPixels,
GLint imageHeight,
GLint skipImages)
GLint skipImages,
GLuint unpackBuffer)
{
if (mUnpackAlignment != alignment)
{
......@@ -317,22 +320,26 @@ void StateManagerGL::setPixelUnpackState(GLint alignment,
// TODO: set dirty bit once one exists
}
bindBuffer(GL_PIXEL_UNPACK_BUFFER, unpackBuffer);
}
void StateManagerGL::setPixelPackState(const gl::PixelPackState &pack)
{
GLuint packBufferID = 0;
const gl::Buffer *packBuffer = pack.pixelBuffer.get();
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,
GLint rowLength,
GLint skipRows,
GLint skipPixels)
GLint skipPixels,
GLuint packBuffer)
{
if (mPackAlignment != alignment)
{
......@@ -365,6 +372,8 @@ void StateManagerGL::setPixelPackState(GLint alignment,
// TODO: set dirty bit once one exists
}
bindBuffer(GL_PIXEL_PACK_BUFFER, packBuffer);
}
void StateManagerGL::bindFramebuffer(GLenum type, GLuint framebuffer)
......
......@@ -101,9 +101,14 @@ class StateManagerGL final : angle::NonCopyable
GLint skipRows,
GLint skipPixels,
GLint imageHeight,
GLint skipImages);
GLint skipImages,
GLuint unpackBuffer);
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,
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