From 4482cb3e406b4f3a69670f37318f3f8ca4299f24 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Sun, 13 Mar 2022 14:52:34 -0700 Subject: [PATCH] Fixed bug in CPU BC6H compressor if none of the pixel values fall into the SDR 0-1 range --- DirectXTex/BC6HBC7.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/DirectXTex/BC6HBC7.cpp b/DirectXTex/BC6HBC7.cpp index e813862..37ff900 100644 --- a/DirectXTex/BC6HBC7.cpp +++ b/DirectXTex/BC6HBC7.cpp @@ -1180,6 +1180,7 @@ namespace //------------------------------------------------------------------------------------- + template float OptimizeRGB( _In_reads_(NUM_PIXELS_PER_BLOCK) const HDRColorA* const pPoints, _Out_ HDRColorA* pX, @@ -1193,8 +1194,17 @@ namespace const float *pD = (3 == cSteps) ? pD3 : pD4; // Find Min and Max points, as starting point - HDRColorA X(1.0f, 1.0f, 1.0f, 0.0f); - HDRColorA Y(0.0f, 0.0f, 0.0f, 0.0f); + HDRColorA X, Y; + if (ishdr) + { + X = HDRColorA{ FLT_MAX, FLT_MAX, FLT_MAX, 0.0f }; + Y = HDRColorA{ -FLT_MAX, -FLT_MAX, -FLT_MAX, 0.0f }; + } + else + { + X = HDRColorA{ 1.0f, 1.0f, 1.0f, 0.0f }; + Y = HDRColorA{ 0.0f, 0.0f, 0.0f, 0.0f }; + } for (size_t iPoint = 0; iPoint < cPixels; iPoint++) { @@ -2492,7 +2502,7 @@ float D3DX_BC6H::RoughMSE(EncodeParams* pEP) const noexcept } HDRColorA epA, epB; - OptimizeRGB(pEP->aHDRPixels, &epA, &epB, 4, np, auPixIdx); + OptimizeRGB(pEP->aHDRPixels, &epA, &epB, 4, np, auPixIdx); aEndPts[p].A.Set(epA, pEP->bSigned); aEndPts[p].B.Set(epB, pEP->bSigned); if (pEP->bSigned) @@ -3464,7 +3474,7 @@ float D3DX_BC7::RoughMSE(EncodeParams* pEP, size_t uShape, size_t uIndexMode) no } HDRColorA epA, epB; - OptimizeRGB(pEP->aHDRPixels, &epA, &epB, 4, np, auPixIdx); + OptimizeRGB(pEP->aHDRPixels, &epA, &epB, 4, np, auPixIdx); epA.Clamp(0.0f, 1.0f); epB.Clamp(0.0f, 1.0f); epA *= 255.0f;