mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-13 02:08:49 +12:00
d3d12: Use finer pitch when downloading rtt
This commit is contained in:
parent
c2d3c857b6
commit
ff9f348ec2
1 changed files with 18 additions and 16 deletions
|
@ -1232,12 +1232,12 @@ ID3D12Resource * D3D12GSRender::writeColorBuffer(ID3D12Resource * RTT, ID3D12Gra
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
void copyToCellRamAndRelease(void *dstAddress, ID3D12Resource *res, size_t rowPitch, size_t width, size_t height)
|
void copyToCellRamAndRelease(void *dstAddress, ID3D12Resource *res, size_t dstPitch, size_t srcPitch, size_t width, size_t height)
|
||||||
{
|
{
|
||||||
void *srcBuffer;
|
void *srcBuffer;
|
||||||
check(res->Map(0, nullptr, &srcBuffer));
|
check(res->Map(0, nullptr, &srcBuffer));
|
||||||
for (unsigned row = 0; row < height; row++)
|
for (unsigned row = 0; row < height; row++)
|
||||||
memcpy((char*)dstAddress + row * rowPitch, (char*)srcBuffer + row * rowPitch, rowPitch);
|
memcpy((char*)dstAddress + row * dstPitch, (char*)srcBuffer + row * srcPitch, srcPitch);
|
||||||
res->Unmap(0, nullptr);
|
res->Unmap(0, nullptr);
|
||||||
res->Release();
|
res->Release();
|
||||||
}
|
}
|
||||||
|
@ -1473,14 +1473,16 @@ void D3D12GSRender::semaphorePGRAPHBackendRelease(u32 offset, u32 value)
|
||||||
convertCommandList->Release();
|
convertCommandList->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t colorRowPitch;
|
size_t srcPitch, dstPitch;
|
||||||
switch (m_surface_color_format)
|
switch (m_surface_color_format)
|
||||||
{
|
{
|
||||||
case CELL_GCM_SURFACE_A8R8G8B8:
|
case CELL_GCM_SURFACE_A8R8G8B8:
|
||||||
colorRowPitch = powerOf2Align(m_surface_clip_w * 4, 256);
|
srcPitch = powerOf2Align(m_surface_clip_w * 4, 256);
|
||||||
|
dstPitch = m_surface_clip_w * 4;
|
||||||
break;
|
break;
|
||||||
case CELL_GCM_SURFACE_F_W16Z16Y16X16:
|
case CELL_GCM_SURFACE_F_W16Z16Y16X16:
|
||||||
colorRowPitch = powerOf2Align(m_surface_clip_w * 8, 256);
|
srcPitch = powerOf2Align(m_surface_clip_w * 8, 256);
|
||||||
|
dstPitch = m_surface_clip_w * 8;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1495,7 +1497,7 @@ void D3D12GSRender::semaphorePGRAPHBackendRelease(u32 offset, u32 value)
|
||||||
{
|
{
|
||||||
u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000);
|
u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000);
|
||||||
void *dstAddress = vm::get_ptr<void>(address);
|
void *dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt0, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt0, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1503,7 +1505,7 @@ void D3D12GSRender::semaphorePGRAPHBackendRelease(u32 offset, u32 value)
|
||||||
{
|
{
|
||||||
u32 address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000);
|
u32 address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000);
|
||||||
void *dstAddress = vm::get_ptr<void>(address);
|
void *dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt1, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt1, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1511,10 +1513,10 @@ void D3D12GSRender::semaphorePGRAPHBackendRelease(u32 offset, u32 value)
|
||||||
{
|
{
|
||||||
u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000);
|
u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000);
|
||||||
void *dstAddress = vm::get_ptr<void>(address);
|
void *dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt0, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt0, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000);
|
address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000);
|
||||||
dstAddress = vm::get_ptr<void>(address);
|
dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt1, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt1, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1522,13 +1524,13 @@ void D3D12GSRender::semaphorePGRAPHBackendRelease(u32 offset, u32 value)
|
||||||
{
|
{
|
||||||
u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000);
|
u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000);
|
||||||
void *dstAddress = vm::get_ptr<void>(address);
|
void *dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt0, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt0, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000);
|
address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000);
|
||||||
dstAddress = vm::get_ptr<void>(address);
|
dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt1, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt1, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000);
|
address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000);
|
||||||
dstAddress = vm::get_ptr<void>(address);
|
dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt2, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt2, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1536,16 +1538,16 @@ void D3D12GSRender::semaphorePGRAPHBackendRelease(u32 offset, u32 value)
|
||||||
{
|
{
|
||||||
u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000);
|
u32 address = GetAddress(m_surface_offset_a, m_context_dma_color_a - 0xfeed0000);
|
||||||
void *dstAddress = vm::get_ptr<void>(address);
|
void *dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt0, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt0, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000);
|
address = GetAddress(m_surface_offset_b, m_context_dma_color_b - 0xfeed0000);
|
||||||
dstAddress = vm::get_ptr<void>(address);
|
dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt1, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt1, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000);
|
address = GetAddress(m_surface_offset_c, m_context_dma_color_c - 0xfeed0000);
|
||||||
dstAddress = vm::get_ptr<void>(address);
|
dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt2, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt2, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
address = GetAddress(m_surface_offset_d, m_context_dma_color_d - 0xfeed0000);
|
address = GetAddress(m_surface_offset_d, m_context_dma_color_d - 0xfeed0000);
|
||||||
dstAddress = vm::get_ptr<void>(address);
|
dstAddress = vm::get_ptr<void>(address);
|
||||||
copyToCellRamAndRelease(dstAddress, rtt3, colorRowPitch, m_surface_clip_w, m_surface_clip_h);
|
copyToCellRamAndRelease(dstAddress, rtt3, srcPitch, dstPitch, m_surface_clip_w, m_surface_clip_h);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue