diff --git a/WickedEngine/wiGraphics.h b/WickedEngine/wiGraphics.h index e9b6f9a31..7c20af38c 100644 --- a/WickedEngine/wiGraphics.h +++ b/WickedEngine/wiGraphics.h @@ -1021,6 +1021,19 @@ namespace wi::graphics }; + constexpr bool IsFormatTypeless(Format format) + { + switch (format) + { + case Format::R16_TYPELESS: + case Format::R32_TYPELESS: + case Format::R32G8X24_TYPELESS: + case Format::R24G8_TYPELESS: + return true; + } + + return false; + } constexpr bool IsFormatUnorm(Format format) { switch (format) diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.cpp b/WickedEngine/wiGraphicsDevice_Vulkan.cpp index e92401df8..e483e7afc 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.cpp +++ b/WickedEngine/wiGraphicsDevice_Vulkan.cpp @@ -3712,6 +3712,10 @@ using namespace vulkan_internal; { imageInfo.flags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; } + if (IsFormatTypeless(texture->desc.format)) + { + imageInfo.flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; + } if (families.size() > 1) { diff --git a/WickedEngine/wiRenderPath3D.h b/WickedEngine/wiRenderPath3D.h index 23d4e1771..1c59a5dfd 100644 --- a/WickedEngine/wiRenderPath3D.h +++ b/WickedEngine/wiRenderPath3D.h @@ -5,8 +5,6 @@ #include "wiResourceManager.h" #include "wiScene.h" -#include - namespace wi { diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 918ce628f..84c7bbd75 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -7777,8 +7777,6 @@ void Visibility_Prepare( { barrier_stack.push_back(GPUBarrier::Buffer(&res.bins, ResourceState::CONSTANT_BUFFER | ResourceState::INDIRECT_ARGUMENT, ResourceState::UNORDERED_ACCESS)); barrier_stack.push_back(GPUBarrier::Buffer(&res.binned_tiles, ResourceState::SHADER_RESOURCE, ResourceState::UNORDERED_ACCESS)); - barrier_stack.push_back(GPUBarrier::Image(&res.texture_normals, res.texture_normals.desc.layout, ResourceState::UNORDERED_ACCESS)); - barrier_stack.push_back(GPUBarrier::Image(&res.texture_roughness, res.texture_roughness.desc.layout, ResourceState::UNORDERED_ACCESS)); barrier_stack_flush(cmd); device->ClearUAV(&res.bins, 0, cmd); barrier_stack.push_back(GPUBarrier::Memory(&res.bins)); @@ -7879,6 +7877,10 @@ void Visibility_Prepare( device->EventEnd(cmd); } + barrier_stack.push_back(GPUBarrier::Buffer(&res.bins, ResourceState::UNORDERED_ACCESS, ResourceState::CONSTANT_BUFFER | ResourceState::INDIRECT_ARGUMENT)); + barrier_stack.push_back(GPUBarrier::Buffer(&res.binned_tiles, ResourceState::UNORDERED_ACCESS, ResourceState::SHADER_RESOURCE)); + barrier_stack_flush(cmd); + wi::profiler::EndRange(range); device->EventEnd(cmd); } @@ -7893,11 +7895,9 @@ void Visibility_Surface( BindCommonResources(cmd); - // Sync up with Visibility_Prepare barrier_stack.push_back(GPUBarrier::Image(&output, output.desc.layout, ResourceState::UNORDERED_ACCESS)); + barrier_stack.push_back(GPUBarrier::Image(&res.texture_normals, res.texture_normals.desc.layout, ResourceState::UNORDERED_ACCESS)); barrier_stack.push_back(GPUBarrier::Image(&res.texture_roughness, res.texture_roughness.desc.layout, ResourceState::UNORDERED_ACCESS)); - barrier_stack.push_back(GPUBarrier::Buffer(&res.bins, ResourceState::UNORDERED_ACCESS, ResourceState::CONSTANT_BUFFER | ResourceState::INDIRECT_ARGUMENT)); - barrier_stack.push_back(GPUBarrier::Buffer(&res.binned_tiles, ResourceState::UNORDERED_ACCESS, ResourceState::SHADER_RESOURCE)); barrier_stack.push_back(GPUBarrier::Image(&res.texture_payload_0, ResourceState::SHADER_RESOURCE, ResourceState::UNORDERED_ACCESS)); barrier_stack.push_back(GPUBarrier::Image(&res.texture_payload_1, ResourceState::SHADER_RESOURCE, ResourceState::UNORDERED_ACCESS)); barrier_stack_flush(cmd); @@ -7945,10 +7945,8 @@ void Visibility_Surface_Reduced( BindCommonResources(cmd); - // Sync up with Visibility_Prepare + barrier_stack.push_back(GPUBarrier::Image(&res.texture_normals, res.texture_normals.desc.layout, ResourceState::UNORDERED_ACCESS)); barrier_stack.push_back(GPUBarrier::Image(&res.texture_roughness, res.texture_roughness.desc.layout, ResourceState::UNORDERED_ACCESS)); - barrier_stack.push_back(GPUBarrier::Buffer(&res.bins, ResourceState::UNORDERED_ACCESS, ResourceState::CONSTANT_BUFFER | ResourceState::INDIRECT_ARGUMENT)); - barrier_stack.push_back(GPUBarrier::Buffer(&res.binned_tiles, ResourceState::UNORDERED_ACCESS, ResourceState::SHADER_RESOURCE)); barrier_stack_flush(cmd); device->BindResource(&res.binned_tiles, 0, cmd); @@ -7987,6 +7985,10 @@ void Visibility_Shade( BindCommonResources(cmd); + barrier_stack.push_back(GPUBarrier::Image(&res.texture_payload_0, ResourceState::UNORDERED_ACCESS, ResourceState::SHADER_RESOURCE)); + barrier_stack.push_back(GPUBarrier::Image(&res.texture_payload_1, ResourceState::UNORDERED_ACCESS, ResourceState::SHADER_RESOURCE)); + barrier_stack_flush(cmd); + device->BindResource(&res.binned_tiles, 0, cmd); device->BindResource(&res.texture_payload_0, 2, cmd); device->BindResource(&res.texture_payload_1, 3, cmd); diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index efc74efe3..40a25ca9e 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 60; // minor bug fixes, alterations, refactors, updates - const int revision = 68; + const int revision = 69; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);