From: Josh Simmons Date: Sat, 8 Jun 2024 19:32:45 +0000 (+0200) Subject: shark: Use immutable samplers X-Git-Url: https://git.nega.tv//gitweb.cgi?a=commitdiff_plain;h=140c58bd7449b4a1844951f8b5ed33f4b324c84a;p=josh%2Fnarcissus shark: Use immutable samplers --- diff --git a/title/shark/src/main.rs b/title/shark/src/main.rs index be862fc..c79ccab 100644 --- a/title/shark/src/main.rs +++ b/title/shark/src/main.rs @@ -877,7 +877,7 @@ struct DrawState<'gpu> { glyph_atlas_image: Image, - samplers: Samplers, + _samplers: Samplers, models: Models<'gpu>, images: Images, @@ -886,11 +886,13 @@ struct DrawState<'gpu> { impl<'gpu> DrawState<'gpu> { fn new(gpu: &'gpu Gpu, thread_token: &ThreadToken) -> Self { - let basic_pipeline = BasicPipeline::new(gpu); - let primitive_2d_pipeline = Primitive2dPipeline::new(gpu); - let display_transform_pipeline = DisplayTransformPipeline::new(gpu); - let samplers = Samplers::load(gpu); + let immutable_samplers = &[samplers[SamplerRes::Bilinear]]; + + let basic_pipeline = BasicPipeline::new(gpu, immutable_samplers); + let primitive_2d_pipeline = Primitive2dPipeline::new(gpu, immutable_samplers); + let display_transform_pipeline = DisplayTransformPipeline::new(gpu, immutable_samplers); + let models = Models::load(gpu); let images = Images::load(gpu, thread_token); @@ -908,7 +910,7 @@ impl<'gpu> DrawState<'gpu> { ui_image: default(), tile_bitmap_buffer: default(), glyph_atlas_image: default(), - samplers, + _samplers: samplers, models, images, transforms: vec![], @@ -1252,18 +1254,11 @@ impl<'gpu> DrawState<'gpu> { cmd_encoder, self.basic_pipeline.uniforms_bind_group_layout, 0, - &[ - Bind { - binding: 0, - array_element: 0, - typed: TypedBind::UniformBuffer(&[uniform_buffer.to_arg()]), - }, - Bind { - binding: 1, - array_element: 0, - typed: TypedBind::Sampler(&[self.samplers[SamplerRes::Bilinear]]), - }, - ], + &[Bind { + binding: 0, + array_element: 0, + typed: TypedBind::UniformBuffer(&[uniform_buffer.to_arg()]), + }], ); { @@ -1361,11 +1356,6 @@ impl<'gpu> DrawState<'gpu> { self.primitive_2d_pipeline.bind_group_layout, 0, &[ - Bind { - binding: 0, - array_element: 0, - typed: TypedBind::Sampler(&[self.samplers[SamplerRes::Bilinear]]), - }, Bind { binding: 1, array_element: 0, @@ -1498,11 +1488,6 @@ impl<'gpu> DrawState<'gpu> { self.display_transform_pipeline.bind_group_layout, 0, &[ - Bind { - binding: 0, - array_element: 0, - typed: TypedBind::Sampler(&[self.samplers[SamplerRes::Bilinear]]), - }, Bind { binding: 1, array_element: 0, diff --git a/title/shark/src/pipelines/basic.rs b/title/shark/src/pipelines/basic.rs index ffb6723..fc4d88a 100644 --- a/title/shark/src/pipelines/basic.rs +++ b/title/shark/src/pipelines/basic.rs @@ -2,7 +2,7 @@ use narcissus_core::default; use narcissus_gpu::{ BindDesc, BindGroupLayout, BindingType, BlendMode, CompareOp, CullingMode, FrontFace, GraphicsPipelineAttachments, GraphicsPipelineDesc, ImageFormat, Pipeline, PipelineLayout, - PolygonMode, ShaderDesc, ShaderStageFlags, Topology, + PolygonMode, Sampler, ShaderDesc, ShaderStageFlags, Topology, }; use narcissus_maths::Mat4; @@ -29,12 +29,12 @@ pub struct BasicPipeline { } impl BasicPipeline { - pub fn new(gpu: &Gpu) -> Self { + pub fn new(gpu: &Gpu, immutable_samplers: &[Sampler]) -> Self { let uniforms_bind_group_layout = gpu.create_bind_group_layout(&[ // Uniforms BindDesc::new(ShaderStageFlags::ALL, BindingType::UniformBuffer), - // Bilinear Sampler - BindDesc::new(ShaderStageFlags::ALL, BindingType::Sampler), + // Samplers + BindDesc::with_immutable_samplers(ShaderStageFlags::ALL, immutable_samplers), ]); let storage_bind_group_layout = gpu.create_bind_group_layout(&[ diff --git a/title/shark/src/pipelines/display_transform.rs b/title/shark/src/pipelines/display_transform.rs index 4405b4e..3b96a93 100644 --- a/title/shark/src/pipelines/display_transform.rs +++ b/title/shark/src/pipelines/display_transform.rs @@ -1,6 +1,6 @@ use narcissus_gpu::{ BindDesc, BindGroupLayout, BindingType, ComputePipelineDesc, Pipeline, PipelineLayout, - PushConstantRange, ShaderDesc, ShaderStageFlags, + PushConstantRange, Sampler, ShaderDesc, ShaderStageFlags, }; use crate::Gpu; @@ -13,10 +13,10 @@ pub struct DisplayTransformPipeline { } impl DisplayTransformPipeline { - pub fn new(gpu: &Gpu) -> Self { + pub fn new(gpu: &Gpu, immutable_samplers: &[Sampler]) -> Self { let bind_group_layout = gpu.create_bind_group_layout(&[ - // Sampler - BindDesc::new(ShaderStageFlags::COMPUTE, BindingType::Sampler), + // Samplers + BindDesc::with_immutable_samplers(ShaderStageFlags::COMPUTE, immutable_samplers), // Tony Mc'mapface LUT BindDesc::new(ShaderStageFlags::COMPUTE, BindingType::SampledImage), // Tiles diff --git a/title/shark/src/pipelines/primitive_2d.rs b/title/shark/src/pipelines/primitive_2d.rs index 2259d77..246b419 100644 --- a/title/shark/src/pipelines/primitive_2d.rs +++ b/title/shark/src/pipelines/primitive_2d.rs @@ -1,7 +1,7 @@ use narcissus_font::TouchedGlyphIndex; use narcissus_gpu::{ BindDesc, BindGroupLayout, BindingType, ComputePipelineDesc, Pipeline, PipelineLayout, - PushConstantRange, ShaderDesc, ShaderStageFlags, + PushConstantRange, Sampler, ShaderDesc, ShaderStageFlags, }; use crate::Gpu; @@ -44,10 +44,10 @@ pub struct Primitive2dPipeline { } impl Primitive2dPipeline { - pub fn new(gpu: &Gpu) -> Self { + pub fn new(gpu: &Gpu, immutable_samplers: &[Sampler]) -> Self { let bind_group_layout = gpu.create_bind_group_layout(&[ // Sampler - BindDesc::new(ShaderStageFlags::COMPUTE, BindingType::Sampler), + BindDesc::with_immutable_samplers(ShaderStageFlags::COMPUTE, immutable_samplers), // Glyph Atlas BindDesc::new(ShaderStageFlags::COMPUTE, BindingType::SampledImage), // Glyphs