Commit 5b46a680 by Geoff Lang Committed by Commit Bot

Clear the swizzle cache in TextureStorage11::setData.

BUG=angleproject:1494 Change-Id: I67471e4b961b3d8374c2da84394ead743939c225 Reviewed-on: https://chromium-review.googlesource.com/380095 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent d08163d7
...@@ -613,6 +613,8 @@ gl::Error TextureStorage11::setData(const gl::ImageIndex &index, ...@@ -613,6 +613,8 @@ gl::Error TextureStorage11::setData(const gl::ImageIndex &index,
{ {
ASSERT(!image->isDirty()); ASSERT(!image->isDirty());
invalidateSwizzleCacheLevel(index.mipIndex);
ID3D11Resource *resource = nullptr; ID3D11Resource *resource = nullptr;
ANGLE_TRY(getResource(&resource)); ANGLE_TRY(getResource(&resource));
ASSERT(resource); ASSERT(resource);
......
...@@ -399,6 +399,37 @@ TEST_P(SwizzleIntegerTest, RGB8UI_2D) ...@@ -399,6 +399,37 @@ TEST_P(SwizzleIntegerTest, RGB8UI_2D)
runTest2D(); runTest2D();
} }
// Test that updating the texture data still generates the correct swizzles
TEST_P(SwizzleTest, SubUpdate)
{
GLColor data(1, 64, 128, 200);
init2DTexture(GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, &data);
glUseProgram(mProgram);
glBindTexture(GL_TEXTURE_2D, mTexture);
glUniform1i(mTextureUniformLocation, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_RED);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED);
glClear(GL_COLOR_BUFFER_BIT);
drawQuad(mProgram, "position", 0.5f);
GLColor expectedData(data.R, data.R, data.R, data.R);
EXPECT_PIXEL_COLOR_EQ(0, 0, expectedData);
GLColor updateData(32, 234, 28, 232);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &updateData);
glClear(GL_COLOR_BUFFER_BIT);
drawQuad(mProgram, "position", 0.5f);
GLColor expectedUpdateData(updateData.R, updateData.R, updateData.R, updateData.R);
EXPECT_PIXEL_COLOR_EQ(0, 0, expectedUpdateData);
}
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against. // Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
ANGLE_INSTANTIATE_TEST(SwizzleTest, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGL(3, 3), ES3_OPENGLES()); ANGLE_INSTANTIATE_TEST(SwizzleTest, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGL(3, 3), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(SwizzleIntegerTest, ANGLE_INSTANTIATE_TEST(SwizzleIntegerTest,
......
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