GPURenderPassEncoder: phương thức setBindGroup()
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 GPURenderPassEncoder đặt GPUBindGroup để sử dụng cho các lệnh kết xuất 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 nhóm bind tại đó. Điều này khớp với giá trị chỉ mục
ncủa thuộc tính@group(n)tương ứng trong mã đổ bóng (GPUShaderModule) được dùng trong pipeline liên quan. bindGroup-
GPUBindGroupđể sử dụng cho các lệnh kết xuất tiếp theo, hoặcnull, trong trường hợp đó bất kỳ nhóm bind đã đặt trước đó trong vị trí đã cho sẽ bị bỏ đặt. dynamicOffsetsOptional-
Một giá trị chỉ định độ lệch, tính bằng byte, cho mỗi mục trong
bindGroupcóhasDynamicOffset: trueđược đặt (tức là trong descriptor của lệnh gọiGPUDevice.createBindGroupLayout()đã tạo đối tượngGPUBindGroupLayoutmàbindGroupdựa trên). Giá trị này có thể là:- Một mảng các số chỉ định các độ lệch khác nhau.
- Một
Uint32Arraychứa các số chỉ định các độ lệch.
Nếu giá trị Uint32Array được chỉ định cho dynamicOffsets, cả hai tham số sau cũng bắt buộc:
dynamicOffsetsStart-
Một số chỉ định độ lệch, tính bằng phần tử mảng, vào
dynamicOffsetsData, nơi dữ liệu độ lệch động bắt đầu. dynamicOffsetsLength-
Một số chỉ định số lượng giá trị độ lệch động cần đọc từ
dynamicOffsetsData.
Giá trị trả về
Không có (Undefined).
Ngoại lệ
Đối với các lệnh gọi setBindGroup() sử dụng giá trị Uint32Array cho dynamicOffsets, lệnh gọi sẽ ném ra RangeError DOMException nếu:
dynamicOffsetsStartnhỏ hơn 0.dynamicOffsetsStart+dynamicOffsetsLengthlớn hơndynamicOffsets.length.
Xác thực
Các tiêu chí sau phải được đáp ứng khi gọi setBindGroup(), nếu không GPUValidationError sẽ được tạo ra và GPURenderPassEncoder sẽ không hợp lệ:
indexnhỏ hơn hoặc bằng giới hạnmaxBindGroupslimit củaGPUDevice.dynamicOffsets.lengthbằng với số lượng mục trongbindGroupcóhasDynamicOffset: trueđược đặt.- Đối với các mục
bindGroupmàtypecủabufferbị ràng buộc là"uniform"(xemGPUDevice.createBindGroupLayout()), mỗi số trongdynamicOffsetslà bội số của giới hạnminUniformBufferOffsetAlignmentlimit củaGPUDevice. - Đối với các mục
bindGroupmàtypecủabufferbị ràng buộc là"storage"hoặc"read-only-storage"(xemGPUDevice.createBindGroupLayout()), mỗi số trongdynamicOffsetslà bội số của giới hạnminStorageBufferOffsetAlignmentlimit củaGPUDevice. - Đối với mỗi mục
bindGroup,offsetcủabufferbị ràng buộc, cộng vớiminBindingSizecủa mục layout tương ứng, cộng với độ lệch động tương ứng được chỉ định trongdynamicOffsets, nhỏ hơn hoặc bằngsizecủabufferbị ràng buộc.
Ví dụ
>Đặt nhóm bind
Trong ví dụ WebGPU Samples Textured Cube example, setBindGroup() được dùng để ràng buộc uniformBindGroup vào vị trí chỉ mục 0. Xem ví dụ để có đầy đủ ngữ cảnh.
// …
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
passEncoder.setPipeline(pipeline);
passEncoder.setBindGroup(0, uniformBindGroup);
passEncoder.setVertexBuffer(0, verticesBuffer);
passEncoder.draw(cubeVertexCount, 1, 0, 0);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
// …
Note:
Nghiên cứu các WebGPU Samples khác để biết thêm ví dụ về cách sử dụng setBindGroup().
Bỏ đặt nhóm bind
// Set bind group in slot 0
passEncoder.setBindGroup(0, uniformBindGroup);
// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);
Thông số kỹ thuật
| Specification |
|---|
| WebGPU> # programmable-passes-bind-groups> |