diff options
Diffstat (limited to 'cnn_v3/src/gbuf_view_effect.cc')
| -rw-r--r-- | cnn_v3/src/gbuf_view_effect.cc | 90 |
1 files changed, 46 insertions, 44 deletions
diff --git a/cnn_v3/src/gbuf_view_effect.cc b/cnn_v3/src/gbuf_view_effect.cc index ccf80b0..4c23322 100644 --- a/cnn_v3/src/gbuf_view_effect.cc +++ b/cnn_v3/src/gbuf_view_effect.cc @@ -19,28 +19,28 @@ extern const char* gbuf_view_wgsl; // BGL entry: texture_2d<u32> read binding (fragment stage) static WGPUBindGroupLayoutEntry bgl_uint_tex_frag(uint32_t binding) { WGPUBindGroupLayoutEntry e = {}; - e.binding = binding; - e.visibility = WGPUShaderStage_Fragment; - e.texture.sampleType = WGPUTextureSampleType_Uint; + e.binding = binding; + e.visibility = WGPUShaderStage_Fragment; + e.texture.sampleType = WGPUTextureSampleType_Uint; e.texture.viewDimension = WGPUTextureViewDimension_2D; return e; } // BGL entry: uniform buffer (fragment stage) static WGPUBindGroupLayoutEntry bgl_uniform_frag(uint32_t binding, - uint64_t min_size) { + uint64_t min_size) { WGPUBindGroupLayoutEntry e = {}; - e.binding = binding; - e.visibility = WGPUShaderStage_Fragment; - e.buffer.type = WGPUBufferBindingType_Uniform; + e.binding = binding; + e.visibility = WGPUShaderStage_Fragment; + e.buffer.type = WGPUBufferBindingType_Uniform; e.buffer.minBindingSize = min_size; return e; } GBufViewEffect::GBufViewEffect(const GpuContext& ctx, - const std::vector<std::string>& inputs, - const std::vector<std::string>& outputs, - float start_time, float end_time) + const std::vector<std::string>& inputs, + const std::vector<std::string>& outputs, + float start_time, float end_time) : Effect(ctx, inputs, outputs, start_time, end_time) { HEADLESS_RETURN_IF_NULL(ctx_.device); @@ -48,24 +48,26 @@ GBufViewEffect::GBufViewEffect(const GpuContext& ctx, WGPUBindGroupLayoutEntry entries[3] = { bgl_uint_tex_frag(0), bgl_uint_tex_frag(1), - bgl_uniform_frag(2, 8), // only resolution (vec2f = 8 bytes) is read + bgl_uniform_frag(2, 8), // only resolution (vec2f = 8 bytes) is read }; WGPUBindGroupLayoutDescriptor bgl_desc = {}; bgl_desc.entryCount = 3; - bgl_desc.entries = entries; - WGPUBindGroupLayout bgl = wgpuDeviceCreateBindGroupLayout(ctx_.device, &bgl_desc); + bgl_desc.entries = entries; + WGPUBindGroupLayout bgl = + wgpuDeviceCreateBindGroupLayout(ctx_.device, &bgl_desc); // Pipeline layout WGPUPipelineLayoutDescriptor pl_desc = {}; pl_desc.bindGroupLayoutCount = 1; - pl_desc.bindGroupLayouts = &bgl; + pl_desc.bindGroupLayouts = &bgl; WGPUPipelineLayout pl = wgpuDeviceCreatePipelineLayout(ctx_.device, &pl_desc); // Shader module WGPUShaderSourceWGSL wgsl_src = {}; wgsl_src.chain.sType = WGPUSType_ShaderSourceWGSL; - const std::string composed = ShaderComposer::Get().Compose({}, gbuf_view_wgsl); - wgsl_src.code = str_view(composed.c_str()); + const std::string composed = + ShaderComposer::Get().Compose({}, gbuf_view_wgsl); + wgsl_src.code = str_view(composed.c_str()); WGPUShaderModuleDescriptor shader_desc = {}; shader_desc.nextInChain = &wgsl_src.chain; WGPUShaderModule shader = @@ -73,23 +75,23 @@ GBufViewEffect::GBufViewEffect(const GpuContext& ctx, // Render pipeline WGPUColorTargetState target = {}; - target.format = WGPUTextureFormat_RGBA8Unorm; + target.format = WGPUTextureFormat_RGBA8Unorm; target.writeMask = WGPUColorWriteMask_All; WGPUFragmentState frag = {}; - frag.module = shader; - frag.entryPoint = str_view("fs_main"); + frag.module = shader; + frag.entryPoint = str_view("fs_main"); frag.targetCount = 1; - frag.targets = ⌖ + frag.targets = ⌖ WGPURenderPipelineDescriptor pipe_desc = {}; - pipe_desc.layout = pl; - pipe_desc.vertex.module = shader; - pipe_desc.vertex.entryPoint = str_view("vs_main"); - pipe_desc.fragment = &frag; - pipe_desc.primitive.topology = WGPUPrimitiveTopology_TriangleList; - pipe_desc.multisample.count = 1; - pipe_desc.multisample.mask = UINT32_MAX; + pipe_desc.layout = pl; + pipe_desc.vertex.module = shader; + pipe_desc.vertex.entryPoint = str_view("vs_main"); + pipe_desc.fragment = &frag; + pipe_desc.primitive.topology = WGPUPrimitiveTopology_TriangleList; + pipe_desc.multisample.count = 1; + pipe_desc.multisample.mask = UINT32_MAX; pipeline_.set(wgpuDeviceCreateRenderPipeline(ctx_.device, &pipe_desc)); @@ -99,10 +101,10 @@ GBufViewEffect::GBufViewEffect(const GpuContext& ctx, } void GBufViewEffect::render(WGPUCommandEncoder encoder, - const UniformsSequenceParams& params, - NodeRegistry& nodes) { - WGPUTextureView feat0_view = nodes.get_view(input_nodes_[0]); - WGPUTextureView feat1_view = nodes.get_view(input_nodes_[1]); + const UniformsSequenceParams& params, + NodeRegistry& nodes) { + WGPUTextureView feat0_view = nodes.get_view(input_nodes_[0]); + WGPUTextureView feat1_view = nodes.get_view(input_nodes_[1]); WGPUTextureView output_view = nodes.get_view(output_nodes_[0]); // Rebuild bind group (views may change with ping-pong or resize) @@ -110,31 +112,31 @@ void GBufViewEffect::render(WGPUCommandEncoder encoder, wgpuRenderPipelineGetBindGroupLayout(pipeline_.get(), 0); WGPUBindGroupEntry bg_entries[3] = {}; - bg_entries[0].binding = 0; + bg_entries[0].binding = 0; bg_entries[0].textureView = feat0_view; - bg_entries[1].binding = 1; + bg_entries[1].binding = 1; bg_entries[1].textureView = feat1_view; - bg_entries[2].binding = 2; - bg_entries[2].buffer = uniforms_buffer_.get().buffer; - bg_entries[2].size = sizeof(UniformsSequenceParams); + bg_entries[2].binding = 2; + bg_entries[2].buffer = uniforms_buffer_.get().buffer; + bg_entries[2].size = sizeof(UniformsSequenceParams); WGPUBindGroupDescriptor bg_desc = {}; - bg_desc.layout = bgl; + bg_desc.layout = bgl; bg_desc.entryCount = 3; - bg_desc.entries = bg_entries; + bg_desc.entries = bg_entries; bind_group_.replace(wgpuDeviceCreateBindGroup(ctx_.device, &bg_desc)); wgpuBindGroupLayoutRelease(bgl); WGPURenderPassColorAttachment color_att = {}; - color_att.view = output_view; - color_att.loadOp = WGPULoadOp_Clear; - color_att.storeOp = WGPUStoreOp_Store; - color_att.clearValue = {0.0f, 0.0f, 0.0f, 1.0f}; - color_att.depthSlice = WGPU_DEPTH_SLICE_UNDEFINED; + color_att.view = output_view; + color_att.loadOp = WGPULoadOp_Clear; + color_att.storeOp = WGPUStoreOp_Store; + color_att.clearValue = {0.0f, 0.0f, 0.0f, 1.0f}; + color_att.depthSlice = WGPU_DEPTH_SLICE_UNDEFINED; WGPURenderPassDescriptor pass_desc = {}; pass_desc.colorAttachmentCount = 1; - pass_desc.colorAttachments = &color_att; + pass_desc.colorAttachments = &color_att; WGPURenderPassEncoder pass = wgpuCommandEncoderBeginRenderPass(encoder, &pass_desc); |
