From 46d85ac49698ea78e07fdbbf3e6779e39b01f3f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Wed, 8 Nov 2023 20:09:37 +0100 Subject: [PATCH] hairparticle raytracing buffer alignment fix --- WickedEngine/shaders/hairparticle_simulateCS.hlsl | 4 ++-- WickedEngine/wiHairParticle.cpp | 6 ++---- WickedEngine/wiVersion.cpp | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/WickedEngine/shaders/hairparticle_simulateCS.hlsl b/WickedEngine/shaders/hairparticle_simulateCS.hlsl index 071c83f80..c81c79f37 100644 --- a/WickedEngine/shaders/hairparticle_simulateCS.hlsl +++ b/WickedEngine/shaders/hairparticle_simulateCS.hlsl @@ -18,7 +18,7 @@ RWBuffer vertexBuffer_POS : register(u1); RWBuffer vertexBuffer_UVS : register(u2); RWBuffer culledIndexBuffer : register(u3); RWStructuredBuffer indirectBuffer : register(u4); -RWStructuredBuffer vertexBuffer_POS_RT : register(u5); +RWByteAddressBuffer vertexBuffer_POS_RT : register(u5); [numthreads(THREADCOUNT_SIMULATEHAIR, 1, 1)] void main(uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint groupIndex : SV_GroupIndex) @@ -277,7 +277,7 @@ void main(uint3 DTid : SV_DispatchThreadID, uint3 Gid : SV_GroupID, uint groupIn { position = 0; // We can only zero out for raytracing geometry to keep correct prevpos swapping motion vectors! } - vertexBuffer_POS_RT[v0 + vertexID] = position; + vertexBuffer_POS_RT.Store((v0 + vertexID) * sizeof(float3), position); } // Frustum culling: diff --git a/WickedEngine/wiHairParticle.cpp b/WickedEngine/wiHairParticle.cpp index 5f0b6ea8e..096eff1f1 100644 --- a/WickedEngine/wiHairParticle.cpp +++ b/WickedEngine/wiHairParticle.cpp @@ -114,7 +114,7 @@ namespace wi AlignTo(vb_pos[1].size, alignment) + AlignTo(vb_uvs.size, alignment) + AlignTo(ib_culled.size, alignment) + - AlignTo(AlignTo(vb_pos_raytracing.size, alignment), sizeof(float3)) + AlignTo(vb_pos_raytracing.size, alignment) ; device->CreateBuffer(&bd, nullptr, &generalBuffer); device->SetName(&generalBuffer, "HairParticleSystem::generalBuffer"); @@ -174,11 +174,9 @@ namespace wi ib_culled.descriptor_uav = device->GetDescriptorIndex(&generalBuffer, SubresourceType::UAV, ib_culled.subresource_uav); buffer_offset += ib_culled.size; - constexpr uint32_t vb_pos_raytracing_stride = sizeof(float3); buffer_offset = AlignTo(buffer_offset, alignment); - buffer_offset = AlignTo(buffer_offset, sizeof(float3)); vb_pos_raytracing.offset = buffer_offset; - vb_pos_raytracing.subresource_uav = device->CreateSubresource(&generalBuffer, SubresourceType::UAV, vb_pos_raytracing.offset, vb_pos_raytracing.size, nullptr, &vb_pos_raytracing_stride); + vb_pos_raytracing.subresource_uav = device->CreateSubresource(&generalBuffer, SubresourceType::UAV, vb_pos_raytracing.offset, vb_pos_raytracing.size); vb_pos_raytracing.descriptor_uav = device->GetDescriptorIndex(&generalBuffer, SubresourceType::UAV, vb_pos_raytracing.subresource_uav); buffer_offset += vb_pos_raytracing.size; diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 424724abb..e7c29958e 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 = 341; + const int revision = 342; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);