summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2015-07-30 02:48:37 +0100
committerEmil Velikov <[email protected]>2015-09-06 18:44:33 +0100
commit8fc2cbb00e08986b5962e6cbb13c3155a17b9f05 (patch)
treee3567a99941ce33ec3cf186df67ba67c249405b1 /src
parentb497b88dbe6001f11e3e12da1eac1595ab08a6f6 (diff)
mesa/formats: 8-bit channel integer formats addition
Add enough 8-bit channel formats to handle all the different things CTS throws at us. Cc: "11.0" <[email protected]> Reviewed-by: Brian Paul <[email protected]> Signed-off-by: Dave Airlie <[email protected]> (cherry picked from commit c3c242070e868225a81e1afe5fb424c33eb94c2f)
Diffstat (limited to 'src')
-rw-r--r--src/mesa/main/formats.c43
-rw-r--r--src/mesa/main/formats.csv4
-rw-r--r--src/mesa/main/formats.h5
-rw-r--r--src/mesa/main/glformats.c8
-rw-r--r--src/mesa/swrast/s_texfetch.c4
5 files changed, 64 insertions, 0 deletions
diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c
index 6bbc93aae5e..179ee163aa3 100644
--- a/src/mesa/main/formats.c
+++ b/src/mesa/main/formats.c
@@ -1013,6 +1013,10 @@ _mesa_format_to_type_and_comps(mesa_format format,
case MESA_FORMAT_R8G8B8X8_UNORM:
case MESA_FORMAT_B8G8R8X8_UNORM:
case MESA_FORMAT_X8R8G8B8_UNORM:
+ case MESA_FORMAT_A8B8G8R8_UINT:
+ case MESA_FORMAT_R8G8B8A8_UINT:
+ case MESA_FORMAT_B8G8R8A8_UINT:
+ case MESA_FORMAT_A8R8G8B8_UINT:
*datatype = GL_UNSIGNED_BYTE;
*comps = 4;
return;
@@ -2201,6 +2205,45 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
case MESA_FORMAT_R5G5B5A1_UINT:
return format == GL_RGBA_INTEGER && type == GL_UNSIGNED_SHORT_1_5_5_5_REV;
+ case MESA_FORMAT_A8B8G8R8_UINT:
+ if (format == GL_RGBA_INTEGER && type == GL_UNSIGNED_INT_8_8_8_8 && !swapBytes)
+ return GL_TRUE;
+
+ if (format == GL_RGBA_INTEGER && type == GL_UNSIGNED_INT_8_8_8_8_REV && swapBytes)
+ return GL_TRUE;
+ return GL_FALSE;
+
+ case MESA_FORMAT_A8R8G8B8_UINT:
+ if (format == GL_BGRA_INTEGER && type == GL_UNSIGNED_INT_8_8_8_8 &&
+ !swapBytes)
+ return GL_TRUE;
+
+ if (format == GL_BGRA_INTEGER && type == GL_UNSIGNED_INT_8_8_8_8_REV &&
+ swapBytes)
+ return GL_TRUE;
+
+ return GL_FALSE;
+
+ case MESA_FORMAT_R8G8B8A8_UINT:
+ if (format == GL_RGBA_INTEGER && type == GL_UNSIGNED_INT_8_8_8_8_REV &&
+ !swapBytes)
+ return GL_TRUE;
+
+ if (format == GL_RGBA_INTEGER && type == GL_UNSIGNED_INT_8_8_8_8 && swapBytes)
+ return GL_TRUE;
+
+ return GL_FALSE;
+
+ case MESA_FORMAT_B8G8R8A8_UINT:
+ if (format == GL_BGRA_INTEGER && type == GL_UNSIGNED_INT_8_8_8_8_REV &&
+ !swapBytes)
+ return GL_TRUE;
+
+ if (format == GL_BGRA_INTEGER && type == GL_UNSIGNED_INT_8_8_8_8 && swapBytes)
+ return GL_TRUE;
+
+ return GL_FALSE;
+
case MESA_FORMAT_R9G9B9E5_FLOAT:
return format == GL_RGB && type == GL_UNSIGNED_INT_5_9_9_9_REV &&
!swapBytes;
diff --git a/src/mesa/main/formats.csv b/src/mesa/main/formats.csv
index d30b0a9610c..3e70655aa4a 100644
--- a/src/mesa/main/formats.csv
+++ b/src/mesa/main/formats.csv
@@ -186,6 +186,10 @@ MESA_FORMAT_RGBX_FLOAT32 , array , 1, 1, f32 , f32 , f32 , x32
MESA_FORMAT_Z_FLOAT32 , array , 1, 1, f32 , , , , x___, zs
# Packed signed/unsigned non-normalized integer formats
+MESA_FORMAT_A8B8G8R8_UINT , packed, 1, 1, u8 , u8 , u8 , u8 , wzyx, rgb
+MESA_FORMAT_A8R8G8B8_UINT , packed, 1, 1, u8 , u8 , u8 , u8 , yzwx, rgb
+MESA_FORMAT_R8G8B8A8_UINT , packed, 1, 1, u8 , u8 , u8 , u8 , xyzw, rgb
+MESA_FORMAT_B8G8R8A8_UINT , packed, 1, 1, u8 , u8 , u8 , u8 , zyxw, rgb
MESA_FORMAT_B10G10R10A2_UINT , packed, 1, 1, u10 , u10 , u10 , u2 , zyxw, rgb
MESA_FORMAT_R10G10B10A2_UINT , packed, 1, 1, u10 , u10 , u10 , u2 , xyzw, rgb
MESA_FORMAT_A2B10G10R10_UINT , packed, 1, 1, u2 , u10 , u10 , u10 , wzyx, rgb
diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h
index ac03df707b8..3fb64965c08 100644
--- a/src/mesa/main/formats.h
+++ b/src/mesa/main/formats.h
@@ -470,6 +470,11 @@ typedef enum
MESA_FORMAT_Z_FLOAT32,
/* Packed signed/unsigned non-normalized integer formats */
+
+ MESA_FORMAT_A8B8G8R8_UINT, /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */
+ MESA_FORMAT_A8R8G8B8_UINT, /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */
+ MESA_FORMAT_R8G8B8A8_UINT, /* AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */
+ MESA_FORMAT_B8G8R8A8_UINT, /* AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB */
MESA_FORMAT_B10G10R10A2_UINT, /* AARR RRRR RRRR GGGG GGGG GGBB BBBB BBBB */
MESA_FORMAT_R10G10B10A2_UINT, /* AABB BBBB BBBB GGGG GGGG GGRR RRRR RRRR */
MESA_FORMAT_A2B10G10R10_UINT, /* RRRR RRRR RRGG GGGG GGGG BBBB BBBB BBAA */
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index 672532fa391..cef831ca9ec 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -2818,6 +2818,10 @@ _mesa_format_from_format_and_type(GLenum format, GLenum type)
return MESA_FORMAT_A8R8G8B8_UNORM;
else if (format == GL_ABGR_EXT)
return MESA_FORMAT_R8G8B8A8_UNORM;
+ else if (format == GL_RGBA_INTEGER)
+ return MESA_FORMAT_A8B8G8R8_UINT;
+ else if (format == GL_BGRA_INTEGER)
+ return MESA_FORMAT_A8R8G8B8_UINT;
break;
case GL_UNSIGNED_INT_8_8_8_8_REV:
if (format == GL_RGBA)
@@ -2826,6 +2830,10 @@ _mesa_format_from_format_and_type(GLenum format, GLenum type)
return MESA_FORMAT_B8G8R8A8_UNORM;
else if (format == GL_ABGR_EXT)
return MESA_FORMAT_A8B8G8R8_UNORM;
+ else if (format == GL_RGBA_INTEGER)
+ return MESA_FORMAT_R8G8B8A8_UINT;
+ else if (format == GL_BGRA_INTEGER)
+ return MESA_FORMAT_B8G8R8A8_UINT;
break;
case GL_UNSIGNED_SHORT_8_8_MESA:
if (format == GL_YCBCR_MESA)
diff --git a/src/mesa/swrast/s_texfetch.c b/src/mesa/swrast/s_texfetch.c
index 0bf19f959b5..99fff08d6f8 100644
--- a/src/mesa/swrast/s_texfetch.c
+++ b/src/mesa/swrast/s_texfetch.c
@@ -282,6 +282,10 @@ texfetch_funcs[] =
},
/* Packed signed/unsigned non-normalized integer formats */
+ FETCH_NULL(A8B8G8R8_UINT),
+ FETCH_NULL(A8R8G8B8_UINT),
+ FETCH_NULL(R8G8B8A8_UINT),
+ FETCH_NULL(B8G8R8A8_UINT),
FETCH_NULL(B10G10R10A2_UINT),
FETCH_NULL(R10G10B10A2_UINT),
FETCH_NULL(A2B10G10R10_UINT),