From dc4f53b68308bbd79932470cf4613037f7e95fb7 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Wed, 17 Aug 2016 10:20:34 +0100 Subject: [PATCH] mesa: Add support for OES_texture_cube_map_array This has a separate enable flag because this extension also requires OES_geometry_shader. It is possible that some drivers may support OpenGL ES 3.1 and ARB_texture_cube_map but not support OES_geometry_shader. Signed-off-by: Ian Romanick Reviewed-by: Ilia Mirkin Reviewed-by: Kenneth Graunke --- src/compiler/glsl/builtin_functions.cpp | 29 ++++++++++++++++-------- src/compiler/glsl/builtin_types.cpp | 27 +++++++++++++--------- src/compiler/glsl/glsl_lexer.ll | 14 ++++++------ src/compiler/glsl/glsl_parser_extras.cpp | 1 + src/compiler/glsl/glsl_parser_extras.h | 5 +++- src/mesa/main/context.h | 3 ++- src/mesa/main/extensions_table.h | 1 + src/mesa/main/genmipmap.c | 2 +- src/mesa/main/get.c | 4 ++-- src/mesa/main/get_hash_params.py | 6 ++--- src/mesa/main/mtypes.h | 1 + src/mesa/main/texobj.c | 2 +- src/mesa/main/texparam.c | 5 ++-- src/mesa/main/texstorage.c | 3 ++- 14 files changed, 63 insertions(+), 40 deletions(-) diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp index 161c98bd018..64bf8d8a48a 100644 --- a/src/compiler/glsl/builtin_functions.cpp +++ b/src/compiler/glsl/builtin_functions.cpp @@ -244,6 +244,14 @@ gpu_shader5_es(const _mesa_glsl_parse_state *state) state->OES_gpu_shader5_enable; } +static bool +gpu_shader5_or_OES_texture_cube_map_array(const _mesa_glsl_parse_state *state) +{ + return state->is_version(400, 320) || + state->ARB_gpu_shader5_enable || + state->OES_texture_cube_map_array_enable; +} + static bool es31_not_gs5(const _mesa_glsl_parse_state *state) { @@ -358,11 +366,12 @@ texture_query_lod(const _mesa_glsl_parse_state *state) } static bool -texture_gather(const _mesa_glsl_parse_state *state) +texture_gather_cube_map_array(const _mesa_glsl_parse_state *state) { - return state->is_version(400, 0) || + return state->is_version(400, 320) || state->ARB_texture_gather_enable || - state->ARB_gpu_shader5_enable; + state->ARB_gpu_shader5_enable || + state->OES_texture_cube_map_array_enable; } static bool @@ -2554,9 +2563,9 @@ builtin_builder::create_builtins() _texture(ir_tg4, texture_gather_or_es31, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), _texture(ir_tg4, texture_gather_or_es31, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - _texture(ir_tg4, texture_gather, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_tg4, texture_gather, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_tg4, texture_gather, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type), + _texture(ir_tg4, texture_gather_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type), + _texture(ir_tg4, texture_gather_cube_map_array, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type), + _texture(ir_tg4, texture_gather_cube_map_array, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type), _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_COMPONENT), _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_COMPONENT), @@ -2574,14 +2583,14 @@ builtin_builder::create_builtins() _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_COMPONENT), _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT), + _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT), + _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT), + _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT), _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec2_type), _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec3_type), _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::samplerCubeShadow_type, glsl_type::vec3_type), - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::samplerCubeArrayShadow_type, glsl_type::vec4_type), + _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArrayShadow_type, glsl_type::vec4_type), _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec2_type), NULL); diff --git a/src/compiler/glsl/builtin_types.cpp b/src/compiler/glsl/builtin_types.cpp index 5f208f8e9d6..d40f785c283 100644 --- a/src/compiler/glsl/builtin_types.cpp +++ b/src/compiler/glsl/builtin_types.cpp @@ -177,7 +177,7 @@ static const struct builtin_type_versions { T(samplerCube, 110, 100) T(sampler1DArray, 130, 999) T(sampler2DArray, 130, 300) - T(samplerCubeArray, 400, 999) + T(samplerCubeArray, 400, 320) T(sampler2DRect, 140, 999) T(samplerBuffer, 140, 320) T(sampler2DMS, 150, 310) @@ -189,7 +189,7 @@ static const struct builtin_type_versions { T(isamplerCube, 130, 300) T(isampler1DArray, 130, 999) T(isampler2DArray, 130, 300) - T(isamplerCubeArray, 400, 999) + T(isamplerCubeArray, 400, 320) T(isampler2DRect, 140, 999) T(isamplerBuffer, 140, 320) T(isampler2DMS, 150, 310) @@ -201,7 +201,7 @@ static const struct builtin_type_versions { T(usamplerCube, 130, 300) T(usampler1DArray, 130, 999) T(usampler2DArray, 130, 300) - T(usamplerCubeArray, 400, 999) + T(usamplerCubeArray, 400, 320) T(usampler2DRect, 140, 999) T(usamplerBuffer, 140, 320) T(usampler2DMS, 150, 310) @@ -212,7 +212,7 @@ static const struct builtin_type_versions { T(samplerCubeShadow, 130, 300) T(sampler1DArrayShadow, 130, 999) T(sampler2DArrayShadow, 130, 300) - T(samplerCubeArrayShadow, 400, 999) + T(samplerCubeArrayShadow, 400, 320) T(sampler2DRectShadow, 140, 999) T(struct_gl_DepthRangeParameters, 110, 100) @@ -225,7 +225,7 @@ static const struct builtin_type_versions { T(imageBuffer, 420, 320) T(image1DArray, 420, 999) T(image2DArray, 420, 310) - T(imageCubeArray, 420, 999) + T(imageCubeArray, 420, 320) T(image2DMS, 420, 999) T(image2DMSArray, 420, 999) T(iimage1D, 420, 999) @@ -236,7 +236,7 @@ static const struct builtin_type_versions { T(iimageBuffer, 420, 320) T(iimage1DArray, 420, 999) T(iimage2DArray, 420, 310) - T(iimageCubeArray, 420, 999) + T(iimageCubeArray, 420, 320) T(iimage2DMS, 420, 999) T(iimage2DMSArray, 420, 999) T(uimage1D, 420, 999) @@ -247,7 +247,7 @@ static const struct builtin_type_versions { T(uimageBuffer, 420, 320) T(uimage1DArray, 420, 999) T(uimage2DArray, 420, 310) - T(uimageCubeArray, 420, 999) + T(uimageCubeArray, 420, 320) T(uimage2DMS, 420, 999) T(uimage2DMSArray, 420, 999) @@ -298,7 +298,8 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) * by the version-based loop, but attempting to add them a second time * is harmless. */ - if (state->ARB_texture_cube_map_array_enable) { + if (state->ARB_texture_cube_map_array_enable || + state->OES_texture_cube_map_array_enable) { add_type(symbols, glsl_type::samplerCubeArray_type); add_type(symbols, glsl_type::samplerCubeArrayShadow_type); add_type(symbols, glsl_type::isamplerCubeArray_type); @@ -337,6 +338,13 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) add_type(symbols, glsl_type::sampler3D_type); } + if (state->ARB_shader_image_load_store_enable || + state->OES_texture_cube_map_array_enable) { + add_type(symbols, glsl_type::imageCubeArray_type); + add_type(symbols, glsl_type::iimageCubeArray_type); + add_type(symbols, glsl_type::uimageCubeArray_type); + } + if (state->ARB_shader_image_load_store_enable) { add_type(symbols, glsl_type::image1D_type); add_type(symbols, glsl_type::image2D_type); @@ -346,7 +354,6 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) add_type(symbols, glsl_type::imageBuffer_type); add_type(symbols, glsl_type::image1DArray_type); add_type(symbols, glsl_type::image2DArray_type); - add_type(symbols, glsl_type::imageCubeArray_type); add_type(symbols, glsl_type::image2DMS_type); add_type(symbols, glsl_type::image2DMSArray_type); add_type(symbols, glsl_type::iimage1D_type); @@ -357,7 +364,6 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) add_type(symbols, glsl_type::iimageBuffer_type); add_type(symbols, glsl_type::iimage1DArray_type); add_type(symbols, glsl_type::iimage2DArray_type); - add_type(symbols, glsl_type::iimageCubeArray_type); add_type(symbols, glsl_type::iimage2DMS_type); add_type(symbols, glsl_type::iimage2DMSArray_type); add_type(symbols, glsl_type::uimage1D_type); @@ -368,7 +374,6 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) add_type(symbols, glsl_type::uimageBuffer_type); add_type(symbols, glsl_type::uimage1DArray_type); add_type(symbols, glsl_type::uimage2DArray_type); - add_type(symbols, glsl_type::uimageCubeArray_type); add_type(symbols, glsl_type::uimage2DMS_type); add_type(symbols, glsl_type::uimage2DMSArray_type); } diff --git a/src/compiler/glsl/glsl_lexer.ll b/src/compiler/glsl/glsl_lexer.ll index ad95f0298f5..2ed11ef8707 100644 --- a/src/compiler/glsl/glsl_lexer.ll +++ b/src/compiler/glsl/glsl_lexer.ll @@ -348,10 +348,10 @@ isampler2DMSArray KEYWORD_WITH_ALT(150, 300, 150, 320, yyextra->ARB_texture_mul usampler2DMSArray KEYWORD_WITH_ALT(150, 300, 150, 320, yyextra->ARB_texture_multisample_enable || yyextra->OES_texture_storage_multisample_2d_array_enable, USAMPLER2DMSARRAY); /* keywords available with ARB_texture_cube_map_array_enable extension on desktop GLSL */ -samplerCubeArray KEYWORD_WITH_ALT(400, 310, 400, 0, yyextra->ARB_texture_cube_map_array_enable, SAMPLERCUBEARRAY); -isamplerCubeArray KEYWORD_WITH_ALT(400, 310, 400, 0, yyextra->ARB_texture_cube_map_array_enable, ISAMPLERCUBEARRAY); -usamplerCubeArray KEYWORD_WITH_ALT(400, 310, 400, 0, yyextra->ARB_texture_cube_map_array_enable, USAMPLERCUBEARRAY); -samplerCubeArrayShadow KEYWORD_WITH_ALT(400, 310, 400, 0, yyextra->ARB_texture_cube_map_array_enable, SAMPLERCUBEARRAYSHADOW); +samplerCubeArray KEYWORD_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable, SAMPLERCUBEARRAY); +isamplerCubeArray KEYWORD_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable, ISAMPLERCUBEARRAY); +usamplerCubeArray KEYWORD_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable, USAMPLERCUBEARRAY); +samplerCubeArrayShadow KEYWORD_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable, SAMPLERCUBEARRAYSHADOW); samplerExternalOES { if (yyextra->OES_EGL_image_external_enable) @@ -372,7 +372,7 @@ imageCube KEYWORD_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_l imageBuffer KEYWORD_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, IMAGEBUFFER); image1DArray KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, IMAGE1DARRAY); image2DArray KEYWORD_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable, IMAGE2DARRAY); -imageCubeArray KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, IMAGECUBEARRAY); +imageCubeArray KEYWORD_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->OES_texture_cube_map_array_enable, IMAGECUBEARRAY); image2DMS KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, IMAGE2DMS); image2DMSArray KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, IMAGE2DMSARRAY); iimage1D KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, IIMAGE1D); @@ -383,7 +383,7 @@ iimageCube KEYWORD_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_l iimageBuffer KEYWORD_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, IIMAGEBUFFER); iimage1DArray KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, IIMAGE1DARRAY); iimage2DArray KEYWORD_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable, IIMAGE2DARRAY); -iimageCubeArray KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, IIMAGECUBEARRAY); +iimageCubeArray KEYWORD_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->OES_texture_cube_map_array_enable, IIMAGECUBEARRAY); iimage2DMS KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, IIMAGE2DMS); iimage2DMSArray KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, IIMAGE2DMSARRAY); uimage1D KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, UIMAGE1D); @@ -394,7 +394,7 @@ uimageCube KEYWORD_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_l uimageBuffer KEYWORD_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, UIMAGEBUFFER); uimage1DArray KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, UIMAGE1DARRAY); uimage2DArray KEYWORD_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable, UIMAGE2DARRAY); -uimageCubeArray KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, UIMAGECUBEARRAY); +uimageCubeArray KEYWORD_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->OES_texture_cube_map_array_enable, UIMAGECUBEARRAY); uimage2DMS KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, UIMAGE2DMS); uimage2DMSArray KEYWORD_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable, UIMAGE2DMSARRAY); image1DShadow KEYWORD(130, 300, 0, 0, IMAGE1DSHADOW); diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index b5c5fdc574c..80f37f34f2d 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -640,6 +640,7 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = { EXT(OES_tessellation_shader), EXT(OES_texture_3D), EXT(OES_texture_buffer), + EXT(OES_texture_cube_map_array), EXT(OES_texture_storage_multisample_2d_array), /* All other extensions go here, sorted alphabetically. diff --git a/src/compiler/glsl/glsl_parser_extras.h b/src/compiler/glsl/glsl_parser_extras.h index 82ce6a78164..63a8a676b7d 100644 --- a/src/compiler/glsl/glsl_parser_extras.h +++ b/src/compiler/glsl/glsl_parser_extras.h @@ -320,7 +320,8 @@ struct _mesa_glsl_parse_state { bool has_texture_cube_map_array() const { return ARB_texture_cube_map_array_enable || - is_version(400, 0); + OES_texture_cube_map_array_enable || + is_version(400, 320); } void process_version_directive(YYLTYPE *locp, int version, @@ -688,6 +689,8 @@ struct _mesa_glsl_parse_state { bool OES_texture_3D_warn; bool OES_texture_buffer_enable; bool OES_texture_buffer_warn; + bool OES_texture_cube_map_array_enable; + bool OES_texture_cube_map_array_warn; bool OES_texture_storage_multisample_2d_array_enable; bool OES_texture_storage_multisample_2d_array_warn; diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index 9100ae75cdc..4cd149de14e 100644 --- a/src/mesa/main/context.h +++ b/src/mesa/main/context.h @@ -354,7 +354,8 @@ _mesa_has_tessellation(const struct gl_context *ctx) static inline bool _mesa_has_texture_cube_map_array(const struct gl_context *ctx) { - return _mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_cube_map_array; + return _mesa_has_ARB_texture_cube_map_array(ctx) || + _mesa_has_OES_texture_cube_map_array(ctx); } #ifdef __cplusplus diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h index 9d0677af499..a3fcad52121 100644 --- a/src/mesa/main/extensions_table.h +++ b/src/mesa/main/extensions_table.h @@ -373,6 +373,7 @@ EXT(OES_texture_border_clamp , ARB_texture_border_clamp EXT(OES_texture_buffer , OES_texture_buffer , x , x , x , 31, 2014) EXT(OES_texture_compression_astc , OES_texture_compression_astc , x , x , ES1, ES2, 2015) EXT(OES_texture_cube_map , ARB_texture_cube_map , x , x , ES1, x , 2007) +EXT(OES_texture_cube_map_array , OES_texture_cube_map_array , x , x , x , 31, 2014) EXT(OES_texture_env_crossbar , ARB_texture_env_crossbar , x , x , ES1, x , 2005) EXT(OES_texture_float , OES_texture_float , x , x , x , ES2, 2005) EXT(OES_texture_float_linear , OES_texture_float_linear , x , x , x , ES2, 2005) diff --git a/src/mesa/main/genmipmap.c b/src/mesa/main/genmipmap.c index 5038d5cc053..6021c026f53 100644 --- a/src/mesa/main/genmipmap.c +++ b/src/mesa/main/genmipmap.c @@ -65,7 +65,7 @@ _mesa_is_valid_generate_texture_mipmap_target(struct gl_context *ctx, || !ctx->Extensions.EXT_texture_array; break; case GL_TEXTURE_CUBE_MAP_ARRAY: - error = !_mesa_has_ARB_texture_cube_map_array(ctx); + error = !_mesa_has_texture_cube_map_array(ctx); break; default: error = true; diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index e22bb5ff6a5..0aa9065764b 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -442,7 +442,7 @@ EXTRA_EXT(OES_EGL_image_external); EXTRA_EXT(ARB_blend_func_extended); EXTRA_EXT(ARB_uniform_buffer_object); EXTRA_EXT(ARB_timer_query); -EXTRA_EXT(ARB_texture_cube_map_array); +EXTRA_EXT2(ARB_texture_cube_map_array, OES_texture_cube_map_array); EXTRA_EXT(ARB_texture_buffer_range); EXTRA_EXT(ARB_texture_multisample); EXTRA_EXT(ARB_texture_gather); @@ -1858,7 +1858,7 @@ tex_binding_to_index(const struct gl_context *ctx, GLenum binding) _mesa_has_OES_texture_buffer(ctx)) ? TEXTURE_BUFFER_INDEX : -1; case GL_TEXTURE_BINDING_CUBE_MAP_ARRAY: - return _mesa_has_ARB_texture_cube_map_array(ctx) + return _mesa_has_texture_cube_map_array(ctx) ? TEXTURE_CUBE_ARRAY_INDEX : -1; case GL_TEXTURE_BINDING_2D_MULTISAMPLE: return _mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_multisample diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py index 3414743ddbf..35af48b96aa 100644 --- a/src/mesa/main/get_hash_params.py +++ b/src/mesa/main/get_hash_params.py @@ -516,6 +516,9 @@ descriptor=[ # GL_ARB_shader_image_load_store / GL_ARB_shader_storage_buffer_object / GLES 3.1 # (MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS in GL_ARB_shader_image_load_store) [ "MAX_COMBINED_SHADER_OUTPUT_RESOURCES", "CONTEXT_INT(Const.MaxCombinedShaderOutputResources), extra_ARB_shader_image_load_store_shader_storage_buffer_object_es31" ], + + # GL_ARB_texture_cube_map_array + [ "TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB", "LOC_CUSTOM, TYPE_INT, TEXTURE_CUBE_ARRAY_INDEX, extra_ARB_texture_cube_map_array_OES_texture_cube_map_array" ], ]}, # Enums in OpenGL Core profile and ES 3.0 @@ -899,9 +902,6 @@ descriptor=[ # GL_ARB_map_buffer_alignment [ "MIN_MAP_BUFFER_ALIGNMENT", "CONTEXT_INT(Const.MinMapBufferAlignment), NO_EXTRA" ], -# GL_ARB_texture_cube_map_array - [ "TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB", "LOC_CUSTOM, TYPE_INT, TEXTURE_CUBE_ARRAY_INDEX, extra_ARB_texture_cube_map_array" ], - # GL_ARB_texture_gather [ "MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB", "CONTEXT_INT(Const.MaxProgramTextureGatherComponents), extra_ARB_texture_gather"], diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 76371609e6c..fceed95b17c 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3944,6 +3944,7 @@ struct gl_extensions GLboolean OES_shader_io_blocks; GLboolean OES_standard_derivatives; GLboolean OES_texture_buffer; + GLboolean OES_texture_cube_map_array; /* vendor extensions */ GLboolean AMD_performance_monitor; GLboolean AMD_pinned_memory; diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 655627b92c3..9a051bc8e2b 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -1579,7 +1579,7 @@ _mesa_tex_target_to_index(const struct gl_context *ctx, GLenum target) return _mesa_is_gles(ctx) && ctx->Extensions.OES_EGL_image_external ? TEXTURE_EXTERNAL_INDEX : -1; case GL_TEXTURE_CUBE_MAP_ARRAY: - return _mesa_has_ARB_texture_cube_map_array(ctx) + return _mesa_has_texture_cube_map_array(ctx) ? TEXTURE_CUBE_ARRAY_INDEX : -1; case GL_TEXTURE_2D_MULTISAMPLE: return ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_multisample) || diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index ba83f8fda9a..bdd3fcb72dd 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -1243,6 +1243,8 @@ _mesa_legal_get_tex_level_parameter_target(struct gl_context *ctx, GLenum target */ return (ctx->API == API_OPENGL_CORE && ctx->Version >= 31) || _mesa_has_OES_texture_buffer(ctx); + case GL_TEXTURE_CUBE_MAP_ARRAY: + return _mesa_has_texture_cube_map_array(ctx); } if (!_mesa_is_desktop_gl(ctx)) @@ -1257,8 +1259,7 @@ _mesa_legal_get_tex_level_parameter_target(struct gl_context *ctx, GLenum target return GL_TRUE; case GL_PROXY_TEXTURE_CUBE_MAP: return ctx->Extensions.ARB_texture_cube_map; - case GL_TEXTURE_CUBE_MAP_ARRAY_ARB: - case GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB: + case GL_PROXY_TEXTURE_CUBE_MAP_ARRAY: return ctx->Extensions.ARB_texture_cube_map_array; case GL_TEXTURE_RECTANGLE_NV: case GL_PROXY_TEXTURE_RECTANGLE_NV: diff --git a/src/mesa/main/texstorage.c b/src/mesa/main/texstorage.c index c43f2d402d6..817a7464d9f 100644 --- a/src/mesa/main/texstorage.c +++ b/src/mesa/main/texstorage.c @@ -71,6 +71,8 @@ legal_texobj_target(const struct gl_context *ctx, GLuint dims, GLenum target) return true; case GL_TEXTURE_2D_ARRAY: return ctx->Extensions.EXT_texture_array; + case GL_TEXTURE_CUBE_MAP_ARRAY: + return _mesa_has_texture_cube_map_array(ctx); } break; } @@ -108,7 +110,6 @@ legal_texobj_target(const struct gl_context *ctx, GLuint dims, GLenum target) return true; case GL_PROXY_TEXTURE_2D_ARRAY: return ctx->Extensions.EXT_texture_array; - case GL_TEXTURE_CUBE_MAP_ARRAY: case GL_PROXY_TEXTURE_CUBE_MAP_ARRAY: return ctx->Extensions.ARB_texture_cube_map_array; default: -- 2.30.2