From 393cfce49c331ac4b73632d9433a5d652e06ffed Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 15 Jun 2026 00:02:13 +0000 Subject: [PATCH 1/2] Update naga to latest git revision Point naga at gfx-rs/wgpu trunk (rev 78b4dfd) instead of the crates.io v29 release. Adapt to the SPIR-V and MSL backend Options structs, which gained new fields: - emit_int_div_checks (guards integer div/mod against zero and overflow) - trace_ray_argument_validation (SPIR-V; validates traceRays arguments) - task_dispatch_limits, mesh_shader_primitive_indices_clamp (MSL) All set to the naga defaults to preserve existing behavior. https://claude.ai/code/session_01W9jSvpnbXEXmoHFuUVFdUN --- Cargo.toml | 2 +- blade-graphics/src/metal/pipeline.rs | 3 +++ blade-graphics/src/vulkan/pipeline.rs | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index f5f17abf..5887faf9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,7 @@ glam = { version = "0.30", features = ["mint"] } gltf = { version = "1.1", default-features = false } log = "0.4" mint = "0.5" -naga = { version = "29", features = ["wgsl-in", "termcolor"] } +naga = { git = "https://github.com/gfx-rs/wgpu", rev = "78b4dfd0cb1ef5ed208fefe80ae2f855db3609bb", features = ["wgsl-in", "termcolor"] } profiling = "1" slab = "0.4" strum = { version = "0.27", features = ["derive"] } diff --git a/blade-graphics/src/metal/pipeline.rs b/blade-graphics/src/metal/pipeline.rs index 409d82fd..d06d3b67 100644 --- a/blade-graphics/src/metal/pipeline.rs +++ b/blade-graphics/src/metal/pipeline.rs @@ -290,6 +290,9 @@ impl super::Context { bounds_check_policies: naga::proc::BoundsCheckPolicies::default(), zero_initialize_workgroup_memory: false, force_loop_bounding: false, + task_dispatch_limits: None, + mesh_shader_primitive_indices_clamp: true, + emit_int_div_checks: true, }; let pipeline_options = msl::PipelineOptions { diff --git a/blade-graphics/src/vulkan/pipeline.rs b/blade-graphics/src/vulkan/pipeline.rs index 93635cfe..f1e4697f 100644 --- a/blade-graphics/src/vulkan/pipeline.rs +++ b/blade-graphics/src/vulkan/pipeline.rs @@ -53,10 +53,12 @@ impl super::Context { zero_initialize_workgroup_memory: spv::ZeroInitializeWorkgroupMemoryMode::None, force_loop_bounding: false, ray_query_initialization_tracking: true, + trace_ray_argument_validation: true, use_storage_input_output_16: false, debug_info: None, task_dispatch_limits: None, mesh_shader_primitive_indices_clamp: true, + emit_int_div_checks: true, } } From 360d23794d39601bfbcd5ccdc901ba67987bc2a7 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 15 Jun 2026 00:09:52 +0000 Subject: [PATCH 2/2] Disable naga safety guardrails in shader codegen Turn off the naga-injected runtime checks now that they default on: - emit_int_div_checks (SPIR-V + MSL): no div-by-zero / INT_MIN overflow guards - trace_ray_argument_validation (SPIR-V): no traceRays argument checks - ray_query_initialization_tracking (SPIR-V): no ray query state tracking These trade defined-on-misuse behavior for raw codegen speed; blade guarantees correct shader usage at the call sites. https://claude.ai/code/session_01W9jSvpnbXEXmoHFuUVFdUN --- blade-graphics/src/metal/pipeline.rs | 2 +- blade-graphics/src/vulkan/pipeline.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/blade-graphics/src/metal/pipeline.rs b/blade-graphics/src/metal/pipeline.rs index d06d3b67..e5983b1d 100644 --- a/blade-graphics/src/metal/pipeline.rs +++ b/blade-graphics/src/metal/pipeline.rs @@ -292,7 +292,7 @@ impl super::Context { force_loop_bounding: false, task_dispatch_limits: None, mesh_shader_primitive_indices_clamp: true, - emit_int_div_checks: true, + emit_int_div_checks: false, }; let pipeline_options = msl::PipelineOptions { diff --git a/blade-graphics/src/vulkan/pipeline.rs b/blade-graphics/src/vulkan/pipeline.rs index f1e4697f..e812c40c 100644 --- a/blade-graphics/src/vulkan/pipeline.rs +++ b/blade-graphics/src/vulkan/pipeline.rs @@ -52,13 +52,13 @@ impl super::Context { bounds_check_policies: naga::proc::BoundsCheckPolicies::default(), zero_initialize_workgroup_memory: spv::ZeroInitializeWorkgroupMemoryMode::None, force_loop_bounding: false, - ray_query_initialization_tracking: true, - trace_ray_argument_validation: true, + ray_query_initialization_tracking: false, + trace_ray_argument_validation: false, use_storage_input_output_16: false, debug_info: None, task_dispatch_limits: None, mesh_shader_primitive_indices_clamp: true, - emit_int_div_checks: true, + emit_int_div_checks: false, } }