mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-08-28 08:54:04 +00:00
shader-rt: manual pipeline layout, fixing errors when bindings got DCE'd
This commit is contained in:
parent
5414f647cb
commit
cfa2238ef3
2 changed files with 37 additions and 7 deletions
|
@ -190,7 +190,7 @@ impl PerPixelAdjust {
|
||||||
#wgpu_executor.shader_runtime.run_per_pixel_adjust(&::wgpu_executor::shader_runtime::Shaders {
|
#wgpu_executor.shader_runtime.run_per_pixel_adjust(&::wgpu_executor::shader_runtime::Shaders {
|
||||||
wgsl_shader: crate::WGSL_SHADER,
|
wgsl_shader: crate::WGSL_SHADER,
|
||||||
fragment_shader_name: super::#entry_point_name,
|
fragment_shader_name: super::#entry_point_name,
|
||||||
}, #gpu_image, &()).await
|
}, #gpu_image, &1u32).await
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,9 @@ use std::borrow::Cow;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use wgpu::util::{BufferInitDescriptor, DeviceExt};
|
use wgpu::util::{BufferInitDescriptor, DeviceExt};
|
||||||
use wgpu::{
|
use wgpu::{
|
||||||
BindGroupDescriptor, BindGroupEntry, BindingResource, Buffer, BufferBinding, BufferUsages, ColorTargetState, Face, FragmentState, FrontFace, LoadOp, Operations, PolygonMode, PrimitiveState,
|
BindGroupDescriptor, BindGroupEntry, BindGroupLayoutDescriptor, BindGroupLayoutEntry, BindingResource, BindingType, Buffer, BufferBinding, BufferBindingType, BufferUsages, ColorTargetState, Face,
|
||||||
PrimitiveTopology, RenderPassColorAttachment, RenderPassDescriptor, RenderPipelineDescriptor, ShaderModuleDescriptor, ShaderSource, StoreOp, TextureDescriptor, TextureDimension, TextureFormat,
|
FragmentState, FrontFace, LoadOp, Operations, PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, RenderPassColorAttachment, RenderPassDescriptor, RenderPipelineDescriptor,
|
||||||
TextureViewDescriptor, VertexState,
|
ShaderModuleDescriptor, ShaderSource, ShaderStages, StoreOp, TextureDescriptor, TextureDimension, TextureFormat, TextureSampleType, TextureViewDescriptor, TextureViewDimension, VertexState,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct PerPixelAdjustShaderRuntime {
|
pub struct PerPixelAdjustShaderRuntime {
|
||||||
|
@ -53,18 +53,48 @@ impl PerPixelAdjustGraphicsPipeline {
|
||||||
let device = &context.device;
|
let device = &context.device;
|
||||||
let name = info.fragment_shader_name.to_owned();
|
let name = info.fragment_shader_name.to_owned();
|
||||||
|
|
||||||
// TODO workaround to naga removing `:`
|
|
||||||
let fragment_name = &name;
|
let fragment_name = &name;
|
||||||
let fragment_name = &fragment_name[(fragment_name.find("::").unwrap() + 2)..];
|
let fragment_name = &fragment_name[(fragment_name.find("::").unwrap() + 2)..];
|
||||||
|
// TODO workaround to naga removing `:`
|
||||||
let fragment_name = fragment_name.replace(":", "");
|
let fragment_name = fragment_name.replace(":", "");
|
||||||
|
|
||||||
let shader_module = device.create_shader_module(ShaderModuleDescriptor {
|
let shader_module = device.create_shader_module(ShaderModuleDescriptor {
|
||||||
label: Some(&format!("PerPixelAdjust {} wgsl shader", name)),
|
label: Some(&format!("PerPixelAdjust {} wgsl shader", name)),
|
||||||
source: ShaderSource::Wgsl(Cow::Borrowed(info.wgsl_shader)),
|
source: ShaderSource::Wgsl(Cow::Borrowed(info.wgsl_shader)),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let pipeline_layout = device.create_pipeline_layout(&PipelineLayoutDescriptor {
|
||||||
|
label: Some(&format!("PerPixelAdjust {} PipelineLayout", name)),
|
||||||
|
bind_group_layouts: &[&device.create_bind_group_layout(&BindGroupLayoutDescriptor {
|
||||||
|
label: Some(&format!("PerPixelAdjust {} BindGroupLayout 0", name)),
|
||||||
|
entries: &[
|
||||||
|
BindGroupLayoutEntry {
|
||||||
|
binding: 0,
|
||||||
|
visibility: ShaderStages::FRAGMENT,
|
||||||
|
ty: BindingType::Buffer {
|
||||||
|
ty: BufferBindingType::Storage { read_only: true },
|
||||||
|
has_dynamic_offset: false,
|
||||||
|
min_binding_size: None,
|
||||||
|
},
|
||||||
|
count: None,
|
||||||
|
},
|
||||||
|
BindGroupLayoutEntry {
|
||||||
|
binding: 1,
|
||||||
|
visibility: ShaderStages::FRAGMENT,
|
||||||
|
ty: BindingType::Texture {
|
||||||
|
sample_type: TextureSampleType::Float { filterable: false },
|
||||||
|
view_dimension: TextureViewDimension::D2,
|
||||||
|
multisampled: false,
|
||||||
|
},
|
||||||
|
count: None,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})],
|
||||||
|
push_constant_ranges: &[],
|
||||||
|
});
|
||||||
|
|
||||||
let pipeline = device.create_render_pipeline(&RenderPipelineDescriptor {
|
let pipeline = device.create_render_pipeline(&RenderPipelineDescriptor {
|
||||||
label: Some(&format!("PerPixelAdjust {} Pipeline", name)),
|
label: Some(&format!("PerPixelAdjust {} Pipeline", name)),
|
||||||
layout: None,
|
layout: Some(&pipeline_layout),
|
||||||
vertex: VertexState {
|
vertex: VertexState {
|
||||||
module: &shader_module,
|
module: &shader_module,
|
||||||
entry_point: Some(FULLSCREEN_VERTEX_SHADER_NAME),
|
entry_point: Some(FULLSCREEN_VERTEX_SHADER_NAME),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue