mirror of
https://github.com/denoland/deno.git
synced 2024-12-21 23:04:45 -05:00
fix(webgpu): Fix GPUAdapter#isFallbackAdapter
and GPUAdapter#info
properties (#24914)
Fixed `GPUAdapter` bugs: * `GPUAdapter#isFallbackAdapter` being `undefined` * `GPUAdapter#info` throwing `TypeError` * introduced by #24783 * `GPUAdapter#info` closing adapter resources * introduced by #23752
This commit is contained in:
parent
fe64cbd88b
commit
fade3136ba
2 changed files with 19 additions and 19 deletions
|
@ -137,6 +137,8 @@ const _mappingRange = Symbol("[[mapping_range]]");
|
|||
const _mappedRanges = Symbol("[[mapped_ranges]]");
|
||||
const _mapMode = Symbol("[[map_mode]]");
|
||||
const _adapter = Symbol("[[adapter]]");
|
||||
const _adapterInfo = Symbol("[[adapterInfo]]");
|
||||
const _invalid = Symbol("[[invalid]]");
|
||||
const _cleanup = Symbol("[[cleanup]]");
|
||||
const _vendor = Symbol("[[vendor]]");
|
||||
const _architecture = Symbol("[[architecture]]");
|
||||
|
@ -414,17 +416,18 @@ function createGPUAdapter(inner) {
|
|||
features: createGPUSupportedFeatures(inner.features),
|
||||
limits: createGPUSupportedLimits(inner.limits),
|
||||
};
|
||||
adapter[_adapterInfo] = undefined;
|
||||
adapter[_invalid] = false;
|
||||
return adapter;
|
||||
}
|
||||
|
||||
const _invalid = Symbol("[[invalid]]");
|
||||
class GPUAdapter {
|
||||
/** @type {InnerGPUAdapter} */
|
||||
[_adapter];
|
||||
/** @type {bool} */
|
||||
[_invalid];
|
||||
/** @type {GPUAdapterInfo | undefined} */
|
||||
#adapterInfo;
|
||||
[_adapterInfo];
|
||||
/** @type {boolean} */
|
||||
[_invalid];
|
||||
|
||||
/** @returns {GPUSupportedFeatures} */
|
||||
get features() {
|
||||
|
@ -439,7 +442,7 @@ class GPUAdapter {
|
|||
/** @returns {boolean} */
|
||||
get isFallbackAdapter() {
|
||||
webidl.assertBranded(this, GPUAdapterPrototype);
|
||||
return this[_adapter].isFallbackAdapter;
|
||||
return this[_adapter].isFallback;
|
||||
}
|
||||
|
||||
constructor() {
|
||||
|
@ -509,16 +512,16 @@ class GPUAdapter {
|
|||
get info() {
|
||||
webidl.assertBranded(this, GPUAdapterPrototype);
|
||||
|
||||
if (this[_adapterInfo] !== undefined) {
|
||||
return this[_adapterInfo];
|
||||
}
|
||||
|
||||
if (this[_invalid]) {
|
||||
throw new TypeError(
|
||||
"The adapter cannot be reused, as it has been invalidated by a device creation",
|
||||
);
|
||||
}
|
||||
|
||||
if (this.#adapterInfo !== undefined) {
|
||||
return this.#adapterInfo;
|
||||
}
|
||||
|
||||
const {
|
||||
vendor,
|
||||
architecture,
|
||||
|
@ -531,7 +534,7 @@ class GPUAdapter {
|
|||
adapterInfo[_architecture] = architecture;
|
||||
adapterInfo[_device] = device;
|
||||
adapterInfo[_description] = description;
|
||||
this.#adapterInfo = adapterInfo;
|
||||
this[_adapterInfo] = adapterInfo;
|
||||
return adapterInfo;
|
||||
}
|
||||
|
||||
|
@ -543,6 +546,7 @@ class GPUAdapter {
|
|||
keys: [
|
||||
"features",
|
||||
"limits",
|
||||
"info",
|
||||
"isFallbackAdapter",
|
||||
],
|
||||
}),
|
||||
|
@ -937,7 +941,6 @@ function GPUObjectBaseMixin(name, type) {
|
|||
* @property {number | undefined} rid
|
||||
* @property {GPUSupportedFeatures} features
|
||||
* @property {GPUSupportedLimits} limits
|
||||
* @property {GPUDevice} device
|
||||
*/
|
||||
|
||||
class InnerGPUDevice {
|
||||
|
|
|
@ -382,7 +382,7 @@ pub struct GpuAdapterRes {
|
|||
rid: ResourceId,
|
||||
limits: wgpu_types::Limits,
|
||||
features: Vec<&'static str>,
|
||||
is_software: bool,
|
||||
is_fallback: bool,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
|
@ -392,7 +392,6 @@ pub struct GpuDeviceRes {
|
|||
queue_rid: ResourceId,
|
||||
limits: wgpu_types::Limits,
|
||||
features: Vec<&'static str>,
|
||||
is_software: bool,
|
||||
}
|
||||
|
||||
#[op2]
|
||||
|
@ -462,7 +461,8 @@ pub fn op_webgpu_request_adapter(
|
|||
rid,
|
||||
features,
|
||||
limits: adapter_limits,
|
||||
is_software: false,
|
||||
// TODO(lucacasonato): report correctly from wgpu
|
||||
is_fallback: false,
|
||||
}))
|
||||
}
|
||||
|
||||
|
@ -712,8 +712,6 @@ pub fn op_webgpu_request_device(
|
|||
queue_rid,
|
||||
features,
|
||||
limits,
|
||||
// TODO(lucacasonato): report correctly from wgpu
|
||||
is_software: false,
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -732,14 +730,13 @@ pub fn op_webgpu_request_adapter_info(
|
|||
state: Rc<RefCell<OpState>>,
|
||||
#[smi] adapter_rid: ResourceId,
|
||||
) -> Result<GPUAdapterInfo, AnyError> {
|
||||
let mut state = state.borrow_mut();
|
||||
let state = state.borrow_mut();
|
||||
let adapter_resource =
|
||||
state.resource_table.take::<WebGpuAdapter>(adapter_rid)?;
|
||||
state.resource_table.get::<WebGpuAdapter>(adapter_rid)?;
|
||||
let adapter = adapter_resource.1;
|
||||
let instance = state.borrow::<Instance>();
|
||||
|
||||
let info = gfx_select!(adapter => instance.adapter_get_info(adapter))?;
|
||||
adapter_resource.close();
|
||||
|
||||
Ok(GPUAdapterInfo {
|
||||
vendor: info.vendor.to_string(),
|
||||
|
|
Loading…
Reference in a new issue