diff options
-rw-r--r-- | src/mesa/main/context.h | 14 | ||||
-rw-r--r-- | src/mesa/main/glformats.c | 39 |
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: |