From 168e51e7ad84db4131a71d388a2d55a585725e17 Mon Sep 17 00:00:00 2001 From: PixelyIon Date: Fri, 13 May 2022 14:21:37 +0530 Subject: [PATCH] Always use `GetLayerStride` for layer stride in Texture The `GuestTexture::GetLayerStride` function was not always being utilized to retrieve the layer stride inside `Texture`, it would instead directly access the `guestTexture::layerStride` member. This is problematic as it may not be initialized and return `0` which would lead to a broken image copy. --- app/src/main/cpp/skyline/gpu/texture/texture.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/cpp/skyline/gpu/texture/texture.cpp b/app/src/main/cpp/skyline/gpu/texture/texture.cpp index f7d22ead..352f11a0 100644 --- a/app/src/main/cpp/skyline/gpu/texture/texture.cpp +++ b/app/src/main/cpp/skyline/gpu/texture/texture.cpp @@ -161,6 +161,7 @@ namespace skyline::gpu { } }()}; + auto guestLayerStride{guest->GetLayerStride()}; for (size_t layer{}; layer < layerCount; ++layer) { if (guest->tileConfig.mode == texture::TileMode::Block) texture::CopyBlockLinearToLinear(*guest, pointer, bufferData); @@ -168,7 +169,7 @@ namespace skyline::gpu { texture::CopyPitchLinearToLinear(*guest, pointer, bufferData); else if (guest->tileConfig.mode == texture::TileMode::Linear) std::memcpy(bufferData, pointer, size); - pointer += guest->GetLayerStride(); + pointer += guestLayerStride; bufferData += layerStride; } @@ -270,6 +271,7 @@ namespace skyline::gpu { void Texture::CopyToGuest(u8 *hostBuffer) { auto guestOutput{mirror.data()}; + auto guestLayerStride{guest->GetLayerStride()}; for (size_t layer{}; layer < layerCount; ++layer) { if (guest->tileConfig.mode == texture::TileMode::Block) texture::CopyLinearToBlockLinear(*guest, hostBuffer, guestOutput); @@ -277,7 +279,7 @@ namespace skyline::gpu { texture::CopyLinearToPitchLinear(*guest, hostBuffer, guestOutput); else if (guest->tileConfig.mode == texture::TileMode::Linear) std::memcpy(hostBuffer, guestOutput, layerStride); - guestOutput += guest->layerStride; + guestOutput += guestLayerStride; hostBuffer += layerStride; } }