From 03c4edfb841f90b4094a7a62549cbff318fd2654 Mon Sep 17 00:00:00 2001 From: ScoochAside Date: Fri, 12 Jul 2024 23:11:58 -0400 Subject: [PATCH 1/4] Fix issue #16776 --- gfx/drivers/d3d11.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 9513bd8d5ddb..92a0eb176788 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -3696,9 +3696,9 @@ static bool d3d11_gfx_read_viewport(void* data, uint8_t* buffer, bool is_idle) for (x = 0; x < d3d11->vp.width; x++) { - bufferRow[3 * x + 2] = BackBufferData[4 * x + 0]; - bufferRow[3 * x + 1] = BackBufferData[4 * x + 1]; - bufferRow[3 * x + 0] = BackBufferData[4 * x + 2]; + bufferRow[3 * x + 2] = BackBufferData[4 * (x + (int)d3d11->frame.viewport.TopLeftX) + 0]; + bufferRow[3 * x + 1] = BackBufferData[4 * (x + (int)d3d11->frame.viewport.TopLeftX) + 1]; + bufferRow[3 * x + 0] = BackBufferData[4 * (x + (int)d3d11->frame.viewport.TopLeftX) + 2]; } } ret = true; From ececec697b57d79019fb4cd8b6ab33100edcf4a0 Mon Sep 17 00:00:00 2001 From: ScoochAside <26647325+miguedevel@users.noreply.github.com> Date: Sat, 13 Jul 2024 02:34:57 -0400 Subject: [PATCH 2/4] Use more logical variables. Added more resource cleanup, which fixes an unintended resizing bug that happened after taking a GPU screenshot. --- gfx/drivers/d3d11.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 92a0eb176788..81b4eb1999c7 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -3696,9 +3696,9 @@ static bool d3d11_gfx_read_viewport(void* data, uint8_t* buffer, bool is_idle) for (x = 0; x < d3d11->vp.width; x++) { - bufferRow[3 * x + 2] = BackBufferData[4 * (x + (int)d3d11->frame.viewport.TopLeftX) + 0]; - bufferRow[3 * x + 1] = BackBufferData[4 * (x + (int)d3d11->frame.viewport.TopLeftX) + 1]; - bufferRow[3 * x + 0] = BackBufferData[4 * (x + (int)d3d11->frame.viewport.TopLeftX) + 2]; + bufferRow[3 * x + 2] = BackBufferData[4 * (x + (int)d3d11->vp.x) + 0]; + bufferRow[3 * x + 1] = BackBufferData[4 * (x + (int)d3d11->vp.x) + 1]; + bufferRow[3 * x + 0] = BackBufferData[4 * (x + (int)d3d11->vp.x) + 2]; } } ret = true; @@ -3713,7 +3713,9 @@ static bool d3d11_gfx_read_viewport(void* data, uint8_t* buffer, bool is_idle) /* Release the backbuffer staging. */ BackBufferStaging->lpVtbl->Release(BackBufferStaging); + BackBufferResource->lpVtbl->Release(BackBufferResource); BackBufferStagingTexture->lpVtbl->Release(BackBufferStagingTexture); + BackBuffer->lpVtbl->Release(BackBuffer); return ret; } From 820e5ba15c3b4b0449cd7307f686a4d18cdd44ef Mon Sep 17 00:00:00 2001 From: ScoochAside <26647325+miguedevel@users.noreply.github.com> Date: Sat, 13 Jul 2024 03:32:36 -0400 Subject: [PATCH 3/4] Removed unnecessary casts --- gfx/drivers/d3d11.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 81b4eb1999c7..a7e58069a4d3 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -3696,9 +3696,9 @@ static bool d3d11_gfx_read_viewport(void* data, uint8_t* buffer, bool is_idle) for (x = 0; x < d3d11->vp.width; x++) { - bufferRow[3 * x + 2] = BackBufferData[4 * (x + (int)d3d11->vp.x) + 0]; - bufferRow[3 * x + 1] = BackBufferData[4 * (x + (int)d3d11->vp.x) + 1]; - bufferRow[3 * x + 0] = BackBufferData[4 * (x + (int)d3d11->vp.x) + 2]; + bufferRow[3 * x + 2] = BackBufferData[4 * (x + d3d11->vp.x) + 0]; + bufferRow[3 * x + 1] = BackBufferData[4 * (x + d3d11->vp.x) + 1]; + bufferRow[3 * x + 0] = BackBufferData[4 * (x + d3d11->vp.x) + 2]; } } ret = true; From 4a827c0e2daa662cfa54d8cf1a3b0e8da12fab01 Mon Sep 17 00:00:00 2001 From: ScoochAside <26647325+miguedevel@users.noreply.github.com> Date: Sat, 13 Jul 2024 04:22:34 -0400 Subject: [PATCH 4/4] Fixed the same cropping issue but on the vertical axis --- gfx/drivers/d3d11.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index a7e58069a4d3..5edcf03d9dd8 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -3690,6 +3690,7 @@ static bool d3d11_gfx_read_viewport(void* data, uint8_t* buffer, bool is_idle) /* Assuming format is DXGI_FORMAT_R8G8B8A8_UNORM */ if (StagingDesc.Format == DXGI_FORMAT_R8G8B8A8_UNORM) { + BackBufferData += Map.RowPitch * d3d11->vp.y; for (y = 0; y < d3d11->vp.height; y++, BackBufferData += Map.RowPitch) { bufferRow = buffer + 3 * (d3d11->vp.height - y - 1) * d3d11->vp.width;