mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 22:20:48 +00:00
d3d12: Do not use atomic for heaps
This commit is contained in:
parent
3acc900363
commit
81546d357c
@ -872,11 +872,14 @@ void D3D12GSRender::Flip()
|
|||||||
ResourceStorage &newStorage = getCurrentResourceStorage();
|
ResourceStorage &newStorage = getCurrentResourceStorage();
|
||||||
|
|
||||||
newStorage.WaitAndClean();
|
newStorage.WaitAndClean();
|
||||||
m_constantsData.m_getPos.store(newStorage.m_getPosConstantsHeap, std::memory_order_release);
|
if (newStorage.m_inUse)
|
||||||
m_vertexIndexData.m_getPos.store(newStorage.m_getPosVertexIndexHeap, std::memory_order_release);
|
{
|
||||||
m_textureUploadData.m_getPos.store(newStorage.m_getPosTextureUploadHeap, std::memory_order_release);
|
m_constantsData.m_getPos = newStorage.m_getPosConstantsHeap;
|
||||||
m_readbackResources.m_getPos.store(newStorage.m_getPosReadbackHeap, std::memory_order_release);
|
m_vertexIndexData.m_getPos = newStorage.m_getPosVertexIndexHeap;
|
||||||
m_UAVHeap.m_getPos.store(newStorage.m_getPosUAVHeap, std::memory_order_release);
|
m_textureUploadData.m_getPos = newStorage.m_getPosTextureUploadHeap;
|
||||||
|
m_readbackResources.m_getPos = newStorage.m_getPosReadbackHeap;
|
||||||
|
m_UAVHeap.m_getPos = newStorage.m_getPosUAVHeap;
|
||||||
|
}
|
||||||
|
|
||||||
m_frame->Flip(nullptr);
|
m_frame->Flip(nullptr);
|
||||||
|
|
||||||
|
@ -119,14 +119,14 @@ struct DataHeap
|
|||||||
T *m_heap;
|
T *m_heap;
|
||||||
size_t m_size;
|
size_t m_size;
|
||||||
size_t m_putPos; // Start of free space
|
size_t m_putPos; // Start of free space
|
||||||
std::atomic<size_t> m_getPos; // End of free space
|
size_t m_getPos; // End of free space
|
||||||
|
|
||||||
void Init(ID3D12Device *device, size_t heapSize, D3D12_HEAP_TYPE type, D3D12_HEAP_FLAGS flags)
|
void Init(ID3D12Device *device, size_t heapSize, D3D12_HEAP_TYPE type, D3D12_HEAP_FLAGS flags)
|
||||||
{
|
{
|
||||||
m_size = heapSize;
|
m_size = heapSize;
|
||||||
m_heap = InitHeap<T>::Init(device, heapSize, type, flags);
|
m_heap = InitHeap<T>::Init(device, heapSize, type, flags);
|
||||||
m_putPos = 0;
|
m_putPos = 0;
|
||||||
m_getPos = m_size - 1;
|
m_getPos = heapSize - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -135,7 +135,7 @@ struct DataHeap
|
|||||||
bool canAlloc(size_t size) const
|
bool canAlloc(size_t size) const
|
||||||
{
|
{
|
||||||
size_t allocSize = align(size, Alignment);
|
size_t allocSize = align(size, Alignment);
|
||||||
size_t currentGetPos = m_getPos.load();
|
size_t currentGetPos = m_getPos;
|
||||||
if (m_putPos + allocSize < m_size)
|
if (m_putPos + allocSize < m_size)
|
||||||
{
|
{
|
||||||
// range before get
|
// range before get
|
||||||
|
Loading…
x
Reference in New Issue
Block a user