gpu barrier fix; vulkan mutable image format flag;

This commit is contained in:
Turánszki János
2022-05-17 21:00:33 +02:00
parent 9ac11ab965
commit 782c326652
5 changed files with 28 additions and 11 deletions
+13
View File
@@ -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)
+4
View File
@@ -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)
{
-2
View File
@@ -5,8 +5,6 @@
#include "wiResourceManager.h"
#include "wiScene.h"
#include <memory>
namespace wi
{
+10 -8
View File
@@ -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);
+1 -1
View File
@@ -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);