From e0457acb235b43191900340d941eab82358d8517 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Fri, 11 May 2018 18:56:05 -0700 Subject: [PATCH] Force non-WIC paths for FP32->FP16 conversions (#99) --- DirectXTex/DirectXTexConvert.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/DirectXTex/DirectXTexConvert.cpp b/DirectXTex/DirectXTexConvert.cpp index 73845d6..0095877 100644 --- a/DirectXTex/DirectXTexConvert.cpp +++ b/DirectXTex/DirectXTexConvert.cpp @@ -4301,6 +4301,7 @@ namespace return false; } + // Check for special cases #if defined(_XBOX_ONE) && defined(_TITLE) if (sformat == DXGI_FORMAT_R16G16B16A16_FLOAT || sformat == DXGI_FORMAT_R16_FLOAT @@ -4312,7 +4313,30 @@ namespace } #endif - // Check for special cases + switch (sformat) + { + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_R32G32B32_FLOAT: + case DXGI_FORMAT_R32G32_FLOAT: + case DXGI_FORMAT_R32_FLOAT: + case DXGI_FORMAT_D32_FLOAT: + switch (tformat) + { + case DXGI_FORMAT_R16G16B16A16_FLOAT: + case DXGI_FORMAT_R16G16_FLOAT: + case DXGI_FORMAT_R16_FLOAT: + // WIC conversions for FP32->FP16 can result in NaN values instead of clamping for min/max value + return false; + + default: + break; + } + break; + + default: + break; + } + switch (sformat) { case DXGI_FORMAT_R32G32B32A32_FLOAT: