summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/context.h14
-rw-r--r--src/mesa/main/glformats.c39
2 files changed, 41 insertions, 12 deletions
diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h
index 071bd5b0818..cdda8cf2012 100644
--- a/src/mesa/main/context.h
+++ b/src/mesa/main/context.h
@@ -344,6 +344,20 @@ _mesa_has_integer_textures(const struct gl_context *ctx)
}
static inline bool
+_mesa_has_half_float_textures(const struct gl_context *ctx)
+{
+ return _mesa_has_ARB_texture_float(ctx) ||
+ _mesa_has_OES_texture_half_float(ctx) || _mesa_is_gles3(ctx);
+}
+
+static inline bool
+_mesa_has_float_textures(const struct gl_context *ctx)
+{
+ return _mesa_has_ARB_texture_float(ctx) ||
+ _mesa_has_OES_texture_float(ctx) || _mesa_is_gles3(ctx);
+ }
+
+static inline bool
_mesa_has_texture_rgb10_a2ui(const struct gl_context *ctx)
{
return _mesa_has_ARB_texture_rgb10_a2ui(ctx) || _mesa_is_gles3(ctx);
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index 4753465e50c..7506c238232 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -2386,28 +2386,37 @@ _mesa_base_tex_format(const struct gl_context *ctx, GLint internalFormat)
return GL_YCBCR_MESA;
}
- if (ctx->Extensions.ARB_texture_float) {
+ if (_mesa_has_half_float_textures(ctx)) {
switch (internalFormat) {
case GL_ALPHA16F_ARB:
- case GL_ALPHA32F_ARB:
return GL_ALPHA;
case GL_RGBA16F_ARB:
- case GL_RGBA32F_ARB:
return GL_RGBA;
case GL_RGB16F_ARB:
- case GL_RGB32F_ARB:
return GL_RGB;
case GL_INTENSITY16F_ARB:
- case GL_INTENSITY32F_ARB:
return GL_INTENSITY;
case GL_LUMINANCE16F_ARB:
- case GL_LUMINANCE32F_ARB:
return GL_LUMINANCE;
case GL_LUMINANCE_ALPHA16F_ARB:
+ return GL_LUMINANCE_ALPHA;
+ }
+ }
+
+ if (_mesa_has_float_textures(ctx)) {
+ switch (internalFormat) {
+ case GL_ALPHA32F_ARB:
+ return GL_ALPHA;
+ case GL_RGBA32F_ARB:
+ return GL_RGBA;
+ case GL_RGB32F_ARB:
+ return GL_RGB;
+ case GL_INTENSITY32F_ARB:
+ return GL_INTENSITY;
+ case GL_LUMINANCE32F_ARB:
+ return GL_LUMINANCE;
case GL_LUMINANCE_ALPHA32F_ARB:
return GL_LUMINANCE_ALPHA;
- default:
- ; /* fallthrough */
}
}
@@ -2546,9 +2555,12 @@ _mesa_base_tex_format(const struct gl_context *ctx, GLint internalFormat)
if (_mesa_has_rg_textures(ctx)) {
switch (internalFormat) {
case GL_R16F:
+ if (!_mesa_has_half_float_textures(ctx))
+ break;
+ return GL_RED;
case GL_R32F:
- if (!ctx->Extensions.ARB_texture_float)
- break;
+ if (!_mesa_has_float_textures(ctx))
+ break;
return GL_RED;
case GL_R8I:
case GL_R8UI:
@@ -2566,9 +2578,12 @@ _mesa_base_tex_format(const struct gl_context *ctx, GLint internalFormat)
return GL_RED;
case GL_RG16F:
+ if (!_mesa_has_half_float_textures(ctx))
+ break;
+ return GL_RG;
case GL_RG32F:
- if (!ctx->Extensions.ARB_texture_float)
- break;
+ if (!_mesa_has_float_textures(ctx))
+ break;
return GL_RG;
case GL_RG8I:
case GL_RG8UI: