From 3aaccc4fda3d1420a918363f6abd51f82e347f45 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 15 Dec 2020 16:12:35 +0000 Subject: [PATCH] Use rdcfixedarray in parameters for functions instead of C arrays * This maps better to tuples in python --- .../Code/pyrenderdoc/container_handling.i | 24 +++++++++++++++++-- qrenderdoc/Code/pyrenderdoc/renderdoc.i | 1 + .../D3D11PipelineStateViewer.cpp | 4 ++-- .../D3D12PipelineStateViewer.cpp | 4 ++-- .../VulkanPipelineStateViewer.cpp | 4 ++-- qrenderdoc/Windows/TextureViewer.cpp | 2 +- renderdoc/api/replay/renderdoc_replay.h | 5 ++-- renderdoc/core/image_viewer.cpp | 7 +++--- renderdoc/core/replay_proxy.cpp | 22 +++++++---------- renderdoc/core/replay_proxy.h | 6 +++-- renderdoc/driver/d3d11/d3d11_replay.cpp | 2 +- renderdoc/driver/d3d11/d3d11_replay.h | 7 +++--- renderdoc/driver/d3d11/d3d11_shaderdebug.cpp | 5 ++-- renderdoc/driver/d3d12/d3d12_replay.cpp | 2 +- renderdoc/driver/d3d12/d3d12_replay.h | 7 +++--- renderdoc/driver/d3d12/d3d12_shaderdebug.cpp | 5 ++-- renderdoc/driver/gl/gl_debug.cpp | 8 +++++-- renderdoc/driver/gl/gl_replay.cpp | 4 ++-- renderdoc/driver/gl/gl_replay.h | 7 +++--- renderdoc/driver/vulkan/vk_replay.cpp | 9 +++---- renderdoc/driver/vulkan/vk_replay.h | 7 +++--- renderdoc/driver/vulkan/vk_shaderdebug.cpp | 5 ++-- renderdoc/replay/replay_controller.cpp | 5 ++-- renderdoc/replay/replay_controller.h | 5 ++-- renderdoc/replay/replay_driver.h | 9 +++---- 25 files changed, 101 insertions(+), 65 deletions(-) diff --git a/qrenderdoc/Code/pyrenderdoc/container_handling.i b/qrenderdoc/Code/pyrenderdoc/container_handling.i index 890e134b8..26fd09737 100644 --- a/qrenderdoc/Code/pyrenderdoc/container_handling.i +++ b/qrenderdoc/Code/pyrenderdoc/container_handling.i @@ -414,8 +414,28 @@ void ARRAY_INSTANTIATION_CHECK_NAME(arrayType)(arrayType *) %define TEMPLATE_FIXEDARRAY_DECLARE(typeName) -%typemap(in) const typeName & { - static_assert(false, "Error! Should not use this typemap"); +%typemap(in) const typeName & (unsigned char tempmem[16*8]) { + using array_type = std::remove_pointer::type; + + { + tempalloc($1, tempmem); + + int failIdx = 0; + int res = TypeConversion::ConvertFromPy($input, indirect($1), &failIdx); + + if(!SWIG_IsOK(res)) + { + if(res == SWIG_TypeError) + { + SWIG_exception_fail(SWIG_ArgError(res), "in method '$symname' argument $argnum of type '$1_basetype'"); + } + else + { + snprintf(convert_error, sizeof(convert_error)-1, "in method '$symname' argument $argnum of type '$1_basetype', decoding element %d", failIdx); + SWIG_exception_fail(SWIG_ArgError(res), convert_error); + } + } + } } %typemap(in) typeName { diff --git a/qrenderdoc/Code/pyrenderdoc/renderdoc.i b/qrenderdoc/Code/pyrenderdoc/renderdoc.i index 9f67c35e4..86971ccc4 100644 --- a/qrenderdoc/Code/pyrenderdoc/renderdoc.i +++ b/qrenderdoc/Code/pyrenderdoc/renderdoc.i @@ -319,6 +319,7 @@ TEMPLATE_FIXEDARRAY_INSTANTIATE(rdcfixedarray, uint64_t, 4) TEMPLATE_FIXEDARRAY_INSTANTIATE(rdcfixedarray, int32_t, 4) TEMPLATE_FIXEDARRAY_INSTANTIATE(rdcfixedarray, ResourceId, 4) TEMPLATE_FIXEDARRAY_INSTANTIATE(rdcfixedarray, ResourceId, 8) +TEMPLATE_FIXEDARRAY_INSTANTIATE(rdcfixedarray, bool, 4) TEMPLATE_FIXEDARRAY_INSTANTIATE(rdcfixedarray, bool, 8) TEMPLATE_FIXEDARRAY_INSTANTIATE(rdcfixedarray, float, 16) TEMPLATE_FIXEDARRAY_INSTANTIATE(rdcfixedarray, int32_t, 16) diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index b92848ebb..7bad89989 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -3151,8 +3151,8 @@ void D3D11PipelineStateViewer::on_debugThread_clicked() struct threadSelect { - uint32_t g[3]; - uint32_t t[3]; + rdcfixedarray g; + rdcfixedarray t; } thread = { // g[] {(uint32_t)ui->groupX->value(), (uint32_t)ui->groupY->value(), (uint32_t)ui->groupZ->value()}, diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index a31cf624c..677d26374 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -3228,8 +3228,8 @@ void D3D12PipelineStateViewer::on_debugThread_clicked() struct threadSelect { - uint32_t g[3]; - uint32_t t[3]; + rdcfixedarray g; + rdcfixedarray t; } thread = { // g[] {(uint32_t)ui->groupX->value(), (uint32_t)ui->groupY->value(), (uint32_t)ui->groupZ->value()}, diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index ed277e01e..79f216982 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -3996,8 +3996,8 @@ void VulkanPipelineStateViewer::on_debugThread_clicked() struct threadSelect { - uint32_t g[3]; - uint32_t t[3]; + rdcfixedarray g; + rdcfixedarray t; } thread = { // g[] {(uint32_t)ui->groupX->value(), (uint32_t)ui->groupY->value(), (uint32_t)ui->groupZ->value()}, diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index 2cb7344e5..73a2d31d1 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -834,7 +834,7 @@ void TextureViewer::RT_UpdateVisualRange(IReplayController *r) if(m_TexDisplay.customShaderId != ResourceId()) fmt.compCount = 4; - bool channels[] = { + rdcfixedarray channels = { m_TexDisplay.red ? true : false, m_TexDisplay.green && fmt.compCount > 1, m_TexDisplay.blue && fmt.compCount > 2, m_TexDisplay.alpha && fmt.compCount > 3, }; diff --git a/renderdoc/api/replay/renderdoc_replay.h b/renderdoc/api/replay/renderdoc_replay.h index cf9cec384..69f661b06 100644 --- a/renderdoc/api/replay/renderdoc_replay.h +++ b/renderdoc/api/replay/renderdoc_replay.h @@ -819,7 +819,7 @@ bucket when the pixel values are divided between ``minval`` and ``maxval``. )"); virtual rdcarray GetHistogram(ResourceId textureId, const Subresource &sub, CompType typeCast, float minval, float maxval, - bool channels[4]) = 0; + const rdcfixedarray &channels) = 0; DOCUMENT(R"(Retrieve the history of modifications to the selected pixel on the selected texture. @@ -885,7 +885,8 @@ bucket when the pixel values are divided between ``minval`` and ``maxval``. :meth:`FreeTrace`. :rtype: ShaderDebugTrace )"); - virtual ShaderDebugTrace *DebugThread(const uint32_t groupid[3], const uint32_t threadid[3]) = 0; + virtual ShaderDebugTrace *DebugThread(const rdcfixedarray &groupid, + const rdcfixedarray &threadid) = 0; DOCUMENT(R"(Continue a shader's debugging with a given shader debugger instance. This will run an implementation defined number of steps and then return those steps in a list. This may be a fixed diff --git a/renderdoc/core/image_viewer.cpp b/renderdoc/core/image_viewer.cpp index 819769215..7f31fad90 100644 --- a/renderdoc/core/image_viewer.cpp +++ b/renderdoc/core/image_viewer.cpp @@ -133,7 +133,8 @@ public: return m_Proxy->GetMinMax(m_TextureID, sub, typeCast, minval, maxval); } bool GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, float minval, - float maxval, bool channels[4], rdcarray &histogram) + float maxval, const rdcfixedarray &channels, + rdcarray &histogram) { return m_Proxy->GetHistogram(m_TextureID, sub, typeCast, minval, maxval, channels, histogram); } @@ -283,8 +284,8 @@ public: { return new ShaderDebugTrace(); } - ShaderDebugTrace *DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]) + ShaderDebugTrace *DebugThread(uint32_t eventId, const rdcfixedarray &groupid, + const rdcfixedarray &threadid) { return new ShaderDebugTrace(); } diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index f14fd85a8..90a6fe677 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -1532,28 +1532,25 @@ ShaderDebugTrace *ReplayProxy::DebugPixel(uint32_t eventId, uint32_t x, uint32_t template ShaderDebugTrace *ReplayProxy::Proxied_DebugThread(ParamSerialiser ¶mser, ReturnSerialiser &retser, uint32_t eventId, - const uint32_t groupid[3], - const uint32_t threadid[3]) + const rdcfixedarray &groupid, + const rdcfixedarray &threadid) { const ReplayProxyPacket expectedPacket = eReplayProxy_DebugThread; ReplayProxyPacket packet = eReplayProxy_DebugThread; ShaderDebugTrace *ret; - uint32_t GroupID[3] = {groupid[0], groupid[1], groupid[2]}; - uint32_t ThreadID[3] = {threadid[0], threadid[1], threadid[2]}; - { BEGIN_PARAMS(); SERIALISE_ELEMENT(eventId); - SERIALISE_ELEMENT(GroupID); - SERIALISE_ELEMENT(ThreadID); + SERIALISE_ELEMENT(groupid); + SERIALISE_ELEMENT(threadid); END_PARAMS(); } { REMOTE_EXECUTION(); if(paramser.IsReading() && !paramser.IsErrored() && !m_IsErrored) - ret = m_Remote->DebugThread(eventId, GroupID, ThreadID); + ret = m_Remote->DebugThread(eventId, groupid, threadid); else ret = new ShaderDebugTrace; } @@ -1563,8 +1560,9 @@ ShaderDebugTrace *ReplayProxy::Proxied_DebugThread(ParamSerialiser ¶mser, return ret; } -ShaderDebugTrace *ReplayProxy::DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]) +ShaderDebugTrace *ReplayProxy::DebugThread(uint32_t eventId, + const rdcfixedarray &groupid, + const rdcfixedarray &threadid) { PROXY_FUNCTION(DebugThread, eventId, groupid, threadid); } @@ -2825,9 +2823,7 @@ bool ReplayProxy::Tick(int type) case eReplayProxy_DebugPixel: DebugPixel(0, 0, 0, 0, 0); break; case eReplayProxy_DebugThread: { - uint32_t dummy1[3] = {0}; - uint32_t dummy2[3] = {0}; - DebugThread(0, dummy1, dummy2); + DebugThread(0, {}, {}); break; } case eReplayProxy_ContinueDebug: ContinueDebug(NULL); break; diff --git a/renderdoc/core/replay_proxy.h b/renderdoc/core/replay_proxy.h index f0614d1ba..3bd03fea6 100644 --- a/renderdoc/core/replay_proxy.h +++ b/renderdoc/core/replay_proxy.h @@ -314,7 +314,8 @@ public: } bool GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, float minval, - float maxval, bool channels[4], rdcarray &histogram) + float maxval, const rdcfixedarray &channels, + rdcarray &histogram) { if(m_Proxy) { @@ -528,7 +529,8 @@ public: IMPLEMENT_FUNCTION_PROXIED(ShaderDebugTrace *, DebugPixel, uint32_t eventId, uint32_t x, uint32_t y, uint32_t sample, uint32_t primitive); IMPLEMENT_FUNCTION_PROXIED(ShaderDebugTrace *, DebugThread, uint32_t eventId, - const uint32_t groupid[3], const uint32_t threadid[3]); + const rdcfixedarray &groupid, + const rdcfixedarray &threadid); IMPLEMENT_FUNCTION_PROXIED(rdcarray, ContinueDebug, ShaderDebugger *debugger); IMPLEMENT_FUNCTION_PROXIED(void, FreeDebugger, ShaderDebugger *debugger); diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 53ed3b5be..64950f1dc 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -1806,7 +1806,7 @@ bool D3D11Replay::GetMinMax(ResourceId texid, const Subresource &sub, CompType t } bool D3D11Replay::GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, - float minval, float maxval, bool channels[4], + float minval, float maxval, const rdcfixedarray &channels, rdcarray &histogram) { if(minval >= maxval) diff --git a/renderdoc/driver/d3d11/d3d11_replay.h b/renderdoc/driver/d3d11/d3d11_replay.h index 9b7f4f240..4386d78b9 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.h +++ b/renderdoc/driver/d3d11/d3d11_replay.h @@ -181,7 +181,8 @@ public: bool GetMinMax(ResourceId texid, const Subresource &sub, CompType typeCast, float *minval, float *maxval); bool GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, float minval, - float maxval, bool channels[4], rdcarray &histogram); + float maxval, const rdcfixedarray &channels, + rdcarray &histogram); MeshFormat GetPostVSBuffers(uint32_t eventId, uint32_t instID, uint32_t viewID, MeshDataStage stage); @@ -235,8 +236,8 @@ public: uint32_t view); ShaderDebugTrace *DebugPixel(uint32_t eventId, uint32_t x, uint32_t y, uint32_t sample, uint32_t primitive); - ShaderDebugTrace *DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]); + ShaderDebugTrace *DebugThread(uint32_t eventId, const rdcfixedarray &groupid, + const rdcfixedarray &threadid); rdcarray ContinueDebug(ShaderDebugger *debugger); void FreeDebugger(ShaderDebugger *debugger); diff --git a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp index 1b45fef98..20ca9a542 100644 --- a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp +++ b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp @@ -2868,8 +2868,9 @@ void ExtractInputsPS(PSInput IN, float4 debug_pixelPos : SV_Position, return ret; } -ShaderDebugTrace *D3D11Replay::DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]) +ShaderDebugTrace *D3D11Replay::DebugThread(uint32_t eventId, + const rdcfixedarray &groupid, + const rdcfixedarray &threadid) { using namespace DXBCBytecode; using namespace DXBCDebug; diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 920e2e097..b9eb62fee 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -2460,7 +2460,7 @@ bool D3D12Replay::GetMinMax(ResourceId texid, const Subresource &sub, CompType t } bool D3D12Replay::GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, - float minval, float maxval, bool channels[4], + float minval, float maxval, const rdcfixedarray &channels, rdcarray &histogram) { if(minval >= maxval) diff --git a/renderdoc/driver/d3d12/d3d12_replay.h b/renderdoc/driver/d3d12/d3d12_replay.h index 7439ef528..edf8700ab 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.h +++ b/renderdoc/driver/d3d12/d3d12_replay.h @@ -136,7 +136,8 @@ public: bool GetMinMax(ResourceId texid, const Subresource &sub, CompType typeCast, float *minval, float *maxval); bool GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, float minval, - float maxval, bool channels[4], rdcarray &histogram); + float maxval, const rdcfixedarray &channels, + rdcarray &histogram); MeshFormat GetPostVSBuffers(uint32_t eventId, uint32_t instID, uint32_t viewID, MeshDataStage stage); @@ -190,8 +191,8 @@ public: uint32_t view); ShaderDebugTrace *DebugPixel(uint32_t eventId, uint32_t x, uint32_t y, uint32_t sample, uint32_t primitive); - ShaderDebugTrace *DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]); + ShaderDebugTrace *DebugThread(uint32_t eventId, const rdcfixedarray &groupid, + const rdcfixedarray &threadid); rdcarray ContinueDebug(ShaderDebugger *debugger); void FreeDebugger(ShaderDebugger *debugger); diff --git a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp index 837d3c8c9..eba04d910 100644 --- a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp +++ b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp @@ -2951,8 +2951,9 @@ void ExtractInputsPS(PSInput IN, float4 debug_pixelPos : SV_Position, return ret; } -ShaderDebugTrace *D3D12Replay::DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]) +ShaderDebugTrace *D3D12Replay::DebugThread(uint32_t eventId, + const rdcfixedarray &groupid, + const rdcfixedarray &threadid) { using namespace DXBCBytecode; using namespace DXBCDebug; diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 739944dbc..0eea64804 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -1912,8 +1912,9 @@ bool GLReplay::GetMinMax(ResourceId texid, const Subresource &sub, CompType type return true; } -bool GLReplay::GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, float minval, - float maxval, bool channels[4], rdcarray &histogram) +bool GLReplay::GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, + float minval, float maxval, const rdcfixedarray &channels_, + rdcarray &histogram) { if(minval >= maxval || texid == ResourceId()) return false; @@ -1924,6 +1925,9 @@ bool GLReplay::GetHistogram(ResourceId texid, const Subresource &sub, CompType t if(!HasExt[ARB_compute_shader] || !HasExt[ARB_shading_language_420pack]) return false; + // take a local copy so we can modify it + rdcfixedarray channels = channels_; + auto &texDetails = m_pDriver->m_Textures[texid]; TextureDescription details = GetTexture(texid); diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 8dedb64be..27ff1bae8 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -3670,8 +3670,8 @@ ShaderDebugTrace *GLReplay::DebugPixel(uint32_t eventId, uint32_t x, uint32_t y, return new ShaderDebugTrace(); } -ShaderDebugTrace *GLReplay::DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]) +ShaderDebugTrace *GLReplay::DebugThread(uint32_t eventId, const rdcfixedarray &groupid, + const rdcfixedarray &threadid) { GLNOTIMP("DebugThread"); return new ShaderDebugTrace(); diff --git a/renderdoc/driver/gl/gl_replay.h b/renderdoc/driver/gl/gl_replay.h index fde8de735..b635ec09b 100644 --- a/renderdoc/driver/gl/gl_replay.h +++ b/renderdoc/driver/gl/gl_replay.h @@ -176,7 +176,8 @@ public: bool GetMinMax(ResourceId texid, const Subresource &sub, CompType typeCast, float *minval, float *maxval); bool GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, float minval, - float maxval, bool channels[4], rdcarray &histogram); + float maxval, const rdcfixedarray &channels, + rdcarray &histogram); MeshFormat GetPostVSBuffers(uint32_t eventId, uint32_t instID, uint32_t viewID, MeshDataStage stage); @@ -222,8 +223,8 @@ public: uint32_t view); ShaderDebugTrace *DebugPixel(uint32_t eventId, uint32_t x, uint32_t y, uint32_t sample, uint32_t primitive); - ShaderDebugTrace *DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]); + ShaderDebugTrace *DebugThread(uint32_t eventId, const rdcfixedarray &groupid, + const rdcfixedarray &threadid); rdcarray ContinueDebug(ShaderDebugger *debugger); void FreeDebugger(ShaderDebugger *debugger); uint32_t PickVertex(uint32_t eventId, int32_t width, int32_t height, const MeshDisplay &cfg, diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index ca69ad9e8..8d792d9cd 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -2588,7 +2588,7 @@ bool VulkanReplay::GetMinMax(ResourceId texid, const Subresource &sub, CompType } bool VulkanReplay::GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, - float minval, float maxval, bool channels[4], + float minval, float maxval, const rdcfixedarray &channels, rdcarray &histogram) { if(minval >= maxval) @@ -2654,9 +2654,6 @@ bool VulkanReplay::GetHistogram(ResourceId texid, const Subresource &sub, CompTy // rescale the range so that stencil seems to fit to 0-1 minval *= 255.0f; maxval *= 255.0f; - - // shuffle the channel selection, since stencil comes back in red - std::swap(channels[0], channels[1]); } descSetBinding += textype; @@ -2782,6 +2779,10 @@ bool VulkanReplay::GetHistogram(ResourceId texid, const Subresource &sub, CompTy if(channels[3]) chans |= 0x8; + // shuffle the channel selection, since stencil comes back in red + if(stencil) + chans = 0x1; + data->HistogramChannels = chans; data->HistogramFlags = 0; diff --git a/renderdoc/driver/vulkan/vk_replay.h b/renderdoc/driver/vulkan/vk_replay.h index 02d42a834..1ae850b3e 100644 --- a/renderdoc/driver/vulkan/vk_replay.h +++ b/renderdoc/driver/vulkan/vk_replay.h @@ -323,7 +323,8 @@ public: bool GetMinMax(ResourceId texid, const Subresource &sub, CompType typeCast, float *minval, float *maxval); bool GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, float minval, - float maxval, bool channels[4], rdcarray &histogram); + float maxval, const rdcfixedarray &channels, + rdcarray &histogram); VkDescriptorSet GetPixelHistoryDescriptor(); void ResetPixelHistoryDescriptorPool(); @@ -381,8 +382,8 @@ public: uint32_t view); ShaderDebugTrace *DebugPixel(uint32_t eventId, uint32_t x, uint32_t y, uint32_t sample, uint32_t primitive); - ShaderDebugTrace *DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]); + ShaderDebugTrace *DebugThread(uint32_t eventId, const rdcfixedarray &groupid, + const rdcfixedarray &threadid); rdcarray ContinueDebug(ShaderDebugger *debugger); void FreeDebugger(ShaderDebugger *debugger); diff --git a/renderdoc/driver/vulkan/vk_shaderdebug.cpp b/renderdoc/driver/vulkan/vk_shaderdebug.cpp index bb6fcf06e..46d354ae0 100644 --- a/renderdoc/driver/vulkan/vk_shaderdebug.cpp +++ b/renderdoc/driver/vulkan/vk_shaderdebug.cpp @@ -4576,8 +4576,9 @@ ShaderDebugTrace *VulkanReplay::DebugPixel(uint32_t eventId, uint32_t x, uint32_ return ret; } -ShaderDebugTrace *VulkanReplay::DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]) +ShaderDebugTrace *VulkanReplay::DebugThread(uint32_t eventId, + const rdcfixedarray &groupid, + const rdcfixedarray &threadid) { if(!GetAPIProperties().shaderDebugging) { diff --git a/renderdoc/replay/replay_controller.cpp b/renderdoc/replay/replay_controller.cpp index ef3727284..531aa0978 100644 --- a/renderdoc/replay/replay_controller.cpp +++ b/renderdoc/replay/replay_controller.cpp @@ -1580,7 +1580,7 @@ rdcpair ReplayController::GetMinMax(ResourceId textureId rdcarray ReplayController::GetHistogram(ResourceId textureId, const Subresource &sub, CompType typeCast, float minval, float maxval, - bool channels[4]) + const rdcfixedarray &channels) { CHECK_REPLAY_THREAD(); @@ -1620,7 +1620,8 @@ ShaderDebugTrace *ReplayController::DebugPixel(uint32_t x, uint32_t y, uint32_t return ret; } -ShaderDebugTrace *ReplayController::DebugThread(const uint32_t groupid[3], const uint32_t threadid[3]) +ShaderDebugTrace *ReplayController::DebugThread(const rdcfixedarray &groupid, + const rdcfixedarray &threadid) { CHECK_REPLAY_THREAD(); diff --git a/renderdoc/replay/replay_controller.h b/renderdoc/replay/replay_controller.h index 710e87326..69c6d0f4a 100644 --- a/renderdoc/replay/replay_controller.h +++ b/renderdoc/replay/replay_controller.h @@ -182,12 +182,13 @@ public: rdcpair GetMinMax(ResourceId textureId, const Subresource &sub, CompType typeCast); rdcarray GetHistogram(ResourceId textureId, const Subresource &sub, CompType typeCast, - float minval, float maxval, bool channels[4]); + float minval, float maxval, const rdcfixedarray &channels); rdcarray PixelHistory(ResourceId target, uint32_t x, uint32_t y, const Subresource &sub, CompType typeCast); ShaderDebugTrace *DebugVertex(uint32_t vertid, uint32_t instid, uint32_t idx, uint32_t view); ShaderDebugTrace *DebugPixel(uint32_t x, uint32_t y, uint32_t sample, uint32_t primitive); - ShaderDebugTrace *DebugThread(const uint32_t groupid[3], const uint32_t threadid[3]); + ShaderDebugTrace *DebugThread(const rdcfixedarray &groupid, + const rdcfixedarray &threadid); rdcarray ContinueDebug(ShaderDebugger *debugger); void FreeTrace(ShaderDebugTrace *trace); diff --git a/renderdoc/replay/replay_driver.h b/renderdoc/replay/replay_driver.h index 240bf10a2..5bd86ceb2 100644 --- a/renderdoc/replay/replay_driver.h +++ b/renderdoc/replay/replay_driver.h @@ -203,8 +203,8 @@ public: uint32_t idx, uint32_t view) = 0; virtual ShaderDebugTrace *DebugPixel(uint32_t eventId, uint32_t x, uint32_t y, uint32_t sample, uint32_t primitive) = 0; - virtual ShaderDebugTrace *DebugThread(uint32_t eventId, const uint32_t groupid[3], - const uint32_t threadid[3]) = 0; + virtual ShaderDebugTrace *DebugThread(uint32_t eventId, const rdcfixedarray &groupid, + const rdcfixedarray &threadid) = 0; virtual rdcarray ContinueDebug(ShaderDebugger *debugger) = 0; virtual void FreeDebugger(ShaderDebugger *debugger) = 0; @@ -245,8 +245,9 @@ public: virtual bool GetMinMax(ResourceId texid, const Subresource &sub, CompType typeCast, float *minval, float *maxval) = 0; - virtual bool GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, float minval, - float maxval, bool channels[4], rdcarray &histogram) = 0; + virtual bool GetHistogram(ResourceId texid, const Subresource &sub, CompType typeCast, + float minval, float maxval, const rdcfixedarray &channels, + rdcarray &histogram) = 0; virtual void PickPixel(ResourceId texture, uint32_t x, uint32_t y, const Subresource &sub, CompType typeCast, float pixel[4]) = 0;