mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-13 13:30:44 +00:00
Change histogram result array to uvec4 instead of uint
* This complies with the packing rules needed for storage buffers
This commit is contained in:
@@ -243,7 +243,7 @@ void main()
|
||||
|
||||
layout(binding=0) writeonly buffer minmaxresultdest
|
||||
{
|
||||
uint result[HGRAM_NUM_BUCKETS];
|
||||
uvec4 result[HGRAM_NUM_BUCKETS];
|
||||
} dest;
|
||||
|
||||
layout (local_size_x = HGRAM_TILES_PER_BLOCK, local_size_y = HGRAM_TILES_PER_BLOCK) in;
|
||||
@@ -392,7 +392,7 @@ void main()
|
||||
#endif
|
||||
|
||||
if(bucketIdx >= 0 && bucketIdx < HGRAM_NUM_BUCKETS)
|
||||
atomicAdd(dest.result[bucketIdx], 1U);
|
||||
atomicAdd(dest.result[bucketIdx].x, 1U);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
layout(binding=0, std140) writeonly buffer minmaxresultdest
|
||||
{
|
||||
uint result[HGRAM_NUM_BUCKETS];
|
||||
uvec4 result[HGRAM_NUM_BUCKETS];
|
||||
} dest;
|
||||
|
||||
layout (local_size_x = HGRAM_TILES_PER_BLOCK, local_size_y = HGRAM_TILES_PER_BLOCK) in;
|
||||
@@ -182,7 +182,7 @@ void main()
|
||||
#endif
|
||||
|
||||
if(bucketIdx >= 0 && bucketIdx < HGRAM_NUM_BUCKETS)
|
||||
atomicAdd(dest.result[bucketIdx], 1U);
|
||||
atomicAdd(dest.result[bucketIdx].x, 1U);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -417,7 +417,7 @@ void GLReplay::InitDebugData()
|
||||
|
||||
gl.glNamedBufferStorageEXT(DebugData.minmaxTileResult, byteSize, NULL, 0);
|
||||
gl.glNamedBufferStorageEXT(DebugData.minmaxResult, sizeof(Vec4f)*2, NULL, GL_MAP_READ_BIT);
|
||||
gl.glNamedBufferStorageEXT(DebugData.histogramBuf, sizeof(uint32_t)*HGRAM_NUM_BUCKETS, NULL, GL_MAP_READ_BIT);
|
||||
gl.glNamedBufferStorageEXT(DebugData.histogramBuf, sizeof(uint32_t)*4*HGRAM_NUM_BUCKETS, NULL, GL_MAP_READ_BIT);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -989,10 +989,16 @@ bool GLReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t mip,
|
||||
gl.glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT);
|
||||
|
||||
histogram.clear();
|
||||
histogram.resize(HGRAM_NUM_BUCKETS);
|
||||
histogram.resize(HGRAM_NUM_BUCKETS*4);
|
||||
|
||||
gl.glBindBuffer(eGL_COPY_READ_BUFFER, DebugData.histogramBuf);
|
||||
gl.glGetBufferSubData(eGL_COPY_READ_BUFFER, 0, sizeof(uint32_t)*HGRAM_NUM_BUCKETS, &histogram[0]);
|
||||
gl.glGetBufferSubData(eGL_COPY_READ_BUFFER, 0, sizeof(uint32_t)*4*HGRAM_NUM_BUCKETS, &histogram[0]);
|
||||
|
||||
// compress down from uvec4, then resize down
|
||||
for(size_t i=1; i < HGRAM_NUM_BUCKETS; i++)
|
||||
histogram[i] = histogram[i*4];
|
||||
|
||||
histogram.resize(HGRAM_NUM_BUCKETS);
|
||||
|
||||
if(maxlevel >= 0)
|
||||
gl.glTextureParameterivEXT(texname, target, eGL_TEXTURE_MAX_LEVEL, (GLint *)&maxlevel);
|
||||
|
||||
@@ -1468,8 +1468,8 @@ VulkanDebugManager::VulkanDebugManager(WrappedVulkan *driver, VkDevice dev)
|
||||
m_MinMaxTileResult.Create(driver, dev, byteSize, 1, GPUBuffer::eGPUBufferSSBO);
|
||||
m_MinMaxResult.Create(driver, dev, sizeof(Vec4f)*2, 1, GPUBuffer::eGPUBufferSSBO);
|
||||
m_MinMaxReadback.Create(driver, dev, sizeof(Vec4f)*2, 1, GPUBuffer::eGPUBufferReadback);
|
||||
m_HistogramBuf.Create(driver, dev, sizeof(uint32_t)*HGRAM_NUM_BUCKETS, 1, GPUBuffer::eGPUBufferSSBO);
|
||||
m_HistogramReadback.Create(driver, dev, sizeof(uint32_t)*HGRAM_NUM_BUCKETS, 1, GPUBuffer::eGPUBufferReadback);
|
||||
m_HistogramBuf.Create(driver, dev, sizeof(uint32_t)*4*HGRAM_NUM_BUCKETS, 1, GPUBuffer::eGPUBufferSSBO);
|
||||
m_HistogramReadback.Create(driver, dev, sizeof(uint32_t)*4*HGRAM_NUM_BUCKETS, 1, GPUBuffer::eGPUBufferReadback);
|
||||
|
||||
// don't need to ring this, as we hard-sync for readback anyway
|
||||
m_HistogramUBO.Create(driver, dev, sizeof(HistogramUBOData), 1, 0);
|
||||
|
||||
@@ -3892,7 +3892,9 @@ bool VulkanReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t m
|
||||
|
||||
uint32_t *buckets = (uint32_t *)GetDebugManager()->m_HistogramReadback.Map(vt, dev, NULL);
|
||||
|
||||
histogram.assign(buckets, buckets+HGRAM_NUM_BUCKETS);
|
||||
histogram.resize(HGRAM_NUM_BUCKETS);
|
||||
for(size_t i=0; i < HGRAM_NUM_BUCKETS; i++)
|
||||
histogram[i] = buckets[i*4];
|
||||
|
||||
GetDebugManager()->m_HistogramReadback.Unmap(vt, dev);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user