ranim_render/pipelines/
debug.rs1use std::ops::Deref;
2
3use glam::Vec4;
4
5use crate::{
6 WgpuContext,
7 resource::{GpuResource, OUTPUT_TEXTURE_FORMAT},
8};
9
10#[allow(unused)]
11pub struct DebugPipeline {
12 pipeline: wgpu::RenderPipeline,
13}
14
15impl Deref for DebugPipeline {
16 type Target = wgpu::RenderPipeline;
17 fn deref(&self) -> &Self::Target {
18 &self.pipeline
19 }
20}
21
22impl GpuResource for DebugPipeline {
23 fn new(wgpu_ctx: &WgpuContext) -> Self {
24 let WgpuContext { device, .. } = wgpu_ctx;
25
26 let module = &device.create_shader_module(wgpu::include_wgsl!("./shaders/debug.wgsl"));
27
28 let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
29 label: Some("Debug Pipeline Layout"),
30 bind_group_layouts: &[],
31 push_constant_ranges: &[],
32 });
33 let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
34 label: Some("Debug Pipeline"),
35 layout: Some(&pipeline_layout),
36 vertex: wgpu::VertexState {
37 module,
38 entry_point: Some("vs_main"),
39 buffers: &[wgpu::VertexBufferLayout {
40 array_stride: std::mem::size_of::<Vec4>() as u64,
41 step_mode: wgpu::VertexStepMode::Vertex,
42 attributes: &[wgpu::VertexAttribute {
43 shader_location: 0,
44 format: wgpu::VertexFormat::Float32x4,
45 offset: 0,
46 }],
47 }],
48 compilation_options: wgpu::PipelineCompilationOptions::default(),
49 },
50 fragment: Some(wgpu::FragmentState {
51 module,
52 entry_point: Some("fs_main"),
53 compilation_options: wgpu::PipelineCompilationOptions::default(),
54 targets: &[Some(wgpu::ColorTargetState {
55 format: OUTPUT_TEXTURE_FORMAT,
56 blend: Some(wgpu::BlendState::ALPHA_BLENDING),
57 write_mask: wgpu::ColorWrites::ALL,
58 })],
59 }),
60 primitive: wgpu::PrimitiveState {
61 topology: wgpu::PrimitiveTopology::PointList,
62 ..Default::default()
63 },
64 depth_stencil: None,
65 multisample: wgpu::MultisampleState {
66 count: 4,
67 mask: !0,
68 alpha_to_coverage_enabled: false,
69 },
70 multiview: None,
71 cache: None,
72 });
73
74 Self { pipeline }
75 }
76}