[Mesa-dev] [PATCH v2] mesa: add GL_RED, GL_RG support for floating point textures
Tapani Pälli
tapani.palli at intel.com
Mon Jun 8 23:53:42 PDT 2015
Mesa supports EXT_texture_rg and OES_texture_float. This patch adds
support for using unsized enums GL_RED and GL_RG for floating point
targets and writes proper checks for internalformat when format is
GL_RED or GL_RG and type is of GL_FLOAT or GL_HALF_FLOAT.
Later, internalformat will get adjusted by adjust_for_oes_float_texture
after these checks.
v2: simplify to check vs supported enums
Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90748
---
src/mesa/main/glformats.c | 43 +++++++++++++++++++++++++++++++++++--------
1 file changed, 35 insertions(+), 8 deletions(-)
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index 057a5d1..119956e 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -2295,20 +2295,32 @@ _mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
return GL_INVALID_OPERATION;
break;
+ case GL_HALF_FLOAT_OES:
case GL_HALF_FLOAT:
- if (internalFormat != GL_RG16F)
- return GL_INVALID_OPERATION;
- break;
+ switch (internalFormat) {
+ case GL_RG:
+ if (!ctx->Extensions.ARB_texture_rg ||
+ !ctx->Extensions.OES_texture_half_float)
+ break;
+ case GL_RG16F:
+ return GL_NO_ERROR;
+ }
+
+ return GL_INVALID_OPERATION;
case GL_FLOAT:
switch (internalFormat) {
+ case GL_RG:
+ if (!ctx->Extensions.ARB_texture_rg ||
+ !ctx->Extensions.OES_texture_float)
+ break;
case GL_RG16F:
case GL_RG32F:
+ return GL_NO_ERROR;
break;
default:
return GL_INVALID_OPERATION;
}
- break;
default:
return GL_INVALID_OPERATION;
@@ -2365,19 +2377,34 @@ _mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
break;
case GL_HALF_FLOAT:
- if (internalFormat != GL_R16F)
- return GL_INVALID_OPERATION;
- break;
+ case GL_HALF_FLOAT_OES:
+
+ switch (internalFormat) {
+ case GL_RG:
+ case GL_RED:
+ if (!ctx->Extensions.ARB_texture_rg ||
+ !ctx->Extensions.OES_texture_half_float)
+ break;
+ case GL_R16F:
+ return GL_NO_ERROR;
+ }
+
+ return GL_INVALID_OPERATION;
case GL_FLOAT:
+
switch (internalFormat) {
+ case GL_RED:
+ if (!ctx->Extensions.ARB_texture_rg ||
+ !ctx->Extensions.OES_texture_float)
+ break;
case GL_R16F:
case GL_R32F:
+ return GL_NO_ERROR;
break;
default:
return GL_INVALID_OPERATION;
}
- break;
default:
return GL_INVALID_OPERATION;
--
2.1.0
More information about the mesa-dev
mailing list