wgpu/deno_webgpu/shader.rs
Leo Kettmeir df825fec8c
chore: update deno (#6068)
---------

Co-authored-by: Luca Casonato <hello@lcas.dev>
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
Co-authored-by: chirsz <chirsz@foxmail.com>
Co-authored-by: Hajime-san <41257923+hajime-san@users.noreply.github.com>
Co-authored-by: Volker Schlecht <47375452+vlkrs@users.noreply.github.com>
2024-12-18 08:01:50 -08:00

55 lines
1.4 KiB
Rust

// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
use super::wgpu_types;
use deno_core::op2;
use deno_core::OpState;
use deno_core::Resource;
use deno_core::ResourceId;
use std::borrow::Cow;
use std::rc::Rc;
use super::error::WebGpuResult;
pub(crate) struct WebGpuShaderModule(
pub(crate) super::Instance,
pub(crate) wgpu_core::id::ShaderModuleId,
);
impl Resource for WebGpuShaderModule {
fn name(&self) -> Cow<str> {
"webGPUShaderModule".into()
}
fn close(self: Rc<Self>) {
self.0.shader_module_drop(self.1);
}
}
#[op2]
#[serde]
pub fn op_webgpu_create_shader_module(
state: &mut OpState,
#[smi] device_rid: ResourceId,
#[string] label: Cow<str>,
#[string] code: Cow<str>,
) -> Result<WebGpuResult, deno_core::error::AnyError> {
let instance = state.borrow::<super::Instance>();
let device_resource = state
.resource_table
.get::<super::WebGpuDevice>(device_rid)?;
let device = device_resource.1;
let source = wgpu_core::pipeline::ShaderModuleSource::Wgsl(code);
let descriptor = wgpu_core::pipeline::ShaderModuleDescriptor {
label: Some(label),
runtime_checks: wgpu_types::ShaderRuntimeChecks::default(),
};
gfx_put!(instance.device_create_shader_module(
device,
&descriptor,
source,
None
) => state, WebGpuShaderModule)
}