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/4114
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Common/Math.hpp b/src/Common/Math.hpp
index 4d0d06b..c58bb52 100644
--- a/src/Common/Math.hpp
+++ b/src/Common/Math.hpp
@@ -209,49 +209,103 @@
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;
}
}
}
diff --git a/src/Renderer/Surface.cpp b/src/Renderer/Surface.cpp
index 61fc9bc..74213f9 100644
--- a/src/Renderer/Surface.cpp
+++ b/src/Renderer/Surface.cpp
@@ -66,9 +66,30 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
case FORMAT_YV12_BT709:
case FORMAT_YV12_JFIF:
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:
+ 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:
- if(component < 2)
- {
- return false;
- }
- else
- {
- return true;
- }
- case FORMAT_A16W16V16U16:
- if(component < 3)
- {
- return false;
- }
- else
- {
- return true;
- }
- case FORMAT_Q8W8V8U8:
- case FORMAT_Q16W16V16U16:
- return false;
- case FORMAT_R32F:
- if(component < 1)
- {
- return false;
- }
- else
- {
- return true;
- }
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 @@
{
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 @@
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 @@
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 @@
{
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 @@
{
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 @@
{
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;