Sitelet https://github.com/gpuweb/gpuweb/issues/5117
Skip to content

[Immediate Data] Add internal slot [[immediate data]] in GPUBindingCommandsMixin #5117

Description

@shaoboyan091

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    apiWebGPU API

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions