webgpu triangle
This commit is contained in:
parent
64116cd980
commit
5553ded476
22 changed files with 2107 additions and 42 deletions
51
interfaces/Crafter.Graphics-PipelineRTWebGPU.cppm
Normal file
51
interfaces/Crafter.Graphics-PipelineRTWebGPU.cppm
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
Crafter®.Graphics
|
||||
Copyright (C) 2026 Catcrafts®
|
||||
catcrafts.net
|
||||
*/
|
||||
|
||||
// DOM-mode RT pipeline. Mirrors PipelineRTVulkan's surface — Init takes
|
||||
// the same kind of (raygen, miss, hit) shader-group spans plus an SBT.
|
||||
// The big difference is implementation: there's no native RT pipeline on
|
||||
// WebGPU, so Init assembles a single megakernel WGSL by concatenating
|
||||
// 1. library prelude (types, bindings, ray-flag constants)
|
||||
// 2. user closesthit / anyhit / miss source files
|
||||
// 3. library mega-switches dispatched on per-hit hit-group index
|
||||
// 4. library helpers (rayAabb / rayTriangle / traverseBlas / traverseTlas)
|
||||
// 5. library traceRay function
|
||||
// 6. user raygen source files
|
||||
// 7. @compute entry calling the registered raygen
|
||||
// and hands the result to wgpuLoadRTPipeline.
|
||||
//
|
||||
// The library WGSL itself lives in additional/dom-webgpu.js (rtWgslPrelude
|
||||
// + rtWgslDispatchTemplate). C++ side only knows the substitution markers.
|
||||
|
||||
export module Crafter.Graphics:PipelineRTWebGPU;
|
||||
#ifdef CRAFTER_GRAPHICS_WINDOW_DOM
|
||||
import std;
|
||||
import :RT;
|
||||
import :WebGPU;
|
||||
import :ShaderBindingTableWebGPU;
|
||||
|
||||
export namespace Crafter {
|
||||
class PipelineRTWebGPU {
|
||||
public:
|
||||
std::uint32_t pipelineHandle = 0;
|
||||
|
||||
// Build the megakernel pipeline. Groups carry indices into
|
||||
// `sbt.shaders`. The library generates one `case` per registered
|
||||
// group: closest-hit groups dispatch to their closestHitShader's
|
||||
// entryFn, miss groups to their generalShader's entryFn, etc.
|
||||
// The `cmd` parameter is unused on WebGPU; kept for API symmetry.
|
||||
void Init(WebGPUCommandEncoderRef cmd,
|
||||
std::span<const RTShaderGroup> raygenGroups,
|
||||
std::span<const RTShaderGroup> missGroups,
|
||||
std::span<const RTShaderGroup> hitGroups,
|
||||
const ShaderBindingTableWebGPU& sbt);
|
||||
|
||||
PipelineRTWebGPU() = default;
|
||||
PipelineRTWebGPU(const PipelineRTWebGPU&) = delete;
|
||||
PipelineRTWebGPU& operator=(const PipelineRTWebGPU&) = delete;
|
||||
};
|
||||
}
|
||||
#endif // CRAFTER_GRAPHICS_WINDOW_DOM
|
||||
Loading…
Add table
Add a link
Reference in a new issue