summaryrefslogtreecommitdiff
path: root/src/gpu/pipeline_builder.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/pipeline_builder.h')
-rw-r--r--src/gpu/pipeline_builder.h24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/gpu/pipeline_builder.h b/src/gpu/pipeline_builder.h
index 87b9190..a258b49 100644
--- a/src/gpu/pipeline_builder.h
+++ b/src/gpu/pipeline_builder.h
@@ -38,14 +38,17 @@ class RenderPipelineBuilder {
RenderPipelineBuilder& shader(const char* wgsl, bool compose = true) {
shader_text_ = compose ? ShaderComposer::Get().Compose({}, wgsl) : wgsl;
- 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");
+ // Headless mode: skip shader module creation
+ if (device_ != nullptr) {
+ 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;
}
@@ -85,6 +88,11 @@ class RenderPipelineBuilder {
}
WGPURenderPipeline build() {
+ // Headless mode: skip pipeline creation
+ if (device_ == nullptr) {
+ return nullptr;
+ }
+
color_.writeMask = WGPUColorWriteMask_All;
if (has_blend_)
color_.blend = &blend_;