diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp index c0ab86bc4e..47bc395ad5 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "d3dx12.h" #include #include "D3D12Formats.h" @@ -166,6 +167,7 @@ D3D12GSRender::D3D12GSRender() // Adapter with specified name if (adapter_name == desc.Description) { + vram_size = desc.DedicatedVideoMemory != 0 ? desc.DedicatedVideoMemory : desc.DedicatedSystemMemory; break; } @@ -243,7 +245,7 @@ D3D12GSRender::D3D12GSRender() m_rtts.init(m_device.Get()); m_readback_resources.init(m_device.Get(), 1024 * 1024 * 128, D3D12_HEAP_TYPE_READBACK, D3D12_RESOURCE_STATE_COPY_DEST); - m_buffer_data.init(m_device.Get(), 1024 * 1024 * 896, D3D12_HEAP_TYPE_UPLOAD, D3D12_RESOURCE_STATE_GENERIC_READ); + m_buffer_data.init(m_device.Get(), std::min((size_t)(1024 * 1024 * 896), (size_t)(vram_size - (1024 * 1024 * 128))), D3D12_HEAP_TYPE_UPLOAD, D3D12_RESOURCE_STATE_GENERIC_READ); CHECK_HRESULT( m_device->CreateCommittedResource( diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h index ff995241a2..ef5e34ce3f 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h @@ -123,6 +123,8 @@ private: u32 m_current_transform_constants_buffer_descriptor_id; ComPtr m_current_texture_descriptors; ComPtr m_current_sampler_descriptors; + size_t vram_size; + public: D3D12GSRender(); virtual ~D3D12GSRender();