Commit 7761ed1d by Shahbaz Youssefi Committed by Angle LUCI CQ

Add test for Vulkan crash with texture MAX_LEVEL change

Bug: chromium:1197431 Change-Id: I05fba78b32a7c5d5f1da0435084f96c510b15ed5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2889600 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarKenneth Russell <kbr@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 2a0ca0fe
...@@ -3322,6 +3322,55 @@ TEST_P(FramebufferTest, BindAndDrawDifferentSizedFBOs) ...@@ -3322,6 +3322,55 @@ TEST_P(FramebufferTest, BindAndDrawDifferentSizedFBOs)
EXPECT_PIXEL_RECT_EQ(0, 0, kLargeWidth, kLargeHeight, GLColor::blue); EXPECT_PIXEL_RECT_EQ(0, 0, kLargeWidth, kLargeHeight, GLColor::blue);
} }
// Regression test based on a fuzzer failure. A crash was encountered in the following situation:
//
// - Texture bound as sampler with MAX_LEVEL 0
// - Framebuffer bound to level 0
// - Draw
// - Texture MAX_LEVEL changed to 1
// - Framebuffer bound to level 1
// - Draw
//
// Notes: Removing the first half removed the crash. MIN_FILTERING of LINEAR vs
// LINEAR_MIPMAP_LINEAR did not make any changes.
TEST_P(FramebufferTest_ES3, FramebufferBindToNewLevelAfterMaxIncreaseShouldntCrash)
{
// http://crbug.com/1197431
ANGLE_SKIP_TEST_IF(IsVulkan());
constexpr char kFS[] = R"(precision mediump float;
uniform sampler2D u_tex0;
void main() {
gl_FragColor = texture2D(u_tex0, vec2(0));
})";
ANGLE_GL_PROGRAM(program, essl1_shaders::vs::Passthrough(), kFS);
glUseProgram(program);
GLTexture mutTex;
glBindTexture(GL_TEXTURE_2D, mutTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 10, 10, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 5, 5, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
GLFramebuffer fb;
glBindFramebuffer(GL_FRAMEBUFFER, fb);
// Attempt a draw with level 0 (feedback loop)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mutTex, 0);
glDrawArrays(GL_POINTS, 0, 1);
// Attempt another draw with level 1.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mutTex, 1);
// This shouldn't crash.
glDrawArrays(GL_POINTS, 0, 1);
}
ANGLE_INSTANTIATE_TEST_ES2(AddMockTextureNoRenderTargetTest); ANGLE_INSTANTIATE_TEST_ES2(AddMockTextureNoRenderTargetTest);
ANGLE_INSTANTIATE_TEST_ES2(FramebufferTest); ANGLE_INSTANTIATE_TEST_ES2(FramebufferTest);
ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(FramebufferFormatsTest); ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(FramebufferFormatsTest);
......
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