Handle UNormSRGB in some places that were missing handling

This commit is contained in:
baldurk
2019-04-23 16:31:18 +01:00
parent 8370f99056
commit 8ffe33767c
9 changed files with 27 additions and 25 deletions
+4 -4
View File
@@ -48,7 +48,7 @@ static QVariant interpret(const ResourceFormat &f, uint16_t comp)
{
return (float)comp;
}
else if(f.compType == CompType::UNorm)
else if(f.compType == CompType::UNorm || f.compType == CompType::UNormSRGB)
{
return (float)comp / (float)0xffff;
}
@@ -90,7 +90,7 @@ static QVariant interpret(const ResourceFormat &f, byte comp)
{
return (float)comp;
}
else if(f.compType == CompType::UNorm)
else if(f.compType == CompType::UNorm || f.compType == CompType::UNormSRGB)
{
return ((float)comp) / 255.0f;
}
@@ -583,7 +583,7 @@ QString FormatElement::GenerateTextureBufferFormat(const TextureDescription &tex
{
if(tex.format.compByteWidth == 1)
{
if(tex.format.compType == CompType::UNorm)
if(tex.format.compType == CompType::UNorm || tex.format.compType == CompType::UNormSRGB)
baseType = lit("unormb");
else if(tex.format.compType == CompType::SNorm)
baseType = lit("snormb");
@@ -594,7 +594,7 @@ QString FormatElement::GenerateTextureBufferFormat(const TextureDescription &tex
}
else if(tex.format.compByteWidth == 2)
{
if(tex.format.compType == CompType::UNorm)
if(tex.format.compType == CompType::UNorm || tex.format.compType == CompType::UNormSRGB)
baseType = lit("unormh");
else if(tex.format.compType == CompType::SNorm)
baseType = lit("snormh");
+1 -1
View File
@@ -817,7 +817,7 @@ QString TypeString(const SigParameter &sig)
ret += lit("uint");
else if(sig.compType == CompType::SInt || sig.compType == CompType::SScaled)
ret += lit("int");
else if(sig.compType == CompType::UNorm)
else if(sig.compType == CompType::UNorm || sig.compType == CompType::UNormSRGB)
ret += lit("unorm float");
else if(sig.compType == CompType::SNorm)
ret += lit("snorm float");
@@ -806,7 +806,7 @@ QString PipelineStateViewer::GenerateBufferFormatter(const ShaderResource &res,
{
case 1:
{
if(viewFormat.compType == CompType::UNorm)
if(viewFormat.compType == CompType::UNorm || viewFormat.compType == CompType::UNormSRGB)
format = lit("unormb");
if(viewFormat.compType == CompType::SNorm)
format = lit("snormb");
@@ -818,7 +818,7 @@ QString PipelineStateViewer::GenerateBufferFormatter(const ShaderResource &res,
}
case 2:
{
if(viewFormat.compType == CompType::UNorm)
if(viewFormat.compType == CompType::UNorm || viewFormat.compType == CompType::UNormSRGB)
format = lit("unormh");
if(viewFormat.compType == CompType::SNorm)
format = lit("snormh");
@@ -832,7 +832,7 @@ QString PipelineStateViewer::GenerateBufferFormatter(const ShaderResource &res,
}
case 4:
{
if(viewFormat.compType == CompType::UNorm)
if(viewFormat.compType == CompType::UNorm || viewFormat.compType == CompType::UNormSRGB)
format = lit("unormf");
if(viewFormat.compType == CompType::SNorm)
format = lit("snormf");
@@ -1322,7 +1322,7 @@ QString PipelineStateViewer::GetVBufferFormatString(uint32_t slot)
QLatin1Char('?'), QLatin1Char('b'), QLatin1Char('h'), QLatin1Char('?'), QLatin1Char('f'),
};
if(fmt.compType == CompType::UNorm)
if(fmt.compType == CompType::UNorm || fmt.compType == CompType::UNormSRGB)
{
format += lit("unorm%1").arg(widthchar[fmt.compByteWidth]);
}
+2 -1
View File
@@ -521,6 +521,7 @@ DXGI_FORMAT ResourceFormat2DXGIFormat(ResourceFormat format)
case CompType::SNorm: return DXGI_FORMAT_R8G8B8A8_SNORM;
default:
case CompType::UNorm:
case CompType::UNormSRGB:
if(format.SRGBCorrected())
{
if(format.BGRAOrder())
@@ -758,7 +759,7 @@ bool write_dds_to_file(FILE *f, const dds_data &data)
// special case a couple of formats to write out non-DX10 style, for
// backwards compatibility
if(data.format.compByteWidth == 1 && data.format.compCount == 4 &&
data.format.compType == CompType::UNorm)
(data.format.compType == CompType::UNorm || data.format.compType == CompType::UNormSRGB))
{
header.ddspf.dwFlags = DDPF_RGBA;
header.ddspf.dwRGBBitCount = 32;
@@ -2572,7 +2572,7 @@ vector<PixelModification> D3D11Replay::PixelHistory(vector<EventUsage> events, R
mod.postMod.col.floatValue[c] = ConvertFromHalf(uint16_t(mod.postMod.col.uintValue[c]));
}
}
else if(fmt.compType == CompType::UNorm && fmt.compByteWidth == 1 && fmt.SRGBCorrected())
else if(fmt.compType == CompType::UNormSRGB && fmt.compByteWidth == 1 && fmt.SRGBCorrected())
{
RDCASSERT(fmt.compByteWidth == 1);
+2 -2
View File
@@ -996,7 +996,7 @@ ShaderDebugTrace D3D11Replay::DebugVertex(uint32_t eventId, uint32_t vertid, uin
ret.inputs[i].value.uv[c] = *src;
else if(fmt.compType == CompType::SInt)
ret.inputs[i].value.iv[c] = *((int8_t *)src);
else if(fmt.compType == CompType::UNorm)
else if(fmt.compType == CompType::UNorm || fmt.compType == CompType::UNormSRGB)
ret.inputs[i].value.fv[c] = float(*src) / 255.0f;
else if(fmt.compType == CompType::SNorm)
{
@@ -1021,7 +1021,7 @@ ShaderDebugTrace D3D11Replay::DebugVertex(uint32_t eventId, uint32_t vertid, uin
ret.inputs[i].value.uv[c] = *src;
else if(fmt.compType == CompType::SInt)
ret.inputs[i].value.iv[c] = *((int16_t *)src);
else if(fmt.compType == CompType::UNorm)
else if(fmt.compType == CompType::UNorm || fmt.compType == CompType::UNormSRGB)
ret.inputs[i].value.fv[c] = float(*src) / float(UINT16_MAX);
else if(fmt.compType == CompType::SNorm)
{
+2 -2
View File
@@ -3835,7 +3835,7 @@ State State::GetNext(GlobalState &global, State quad[4]) const
for(int c = 0; c < fmt.numComps; c++)
result.value.iv[c] = in[c];
}
else if(fmt.fmt == CompType::UNorm)
else if(fmt.fmt == CompType::UNorm || fmt.fmt == CompType::UNormSRGB)
{
uint16_t *u = (uint16_t *)d;
@@ -3876,7 +3876,7 @@ State State::GetNext(GlobalState &global, State quad[4]) const
for(int c = 0; c < fmt.numComps; c++)
result.value.iv[c] = in[c];
}
else if(fmt.fmt == CompType::UNorm)
else if(fmt.fmt == CompType::UNorm || fmt.fmt == CompType::UNormSRGB)
{
uint8_t *u = (uint8_t *)d;
+6 -6
View File
@@ -752,7 +752,7 @@ VkFormat GetViewCastedFormat(VkFormat f, CompType typeHint)
case VK_FORMAT_R16G16B16A16_SINT:
case VK_FORMAT_R16G16B16A16_SFLOAT:
{
if(typeHint == CompType::UNorm)
if(typeHint == CompType::UNorm || typeHint == CompType::UNormSRGB)
return VK_FORMAT_R16G16B16A16_UNORM;
else if(typeHint == CompType::SNorm)
return VK_FORMAT_R16G16B16A16_SNORM;
@@ -775,7 +775,7 @@ VkFormat GetViewCastedFormat(VkFormat f, CompType typeHint)
case VK_FORMAT_R16G16B16_SINT:
case VK_FORMAT_R16G16B16_SFLOAT:
{
if(typeHint == CompType::UNorm)
if(typeHint == CompType::UNorm || typeHint == CompType::UNormSRGB)
return VK_FORMAT_R16G16B16_UNORM;
else if(typeHint == CompType::SNorm)
return VK_FORMAT_R16G16B16_SNORM;
@@ -798,7 +798,7 @@ VkFormat GetViewCastedFormat(VkFormat f, CompType typeHint)
case VK_FORMAT_R16G16_SINT:
case VK_FORMAT_R16G16_SFLOAT:
{
if(typeHint == CompType::UNorm)
if(typeHint == CompType::UNorm || typeHint == CompType::UNormSRGB)
return VK_FORMAT_R16G16_UNORM;
else if(typeHint == CompType::SNorm)
return VK_FORMAT_R16G16_SNORM;
@@ -822,7 +822,7 @@ VkFormat GetViewCastedFormat(VkFormat f, CompType typeHint)
case VK_FORMAT_R16_SFLOAT:
case VK_FORMAT_D16_UNORM:
{
if(typeHint == CompType::UNorm)
if(typeHint == CompType::UNorm || typeHint == CompType::UNormSRGB)
return VK_FORMAT_R16_UNORM;
else if(typeHint == CompType::SNorm)
return VK_FORMAT_R16_SNORM;
@@ -1024,7 +1024,7 @@ VkFormat GetViewCastedFormat(VkFormat f, CompType typeHint)
case VK_FORMAT_A2B10G10R10_UINT_PACK32:
case VK_FORMAT_A2B10G10R10_SINT_PACK32:
{
if(typeHint == CompType::UNorm)
if(typeHint == CompType::UNorm || typeHint == CompType::UNormSRGB)
return VK_FORMAT_A2B10G10R10_UNORM_PACK32;
else if(typeHint == CompType::SNorm)
return VK_FORMAT_A2B10G10R10_SNORM_PACK32;
@@ -1046,7 +1046,7 @@ VkFormat GetViewCastedFormat(VkFormat f, CompType typeHint)
case VK_FORMAT_A2R10G10B10_UINT_PACK32:
case VK_FORMAT_A2R10G10B10_SINT_PACK32:
{
if(typeHint == CompType::UNorm)
if(typeHint == CompType::UNorm || typeHint == CompType::UNormSRGB)
return VK_FORMAT_A2R10G10B10_UNORM_PACK32;
else if(typeHint == CompType::SNorm)
return VK_FORMAT_A2R10G10B10_SNORM_PACK32;
+5 -4
View File
@@ -138,12 +138,13 @@ float ConvertComponent(const ResourceFormat &fmt, const byte *data)
{
return float(*i8);
}
else if(fmt.compType == CompType::UNormSRGB)
{
return SRGB8_lookuptable[*u8];
}
else if(fmt.compType == CompType::UNorm)
{
if(fmt.SRGBCorrected())
return SRGB8_lookuptable[*u8];
else
return float(*u8) / 255.0f;
return float(*u8) / 255.0f;
}
else if(fmt.compType == CompType::SNorm)
{