mirror of
https://github.com/denoland/deno.git
synced 2025-01-21 13:00:36 -05:00
initial commit
This commit is contained in:
parent
475793f94d
commit
c6d3980d96
3 changed files with 105 additions and 20 deletions
|
@ -434,26 +434,6 @@ class GPUAdapter {
|
||||||
/** @type {boolean} */
|
/** @type {boolean} */
|
||||||
[_invalid];
|
[_invalid];
|
||||||
|
|
||||||
/** @returns {GPUSupportedFeatures} */
|
|
||||||
get features() {
|
|
||||||
webidl.assertBranded(this, GPUAdapterPrototype);
|
|
||||||
return this[_adapter].features;
|
|
||||||
}
|
|
||||||
/** @returns {GPUSupportedLimits} */
|
|
||||||
get limits() {
|
|
||||||
webidl.assertBranded(this, GPUAdapterPrototype);
|
|
||||||
return this[_adapter].limits;
|
|
||||||
}
|
|
||||||
/** @returns {boolean} */
|
|
||||||
get isFallbackAdapter() {
|
|
||||||
webidl.assertBranded(this, GPUAdapterPrototype);
|
|
||||||
return this[_adapter].isFallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
webidl.illegalConstructor();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {GPUDeviceDescriptor} descriptor
|
* @param {GPUDeviceDescriptor} descriptor
|
||||||
* @returns {Promise<GPUDevice>}
|
* @returns {Promise<GPUDevice>}
|
||||||
|
|
104
ext/webgpu/device.rs
Normal file
104
ext/webgpu/device.rs
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
use deno_core::cppgc::SameObject;
|
||||||
|
use deno_core::{op2, v8, WebIDL};
|
||||||
|
use deno_core::GarbageCollected;
|
||||||
|
|
||||||
|
struct GPUAdapter {
|
||||||
|
features: SameObject<GPUAdapter>,
|
||||||
|
limits: SameObject<GPUAdapter>,
|
||||||
|
is_fallback: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GarbageCollected for GPUAdapter {}
|
||||||
|
|
||||||
|
#[op2]
|
||||||
|
impl GPUAdapter {
|
||||||
|
#[getter]
|
||||||
|
#[global]
|
||||||
|
fn features(&self, scope: &mut v8::HandleScope) -> v8::Global<v8::Object> {
|
||||||
|
self.features.get(scope, || ())
|
||||||
|
}
|
||||||
|
#[getter]
|
||||||
|
#[global]
|
||||||
|
fn limits(&self, scope: &mut v8::HandleScope) -> v8::Global<v8::Object> {
|
||||||
|
self.limits.get(scope, || ())
|
||||||
|
}
|
||||||
|
#[getter]
|
||||||
|
fn is_fallback_adapter(&self) -> bool {
|
||||||
|
self.is_fallback
|
||||||
|
}
|
||||||
|
|
||||||
|
#[async_method]
|
||||||
|
#[cppgc]
|
||||||
|
async fn request_device(&self, #[webidl] init: GPUDeviceDescriptor) -> GPUDevice {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, WebIDL)]
|
||||||
|
#[webidl(enum)]
|
||||||
|
enum GPUFeatureName {
|
||||||
|
// api
|
||||||
|
DepthClipControl,
|
||||||
|
TimestampQuery,
|
||||||
|
IndirectFirstInstance,
|
||||||
|
// shader
|
||||||
|
ShaderF16,
|
||||||
|
// texture formats
|
||||||
|
#[webidl(rename = "depth32float-stencil8")]
|
||||||
|
Depth32floatStencil8,
|
||||||
|
TextureCompressionBc,
|
||||||
|
TextureCompressionEtc2,
|
||||||
|
TextureCompressionAstc,
|
||||||
|
#[webidl(rename = "rg11b10ufloat-renderable")]
|
||||||
|
Rg11b10ufloatRenderable,
|
||||||
|
#[webidl(rename = "bgra8unorm-storage")]
|
||||||
|
Bgra8unormStorage,
|
||||||
|
#[webidl(rename = "bgra8unorm-storage")]
|
||||||
|
"float32-filterable",
|
||||||
|
|
||||||
|
// extended from spec
|
||||||
|
|
||||||
|
// texture formats
|
||||||
|
"texture-format-16-bit-norm",
|
||||||
|
"texture-compression-astc-hdr",
|
||||||
|
"texture-adapter-specific-format-features",
|
||||||
|
// api
|
||||||
|
//"pipeline-statistics-query",
|
||||||
|
"timestamp-query-inside-passes",
|
||||||
|
"mappable-primary-buffers",
|
||||||
|
"texture-binding-array",
|
||||||
|
"buffer-binding-array",
|
||||||
|
"storage-resource-binding-array",
|
||||||
|
"sampled-texture-and-storage-buffer-array-non-uniform-indexing",
|
||||||
|
"uniform-buffer-and-storage-texture-array-non-uniform-indexing",
|
||||||
|
"partially-bound-binding-array",
|
||||||
|
"multi-draw-indirect",
|
||||||
|
"multi-draw-indirect-count",
|
||||||
|
"push-constants",
|
||||||
|
"address-mode-clamp-to-zero",
|
||||||
|
"address-mode-clamp-to-border",
|
||||||
|
"polygon-mode-line",
|
||||||
|
"polygon-mode-point",
|
||||||
|
"conservative-rasterization",
|
||||||
|
"vertex-writable-storage",
|
||||||
|
"clear-texture",
|
||||||
|
"spirv-shader-passthrough",
|
||||||
|
"multiview",
|
||||||
|
"vertex-attribute-64-bit",
|
||||||
|
// shader
|
||||||
|
"shader-f64",
|
||||||
|
"shader-i16",
|
||||||
|
"shader-primitive-index",
|
||||||
|
"shader-early-depth-test",
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, WebIDL)]
|
||||||
|
#[webidl(dictionary)]
|
||||||
|
struct GPUDeviceDescriptor {
|
||||||
|
#[webidl(default = vec![])]
|
||||||
|
required_features: Vec<()>,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct GPUDevice {}
|
||||||
|
|
||||||
|
impl GarbageCollected for GPUDevice {}
|
|
@ -82,6 +82,7 @@ pub mod sampler;
|
||||||
pub mod shader;
|
pub mod shader;
|
||||||
pub mod surface;
|
pub mod surface;
|
||||||
pub mod texture;
|
pub mod texture;
|
||||||
|
mod device;
|
||||||
|
|
||||||
#[derive(Debug, thiserror::Error, deno_error::JsError)]
|
#[derive(Debug, thiserror::Error, deno_error::JsError)]
|
||||||
pub enum InitError {
|
pub enum InitError {
|
||||||
|
|
Loading…
Add table
Reference in a new issue