blob: 8f122504118e6db29b2b5c5cc81121ee45e10845 [file] [log] [blame]
/*
* 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;
};