feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target (#27)
Adds the minimal WebGPU-backend surface an HDR bloom/post chain needs: 1. wgpuCreateStorageImage2D + StorageImage2D<>: runtime rgba16float (or other format) textures with STORAGE_BINDING|TEXTURE_BINDING usage, no CompressedTextureAsset upload — GPU-produced HDR targets. 2. UICustomBindingKind::StorageTexture (kind 5): write-only storage-texture binding carrying a texel format (the freed UICustomBinding::format byte), wired through all three binding paths (UI custom / RT / plain compute). Float textures already sample via SampledTexture (sampleType float). 3. PipelineRTWebGPU::Init(..., hdrOutputFormat): RESOLVE writes the linear accumulator into a user rgba16float texture (RTPass::outTexHandle) instead of the rgba8unorm canvas, leaving the composite→swapchain pass to the app. Default RGBA8Unorm keeps the canvas path byte-identical. Existing RT examples updated for the _pad→format field rename; the default paths are unchanged (verified RTStress builds + renders). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
2b266262ee
commit
097cc37347
12 changed files with 198 additions and 22 deletions
|
|
@ -80,8 +80,10 @@ void PipelineRTWebGPU::Init(WebGPUCommandEncoderRef /*cmd*/,
|
|||
std::span<const RTShaderGroup> missGroups,
|
||||
std::span<const RTShaderGroup> hitGroups,
|
||||
const ShaderBindingTableWebGPU& sbt,
|
||||
std::span<const UICustomBinding> bindings) {
|
||||
std::span<const UICustomBinding> bindings,
|
||||
WebGPUTexelFormat hdrOutputFormat) {
|
||||
userBindings.assign(bindings.begin(), bindings.end());
|
||||
hdrOutput = (hdrOutputFormat != WebGPUTexelFormat::RGBA8Unorm);
|
||||
std::string wgsl;
|
||||
wgsl.reserve(8 * 1024);
|
||||
|
||||
|
|
@ -306,5 +308,6 @@ void PipelineRTWebGPU::Init(WebGPUCommandEncoderRef /*cmd*/,
|
|||
wgsl.data(),
|
||||
static_cast<std::int32_t>(wgsl.size()),
|
||||
userBindings.empty() ? nullptr : userBindings.data(),
|
||||
static_cast<std::int32_t>(userBindings.size()));
|
||||
static_cast<std::int32_t>(userBindings.size()),
|
||||
static_cast<std::int32_t>(hdrOutputFormat));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -174,6 +174,8 @@ void UIRenderer::Dispatch(GraphicsCommandBuffer /*cmd*/, const GraphicsComputeSh
|
|||
if (slot < heap_->bufferTable.size()) handle = heap_->bufferTable[slot];
|
||||
break;
|
||||
case UICustomBindingKind::SampledTexture:
|
||||
case UICustomBindingKind::SampledTextureArray:
|
||||
case UICustomBindingKind::StorageTexture:
|
||||
if (slot < heap_->imageTable.size()) handle = heap_->imageTable[slot];
|
||||
break;
|
||||
case UICustomBindingKind::Sampler:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue