From d1edb5aa1f6d3ec1ca25e31d2551a199587c3b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Sun, 30 Jul 2023 15:35:03 +0200 Subject: [PATCH] alignment fixes for certain sub-allocations --- WickedEngine/wiEmittedParticle.cpp | 2 +- WickedEngine/wiGraphicsDevice_DX12.h | 6 +++++- WickedEngine/wiGraphicsDevice_Vulkan.h | 4 ++-- WickedEngine/wiHairParticle.cpp | 2 +- WickedEngine/wiScene.cpp | 2 +- WickedEngine/wiScene_Components.cpp | 4 ++-- WickedEngine/wiVersion.cpp | 2 +- 7 files changed, 13 insertions(+), 9 deletions(-) diff --git a/WickedEngine/wiEmittedParticle.cpp b/WickedEngine/wiEmittedParticle.cpp index d5905df5e..3b47fa69d 100644 --- a/WickedEngine/wiEmittedParticle.cpp +++ b/WickedEngine/wiEmittedParticle.cpp @@ -97,7 +97,7 @@ namespace wi device->CreateBuffer2(&bd, fill_dead_indices, &deadList); device->SetName(&deadList, "EmittedParticleSystem::deadList"); - bd.misc_flags = ResourceMiscFlag::BUFFER_RAW; + bd.misc_flags = ResourceMiscFlag::BUFFER_RAW | ResourceMiscFlag::TYPED_FORMAT_CASTING; if (device->CheckCapability(GraphicsDeviceCapability::RAYTRACING)) { bd.misc_flags |= ResourceMiscFlag::RAY_TRACING; diff --git a/WickedEngine/wiGraphicsDevice_DX12.h b/WickedEngine/wiGraphicsDevice_DX12.h index 12d7802ef..e790b7d2e 100644 --- a/WickedEngine/wiGraphicsDevice_DX12.h +++ b/WickedEngine/wiGraphicsDevice_DX12.h @@ -270,12 +270,16 @@ namespace wi::graphics } if (has_flag(desc->misc_flags, ResourceMiscFlag::BUFFER_RAW)) { - alignment = std::max(alignment, 16ull); + alignment = std::max(alignment, (uint64_t)D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT); } if (has_flag(desc->misc_flags, ResourceMiscFlag::BUFFER_STRUCTURED)) { alignment = std::max(alignment, (uint64_t)desc->stride); } + if (desc->format != Format::UNKNOWN || has_flag(desc->misc_flags, ResourceMiscFlag::TYPED_FORMAT_CASTING)) + { + alignment = std::max(alignment, 16ull); + } return alignment; } diff --git a/WickedEngine/wiGraphicsDevice_Vulkan.h b/WickedEngine/wiGraphicsDevice_Vulkan.h index f00e2d8bf..9f0977015 100644 --- a/WickedEngine/wiGraphicsDevice_Vulkan.h +++ b/WickedEngine/wiGraphicsDevice_Vulkan.h @@ -333,11 +333,11 @@ namespace wi::graphics { alignment = std::max(alignment, properties2.properties.limits.minUniformBufferOffsetAlignment); } - if (desc->format == Format::UNKNOWN) + if (has_flag(desc->misc_flags, ResourceMiscFlag::BUFFER_RAW) || has_flag(desc->misc_flags, ResourceMiscFlag::BUFFER_STRUCTURED)) { alignment = std::max(alignment, properties2.properties.limits.minStorageBufferOffsetAlignment); } - else + if (desc->format != Format::UNKNOWN || has_flag(desc->misc_flags, ResourceMiscFlag::TYPED_FORMAT_CASTING)) { alignment = std::max(alignment, properties2.properties.limits.minTexelBufferOffsetAlignment); } diff --git a/WickedEngine/wiHairParticle.cpp b/WickedEngine/wiHairParticle.cpp index 4d72c5a1b..29ab22fc2 100644 --- a/WickedEngine/wiHairParticle.cpp +++ b/WickedEngine/wiHairParticle.cpp @@ -90,7 +90,7 @@ namespace wi GPUBufferDesc bd; bd.usage = Usage::DEFAULT; bd.bind_flags = BindFlag::SHADER_RESOURCE | BindFlag::UNORDERED_ACCESS | BindFlag::INDEX_BUFFER; - bd.misc_flags = ResourceMiscFlag::BUFFER_RAW | ResourceMiscFlag::INDIRECT_ARGS; + bd.misc_flags = ResourceMiscFlag::BUFFER_RAW | ResourceMiscFlag::TYPED_FORMAT_CASTING | ResourceMiscFlag::INDIRECT_ARGS; if (device->CheckCapability(GraphicsDeviceCapability::RAYTRACING)) { bd.misc_flags |= ResourceMiscFlag::RAY_TRACING; diff --git a/WickedEngine/wiScene.cpp b/WickedEngine/wiScene.cpp index d4f79fa6f..e8d147ed1 100644 --- a/WickedEngine/wiScene.cpp +++ b/WickedEngine/wiScene.cpp @@ -672,7 +672,7 @@ namespace wi::scene GPUBufferDesc desc; desc.usage = Usage::DEFAULT; desc.bind_flags = BindFlag::INDEX_BUFFER | BindFlag::SHADER_RESOURCE | BindFlag::UNORDERED_ACCESS; - desc.misc_flags = ResourceMiscFlag::BUFFER_RAW | ResourceMiscFlag::INDIRECT_ARGS; + desc.misc_flags = ResourceMiscFlag::BUFFER_RAW | ResourceMiscFlag::TYPED_FORMAT_CASTING | ResourceMiscFlag::INDIRECT_ARGS; const uint64_t alignment = device->GetMinOffsetAlignment(&desc); diff --git a/WickedEngine/wiScene_Components.cpp b/WickedEngine/wiScene_Components.cpp index b9ae453b7..88ca804e7 100644 --- a/WickedEngine/wiScene_Components.cpp +++ b/WickedEngine/wiScene_Components.cpp @@ -563,7 +563,7 @@ namespace wi::scene GPUBufferDesc bd; bd.usage = Usage::DEFAULT; bd.bind_flags = BindFlag::VERTEX_BUFFER | BindFlag::INDEX_BUFFER | BindFlag::SHADER_RESOURCE; - bd.misc_flags = ResourceMiscFlag::BUFFER_RAW; + bd.misc_flags = ResourceMiscFlag::BUFFER_RAW | ResourceMiscFlag::TYPED_FORMAT_CASTING; if (device->CheckCapability(GraphicsDeviceCapability::RAYTRACING)) { bd.misc_flags |= ResourceMiscFlag::RAY_TRACING; @@ -849,7 +849,7 @@ namespace wi::scene GPUBufferDesc desc; desc.usage = Usage::DEFAULT; desc.bind_flags = BindFlag::VERTEX_BUFFER | BindFlag::SHADER_RESOURCE | BindFlag::UNORDERED_ACCESS; - desc.misc_flags = ResourceMiscFlag::BUFFER_RAW; + desc.misc_flags = ResourceMiscFlag::BUFFER_RAW | ResourceMiscFlag::TYPED_FORMAT_CASTING; if (device->CheckCapability(GraphicsDeviceCapability::RAYTRACING)) { desc.misc_flags |= ResourceMiscFlag::RAY_TRACING; diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index fa9389dba..977dc4dae 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 = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 267; + const int revision = 268; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);