diff options
| author | Stenzek <stenzek@gmail.com> | 2016-02-23 22:21:09 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2016-02-28 17:24:09 +1000 |
| commit | 74275bdfe3e46008969e13e6bdee968c573132b5 (patch) | |
| tree | 30d513f51f531eaa058660fd8778a97c63902990 /Source/Core/VideoBackends/D3D12/PSTextureEncoder.cpp | |
| parent | c4d79d6db3192ec3b163c31a611a4f20c03ed8b0 (diff) | |
D3D12: Don't keep screenshot/encoder buffers mapped
Readback heaps do not support persistent mapping. See D3D12 docs.
Diffstat (limited to 'Source/Core/VideoBackends/D3D12/PSTextureEncoder.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D12/PSTextureEncoder.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/Source/Core/VideoBackends/D3D12/PSTextureEncoder.cpp b/Source/Core/VideoBackends/D3D12/PSTextureEncoder.cpp index bd1610adb3..5c27244bdd 100644 --- a/Source/Core/VideoBackends/D3D12/PSTextureEncoder.cpp +++ b/Source/Core/VideoBackends/D3D12/PSTextureEncoder.cpp @@ -89,8 +89,6 @@ void PSTextureEncoder::Init() D3D::SetDebugObjectName12(m_out_readback_buffer, "efb encoder output staging buffer"); - CheckHR(m_out_readback_buffer->Map(0, nullptr, &m_out_readback_buffer_data)); - // Create constant buffer for uploading data to shaders. Need to align to 256 bytes. unsigned int encode_params_buffer_size = (sizeof(EFBEncodeParams) + 0xff) & ~0xff; @@ -220,8 +218,10 @@ void PSTextureEncoder::Encode(u8* dst, u32 format, u32 native_width, u32 bytes_p D3D::command_list_mgr->ExecuteQueuedWork(true); // Transfer staging buffer to GameCube/Wii RAM + void* readback_data_map; + CheckHR(m_out_readback_buffer->Map(0, nullptr, &readback_data_map)); - u8* src = static_cast<u8*>(m_out_readback_buffer_data); + u8* src = static_cast<u8*>(readback_data_map); u32 read_stride = std::min(bytes_per_row, dst_location.PlacedFootprint.Footprint.RowPitch); for (unsigned int y = 0; y < num_blocks_y; ++y) { @@ -231,6 +231,8 @@ void PSTextureEncoder::Encode(u8* dst, u32 format, u32 native_width, u32 bytes_p src += dst_location.PlacedFootprint.Footprint.RowPitch; } + m_out_readback_buffer->Unmap(0, nullptr); + // Restores proper viewport/scissor settings. g_renderer->RestoreAPIState(); |
