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:
baldurk
2019-01-14 10:50:04 +00:00
parent d72d924c39
commit 44da10be06
10 changed files with 108 additions and 133 deletions
+4 -15
View File
@@ -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,
-1
View File
@@ -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);
}
}
+1
View File
@@ -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();
}
+6
View File
@@ -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);
+11 -8
View File
@@ -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:
+1 -3
View File
@@ -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;
+34 -16
View File
@@ -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);
}
}
};
+5 -5
View File
@@ -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)
{
+45 -82
View File
@@ -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);
}
}
};
+1 -3
View File
@@ -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;