GPUAdapter: requestDevice() 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 requestDevice() của giao diện GPUAdapter trả về một Promise phân giải thành một đối tượng GPUDevice, là giao diện chính để giao tiếp với GPU.
Cú pháp
requestDevice()
requestDevice(descriptor)
Tham số
descriptorOptional-
Một đối tượng chứa các thuộc tính sau:
defaultQueueOptional-
Một đối tượng cung cấp thông tin cho
GPUQueuemặc định của thiết bị. Đối tượng này có một thuộc tính duy nhất làlabel, cung cấp nhãn cho hàng đợi mặc định. Nếu không cung cấp, mặc định là đối tượng rỗng và nhãn hàng đợi mặc định sẽ là chuỗi rỗng. labelOptional-
Một chuỗi cung cấp nhãn có thể dùng để nhận diện
GPUDevice. requiredFeaturesOptional-
Một mảng chuỗi đại diện cho các chức năng bổ sung mà
GPUDevicetrả về cần hỗ trợ. Lệnh gọirequestDevice()sẽ thất bại nếuGPUAdapterkhông thể cung cấp các tính năng này. Mặc định là mảng rỗng. requiredLimitsOptional-
Một đối tượng chứa các thuộc tính đại diện cho các giới hạn mà
GPUDevicetrả về cần hỗ trợ. Lệnh gọirequestDevice()sẽ thất bại nếuGPUAdapterkhông thể cung cấp các giới hạn này.Note: Bạn có thể yêu cầu các giới hạn không xác định khi yêu cầu thiết bị GPU mà không gây ra lỗi. Các giới hạn như vậy sẽ là
undefined.
Giá trị trả về
Một Promise phân giải thành một phiên bản đối tượng GPUDevice.
Nếu bạn thực hiện lệnh gọi trùng lặp, tức là gọi requestDevice() trên GPUAdapter mà requestDevice() đã được gọi trước đó, promise sẽ từ chối với OperationError.
Ngoại lệ
OperationErrorDOMException-
Promise từ chối với
OperationErrornếu:- Các giới hạn trong thuộc tính
requiredLimitskhông đượcGPUAdapterhỗ trợ. GPUAdapterđã được sử dụng bằng cách gọirequestDevice()trên nó trước đó.
- Các giới hạn trong thuộc tính
TypeErrorDOMException-
Promise từ chối với
TypeErrornếu các tính năng trong thuộc tínhrequiredFeatureskhông đượcGPUAdapterhỗ trợ.
Ví dụ
>Ví dụ cơ bản
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const device = await adapter.requestDevice();
// …
}
Yêu cầu các tính năng và giới hạn cụ thể
Trong đoạn mã dưới đây:
- Kiểm tra xem
GPUAdaptercó tính năngtexture-compression-astchay không. Nếu có, thêm vào mảngrequiredFeatures. - Truy vấn giá trị
GPUAdapter.limitscủamaxBindGroupsđể xem nó có bằng hoặc lớn hơn 6 không. - Yêu cầu thiết bị với các yêu cầu tính năng và giới hạn đó, cùng với nhãn
defaultQueue.
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const requiredFeatures = [];
if (adapter.features.has("texture-compression-astc")) {
requiredFeatures.push("texture-compression-astc");
}
const requiredLimits = {};
// App ideally needs 6 bind groups, so we'll try to request what the app needs
if (adapter.limits.maxBindGroups >= 6) {
requiredLimits.maxBindGroups = 6;
}
const device = await adapter.requestDevice({
defaultQueue: {
label: "my_queue",
},
requiredFeatures,
requiredLimits,
});
// …
}
Thông số kỹ thuật
| Specification |
|---|
| WebGPU> # dom-gpuadapter-requestdevice> |