Commit 9b050f84 by Qin Jiajia Committed by Commit Bot

Fix that 0 is a valid memory barrier

Bug: angleproject:2280 Change-Id: Iad82d5838a7efdb6f6287aafb9ab980e9e86468d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1496017Reviewed-by: 's avatarJamie Madill (use @chromium please) <jmadill@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>
parent eb986426
...@@ -1744,7 +1744,7 @@ bool ValidateMemoryBarrier(Context *context, GLbitfield barriers) ...@@ -1744,7 +1744,7 @@ bool ValidateMemoryBarrier(Context *context, GLbitfield barriers)
GL_PIXEL_BUFFER_BARRIER_BIT | GL_TEXTURE_UPDATE_BARRIER_BIT | GL_BUFFER_UPDATE_BARRIER_BIT | GL_PIXEL_BUFFER_BARRIER_BIT | GL_TEXTURE_UPDATE_BARRIER_BIT | GL_BUFFER_UPDATE_BARRIER_BIT |
GL_FRAMEBUFFER_BARRIER_BIT | GL_TRANSFORM_FEEDBACK_BARRIER_BIT | GL_FRAMEBUFFER_BARRIER_BIT | GL_TRANSFORM_FEEDBACK_BARRIER_BIT |
GL_ATOMIC_COUNTER_BARRIER_BIT | GL_SHADER_STORAGE_BARRIER_BIT; GL_ATOMIC_COUNTER_BARRIER_BIT | GL_SHADER_STORAGE_BARRIER_BIT;
if ((barriers & ~supported_barrier_bits) != 0) if (barriers == 0 || (barriers & ~supported_barrier_bits) != 0)
{ {
context->validationError(GL_INVALID_VALUE, kInvalidMemoryBarrierBit); context->validationError(GL_INVALID_VALUE, kInvalidMemoryBarrierBit);
return false; return false;
...@@ -1770,7 +1770,7 @@ bool ValidateMemoryBarrierByRegion(Context *context, GLbitfield barriers) ...@@ -1770,7 +1770,7 @@ bool ValidateMemoryBarrierByRegion(Context *context, GLbitfield barriers)
GL_SHADER_IMAGE_ACCESS_BARRIER_BIT | GL_SHADER_IMAGE_ACCESS_BARRIER_BIT |
GL_SHADER_STORAGE_BARRIER_BIT | GL_SHADER_STORAGE_BARRIER_BIT |
GL_TEXTURE_FETCH_BARRIER_BIT | GL_UNIFORM_BARRIER_BIT; GL_TEXTURE_FETCH_BARRIER_BIT | GL_UNIFORM_BARRIER_BIT;
if ((barriers & ~supported_barrier_bits) != 0) if (barriers == 0 || (barriers & ~supported_barrier_bits) != 0)
{ {
context->validationError(GL_INVALID_VALUE, kInvalidMemoryBarrierBit); context->validationError(GL_INVALID_VALUE, kInvalidMemoryBarrierBit);
return false; return false;
......
...@@ -2749,6 +2749,14 @@ void main() ...@@ -2749,6 +2749,14 @@ void main()
EXPECT_EQ(expectedValue, outputValues); EXPECT_EQ(expectedValue, outputValues);
} }
// Test that invalid memory barrier will produce an error.
TEST_P(ComputeShaderTest, InvalidMemoryBarrier)
{
GLbitfield barriers = 0;
glMemoryBarrier(barriers);
EXPECT_GL_ERROR(GL_INVALID_VALUE);
}
ANGLE_INSTANTIATE_TEST(ComputeShaderTest, ES31_OPENGL(), ES31_OPENGLES(), ES31_D3D11()); ANGLE_INSTANTIATE_TEST(ComputeShaderTest, ES31_OPENGL(), ES31_OPENGLES(), ES31_D3D11());
ANGLE_INSTANTIATE_TEST(ComputeShaderTestES3, ES3_OPENGL(), ES3_OPENGLES()); ANGLE_INSTANTIATE_TEST(ComputeShaderTestES3, ES3_OPENGL(), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(WebGL2ComputeTest, ES31_D3D11()); ANGLE_INSTANTIATE_TEST(WebGL2ComputeTest, ES31_D3D11());
......
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