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;