| /* |
| * Copyright 2023 Rive |
| */ |
| |
| #pragma once |
| |
| #include "rive/rive_types.hpp" |
| |
| #ifdef RIVE_DAWN |
| #include <dawn/webgpu_cpp.h> |
| #endif |
| |
| #ifdef RIVE_WEBGPU |
| #include <webgpu/webgpu_cpp.h> |
| #include <emscripten.h> |
| #include <emscripten/html5_webgpu.h> |
| #endif |
| |
| // RAII object that stores and releases a handle to a WebGPU object passed from Javascript. |
| // Original source: |
| // https://github.com/emscripten-core/emscripten/blob/08cca043d8ba313d774bec8153fab66b70a6fe60/test/webgpu_jsvalstore.cpp |
| class EmJsHandle |
| { |
| public: |
| EmJsHandle() : m_handle(0) {} |
| explicit EmJsHandle(int handle) : m_handle(handle) {} |
| ~EmJsHandle(); |
| |
| EmJsHandle(const EmJsHandle&) = delete; |
| EmJsHandle& operator=(const EmJsHandle&) = delete; |
| |
| EmJsHandle(EmJsHandle&& rhs) : m_handle(rhs.m_handle) { rhs.m_handle = 0; } |
| EmJsHandle& operator=(EmJsHandle&& rhs); |
| |
| int get() const { return m_handle; } |
| |
| wgpu::ShaderModule compileSPIRVShaderModule(wgpu::Device device, |
| const uint32_t* code, |
| uint32_t codeSize); |
| |
| wgpu::ShaderModule compileShaderModule(wgpu::Device device, |
| const char* language, |
| const char* source); |
| |
| private: |
| int m_handle; |
| }; |