OpenGL: clean up firstInstance handling. Now that we're offsetting instanceID by firstInstance via a shader transform, we can retire the use of glDrawArraysInstancedBaseInstance[ANGLE]. These are unsupported on native ES 3.1 drivers. Also skip some tests if IsCompatibilityMode() for things that are expected to fail in Compat (per-draw-buffer blend state). Bug: 342316802 Change-Id: Ic05bc6467a02a5ead6f0d5409d2515f8ad63cf6e Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/189740 Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/src/dawn/native/opengl/CommandBufferGL.cpp b/src/dawn/native/opengl/CommandBufferGL.cpp index 4f9bb7e..cf77e8a 100644 --- a/src/dawn/native/opengl/CommandBufferGL.cpp +++ b/src/dawn/native/opengl/CommandBufferGL.cpp
@@ -1120,20 +1120,8 @@ gl.Uniform1ui(PipelineLayout::PushConstantLocation::FirstInstance, draw->firstInstance); } - if (gl.DrawArraysInstancedBaseInstanceANGLE) { - gl.DrawArraysInstancedBaseInstanceANGLE( - lastPipeline->GetGLPrimitiveTopology(), draw->firstVertex, - draw->vertexCount, draw->instanceCount, draw->firstInstance); - } else if (draw->firstInstance > 0) { - gl.DrawArraysInstancedBaseInstance(lastPipeline->GetGLPrimitiveTopology(), - draw->firstVertex, draw->vertexCount, - draw->instanceCount, draw->firstInstance); - } else { - // This branch is only needed on OpenGL < 4.2 - gl.DrawArraysInstanced(lastPipeline->GetGLPrimitiveTopology(), - draw->firstVertex, draw->vertexCount, - draw->instanceCount); - } + gl.DrawArraysInstanced(lastPipeline->GetGLPrimitiveTopology(), draw->firstVertex, + draw->vertexCount, draw->instanceCount); break; }
diff --git a/src/dawn/tests/end2end/ColorStateTests.cpp b/src/dawn/tests/end2end/ColorStateTests.cpp index 5fd52da..b5a8135 100644 --- a/src/dawn/tests/end2end/ColorStateTests.cpp +++ b/src/dawn/tests/end2end/ColorStateTests.cpp
@@ -799,12 +799,10 @@ // Test that independent color states on render targets works TEST_P(ColorStateTest, IndependentColorState) { - DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_indexed_draw_buffers")); + // Compatibility mode doesn't support per-draw-buffer blending + DAWN_TEST_UNSUPPORTED_IF(IsCompatibilityMode()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); + DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_indexed_draw_buffers")); std::array<wgpu::Texture, 4> renderTargets; std::array<wgpu::TextureView, 4> renderTargetViews; @@ -1133,10 +1131,10 @@ } TEST_P(ColorStateTest, SparseAttachmentsDifferentColorMask) { + // Compatibility mode doesn't support per-draw-buffer color mask + DAWN_TEST_UNSUPPORTED_IF(IsCompatibilityMode()); + DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_indexed_draw_buffers")); - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( struct Outputs {
diff --git a/src/dawn/tests/end2end/CreatePipelineAsyncTests.cpp b/src/dawn/tests/end2end/CreatePipelineAsyncTests.cpp index 4d3ba3b..fd43562 100644 --- a/src/dawn/tests/end2end/CreatePipelineAsyncTests.cpp +++ b/src/dawn/tests/end2end/CreatePipelineAsyncTests.cpp
@@ -1006,12 +1006,9 @@ // Verify calling CreateRenderPipelineAsync() with valid BlendState works on all backends. TEST_P(CreatePipelineAsyncTest, CreateRenderPipelineAsyncWithBlendState) { - DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_indexed_draw_buffers")); + DAWN_SUPPRESS_TEST_IF(IsCompatibilityMode()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); + DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_indexed_draw_buffers")); std::array<wgpu::Texture, 2> renderTargets; std::array<wgpu::TextureView, 2> renderTargetViews;
diff --git a/src/dawn/tests/end2end/QueueTests.cpp b/src/dawn/tests/end2end/QueueTests.cpp index 42cd2c6..be0ce5c 100644 --- a/src/dawn/tests/end2end/QueueTests.cpp +++ b/src/dawn/tests/end2end/QueueTests.cpp
@@ -377,11 +377,6 @@ // Test writing the whole texture for varying texture sizes. TEST_P(QueueWriteTextureTests, VaryingTextureSize) { - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); - for (unsigned int w : {127, 128}) { for (unsigned int h : {63, 64}) { for (unsigned int d : {1, 3, 4}) { @@ -398,11 +393,6 @@ // Test uploading a large amount of data with writeTexture. TEST_P(QueueWriteTextureTests, LargeWriteTexture) { - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); - TextureSpec textureSpec; textureSpec.textureSize = {2048, 2048, 2}; textureSpec.copyOrigin = {0, 0, 0}; @@ -503,11 +493,6 @@ // Test writing to varying mips TEST_P(QueueWriteTextureTests, TextureWriteToMip) { - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); - constexpr uint32_t kWidth = 259; constexpr uint32_t kHeight = 127; @@ -525,11 +510,6 @@ // Test writing with different multiples of texel block size as data offset TEST_P(QueueWriteTextureTests, VaryingDataOffset) { - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); - constexpr uint32_t kWidth = 259; constexpr uint32_t kHeight = 127; @@ -548,11 +528,6 @@ // Test writing with rowsPerImage greater than needed. TEST_P(QueueWriteTextureTests, VaryingRowsPerImage) { - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); - constexpr uint32_t kWidth = 65; constexpr uint32_t kHeight = 31; constexpr uint32_t kDepth = 17; @@ -582,11 +557,6 @@ // Test with bytesPerRow greater than needed TEST_P(QueueWriteTextureTests, VaryingBytesPerRow) { - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); - constexpr uint32_t kWidth = 257; constexpr uint32_t kHeight = 129; @@ -678,10 +648,6 @@ TEST_P(QueueWriteTextureTests, VaryingArrayBytesPerRow) { // TODO(crbug.com/dawn/2095): Failing on ANGLE + SwiftShader, needs investigation. DAWN_SUPPRESS_TEST_IF(IsANGLESwiftShader()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); constexpr uint32_t kWidth = 257; constexpr uint32_t kHeight = 129; @@ -758,11 +724,6 @@ // Testing a special code path: writing when dynamic uploader already contatins some unaligned // data, it might be necessary to use a ring buffer with properly aligned offset. TEST_P(QueueWriteTextureTests, UnalignedDynamicUploader) { - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); - utils::UnalignDynamicUploader(device); constexpr wgpu::Extent3D size = {10, 10, 1}; @@ -838,10 +799,6 @@ TEST_P(QueueWriteTextureSimpleTests, WriteStencilAspectWithSourceOffsetUnalignedTo4) { // TODO(crbug.com/dawn/2095): Failing on ANGLE + SwiftShader, needs investigation. DAWN_SUPPRESS_TEST_IF(IsANGLESwiftShader()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); wgpu::TextureDescriptor textureDescriptor; textureDescriptor.format = wgpu::TextureFormat::Depth24PlusStencil8; @@ -945,10 +902,6 @@ TEST_P(QueueWriteTextureSimpleTests, WriteStencilAspectAfterOtherQueueWriteTextureCalls) { // TODO(crbug.com/dawn/2095): Failing on ANGLE + SwiftShader, needs investigation. DAWN_SUPPRESS_TEST_IF(IsANGLESwiftShader()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 4 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsQualcomm()); - // TODO(crbug.com/dawn/2295): diagnose this failure on Pixel 6 OpenGLES - DAWN_SUPPRESS_TEST_IF(IsOpenGLES() && IsAndroid() && IsARM()); wgpu::TextureDescriptor textureDescriptor; textureDescriptor.format = wgpu::TextureFormat::Depth24PlusStencil8;