You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Fixed: SRV of volatile buffer was not properly updated in VulkanRHI
#rb rolando.caloca #ROBOMERGE-OWNER: lina.halper #ROBOMERGE-AUTHOR: dmitriy.dyomin #ROBOMERGE-SOURCE: CL 6603621 via CL 6603712 via CL 6603717 #ROBOMERGE-BOT: ANIM (Main -> Dev-Anim) (v364-6709755) [CL 6716465 by dmitriy dyomin in Dev-Anim branch]
This commit is contained in:
@@ -1302,6 +1302,7 @@ public:
|
||||
, NumMips(InNumMips)
|
||||
, Size(0)
|
||||
, SourceBuffer(nullptr)
|
||||
, VolatileBufferHandle(VK_NULL_HANDLE)
|
||||
, VolatileLockCounter(MAX_uint32)
|
||||
{
|
||||
}
|
||||
@@ -1315,6 +1316,7 @@ public:
|
||||
, NumMips(0)
|
||||
, Size(InStructuredBuffer->GetSize())
|
||||
, SourceBuffer(nullptr)
|
||||
, VolatileBufferHandle(VK_NULL_HANDLE)
|
||||
, VolatileLockCounter(MAX_uint32)
|
||||
{
|
||||
}
|
||||
@@ -1351,6 +1353,7 @@ public:
|
||||
|
||||
protected:
|
||||
// Used to check on volatile buffers if a new BufferView is required
|
||||
VkBuffer VolatileBufferHandle;
|
||||
uint32 VolatileLockCounter;
|
||||
};
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ FVulkanShaderResourceView::FVulkanShaderResourceView(FVulkanDevice* Device, FRHI
|
||||
, Size(InSize)
|
||||
, SourceBuffer(InSourceBuffer)
|
||||
, SourceRHIBuffer(InRHIBuffer)
|
||||
, VolatileBufferHandle(VK_NULL_HANDLE)
|
||||
, VolatileLockCounter(MAX_uint32)
|
||||
{
|
||||
int32 NumBuffers = SourceBuffer->IsVolatile() ? 1 : SourceBuffer->GetNumBuffers();
|
||||
@@ -38,6 +39,9 @@ void FVulkanShaderResourceView::Clear()
|
||||
}
|
||||
SourceTexture = nullptr;
|
||||
Device = nullptr;
|
||||
|
||||
VolatileBufferHandle = VK_NULL_HANDLE;
|
||||
VolatileLockCounter = MAX_uint32;
|
||||
}
|
||||
|
||||
void FVulkanShaderResourceView::Rename(FRHIResource* InRHIBuffer, FVulkanResourceMultiBuffer* InSourceBuffer, uint32 InSize, EPixelFormat InFormat)
|
||||
@@ -55,6 +59,7 @@ void FVulkanShaderResourceView::Rename(FRHIResource* InRHIBuffer, FVulkanResourc
|
||||
Size = InSize;
|
||||
SourceBuffer = InSourceBuffer;
|
||||
SourceRHIBuffer = InRHIBuffer;
|
||||
VolatileBufferHandle = VK_NULL_HANDLE;
|
||||
VolatileLockCounter = MAX_uint32;
|
||||
}
|
||||
|
||||
@@ -69,14 +74,19 @@ void FVulkanShaderResourceView::UpdateView()
|
||||
{
|
||||
if (SourceBuffer->IsVolatile() && VolatileLockCounter != SourceBuffer->GetVolatileLockCounter())
|
||||
{
|
||||
bool bNeedNewView = true;
|
||||
VkBuffer SourceVolatileBufferHandle = SourceBuffer->GetHandle();
|
||||
|
||||
// We might end up with the same BufferView, so do not recreate in that case
|
||||
if (!BufferViews[0] || BufferViews[0]->Offset != SourceBuffer->GetOffset() || BufferViews[0]->Size != Size)
|
||||
if (!BufferViews[0]
|
||||
|| BufferViews[0]->Offset != SourceBuffer->GetOffset()
|
||||
|| BufferViews[0]->Size != Size
|
||||
|| VolatileBufferHandle != SourceVolatileBufferHandle)
|
||||
{
|
||||
BufferViews[0] = nullptr;
|
||||
}
|
||||
|
||||
VolatileLockCounter = SourceBuffer->GetVolatileLockCounter();
|
||||
VolatileBufferHandle = SourceVolatileBufferHandle;
|
||||
}
|
||||
else if (SourceBuffer->IsDynamic())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user