Commit 25bbf5d7 by Geoff Lang Committed by Commit Bot

GL: Use ANGLE_GL_TRY when setting pixel pack and unpack state.

Bug: angleproject:3020 Change-Id: Ifd36973d66c850d0d0520d9721ab9e5294489b39 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134424Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
parent 1dc0d394
......@@ -280,9 +280,9 @@ angle::Result BlitGL::copyImageToLUMAWorkaroundTexture(const gl::Context *contex
GLenum readType = source->getImplementationColorReadType(context);
gl::PixelUnpackState unpack;
mStateManager->setPixelUnpackState(unpack);
mStateManager->setPixelUnpackBuffer(
context->getState().getTargetBuffer(gl::BufferBinding::PixelUnpack));
ANGLE_TRY(mStateManager->setPixelUnpackState(context, unpack));
ANGLE_TRY(mStateManager->setPixelUnpackBuffer(
context, context->getState().getTargetBuffer(gl::BufferBinding::PixelUnpack)));
ANGLE_GL_TRY_ALWAYS_CHECK(
context,
mFunctions->texImage2D(ToGLenum(target), static_cast<GLint>(level), internalFormat,
......@@ -779,8 +779,8 @@ angle::Result BlitGL::copySubTextureCPUReadback(const gl::Context *context,
gl::PixelUnpackState unpack;
unpack.alignment = 1;
mStateManager->setPixelUnpackState(unpack);
mStateManager->setPixelUnpackBuffer(nullptr);
ANGLE_TRY(mStateManager->setPixelUnpackState(context, unpack));
ANGLE_TRY(mStateManager->setPixelUnpackBuffer(context, nullptr));
ANGLE_GL_TRY(context, mFunctions->readPixels(readPixelsArea.x, readPixelsArea.y,
readPixelsArea.width, readPixelsArea.height,
readPixelsFormat, GL_UNSIGNED_BYTE, sourceMemory));
......@@ -797,8 +797,8 @@ angle::Result BlitGL::copySubTextureCPUReadback(const gl::Context *context,
gl::PixelPackState pack;
pack.alignment = 1;
mStateManager->setPixelPackState(pack);
mStateManager->setPixelPackBuffer(nullptr);
ANGLE_TRY(mStateManager->setPixelPackState(context, pack));
ANGLE_TRY(mStateManager->setPixelPackBuffer(context, nullptr));
nativegl::TexSubImageFormat texSubImageFormat =
nativegl::GetTexSubImageFormat(mFunctions, mFeatures, destFormat, destType);
......@@ -1181,8 +1181,8 @@ angle::Result BlitGL::orphanScratchTextures(const gl::Context *context)
{
mStateManager->bindTexture(gl::TextureType::_2D, texture);
gl::PixelUnpackState unpack;
mStateManager->setPixelUnpackState(unpack);
mStateManager->setPixelUnpackBuffer(nullptr);
ANGLE_TRY(mStateManager->setPixelUnpackState(context, unpack));
ANGLE_TRY(mStateManager->setPixelUnpackBuffer(context, nullptr));
if (mFunctions->isAtLeastGL(gl::Version(3, 3)))
{
constexpr GLint swizzle[4] = {GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA};
......
......@@ -1468,13 +1468,14 @@ angle::Result FramebufferGL::readPixelsRowByRow(const gl::Context *context,
gl::PixelPackState directPack;
directPack.alignment = 1;
stateManager->setPixelPackState(directPack);
ANGLE_TRY(stateManager->setPixelPackState(context, directPack));
GLubyte *readbackPixels = workaround.Pixels();
readbackPixels += skipBytes;
for (GLint y = area.y; y < area.y + area.height; ++y)
{
functions->readPixels(area.x, y, area.width, 1, format, type, readbackPixels);
ANGLE_GL_TRY(context,
functions->readPixels(area.x, y, area.width, 1, format, type, readbackPixels));
readbackPixels += rowBytes;
}
......@@ -1523,21 +1524,21 @@ angle::Result FramebufferGL::readPixelsAllAtOnce(const gl::Context *context,
GLint height = area.height - readLastRowSeparately;
if (height > 0)
{
stateManager->setPixelPackState(pack);
functions->readPixels(area.x, area.y, area.width, height, format, type,
workaround.Pixels());
ANGLE_TRY(stateManager->setPixelPackState(context, pack));
ANGLE_GL_TRY(context, functions->readPixels(area.x, area.y, area.width, height, format,
type, workaround.Pixels()));
}
if (readLastRowSeparately)
{
gl::PixelPackState directPack;
directPack.alignment = 1;
stateManager->setPixelPackState(directPack);
ANGLE_TRY(stateManager->setPixelPackState(context, directPack));
GLubyte *readbackPixels = workaround.Pixels();
readbackPixels += skipBytes + (area.height - 1) * rowBytes;
functions->readPixels(area.x, area.y + area.height - 1, area.width, 1, format, type,
readbackPixels);
ANGLE_GL_TRY(context, functions->readPixels(area.x, area.y + area.height - 1, area.width, 1,
format, type, readbackPixels));
}
if (workaround.IsEnabled())
......
......@@ -473,12 +473,13 @@ void StateManagerGL::bindImageTexture(size_t unit,
}
}
void StateManagerGL::setPixelUnpackState(const gl::PixelUnpackState &unpack)
angle::Result StateManagerGL::setPixelUnpackState(const gl::Context *context,
const gl::PixelUnpackState &unpack)
{
if (mUnpackAlignment != unpack.alignment)
{
mUnpackAlignment = unpack.alignment;
mFunctions->pixelStorei(GL_UNPACK_ALIGNMENT, mUnpackAlignment);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_UNPACK_ALIGNMENT, mUnpackAlignment));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_UNPACK_STATE);
}
......@@ -486,7 +487,7 @@ void StateManagerGL::setPixelUnpackState(const gl::PixelUnpackState &unpack)
if (mUnpackRowLength != unpack.rowLength)
{
mUnpackRowLength = unpack.rowLength;
mFunctions->pixelStorei(GL_UNPACK_ROW_LENGTH, mUnpackRowLength);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_UNPACK_ROW_LENGTH, mUnpackRowLength));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_UNPACK_STATE);
}
......@@ -494,7 +495,7 @@ void StateManagerGL::setPixelUnpackState(const gl::PixelUnpackState &unpack)
if (mUnpackSkipRows != unpack.skipRows)
{
mUnpackSkipRows = unpack.skipRows;
mFunctions->pixelStorei(GL_UNPACK_SKIP_ROWS, mUnpackSkipRows);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_UNPACK_SKIP_ROWS, mUnpackSkipRows));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_UNPACK_STATE);
}
......@@ -502,7 +503,7 @@ void StateManagerGL::setPixelUnpackState(const gl::PixelUnpackState &unpack)
if (mUnpackSkipPixels != unpack.skipPixels)
{
mUnpackSkipPixels = unpack.skipPixels;
mFunctions->pixelStorei(GL_UNPACK_SKIP_PIXELS, mUnpackSkipPixels);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_UNPACK_SKIP_PIXELS, mUnpackSkipPixels));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_UNPACK_STATE);
}
......@@ -510,7 +511,7 @@ void StateManagerGL::setPixelUnpackState(const gl::PixelUnpackState &unpack)
if (mUnpackImageHeight != unpack.imageHeight)
{
mUnpackImageHeight = unpack.imageHeight;
mFunctions->pixelStorei(GL_UNPACK_IMAGE_HEIGHT, mUnpackImageHeight);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_UNPACK_IMAGE_HEIGHT, mUnpackImageHeight));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_UNPACK_STATE);
}
......@@ -518,13 +519,16 @@ void StateManagerGL::setPixelUnpackState(const gl::PixelUnpackState &unpack)
if (mUnpackSkipImages != unpack.skipImages)
{
mUnpackSkipImages = unpack.skipImages;
mFunctions->pixelStorei(GL_UNPACK_SKIP_IMAGES, mUnpackSkipImages);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_UNPACK_SKIP_IMAGES, mUnpackSkipImages));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_UNPACK_STATE);
}
return angle::Result::Continue;
}
void StateManagerGL::setPixelUnpackBuffer(const gl::Buffer *pixelBuffer)
angle::Result StateManagerGL::setPixelUnpackBuffer(const gl::Context *context,
const gl::Buffer *pixelBuffer)
{
GLuint bufferID = 0;
if (pixelBuffer != nullptr)
......@@ -532,14 +536,17 @@ void StateManagerGL::setPixelUnpackBuffer(const gl::Buffer *pixelBuffer)
bufferID = GetImplAs<BufferGL>(pixelBuffer)->getBufferID();
}
bindBuffer(gl::BufferBinding::PixelUnpack, bufferID);
return angle::Result::Continue;
}
void StateManagerGL::setPixelPackState(const gl::PixelPackState &pack)
angle::Result StateManagerGL::setPixelPackState(const gl::Context *context,
const gl::PixelPackState &pack)
{
if (mPackAlignment != pack.alignment)
{
mPackAlignment = pack.alignment;
mFunctions->pixelStorei(GL_PACK_ALIGNMENT, mPackAlignment);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_PACK_ALIGNMENT, mPackAlignment));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_PACK_STATE);
}
......@@ -547,7 +554,7 @@ void StateManagerGL::setPixelPackState(const gl::PixelPackState &pack)
if (mPackRowLength != pack.rowLength)
{
mPackRowLength = pack.rowLength;
mFunctions->pixelStorei(GL_PACK_ROW_LENGTH, mPackRowLength);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_PACK_ROW_LENGTH, mPackRowLength));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_PACK_STATE);
}
......@@ -555,7 +562,7 @@ void StateManagerGL::setPixelPackState(const gl::PixelPackState &pack)
if (mPackSkipRows != pack.skipRows)
{
mPackSkipRows = pack.skipRows;
mFunctions->pixelStorei(GL_PACK_SKIP_ROWS, mPackSkipRows);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_PACK_SKIP_ROWS, mPackSkipRows));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_PACK_STATE);
}
......@@ -563,13 +570,16 @@ void StateManagerGL::setPixelPackState(const gl::PixelPackState &pack)
if (mPackSkipPixels != pack.skipPixels)
{
mPackSkipPixels = pack.skipPixels;
mFunctions->pixelStorei(GL_PACK_SKIP_PIXELS, mPackSkipPixels);
ANGLE_GL_TRY(context, mFunctions->pixelStorei(GL_PACK_SKIP_PIXELS, mPackSkipPixels));
mLocalDirtyBits.set(gl::State::DIRTY_BIT_PACK_STATE);
}
return angle::Result::Continue;
}
void StateManagerGL::setPixelPackBuffer(const gl::Buffer *pixelBuffer)
angle::Result StateManagerGL::setPixelPackBuffer(const gl::Context *context,
const gl::Buffer *pixelBuffer)
{
GLuint bufferID = 0;
if (pixelBuffer != nullptr)
......@@ -577,6 +587,8 @@ void StateManagerGL::setPixelPackBuffer(const gl::Buffer *pixelBuffer)
bufferID = GetImplAs<BufferGL>(pixelBuffer)->getBufferID();
}
bindBuffer(gl::BufferBinding::PixelPack, bufferID);
return angle::Result::Continue;
}
void StateManagerGL::bindFramebuffer(GLenum type, GLuint framebuffer)
......@@ -1865,16 +1877,18 @@ angle::Result StateManagerGL::syncState(const gl::Context *context,
setClearStencil(state.getStencilClearValue());
break;
case gl::State::DIRTY_BIT_UNPACK_STATE:
setPixelUnpackState(state.getUnpackState());
ANGLE_TRY(setPixelUnpackState(context, state.getUnpackState()));
break;
case gl::State::DIRTY_BIT_UNPACK_BUFFER_BINDING:
setPixelUnpackBuffer(state.getTargetBuffer(gl::BufferBinding::PixelUnpack));
ANGLE_TRY(setPixelUnpackBuffer(
context, state.getTargetBuffer(gl::BufferBinding::PixelUnpack)));
break;
case gl::State::DIRTY_BIT_PACK_STATE:
setPixelPackState(state.getPackState());
ANGLE_TRY(setPixelPackState(context, state.getPackState()));
break;
case gl::State::DIRTY_BIT_PACK_BUFFER_BINDING:
setPixelPackBuffer(state.getTargetBuffer(gl::BufferBinding::PixelPack));
ANGLE_TRY(setPixelPackBuffer(context,
state.getTargetBuffer(gl::BufferBinding::PixelPack)));
break;
case gl::State::DIRTY_BIT_DITHER_ENABLED:
setDitherEnabled(state.isDitherEnabled());
......
......@@ -126,10 +126,11 @@ class StateManagerGL final : angle::NonCopyable
void setClearDepth(float clearDepth);
void setClearStencil(GLint clearStencil);
void setPixelUnpackState(const gl::PixelUnpackState &unpack);
void setPixelUnpackBuffer(const gl::Buffer *pixelBuffer);
void setPixelPackState(const gl::PixelPackState &pack);
void setPixelPackBuffer(const gl::Buffer *pixelBuffer);
angle::Result setPixelUnpackState(const gl::Context *context,
const gl::PixelUnpackState &unpack);
angle::Result setPixelUnpackBuffer(const gl::Context *context, const gl::Buffer *pixelBuffer);
angle::Result setPixelPackState(const gl::Context *context, const gl::PixelPackState &pack);
angle::Result setPixelPackBuffer(const gl::Context *context, const gl::Buffer *pixelBuffer);
void setFramebufferSRGBEnabled(const gl::Context *context, bool enabled);
void setFramebufferSRGBEnabledForFramebuffer(const gl::Context *context,
......
......@@ -280,7 +280,7 @@ angle::Result TextureGL::reserveTexImageToBeFilled(const gl::Context *context,
GLenum type)
{
StateManagerGL *stateManager = GetStateManagerGL(context);
stateManager->setPixelUnpackBuffer(nullptr);
ANGLE_TRY(stateManager->setPixelUnpackBuffer(context, nullptr));
ANGLE_TRY(setImageHelper(context, target, level, internalFormat, size, format, type, nullptr));
return angle::Result::Continue;
}
......@@ -372,8 +372,8 @@ angle::Result TextureGL::setSubImageRowByRowWorkaround(const gl::Context *contex
gl::PixelUnpackState directUnpack;
directUnpack.alignment = 1;
stateManager->setPixelUnpackState(directUnpack);
stateManager->setPixelUnpackBuffer(unpackBuffer);
ANGLE_TRY(stateManager->setPixelUnpackState(context, directUnpack));
ANGLE_TRY(stateManager->setPixelUnpackBuffer(context, unpackBuffer));
const gl::InternalFormat &glFormat = gl::GetInternalFormatInfo(format, type);
GLuint rowBytes = 0;
......@@ -446,8 +446,8 @@ angle::Result TextureGL::setSubImagePaddingWorkaround(const gl::Context *context
ANGLE_CHECK_GL_MATH(contextGL, glFormat.computeSkipBytes(type, rowBytes, imageBytes, unpack,
useTexImage3D, &skipBytes));
stateManager->setPixelUnpackState(unpack);
stateManager->setPixelUnpackBuffer(unpackBuffer);
ANGLE_TRY(stateManager->setPixelUnpackState(context, unpack));
ANGLE_TRY(stateManager->setPixelUnpackBuffer(context, unpackBuffer));
gl::PixelUnpackState directUnpack;
directUnpack.alignment = 1;
......@@ -477,7 +477,7 @@ angle::Result TextureGL::setSubImagePaddingWorkaround(const gl::Context *context
}
// Upload the last row of the last slice "manually"
stateManager->setPixelUnpackState(directUnpack);
ANGLE_TRY(stateManager->setPixelUnpackState(context, directUnpack));
GLint lastRowOffset =
skipBytes + (area.depth - 1) * imageBytes + (area.height - 1) * rowBytes;
......@@ -500,7 +500,7 @@ angle::Result TextureGL::setSubImagePaddingWorkaround(const gl::Context *context
}
// Upload the last row "manually"
stateManager->setPixelUnpackState(directUnpack);
ANGLE_TRY(stateManager->setPixelUnpackState(context, directUnpack));
GLint lastRowOffset = skipBytes + (area.height - 1) * rowBytes;
const GLubyte *lastRowPixels = pixels + lastRowOffset;
......@@ -651,8 +651,8 @@ angle::Result TextureGL::copyImage(const gl::Context *context,
gl::PixelUnpackState unpack;
unpack.alignment = 1;
stateManager->setPixelUnpackState(unpack);
stateManager->setPixelUnpackBuffer(nullptr);
ANGLE_TRY(stateManager->setPixelUnpackState(context, unpack));
ANGLE_TRY(stateManager->setPixelUnpackBuffer(context, nullptr));
ANGLE_GL_TRY_ALWAYS_CHECK(
context, functions->texImage2D(ToGLenum(target), static_cast<GLint>(level),
......@@ -1937,7 +1937,7 @@ angle::Result TextureGL::initializeContents(const gl::Context *context,
gl::PixelUnpackState unpackState;
unpackState.alignment = 1;
stateManager->setPixelUnpackState(unpackState);
ANGLE_TRY(stateManager->setPixelUnpackState(context, unpackState));
GLuint prevUnpackBuffer = stateManager->getBufferID(gl::BufferBinding::PixelUnpack);
stateManager->bindBuffer(gl::BufferBinding::PixelUnpack, 0);
......@@ -2009,7 +2009,7 @@ angle::Result TextureGL::initializeContents(const gl::Context *context,
// Reset the pixel unpack state. Because this call is made after synchronizing dirty bits in a
// glTexImage call, we need to make sure that the texture data to be uploaded later has the
// expected unpack state.
stateManager->setPixelUnpackState(context->getState().getUnpackState());
ANGLE_TRY(stateManager->setPixelUnpackState(context, context->getState().getUnpackState()));
stateManager->bindBuffer(gl::BufferBinding::PixelUnpack, prevUnpackBuffer);
return angle::Result::Continue;
......
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