mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-12-27 04:41:52 +01:00
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.
This commit is contained in:
parent
b81d5bc865
commit
168e51e7ad
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user