From b4719fa58c5aacb77f1fad4041b28b71df4ed94a Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Fri, 10 Mar 2023 15:19:09 -0800 Subject: [PATCH] Fix handling of SRGB_IN and SRGB_OUT for GPU BC7 compressor (#326) --- DirectXTex/DirectXTexCompressGPU.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/DirectXTex/DirectXTexCompressGPU.cpp b/DirectXTex/DirectXTexCompressGPU.cpp index fb9d84d..019aeda 100644 --- a/DirectXTex/DirectXTexCompressGPU.cpp +++ b/DirectXTex/DirectXTexCompressGPU.cpp @@ -154,9 +154,14 @@ namespace assert(srcImage.pixels && destImage.pixels); - const DXGI_FORMAT format = gpubc->GetSourceFormat(); + DXGI_FORMAT tformat = gpubc->GetSourceFormat(); + if (compress & TEX_COMPRESS_SRGB_OUT) + { + tformat = MakeSRGB(tformat); + } + const DXGI_FORMAT sformat = (compress & TEX_COMPRESS_SRGB_IN) ? MakeSRGB(srcImage.format) : srcImage.format; - if (srcImage.format == format) + if (sformat == tformat) { // Input is already in our required source format return gpubc->Compress(srcImage, destImage); @@ -169,7 +174,7 @@ namespace auto const srgb = GetSRGBFlags(compress); - switch (format) + switch (tformat) { case DXGI_FORMAT_R8G8B8A8_UNORM: hr = ConvertToRGBA32(srcImage, image, false, srgb);