From 3c4f9313e25210d7705775d2da3d3141bcfc73e4 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 2 Nov 2014 19:04:14 +0000 Subject: [PATCH] Fix the wrong define being used meaning histogram/minmax were wrong * Several places were using HGRAM_PIXELS_PER_TILE*HGRAM_PIXELS_PER_TILE instead of HGRAM_PIXELS_PER_TILE*HGRAM_TILES_PER_BLOCK and calculating blocks as too large. This meant histogram/minmax would miscalculate the number of blocks needed and fail to read properly from > 2048 textures --- renderdoc/data/hlsl/histogram.hlsl | 6 ++--- renderdoc/driver/d3d11/d3d11_debug.cpp | 37 ++++---------------------- 2 files changed, 8 insertions(+), 35 deletions(-) diff --git a/renderdoc/data/hlsl/histogram.hlsl b/renderdoc/data/hlsl/histogram.hlsl index 3850c35e5..49629b7b7 100644 --- a/renderdoc/data/hlsl/histogram.hlsl +++ b/renderdoc/data/hlsl/histogram.hlsl @@ -37,7 +37,7 @@ void RENDERDOC_TileMinMaxCS(uint3 tid : SV_GroupThreadID, uint3 gid : SV_GroupID uint3 texDim = uint3(HistogramTextureResolution); - uint blocksX = (int)ceil(float(texDim.x)/float(HGRAM_PIXELS_PER_TILE*HGRAM_PIXELS_PER_TILE)); + uint blocksX = (int)ceil(float(texDim.x)/float(HGRAM_PIXELS_PER_TILE*HGRAM_TILES_PER_BLOCK)); uint2 topleft = (gid.xy*HGRAM_TILES_PER_BLOCK + tid.xy)*HGRAM_PIXELS_PER_TILE; @@ -151,8 +151,8 @@ void RENDERDOC_ResultMinMaxCS() { uint3 texDim = uint3(HistogramTextureResolution); - uint blocksX = (int)ceil(float(texDim.x)/float(HGRAM_PIXELS_PER_TILE*HGRAM_PIXELS_PER_TILE)); - uint blocksY = (int)ceil(float(texDim.y)/float(HGRAM_PIXELS_PER_TILE*HGRAM_PIXELS_PER_TILE)); + uint blocksX = (int)ceil(float(texDim.x)/float(HGRAM_PIXELS_PER_TILE*HGRAM_TILES_PER_BLOCK)); + uint blocksY = (int)ceil(float(texDim.y)/float(HGRAM_PIXELS_PER_TILE*HGRAM_TILES_PER_BLOCK)); #if UINT_TEX uint4 minvalU = MinMaxResultSourceUInt[0]; diff --git a/renderdoc/driver/d3d11/d3d11_debug.cpp b/renderdoc/driver/d3d11/d3d11_debug.cpp index 70eca4994..caf03a936 100644 --- a/renderdoc/driver/d3d11/d3d11_debug.cpp +++ b/renderdoc/driver/d3d11/d3d11_debug.cpp @@ -1088,7 +1088,7 @@ bool D3D11DebugManager::InitDebugRendering() D3D11_BUFFER_DESC bDesc; const uint32_t maxTexDim = 16384; - const uint32_t blockPixSize = HGRAM_TILES_PER_BLOCK*HGRAM_PIXELS_PER_TILE; + const uint32_t blockPixSize = HGRAM_PIXELS_PER_TILE*HGRAM_TILES_PER_BLOCK; const uint32_t maxBlocksNeeded = (maxTexDim*maxTexDim)/(blockPixSize*blockPixSize); bDesc.BindFlags = D3D11_BIND_UNORDERED_ACCESS | D3D11_BIND_SHADER_RESOURCE; @@ -1954,8 +1954,8 @@ bool D3D11DebugManager::GetHistogram(ResourceId texid, uint32_t sliceFace, uint3 m_pImmediateContext->CSSetShader(m_DebugRender.HistogramCS[details.texType][intIdx], NULL, 0); - int tilesX = (int)ceil(cdata.HistogramTextureResolution.x/float(HGRAM_PIXELS_PER_TILE*HGRAM_PIXELS_PER_TILE)); - int tilesY = (int)ceil(cdata.HistogramTextureResolution.y/float(HGRAM_PIXELS_PER_TILE*HGRAM_PIXELS_PER_TILE)); + int tilesX = (int)ceil(cdata.HistogramTextureResolution.x/float(HGRAM_PIXELS_PER_TILE*HGRAM_TILES_PER_BLOCK)); + int tilesY = (int)ceil(cdata.HistogramTextureResolution.y/float(HGRAM_PIXELS_PER_TILE*HGRAM_TILES_PER_BLOCK)); m_pImmediateContext->Dispatch(tilesX, tilesY, 1); @@ -2042,8 +2042,8 @@ bool D3D11DebugManager::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t m_pImmediateContext->CSSetShader(m_DebugRender.TileMinMaxCS[details.texType][intIdx], NULL, 0); - int blocksX = (int)ceil(cdata.HistogramTextureResolution.x/float(HGRAM_PIXELS_PER_TILE*HGRAM_PIXELS_PER_TILE)); - int blocksY = (int)ceil(cdata.HistogramTextureResolution.y/float(HGRAM_PIXELS_PER_TILE*HGRAM_PIXELS_PER_TILE)); + int blocksX = (int)ceil(cdata.HistogramTextureResolution.x/float(HGRAM_PIXELS_PER_TILE*HGRAM_TILES_PER_BLOCK)); + int blocksY = (int)ceil(cdata.HistogramTextureResolution.y/float(HGRAM_PIXELS_PER_TILE*HGRAM_TILES_PER_BLOCK)); m_pImmediateContext->Dispatch(blocksX, blocksY, 1); @@ -2081,33 +2081,6 @@ bool D3D11DebugManager::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t m_pImmediateContext->Unmap(m_DebugRender.resultStageBuff, 0); } - /* - // debugging - copy out tile results - const uint32_t maxTexDim = 16384; - const uint32_t blockPixSize = HGRAM_TILES_PER_BLOCK*HGRAM_PIXELS_PER_TILE; - const uint32_t maxBlocksNeeded = (maxTexDim*maxTexDim)/(blockPixSize*blockPixSize); - - D3D11_BUFFER_DESC bdesc; - bdesc.BindFlags = 0; - bdesc.Usage = D3D11_USAGE_STAGING; - bdesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; - bdesc.MiscFlags = 0; - bdesc.StructureByteStride = 0; - bdesc.ByteWidth = 2*4*sizeof(float)*HGRAM_TILES_PER_BLOCK*HGRAM_TILES_PER_BLOCK*maxBlocksNeeded; - - ID3D11Buffer *test = NULL; - - m_pDevice->CreateBuffer(&bdesc, NULL, &test); - - m_pImmediateContext->CopyResource(test, m_DebugRender.tileResultBuff); - - m_pImmediateContext->Map(test, 0, D3D11_MAP_READ, 0, &mapped); - - m_pImmediateContext->Unmap(test, 0); - - SAFE_RELEASE(test); - */ - return true; }