GPUComputePassEncoder: setBindGroup() method
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
Phương thức setBindGroup() của giao diện GPUComputePassEncoder đặt GPUBindGroup để sử dụng cho các lệnh compute tiếp theo, cho một chỉ mục nhất định.
Cú pháp
setBindGroup(index, bindGroup)
setBindGroup(index, bindGroup, dynamicOffsets)
setBindGroup(index, bindGroup, dynamicOffsets, dynamicOffsetsStart,
dynamicOffsetsLength)
Tham số
index-
Chỉ mục để đặt bind group. Giá trị này khớp với chỉ mục
ncủa thuộc tính@group(n)tương ứng trong shader code (GPUShaderModule) được dùng trong pipeline liên quan. bindGroup-
GPUBindGroupđể sử dụng cho các lệnh compute tiếp theo, hoặcnull, trong trường hợp đó bất kỳ bind group nào đã được đặt trước đó trong slot nhất định sẽ bị hủy. dynamicOffsetsOptional-
Giá trị chỉ định offset tính bằng byte cho mỗi mục trong
bindGroupcó đặthasDynamicOffset: true(tức là trong descriptor của lời gọiGPUDevice.createBindGroupLayout()đã tạo ra đối tượngGPUBindGroupLayoutmàbindGroupdựa trên). Giá trị này có thể là:- Mảng các số chỉ định các offset khác nhau.
Uint32Arraychứa các số chỉ định các offset.
Nếu giá trị Uint32Array được chỉ định cho dynamicOffsets, cả hai tham số sau cũng bắt buộc phải có:
dynamicOffsetsStart-
Số chỉ định offset tính theo phần tử mảng vào trong
dynamicOffsetsData, nơi dữ liệu dynamic offset bắt đầu. dynamicOffsetsLength-
Số chỉ định số lượng giá trị dynamic offset cần đọc từ
dynamicOffsetsData.
Giá trị trả về
Không có (Undefined).
Ngoại lệ
Với các lời gọi setBindGroup() sử dụng giá trị Uint32Array cho dynamicOffsets, lời gọi sẽ ném ra RangeError DOMException nếu:
dynamicOffsetsStartnhỏ hơn 0.dynamicOffsetsStart+dynamicOffsetsLengthlớn hơndynamicOffsets.length.
Kiểm tra hợp lệ
Các tiêu chí sau phải được đáp ứng khi gọi dispatchWorkgroups(), nếu không GPUValidationError sẽ được tạo ra và GPUComputePassEncoder sẽ trở nên không hợp lệ:
indexnhỏ hơn hoặc bằng giới hạnmaxBindGroupslimit củaGPUDevice.dynamicOffsets.lengthbằng số mục trongbindGroupcóhasDynamicOffset: true.- Với các mục
bindGroupmàbufferđược liên kết cótypelà"uniform"(xemGPUDevice.createBindGroupLayout()), mỗi số trongdynamicOffsetsphải là bội số của giới hạnminUniformBufferOffsetAlignmentlimit củaGPUDevice. - Với các mục
bindGroupmàbufferđược liên kết cótypelà"storage"hoặc"read-only-storage"(xemGPUDevice.createBindGroupLayout()), mỗi số trongdynamicOffsetsphải là bội số của giới hạnminStorageBufferOffsetAlignmentlimit củaGPUDevice. - Với mỗi mục
bindGroup,offsetcủabufferđược liên kết, cộng vớiminBindingSizecủa mục layout tương ứng, cộng với dynamic offset tương ứng được chỉ định trongdynamicOffsets, phải nhỏ hơn hoặc bằngsizecủabufferđược liên kết.
Ví dụ
>Đặt bind group
Trong bản demo compute cơ bản, một số lệnh được ghi thông qua GPUCommandEncoder. Phần lớn các lệnh này xuất phát từ GPUComputePassEncoder được tạo qua beginComputePass(). Lời gọi setBindGroup() được sử dụng ở đây ở dạng đơn giản nhất, chỉ chỉ định chỉ mục và bind group.
const BUFFER_SIZE = 1000;
// …
// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();
// Initiate compute pass
const passEncoder = commandEncoder.beginComputePass();
// Issue commands
passEncoder.setPipeline(computePipeline);
passEncoder.setBindGroup(0, bindGroup);
passEncoder.dispatchWorkgroups(Math.ceil(BUFFER_SIZE / 64));
// End the render pass
passEncoder.end();
// Copy output buffer to staging buffer
commandEncoder.copyBufferToBuffer(
output,
0, // Source offset
stagingBuffer,
0, // Destination offset
BUFFER_SIZE,
);
// End frame by passing array of command buffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);
// …
Hủy bind group
// Set bind group in slot 0
passEncoder.setBindGroup(0, bindGroup);
// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);
Thông số kỹ thuật
| Specification |
|---|
| WebGPU> # programmable-passes-bind-groups> |