Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
prism/engine/gfx/webgpu/include/gfx_webgpu.hpp

67 lines
2.2 KiB
C++
Raw Normal View History

2020-08-11 12:07:21 -04:00
#pragma once
#include <emscripten/html5_webgpu.h>
2020-08-11 12:07:21 -04:00
#include "gfx.hpp"
2022-03-06 21:40:58 -05:00
class GFXWebGPUPipeline;
class GFXWebGPU : public GFX {
2020-08-11 12:07:21 -04:00
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);
2022-03-06 21:40:58 -05:00
uint64_t get_bind_group_hash(GFXWebGPUPipeline* pipeline);
void cache_bind_group_state(GFXWebGPUPipeline* pipeline, WGPUBindGroupLayout group_layout);
void reset_bind_state();
WGPUDevice device;
WGPUQueue queue;
WGPUSwapChain swapchain;
2022-03-06 21:40:58 -05:00
struct BoundShaderBuffer {
GFXBuffer* buffer = nullptr;
uint32_t size = 0, offset = 0;
};
std::array<BoundShaderBuffer, 25> boundShaderBuffers;
std::array<GFXTexture*, 25> boundTextures;
std::array<GFXSampler*, 25> boundSamplers;
2020-08-11 12:07:21 -04:00
};