[Mesa-dev] [PATCH 2/4] glsl: Add support for cube arrays in ES.

Ilia Mirkin imirkin at alum.mit.edu
Tue May 31 14:36:54 UTC 2016


On Tue, May 31, 2016 at 1:28 AM, Chris Forbes <chrisf at ijw.co.nz> wrote:
> Signed-off-by: Chris Forbes <chrisforbes at google.com>
> ---
>  src/compiler/glsl/builtin_functions.cpp | 12 ++++++++----
>  src/compiler/glsl/builtin_types.cpp     | 23 ++++++++++++++++-------
>  src/compiler/glsl/glsl_lexer.ll         | 14 +++++++-------
>  3 files changed, 31 insertions(+), 18 deletions(-)
>
> diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp
> index edd02bb..46c8150 100644
> --- a/src/compiler/glsl/builtin_functions.cpp
> +++ b/src/compiler/glsl/builtin_functions.cpp
> @@ -327,15 +327,19 @@ static bool
>  fs_texture_cube_map_array(const _mesa_glsl_parse_state *state)
>  {
>     return state->stage == MESA_SHADER_FRAGMENT &&
> -          (state->is_version(400, 0) ||
> -           state->ARB_texture_cube_map_array_enable);
> +          (state->is_version(400, 320) ||
> +           state->ARB_texture_cube_map_array_enable ||
> +           state->EXT_texture_cube_map_array_enable ||
> +           state->OES_texture_cube_map_array_enable);
>  }
>
>  static bool
>  texture_cube_map_array(const _mesa_glsl_parse_state *state)
>  {
> -   return state->is_version(400, 0) ||
> -          state->ARB_texture_cube_map_array_enable;
> +   return state->is_version(400, 320) ||
> +          state->ARB_texture_cube_map_array_enable ||
> +          state->EXT_texture_cube_map_array_enable ||
> +          state->OES_texture_cube_map_array_enable;
>  }

My personal preference would be to flip the order of these two
functions and have the fs one be

return fs && texture_cube_map_array(state)

But your way is correct too.

>
>  static bool
> diff --git a/src/compiler/glsl/builtin_types.cpp b/src/compiler/glsl/builtin_types.cpp
> index 5f208f8..2d1dc03 100644
> --- a/src/compiler/glsl/builtin_types.cpp
> +++ b/src/compiler/glsl/builtin_types.cpp
> @@ -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,13 +298,22 @@ _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->EXT_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);
>        add_type(symbols, glsl_type::usamplerCubeArray_type);
>     }
>
> +   if (state->EXT_texture_cube_map_array_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_texture_multisample_enable) {
>        add_type(symbols, glsl_type::sampler2DMS_type);
>        add_type(symbols, glsl_type::isampler2DMS_type);
> diff --git a/src/compiler/glsl/glsl_lexer.ll b/src/compiler/glsl/glsl_lexer.ll
> index 11711ee..a97bc1f 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, 0, 400, 0, yyextra->ARB_texture_cube_map_array_enable, SAMPLERCUBEARRAY);
> -isamplerCubeArray KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ARB_texture_cube_map_array_enable, ISAMPLERCUBEARRAY);
> -usamplerCubeArray KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ARB_texture_cube_map_array_enable, USAMPLERCUBEARRAY);
> -samplerCubeArrayShadow   KEYWORD_WITH_ALT(400, 0, 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 || yyextra->EXT_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 || yyextra->EXT_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 || yyextra->EXT_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 || yyextra->EXT_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 || yyextra->EXT_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 || yyextra->EXT_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 || yyextra->EXT_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);
> --
> 2.8.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list