Mesa (master): Mesa: Add support for HALF_FLOAT_OES type.
Tapani Pälli
tpalli at kemper.freedesktop.org
Thu Jan 29 06:27:57 UTC 2015
Module: Mesa
Branch: master
Commit: 2c2a92d5b87f669da9fa88fdd094304fcf1eb09a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2c2a92d5b87f669da9fa88fdd094304fcf1eb09a
Author: Kalyan Kondapally <kondapallykalyancontribute at gmail.com>
Date: Tue Jan 27 09:23:00 2015 +0200
Mesa: Add support for HALF_FLOAT_OES type.
This patch adds needed support for accepting HALF_FLOAT_OES as valid type
for TexImage*D and TexSubImage*D when Texture FLoat extensions are supported.
Signed-off-by: Kevin Rogovin <kevin.rogovin at intel.com>
Signed-off-by: Kalyan Kondapally <kalyan.kondapally at intel.com>
Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
---
src/mesa/main/glformats.c | 47 +++++++++++++++++++++++++++++++++++++++++----
src/mesa/main/glformats.h | 3 ++-
src/mesa/main/pack.c | 6 ++++++
src/mesa/main/teximage.c | 2 +-
4 files changed, 52 insertions(+), 6 deletions(-)
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index ff15383..4e05229 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -291,6 +291,7 @@ _mesa_sizeof_type(GLenum type)
case GL_DOUBLE:
return sizeof(GLdouble);
case GL_HALF_FLOAT_ARB:
+ case GL_HALF_FLOAT_OES:
return sizeof(GLhalfARB);
case GL_FIXED:
return sizeof(GLfixed);
@@ -323,6 +324,7 @@ _mesa_sizeof_packed_type(GLenum type)
case GL_INT:
return sizeof(GLint);
case GL_HALF_FLOAT_ARB:
+ case GL_HALF_FLOAT_OES:
return sizeof(GLhalfARB);
case GL_FLOAT:
return sizeof(GLfloat);
@@ -439,6 +441,7 @@ _mesa_bytes_per_pixel(GLenum format, GLenum type)
case GL_FLOAT:
return comps * sizeof(GLfloat);
case GL_HALF_FLOAT_ARB:
+ case GL_HALF_FLOAT_OES:
return comps * sizeof(GLhalfARB);
case GL_UNSIGNED_BYTE_3_3_2:
case GL_UNSIGNED_BYTE_2_3_3_REV:
@@ -1667,6 +1670,18 @@ _mesa_error_check_format_and_type(const struct gl_context *ctx,
}
return GL_NO_ERROR;
+ case GL_HALF_FLOAT_OES:
+ switch (format) {
+ case GL_RGBA:
+ case GL_RGB:
+ case GL_LUMINANCE_ALPHA:
+ case GL_LUMINANCE:
+ case GL_ALPHA:
+ return GL_NO_ERROR;
+ default:
+ return GL_INVALID_OPERATION;
+ }
+
default:
; /* fall-through */
}
@@ -2019,7 +2034,8 @@ _mesa_es_error_check_format_and_type(GLenum format, GLenum type,
* \return error code, or GL_NO_ERROR.
*/
GLenum
-_mesa_es3_error_check_format_and_type(GLenum format, GLenum type,
+_mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
+ GLenum format, GLenum type,
GLenum internalFormat)
{
switch (format) {
@@ -2084,11 +2100,17 @@ _mesa_es3_error_check_format_and_type(GLenum format, GLenum type,
case GL_RGBA16F:
case GL_RGBA32F:
break;
+ case GL_RGBA:
+ if (ctx->Extensions.OES_texture_float && internalFormat == format)
+ break;
default:
return GL_INVALID_OPERATION;
}
break;
+ case GL_HALF_FLOAT_OES:
+ if (ctx->Extensions.OES_texture_half_float && internalFormat == format)
+ break;
default:
return GL_INVALID_OPERATION;
}
@@ -2193,11 +2215,19 @@ _mesa_es3_error_check_format_and_type(GLenum format, GLenum type,
case GL_R11F_G11F_B10F:
case GL_RGB9_E5:
break;
+ case GL_RGB:
+ if (ctx->Extensions.OES_texture_float && internalFormat == format)
+ break;
default:
return GL_INVALID_OPERATION;
}
break;
+ case GL_HALF_FLOAT_OES:
+ if (!ctx->Extensions.OES_texture_half_float || internalFormat != format)
+ return GL_INVALID_OPERATION;
+ break;
+
case GL_UNSIGNED_INT_2_10_10_10_REV:
switch (internalFormat) {
case GL_RGB: /* GL_EXT_texture_type_2_10_10_10_REV */
@@ -2437,9 +2467,17 @@ _mesa_es3_error_check_format_and_type(GLenum format, GLenum type,
case GL_ALPHA:
case GL_LUMINANCE:
case GL_LUMINANCE_ALPHA:
- if (type != GL_UNSIGNED_BYTE || format != internalFormat)
- return GL_INVALID_OPERATION;
- break;
+ switch (type) {
+ case GL_FLOAT:
+ if (ctx->Extensions.OES_texture_float && internalFormat == format)
+ break;
+ case GL_HALF_FLOAT_OES:
+ if (ctx->Extensions.OES_texture_half_float && internalFormat == format)
+ break;
+ default:
+ if (type != GL_UNSIGNED_BYTE || format != internalFormat)
+ return GL_INVALID_OPERATION;
+ }
}
return GL_NO_ERROR;
@@ -2563,6 +2601,7 @@ _mesa_format_from_format_and_type(GLenum format, GLenum type)
is_signed = true;
break;
case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES:
type_size = 2;
is_signed = true;
is_float = true;
diff --git a/src/mesa/main/glformats.h b/src/mesa/main/glformats.h
index f77edfa..e1ecd64 100644
--- a/src/mesa/main/glformats.h
+++ b/src/mesa/main/glformats.h
@@ -125,7 +125,8 @@ _mesa_es_error_check_format_and_type(GLenum format, GLenum type,
unsigned dimensions);
extern GLenum
-_mesa_es3_error_check_format_and_type(GLenum format, GLenum type,
+_mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
+ GLenum format, GLenum type,
GLenum internalFormat);
extern uint32_t
diff --git a/src/mesa/main/pack.c b/src/mesa/main/pack.c
index d1f368c..4cc8468 100644
--- a/src/mesa/main/pack.c
+++ b/src/mesa/main/pack.c
@@ -268,6 +268,7 @@ extract_uint_indexes(GLuint n, GLuint indexes[],
srcType == GL_INT ||
srcType == GL_UNSIGNED_INT_24_8_EXT ||
srcType == GL_HALF_FLOAT_ARB ||
+ srcType == GL_HALF_FLOAT_OES ||
srcType == GL_FLOAT ||
srcType == GL_FLOAT_32_UNSIGNED_INT_24_8_REV);
@@ -407,6 +408,7 @@ extract_uint_indexes(GLuint n, GLuint indexes[],
}
break;
case GL_HALF_FLOAT_ARB:
+ case GL_HALF_FLOAT_OES:
{
GLuint i;
const GLhalfARB *s = (const GLhalfARB *) src;
@@ -510,6 +512,7 @@ _mesa_unpack_stencil_span( struct gl_context *ctx, GLuint n,
srcType == GL_INT ||
srcType == GL_UNSIGNED_INT_24_8_EXT ||
srcType == GL_HALF_FLOAT_ARB ||
+ srcType == GL_HALF_FLOAT_OES ||
srcType == GL_FLOAT ||
srcType == GL_FLOAT_32_UNSIGNED_INT_24_8_REV);
@@ -700,6 +703,7 @@ _mesa_pack_stencil_span( struct gl_context *ctx, GLuint n,
}
break;
case GL_HALF_FLOAT_ARB:
+ case GL_HALF_FLOAT_OES:
{
GLhalfARB *dst = (GLhalfARB *) dest;
GLuint i;
@@ -917,6 +921,7 @@ _mesa_unpack_depth_span( struct gl_context *ctx, GLuint n,
needClamp = GL_TRUE;
break;
case GL_HALF_FLOAT_ARB:
+ case GL_HALF_FLOAT_OES:
{
GLuint i;
const GLhalfARB *src = (const GLhalfARB *) source;
@@ -1106,6 +1111,7 @@ _mesa_pack_depth_span( struct gl_context *ctx, GLuint n, GLvoid *dest,
}
break;
case GL_HALF_FLOAT_ARB:
+ case GL_HALF_FLOAT_OES:
{
GLhalfARB *dst = (GLhalfARB *) dest;
GLuint i;
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index ed08ddb..03264dd 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -2120,7 +2120,7 @@ texture_error_check( struct gl_context *ctx,
if (_mesa_is_gles(ctx)) {
if (_mesa_is_gles3(ctx)) {
- err = _mesa_es3_error_check_format_and_type(format, type,
+ err = _mesa_es3_error_check_format_and_type(ctx, format, type,
internalFormat);
} else {
if (format != internalFormat) {
More information about the mesa-commit
mailing list