diff --git a/librashader-runtime-d3d12/src/filter_chain.rs b/librashader-runtime-d3d12/src/filter_chain.rs index 1a5701e..a570f86 100644 --- a/librashader-runtime-d3d12/src/filter_chain.rs +++ b/librashader-runtime-d3d12/src/filter_chain.rs @@ -535,35 +535,41 @@ impl FilterChainD3D12 { .into(); // incredibly cursed. - let (reflection, graphics_pipeline) = - if let Ok(graphics_pipeline) = D3D12GraphicsPipeline::new_from_dxil( - device, - library, - validator, - &dxil, - root_signature, - render_format, - disable_cache, - ) && !force_hlsl - { - (dxil_reflection, graphics_pipeline) - } else { - let hlsl_reflection = hlsl.reflect(index, semantics)?; - let hlsl = hlsl.compile(Some( - librashader_reflect::back::hlsl::HlslShaderModel::ShaderModel6_0, - ))?; + let (reflection, graphics_pipeline) = 'pipeline: { + 'dxil: { + if force_hlsl { + break 'dxil; + } - let graphics_pipeline = D3D12GraphicsPipeline::new_from_hlsl( + if let Ok(graphics_pipeline) = D3D12GraphicsPipeline::new_from_dxil( device, library, - compiler, - &hlsl, + validator, + &dxil, root_signature, render_format, disable_cache, - )?; - (hlsl_reflection, graphics_pipeline) - }; + ) { + break 'pipeline (dxil_reflection, graphics_pipeline); + } + } + + let hlsl_reflection = hlsl.reflect(index, semantics)?; + let hlsl = hlsl.compile(Some( + librashader_reflect::back::hlsl::HlslShaderModel::ShaderModel6_0, + ))?; + + let graphics_pipeline = D3D12GraphicsPipeline::new_from_hlsl( + device, + library, + compiler, + &hlsl, + root_signature, + render_format, + disable_cache, + )?; + (hlsl_reflection, graphics_pipeline) + }; // minimum size here has to be 1 byte. let ubo_size = reflection.ubo.as_ref().map_or(1, |ubo| ubo.size as usize); diff --git a/librashader-runtime-d3d12/src/filter_pass.rs b/librashader-runtime-d3d12/src/filter_pass.rs index 9552d61..28dc532 100644 --- a/librashader-runtime-d3d12/src/filter_pass.rs +++ b/librashader-runtime-d3d12/src/filter_pass.rs @@ -160,14 +160,20 @@ impl FilterPass { source, ); - if let Some(ubo) = &self.reflection.ubo - && ubo.size != 0 + if self + .reflection + .ubo + .as_ref() + .is_some_and(|ubo| ubo.size != 0) { self.uniform_storage.inner_ubo().bind_cbv(2, cmd); } - if let Some(push) = &self.reflection.push_constant - && push.size != 0 + if self + .reflection + .push_constant + .as_ref() + .is_some_and(|push| push.size != 0) { self.uniform_storage.inner_push().bind_cbv(3, cmd); } diff --git a/librashader-runtime-d3d12/src/lib.rs b/librashader-runtime-d3d12/src/lib.rs index 70eb869..9125765 100644 --- a/librashader-runtime-d3d12/src/lib.rs +++ b/librashader-runtime-d3d12/src/lib.rs @@ -1,6 +1,5 @@ #![cfg(target_os = "windows")] #![deny(unsafe_op_in_unsafe_fn)] -#![feature(let_chains)] #![feature(type_alias_impl_trait)] mod buffer; diff --git a/librashader-runtime-d3d12/tests/triangle.rs b/librashader-runtime-d3d12/tests/triangle.rs index 9bf9b8c..1460c4c 100644 --- a/librashader-runtime-d3d12/tests/triangle.rs +++ b/librashader-runtime-d3d12/tests/triangle.rs @@ -5,14 +5,14 @@ use crate::hello_triangle::{DXSample, SampleCommandLine}; #[test] fn triangle_d3d12() { let sample = hello_triangle::d3d12_hello_triangle::Sample::new( - // "../test/shaders_slang/bezel/Mega_Bezel/Presets/MBZ__0__SMOOTH-ADV.slangp", + "../test/shaders_slang/bezel/Mega_Bezel/Presets/MBZ__0__SMOOTH-ADV.slangp", // "../test/shaders_slang/crt/crt-lottes.slangp", // "../test/basic.slangp", // "../test/shaders_slang/handheld/console-border/gbc-lcd-grid-v2.slangp", // "../test/Mega_Bezel_Packs/Duimon-Mega-Bezel/Presets/Advanced/Nintendo_GBA_SP/GBA_SP-[ADV]-[LCD-GRID]-[Night].slangp", // "../test/shaders_slang/test/feedback.slangp", // "../test/shaders_slang/test/history.slangp", - "../test/shaders_slang/crt/crt-geom-deluxe.slangp", + // "../test/shaders_slang/crt/crt-geom-deluxe.slangp", // "../test/slang-shaders/vhs/VHSPro.slangp", &SampleCommandLine { use_warp_device: false,