diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index 2bc2f4cc0..ba17552d8 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -736,6 +736,9 @@ void TextureViewer::RT_FetchCurrentPixel(uint32_t x, uint32_t y, PixelValue &pic if(m_TexDisplay.flipY) y = (texptr->height - 1) - y; + x = qMax(0U, x >> m_TexDisplay.mip); + y = qMax(0U, y >> m_TexDisplay.mip); + pickValue = m_Output->PickPixel(m_TexDisplay.resourceId, true, x, y, m_TexDisplay.sliceFace, m_TexDisplay.mip, m_TexDisplay.sampleIdx); diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 03ca7007f..3c27e0b03 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -3160,8 +3160,8 @@ void D3D11Replay::PickPixel(ResourceId texture, uint32_t x, uint32_t y, uint32_t texDisplay.resourceId = texture; texDisplay.typeHint = typeHint; texDisplay.rawOutput = true; - texDisplay.xOffset = -float(x); - texDisplay.yOffset = -float(y); + texDisplay.xOffset = -float(x << mip); + texDisplay.yOffset = -float(y << mip); RenderTextureInternal(texDisplay, false); } diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 4b916e8e3..840afca9d 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -1720,8 +1720,8 @@ void D3D12Replay::PickPixel(ResourceId texture, uint32_t x, uint32_t y, uint32_t texDisplay.resourceId = texture; texDisplay.typeHint = typeHint; texDisplay.rawOutput = true; - texDisplay.xOffset = -float(x); - texDisplay.yOffset = -float(y); + texDisplay.xOffset = -float(x << mip); + texDisplay.yOffset = -float(y << mip); RenderTextureInternal(GetDebugManager()->GetCPUHandle(PICK_PIXEL_RTV), texDisplay, eTexDisplay_F32Render); diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 3a9205127..dc3ac5e9b 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -2361,8 +2361,8 @@ void GLReplay::PickPixel(ResourceId texture, uint32_t x, uint32_t y, uint32_t sl texDisplay.resourceId = texture; texDisplay.typeHint = typeHint; texDisplay.rawOutput = true; - texDisplay.xOffset = -float(x); - texDisplay.yOffset = -float(y); + texDisplay.xOffset = -float(x << mip); + texDisplay.yOffset = -float(y << mip); RenderTextureInternal(texDisplay, eTexDisplay_MipShift); diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index c3a81d81e..b4d93113a 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -752,8 +752,8 @@ void VulkanReplay::PickPixel(ResourceId texture, uint32_t x, uint32_t y, uint32_ texDisplay.resourceId = texture; texDisplay.typeHint = typeHint; texDisplay.rawOutput = true; - texDisplay.xOffset = -float(x); - texDisplay.yOffset = -float(y); + texDisplay.xOffset = -float(x << mip); + texDisplay.yOffset = -float(y << mip); // only render green (stencil) in second pass if(pass == 1)