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

requiredLimits must be an ordinary JS object #4277

@OptimisticPeach

Description

@OptimisticPeach

Quoting from https://crbug.com/dawn/2025:

Notice that the following yields false:

let adapter = await navigator.gpu.requestAdapter();
let requiredLimits = adapter.limits;
let device = await adapter.requestDevice({ requiredLimits });
device.limits.maxBufferSize == requiredLimits.maxBufferSize

Whereas the following yields true:

let adapter = await navigator.gpu.requestAdapter();
let requiredLimits = {};
requiredLimits.maxBufferSize = adapter.limits.maxBufferSize;
let device = await adapter.requestDevice({ requiredLimits });
device.limits.maxBufferSize == requiredLimits.maxBufferSize

And indeed the following also yields true (we copy every property from adapter.limits to requiredLimits manually here):

let adapter = await navigator.gpu.requestAdapter();
let requiredLimits = {};
requiredLimits.maxBufferSize = adapter.limits.maxBufferSize;
for (const key in adapter.limits) {
    requiredLimits[key] = adapter.limits[key];
}
let device = await adapter.requestDevice({ requiredLimits });
device.limits.maxBufferSize == requiredLimits.maxBufferSize

I'd expect that requesting a device using requiredLimits as adapter.limits would be fine, however requiredLimits
apparently needs to be a plain JS object (whereas adapter.limits is an instance GPUSupportedLimits).

(I was requested to repost the issue here on the Dawn issue)

Metadata

Metadata

Assignees

No one assigned

    Labels

    apiWebGPU APIapi resolvedResolved - waiting for a change to the API specificationneeds-cts-issueThis change requires tests (or would need tests if accepted), but may not have a CTS issue filed yet

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions