From e8a794c0268ac05197171fe7b17191b7c127d960 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 30 Apr 2019 10:30:35 +0100 Subject: [PATCH] Fix GL & Vulkan selected slice clamping. Closes #1366 --- renderdoc/driver/gl/gl_rendertexture.cpp | 8 ++++++-- renderdoc/driver/vulkan/vk_rendertexture.cpp | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/gl/gl_rendertexture.cpp b/renderdoc/driver/gl/gl_rendertexture.cpp index cd16bffc1..13e069baf 100644 --- a/renderdoc/driver/gl/gl_rendertexture.cpp +++ b/renderdoc/driver/gl/gl_rendertexture.cpp @@ -368,11 +368,15 @@ bool GLReplay::RenderTextureInternal(TextureDisplay cfg, int flags) ubo->MipLevel = (int)cfg.mip; if(texDetails.curType != eGL_TEXTURE_3D) { - ubo->Slice = (float)cfg.sliceFace + 0.001f; + uint32_t numSlices = + RDCMAX((uint32_t)texDetails.depth, 1U) * RDCMAX((uint32_t)texDetails.samples, 1U); + + uint32_t sliceFace = RDCCLAMP(cfg.sliceFace, 0U, numSlices - 1); + ubo->Slice = (float)sliceFace + 0.001f; } else { - uint32_t sliceFace = RDCCLAMP(cfg.sliceFace, 0U, uint32_t(texDetails.samples - 1)); + uint32_t sliceFace = RDCCLAMP(cfg.sliceFace, 0U, RDCMAX((uint32_t)texDetails.depth, 1U) - 1); ubo->Slice = (float)(sliceFace >> cfg.mip); } diff --git a/renderdoc/driver/vulkan/vk_rendertexture.cpp b/renderdoc/driver/vulkan/vk_rendertexture.cpp index 80a6c13b7..39dfc3129 100644 --- a/renderdoc/driver/vulkan/vk_rendertexture.cpp +++ b/renderdoc/driver/vulkan/vk_rendertexture.cpp @@ -275,11 +275,15 @@ bool VulkanReplay::RenderTextureInternal(TextureDisplay cfg, VkRenderPassBeginIn data->Slice = 0; if(iminfo.type != VK_IMAGE_TYPE_3D) { - data->Slice = (float)cfg.sliceFace + 0.001f; + uint32_t numSlices = + RDCMAX((uint32_t)iminfo.arrayLayers, 1U) * RDCMAX((uint32_t)iminfo.samples, 1U); + + uint32_t sliceFace = RDCCLAMP(cfg.sliceFace, 0U, numSlices - 1); + data->Slice = (float)sliceFace + 0.001f; } else { - uint32_t sliceFace = RDCCLAMP(cfg.sliceFace, 0U, uint32_t(iminfo.samples - 1)); + uint32_t sliceFace = RDCCLAMP(cfg.sliceFace, 0U, iminfo.extent.depth - 1); data->Slice = (float)(sliceFace >> cfg.mip); }