51 lines
1.8 KiB
C++
Executable file
51 lines
1.8 KiB
C++
Executable file
#pragma once
|
|
|
|
#include <emscripten/html5_webgpu.h>
|
|
|
|
#include "gfx.hpp"
|
|
|
|
class GFXWebGPU : public GFX {
|
|
public:
|
|
bool initialize(const GFXCreateInfo& createInfo) override;
|
|
|
|
ShaderLanguage accepted_shader_language() override;
|
|
const char* get_name() override;
|
|
|
|
// buffer
|
|
GFXBuffer* create_buffer(void* data, GFXSize size, bool is_dynamic, GFXBufferUsage usage) override;
|
|
void copy_buffer(GFXBuffer* buffer, void* data, GFXSize offset, GFXSize size) override;
|
|
|
|
void* get_buffer_contents(GFXBuffer* buffer) override;
|
|
void release_buffer_contents(GFXBuffer* buffer, void* handle) override;
|
|
|
|
// texture
|
|
GFXTexture* create_texture(const GFXTextureCreateInfo& info) override;
|
|
void copy_texture(GFXTexture* texture, void* data, GFXSize size) override;
|
|
void copy_texture(GFXTexture* from, GFXTexture* to) override;
|
|
void copy_texture(GFXTexture* from, GFXBuffer* to) override;
|
|
|
|
// sampler
|
|
GFXSampler* create_sampler(const GFXSamplerCreateInfo& info) override;
|
|
|
|
// framebuffer
|
|
GFXFramebuffer* create_framebuffer(const GFXFramebufferCreateInfo& info) override;
|
|
|
|
// render pass
|
|
GFXRenderPass* create_render_pass(const GFXRenderPassCreateInfo& info) override;
|
|
|
|
// pipeline
|
|
GFXPipeline* create_graphics_pipeline(const GFXGraphicsPipelineCreateInfo& info) override;
|
|
GFXPipeline* create_compute_pipeline(const GFXComputePipelineCreateInfo& info) override;
|
|
|
|
GFXCommandBuffer* acquire_command_buffer(bool for_presentation_use) override;
|
|
|
|
void submit(GFXCommandBuffer* command_buffer, platform::window_ptr window) override;
|
|
|
|
private:
|
|
WGPUSwapChain create_swapchain();
|
|
WGPUShaderModule create_shader(const uint32_t* code, uint32_t size, std::string_view label);
|
|
|
|
WGPUDevice device;
|
|
WGPUQueue queue;
|
|
WGPUSwapChain swapchain;
|
|
};
|