-
Notifications
You must be signed in to change notification settings - Fork 344
Closed
Closed
Copy link
Labels
apiWebGPU APIWebGPU API
Description
We could support below codes if [[immediate data]] is a internal slot of GPUBindingCommandsMixin.
// immediateData: {1, 2, 3, 4} => update [[immediate data]] to {1, 2, 3, 4}
renderPassEncoder.SetImmediateData(0, immediateData0.data(), immediateData0.size() * 4);
// Pipeline has layout with 12 bytes immediate data range.
renderPassEncoder.SetPipeline(Pipeline0);
// shader could access {1, 2, 3}
renderPassEncoder.Draw(3);
// uint32_value = 6, => update [[immediate data]] to {1, 6, 3, 4}
renderPassEncoder.SetImmediateData(4, &uint32_value, 4);
// Pipeline has layout with 8 bytes immediate data range.
renderPassEncoder.SetPipeline(pipeline1);
// shader could access {1, 6}
renderPassEncoder.Draw(3);
// Pipeline has layout with 16 bytes immediate data range.
renderPassEncoder.SetPipeline(pipeline2);
// shader could access {1, 6, 3, 4}
renderPassEncoder.Draw(3);
// Pipeline has layout with 0 bytes immediate data range.
renderPassEncoder.SetPipeline(pipeline3);
// shader access non immediate data values.
renderPassEncoder.Draw(3);
renderPassEncoder.End();
It means:
- each bound pipeline with draw call or dispatch, which has immediate data range layout, could get the latest immediate data content.
- immediate data content remains between draw/dispatch calls in the same encoder instead of been clear to 0.
Kangz
Metadata
Metadata
Assignees
Labels
apiWebGPU APIWebGPU API