mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-23 06:56:40 +00:00
Fix histogram slice sampling for 3D textures
* This changed earlier when the mip/slice indexing changed to be more sensible.
This commit is contained in:
@@ -1796,7 +1796,7 @@ bool D3D11DebugManager::GetHistogram(ResourceId texid, uint32_t sliceFace, uint3
|
||||
}
|
||||
|
||||
if(details.texType == eTexType_3D)
|
||||
cdata.HistogramSlice = float(sliceFace) / float(details.texDepth);
|
||||
cdata.HistogramSlice = float(sliceFace) / float(details.texDepth) + 0.001f;
|
||||
|
||||
ID3D11Buffer *cbuf = MakeCBuffer(&cdata, sizeof(cdata));
|
||||
|
||||
@@ -1897,7 +1897,7 @@ bool D3D11DebugManager::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t
|
||||
}
|
||||
|
||||
if(details.texType == eTexType_3D)
|
||||
cdata.HistogramSlice = float(sliceFace) / float(details.texDepth);
|
||||
cdata.HistogramSlice = float(sliceFace) / float(details.texDepth) + 0.001f;
|
||||
|
||||
ID3D11Buffer *cbuf = MakeCBuffer(&cdata, sizeof(cdata));
|
||||
|
||||
|
||||
@@ -671,7 +671,7 @@ void GLReplay::DeleteDebugData()
|
||||
bool GLReplay::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t mip, uint32_t sample,
|
||||
FormatComponentType typeHint, float *minval, float *maxval)
|
||||
{
|
||||
if(m_pDriver->m_Textures.find(texid) == m_pDriver->m_Textures.end())
|
||||
if(texid == ResourceId() || m_pDriver->m_Textures.find(texid) == m_pDriver->m_Textures.end())
|
||||
return false;
|
||||
|
||||
auto &texDetails = m_pDriver->m_Textures[texid];
|
||||
@@ -744,7 +744,10 @@ bool GLReplay::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t mip, uin
|
||||
cdata->HistogramTextureResolution.x = (float)RDCMAX(details.width >> mip, 1U);
|
||||
cdata->HistogramTextureResolution.y = (float)RDCMAX(details.height >> mip, 1U);
|
||||
cdata->HistogramTextureResolution.z = (float)RDCMAX(details.depth >> mip, 1U);
|
||||
cdata->HistogramSlice = (float)sliceFace;
|
||||
if(texDetails.curType != eGL_TEXTURE_3D)
|
||||
cdata->HistogramSlice = (float)sliceFace + 0.001f;
|
||||
else
|
||||
cdata->HistogramSlice = (float)(sliceFace >> mip);
|
||||
cdata->HistogramMip = (int)mip;
|
||||
cdata->HistogramNumSamples = texDetails.samples;
|
||||
cdata->HistogramSample = (int)RDCCLAMP(sample, 0U, details.msSamp - 1);
|
||||
@@ -767,9 +770,6 @@ bool GLReplay::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t mip, uin
|
||||
intIdx = 2;
|
||||
}
|
||||
|
||||
if(details.dimension == 3)
|
||||
cdata->HistogramSlice = float(sliceFace) / float(details.depth);
|
||||
|
||||
int blocksX = (int)ceil(cdata->HistogramTextureResolution.x /
|
||||
float(HGRAM_PIXELS_PER_TILE * HGRAM_TILES_PER_BLOCK));
|
||||
int blocksY = (int)ceil(cdata->HistogramTextureResolution.y /
|
||||
@@ -839,7 +839,7 @@ bool GLReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t mip,
|
||||
FormatComponentType typeHint, float minval, float maxval,
|
||||
bool channels[4], vector<uint32_t> &histogram)
|
||||
{
|
||||
if(minval >= maxval)
|
||||
if(minval >= maxval || texid == ResourceId())
|
||||
return false;
|
||||
|
||||
if(m_pDriver->m_Textures.find(texid) == m_pDriver->m_Textures.end())
|
||||
@@ -915,7 +915,10 @@ bool GLReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t mip,
|
||||
cdata->HistogramTextureResolution.x = (float)RDCMAX(details.width >> mip, 1U);
|
||||
cdata->HistogramTextureResolution.y = (float)RDCMAX(details.height >> mip, 1U);
|
||||
cdata->HistogramTextureResolution.z = (float)RDCMAX(details.depth >> mip, 1U);
|
||||
cdata->HistogramSlice = (float)sliceFace;
|
||||
if(texDetails.curType != eGL_TEXTURE_3D)
|
||||
cdata->HistogramSlice = (float)sliceFace + 0.001f;
|
||||
else
|
||||
cdata->HistogramSlice = (float)(sliceFace >> mip);
|
||||
cdata->HistogramMip = mip;
|
||||
cdata->HistogramNumSamples = texDetails.samples;
|
||||
cdata->HistogramSample = (int)RDCCLAMP(sample, 0U, details.msSamp - 1);
|
||||
@@ -952,9 +955,6 @@ bool GLReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t mip,
|
||||
intIdx = 2;
|
||||
}
|
||||
|
||||
if(details.dimension == 3)
|
||||
cdata->HistogramSlice = float(sliceFace) / float(details.depth);
|
||||
|
||||
int blocksX = (int)ceil(cdata->HistogramTextureResolution.x /
|
||||
float(HGRAM_PIXELS_PER_TILE * HGRAM_TILES_PER_BLOCK));
|
||||
int blocksY = (int)ceil(cdata->HistogramTextureResolution.y /
|
||||
|
||||
@@ -4136,7 +4136,10 @@ bool VulkanReplay::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t mip,
|
||||
data->HistogramTextureResolution.x = (float)RDCMAX(uint32_t(iminfo.extent.width) >> mip, 1U);
|
||||
data->HistogramTextureResolution.y = (float)RDCMAX(uint32_t(iminfo.extent.height) >> mip, 1U);
|
||||
data->HistogramTextureResolution.z = (float)RDCMAX(uint32_t(iminfo.arrayLayers) >> mip, 1U);
|
||||
data->HistogramSlice = (float)sliceFace;
|
||||
if(iminfo.type != VK_IMAGE_TYPE_3D)
|
||||
data->HistogramSlice = (float)sliceFace + 0.001f;
|
||||
else
|
||||
data->HistogramSlice = (float)(sliceFace >> mip);
|
||||
data->HistogramMip = (int)mip;
|
||||
data->HistogramNumSamples = iminfo.samples;
|
||||
data->HistogramSample = (int)RDCCLAMP(sample, 0U, uint32_t(iminfo.samples) - 1);
|
||||
@@ -4146,9 +4149,6 @@ bool VulkanReplay::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t mip,
|
||||
data->HistogramMax = 1.0f;
|
||||
data->HistogramChannels = 0xf;
|
||||
|
||||
if(iminfo.type == VK_IMAGE_TYPE_3D)
|
||||
data->HistogramSlice = float(sliceFace) / float(iminfo.extent.depth);
|
||||
|
||||
GetDebugManager()->m_HistogramUBO.Unmap();
|
||||
|
||||
VkImageMemoryBarrier srcimBarrier = {
|
||||
@@ -4381,7 +4381,10 @@ bool VulkanReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t m
|
||||
data->HistogramTextureResolution.x = (float)RDCMAX(uint32_t(iminfo.extent.width) >> mip, 1U);
|
||||
data->HistogramTextureResolution.y = (float)RDCMAX(uint32_t(iminfo.extent.height) >> mip, 1U);
|
||||
data->HistogramTextureResolution.z = (float)RDCMAX(uint32_t(iminfo.arrayLayers) >> mip, 1U);
|
||||
data->HistogramSlice = (float)sliceFace;
|
||||
if(iminfo.type != VK_IMAGE_TYPE_3D)
|
||||
data->HistogramSlice = (float)sliceFace + 0.001f;
|
||||
else
|
||||
data->HistogramSlice = (float)(sliceFace >> mip);
|
||||
data->HistogramMip = (int)mip;
|
||||
data->HistogramNumSamples = iminfo.samples;
|
||||
data->HistogramSample = (int)RDCCLAMP(sample, 0U, uint32_t(iminfo.samples) - 1);
|
||||
@@ -4407,9 +4410,6 @@ bool VulkanReplay::GetHistogram(ResourceId texid, uint32_t sliceFace, uint32_t m
|
||||
data->HistogramChannels = chans;
|
||||
data->HistogramFlags = 0;
|
||||
|
||||
if(iminfo.type == VK_IMAGE_TYPE_3D)
|
||||
data->HistogramSlice = float(sliceFace) / float(iminfo.extent.depth);
|
||||
|
||||
GetDebugManager()->m_HistogramUBO.Unmap();
|
||||
|
||||
VkImageMemoryBarrier srcimBarrier = {
|
||||
|
||||
Reference in New Issue
Block a user