bevy_render/render_resource/
pipeline.rs1use super::ShaderDefVal;
2use crate::mesh::VertexBufferLayout;
3use crate::renderer::WgpuWrapper;
4use crate::{
5 define_atomic_id,
6 render_resource::{BindGroupLayout, Shader},
7};
8use alloc::borrow::Cow;
9use bevy_asset::Handle;
10use core::ops::Deref;
11use wgpu::{
12 ColorTargetState, DepthStencilState, MultisampleState, PrimitiveState, PushConstantRange,
13};
14
15define_atomic_id!(RenderPipelineId);
16
17#[derive(Clone, Debug)]
22pub struct RenderPipeline {
23 id: RenderPipelineId,
24 value: WgpuWrapper<wgpu::RenderPipeline>,
25}
26
27impl RenderPipeline {
28 #[inline]
29 pub fn id(&self) -> RenderPipelineId {
30 self.id
31 }
32}
33
34impl From<wgpu::RenderPipeline> for RenderPipeline {
35 fn from(value: wgpu::RenderPipeline) -> Self {
36 RenderPipeline {
37 id: RenderPipelineId::new(),
38 value: WgpuWrapper::new(value),
39 }
40 }
41}
42
43impl Deref for RenderPipeline {
44 type Target = wgpu::RenderPipeline;
45
46 #[inline]
47 fn deref(&self) -> &Self::Target {
48 &self.value
49 }
50}
51
52define_atomic_id!(ComputePipelineId);
53
54#[derive(Clone, Debug)]
59pub struct ComputePipeline {
60 id: ComputePipelineId,
61 value: WgpuWrapper<wgpu::ComputePipeline>,
62}
63
64impl ComputePipeline {
65 #[inline]
67 pub fn id(&self) -> ComputePipelineId {
68 self.id
69 }
70}
71
72impl From<wgpu::ComputePipeline> for ComputePipeline {
73 fn from(value: wgpu::ComputePipeline) -> Self {
74 ComputePipeline {
75 id: ComputePipelineId::new(),
76 value: WgpuWrapper::new(value),
77 }
78 }
79}
80
81impl Deref for ComputePipeline {
82 type Target = wgpu::ComputePipeline;
83
84 #[inline]
85 fn deref(&self) -> &Self::Target {
86 &self.value
87 }
88}
89
90#[derive(Clone, Debug, PartialEq)]
92pub struct RenderPipelineDescriptor {
93 pub label: Option<Cow<'static, str>>,
95 pub layout: Vec<BindGroupLayout>,
97 pub push_constant_ranges: Vec<PushConstantRange>,
100 pub vertex: VertexState,
102 pub primitive: PrimitiveState,
104 pub depth_stencil: Option<DepthStencilState>,
106 pub multisample: MultisampleState,
108 pub fragment: Option<FragmentState>,
110 pub zero_initialize_workgroup_memory: bool,
113}
114
115#[derive(Clone, Debug, Eq, PartialEq)]
116pub struct VertexState {
117 pub shader: Handle<Shader>,
119 pub shader_defs: Vec<ShaderDefVal>,
120 pub entry_point: Cow<'static, str>,
123 pub buffers: Vec<VertexBufferLayout>,
125}
126
127#[derive(Clone, Debug, PartialEq, Eq)]
129pub struct FragmentState {
130 pub shader: Handle<Shader>,
132 pub shader_defs: Vec<ShaderDefVal>,
133 pub entry_point: Cow<'static, str>,
136 pub targets: Vec<Option<ColorTargetState>>,
138}
139
140#[derive(Clone, Debug)]
142pub struct ComputePipelineDescriptor {
143 pub label: Option<Cow<'static, str>>,
144 pub layout: Vec<BindGroupLayout>,
145 pub push_constant_ranges: Vec<PushConstantRange>,
146 pub shader: Handle<Shader>,
148 pub shader_defs: Vec<ShaderDefVal>,
149 pub entry_point: Cow<'static, str>,
152 pub zero_initialize_workgroup_memory: bool,
155}