diff --git a/renderdoc/api/replay/data_types.h b/renderdoc/api/replay/data_types.h index eaf366cb9..1e474b2e6 100644 --- a/renderdoc/api/replay/data_types.h +++ b/renderdoc/api/replay/data_types.h @@ -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, diff --git a/renderdoc/api/replay/pipestate.inl b/renderdoc/api/replay/pipestate.inl index 1dcacff73..a32065e06 100644 --- a/renderdoc/api/replay/pipestate.inl +++ b/renderdoc/api/replay/pipestate.inl @@ -821,7 +821,6 @@ rdcarray 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); } } diff --git a/renderdoc/api/replay/renderdoc_tostr.inl b/renderdoc/api/replay/renderdoc_tostr.inl index 562c6fd70..9206df61a 100644 --- a/renderdoc/api/replay/renderdoc_tostr.inl +++ b/renderdoc/api/replay/renderdoc_tostr.inl @@ -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(); } diff --git a/renderdoc/api/replay/replay_enums.h b/renderdoc/api/replay/replay_enums.h index 258dc8c77..64ba0e0ee 100644 --- a/renderdoc/api/replay/replay_enums.h +++ b/renderdoc/api/replay/replay_enums.h @@ -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); diff --git a/renderdoc/common/dds_readwrite.cpp b/renderdoc/common/dds_readwrite.cpp index 3fa89480f..c70ad622c 100644 --- a/renderdoc/common/dds_readwrite.cpp +++ b/renderdoc/common/dds_readwrite.cpp @@ -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: diff --git a/renderdoc/core/image_viewer.cpp b/renderdoc/core/image_viewer.cpp index 2b53e43cc..3e60ceb23 100644 --- a/renderdoc/core/image_viewer.cpp +++ b/renderdoc/core/image_viewer.cpp @@ -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; diff --git a/renderdoc/driver/dxgi/dxgi_common.cpp b/renderdoc/driver/dxgi/dxgi_common.cpp index 621bda34f..f67775a1f 100644 --- a/renderdoc/driver/dxgi/dxgi_common.cpp +++ b/renderdoc/driver/dxgi/dxgi_common.cpp @@ -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); } } }; diff --git a/renderdoc/driver/gl/gl_common.cpp b/renderdoc/driver/gl/gl_common.cpp index 658b4cb60..5743ef7b0 100644 --- a/renderdoc/driver/gl/gl_common.cpp +++ b/renderdoc/driver/gl/gl_common.cpp @@ -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) { diff --git a/renderdoc/driver/vulkan/vk_resources.cpp b/renderdoc/driver/vulkan/vk_resources.cpp index 01e2249de..a0c38467c 100644 --- a/renderdoc/driver/vulkan/vk_resources.cpp +++ b/renderdoc/driver/vulkan/vk_resources.cpp @@ -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); } } }; diff --git a/renderdoc/replay/entry_points.cpp b/renderdoc/replay/entry_points.cpp index 5c5eb3b7a..dea1ecc79 100644 --- a/renderdoc/replay/entry_points.cpp +++ b/renderdoc/replay/entry_points.cpp @@ -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;