glyph_atlas_image: Image,
- samplers: Samplers,
+ _samplers: Samplers,
models: Models<'gpu>,
images: Images,
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);
ui_image: default(),
tile_bitmap_buffer: default(),
glyph_atlas_image: default(),
- samplers,
+ _samplers: samplers,
models,
images,
transforms: vec![],
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()]),
+ }],
);
{
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,
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,
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;
}
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(&[
use narcissus_gpu::{
BindDesc, BindGroupLayout, BindingType, ComputePipelineDesc, Pipeline, PipelineLayout,
- PushConstantRange, ShaderDesc, ShaderStageFlags,
+ PushConstantRange, Sampler, ShaderDesc, ShaderStageFlags,
};
use crate::Gpu;
}
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
use narcissus_font::TouchedGlyphIndex;
use narcissus_gpu::{
BindDesc, BindGroupLayout, BindingType, ComputePipelineDesc, Pipeline, PipelineLayout,
- PushConstantRange, ShaderDesc, ShaderStageFlags,
+ PushConstantRange, Sampler, ShaderDesc, ShaderStageFlags,
};
use crate::Gpu;
}
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