diff --git a/engine/gfx/webgpu/src/gfx_webgpu.cpp b/engine/gfx/webgpu/src/gfx_webgpu.cpp index 47b5c9a..2a18db7 100755 --- a/engine/gfx/webgpu/src/gfx_webgpu.cpp +++ b/engine/gfx/webgpu/src/gfx_webgpu.cpp @@ -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(), 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(), 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(), 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);