From: Tim Rowley Date: Mon, 11 Sep 2017 21:07:32 +0000 (-0500) Subject: swr/rast: Add support for R10G10B10_FLOAT_A2_UNORM pixel format X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=41565ddf7a7f8986d232b5619ac80233251d0900;p=mesa.git swr/rast: Add support for R10G10B10_FLOAT_A2_UNORM pixel format Reviewed-by: Bruce Cherniak --- diff --git a/src/gallium/drivers/swr/rasterizer/common/formats.cpp b/src/gallium/drivers/swr/rasterizer/common/formats.cpp index 263dec649a4..1c086ff1882 100644 --- a/src/gallium/drivers/swr/rasterizer/common/formats.cpp +++ b/src/gallium/drivers/swr/rasterizer/common/formats.cpp @@ -2729,16 +2729,27 @@ const SWR_FORMAT_INFO gFormatInfo[] = { { 0.0f, 0.0f, 0.0f, 0.0f }, 1, 1 }, - // padding (0xD5) + + // R10G10B10_FLOAT_A2_UNORM (0xD5) { - nullptr, - { SWR_TYPE_UNKNOWN, SWR_TYPE_UNKNOWN, SWR_TYPE_UNKNOWN, SWR_TYPE_UNKNOWN }, - { 0, 0, 0, 0 },{ 0, 0, 0, 0 },{ 0, 0, 0, 0 }, - 0, 0, 0, false, false, false, false, - { false, false, false, false }, - { 0.0f, 0.0f, 0.0f, 0.0f }, - 1, 1 + "R10G10B10_FLOAT_A2_UNORM", + { SWR_TYPE_FLOAT, SWR_TYPE_FLOAT, SWR_TYPE_FLOAT, SWR_TYPE_UNORM }, + { 0, 0, 0, 0x3f800000 }, // Defaults for missing components + { 0, 1, 2, 3 }, // Swizzle + { 10, 10, 10, 2 }, // Bits per component + 32, // Bits per element + 4, // Bytes per element + 4, // Num components + false, // isSRGB + false, // isBC + false, // isSubsampled + false, // isLuminance + { false, false, false, false }, // Is normalized? + { 1.0f, 1.0f, 1.0f, 1.0f / 3.0f }, // To float scale factor + 1, // bcWidth + 1, // bcHeight }, + // R32_SINT (0xD6) { "R32_SINT", diff --git a/src/gallium/drivers/swr/rasterizer/core/format_traits.h b/src/gallium/drivers/swr/rasterizer/core/format_traits.h index c04ea5f8ee7..bc585dd175a 100644 --- a/src/gallium/drivers/swr/rasterizer/core/format_traits.h +++ b/src/gallium/drivers/swr/rasterizer/core/format_traits.h @@ -1237,7 +1237,7 @@ template<> struct FormatTraits : /// FormatTraits - Format traits specialization for R10G10B10_FLOAT_A2_UNORM ////////////////////////////////////////////////////////////////////////// template<> struct FormatTraits : - ComponentTraits, + ComponentTraits, FormatSwizzle<0, 1, 2, 3>, Defaults<0, 0, 0, 0x3f800000> { diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder_misc.cpp b/src/gallium/drivers/swr/rasterizer/jitter/builder_misc.cpp index 402fd2652f2..b943909a574 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/builder_misc.cpp +++ b/src/gallium/drivers/swr/rasterizer/jitter/builder_misc.cpp @@ -42,7 +42,7 @@ namespace SwrJit /// number of mantissa bits. /// @param val - 32-bit float /// @todo Maybe move this outside of this file into a header? - static uint16_t Convert32To16Float(float val) + static uint16_t ConvertFloat32ToFloat16(float val) { uint32_t sign, exp, mant; uint32_t roundBits; @@ -112,7 +112,7 @@ namespace SwrJit /// float /// @param val - 16-bit float /// @todo Maybe move this outside of this file into a header? - static float ConvertSmallFloatTo32(uint32_t val) + static float ConvertFloat16ToFloat32(uint32_t val) { uint32_t result; if ((val & 0x7fff) == 0) @@ -888,11 +888,11 @@ namespace SwrJit else { FunctionType* pFuncTy = FunctionType::get(mFP32Ty, mInt16Ty); - Function* pCvtPh2Ps = cast(JM()->mpCurrentModule->getOrInsertFunction("ConvertSmallFloatTo32", pFuncTy)); + Function* pCvtPh2Ps = cast(JM()->mpCurrentModule->getOrInsertFunction("ConvertFloat16ToFloat32", pFuncTy)); - if (sys::DynamicLibrary::SearchForAddressOfSymbol("ConvertSmallFloatTo32") == nullptr) + if (sys::DynamicLibrary::SearchForAddressOfSymbol("ConvertFloat16ToFloat32") == nullptr) { - sys::DynamicLibrary::AddSymbol("ConvertSmallFloatTo32", (void *)&ConvertSmallFloatTo32); + sys::DynamicLibrary::AddSymbol("ConvertFloat16ToFloat32", (void *)&ConvertFloat16ToFloat32); } Value* pResult = UndefValue::get(mSimdFP32Ty); @@ -921,11 +921,11 @@ namespace SwrJit { // call scalar C function for now FunctionType* pFuncTy = FunctionType::get(mInt16Ty, mFP32Ty); - Function* pCvtPs2Ph = cast(JM()->mpCurrentModule->getOrInsertFunction("Convert32To16Float", pFuncTy)); + Function* pCvtPs2Ph = cast(JM()->mpCurrentModule->getOrInsertFunction("ConvertFloat32ToFloat16", pFuncTy)); - if (sys::DynamicLibrary::SearchForAddressOfSymbol("Convert32To16Float") == nullptr) + if (sys::DynamicLibrary::SearchForAddressOfSymbol("ConvertFloat32ToFloat16") == nullptr) { - sys::DynamicLibrary::AddSymbol("Convert32To16Float", (void *)&Convert32To16Float); + sys::DynamicLibrary::AddSymbol("ConvertFloat32ToFloat16", (void *)&ConvertFloat32ToFloat16); } Value* pResult = UndefValue::get(mSimdInt16Ty);