Skip to content

Commit

Permalink
Store strong references to the textures and buffers passed to set[Per…
Browse files Browse the repository at this point in the history
…manent](Texture|Buffer)State (#44)
  • Loading branch information
apanteleev committed Feb 2, 2024
1 parent 60716bf commit 7b6d028
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/d3d12/d3d12-state-tracking.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,21 +230,32 @@ namespace nvrhi::d3d12
Texture* texture = checked_cast<Texture*>(_texture);

m_StateTracker.requireTextureState(texture, subresources, stateBits);

if (m_Instance)
m_Instance->referencedResources.push_back(texture);
}

void CommandList::setBufferState(IBuffer* _buffer, ResourceStates stateBits)
{
Buffer* buffer = checked_cast<Buffer*>(_buffer);

m_StateTracker.requireBufferState(buffer, stateBits);

if (m_Instance)
m_Instance->referencedResources.push_back(buffer);
}

void CommandList::setAccelStructState(rt::IAccelStruct* _as, ResourceStates stateBits)
{
AccelStruct* as = checked_cast<AccelStruct*>(_as);

if (as->dataBuffer)
{
m_StateTracker.requireBufferState(as->dataBuffer, stateBits);

if (m_Instance)
m_Instance->referencedResources.push_back(as);
}
}

void CommandList::setPermanentTextureState(ITexture* _texture, ResourceStates stateBits)
Expand All @@ -253,13 +264,18 @@ namespace nvrhi::d3d12

m_StateTracker.setPermanentTextureState(texture, AllSubresources, stateBits);

if (m_Instance)
m_Instance->referencedResources.push_back(texture);
}

void CommandList::setPermanentBufferState(IBuffer* _buffer, ResourceStates stateBits)
{
Buffer* buffer = checked_cast<Buffer*>(_buffer);

m_StateTracker.setPermanentBufferState(buffer, stateBits);

if (m_Instance)
m_Instance->referencedResources.push_back(buffer);
}

ResourceStates CommandList::getTextureSubresourceState(ITexture* _texture, ArraySlice arraySlice, MipLevel mipLevel)
Expand Down
15 changes: 15 additions & 0 deletions src/vulkan/vulkan-state-tracking.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -369,13 +369,19 @@ namespace nvrhi::vulkan
Texture* texture = checked_cast<Texture*>(_texture);

m_StateTracker.requireTextureState(texture, subresources, stateBits);

if (m_CurrentCmdBuf)
m_CurrentCmdBuf->referencedResources.push_back(texture);
}

void CommandList::setBufferState(IBuffer* _buffer, ResourceStates stateBits)
{
Buffer* buffer = checked_cast<Buffer*>(_buffer);

m_StateTracker.requireBufferState(buffer, stateBits);

if (m_CurrentCmdBuf)
m_CurrentCmdBuf->referencedResources.push_back(buffer);
}

void CommandList::setAccelStructState(rt::IAccelStruct* _as, ResourceStates stateBits)
Expand All @@ -386,6 +392,9 @@ namespace nvrhi::vulkan
{
Buffer* buffer = checked_cast<Buffer*>(as->dataBuffer.Get());
m_StateTracker.requireBufferState(buffer, stateBits);

if (m_CurrentCmdBuf)
m_CurrentCmdBuf->referencedResources.push_back(as);
}
}

Expand All @@ -394,13 +403,19 @@ namespace nvrhi::vulkan
Texture* texture = checked_cast<Texture*>(_texture);

m_StateTracker.setPermanentTextureState(texture, AllSubresources, stateBits);

if (m_CurrentCmdBuf)
m_CurrentCmdBuf->referencedResources.push_back(texture);
}

void CommandList::setPermanentBufferState(IBuffer* _buffer, ResourceStates stateBits)
{
Buffer* buffer = checked_cast<Buffer*>(_buffer);

m_StateTracker.setPermanentBufferState(buffer, stateBits);

if (m_CurrentCmdBuf)
m_CurrentCmdBuf->referencedResources.push_back(buffer);
}

ResourceStates CommandList::getTextureSubresourceState(ITexture* _texture, ArraySlice arraySlice, MipLevel mipLevel)
Expand Down

0 comments on commit 7b6d028

Please sign in to comment.