diff --git a/librashader-capi/src/ctypes.rs b/librashader-capi/src/ctypes.rs index dad8b62..47fb6e8 100644 --- a/librashader-capi/src/ctypes.rs +++ b/librashader-capi/src/ctypes.rs @@ -24,8 +24,7 @@ pub type libra_d3d11_filter_chain_t = #[cfg(all(target_os = "windows", feature = "runtime-d3d12"))] #[doc(cfg(all(target_os = "windows", feature = "runtime-d3d12")))] pub type libra_d3d12_filter_chain_t = -Option>; - + Option>; /// A handle to a Vulkan filter chain. #[cfg(feature = "runtime-vulkan")] diff --git a/librashader-capi/src/runtime/d3d12/filter_chain.rs b/librashader-capi/src/runtime/d3d12/filter_chain.rs index a8b86b2..861d779 100644 --- a/librashader-capi/src/runtime/d3d12/filter_chain.rs +++ b/librashader-capi/src/runtime/d3d12/filter_chain.rs @@ -6,14 +6,16 @@ use std::ffi::CStr; use std::mem::{ManuallyDrop, MaybeUninit}; use std::ptr::NonNull; use std::slice; -use windows::Win32::Graphics::Direct3D12::{D3D12_CPU_DESCRIPTOR_HANDLE, ID3D12Device, ID3D12GraphicsCommandList, ID3D12Resource}; +use windows::Win32::Graphics::Direct3D12::{ + ID3D12Device, ID3D12GraphicsCommandList, ID3D12Resource, D3D12_CPU_DESCRIPTOR_HANDLE, +}; use windows::Win32::Graphics::Dxgi::Common::DXGI_FORMAT; pub use librashader::runtime::d3d12::capi::options::FilterChainOptionsD3D12; pub use librashader::runtime::d3d12::capi::options::FrameOptionsD3D12; -use librashader::runtime::{FilterChainParameters, Size, Viewport}; use librashader::runtime::d3d12::{D3D12InputImage, D3D12OutputView}; +use librashader::runtime::{FilterChainParameters, Size, Viewport}; /// Direct3D 11 parameters for the source image. #[repr(C)] diff --git a/librashader-capi/src/runtime/mod.rs b/librashader-capi/src/runtime/mod.rs index 90a0be6..5424b22 100644 --- a/librashader-capi/src/runtime/mod.rs +++ b/librashader-capi/src/runtime/mod.rs @@ -13,4 +13,4 @@ pub mod d3d11; #[doc(cfg(all(target_os = "windows", feature = "runtime-d3d12")))] #[cfg(all(target_os = "windows", feature = "runtime-d3d12"))] -pub mod d3d12; \ No newline at end of file +pub mod d3d12; diff --git a/librashader-reflect/src/back/dxil.rs b/librashader-reflect/src/back/dxil.rs index 81d6d8e..10dc31f 100644 --- a/librashader-reflect/src/back/dxil.rs +++ b/librashader-reflect/src/back/dxil.rs @@ -2,7 +2,9 @@ use crate::back::spirv::WriteSpirV; use crate::back::{CompileShader, CompilerBackend, FromCompilation, ShaderCompilerOutput}; pub use spirv_to_dxil::DxilObject; pub use spirv_to_dxil::ShaderModel; -use spirv_to_dxil::{PushConstantBufferConfig, RuntimeConfig, RuntimeDataBufferConfig, ShaderStage, ValidatorVersion}; +use spirv_to_dxil::{ + PushConstantBufferConfig, RuntimeConfig, RuntimeDataBufferConfig, ShaderStage, ValidatorVersion, +}; use crate::back::targets::{OutputTarget, DXIL}; use crate::error::{ShaderCompileError, ShaderReflectError}; diff --git a/librashader-reflect/src/reflect/naga.rs b/librashader-reflect/src/reflect/naga.rs index 0967e85..5e393e0 100644 --- a/librashader-reflect/src/reflect/naga.rs +++ b/librashader-reflect/src/reflect/naga.rs @@ -29,11 +29,9 @@ impl TryFrom<&GlslangCompilation> for NagaReflect { fn try_from(value: &GlslangCompilation) -> Result { let ops = Options::default(); let vertex = - naga::front::spv::Parser::new(value.vertex.clone().into_iter(), &ops) - .parse()?; + naga::front::spv::Parser::new(value.vertex.clone().into_iter(), &ops).parse()?; let fragment = - naga::front::spv::Parser::new(value.fragment.clone().into_iter(), &ops) - .parse()?; + naga::front::spv::Parser::new(value.fragment.clone().into_iter(), &ops).parse()?; Ok(NagaReflect { vertex, fragment }) } } diff --git a/librashader-runtime-d3d11/src/draw_quad.rs b/librashader-runtime-d3d11/src/draw_quad.rs index 07d2bfd..9ef5f34 100644 --- a/librashader-runtime-d3d11/src/draw_quad.rs +++ b/librashader-runtime-d3d11/src/draw_quad.rs @@ -1,6 +1,6 @@ -use array_concat::concat_arrays; use crate::error; use crate::error::assume_d3d11_init; +use array_concat::concat_arrays; use bytemuck::offset_of; use librashader_runtime::quad::QuadType; use windows::core::PCSTR; diff --git a/librashader-runtime-d3d11/src/filter_chain.rs b/librashader-runtime-d3d11/src/filter_chain.rs index f5207e9..22dc452 100644 --- a/librashader-runtime-d3d11/src/filter_chain.rs +++ b/librashader-runtime-d3d11/src/filter_chain.rs @@ -13,11 +13,11 @@ use std::collections::VecDeque; use std::path::Path; +use crate::draw_quad::DrawQuad; use crate::error::{assume_d3d11_init, FilterChainError}; use crate::filter_pass::{ConstantBufferBinding, FilterPass}; use crate::framebuffer::OwnedFramebuffer; use crate::options::{FilterChainOptionsD3D11, FrameOptionsD3D11}; -use crate::draw_quad::DrawQuad; use crate::render_target::RenderTarget; use crate::samplers::SamplerSet; use crate::util::d3d11_compile_bound_shader; @@ -26,20 +26,21 @@ use librashader_reflect::reflect::presets::{CompilePresetTarget, ShaderPassArtif use librashader_runtime::binding::{BindingUtil, TextureInput}; use librashader_runtime::quad::{QuadType, IDENTITY_MVP}; use librashader_runtime::uniforms::UniformStorage; +use rayon::prelude::*; use windows::Win32::Graphics::Direct3D11::{ ID3D11Buffer, ID3D11Device, ID3D11DeviceContext, D3D11_BIND_CONSTANT_BUFFER, D3D11_BUFFER_DESC, D3D11_CPU_ACCESS_WRITE, D3D11_RESOURCE_MISC_FLAG, D3D11_RESOURCE_MISC_GENERATE_MIPS, D3D11_TEXTURE2D_DESC, D3D11_USAGE_DEFAULT, D3D11_USAGE_DYNAMIC, }; use windows::Win32::Graphics::Dxgi::Common::DXGI_FORMAT_R8G8B8A8_UNORM; -use rayon::prelude::*; pub struct FilterMutable { pub(crate) passes_enabled: usize, pub(crate) parameters: FxHashMap, } -type ShaderPassMeta = ShaderPassArtifact + Send>; +type ShaderPassMeta = + ShaderPassArtifact + Send>; /// A Direct3D 11 filter chain. pub struct FilterChainD3D11 { @@ -222,35 +223,35 @@ impl FilterChainD3D11 { semantics: &ShaderSemantics, ) -> error::Result> { // access to ID3D11Device is thread safe. - let filters: Vec> = - passes.into_par_iter() - .enumerate() - .map(|(index, (config, source, mut reflect)) | { - let reflection = reflect.reflect(index, semantics)?; - let hlsl = reflect.compile(None)?; + let filters: Vec> = passes + .into_par_iter() + .enumerate() + .map(|(index, (config, source, mut reflect))| { + let reflection = reflect.reflect(index, semantics)?; + let hlsl = reflect.compile(None)?; - let vertex_dxbc = - util::d3d_compile_shader(hlsl.vertex.as_bytes(), b"main\0", b"vs_5_0\0")?; - let vs = d3d11_compile_bound_shader( - device, - &vertex_dxbc, - None, - ID3D11Device::CreateVertexShader, - )?; + let vertex_dxbc = + util::d3d_compile_shader(hlsl.vertex.as_bytes(), b"main\0", b"vs_5_0\0")?; + let vs = d3d11_compile_bound_shader( + device, + &vertex_dxbc, + None, + ID3D11Device::CreateVertexShader, + )?; - let ia_desc = DrawQuad::get_spirv_cross_vbo_desc(); - let vao = util::d3d11_create_input_layout(device, &ia_desc, &vertex_dxbc)?; + let ia_desc = DrawQuad::get_spirv_cross_vbo_desc(); + let vao = util::d3d11_create_input_layout(device, &ia_desc, &vertex_dxbc)?; - let fragment_dxbc = - util::d3d_compile_shader(hlsl.fragment.as_bytes(), b"main\0", b"ps_5_0\0")?; - let ps = d3d11_compile_bound_shader( - device, - &fragment_dxbc, - None, - ID3D11Device::CreatePixelShader, - )?; + let fragment_dxbc = + util::d3d_compile_shader(hlsl.fragment.as_bytes(), b"main\0", b"ps_5_0\0")?; + let ps = d3d11_compile_bound_shader( + device, + &fragment_dxbc, + None, + ID3D11Device::CreatePixelShader, + )?; - let ubo_cbuffer = if let Some(ubo) = &reflection.ubo && ubo.size != 0 { + let ubo_cbuffer = if let Some(ubo) = &reflection.ubo && ubo.size != 0 { let buffer = FilterChainD3D11::create_constant_buffer(device, ubo.size)?; Some(ConstantBufferBinding { binding: ubo.binding, @@ -262,7 +263,7 @@ impl FilterChainD3D11 { None }; - let push_cbuffer = if let Some(push) = &reflection.push_constant && push.size != 0 { + let push_cbuffer = if let Some(push) = &reflection.push_constant && push.size != 0 { let buffer = FilterChainD3D11::create_constant_buffer(device, push.size)?; Some(ConstantBufferBinding { binding: if ubo_cbuffer.is_some() { 1 } else { 0 }, @@ -274,29 +275,30 @@ impl FilterChainD3D11 { None }; - let uniform_storage = UniformStorage::new( - reflection.ubo.as_ref().map_or(0, |ubo| ubo.size as usize), - reflection - .push_constant - .as_ref() - .map_or(0, |push| push.size as usize), - ); + let uniform_storage = UniformStorage::new( + reflection.ubo.as_ref().map_or(0, |ubo| ubo.size as usize), + reflection + .push_constant + .as_ref() + .map_or(0, |push| push.size as usize), + ); - let uniform_bindings = reflection.meta.create_binding_map(|param| param.offset()); + let uniform_bindings = reflection.meta.create_binding_map(|param| param.offset()); - Ok(FilterPass { - reflection, - vertex_shader: vs, - vertex_layout: vao, - pixel_shader: ps, - uniform_bindings, - uniform_storage, - uniform_buffer: ubo_cbuffer, - push_buffer: push_cbuffer, - source, - config: config.clone(), - }) - }).collect(); + Ok(FilterPass { + reflection, + vertex_shader: vs, + vertex_layout: vao, + pixel_shader: ps, + uniform_bindings, + uniform_storage, + uniform_buffer: ubo_cbuffer, + push_buffer: push_cbuffer, + source, + config: config.clone(), + }) + }) + .collect(); let filters: error::Result> = filters.into_iter().collect(); let filters = filters?; diff --git a/librashader-runtime-d3d11/src/lib.rs b/librashader-runtime-d3d11/src/lib.rs index 3f16b78..bab25df 100644 --- a/librashader-runtime-d3d11/src/lib.rs +++ b/librashader-runtime-d3d11/src/lib.rs @@ -9,13 +9,13 @@ #[cfg(test)] mod hello_triangle; +mod draw_quad; pub mod error; mod filter_chain; mod filter_pass; mod framebuffer; pub mod options; mod parameters; -mod draw_quad; mod render_target; mod samplers; mod texture; @@ -86,7 +86,7 @@ mod tests { }), // replace below with 'None' for the triangle // None, - Some(Image::load(IMAGE_PATH, UVDirection::TopLeft).unwrap()) + Some(Image::load(IMAGE_PATH, UVDirection::TopLeft).unwrap()), ) .unwrap(); // let sample = hello_triangle_old::d3d11_hello_triangle::Sample::new( diff --git a/librashader-runtime-d3d12/src/mipmap.rs b/librashader-runtime-d3d12/src/mipmap.rs index 63eab05..11a22a6 100644 --- a/librashader-runtime-d3d12/src/mipmap.rs +++ b/librashader-runtime-d3d12/src/mipmap.rs @@ -261,21 +261,22 @@ impl D3D12MipmapGen { let mipmap_params = bytemuck::bytes_of(&mipmap_params); - util::d3d12_resource_transition_subresource( - cmd, - resource, - D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, - D3D12_RESOURCE_STATE_UNORDERED_ACCESS, - i - 1, - ); + let barriers = [ + util::d3d12_get_resource_transition_subresource( + resource, + D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS, + i - 1, + ), + util::d3d12_get_resource_transition_subresource( + resource, + D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS, + i, + ), + ]; - util::d3d12_resource_transition_subresource( - cmd, - resource, - D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, - D3D12_RESOURCE_STATE_UNORDERED_ACCESS, - i, - ); + cmd.ResourceBarrier(&barriers); cmd.SetComputeRootDescriptorTable(1, *heap_slots[i as usize].deref().as_ref()); cmd.SetComputeRoot32BitConstants( @@ -297,29 +298,27 @@ impl D3D12MipmapGen { pResource: windows::core::ManuallyDrop::new(resource), }); - let barrier = [D3D12_RESOURCE_BARRIER { - Type: D3D12_RESOURCE_BARRIER_TYPE_UAV, - Anonymous: D3D12_RESOURCE_BARRIER_0 { UAV: uav_barrier }, - ..Default::default() - }]; + let barriers = [ + D3D12_RESOURCE_BARRIER { + Type: D3D12_RESOURCE_BARRIER_TYPE_UAV, + Anonymous: D3D12_RESOURCE_BARRIER_0 { UAV: uav_barrier }, + ..Default::default() + }, + util::d3d12_get_resource_transition_subresource( + resource, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS, + D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, + i, + ), + util::d3d12_get_resource_transition_subresource( + resource, + D3D12_RESOURCE_STATE_UNORDERED_ACCESS, + D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, + i - 1, + ), + ]; - cmd.ResourceBarrier(&barrier); - - util::d3d12_resource_transition_subresource( - cmd, - resource, - D3D12_RESOURCE_STATE_UNORDERED_ACCESS, - D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, - i, - ); - - util::d3d12_resource_transition_subresource( - cmd, - resource, - D3D12_RESOURCE_STATE_UNORDERED_ACCESS, - D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, - i - 1, - ); + cmd.ResourceBarrier(&barriers); } Ok(heap_slots) diff --git a/librashader-runtime-vk/src/filter_chain.rs b/librashader-runtime-vk/src/filter_chain.rs index edb3d2f..f3200c3 100644 --- a/librashader-runtime-vk/src/filter_chain.rs +++ b/librashader-runtime-vk/src/filter_chain.rs @@ -40,7 +40,8 @@ pub struct VulkanObjects { pipeline_cache: vk::PipelineCache, } -type ShaderPassMeta = ShaderPassArtifact + Send>; +type ShaderPassMeta = + ShaderPassArtifact + Send>; /// A collection of handles needed to access the Vulkan instance. #[derive(Clone)] @@ -311,7 +312,8 @@ impl FilterChainVulkan { ) -> error::Result> { let frames_in_flight = std::cmp::max(1, frames_in_flight); - let filters: Vec> = passes.into_par_iter() + let filters: Vec> = passes + .into_par_iter() .enumerate() .map(|(index, (config, source, mut reflect))| { let reflection = reflect.reflect(index, semantics)?; @@ -331,8 +333,7 @@ impl FilterChainVulkan { .map_or(0, |push| push.size as usize), ); - let uniform_bindings = reflection.meta - .create_binding_map(|param| param.offset()); + let uniform_bindings = reflection.meta.create_binding_map(|param| param.offset()); let render_pass_format = if !use_render_pass { vk::Format::UNDEFINED @@ -365,7 +366,8 @@ impl FilterChainVulkan { // ubo_ring, frames_in_flight, }) - }).collect(); + }) + .collect(); let filters: error::Result> = filters.into_iter().collect(); let filters = filters?; diff --git a/librashader-runtime/src/uniforms.rs b/librashader-runtime/src/uniforms.rs index 8192582..9d1a5f1 100644 --- a/librashader-runtime/src/uniforms.rs +++ b/librashader-runtime/src/uniforms.rs @@ -145,12 +145,15 @@ where } impl UniformStorage> - where - C: Copy, - U: Deref + DerefMut, +where + C: Copy, + U: Deref + DerefMut, { /// Create a new `UniformStorage` with the given backing storage - pub fn new_with_ubo_storage(storage: U, push_size: usize) -> UniformStorage> { + pub fn new_with_ubo_storage( + storage: U, + push_size: usize, + ) -> UniformStorage> { UniformStorage { ubo: storage, push: vec![0u8; push_size].into_boxed_slice(), diff --git a/librashader/src/lib.rs b/librashader/src/lib.rs index 2958d3b..016ed34 100644 --- a/librashader/src/lib.rs +++ b/librashader/src/lib.rs @@ -129,9 +129,9 @@ pub mod preprocess { pub mod reflect { /// Supported shader compiler targets. pub mod targets { + pub use librashader_reflect::back::targets::DXIL; pub use librashader_reflect::back::targets::GLSL; pub use librashader_reflect::back::targets::HLSL; - pub use librashader_reflect::back::targets::DXIL; pub use librashader_reflect::back::targets::SPIRV; }