swr/rast: Add support for R10G10B10_FLOAT_A2_UNORM pixel format
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -1237,7 +1237,7 @@ template<> struct FormatTraits<R11G11B10_FLOAT> :
|
||||
/// FormatTraits<R10G10B10_FLOAT_A2_UNORM> - Format traits specialization for R10G10B10_FLOAT_A2_UNORM
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
template<> struct FormatTraits<R10G10B10_FLOAT_A2_UNORM> :
|
||||
ComponentTraits<SWR_TYPE_FLOAT, 10, SWR_TYPE_FLOAT, 10, SWR_TYPE_FLOAT, 10, SWR_TYPE_FLOAT, 2>,
|
||||
ComponentTraits<SWR_TYPE_FLOAT, 10, SWR_TYPE_FLOAT, 10, SWR_TYPE_FLOAT, 10, SWR_TYPE_UNORM, 2>,
|
||||
FormatSwizzle<0, 1, 2, 3>,
|
||||
Defaults<0, 0, 0, 0x3f800000>
|
||||
{
|
||||
|
||||
@@ -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<Function>(JM()->mpCurrentModule->getOrInsertFunction("ConvertSmallFloatTo32", pFuncTy));
|
||||
Function* pCvtPh2Ps = cast<Function>(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<Function>(JM()->mpCurrentModule->getOrInsertFunction("Convert32To16Float", pFuncTy));
|
||||
Function* pCvtPs2Ph = cast<Function>(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);
|
||||
|
||||
Reference in New Issue
Block a user