diff --git a/renderdoc/core/image_viewer.cpp b/renderdoc/core/image_viewer.cpp index 0936a1969..b30b3c35e 100644 --- a/renderdoc/core/image_viewer.cpp +++ b/renderdoc/core/image_viewer.cpp @@ -107,7 +107,10 @@ public: void BindOutputWindow(uint64_t id, bool depth) { m_Proxy->BindOutputWindow(id, depth); } bool IsOutputWindowVisible(uint64_t id) { return m_Proxy->IsOutputWindowVisible(id); } void FlipOutputWindow(uint64_t id) { m_Proxy->FlipOutputWindow(id); } - void RenderCheckerboard() { m_Proxy->RenderCheckerboard(); } + void RenderCheckerboard(FloatVector dark, FloatVector light) + { + m_Proxy->RenderCheckerboard(dark, light); + } void RenderHighlightBox(float w, float h, float scale) { m_Proxy->RenderHighlightBox(w, h, scale); diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index 4aad8c32d..2e95859c4 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -2509,7 +2509,8 @@ void ReplayProxy::RefreshPreviewWindow() int32_t winHeight = 1; m_Replay->GetOutputWindowDimensions(m_PreviewOutput, winWidth, winHeight); - m_Replay->RenderCheckerboard(); + m_Replay->RenderCheckerboard(RenderDoc::Inst().DarkCheckerboardColor(), + RenderDoc::Inst().LightCheckerboardColor()); const DrawcallDescription *curDraw = FindDraw(m_FrameRecord.drawcallList, m_EventID); diff --git a/renderdoc/core/replay_proxy.h b/renderdoc/core/replay_proxy.h index 690b28c45..0bb96e3a1 100644 --- a/renderdoc/core/replay_proxy.h +++ b/renderdoc/core/replay_proxy.h @@ -236,10 +236,10 @@ public: return m_Proxy->FlipOutputWindow(id); } - void RenderCheckerboard() + void RenderCheckerboard(FloatVector dark, FloatVector light) { if(m_Proxy) - return m_Proxy->RenderCheckerboard(); + return m_Proxy->RenderCheckerboard(dark, light); } void RenderHighlightBox(float w, float h, float scale) diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 63f96051b..623e92408 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -2701,14 +2701,14 @@ bool D3D11Replay::RenderTexture(TextureDisplay cfg) return RenderTextureInternal(cfg, eTexDisplay_BlendAlpha); } -void D3D11Replay::RenderCheckerboard() +void D3D11Replay::RenderCheckerboard(FloatVector dark, FloatVector light) { D3D11RenderStateTracker tracker(m_pImmediateContext); CheckerboardCBuffer pixelData = {}; - pixelData.PrimaryColor = ConvertSRGBToLinear(RenderDoc::Inst().DarkCheckerboardColor()); - pixelData.SecondaryColor = ConvertSRGBToLinear(RenderDoc::Inst().LightCheckerboardColor()); + pixelData.PrimaryColor = ConvertSRGBToLinear(dark); + pixelData.SecondaryColor = ConvertSRGBToLinear(light); pixelData.CheckerSquareDimension = 64.0f; ID3D11Buffer *psBuf = GetDebugManager()->MakeCBuffer(&pixelData, sizeof(pixelData)); diff --git a/renderdoc/driver/d3d11/d3d11_replay.h b/renderdoc/driver/d3d11/d3d11_replay.h index 041739e80..ef9d49dbc 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.h +++ b/renderdoc/driver/d3d11/d3d11_replay.h @@ -221,7 +221,7 @@ public: bool RenderTexture(TextureDisplay cfg); - void RenderCheckerboard(); + void RenderCheckerboard(FloatVector dark, FloatVector light); void RenderHighlightBox(float w, float h, float scale); diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 02e21b7c7..1fc87eb6e 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -1680,12 +1680,12 @@ void D3D12Replay::RenderHighlightBox(float w, float h, float scale) } } -void D3D12Replay::RenderCheckerboard() +void D3D12Replay::RenderCheckerboard(FloatVector dark, FloatVector light) { CheckerboardCBuffer pixelData = {}; - pixelData.PrimaryColor = ConvertSRGBToLinear(RenderDoc::Inst().DarkCheckerboardColor()); - pixelData.SecondaryColor = ConvertSRGBToLinear(RenderDoc::Inst().LightCheckerboardColor()); + pixelData.PrimaryColor = ConvertSRGBToLinear(dark); + pixelData.SecondaryColor = ConvertSRGBToLinear(light); pixelData.CheckerSquareDimension = 64.0f; D3D12_GPU_VIRTUAL_ADDRESS ps = GetDebugManager()->UploadConstants(&pixelData, sizeof(pixelData)); diff --git a/renderdoc/driver/d3d12/d3d12_replay.h b/renderdoc/driver/d3d12/d3d12_replay.h index 685355e72..a82c44950 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.h +++ b/renderdoc/driver/d3d12/d3d12_replay.h @@ -176,7 +176,7 @@ public: bool RenderTexture(TextureDisplay cfg); - void RenderCheckerboard(); + void RenderCheckerboard(FloatVector dark, FloatVector light); void RenderHighlightBox(float w, float h, float scale); diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index ecf05f778..a4e971f21 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -2634,7 +2634,7 @@ uint32_t GLReplay::PickVertex(uint32_t eventId, int32_t width, int32_t height, return ret; } -void GLReplay::RenderCheckerboard() +void GLReplay::RenderCheckerboard(FloatVector dark, FloatVector light) { MakeCurrentReplayContext(m_DebugCtx); @@ -2659,8 +2659,8 @@ void GLReplay::RenderCheckerboard() ubo->CheckerSquareDimension = 64.0f; ubo->InnerColor = Vec4f(); - ubo->PrimaryColor = ConvertSRGBToLinear(RenderDoc::Inst().DarkCheckerboardColor()); - ubo->SecondaryColor = ConvertSRGBToLinear(RenderDoc::Inst().LightCheckerboardColor()); + ubo->PrimaryColor = ConvertSRGBToLinear(dark); + ubo->SecondaryColor = ConvertSRGBToLinear(light); drv.glUnmapBuffer(eGL_UNIFORM_BUFFER); diff --git a/renderdoc/driver/gl/gl_replay.h b/renderdoc/driver/gl/gl_replay.h index 947ea5e9b..2af8f89b3 100644 --- a/renderdoc/driver/gl/gl_replay.h +++ b/renderdoc/driver/gl/gl_replay.h @@ -208,7 +208,7 @@ public: bool RenderTexture(TextureDisplay cfg); bool RenderTextureInternal(TextureDisplay cfg, TexDisplayFlags flags); - void RenderCheckerboard(); + void RenderCheckerboard(FloatVector dark, FloatVector light); void RenderHighlightBox(float w, float h, float scale); diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index c46e4fdca..0dc49e3b2 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -720,7 +720,7 @@ rdcstr VulkanReplay::DisassembleShader(ResourceId pipeline, const ShaderReflecti return StringFormat::Fmt("; Invalid disassembly target %s", target.c_str()); } -void VulkanReplay::RenderCheckerboard() +void VulkanReplay::RenderCheckerboard(FloatVector dark, FloatVector light) { auto it = m_OutputWindows.find(m_ActiveWinID); if(m_ActiveWinID == 0 || it == m_OutputWindows.end()) @@ -768,8 +768,8 @@ void VulkanReplay::RenderCheckerboard() data->CheckerSquareDimension = 64.0f; data->InnerColor = Vec4f(); - data->PrimaryColor = ConvertSRGBToLinear(RenderDoc::Inst().DarkCheckerboardColor()); - data->SecondaryColor = ConvertSRGBToLinear(RenderDoc::Inst().LightCheckerboardColor()); + data->PrimaryColor = ConvertSRGBToLinear(light); + data->SecondaryColor = ConvertSRGBToLinear(dark); m_Overlay.m_CheckerUBO.Unmap(); vt->CmdBindPipeline(Unwrap(cmd), VK_PIPELINE_BIND_POINT_GRAPHICS, @@ -797,13 +797,9 @@ void VulkanReplay::RenderCheckerboard() // some mobile chips fail to create the checkerboard pipeline. Use an alternate approach with // CmdClearAttachment and many rects. - Vec4f lightCol = RenderDoc::Inst().LightCheckerboardColor(); - Vec4f darkCol = RenderDoc::Inst().DarkCheckerboardColor(); - - VkClearAttachment light = { - VK_IMAGE_ASPECT_COLOR_BIT, 0, {{{lightCol.x, lightCol.y, lightCol.z, lightCol.w}}}}; - VkClearAttachment dark = { - VK_IMAGE_ASPECT_COLOR_BIT, 0, {{{darkCol.x, darkCol.y, darkCol.z, darkCol.w}}}}; + VkClearAttachment lightCol = { + VK_IMAGE_ASPECT_COLOR_BIT, 0, {{{light.x, light.y, light.z, light.w}}}}; + VkClearAttachment darkCol = {VK_IMAGE_ASPECT_COLOR_BIT, 0, {{{dark.x, dark.y, dark.z, dark.w}}}}; VkClearRect fullRect = {{ {0, 0}, {outw.width, outw.height}, @@ -811,7 +807,7 @@ void VulkanReplay::RenderCheckerboard() 0, 1}; - vt->CmdClearAttachments(Unwrap(cmd), 1, &light, 1, &fullRect); + vt->CmdClearAttachments(Unwrap(cmd), 1, &lightCol, 1, &fullRect); rdcarray squares; @@ -833,7 +829,7 @@ void VulkanReplay::RenderCheckerboard() } } - vt->CmdClearAttachments(Unwrap(cmd), 1, &dark, (uint32_t)squares.size(), squares.data()); + vt->CmdClearAttachments(Unwrap(cmd), 1, &darkCol, (uint32_t)squares.size(), squares.data()); } vt->CmdEndRenderPass(Unwrap(cmd)); diff --git a/renderdoc/driver/vulkan/vk_replay.h b/renderdoc/driver/vulkan/vk_replay.h index 35917755a..fc12def21 100644 --- a/renderdoc/driver/vulkan/vk_replay.h +++ b/renderdoc/driver/vulkan/vk_replay.h @@ -366,7 +366,7 @@ public: bool RenderTexture(TextureDisplay cfg); - void RenderCheckerboard(); + void RenderCheckerboard(FloatVector dark, FloatVector light); void RenderHighlightBox(float w, float h, float scale); diff --git a/renderdoc/replay/replay_driver.h b/renderdoc/replay/replay_driver.h index 887bd190a..456236683 100644 --- a/renderdoc/replay/replay_driver.h +++ b/renderdoc/replay/replay_driver.h @@ -270,7 +270,7 @@ public: CompType typeCast) = 0; virtual void FreeCustomShader(ResourceId id) = 0; - virtual void RenderCheckerboard() = 0; + virtual void RenderCheckerboard(FloatVector dark, FloatVector light) = 0; virtual void RenderHighlightBox(float w, float h, float scale) = 0; diff --git a/renderdoc/replay/replay_output.cpp b/renderdoc/replay/replay_output.cpp index 96c316853..34c8fd330 100644 --- a/renderdoc/replay/replay_output.cpp +++ b/renderdoc/replay/replay_output.cpp @@ -492,7 +492,8 @@ void ReplayOutput::ClearBackground(uint64_t outputID, const FloatVector &backgro m_RenderData.texDisplay.backgroundColor.y == 0.0f && m_RenderData.texDisplay.backgroundColor.z == 0.0f && m_RenderData.texDisplay.backgroundColor.w == 0.0f) - m_pDevice->RenderCheckerboard(); + m_pDevice->RenderCheckerboard(RenderDoc::Inst().DarkCheckerboardColor(), + RenderDoc::Inst().LightCheckerboardColor()); else m_pDevice->ClearOutputWindowColor(outputID, m_RenderData.texDisplay.backgroundColor); } @@ -619,14 +620,20 @@ void ReplayOutput::Display() { m_pDevice->BindOutputWindow(m_Thumbnails[i].outputID, false); - Vec4f dark = RenderDoc::Inst().DarkCheckerboardColor(); - Vec4f light = RenderDoc::Inst().LightCheckerboardColor(); + FloatVector dark = RenderDoc::Inst().DarkCheckerboardColor(); + FloatVector light = RenderDoc::Inst().LightCheckerboardColor(); - color.x = light.x; - color.y = dark.y; - color.z = dark.z; - color.w = 0.4f; - m_pDevice->ClearOutputWindowColor(m_Thumbnails[i].outputID, color); + FloatVector dark2; + dark2.x = light.x; + dark2.y = dark.y; + dark2.z = dark.z; + dark2.w = 0.4f; + FloatVector light2; + light2.x = dark.x; + light2.y = light.y; + light2.z = light.z; + light2.w = 0.4f; + m_pDevice->RenderCheckerboard(dark2, light2); m_pDevice->FlipOutputWindow(m_Thumbnails[i].outputID); continue; @@ -770,7 +777,8 @@ void ReplayOutput::DisplayMesh() m_pDevice->BindOutputWindow(m_MainOutput.outputID, false); m_pDevice->ClearOutputWindowColor(m_MainOutput.outputID, color); m_pDevice->ClearOutputWindowDepth(m_MainOutput.outputID, 1.0f, 0); - m_pDevice->RenderCheckerboard(); + m_pDevice->RenderCheckerboard(RenderDoc::Inst().DarkCheckerboardColor(), + RenderDoc::Inst().LightCheckerboardColor()); return; } @@ -785,7 +793,8 @@ void ReplayOutput::DisplayMesh() m_pDevice->BindOutputWindow(m_MainOutput.outputID, true); m_pDevice->ClearOutputWindowDepth(m_MainOutput.outputID, 1.0f, 0); - m_pDevice->RenderCheckerboard(); + m_pDevice->RenderCheckerboard(RenderDoc::Inst().DarkCheckerboardColor(), + RenderDoc::Inst().LightCheckerboardColor()); m_pDevice->ClearOutputWindowDepth(m_MainOutput.outputID, 1.0f, 0);