From 6e5f4b41b8a12603b819bb047d590738c3efc450 Mon Sep 17 00:00:00 2001 From: Jean-Philip Desjardins Date: Wed, 22 Nov 2023 14:09:14 -0500 Subject: [PATCH] Enable mipmap level viewing in frame debugger with Vulkan. --- Source/gs/GSH_Vulkan/GSH_Vulkan.cpp | 54 ++++++++++++++++++----------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/Source/gs/GSH_Vulkan/GSH_Vulkan.cpp b/Source/gs/GSH_Vulkan/GSH_Vulkan.cpp index 2fc2b88fa2..b08c48f476 100644 --- a/Source/gs/GSH_Vulkan/GSH_Vulkan.cpp +++ b/Source/gs/GSH_Vulkan/GSH_Vulkan.cpp @@ -1650,8 +1650,34 @@ Framework::CBitmap CGSH_Vulkan::GetDepthbufferImpl(uint64 frameReg, uint64 zbufR Framework::CBitmap CGSH_Vulkan::GetTextureImpl(uint64 tex0Reg, uint32 maxMip, uint64 miptbp1Reg, uint64 miptbp2Reg, uint32 mipLevel) { auto tex0 = make_convertible(tex0Reg); + auto miptbp1 = make_convertible(miptbp1Reg); + auto miptbp2 = make_convertible(miptbp2Reg); + auto width = std::max(tex0.GetWidth() >> mipLevel, 1); auto height = std::max(tex0.GetHeight() >> mipLevel, 1); + auto [tbp, tbw] = + [&]() { + switch(mipLevel) + { + default: + assert(false); + [[fallthrough]]; + case 0: + return std::make_pair(tex0.GetBufPtr(), static_cast(tex0.nBufWidth)); + case 1: + return std::make_pair(miptbp1.GetTbp1(), static_cast(miptbp1.tbw1)); + case 2: + return std::make_pair(miptbp1.GetTbp2(), static_cast(miptbp1.tbw2)); + case 3: + return std::make_pair(miptbp1.GetTbp3(), static_cast(miptbp1.tbw3)); + case 4: + return std::make_pair(miptbp2.GetTbp4(), static_cast(miptbp2.tbw4)); + case 5: + return std::make_pair(miptbp2.GetTbp5(), static_cast(miptbp2.tbw5)); + case 6: + return std::make_pair(miptbp2.GetTbp6(), static_cast(miptbp2.tbw6)); + } + }(); SyncMemoryCache(); @@ -1660,29 +1686,17 @@ Framework::CBitmap CGSH_Vulkan::GetTextureImpl(uint64 tex0Reg, uint32 maxMip, ui switch(tex0.nPsm) { case PSMCT32: - { - bitmap = ReadImage32(GetRam(), tex0.GetBufPtr(), - tex0.nBufWidth, tex0.GetWidth(), tex0.GetHeight()); - } - break; + bitmap = ReadImage32(GetRam(), tbp, tbw, width, height); + break; case PSMCT24: - { - bitmap = ReadImage32(GetRam(), tex0.GetBufPtr(), - tex0.nBufWidth, tex0.GetWidth(), tex0.GetHeight()); - } - break; + bitmap = ReadImage32(GetRam(), tbp, tbw, width, height); + break; case PSMT8: - { - bitmap = ReadImage8(GetRam(), tex0.GetBufPtr(), - tex0.nBufWidth, tex0.GetWidth(), tex0.GetHeight()); - } - break; + bitmap = ReadImage8(GetRam(), tbp, tbw, width, height); + break; case PSMT4: - { - bitmap = ReadImage8(GetRam(), tex0.GetBufPtr(), - tex0.nBufWidth, tex0.GetWidth(), tex0.GetHeight()); - } - break; + bitmap = ReadImage8(GetRam(), tbp, tbw, width, height); + break; } return bitmap;