这是indexloc提供的服务,不要输入任何密码
Skip to content

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

@shaoboyan091

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.

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