Be cheeky and pack extra overdraw levels into slight colour changes

* Since we decode the visual colours into an integer by looking them up
  in the overdraw ramp rather than re-running to get an integer return,
  we make some invisibly subtly different colours above the highest
  overdraw colour, and use these to tell overdraw levels above 20.
This commit is contained in:
baldurk
2015-02-12 17:02:46 +00:00
parent 086cc0e491
commit 4a3217fdcc
5 changed files with 119 additions and 10 deletions
+4 -2
View File
@@ -360,11 +360,13 @@ float4 RENDERDOC_CheckerboardPS(float4 IN : SV_Position) : SV_Target0
// https://github.com/selfshadow/demos/blob/master/QuadShading/QuadShading.fx
////////////////////////////////////////////////////////////////////////////////////////////
#define NUM_RAMP_COLOURS 128
RWTexture2DArray<uint> overdrawUAV : register(u0);
Texture2DArray<uint> overdrawSRV : register(t0);
cbuffer overdrawRampCBuf : register(b0)
{
const float4 overdrawRampColours[21];
const float4 overdrawRampColours[NUM_RAMP_COLOURS];
};
[earlydepthstencil]
@@ -388,7 +390,7 @@ void RENDERDOC_QuadOverdrawPS(float4 vpos : SV_Position, uint c0 : SV_Coverage)
float4 ToColour(uint v)
{
return overdrawRampColours[min(v, 20)];
return overdrawRampColours[min(v, NUM_RAMP_COLOURS-1)];
}
float4 RENDERDOC_QOResolvePS(float4 vpos : SV_POSITION) : SV_Target0
+3 -3
View File
@@ -2412,7 +2412,7 @@ ResourceId D3D11DebugManager::RenderOverlay(ResourceId texid, TextureDisplayOver
D3D11_TEXTURE2D_DESC realTexDesc;
realTexDesc.BindFlags = D3D11_BIND_RENDER_TARGET|D3D11_BIND_SHADER_RESOURCE;
realTexDesc.Usage = D3D11_USAGE_DEFAULT;
realTexDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
realTexDesc.Format = DXGI_FORMAT_R16G16B16A16_UNORM;
realTexDesc.ArraySize = 1;
realTexDesc.MipLevels = 1;
realTexDesc.CPUAccessFlags = 0;
@@ -2507,7 +2507,7 @@ ResourceId D3D11DebugManager::RenderOverlay(ResourceId texid, TextureDisplayOver
D3D11_RENDER_TARGET_VIEW_DESC rtDesc;
rtDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
rtDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
rtDesc.Format = DXGI_FORMAT_R16G16B16A16_UNORM;
rtDesc.Texture2D.MipSlice = 0;
if(realTexDesc.SampleDesc.Count > 1 ||
@@ -3045,7 +3045,7 @@ ResourceId D3D11DebugManager::RenderOverlay(ResourceId texid, TextureDisplayOver
m_pImmediateContext->VSSetShader(m_DebugRender.FullscreenVS, NULL, 0);
m_pImmediateContext->PSSetShader(m_DebugRender.QOResolvePS, NULL, 0);
ID3D11Buffer *buf = MakeCBuffer((float *)&overdrawRamp[0].x, sizeof(Vec4f)*21);
ID3D11Buffer *buf = MakeCBuffer((float *)&overdrawRamp[0].x, sizeof(overdrawRamp));
m_pImmediateContext->PSSetConstantBuffers(0, 1, &buf);
+108 -1
View File
@@ -33,7 +33,7 @@
#include "quat.h"
// colour ramp from http://www.ncl.ucar.edu/Document/Graphics/ColorTables/GMT_wysiwyg.shtml
const Vec4f overdrawRamp[21] =
const Vec4f overdrawRamp[128] =
{
Vec4f(0.000000f, 0.000000f, 0.000000f, 0.0f),
Vec4f(0.250980f, 0.000000f, 0.250980f, 1.0f),
@@ -56,6 +56,113 @@ const Vec4f overdrawRamp[21] =
Vec4f(1.000000f, 0.376471f, 0.752941f, 1.0f),
Vec4f(1.000000f, 0.627451f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.878431f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.878600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.878700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.878800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.878900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.879900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.880900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.881900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.882900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.883900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.884900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.885900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.886900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.887900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888200f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888300f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888400f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888500f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888600f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888700f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888800f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.888900f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.889000f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.889100f, 1.000000f, 1.0f),
Vec4f(1.000000f, 0.889200f, 1.000000f, 1.0f),
};
static inline size_t matIdx(const size_t x, const size_t y) { return x+y*4; }
+1 -1
View File
@@ -75,7 +75,7 @@ struct Vec4f
float x, y, z, w;
};
extern const Vec4f overdrawRamp[21];
extern const Vec4f overdrawRamp[128];
inline Vec3f operator *(const Vec3f &a, const float b)
{
+3 -3
View File
@@ -291,9 +291,9 @@ bool ReplayOutput::PickPixel(ResourceId tex, bool customShader, uint32_t x, uint
{
for(size_t c=0; c < ARRAY_COUNT(overdrawRamp); c++)
{
if(fabs(ret->value_f[0] - overdrawRamp[c].x) < 0.001f &&
fabs(ret->value_f[1] - overdrawRamp[c].y) < 0.001f &&
fabs(ret->value_f[2] - overdrawRamp[c].z) < 0.001f)
if(fabs(ret->value_f[0] - overdrawRamp[c].x) < 0.00004f &&
fabs(ret->value_f[1] - overdrawRamp[c].y) < 0.00004f &&
fabs(ret->value_f[2] - overdrawRamp[c].z) < 0.00004f)
{
ret->value_i[0] = (int32_t)c;
ret->value_i[1] = 0;