Commit 59d756e5 by Geoff Lang Committed by Commit Bot

Vulkan: Add a test for scissored depth and stencil clears.

BUG=angleproject:3081 Change-Id: Ib6b17dbabdcb2a5ad5cf34b306bf5d3bd683ba0a Reviewed-on: https://chromium-review.googlesource.com/c/1415913 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org>
parent 59b1ed4a
......@@ -361,6 +361,69 @@ TEST_P(ClearTest, DepthRangefIsClamped)
EXPECT_EQ(0.0f, depth_range[1]);
}
// Test scissored clears on Depth16
TEST_P(ClearTest, Depth16Scissored)
{
// Crashes on NVIDIA and Android in FramebufferVk::clearWithClearAttachments.
// http://anglebug.com/3081
ANGLE_SKIP_TEST_IF(IsNVIDIA() || IsAndroid());
GLRenderbuffer renderbuffer;
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
constexpr int kRenderbufferSize = 64;
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, kRenderbufferSize,
kRenderbufferSize);
GLFramebuffer fbo;
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbuffer);
glClearDepthf(0.0f);
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_SCISSOR_TEST);
constexpr int kNumSteps = 13;
for (int ndx = 1; ndx < kNumSteps; ndx++)
{
float perc = static_cast<float>(ndx) / static_cast<float>(kNumSteps);
glScissor(0, 0, static_cast<int>(kRenderbufferSize * perc),
static_cast<int>(kRenderbufferSize * perc));
glClearDepthf(perc);
glClear(GL_DEPTH_BUFFER_BIT);
}
}
// Test scissored clears on Stencil8
TEST_P(ClearTest, Stencil8Scissored)
{
// Crashes on NVIDIA and Android in FramebufferVk::clearWithClearAttachments.
// http://anglebug.com/3081
ANGLE_SKIP_TEST_IF(IsNVIDIA() || IsAndroid());
GLRenderbuffer renderbuffer;
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
constexpr int kRenderbufferSize = 64;
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, kRenderbufferSize, kRenderbufferSize);
GLFramebuffer fbo;
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, renderbuffer);
glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT);
glEnable(GL_SCISSOR_TEST);
constexpr int kNumSteps = 13;
for (int ndx = 1; ndx < kNumSteps; ndx++)
{
float perc = static_cast<float>(ndx) / static_cast<float>(kNumSteps);
glScissor(0, 0, static_cast<int>(kRenderbufferSize * perc),
static_cast<int>(kRenderbufferSize * perc));
glClearStencil(static_cast<int>(perc * 255.0f));
glClear(GL_STENCIL_BUFFER_BIT);
}
}
// Requires ES3
// This tests a bug where in a masked clear when calling "ClearBuffer", we would
// mistakenly clear every channel (including the masked-out ones)
......
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