[vulkan] Add toggle to control SPIR-V validation It is enabled by default whenever the build flag is enabled. Once Graphite has been updated to disable it, we can remove the build flag guard to turn it on in Chrome for all platforms. Fixed: 473526182 Change-Id: I457b992655fcfc9dddb050939568f81d072b08d0 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/284857 Reviewed-by: dan sinclair <dsinclair@chromium.org> Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/dawn/native/Toggles.cpp b/src/dawn/native/Toggles.cpp index c70f1e3..0f862d3 100644 --- a/src/dawn/native/Toggles.cpp +++ b/src/dawn/native/Toggles.cpp
@@ -730,6 +730,9 @@ {"vulkan_use_dynamic_rendering", "Makes use of VK_KHR_dynamic_rendering to implement WebGPU RenderPass.", "https://crbug.com/dawn/463893794", ToggleStage::Device}}, + {Toggle::EnableSpirvValidation, + {"enable_spirv_validation", "Enable validation of SPIR-V generated by Tint.", + "https://crbug.com/473526415", ToggleStage::Device}}, {Toggle::WaitIsThreadSafe, {"wait_is_thread_safe", "WaitFor* functions are thread-safe and can be called without the device-lock if implicit "
diff --git a/src/dawn/native/Toggles.h b/src/dawn/native/Toggles.h index a2e27da..52675fa 100644 --- a/src/dawn/native/Toggles.h +++ b/src/dawn/native/Toggles.h
@@ -175,6 +175,7 @@ VulkanEnableF16OnNvidia, EnableRenderDocProcessInjection, VulkanUseDynamicRendering, + EnableSpirvValidation, // Once all backends have been updated to be thread safe for waiting, we can remove this toggle. WaitIsThreadSafe,
diff --git a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp index e0da269..fc198b2 100644 --- a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp +++ b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
@@ -1172,6 +1172,10 @@ // when dynamic rendering is enabled. deviceToggles->Default(Toggle::VulkanUseDynamicRendering, false); } + + // Enable validation of generated SPIR-V by default. + // Graphite and other native clients may turn this off. + deviceToggles->Default(Toggle::EnableSpirvValidation, true); } ResultOrError<Ref<DeviceBase>> PhysicalDevice::CreateDeviceImpl(
diff --git a/src/dawn/native/vulkan/ShaderModuleVk.cpp b/src/dawn/native/vulkan/ShaderModuleVk.cpp index a97f159..7b85ed0 100644 --- a/src/dawn/native/vulkan/ShaderModuleVk.cpp +++ b/src/dawn/native/vulkan/ShaderModuleVk.cpp
@@ -328,7 +328,7 @@ "Vulkan.CompileShaderToSPIRV"); #ifdef DAWN_ENABLE_SPIRV_VALIDATION - { + if (GetDevice()->IsToggleEnabled(Toggle::EnableSpirvValidation)) { SCOPED_DAWN_HISTOGRAM_TIMER_MICROS(GetDevice()->GetPlatform(), "Vulkan.ValidateSpirv"); // Validate and if required dump the compiled SPIR-V code.