summaryrefslogtreecommitdiff
path: root/src/gpu/pipeline_builder.h
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-16 15:20:39 +0100
committerskal <pascal.massimino@gmail.com>2026-02-16 15:20:39 +0100
commit1c9bc4abd5ab90a61e3485fe30ff3c6f9b4b319c (patch)
treeae97a9712411eedc1fee98c134fc54e53de8b047 /src/gpu/pipeline_builder.h
parent80d395b8bc0c37778401eb771094c25db7a1b8a4 (diff)
refactor(headless): convert nullptr checks to strippable macros
Added HEADLESS_RETURN_IF_NULL/HEADLESS_RETURN_VAL_IF_NULL macros that compile to no-ops in STRIP_ALL/FINAL_STRIP modes. Files updated: - fatal_error.h: New headless check macros - sequence.cc: NodeRegistry::create_texture - post_process_helper.cc: Pipeline creation functions - sampler_cache.h: SamplerCache::get_or_create - bind_group_builder.h: Layout/group builders - pipeline_builder.h: Shader and pipeline builders - All effect constructors (7 files) Headless tests passing. STRIP_ALL builds will have zero overhead. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/gpu/pipeline_builder.h')
-rw-r--r--src/gpu/pipeline_builder.h28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/gpu/pipeline_builder.h b/src/gpu/pipeline_builder.h
index a258b49..937c55f 100644
--- a/src/gpu/pipeline_builder.h
+++ b/src/gpu/pipeline_builder.h
@@ -15,6 +15,7 @@ typedef struct WGPUShaderModuleImpl* WGPUShaderModule;
#include "gpu/shader_composer.h"
#include "platform/platform.h"
+#include "util/fatal_error.h"
class RenderPipelineBuilder {
WGPUDevice device_;
@@ -38,17 +39,18 @@ class RenderPipelineBuilder {
RenderPipelineBuilder& shader(const char* wgsl, bool compose = true) {
shader_text_ = compose ? ShaderComposer::Get().Compose({}, wgsl) : wgsl;
- // 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");
+ // 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;
}
@@ -88,10 +90,8 @@ class RenderPipelineBuilder {
}
WGPURenderPipeline build() {
- // Headless mode: skip pipeline creation
- if (device_ == nullptr) {
- return nullptr;
- }
+ // Headless mode: skip pipeline creation (compiled out in STRIP_ALL)
+ HEADLESS_RETURN_VAL_IF_NULL(device_, nullptr);
color_.writeMask = WGPUColorWriteMask_All;
if (has_blend_)