Commit d3a2d3d7 by Alexis Hetu Committed by Alexis Hétu

New read/write cases for integer types

Added new read/write functionality for integer types. Also added cases for integer types in some utility functions. Change-Id: I5efc7c4957d3a1591b47a5df888a9534776033be Reviewed-on: https://swiftshader-review.googlesource.com/4114Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 506ef481
......@@ -209,49 +209,103 @@ namespace sw
template<const int n>
inline unsigned int unorm(float x)
{
const unsigned int max = 0xFFFFFFFF >> (32 - n);
static const unsigned int max = 0xFFFFFFFF >> (32 - n);
static const float maxf = static_cast<float>(max);
if(x > 1)
if(x >= 1.0f)
{
return max;
}
else if(x < 0)
else if(x <= 0.0f)
{
return 0;
}
else
{
return (unsigned int)(max * x + 0.5f);
return static_cast<unsigned int>(maxf * x + 0.5f);
}
}
template<const int n>
inline int snorm(float x)
{
const unsigned int min = 0x80000000 >> (32 - n);
const unsigned int max = 0xFFFFFFFF >> (32 - n + 1);
const unsigned int range = 0xFFFFFFFF >> (32 - n);
static const unsigned int min = 0x80000000 >> (32 - n);
static const unsigned int max = 0xFFFFFFFF >> (32 - n + 1);
static const float maxf = static_cast<float>(max);
static const unsigned int range = 0xFFFFFFFF >> (32 - n);
if(x > 0)
if(x >= 0.0f)
{
if(x > 1)
if(x >= 1.0f)
{
return max;
}
else
{
return (int)(max * x + 0.5f);
return static_cast<int>(maxf * x + 0.5f);
}
}
else
{
if(x < -1)
if(x <= -1.0f)
{
return min;
}
else
{
return (int)(max * x - 0.5f) & range;
return static_cast<int>(maxf * x - 0.5f) & range;
}
}
}
template<const int n>
inline unsigned int ucast(float x)
{
static const unsigned int max = 0xFFFFFFFF >> (32 - n);
static const float maxf = static_cast<float>(max);
if(x >= maxf)
{
return max;
}
else if(x <= 0.0f)
{
return 0;
}
else
{
return static_cast<unsigned int>(x + 0.5f);
}
}
template<const int n>
inline int scast(float x)
{
static const unsigned int min = 0x80000000 >> (32 - n);
static const unsigned int max = 0xFFFFFFFF >> (32 - n + 1);
static const float maxf = static_cast<float>(max);
static const unsigned int range = 0xFFFFFFFF >> (32 - n);
if(x > 0.0f)
{
if(x >= maxf)
{
return max;
}
else
{
return static_cast<int>(maxf * x + 0.5f);
}
}
else
{
if(x <= -1.0f)
{
return min;
}
else
{
return static_cast<int>(maxf * x - 0.5f) & range;
}
}
}
......
......@@ -66,9 +66,30 @@ namespace sw
case FORMAT_A8:
*(unsigned char*)element = unorm<8>(color.a);
break;
case FORMAT_R8I_SNORM:
*(char*)element = snorm<8>(color.r);
break;
case FORMAT_R8:
*(unsigned char*)element = unorm<8>(color.r);
break;
case FORMAT_R8I:
*(char*)element = scast<8>(color.r);
break;
case FORMAT_R8UI:
*(unsigned char*)element = ucast<8>(color.r);
break;
case FORMAT_R16I:
*(short*)element = scast<16>(color.r);
break;
case FORMAT_R16UI:
*(unsigned short*)element = ucast<16>(color.r);
break;
case FORMAT_R32I:
*(int*)element = static_cast<int>(color.r);
break;
case FORMAT_R32UI:
*(unsigned int*)element = static_cast<unsigned int>(color.r);
break;
case FORMAT_R3G3B2:
*(unsigned char*)element = (unorm<3>(color.r) << 5) | (unorm<3>(color.g) << 2) | (unorm<2>(color.b) << 0);
break;
......@@ -102,30 +123,117 @@ namespace sw
case FORMAT_X8R8G8B8:
*(unsigned int*)element = 0xFF000000 | (unorm<8>(color.r) << 16) | (unorm<8>(color.g) << 8) | (unorm<8>(color.b) << 0);
break;
case FORMAT_A8B8G8R8I_SNORM:
*(unsigned int*)element = (static_cast<unsigned int>(snorm<8>(color.a)) << 24) |
(static_cast<unsigned int>(snorm<8>(color.b)) << 16) |
(static_cast<unsigned int>(snorm<8>(color.g)) << 8) |
(static_cast<unsigned int>(snorm<8>(color.r)) << 0);
break;
case FORMAT_A8B8G8R8:
*(unsigned int*)element = (unorm<8>(color.a) << 24) | (unorm<8>(color.b) << 16) | (unorm<8>(color.g) << 8) | (unorm<8>(color.r) << 0);
break;
case FORMAT_A8B8G8R8I:
*(unsigned int*)element = (static_cast<unsigned int>(scast<8>(color.a)) << 24) |
(static_cast<unsigned int>(scast<8>(color.b)) << 16) |
(static_cast<unsigned int>(scast<8>(color.g)) << 8) |
(static_cast<unsigned int>(scast<8>(color.r)) << 0);
break;
case FORMAT_A8B8G8R8UI:
*(unsigned int*)element = (ucast<8>(color.a) << 24) | (ucast<8>(color.b) << 16) | (ucast<8>(color.g) << 8) | (ucast<8>(color.r) << 0);
break;
case FORMAT_X8B8G8R8I_SNORM:
*(unsigned int*)element = 0x7F000000 |
(static_cast<unsigned int>(snorm<8>(color.b)) << 16) |
(static_cast<unsigned int>(snorm<8>(color.g)) << 8) |
(static_cast<unsigned int>(snorm<8>(color.r)) << 0);
break;
case FORMAT_X8B8G8R8:
*(unsigned int*)element = 0xFF000000 | (unorm<8>(color.b) << 16) | (unorm<8>(color.g) << 8) | (unorm<8>(color.r) << 0);
break;
case FORMAT_X8B8G8R8I:
*(unsigned int*)element = 0x7F000000 |
(static_cast<unsigned int>(scast<8>(color.b)) << 16) |
(static_cast<unsigned int>(scast<8>(color.g)) << 8) |
(static_cast<unsigned int>(scast<8>(color.r)) << 0);
case FORMAT_X8B8G8R8UI:
*(unsigned int*)element = 0xFF000000 | (ucast<8>(color.b) << 16) | (ucast<8>(color.g) << 8) | (ucast<8>(color.r) << 0);
break;
case FORMAT_A2R10G10B10:
*(unsigned int*)element = (unorm<2>(color.a) << 30) | (unorm<10>(color.r) << 20) | (unorm<10>(color.g) << 10) | (unorm<10>(color.b) << 0);
break;
case FORMAT_A2B10G10R10:
*(unsigned int*)element = (unorm<2>(color.a) << 30) | (unorm<10>(color.b) << 20) | (unorm<10>(color.g) << 10) | (unorm<10>(color.r) << 0);
break;
case FORMAT_G8R8I_SNORM:
*(unsigned short*)element = (static_cast<unsigned short>(snorm<8>(color.g)) << 8) |
(static_cast<unsigned short>(snorm<8>(color.r)) << 0);
break;
case FORMAT_G8R8:
*(unsigned int*)element = (unorm<8>(color.g) << 8) | (unorm<8>(color.r) << 0);
*(unsigned short*)element = (unorm<8>(color.g) << 8) | (unorm<8>(color.r) << 0);
break;
case FORMAT_G8R8I:
*(unsigned short*)element = (static_cast<unsigned short>(scast<8>(color.g)) << 8) |
(static_cast<unsigned short>(scast<8>(color.r)) << 0);
break;
case FORMAT_G8R8UI:
*(unsigned short*)element = (ucast<8>(color.g) << 8) | (ucast<8>(color.r) << 0);
break;
case FORMAT_G16R16:
*(unsigned int*)element = (unorm<16>(color.g) << 16) | (unorm<16>(color.r) << 0);
break;
case FORMAT_G16R16I:
*(unsigned int*)element = (static_cast<unsigned int>(scast<16>(color.g)) << 16) |
(static_cast<unsigned int>(scast<16>(color.r)) << 0);
break;
case FORMAT_G16R16UI:
*(unsigned int*)element = (ucast<16>(color.g) << 16) | (ucast<16>(color.r) << 0);
break;
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
((unsigned int*)element)[0] = static_cast<unsigned int>(color.r);
((unsigned int*)element)[1] = static_cast<unsigned int>(color.g);
break;
case FORMAT_A16B16G16R16:
((unsigned short*)element)[0] = unorm<16>(color.r);
((unsigned short*)element)[1] = unorm<16>(color.g);
((unsigned short*)element)[2] = unorm<16>(color.b);
((unsigned short*)element)[3] = unorm<16>(color.a);
break;
case FORMAT_A16B16G16R16I:
((unsigned short*)element)[0] = static_cast<unsigned short>(scast<16>(color.r));
((unsigned short*)element)[1] = static_cast<unsigned short>(scast<16>(color.g));
((unsigned short*)element)[2] = static_cast<unsigned short>(scast<16>(color.b));
((unsigned short*)element)[3] = static_cast<unsigned short>(scast<16>(color.a));
break;
case FORMAT_A16B16G16R16UI:
((unsigned short*)element)[0] = static_cast<unsigned short>(ucast<16>(color.r));
((unsigned short*)element)[1] = static_cast<unsigned short>(ucast<16>(color.g));
((unsigned short*)element)[2] = static_cast<unsigned short>(ucast<16>(color.b));
((unsigned short*)element)[3] = static_cast<unsigned short>(ucast<16>(color.a));
break;
case FORMAT_X16B16G16R16I:
((unsigned short*)element)[0] = static_cast<unsigned short>(scast<16>(color.r));
((unsigned short*)element)[1] = static_cast<unsigned short>(scast<16>(color.g));
((unsigned short*)element)[2] = static_cast<unsigned short>(scast<16>(color.b));
break;
case FORMAT_X16B16G16R16UI:
((unsigned short*)element)[0] = static_cast<unsigned short>(ucast<16>(color.r));
((unsigned short*)element)[1] = static_cast<unsigned short>(ucast<16>(color.g));
((unsigned short*)element)[2] = static_cast<unsigned short>(ucast<16>(color.b));
break;
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
((unsigned int*)element)[0] = static_cast<unsigned int>(color.r);
((unsigned int*)element)[1] = static_cast<unsigned int>(color.g);
((unsigned int*)element)[2] = static_cast<unsigned int>(color.b);
((unsigned int*)element)[3] = static_cast<unsigned int>(color.a);
break;
case FORMAT_X32B32G32R32I:
case FORMAT_X32B32G32R32UI:
((unsigned int*)element)[0] = static_cast<unsigned int>(color.r);
((unsigned int*)element)[1] = static_cast<unsigned int>(color.g);
((unsigned int*)element)[2] = static_cast<unsigned int>(color.b);
break;
case FORMAT_V8U8:
*(unsigned short*)element = (snorm<8>(color.g) << 8) | (snorm<8>(color.r) << 0);
break;
......@@ -304,9 +412,18 @@ namespace sw
b = 0;
a = *(unsigned char*)element * (1.0f / 0xFF);
break;
case FORMAT_R8I_SNORM:
r = max((*(signed char*)element) * (1.0f / 0x7F), -1.0f);
break;
case FORMAT_R8:
r = *(unsigned char*)element * (1.0f / 0xFF);
break;
case FORMAT_R8I:
r = *(signed char*)element;
break;
case FORMAT_R8UI:
r = *(unsigned char*)element;
break;
case FORMAT_R3G3B2:
{
unsigned char rgb = *(unsigned char*)element;
......@@ -412,6 +529,16 @@ namespace sw
b = (xrgb & 0x000000FF) * (1.0f / 0x000000FF);
}
break;
case FORMAT_A8B8G8R8I_SNORM:
{
signed char* abgr = (signed char*)element;
r = max(abgr[0] * (1.0f / 0x7F), -1.0f);
g = max(abgr[1] * (1.0f / 0x7F), -1.0f);
b = max(abgr[2] * (1.0f / 0x7F), -1.0f);
a = max(abgr[3] * (1.0f / 0x7F), -1.0f);
}
break;
case FORMAT_A8B8G8R8:
{
unsigned int abgr = *(unsigned int*)element;
......@@ -422,6 +549,35 @@ namespace sw
r = (abgr & 0x000000FF) * (1.0f / 0x000000FF);
}
break;
case FORMAT_A8B8G8R8I:
{
signed char* abgr = (signed char*)element;
r = abgr[0];
g = abgr[1];
b = abgr[2];
a = abgr[3];
}
break;
case FORMAT_A8B8G8R8UI:
{
unsigned char* abgr = (unsigned char*)element;
r = abgr[0];
g = abgr[1];
b = abgr[2];
a = abgr[3];
}
break;
case FORMAT_X8B8G8R8I_SNORM:
{
signed char* bgr = (signed char*)element;
r = max(bgr[0] * (1.0f / 0x7F), -1.0f);
g = max(bgr[1] * (1.0f / 0x7F), -1.0f);
b = max(bgr[2] * (1.0f / 0x7F), -1.0f);
}
break;
case FORMAT_X8B8G8R8:
{
unsigned int xbgr = *(unsigned int*)element;
......@@ -431,6 +587,32 @@ namespace sw
r = (xbgr & 0x000000FF) * (1.0f / 0x000000FF);
}
break;
case FORMAT_X8B8G8R8I:
{
signed char* bgr = (signed char*)element;
r = bgr[0];
g = bgr[1];
b = bgr[2];
}
break;
case FORMAT_X8B8G8R8UI:
{
unsigned char* bgr = (unsigned char*)element;
r = bgr[0];
g = bgr[1];
b = bgr[2];
}
break;
case FORMAT_G8R8I_SNORM:
{
signed char* gr = (signed char*)element;
r = (gr[0] & 0xFF00) * (1.0f / 0xFF00);
g = (gr[1] & 0x00FF) * (1.0f / 0x00FF);
}
break;
case FORMAT_G8R8:
{
unsigned short gr = *(unsigned short*)element;
......@@ -439,6 +621,36 @@ namespace sw
r = (gr & 0x00FF) * (1.0f / 0x00FF);
}
break;
case FORMAT_G8R8I:
{
signed char* gr = (signed char*)element;
r = gr[0];
g = gr[1];
}
break;
case FORMAT_G8R8UI:
{
unsigned char* gr = (unsigned char*)element;
r = gr[0];
g = gr[1];
}
break;
case FORMAT_R16I:
r = *((short*)element);
break;
case FORMAT_R16UI:
r = *((unsigned short*)element);
break;
case FORMAT_G16R16I:
{
short* gr = (short*)element;
r = gr[0];
g = gr[1];
}
break;
case FORMAT_G16R16:
{
unsigned int gr = *(unsigned int*)element;
......@@ -447,6 +659,14 @@ namespace sw
r = (gr & 0x0000FFFF) * (1.0f / 0x0000FFFF);
}
break;
case FORMAT_G16R16UI:
{
unsigned short* gr = (unsigned short*)element;
r = gr[0];
g = gr[1];
}
break;
case FORMAT_A2R10G10B10:
{
unsigned int argb = *(unsigned int*)element;
......@@ -467,12 +687,110 @@ namespace sw
r = (abgr & 0x000003FF) * (1.0f / 0x000003FF);
}
break;
case FORMAT_A16B16G16R16I:
{
short* abgr = (short*)element;
r = abgr[0];
g = abgr[1];
b = abgr[2];
a = abgr[3];
}
break;
case FORMAT_A16B16G16R16:
r = ((unsigned short*)element)[0] * (1.0f / 0xFFFF);
g = ((unsigned short*)element)[1] * (1.0f / 0xFFFF);
b = ((unsigned short*)element)[2] * (1.0f / 0xFFFF);
a = ((unsigned short*)element)[3] * (1.0f / 0xFFFF);
break;
case FORMAT_A16B16G16R16UI:
{
unsigned short* abgr = (unsigned short*)element;
r = abgr[0];
g = abgr[1];
b = abgr[2];
a = abgr[3];
}
break;
case FORMAT_X16B16G16R16I:
{
short* bgr = (short*)element;
r = bgr[0];
g = bgr[1];
b = bgr[2];
}
break;
case FORMAT_X16B16G16R16UI:
{
unsigned short* bgr = (unsigned short*)element;
r = bgr[0];
g = bgr[1];
b = bgr[2];
}
break;
case FORMAT_A32B32G32R32I:
{
int* abgr = (int*)element;
r = static_cast<float>(abgr[0]);
g = static_cast<float>(abgr[1]);
b = static_cast<float>(abgr[2]);
a = static_cast<float>(abgr[3]);
}
break;
case FORMAT_A32B32G32R32UI:
{
unsigned int* abgr = (unsigned int*)element;
r = static_cast<float>(abgr[0]);
g = static_cast<float>(abgr[1]);
b = static_cast<float>(abgr[2]);
a = static_cast<float>(abgr[3]);
}
break;
case FORMAT_X32B32G32R32I:
{
int* bgr = (int*)element;
r = static_cast<float>(bgr[0]);
g = static_cast<float>(bgr[1]);
b = static_cast<float>(bgr[2]);
}
break;
case FORMAT_X32B32G32R32UI:
{
unsigned int* bgr = (unsigned int*)element;
r = static_cast<float>(bgr[0]);
g = static_cast<float>(bgr[1]);
b = static_cast<float>(bgr[2]);
}
break;
case FORMAT_G32R32I:
{
int* gr = (int*)element;
r = static_cast<float>(gr[0]);
g = static_cast<float>(gr[1]);
}
break;
case FORMAT_G32R32UI:
{
unsigned int* gr = (unsigned int*)element;
r = static_cast<float>(gr[0]);
g = static_cast<float>(gr[1]);
}
break;
case FORMAT_R32I:
r = static_cast<float>(*((int*)element));
break;
case FORMAT_R32UI:
r = static_cast<float>(*((unsigned int*)element));
break;
case FORMAT_V8U8:
{
unsigned short vu = *(unsigned short*)element;
......@@ -1125,8 +1443,11 @@ namespace sw
case FORMAT_P8: return 1;
case FORMAT_A8P8: return 2;
case FORMAT_A8: return 1;
case FORMAT_R8I: return 1;
case FORMAT_R8: return 1;
case FORMAT_R3G3B2: return 1;
case FORMAT_R16I: return 2;
case FORMAT_R16UI: return 2;
case FORMAT_A8R3G3B2: return 2;
case FORMAT_R5G6B5: return 2;
case FORMAT_A1R5G5B5: return 2;
......@@ -1137,17 +1458,42 @@ namespace sw
case FORMAT_R4G4B4A4: return 2;
case FORMAT_R8G8B8: return 3;
case FORMAT_B8G8R8: return 3;
case FORMAT_R32I: return 4;
case FORMAT_R32UI: return 4;
case FORMAT_X8R8G8B8: return 4;
// case FORMAT_X8G8R8B8Q: return 4;
case FORMAT_A8R8G8B8: return 4;
// case FORMAT_A8G8R8B8Q: return 4;
case FORMAT_X8B8G8R8I: return 4;
case FORMAT_X8B8G8R8: return 4;
case FORMAT_A8B8G8R8I: return 4;
case FORMAT_R8UI: return 1;
case FORMAT_G8R8UI: return 2;
case FORMAT_X8B8G8R8UI: return 4;
case FORMAT_A8B8G8R8UI: return 4;
case FORMAT_A8B8G8R8: return 4;
case FORMAT_R8I_SNORM: return 1;
case FORMAT_G8R8I_SNORM: return 2;
case FORMAT_X8B8G8R8I_SNORM: return 4;
case FORMAT_A8B8G8R8I_SNORM: return 4;
case FORMAT_A2R10G10B10: return 4;
case FORMAT_A2B10G10R10: return 4;
case FORMAT_G8R8I: return 2;
case FORMAT_G8R8: return 2;
case FORMAT_G16R16I: return 4;
case FORMAT_G16R16UI: return 4;
case FORMAT_G16R16: return 4;
case FORMAT_G32R32I: return 8;
case FORMAT_G32R32UI: return 8;
case FORMAT_X16B16G16R16I: return 8;
case FORMAT_X16B16G16R16UI: return 8;
case FORMAT_A16B16G16R16I: return 8;
case FORMAT_A16B16G16R16UI: return 8;
case FORMAT_A16B16G16R16: return 8;
case FORMAT_X32B32G32R32I: return 16;
case FORMAT_X32B32G32R32UI: return 16;
case FORMAT_A32B32G32R32I: return 16;
case FORMAT_A32B32G32R32UI: return 16;
// Compressed formats
#if S3TC_SUPPORT
case FORMAT_DXT1: return 2; // Column of four pixels
......@@ -2370,8 +2716,20 @@ namespace sw
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
case FORMAT_G8R8:
case FORMAT_R16UI:
case FORMAT_G16R16:
case FORMAT_G16R16UI:
case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16:
case FORMAT_A16B16G16R16UI:
case FORMAT_R32UI:
case FORMAT_G32R32UI:
case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32UI:
case FORMAT_R8UI:
case FORMAT_G8R8UI:
case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8UI:
case FORMAT_D32F:
case FORMAT_D32F_COMPLEMENTARY:
case FORMAT_D32F_LOCKABLE:
......@@ -2386,49 +2744,35 @@ namespace sw
case FORMAT_YV12_BT709:
case FORMAT_YV12_JFIF:
return true;
case FORMAT_V8U8:
case FORMAT_X8L8V8U8:
case FORMAT_V16U16:
if(component < 2)
{
return false;
}
else
{
return true;
}
case FORMAT_A16W16V16U16:
if(component < 3)
{
return false;
}
else
{
return true;
}
case FORMAT_A8B8G8R8I:
case FORMAT_A16B16G16R16I:
case FORMAT_A32B32G32R32I:
case FORMAT_A8B8G8R8I_SNORM:
case FORMAT_Q8W8V8U8:
case FORMAT_Q16W16V16U16:
case FORMAT_A32B32G32R32F:
return false;
case FORMAT_R32F:
if(component < 1)
{
return false;
}
else
{
return true;
}
case FORMAT_R8I:
case FORMAT_R16I:
case FORMAT_R32I:
case FORMAT_R8I_SNORM:
return component >= 1;
case FORMAT_V8U8:
case FORMAT_X8L8V8U8:
case FORMAT_V16U16:
case FORMAT_G32R32F:
if(component < 2)
{
return false;
}
else
{
return true;
}
case FORMAT_A32B32G32R32F:
return false;
case FORMAT_G8R8I:
case FORMAT_G16R16I:
case FORMAT_G32R32I:
case FORMAT_G8R8I_SNORM:
return component >= 2;
case FORMAT_A16W16V16U16:
case FORMAT_X8B8G8R8I:
case FORMAT_X16B16G16R16I:
case FORMAT_X32B32G32R32I:
case FORMAT_X8B8G8R8I_SNORM:
return component >= 3;
default:
ASSERT(false);
}
......@@ -2580,12 +2924,35 @@ namespace sw
{
case FORMAT_R5G6B5: return 3;
case FORMAT_X8R8G8B8: return 3;
case FORMAT_X8B8G8R8I: return 3;
case FORMAT_X8B8G8R8: return 3;
case FORMAT_A8R8G8B8: return 4;
case FORMAT_A8B8G8R8I: return 4;
case FORMAT_A8B8G8R8: return 4;
case FORMAT_G8R8I: return 2;
case FORMAT_G8R8: return 2;
case FORMAT_R8I_SNORM: return 1;
case FORMAT_G8R8I_SNORM: return 2;
case FORMAT_X8B8G8R8I_SNORM:return 3;
case FORMAT_A8B8G8R8I_SNORM:return 4;
case FORMAT_R8UI: return 1;
case FORMAT_G8R8UI: return 2;
case FORMAT_X8B8G8R8UI: return 3;
case FORMAT_A8B8G8R8UI: return 4;
case FORMAT_G16R16I: return 2;
case FORMAT_G16R16UI: return 2;
case FORMAT_G16R16: return 2;
case FORMAT_G32R32I: return 2;
case FORMAT_G32R32UI: return 2;
case FORMAT_X16B16G16R16I: return 3;
case FORMAT_X16B16G16R16UI: return 3;
case FORMAT_A16B16G16R16I: return 4;
case FORMAT_A16B16G16R16UI: return 4;
case FORMAT_A16B16G16R16: return 4;
case FORMAT_X32B32G32R32I: return 3;
case FORMAT_X32B32G32R32UI: return 3;
case FORMAT_A32B32G32R32I: return 4;
case FORMAT_A32B32G32R32UI: return 4;
case FORMAT_V8U8: return 2;
case FORMAT_Q8W8V8U8: return 4;
case FORMAT_X8L8V8U8: return 3;
......@@ -2595,11 +2962,17 @@ namespace sw
case FORMAT_R32F: return 1;
case FORMAT_G32R32F: return 2;
case FORMAT_A32B32G32R32F: return 4;
case FORMAT_D32F: return 1;
case FORMAT_D32F_LOCKABLE: return 1;
case FORMAT_D32FS8_TEXTURE: return 1;
case FORMAT_D32FS8_SHADOW: return 1;
case FORMAT_A8: return 1;
case FORMAT_R8I: return 1;
case FORMAT_R8: return 1;
case FORMAT_R16I: return 1;
case FORMAT_R16UI: return 1;
case FORMAT_R32I: return 1;
case FORMAT_R32UI: return 1;
case FORMAT_L8: return 1;
case FORMAT_L16: return 1;
case FORMAT_A8L8: return 2;
......@@ -3457,16 +3830,56 @@ namespace sw
return FORMAT_A8R8G8B8;
case FORMAT_A8:
return FORMAT_A8;
case FORMAT_R8I:
return FORMAT_R8I;
case FORMAT_R8UI:
return FORMAT_R8UI;
case FORMAT_R8I_SNORM:
return FORMAT_R8I_SNORM;
case FORMAT_R8:
return FORMAT_R8;
case FORMAT_R16I:
return FORMAT_R16I;
case FORMAT_R16UI:
return FORMAT_R16UI;
case FORMAT_R32I:
return FORMAT_R32I;
case FORMAT_R32UI:
return FORMAT_R32UI;
case FORMAT_A2R10G10B10:
case FORMAT_A2B10G10R10:
case FORMAT_X16B16G16R16I:
case FORMAT_A16B16G16R16I:
return FORMAT_A16B16G16R16I;
case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16UI:
return FORMAT_A16B16G16R16UI;
case FORMAT_A16B16G16R16:
return FORMAT_A16B16G16R16;
case FORMAT_X32B32G32R32I:
case FORMAT_A32B32G32R32I:
return FORMAT_A32B32G32R32I;
case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32UI:
return FORMAT_A32B32G32R32UI;
case FORMAT_G8R8I:
return FORMAT_G8R8I;
case FORMAT_G8R8UI:
return FORMAT_G8R8UI;
case FORMAT_G8R8I_SNORM:
return FORMAT_G8R8I_SNORM;
case FORMAT_G8R8:
return FORMAT_G8R8;
case FORMAT_G16R16I:
return FORMAT_G16R16I;
case FORMAT_G16R16UI:
return FORMAT_G16R16UI;
case FORMAT_G16R16:
return FORMAT_G16R16;
case FORMAT_G32R32I:
return FORMAT_G32R32I;
case FORMAT_G32R32UI:
return FORMAT_G32R32UI;
case FORMAT_A8R8G8B8:
if(lockable || !quadLayoutEnabled)
{
......@@ -3476,6 +3889,12 @@ namespace sw
{
return FORMAT_A8G8R8B8Q;
}
case FORMAT_A8B8G8R8I:
return FORMAT_A8B8G8R8I;
case FORMAT_A8B8G8R8UI:
return FORMAT_A8B8G8R8UI;
case FORMAT_A8B8G8R8I_SNORM:
return FORMAT_A8B8G8R8I_SNORM;
case FORMAT_R5G5B5A1:
case FORMAT_R4G4B4A4:
case FORMAT_A8B8G8R8:
......@@ -3495,6 +3914,12 @@ namespace sw
{
return FORMAT_X8G8R8B8Q;
}
case FORMAT_X8B8G8R8I:
return FORMAT_X8B8G8R8I;
case FORMAT_X8B8G8R8UI:
return FORMAT_X8B8G8R8UI;
case FORMAT_X8B8G8R8I_SNORM:
return FORMAT_X8B8G8R8I_SNORM;
case FORMAT_B8G8R8:
case FORMAT_X8B8G8R8:
return FORMAT_X8B8G8R8;
......@@ -3599,6 +4024,7 @@ namespace sw
{
return FORMAT_D32F;
}
case FORMAT_D32F: return FORMAT_D32F;
case FORMAT_D32F_LOCKABLE: return FORMAT_D32F_LOCKABLE;
case FORMAT_D32FS8_TEXTURE: return FORMAT_D32FS8_TEXTURE;
case FORMAT_INTZ: return FORMAT_D32FS8_TEXTURE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment