Add support for more GFX texture usages to WebGPU
This commit is contained in:
parent
45a33c55a2
commit
3e08319684
1 changed files with 19 additions and 4 deletions
|
@ -243,6 +243,21 @@ GFXTexture* GFXWebGPU::create_texture(const GFXTextureCreateInfo& info) {
|
|||
|
||||
descriptor.usage = WGPUTextureUsage_None;
|
||||
|
||||
if((info.usage & GFXTextureUsage::Sampled) == GFXTextureUsage::Sampled)
|
||||
descriptor.usage |= WGPUTextureUsage_TextureBinding;
|
||||
|
||||
if((info.usage & GFXTextureUsage::Sampled) == GFXTextureUsage::Attachment)
|
||||
descriptor.usage |= WGPUTextureUsage_RenderAttachment;
|
||||
|
||||
if((info.usage & GFXTextureUsage::Sampled) == GFXTextureUsage::TransferDst)
|
||||
descriptor.usage |= WGPUTextureUsage_CopyDst;
|
||||
|
||||
if((info.usage & GFXTextureUsage::Sampled) == GFXTextureUsage::TransferSrc)
|
||||
descriptor.usage |= WGPUTextureUsage_CopySrc;
|
||||
|
||||
if((info.usage & GFXTextureUsage::Storage) == GFXTextureUsage::Storage)
|
||||
descriptor.usage |= WGPUTextureUsage_StorageBinding;
|
||||
|
||||
texture->handle = wgpuDeviceCreateTexture(device, &descriptor);
|
||||
|
||||
return texture;
|
||||
|
@ -294,7 +309,7 @@ GFXPipeline* GFXWebGPU::create_graphics_pipeline(const GFXGraphicsPipelineCreate
|
|||
descriptor.vertex.module = create_shader(vertex_shader_vector.data(), vertex_shader_vector.size() * sizeof(uint32_t), std::string(info.label + " vertex stage").c_str());
|
||||
}
|
||||
else {
|
||||
auto vertex_shader = prism::open_file(prism::internal_domain / (info.shaders.vertex_src.as_path().string()), true);
|
||||
auto vertex_shader = prism::open_file(prism::internal_domain / (info.shaders.vertex_src.as_path().string() + ".wgsl.spv"), true);
|
||||
vertex_shader->read_all();
|
||||
|
||||
descriptor.vertex.module = create_shader(vertex_shader->cast_data<uint32_t>(), vertex_shader->size(), info.shaders.vertex_src.as_path().string().c_str());
|
||||
|
@ -315,7 +330,7 @@ GFXPipeline* GFXWebGPU::create_graphics_pipeline(const GFXGraphicsPipelineCreate
|
|||
fragment.module = create_shader(fragment_shader_vector.data(), fragment_shader_vector.size() * sizeof(uint32_t), std::string(info.label + " fragment stage").c_str());
|
||||
}
|
||||
else {
|
||||
auto fragment_shader = prism::open_file(prism::internal_domain / (info.shaders.fragment_src.as_path().string()), true);
|
||||
auto fragment_shader = prism::open_file(prism::internal_domain / (info.shaders.fragment_src.as_path().string() + ".wgsl.spv"), true);
|
||||
fragment_shader->read_all();
|
||||
|
||||
fragment.module = create_shader(fragment_shader->cast_data<uint32_t>(), fragment_shader->size(), info.shaders.fragment_src.as_path().string().c_str());
|
||||
|
@ -416,7 +431,7 @@ GFXPipeline* GFXWebGPU::create_compute_pipeline(const GFXComputePipelineCreateIn
|
|||
descriptor.compute.module = create_shader(compute_shader_vector.data(), compute_shader_vector.size() * sizeof(uint32_t), info.label.c_str());
|
||||
}
|
||||
else {
|
||||
auto compute_shader = prism::open_file(prism::internal_domain / (info.compute_src.as_path().string()), true);
|
||||
auto compute_shader = prism::open_file(prism::internal_domain / (info.compute_src.as_path().string() + ".wgsl.spv"), true);
|
||||
compute_shader->read_all();
|
||||
|
||||
descriptor.compute.module = create_shader(compute_shader->cast_data<uint32_t>(), compute_shader->size(), info.compute_src.as_path().string().c_str());
|
||||
|
@ -429,7 +444,7 @@ GFXPipeline* GFXWebGPU::create_compute_pipeline(const GFXComputePipelineCreateIn
|
|||
}
|
||||
|
||||
void GFXWebGPU::submit(GFXCommandBuffer* command_buffer, const platform::window_ptr window) {
|
||||
WGPUTextureView backBufView = wgpuSwapChainGetCurrentTextureView(swapchain); // create textureView
|
||||
WGPUTextureView backBufView = wgpuSwapChainGetCurrentTextureView(swapchain);
|
||||
|
||||
WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device, nullptr);
|
||||
WGPUCommandBuffer commands = wgpuCommandEncoderFinish(encoder, nullptr);
|
||||
|
|
Reference in a new issue