mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Change SRGB to be a component type, not a ResourceFormat flag
* This allows us to have sRGB as a type hint, and better matches API format types. * It's currently impossible and unlikely to ever be the case that srgb is applied to anything other than UNorm, so having it be independent from the component type was a degree of freedom that was unused.
This commit is contained in:
@@ -180,10 +180,12 @@ struct ResourceFormat
|
||||
:rtype: ``bool``
|
||||
)");
|
||||
bool BGRAOrder() const { return (flags & ResourceFormat_BGRA) != 0; }
|
||||
DOCUMENT(R"(:return: ``True`` if the components are SRGB corrected on read and write.
|
||||
DOCUMENT(R"(Equivalent to checking if :data:`compType` is :data:`CompType.UNormSRGB`
|
||||
|
||||
:return: ``True`` if the components are SRGB corrected on read and write.
|
||||
:rtype: ``bool``
|
||||
)");
|
||||
bool SRGBCorrected() const { return (flags & ResourceFormat_SRGB) != 0; }
|
||||
bool SRGBCorrected() const { return compType == CompType::UNormSRGB; }
|
||||
DOCUMENT(R"(Get the subsampling rate for a YUV format. Only valid when :data:`type` is
|
||||
a YUV format like :attr:`ResourceFormatType.YUV8`.
|
||||
|
||||
@@ -232,18 +234,6 @@ For other formats, 1 is returned.
|
||||
flags &= ~ResourceFormat_BGRA;
|
||||
}
|
||||
|
||||
DOCUMENT(R"(Set SRGB correction flag. See :meth:`SRGBCorrected`.
|
||||
|
||||
:param bool flag: The new flag value.
|
||||
)");
|
||||
void SetSRGBCorrected(bool flag)
|
||||
{
|
||||
if(flag)
|
||||
flags |= ResourceFormat_SRGB;
|
||||
else
|
||||
flags &= ~ResourceFormat_SRGB;
|
||||
}
|
||||
|
||||
DOCUMENT(R"(Set YUV subsampling rate. See :meth:`YUVSubsampling`.
|
||||
|
||||
The value should be e.g. 444 for 4:4:4 or 422 for 4:2:2. Invalid values will result in 0 being set.
|
||||
@@ -289,7 +279,6 @@ private:
|
||||
enum
|
||||
{
|
||||
ResourceFormat_BGRA = 0x001,
|
||||
ResourceFormat_SRGB = 0x002,
|
||||
|
||||
ResourceFormat_444 = 0x004,
|
||||
ResourceFormat_422 = 0x008,
|
||||
|
||||
@@ -821,7 +821,6 @@ rdcarray<VertexInputAttribute> PipeState::GetVertexInputs() const
|
||||
ret[a].format.compCount = (uint8_t)compCount;
|
||||
ret[a].format.compType = compType;
|
||||
ret[a].format.type = ResourceFormatType::Regular;
|
||||
ret[a].format.SetSRGBCorrected(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -105,6 +105,7 @@ std::string DoStringise(const CompType &el)
|
||||
STRINGISE_ENUM_CLASS(SScaled);
|
||||
STRINGISE_ENUM_CLASS_NAMED(Depth, "Depth/Stencil");
|
||||
STRINGISE_ENUM_CLASS(Double);
|
||||
STRINGISE_ENUM_CLASS_NAMED(UNormSRGB, "sRGB");
|
||||
}
|
||||
END_ENUM_STRINGISE();
|
||||
}
|
||||
|
||||
@@ -225,6 +225,11 @@ DOCUMENT(R"(Represents the component type of a channel in a texture or element i
|
||||
.. data:: Double
|
||||
|
||||
A double-precision (64-bit) floating point value.
|
||||
|
||||
.. data:: UNormSRGB
|
||||
|
||||
Similar to :data:`UNorm` normalised between the minimum and maximum unsigned values to ``0.0`` -
|
||||
``1.0``, but with an sRGB gamma curve applied.
|
||||
)");
|
||||
enum class CompType : uint8_t
|
||||
{
|
||||
@@ -238,6 +243,7 @@ enum class CompType : uint8_t
|
||||
SScaled,
|
||||
Depth,
|
||||
Double,
|
||||
UNormSRGB,
|
||||
};
|
||||
|
||||
DECLARE_REFLECTION_ENUM(CompType);
|
||||
|
||||
@@ -252,17 +252,20 @@ ResourceFormat DXGIFormat2ResourceFormat(DXGI_FORMAT format)
|
||||
case DXGI_FORMAT_BC1_UNORM:
|
||||
case DXGI_FORMAT_BC1_UNORM_SRGB:
|
||||
special.type = ResourceFormatType::BC1;
|
||||
special.SetSRGBCorrected(format == DXGI_FORMAT_BC1_UNORM_SRGB);
|
||||
special.compType =
|
||||
(format == DXGI_FORMAT_BC1_UNORM_SRGB) ? CompType::UNormSRGB : CompType::UNorm;
|
||||
return special;
|
||||
case DXGI_FORMAT_BC2_UNORM:
|
||||
case DXGI_FORMAT_BC2_UNORM_SRGB:
|
||||
special.type = ResourceFormatType::BC2;
|
||||
special.SetSRGBCorrected(format == DXGI_FORMAT_BC2_UNORM_SRGB);
|
||||
special.compType =
|
||||
(format == DXGI_FORMAT_BC2_UNORM_SRGB) ? CompType::UNormSRGB : CompType::UNorm;
|
||||
return special;
|
||||
case DXGI_FORMAT_BC3_UNORM:
|
||||
case DXGI_FORMAT_BC3_UNORM_SRGB:
|
||||
special.type = ResourceFormatType::BC3;
|
||||
special.SetSRGBCorrected(format == DXGI_FORMAT_BC3_UNORM_SRGB);
|
||||
special.compType =
|
||||
(format == DXGI_FORMAT_BC3_UNORM_SRGB) ? CompType::UNormSRGB : CompType::UNorm;
|
||||
return special;
|
||||
case DXGI_FORMAT_BC4_UNORM:
|
||||
case DXGI_FORMAT_BC4_SNORM:
|
||||
@@ -282,7 +285,8 @@ ResourceFormat DXGIFormat2ResourceFormat(DXGI_FORMAT format)
|
||||
case DXGI_FORMAT_BC7_UNORM:
|
||||
case DXGI_FORMAT_BC7_UNORM_SRGB:
|
||||
special.type = ResourceFormatType::BC7;
|
||||
special.SetSRGBCorrected(format == DXGI_FORMAT_BC7_UNORM_SRGB);
|
||||
special.compType =
|
||||
(format == DXGI_FORMAT_BC7_UNORM_SRGB) ? CompType::UNormSRGB : CompType::UNorm;
|
||||
return special;
|
||||
case DXGI_FORMAT_R10G10B10A2_UNORM:
|
||||
case DXGI_FORMAT_R10G10B10A2_UINT:
|
||||
@@ -397,17 +401,16 @@ ResourceFormat DXGIFormat2ResourceFormat(DXGI_FORMAT format)
|
||||
fmt8.compCount = 4;
|
||||
return fmt8;
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
fmt8.compType = CompType::UNorm;
|
||||
fmt8.SetSRGBCorrected(true);
|
||||
fmt8.compType = CompType::UNormSRGB;
|
||||
fmt8.compCount = 4;
|
||||
return fmt8;
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM: fmt8.compCount = 4; return fmt8;
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
fmt8.compType = CompType::UNorm;
|
||||
fmt8.compCount = 4;
|
||||
fmt8.SetBGRAOrder(true);
|
||||
fmt8.SetSRGBCorrected(format == DXGI_FORMAT_B8G8R8A8_UNORM_SRGB);
|
||||
fmt8.compType =
|
||||
(format == DXGI_FORMAT_B8G8R8A8_UNORM_SRGB) ? CompType::UNormSRGB : CompType::UNorm;
|
||||
return fmt8;
|
||||
|
||||
case DXGI_FORMAT_R8G8_UINT:
|
||||
|
||||
@@ -461,14 +461,12 @@ void ImageViewer::RefreshFile()
|
||||
ResourceFormat rgba8_unorm;
|
||||
rgba8_unorm.compByteWidth = 1;
|
||||
rgba8_unorm.compCount = 4;
|
||||
rgba8_unorm.compType = CompType::UNorm;
|
||||
rgba8_unorm.compType = CompType::UNormSRGB;
|
||||
rgba8_unorm.type = ResourceFormatType::Regular;
|
||||
rgba8_unorm.SetSRGBCorrected(true);
|
||||
|
||||
ResourceFormat rgba32_float = rgba8_unorm;
|
||||
rgba32_float.compByteWidth = 4;
|
||||
rgba32_float.compType = CompType::Float;
|
||||
rgba32_float.SetSRGBCorrected(false);
|
||||
|
||||
texDetails.creationFlags = TextureCategory::SwapBuffer | TextureCategory::ColorTarget;
|
||||
texDetails.cubemap = false;
|
||||
|
||||
@@ -2000,24 +2000,42 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt)
|
||||
}
|
||||
|
||||
if(fmt.compType == CompType::Typeless)
|
||||
{
|
||||
ret = GetTypelessFormat(ret);
|
||||
}
|
||||
else if(fmt.compType == CompType::Float)
|
||||
{
|
||||
ret = GetFloatTypedFormat(ret);
|
||||
}
|
||||
else if(fmt.compType == CompType::Depth)
|
||||
{
|
||||
ret = GetDepthTypedFormat(ret);
|
||||
}
|
||||
else if(fmt.compType == CompType::UNorm)
|
||||
{
|
||||
ret = GetUnormTypedFormat(ret);
|
||||
}
|
||||
else if(fmt.compType == CompType::SNorm)
|
||||
{
|
||||
ret = GetSnormTypedFormat(ret);
|
||||
}
|
||||
else if(fmt.compType == CompType::UInt)
|
||||
{
|
||||
ret = GetUIntTypedFormat(ret);
|
||||
}
|
||||
else if(fmt.compType == CompType::SInt)
|
||||
{
|
||||
ret = GetSIntTypedFormat(ret);
|
||||
else
|
||||
return DXGI_FORMAT_UNKNOWN;
|
||||
|
||||
if(fmt.SRGBCorrected())
|
||||
}
|
||||
else if(fmt.compType == CompType::UNormSRGB)
|
||||
{
|
||||
ret = GetSRGBFormat(ret);
|
||||
}
|
||||
else
|
||||
{
|
||||
RDCERR("Unexpected component type %x", fmt.compType);
|
||||
return DXGI_FORMAT_UNKNOWN;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -2029,8 +2047,6 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
ret.compCount = ret.compByteWidth = 0;
|
||||
ret.compType = CompType::Float;
|
||||
|
||||
ret.SetSRGBCorrected(IsSRGBFormat(fmt));
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case DXGI_FORMAT_R32G32B32A32_TYPELESS:
|
||||
@@ -2249,7 +2265,6 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
case DXGI_FORMAT_R16G16_FLOAT:
|
||||
case DXGI_FORMAT_R32_FLOAT:
|
||||
case DXGI_FORMAT_R16_FLOAT: ret.compType = CompType::Float; break;
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||
case DXGI_FORMAT_R16G16B16A16_UNORM:
|
||||
case DXGI_FORMAT_R16G16_UNORM:
|
||||
@@ -2323,8 +2338,6 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
case DXGI_FORMAT_B5G5R5A1_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_R1_UNORM:
|
||||
case DXGI_FORMAT_BC1_UNORM:
|
||||
case DXGI_FORMAT_BC2_UNORM:
|
||||
@@ -2332,11 +2345,14 @@ ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt)
|
||||
case DXGI_FORMAT_BC4_UNORM:
|
||||
case DXGI_FORMAT_BC5_UNORM:
|
||||
case DXGI_FORMAT_BC6H_UF16:
|
||||
case DXGI_FORMAT_BC7_UNORM:
|
||||
case DXGI_FORMAT_BC7_UNORM: ret.compType = CompType::UNorm; break;
|
||||
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC1_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC2_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC3_UNORM_SRGB:
|
||||
case DXGI_FORMAT_BC7_UNORM_SRGB: ret.compType = CompType::UNorm; break;
|
||||
case DXGI_FORMAT_BC7_UNORM_SRGB: ret.compType = CompType::UNormSRGB; break;
|
||||
|
||||
case DXGI_FORMAT_UNKNOWN:
|
||||
case DXGI_FORMAT_FORCE_UINT: ret.compType = CompType::Typeless; break;
|
||||
@@ -2593,21 +2609,22 @@ TEST_CASE("DXGI formats", "[format][d3d]")
|
||||
|
||||
ResourceFormat fmt = MakeResourceFormat(f);
|
||||
|
||||
DXGI_FORMAT dxgi = MakeDXGIFormat(fmt);
|
||||
DXGI_FORMAT original = f;
|
||||
DXGI_FORMAT reconstructed = MakeDXGIFormat(fmt);
|
||||
|
||||
// we are OK with remapping these formats to a single value instead of preserving the view
|
||||
// type.
|
||||
if(f == DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS || f == DXGI_FORMAT_X32_TYPELESS_G8X24_UINT)
|
||||
{
|
||||
CHECK(dxgi == DXGI_FORMAT_D32_FLOAT_S8X24_UINT);
|
||||
CHECK(reconstructed == DXGI_FORMAT_D32_FLOAT_S8X24_UINT);
|
||||
}
|
||||
else if(f == DXGI_FORMAT_R24_UNORM_X8_TYPELESS || f == DXGI_FORMAT_X24_TYPELESS_G8_UINT)
|
||||
{
|
||||
CHECK(dxgi == DXGI_FORMAT_D24_UNORM_S8_UINT);
|
||||
CHECK(reconstructed == DXGI_FORMAT_D24_UNORM_S8_UINT);
|
||||
}
|
||||
else
|
||||
{
|
||||
CHECK(dxgi == f);
|
||||
CHECK(reconstructed == original);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -2724,13 +2741,14 @@ TEST_CASE("DXGI formats", "[format][d3d]")
|
||||
{
|
||||
CompType typeHint = fmt.compType;
|
||||
|
||||
DXGI_FORMAT original = f;
|
||||
DXGI_FORMAT typeless = GetTypelessFormat(f);
|
||||
DXGI_FORMAT typed = GetTypedFormat(typeless, typeHint);
|
||||
|
||||
if(fmt.SRGBCorrected())
|
||||
typed = GetSRGBFormat(typed);
|
||||
|
||||
CHECK(f == typed);
|
||||
CHECK(original == typed);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1736,7 +1736,6 @@ ResourceFormat MakeResourceFormat(GLenum target, GLenum fmt)
|
||||
ret.compByteWidth = 1;
|
||||
ret.compCount = 1;
|
||||
ret.compType = CompType::UNorm;
|
||||
ret.SetSRGBCorrected(false);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1765,6 +1764,8 @@ ResourceFormat MakeResourceFormat(GLenum target, GLenum fmt)
|
||||
default: break;
|
||||
}
|
||||
|
||||
ret.compType = CompType::UNorm;
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case eGL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
|
||||
@@ -1774,12 +1775,10 @@ ResourceFormat MakeResourceFormat(GLenum target, GLenum fmt)
|
||||
case eGL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB:
|
||||
case eGL_COMPRESSED_SRGB8_ETC2:
|
||||
case eGL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
|
||||
case eGL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: ret.SetSRGBCorrected(true); break;
|
||||
case eGL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: ret.compType = CompType::UNormSRGB; break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
ret.compType = CompType::UNorm;
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case eGL_COMPRESSED_SIGNED_RED_RGTC1:
|
||||
@@ -1980,7 +1979,8 @@ ResourceFormat MakeResourceFormat(GLenum target, GLenum fmt)
|
||||
}
|
||||
|
||||
GL.glGetInternalformativ(target, fmt, eGL_COLOR_ENCODING, sizeof(GLint), &data[0]);
|
||||
ret.SetSRGBCorrected(edata[0] == eGL_SRGB);
|
||||
if(edata[0] == eGL_SRGB)
|
||||
ret.compType = CompType::UNormSRGB;
|
||||
}
|
||||
else if(isdepth == GL_TRUE || isstencil == GL_TRUE)
|
||||
{
|
||||
|
||||
@@ -1532,44 +1532,6 @@ ResourceFormat MakeResourceFormat(VkFormat fmt)
|
||||
default: break;
|
||||
}
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case VK_FORMAT_R8_SRGB:
|
||||
case VK_FORMAT_R8G8_SRGB:
|
||||
case VK_FORMAT_R8G8B8_SRGB:
|
||||
case VK_FORMAT_R8G8B8A8_SRGB:
|
||||
case VK_FORMAT_A8B8G8R8_SRGB_PACK32:
|
||||
case VK_FORMAT_BC1_RGB_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC2_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC3_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC7_SRGB_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
|
||||
case VK_FORMAT_B8G8R8_SRGB:
|
||||
case VK_FORMAT_B8G8R8A8_SRGB:
|
||||
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: ret.SetSRGBCorrected(true); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
switch(fmt)
|
||||
{
|
||||
case VK_FORMAT_R4G4_UNORM_PACK8:
|
||||
@@ -1577,85 +1539,85 @@ ResourceFormat MakeResourceFormat(VkFormat fmt)
|
||||
case VK_FORMAT_R5G6B5_UNORM_PACK16:
|
||||
case VK_FORMAT_R5G5B5A1_UNORM_PACK16:
|
||||
case VK_FORMAT_R8_UNORM:
|
||||
case VK_FORMAT_R8_SRGB:
|
||||
case VK_FORMAT_R8G8_UNORM:
|
||||
case VK_FORMAT_R8G8_SRGB:
|
||||
case VK_FORMAT_R8G8B8_UNORM:
|
||||
case VK_FORMAT_R8G8B8_SRGB:
|
||||
case VK_FORMAT_R8G8B8A8_UNORM:
|
||||
case VK_FORMAT_R8G8B8A8_SRGB:
|
||||
case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
|
||||
case VK_FORMAT_R16_UNORM:
|
||||
case VK_FORMAT_R16G16_UNORM:
|
||||
case VK_FORMAT_R16G16B16_UNORM:
|
||||
case VK_FORMAT_R16G16B16A16_UNORM:
|
||||
case VK_FORMAT_BC1_RGB_UNORM_BLOCK:
|
||||
case VK_FORMAT_BC1_RGB_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC1_RGBA_UNORM_BLOCK:
|
||||
case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC2_UNORM_BLOCK:
|
||||
case VK_FORMAT_BC2_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC3_UNORM_BLOCK:
|
||||
case VK_FORMAT_BC3_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC4_UNORM_BLOCK:
|
||||
case VK_FORMAT_BC5_UNORM_BLOCK:
|
||||
case VK_FORMAT_BC7_UNORM_BLOCK:
|
||||
case VK_FORMAT_BC7_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC6H_UFLOAT_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
|
||||
case VK_FORMAT_EAC_R11_UNORM_BLOCK:
|
||||
case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
|
||||
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
|
||||
case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
|
||||
case VK_FORMAT_B5G5R5A1_UNORM_PACK16:
|
||||
case VK_FORMAT_B5G6R5_UNORM_PACK16:
|
||||
case VK_FORMAT_B8G8R8_UNORM:
|
||||
case VK_FORMAT_B8G8R8_SRGB:
|
||||
case VK_FORMAT_B8G8R8A8_UNORM:
|
||||
case VK_FORMAT_B8G8R8A8_SRGB:
|
||||
case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
|
||||
case VK_FORMAT_A8B8G8R8_SRGB_PACK32:
|
||||
case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
|
||||
case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG: ret.compType = CompType::UNorm; break;
|
||||
case VK_FORMAT_R8_SRGB:
|
||||
case VK_FORMAT_R8G8_SRGB:
|
||||
case VK_FORMAT_R8G8B8_SRGB:
|
||||
case VK_FORMAT_R8G8B8A8_SRGB:
|
||||
case VK_FORMAT_A8B8G8R8_SRGB_PACK32:
|
||||
case VK_FORMAT_BC1_RGB_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC2_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC3_SRGB_BLOCK:
|
||||
case VK_FORMAT_BC7_SRGB_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
|
||||
case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
|
||||
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
|
||||
case VK_FORMAT_B8G8R8_SRGB:
|
||||
case VK_FORMAT_B8G8R8A8_SRGB:
|
||||
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:
|
||||
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: ret.compType = CompType::UNorm; break;
|
||||
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: ret.compType = CompType::UNormSRGB; break;
|
||||
case VK_FORMAT_R8_SNORM:
|
||||
case VK_FORMAT_R8G8_SNORM:
|
||||
case VK_FORMAT_R8G8B8_SNORM:
|
||||
@@ -3002,6 +2964,7 @@ TEST_CASE("Vulkan formats", "[format][vulkan]")
|
||||
{
|
||||
for(VkFormat f : formats)
|
||||
{
|
||||
VkFormat original = f;
|
||||
ResourceFormat fmt = MakeResourceFormat(f);
|
||||
|
||||
// astc and pvrtc are not properly supported, collapse to a single type
|
||||
@@ -3016,58 +2979,58 @@ TEST_CASE("Vulkan formats", "[format][vulkan]")
|
||||
continue;
|
||||
}
|
||||
|
||||
VkFormat vkf = MakeVkFormat(fmt);
|
||||
VkFormat reconstructed = MakeVkFormat(fmt);
|
||||
|
||||
// we are OK with remapping these variants to another similar one, where our format doesn't
|
||||
// have enough flexibility to represent the exact type (as a trade-off vs simplicity of
|
||||
// processing/storage).
|
||||
if(f == VK_FORMAT_A1R5G5B5_UNORM_PACK16)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_R5G5B5A1_UNORM_PACK16);
|
||||
CHECK(reconstructed == VK_FORMAT_R5G5B5A1_UNORM_PACK16);
|
||||
}
|
||||
else if(f == VK_FORMAT_A8B8G8R8_UNORM_PACK32)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_R8G8B8A8_UNORM);
|
||||
CHECK(reconstructed == VK_FORMAT_R8G8B8A8_UNORM);
|
||||
}
|
||||
else if(f == VK_FORMAT_A8B8G8R8_SNORM_PACK32)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_R8G8B8A8_SNORM);
|
||||
CHECK(reconstructed == VK_FORMAT_R8G8B8A8_SNORM);
|
||||
}
|
||||
else if(f == VK_FORMAT_A8B8G8R8_USCALED_PACK32)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_R8G8B8A8_USCALED);
|
||||
CHECK(reconstructed == VK_FORMAT_R8G8B8A8_USCALED);
|
||||
}
|
||||
else if(f == VK_FORMAT_A8B8G8R8_SSCALED_PACK32)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_R8G8B8A8_SSCALED);
|
||||
CHECK(reconstructed == VK_FORMAT_R8G8B8A8_SSCALED);
|
||||
}
|
||||
else if(f == VK_FORMAT_A8B8G8R8_UINT_PACK32)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_R8G8B8A8_UINT);
|
||||
CHECK(reconstructed == VK_FORMAT_R8G8B8A8_UINT);
|
||||
}
|
||||
else if(f == VK_FORMAT_A8B8G8R8_SINT_PACK32)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_R8G8B8A8_SINT);
|
||||
CHECK(reconstructed == VK_FORMAT_R8G8B8A8_SINT);
|
||||
}
|
||||
else if(f == VK_FORMAT_A8B8G8R8_SRGB_PACK32)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_R8G8B8A8_SRGB);
|
||||
CHECK(reconstructed == VK_FORMAT_R8G8B8A8_SRGB);
|
||||
}
|
||||
else if(f == VK_FORMAT_X8_D24_UNORM_PACK32)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_D24_UNORM_S8_UINT);
|
||||
CHECK(reconstructed == VK_FORMAT_D24_UNORM_S8_UINT);
|
||||
}
|
||||
else if(f == VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK);
|
||||
CHECK(reconstructed == VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK);
|
||||
}
|
||||
else if(f == VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK)
|
||||
{
|
||||
CHECK(vkf == VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK);
|
||||
CHECK(reconstructed == VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK);
|
||||
}
|
||||
else
|
||||
{
|
||||
CHECK(vkf == f);
|
||||
CHECK(reconstructed == original);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -762,9 +762,6 @@ static std::string ResourceFormatName(const ResourceFormat &fmt)
|
||||
ret += StringFormat::Fmt("%c%u", comps[i], fmt.compByteWidth * 8);
|
||||
}
|
||||
|
||||
if(fmt.SRGBCorrected())
|
||||
return ret + "_SRGB";
|
||||
|
||||
switch(fmt.compType)
|
||||
{
|
||||
case CompType::Typeless: return ret + "_TYPELESS";
|
||||
@@ -776,6 +773,7 @@ static std::string ResourceFormatName(const ResourceFormat &fmt)
|
||||
case CompType::SInt: return ret + "_SINT";
|
||||
case CompType::UScaled: return ret + "_USCALED";
|
||||
case CompType::SScaled: return ret + "_SSCALED";
|
||||
case CompType::UNormSRGB: return ret + "_SRGB";
|
||||
case CompType::Depth:
|
||||
// we already special-cased depth component type above to be Dx instead of Rx
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user