Enable texture view usage for externalTexture binding by default
This CL enables using a texture view for an external binding behind a
toggle disabled by default.
Bug: 398752857
Change-Id: I0c9046203331cd6e049abfc94b858ec8e2bbb452
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/234014
Reviewed-by: Loko Kung <lokokung@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Fr <beaufort.francois@gmail.com>
diff --git a/src/dawn/native/BindGroup.cpp b/src/dawn/native/BindGroup.cpp
index 82660d1..0fb790c 100644
--- a/src/dawn/native/BindGroup.cpp
+++ b/src/dawn/native/BindGroup.cpp
@@ -510,8 +510,7 @@
layout->GetExternalTextureBindingExpansionMap()));
continue;
}
- // TODO(crbug.com/398752857): Make this controlled by a toggle before shipping.
- if (device->IsToggleEnabled(Toggle::AllowUnsafeAPIs)) {
+ if (!device->IsToggleEnabled(Toggle::DisableTextureViewBindingUsedAsExternalTexture)) {
DAWN_TRY_CONTEXT(ValidateTextureViewBindingUsedAsExternalTexture(device, entry),
"validating entries[%u] as a TextureView."
"\nExpected entry layout: %s",
diff --git a/src/dawn/native/Toggles.cpp b/src/dawn/native/Toggles.cpp
index f8a6ff0..eea9cf1 100644
--- a/src/dawn/native/Toggles.cpp
+++ b/src/dawn/native/Toggles.cpp
@@ -169,6 +169,10 @@
{Toggle::MetalEnableVertexPulling,
{"metal_enable_vertex_pulling", "Uses vertex pulling to protect out-of-bounds reads on Metal",
"https://crbug.com/dawn/480", ToggleStage::Device}},
+ {Toggle::DisableTextureViewBindingUsedAsExternalTexture,
+ {"disable_texture_view_binding_used_as_external_texture",
+ "Disable using a texture view for an externalTexture binding.", "http://crbug.com/398752857",
+ ToggleStage::Device}},
{Toggle::AllowUnsafeAPIs,
{"allow_unsafe_apis",
"Suppresses validation errors on API entry points or parameter combinations that aren't "
diff --git a/src/dawn/native/Toggles.h b/src/dawn/native/Toggles.h
index d01ee76..bf93407 100644
--- a/src/dawn/native/Toggles.h
+++ b/src/dawn/native/Toggles.h
@@ -65,6 +65,7 @@
UseDXC,
DisableRobustness,
MetalEnableVertexPulling,
+ DisableTextureViewBindingUsedAsExternalTexture,
AllowUnsafeAPIs,
FlushBeforeClientWaitSync,
UseTempBufferInSmallFormatTextureToTextureCopyFromGreaterToLessMipLevel,
diff --git a/src/dawn/tests/unittests/validation/ExternalTextureTests.cpp b/src/dawn/tests/unittests/validation/ExternalTextureTests.cpp
index 6bdee99..5e95c2b 100644
--- a/src/dawn/tests/unittests/validation/ExternalTextureTests.cpp
+++ b/src/dawn/tests/unittests/validation/ExternalTextureTests.cpp
@@ -617,16 +617,26 @@
device, {{0, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform}});
ASSERT_DEVICE_ERROR(utils::MakeBindGroup(device, bgl, {{0, externalTexture}}));
}
+
+ // Bind group creation should fail when a sampler is present in the
+ // corresponding slot of the bind group layout.
+ {
+ wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
+ device, {{0, wgpu::ShaderStage::Fragment, wgpu::BufferBindingType::Uniform}});
+ ASSERT_DEVICE_ERROR(utils::MakeBindGroup(device, bgl, {{0, device.CreateSampler()}}));
+ }
}
-class ExternalTextureTestSafe : public ExternalTextureTest {
+class ExternalTextureTestEnabledToggle : public ExternalTextureTest {
protected:
- bool AllowUnsafeAPIs() override { return false; }
+ std::vector<const char*> GetEnabledToggles() override {
+ return {"disable_texture_view_binding_used_as_external_texture"};
+ }
};
// Regression test for crbug.com/1343099 where BindGroup validation let other binding types be used
// for external texture bindings.
-TEST_F(ExternalTextureTestSafe, TextureViewBindingDoesntMatch) {
+TEST_F(ExternalTextureTestEnabledToggle, TextureViewBindingDoesntMatch) {
wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
device, {{0, wgpu::ShaderStage::Fragment, &utils::kExternalTextureBindingLayout}});