diff options
author | Istvan Miklos <istvan.miklos@h-lab.eu> | 2020-01-29 11:15:18 +0100 |
---|---|---|
committer | Istvan Miklos <istvan.miklos@h-lab.eu> | 2020-02-11 10:12:20 +0100 |
commit | a8621c4ed9d87f6d168fd9b70e0cf501a4033632 (patch) | |
tree | e27a0671c3b3c9c068c163fa95caaa3fc49d45e5 /components/webgpu/lib.rs | |
parent | 5f55cd5d71df9c555fbc24777168396ddd539f28 (diff) | |
download | servo-a8621c4ed9d87f6d168fd9b70e0cf501a4033632.tar.gz servo-a8621c4ed9d87f6d168fd9b70e0cf501a4033632.zip |
Initial implementation of GPUShaderModule
Added WebIDL bindings for `GPUShaderModule`.
Implemented the `createShaderModule` function of `GPUDevice`.
Diffstat (limited to 'components/webgpu/lib.rs')
-rw-r--r-- | components/webgpu/lib.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/components/webgpu/lib.rs b/components/webgpu/lib.rs index e3548a158ca..583ccb340d8 100644 --- a/components/webgpu/lib.rs +++ b/components/webgpu/lib.rs @@ -65,6 +65,12 @@ pub enum WebGPURequest { wgpu::id::PipelineLayoutId, Vec<wgpu::id::BindGroupLayoutId>, ), + CreateShaderModule( + IpcSender<WebGPUShaderModule>, + WebGPUDevice, + wgpu::id::ShaderModuleId, + Vec<u32>, + ), UnmapBuffer(WebGPUBuffer), DestroyBuffer(WebGPUBuffer), } @@ -286,6 +292,24 @@ impl WGPU { ) } }, + WebGPURequest::CreateShaderModule(sender, device, id, program) => { + let global = &self.global; + let descriptor = wgpu_core::pipeline::ShaderModuleDescriptor { + code: wgpu_core::U32Array { + bytes: program.as_ptr(), + length: program.len(), + }, + }; + let sm_id = gfx_select!(id => global.device_create_shader_module(device.0, &descriptor, id)); + let shader_module = WebGPUShaderModule(sm_id); + + if let Err(e) = sender.send(shader_module) { + warn!( + "Failed to send response to WebGPURequest::CreateShaderModule ({})", + e + ) + } + }, WebGPURequest::Exit(sender) => { self.deinit(); if let Err(e) = sender.send(()) { @@ -319,3 +343,4 @@ webgpu_resource!(WebGPUBuffer, wgpu::id::BufferId); webgpu_resource!(WebGPUBindGroup, wgpu::id::BindGroupId); webgpu_resource!(WebGPUBindGroupLayout, wgpu::id::BindGroupLayoutId); webgpu_resource!(WebGPUPipelineLayout, wgpu::id::PipelineLayoutId); +webgpu_resource!(WebGPUShaderModule, wgpu::id::ShaderModuleId); |