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;
|
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);
|
texture->handle = wgpuDeviceCreateTexture(device, &descriptor);
|
||||||
|
|
||||||
return texture;
|
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());
|
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 {
|
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();
|
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());
|
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());
|
fragment.module = create_shader(fragment_shader_vector.data(), fragment_shader_vector.size() * sizeof(uint32_t), std::string(info.label + " fragment stage").c_str());
|
||||||
}
|
}
|
||||||
else {
|
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_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());
|
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());
|
descriptor.compute.module = create_shader(compute_shader_vector.data(), compute_shader_vector.size() * sizeof(uint32_t), info.label.c_str());
|
||||||
}
|
}
|
||||||
else {
|
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();
|
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());
|
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) {
|
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);
|
WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device, nullptr);
|
||||||
WGPUCommandBuffer commands = wgpuCommandEncoderFinish(encoder, nullptr);
|
WGPUCommandBuffer commands = wgpuCommandEncoderFinish(encoder, nullptr);
|
||||||
|
|
Reference in a new issue