diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-28 08:45:28 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-28 08:45:28 +0100 |
| commit | e07f87cba89ef738781399b079840615f27e1667 (patch) | |
| tree | 8a6cd84a3e9b40e781300c3acccc8ad0f7300b7b /src/gpu/pipeline_builder.h | |
| parent | af06b3512598c81c472fdbbeb4994c7eb8621d4c (diff) | |
refactor(gpu): move RenderPipelineBuilder impl to pipeline_builder.cc
Keeps .h as declarations only; moves all method bodies to .cc.
Adds pipeline_builder.cc to COMMON_GPU_EFFECTS in DemoSourceLists.cmake.
handoff(Claude): pipeline_builder split to .h/.cc, builds clean.
Diffstat (limited to 'src/gpu/pipeline_builder.h')
| -rw-r--r-- | src/gpu/pipeline_builder.h | 99 |
1 files changed, 9 insertions, 90 deletions
diff --git a/src/gpu/pipeline_builder.h b/src/gpu/pipeline_builder.h index 937c55f..9fd76f9 100644 --- a/src/gpu/pipeline_builder.h +++ b/src/gpu/pipeline_builder.h @@ -3,7 +3,6 @@ #include <string> #include <vector> -// Forward declarations (users must include gpu.h and shader_composer.h) struct WGPUDeviceImpl; typedef struct WGPUDeviceImpl* WGPUDevice; struct WGPUBindGroupLayoutImpl; @@ -15,7 +14,6 @@ typedef struct WGPUShaderModuleImpl* WGPUShaderModule; #include "gpu/shader_composer.h" #include "platform/platform.h" -#include "util/fatal_error.h" class RenderPipelineBuilder { WGPUDevice device_; @@ -30,93 +28,14 @@ class RenderPipelineBuilder { bool has_depth_ = false; public: - explicit RenderPipelineBuilder(WGPUDevice device) : device_(device) { - desc_.primitive.topology = WGPUPrimitiveTopology_TriangleList; - desc_.primitive.cullMode = WGPUCullMode_None; - desc_.multisample.count = 1; - desc_.multisample.mask = 0xFFFFFFFF; - } + explicit RenderPipelineBuilder(WGPUDevice device); - RenderPipelineBuilder& shader(const char* wgsl, bool compose = true) { - shader_text_ = compose ? ShaderComposer::Get().Compose({}, wgsl) : wgsl; - // Headless mode: skip shader module creation (compiled out in STRIP_ALL) - if (device_ == nullptr) { - return *this; - } - WGPUShaderSourceWGSL wgsl_src{}; - wgsl_src.chain.sType = WGPUSType_ShaderSourceWGSL; - wgsl_src.code = str_view(shader_text_.c_str()); - WGPUShaderModuleDescriptor shader_desc{}; - shader_desc.nextInChain = &wgsl_src.chain; - shader_module_ = wgpuDeviceCreateShaderModule(device_, &shader_desc); - desc_.vertex.module = shader_module_; - desc_.vertex.entryPoint = str_view("vs_main"); - return *this; - } - - RenderPipelineBuilder& bind_group_layout(WGPUBindGroupLayout layout) { - layouts_.push_back(layout); - return *this; - } - - RenderPipelineBuilder& format(WGPUTextureFormat fmt) { - color_.format = fmt; - return *this; - } - - RenderPipelineBuilder& blend_alpha() { - has_blend_ = true; - blend_.color.operation = WGPUBlendOperation_Add; - blend_.color.srcFactor = WGPUBlendFactor_SrcAlpha; - blend_.color.dstFactor = WGPUBlendFactor_OneMinusSrcAlpha; - blend_.alpha.operation = WGPUBlendOperation_Add; - blend_.alpha.srcFactor = WGPUBlendFactor_One; - blend_.alpha.dstFactor = WGPUBlendFactor_OneMinusSrcAlpha; - return *this; - } - - RenderPipelineBuilder& - depth(WGPUTextureFormat depth_fmt = WGPUTextureFormat_Depth24Plus) { - has_depth_ = true; - depth_.format = depth_fmt; - depth_.depthWriteEnabled = WGPUOptionalBool_True; - depth_.depthCompare = WGPUCompareFunction_Less; - return *this; - } - - RenderPipelineBuilder& cull_back() { - desc_.primitive.cullMode = WGPUCullMode_Back; - return *this; - } - - WGPURenderPipeline build() { - // Headless mode: skip pipeline creation (compiled out in STRIP_ALL) - HEADLESS_RETURN_VAL_IF_NULL(device_, nullptr); - - color_.writeMask = WGPUColorWriteMask_All; - if (has_blend_) - color_.blend = &blend_; - - WGPUFragmentState fragment{}; - fragment.module = shader_module_; - fragment.entryPoint = str_view("fs_main"); - fragment.targetCount = 1; - fragment.targets = &color_; - - WGPUPipelineLayoutDescriptor pl_desc{}; - pl_desc.bindGroupLayoutCount = layouts_.size(); - pl_desc.bindGroupLayouts = layouts_.data(); - WGPUPipelineLayout layout = - wgpuDeviceCreatePipelineLayout(device_, &pl_desc); - - desc_.layout = layout; - desc_.fragment = &fragment; - if (has_depth_) - desc_.depthStencil = &depth_; - - WGPURenderPipeline pipeline = - wgpuDeviceCreateRenderPipeline(device_, &desc_); - wgpuPipelineLayoutRelease(layout); - return pipeline; - } + RenderPipelineBuilder& shader(const char* wgsl, bool compose = true); + RenderPipelineBuilder& bind_group_layout(WGPUBindGroupLayout layout); + RenderPipelineBuilder& format(WGPUTextureFormat fmt); + RenderPipelineBuilder& blend_alpha(); + RenderPipelineBuilder& depth( + WGPUTextureFormat depth_fmt = WGPUTextureFormat_Depth24Plus); + RenderPipelineBuilder& cull_back(); + WGPURenderPipeline build(); }; |
