glsl: fix and clean up NV_compute_shader_derivatives support

Submitted by Marek Olšák on April 24, 2019, 5:30 p.m.

Details

Message ID 20190424173015.15901-1-maraeo@gmail.com
State New
Headers show
Series "glsl: fix and clean up NV_compute_shader_derivatives support" ( rev: 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Marek Olšák April 24, 2019, 5:30 p.m.
From: Marek Olšák <marek.olsak@amd.com>

---
 src/compiler/glsl/builtin_functions.cpp | 78 ++++++++-----------------
 1 file changed, 24 insertions(+), 54 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp
index c8d9e1c9af3..b1ffafa1acf 100644
--- a/src/compiler/glsl/builtin_functions.cpp
+++ b/src/compiler/glsl/builtin_functions.cpp
@@ -125,23 +125,21 @@  gs_only(const _mesa_glsl_parse_state *state)
 static bool
 v110(const _mesa_glsl_parse_state *state)
 {
    return !state->es_shader;
 }
 
 static bool
 v110_derivatives_only(const _mesa_glsl_parse_state *state)
 {
    return !state->es_shader &&
-          (state->stage == MESA_SHADER_FRAGMENT ||
-           (state->stage == MESA_SHADER_COMPUTE &&
-            state->NV_compute_shader_derivatives_enable));
+          derivatives_only(state);
 }
 
 static bool
 v120(const _mesa_glsl_parse_state *state)
 {
    return state->is_version(120, 300);
 }
 
 static bool
 v130(const _mesa_glsl_parse_state *state)
@@ -158,38 +156,34 @@  v130_desktop(const _mesa_glsl_parse_state *state)
 static bool
 v460_desktop(const _mesa_glsl_parse_state *state)
 {
    return state->is_version(460, 0);
 }
 
 static bool
 v130_derivatives_only(const _mesa_glsl_parse_state *state)
 {
    return state->is_version(130, 300) &&
-          (state->stage == MESA_SHADER_FRAGMENT ||
-           (state->stage == MESA_SHADER_COMPUTE &&
-            state->NV_compute_shader_derivatives_enable));
+          derivatives_only(state);
 }
 
 static bool
 v140_or_es3(const _mesa_glsl_parse_state *state)
 {
    return state->is_version(140, 300);
 }
 
 static bool
 v400_derivatives_only(const _mesa_glsl_parse_state *state)
 {
    return state->is_version(400, 0) &&
-          (state->stage == MESA_SHADER_FRAGMENT ||
-           (state->stage == MESA_SHADER_COMPUTE &&
-            state->NV_compute_shader_derivatives_enable));
+          derivatives_only(state);
 }
 
 static bool
 texture_rectangle(const _mesa_glsl_parse_state *state)
 {
    return state->ARB_texture_rectangle_enable;
 }
 
 static bool
 texture_external(const _mesa_glsl_parse_state *state)
@@ -333,23 +327,21 @@  static bool
 gpu_shader4_tbo_integer(const _mesa_glsl_parse_state *state)
 {
    return gpu_shader4_tbo(state) &&
           state->ctx->Extensions.EXT_texture_integer;
 }
 
 static bool
 gpu_shader4_derivs_only(const _mesa_glsl_parse_state *state)
 {
    return state->EXT_gpu_shader4_enable &&
-          (state->stage == MESA_SHADER_FRAGMENT ||
-           (state->stage == MESA_SHADER_COMPUTE &&
-            state->NV_compute_shader_derivatives_enable));
+          derivatives_only(state);
 }
 
 static bool
 gpu_shader4_integer_derivs_only(const _mesa_glsl_parse_state *state)
 {
    return gpu_shader4_derivs_only(state) &&
           state->ctx->Extensions.EXT_texture_integer;
 }
 
 static bool
@@ -435,37 +427,35 @@  fs_interpolate_at(const _mesa_glsl_parse_state *state)
 
 static bool
 texture_array_lod(const _mesa_glsl_parse_state *state)
 {
    return lod_exists_in_stage(state) &&
           (state->EXT_texture_array_enable ||
            (state->EXT_gpu_shader4_enable &&
             state->ctx->Extensions.EXT_texture_array));
 }
 
-static bool
-fs_texture_array(const _mesa_glsl_parse_state *state)
-{
-   return state->stage == MESA_SHADER_FRAGMENT &&
-          (state->EXT_texture_array_enable ||
-           (state->EXT_gpu_shader4_enable &&
-            state->ctx->Extensions.EXT_texture_array));
-}
-
 static bool
 texture_array(const _mesa_glsl_parse_state *state)
 {
    return state->EXT_texture_array_enable ||
           (state->EXT_gpu_shader4_enable &&
            state->ctx->Extensions.EXT_texture_array);
 }
 
+static bool
+texture_array_derivs_only(const _mesa_glsl_parse_state *state)
+{
+   return derivatives_only(state) &&
+          texture_array(state);
+}
+
 static bool
 texture_multisample(const _mesa_glsl_parse_state *state)
 {
    return state->is_version(150, 310) ||
           state->ARB_texture_multisample_enable;
 }
 
 static bool
 texture_multisample_array(const _mesa_glsl_parse_state *state)
 {
@@ -485,42 +475,40 @@  static bool
 texture_samples_identical_array(const _mesa_glsl_parse_state *state)
 {
    return texture_multisample_array(state) &&
           state->EXT_shader_samples_identical_enable;
 }
 
 static bool
 derivatives_texture_cube_map_array(const _mesa_glsl_parse_state *state)
 {
    return state->has_texture_cube_map_array() &&
-          (state->stage == MESA_SHADER_FRAGMENT ||
-           (state->stage == MESA_SHADER_COMPUTE &&
-            state->NV_compute_shader_derivatives_enable));
+          derivatives_only(state);
 }
 
 static bool
 texture_cube_map_array(const _mesa_glsl_parse_state *state)
 {
    return state->has_texture_cube_map_array();
 }
 
 static bool
 texture_query_levels(const _mesa_glsl_parse_state *state)
 {
    return state->is_version(430, 0) ||
           state->ARB_texture_query_levels_enable;
 }
 
 static bool
 texture_query_lod(const _mesa_glsl_parse_state *state)
 {
-   return state->stage == MESA_SHADER_FRAGMENT &&
+   return derivatives_only(state) &&
           (state->ARB_texture_query_lod_enable ||
            state->EXT_texture_query_lod_enable);
 }
 
 static bool
 texture_gather_cube_map_array(const _mesa_glsl_parse_state *state)
 {
    return state->is_version(400, 320) ||
           state->ARB_texture_gather_enable ||
           state->ARB_gpu_shader5_enable ||
@@ -549,54 +537,38 @@  static bool
 texture_gather_only_or_es31(const _mesa_glsl_parse_state *state)
 {
    return !state->is_version(400, 320) &&
           !state->ARB_gpu_shader5_enable &&
           !state->EXT_gpu_shader5_enable &&
           !state->OES_gpu_shader5_enable &&
           (state->ARB_texture_gather_enable ||
            state->is_version(0, 310));
 }
 
-/* Desktop GL or OES_standard_derivatives + fragment shader only */
+/* Desktop GL or OES_standard_derivatives */
 static bool
-fs_oes_derivatives(const _mesa_glsl_parse_state *state)
+derivatives(const _mesa_glsl_parse_state *state)
 {
-   return state->stage == MESA_SHADER_FRAGMENT &&
+   return derivatives_only(state) &&
           (state->is_version(110, 300) ||
            state->OES_standard_derivatives_enable ||
            state->ctx->Const.AllowGLSLRelaxedES);
 }
 
 static bool
-derivatives(const _mesa_glsl_parse_state *state)
-{
-   return fs_oes_derivatives(state) ||
-          (state->stage == MESA_SHADER_COMPUTE &&
-           state->NV_compute_shader_derivatives_enable);
-}
-
-static bool
-fs_derivative_control(const _mesa_glsl_parse_state *state)
+derivative_control(const _mesa_glsl_parse_state *state)
 {
-   return state->stage == MESA_SHADER_FRAGMENT &&
+   return derivatives_only(state) &&
           (state->is_version(450, 0) ||
            state->ARB_derivative_control_enable);
 }
 
-static bool
-derivative_control(const _mesa_glsl_parse_state *state)
-{
-   return fs_derivative_control(state) ||
-      (state->stage == MESA_SHADER_COMPUTE &&
-       state->NV_compute_shader_derivatives_enable);
-}
-
 static bool
 tex1d_lod(const _mesa_glsl_parse_state *state)
 {
    return !state->es_shader && lod_exists_in_stage(state);
 }
 
 /** True if sampler3D exists */
 static bool
 tex3d(const _mesa_glsl_parse_state *state)
 {
@@ -605,23 +577,21 @@  tex3d(const _mesa_glsl_parse_state *state)
     */
    return !state->es_shader ||
           state->OES_texture_3D_enable ||
           state->language_version >= 300;
 }
 
 static bool
 derivatives_tex3d(const _mesa_glsl_parse_state *state)
 {
    return (!state->es_shader || state->OES_texture_3D_enable) &&
-          (state->stage == MESA_SHADER_FRAGMENT ||
-           (state->stage == MESA_SHADER_COMPUTE &&
-            state->NV_compute_shader_derivatives_enable));
+          derivatives_only(state);
 }
 
 static bool
 tex3d_lod(const _mesa_glsl_parse_state *state)
 {
    return tex3d(state) && lod_exists_in_stage(state);
 }
 
 static bool
 shader_atomic_counters(const _mesa_glsl_parse_state *state)
@@ -3254,21 +3224,21 @@  builtin_builder::create_builtins()
                 _texture(ir_tex, v110,                      glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::float_type),
                 _texture(ir_txb, v110_derivatives_only,     glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::float_type),
                 _texture(ir_tex, gpu_shader4_integer,               glsl_type::ivec4_type,  glsl_type::isampler1D_type, glsl_type::float_type),
                 _texture(ir_txb, gpu_shader4_integer_derivs_only,   glsl_type::ivec4_type,  glsl_type::isampler1D_type, glsl_type::float_type),
                 _texture(ir_tex, gpu_shader4_integer,               glsl_type::uvec4_type,  glsl_type::usampler1D_type, glsl_type::float_type),
                 _texture(ir_txb, gpu_shader4_integer_derivs_only,   glsl_type::uvec4_type,  glsl_type::usampler1D_type, glsl_type::float_type),
                 NULL);
 
    add_function("texture1DArray",
                 _texture(ir_tex, texture_array,           glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type),
-                _texture(ir_txb, fs_texture_array,        glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type),
+                _texture(ir_txb, texture_array_derivs_only,glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type),
                 _texture(ir_tex, gpu_shader4_array_integer,             glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type),
                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type),
                 _texture(ir_tex, gpu_shader4_array_integer,             glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type),
                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type),
                 NULL);
 
    add_function("texture1DProj",
                 _texture(ir_tex, v110,                  glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT),
                 _texture(ir_tex, v110,                  glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT),
                 _texture(ir_txb, v110_derivatives_only, glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT),
@@ -3309,21 +3279,21 @@  builtin_builder::create_builtins()
                 _texture(ir_txb, derivatives_only,        glsl_type::vec4_type,  glsl_type::sampler2D_type, glsl_type::vec2_type),
                 _texture(ir_tex, gpu_shader4_integer,             glsl_type::ivec4_type,  glsl_type::isampler2D_type, glsl_type::vec2_type),
                 _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type,  glsl_type::isampler2D_type, glsl_type::vec2_type),
                 _texture(ir_tex, gpu_shader4_integer,             glsl_type::uvec4_type,  glsl_type::usampler2D_type, glsl_type::vec2_type),
                 _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type,  glsl_type::usampler2D_type, glsl_type::vec2_type),
                 _texture(ir_tex, texture_external,        glsl_type::vec4_type,  glsl_type::samplerExternalOES_type, glsl_type::vec2_type),
                 NULL);
 
    add_function("texture2DArray",
                 _texture(ir_tex, texture_array,           glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type),
-                _texture(ir_txb, fs_texture_array,        glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type),
+                _texture(ir_txb, texture_array_derivs_only, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type),
                 _texture(ir_tex, gpu_shader4_array_integer,             glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type),
                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type),
                 _texture(ir_tex, gpu_shader4_array_integer,             glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type),
                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type),
                 NULL);
 
    add_function("texture2DProj",
                 _texture(ir_tex, always_available,        glsl_type::vec4_type,  glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT),
                 _texture(ir_tex, always_available,        glsl_type::vec4_type,  glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT),
                 _texture(ir_txb, derivatives_only,        glsl_type::vec4_type,  glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT),
@@ -3421,41 +3391,41 @@  builtin_builder::create_builtins()
                 _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::uvec4_type,  glsl_type::usampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT),
                 NULL);
 
    add_function("shadow1D",
                 _texture(ir_tex, v110,                  glsl_type::vec4_type,  glsl_type::sampler1DShadow_type, glsl_type::vec3_type),
                 _texture(ir_txb, v110_derivatives_only, glsl_type::vec4_type,  glsl_type::sampler1DShadow_type, glsl_type::vec3_type),
                 NULL);
 
    add_function("shadow1DArray",
                 _texture(ir_tex, texture_array,    glsl_type::vec4_type,  glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type),
-                _texture(ir_txb, fs_texture_array, glsl_type::vec4_type,  glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type),
+                _texture(ir_txb, texture_array_derivs_only, glsl_type::vec4_type,  glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type),
                 NULL);
 
    add_function("shadow2D",
                 _texture(ir_tex, v110,                  glsl_type::vec4_type,  glsl_type::sampler2DShadow_type, glsl_type::vec3_type),
                 _texture(ir_txb, v110_derivatives_only, glsl_type::vec4_type,  glsl_type::sampler2DShadow_type, glsl_type::vec3_type),
                 NULL);
 
    add_function("shadow2DArray",
                 _texture(ir_tex, texture_array,    glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
-                _texture(ir_txb, fs_texture_array, glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
+                _texture(ir_txb, texture_array_derivs_only, glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
                 NULL);
 
    add_function("shadow1DProj",
                 _texture(ir_tex, v110,                  glsl_type::vec4_type,  glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT),
                 _texture(ir_txb, v110_derivatives_only, glsl_type::vec4_type,  glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT),
                 NULL);
 
    add_function("shadow2DArray",
                 _texture(ir_tex, texture_array,    glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
-                _texture(ir_txb, fs_texture_array, glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
+                _texture(ir_txb, texture_array_derivs_only, glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
                 NULL);
 
    add_function("shadowCube",
                 _texture(ir_tex, gpu_shader4,             glsl_type::vec4_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type),
                 _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type),
                 NULL);
 
    add_function("shadow2DProj",
                 _texture(ir_tex, v110,                  glsl_type::vec4_type,  glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT),
                 _texture(ir_txb, v110_derivatives_only, glsl_type::vec4_type,  glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT),

Comments


I feel like I've asked this before but can you please try to add commit 
proper commit messages. Not adding a proper commit message might save 
you a minute or two but it cost much more than a minute or two for those 
trying to review a patch or that have bisect to the commit, used git 
blame, git log etc to find out why a change was made.

I started reviewing the patch when you first sent it but it wasn't 
immediately obvious what the fix was vs tidy ups. I didn't want to go 
looking over specs either, all the relevant information should have been 
here in the commit message.

Thanks,
Tim


On 2/5/19 11:17 am, Marek Olšák wrote:
> Ping
> 
> On Wed, Apr 24, 2019 at 1:30 PM Marek Olšák <maraeo@gmail.com 
> <mailto:maraeo@gmail.com>> wrote:
> 
>     From: Marek Olšák <marek.olsak@amd.com <mailto:marek.olsak@amd.com>>
> 
>     ---
>       src/compiler/glsl/builtin_functions.cpp | 78 ++++++++-----------------
>       1 file changed, 24 insertions(+), 54 deletions(-)
> 
>     diff --git a/src/compiler/glsl/builtin_functions.cpp
>     b/src/compiler/glsl/builtin_functions.cpp
>     index c8d9e1c9af3..b1ffafa1acf 100644
>     --- a/src/compiler/glsl/builtin_functions.cpp
>     +++ b/src/compiler/glsl/builtin_functions.cpp
>     @@ -125,23 +125,21 @@ gs_only(const _mesa_glsl_parse_state *state)
>       static bool
>       v110(const _mesa_glsl_parse_state *state)
>       {
>          return !state->es_shader;
>       }
> 
>       static bool
>       v110_derivatives_only(const _mesa_glsl_parse_state *state)
>       {
>          return !state->es_shader &&
>     -          (state->stage == MESA_SHADER_FRAGMENT ||
>     -           (state->stage == MESA_SHADER_COMPUTE &&
>     -            state->NV_compute_shader_derivatives_enable));
>     +          derivatives_only(state);
>       }
> 
>       static bool
>       v120(const _mesa_glsl_parse_state *state)
>       {
>          return state->is_version(120, 300);
>       }
> 
>       static bool
>       v130(const _mesa_glsl_parse_state *state)
>     @@ -158,38 +156,34 @@ v130_desktop(const _mesa_glsl_parse_state *state)
>       static bool
>       v460_desktop(const _mesa_glsl_parse_state *state)
>       {
>          return state->is_version(460, 0);
>       }
> 
>       static bool
>       v130_derivatives_only(const _mesa_glsl_parse_state *state)
>       {
>          return state->is_version(130, 300) &&
>     -          (state->stage == MESA_SHADER_FRAGMENT ||
>     -           (state->stage == MESA_SHADER_COMPUTE &&
>     -            state->NV_compute_shader_derivatives_enable));
>     +          derivatives_only(state);
>       }
> 
>       static bool
>       v140_or_es3(const _mesa_glsl_parse_state *state)
>       {
>          return state->is_version(140, 300);
>       }
> 
>       static bool
>       v400_derivatives_only(const _mesa_glsl_parse_state *state)
>       {
>          return state->is_version(400, 0) &&
>     -          (state->stage == MESA_SHADER_FRAGMENT ||
>     -           (state->stage == MESA_SHADER_COMPUTE &&
>     -            state->NV_compute_shader_derivatives_enable));
>     +          derivatives_only(state);
>       }
> 
>       static bool
>       texture_rectangle(const _mesa_glsl_parse_state *state)
>       {
>          return state->ARB_texture_rectangle_enable;
>       }
> 
>       static bool
>       texture_external(const _mesa_glsl_parse_state *state)
>     @@ -333,23 +327,21 @@ static bool
>       gpu_shader4_tbo_integer(const _mesa_glsl_parse_state *state)
>       {
>          return gpu_shader4_tbo(state) &&
>                 state->ctx->Extensions.EXT_texture_integer;
>       }
> 
>       static bool
>       gpu_shader4_derivs_only(const _mesa_glsl_parse_state *state)
>       {
>          return state->EXT_gpu_shader4_enable &&
>     -          (state->stage == MESA_SHADER_FRAGMENT ||
>     -           (state->stage == MESA_SHADER_COMPUTE &&
>     -            state->NV_compute_shader_derivatives_enable));
>     +          derivatives_only(state);
>       }
> 
>       static bool
>       gpu_shader4_integer_derivs_only(const _mesa_glsl_parse_state *state)
>       {
>          return gpu_shader4_derivs_only(state) &&
>                 state->ctx->Extensions.EXT_texture_integer;
>       }
> 
>       static bool
>     @@ -435,37 +427,35 @@ fs_interpolate_at(const _mesa_glsl_parse_state
>     *state)
> 
>       static bool
>       texture_array_lod(const _mesa_glsl_parse_state *state)
>       {
>          return lod_exists_in_stage(state) &&
>                 (state->EXT_texture_array_enable ||
>                  (state->EXT_gpu_shader4_enable &&
>                   state->ctx->Extensions.EXT_texture_array));
>       }
> 
>     -static bool
>     -fs_texture_array(const _mesa_glsl_parse_state *state)
>     -{
>     -   return state->stage == MESA_SHADER_FRAGMENT &&
>     -          (state->EXT_texture_array_enable ||
>     -           (state->EXT_gpu_shader4_enable &&
>     -            state->ctx->Extensions.EXT_texture_array));
>     -}
>     -
>       static bool
>       texture_array(const _mesa_glsl_parse_state *state)
>       {
>          return state->EXT_texture_array_enable ||
>                 (state->EXT_gpu_shader4_enable &&
>                  state->ctx->Extensions.EXT_texture_array);
>       }
> 
>     +static bool
>     +texture_array_derivs_only(const _mesa_glsl_parse_state *state)
>     +{
>     +   return derivatives_only(state) &&
>     +          texture_array(state);
>     +}
>     +
>       static bool
>       texture_multisample(const _mesa_glsl_parse_state *state)
>       {
>          return state->is_version(150, 310) ||
>                 state->ARB_texture_multisample_enable;
>       }
> 
>       static bool
>       texture_multisample_array(const _mesa_glsl_parse_state *state)
>       {
>     @@ -485,42 +475,40 @@ static bool
>       texture_samples_identical_array(const _mesa_glsl_parse_state *state)
>       {
>          return texture_multisample_array(state) &&
>                 state->EXT_shader_samples_identical_enable;
>       }
> 
>       static bool
>       derivatives_texture_cube_map_array(const _mesa_glsl_parse_state
>     *state)
>       {
>          return state->has_texture_cube_map_array() &&
>     -          (state->stage == MESA_SHADER_FRAGMENT ||
>     -           (state->stage == MESA_SHADER_COMPUTE &&
>     -            state->NV_compute_shader_derivatives_enable));
>     +          derivatives_only(state);
>       }
> 
>       static bool
>       texture_cube_map_array(const _mesa_glsl_parse_state *state)
>       {
>          return state->has_texture_cube_map_array();
>       }
> 
>       static bool
>       texture_query_levels(const _mesa_glsl_parse_state *state)
>       {
>          return state->is_version(430, 0) ||
>                 state->ARB_texture_query_levels_enable;
>       }
> 
>       static bool
>       texture_query_lod(const _mesa_glsl_parse_state *state)
>       {
>     -   return state->stage == MESA_SHADER_FRAGMENT &&
>     +   return derivatives_only(state) &&
>                 (state->ARB_texture_query_lod_enable ||
>                  state->EXT_texture_query_lod_enable);
>       }
> 
>       static bool
>       texture_gather_cube_map_array(const _mesa_glsl_parse_state *state)
>       {
>          return state->is_version(400, 320) ||
>                 state->ARB_texture_gather_enable ||
>                 state->ARB_gpu_shader5_enable ||
>     @@ -549,54 +537,38 @@ static bool
>       texture_gather_only_or_es31(const _mesa_glsl_parse_state *state)
>       {
>          return !state->is_version(400, 320) &&
>                 !state->ARB_gpu_shader5_enable &&
>                 !state->EXT_gpu_shader5_enable &&
>                 !state->OES_gpu_shader5_enable &&
>                 (state->ARB_texture_gather_enable ||
>                  state->is_version(0, 310));
>       }
> 
>     -/* Desktop GL or OES_standard_derivatives + fragment shader only */
>     +/* Desktop GL or OES_standard_derivatives */
>       static bool
>     -fs_oes_derivatives(const _mesa_glsl_parse_state *state)
>     +derivatives(const _mesa_glsl_parse_state *state)
>       {
>     -   return state->stage == MESA_SHADER_FRAGMENT &&
>     +   return derivatives_only(state) &&
>                 (state->is_version(110, 300) ||
>                  state->OES_standard_derivatives_enable ||
>                  state->ctx->Const.AllowGLSLRelaxedES);
>       }
> 
>       static bool
>     -derivatives(const _mesa_glsl_parse_state *state)
>     -{
>     -   return fs_oes_derivatives(state) ||
>     -          (state->stage == MESA_SHADER_COMPUTE &&
>     -           state->NV_compute_shader_derivatives_enable);
>     -}
>     -
>     -static bool
>     -fs_derivative_control(const _mesa_glsl_parse_state *state)
>     +derivative_control(const _mesa_glsl_parse_state *state)
>       {
>     -   return state->stage == MESA_SHADER_FRAGMENT &&
>     +   return derivatives_only(state) &&
>                 (state->is_version(450, 0) ||
>                  state->ARB_derivative_control_enable);
>       }
> 
>     -static bool
>     -derivative_control(const _mesa_glsl_parse_state *state)
>     -{
>     -   return fs_derivative_control(state) ||
>     -      (state->stage == MESA_SHADER_COMPUTE &&
>     -       state->NV_compute_shader_derivatives_enable);
>     -}
>     -
>       static bool
>       tex1d_lod(const _mesa_glsl_parse_state *state)
>       {
>          return !state->es_shader && lod_exists_in_stage(state);
>       }
> 
>       /** True if sampler3D exists */
>       static bool
>       tex3d(const _mesa_glsl_parse_state *state)
>       {
>     @@ -605,23 +577,21 @@ tex3d(const _mesa_glsl_parse_state *state)
>           */
>          return !state->es_shader ||
>                 state->OES_texture_3D_enable ||
>                 state->language_version >= 300;
>       }
> 
>       static bool
>       derivatives_tex3d(const _mesa_glsl_parse_state *state)
>       {
>          return (!state->es_shader || state->OES_texture_3D_enable) &&
>     -          (state->stage == MESA_SHADER_FRAGMENT ||
>     -           (state->stage == MESA_SHADER_COMPUTE &&
>     -            state->NV_compute_shader_derivatives_enable));
>     +          derivatives_only(state);
>       }
> 
>       static bool
>       tex3d_lod(const _mesa_glsl_parse_state *state)
>       {
>          return tex3d(state) && lod_exists_in_stage(state);
>       }
> 
>       static bool
>       shader_atomic_counters(const _mesa_glsl_parse_state *state)
>     @@ -3254,21 +3224,21 @@ builtin_builder::create_builtins()
>                       _texture(ir_tex, v110,                     
>     glsl_type::vec4_type,  glsl_type::sampler1D_type,
>     glsl_type::float_type),
>                       _texture(ir_txb, v110_derivatives_only,   
>       glsl_type::vec4_type,  glsl_type::sampler1D_type,
>     glsl_type::float_type),
>                       _texture(ir_tex, gpu_shader4_integer,             
>       glsl_type::ivec4_type,  glsl_type::isampler1D_type,
>     glsl_type::float_type),
>                       _texture(ir_txb, gpu_shader4_integer_derivs_only, 
>       glsl_type::ivec4_type,  glsl_type::isampler1D_type,
>     glsl_type::float_type),
>                       _texture(ir_tex, gpu_shader4_integer,             
>       glsl_type::uvec4_type,  glsl_type::usampler1D_type,
>     glsl_type::float_type),
>                       _texture(ir_txb, gpu_shader4_integer_derivs_only, 
>       glsl_type::uvec4_type,  glsl_type::usampler1D_type,
>     glsl_type::float_type),
>                       NULL);
> 
>          add_function("texture1DArray",
>                       _texture(ir_tex, texture_array,         
>       glsl_type::vec4_type, glsl_type::sampler1DArray_type,
>     glsl_type::vec2_type),
>     -                _texture(ir_txb, fs_texture_array,       
>     glsl_type::vec4_type, glsl_type::sampler1DArray_type,
>     glsl_type::vec2_type),
>     +                _texture(ir_txb,
>     texture_array_derivs_only,glsl_type::vec4_type,
>     glsl_type::sampler1DArray_type, glsl_type::vec2_type),
>                       _texture(ir_tex, gpu_shader4_array_integer,       
>           glsl_type::ivec4_type, glsl_type::isampler1DArray_type,
>     glsl_type::vec2_type),
>                       _texture(ir_txb,
>     gpu_shader4_array_integer_derivs_only, glsl_type::ivec4_type,
>     glsl_type::isampler1DArray_type, glsl_type::vec2_type),
>                       _texture(ir_tex, gpu_shader4_array_integer,       
>           glsl_type::uvec4_type, glsl_type::usampler1DArray_type,
>     glsl_type::vec2_type),
>                       _texture(ir_txb,
>     gpu_shader4_array_integer_derivs_only, glsl_type::uvec4_type,
>     glsl_type::usampler1DArray_type, glsl_type::vec2_type),
>                       NULL);
> 
>          add_function("texture1DProj",
>                       _texture(ir_tex, v110,                 
>     glsl_type::vec4_type,  glsl_type::sampler1D_type,
>     glsl_type::vec2_type, TEX_PROJECT),
>                       _texture(ir_tex, v110,                 
>     glsl_type::vec4_type,  glsl_type::sampler1D_type,
>     glsl_type::vec4_type, TEX_PROJECT),
>                       _texture(ir_txb, v110_derivatives_only,
>     glsl_type::vec4_type,  glsl_type::sampler1D_type,
>     glsl_type::vec2_type, TEX_PROJECT),
>     @@ -3309,21 +3279,21 @@ builtin_builder::create_builtins()
>                       _texture(ir_txb, derivatives_only,       
>     glsl_type::vec4_type,  glsl_type::sampler2D_type, glsl_type::vec2_type),
>                       _texture(ir_tex, gpu_shader4_integer,           
>       glsl_type::ivec4_type,  glsl_type::isampler2D_type,
>     glsl_type::vec2_type),
>                       _texture(ir_txb, gpu_shader4_integer_derivs_only,
>     glsl_type::ivec4_type,  glsl_type::isampler2D_type,
>     glsl_type::vec2_type),
>                       _texture(ir_tex, gpu_shader4_integer,           
>       glsl_type::uvec4_type,  glsl_type::usampler2D_type,
>     glsl_type::vec2_type),
>                       _texture(ir_txb, gpu_shader4_integer_derivs_only,
>     glsl_type::uvec4_type,  glsl_type::usampler2D_type,
>     glsl_type::vec2_type),
>                       _texture(ir_tex, texture_external,       
>     glsl_type::vec4_type,  glsl_type::samplerExternalOES_type,
>     glsl_type::vec2_type),
>                       NULL);
> 
>          add_function("texture2DArray",
>                       _texture(ir_tex, texture_array,         
>       glsl_type::vec4_type, glsl_type::sampler2DArray_type,
>     glsl_type::vec3_type),
>     -                _texture(ir_txb, fs_texture_array,       
>     glsl_type::vec4_type, glsl_type::sampler2DArray_type,
>     glsl_type::vec3_type),
>     +                _texture(ir_txb, texture_array_derivs_only,
>     glsl_type::vec4_type, glsl_type::sampler2DArray_type,
>     glsl_type::vec3_type),
>                       _texture(ir_tex, gpu_shader4_array_integer,       
>           glsl_type::ivec4_type, glsl_type::isampler2DArray_type,
>     glsl_type::vec3_type),
>                       _texture(ir_txb,
>     gpu_shader4_array_integer_derivs_only, glsl_type::ivec4_type,
>     glsl_type::isampler2DArray_type, glsl_type::vec3_type),
>                       _texture(ir_tex, gpu_shader4_array_integer,       
>           glsl_type::uvec4_type, glsl_type::usampler2DArray_type,
>     glsl_type::vec3_type),
>                       _texture(ir_txb,
>     gpu_shader4_array_integer_derivs_only, glsl_type::uvec4_type,
>     glsl_type::usampler2DArray_type, glsl_type::vec3_type),
>                       NULL);
> 
>          add_function("texture2DProj",
>                       _texture(ir_tex, always_available,       
>     glsl_type::vec4_type,  glsl_type::sampler2D_type,
>     glsl_type::vec3_type, TEX_PROJECT),
>                       _texture(ir_tex, always_available,       
>     glsl_type::vec4_type,  glsl_type::sampler2D_type,
>     glsl_type::vec4_type, TEX_PROJECT),
>                       _texture(ir_txb, derivatives_only,       
>     glsl_type::vec4_type,  glsl_type::sampler2D_type,
>     glsl_type::vec3_type, TEX_PROJECT),
>     @@ -3421,41 +3391,41 @@ builtin_builder::create_builtins()
>                       _texture(ir_tex, gpu_shader4_rect_integer,
>     glsl_type::uvec4_type,  glsl_type::usampler2DRect_type,
>     glsl_type::vec4_type, TEX_PROJECT),
>                       NULL);
> 
>          add_function("shadow1D",
>                       _texture(ir_tex, v110,                 
>     glsl_type::vec4_type,  glsl_type::sampler1DShadow_type,
>     glsl_type::vec3_type),
>                       _texture(ir_txb, v110_derivatives_only,
>     glsl_type::vec4_type,  glsl_type::sampler1DShadow_type,
>     glsl_type::vec3_type),
>                       NULL);
> 
>          add_function("shadow1DArray",
>                       _texture(ir_tex, texture_array,   
>     glsl_type::vec4_type,  glsl_type::sampler1DArrayShadow_type,
>     glsl_type::vec3_type),
>     -                _texture(ir_txb, fs_texture_array,
>     glsl_type::vec4_type,  glsl_type::sampler1DArrayShadow_type,
>     glsl_type::vec3_type),
>     +                _texture(ir_txb, texture_array_derivs_only,
>     glsl_type::vec4_type,  glsl_type::sampler1DArrayShadow_type,
>     glsl_type::vec3_type),
>                       NULL);
> 
>          add_function("shadow2D",
>                       _texture(ir_tex, v110,                 
>     glsl_type::vec4_type,  glsl_type::sampler2DShadow_type,
>     glsl_type::vec3_type),
>                       _texture(ir_txb, v110_derivatives_only,
>     glsl_type::vec4_type,  glsl_type::sampler2DShadow_type,
>     glsl_type::vec3_type),
>                       NULL);
> 
>          add_function("shadow2DArray",
>                       _texture(ir_tex, texture_array,   
>     glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type,
>     glsl_type::vec4_type),
>     -                _texture(ir_txb, fs_texture_array,
>     glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type,
>     glsl_type::vec4_type),
>     +                _texture(ir_txb, texture_array_derivs_only,
>     glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type,
>     glsl_type::vec4_type),
>                       NULL);
> 
>          add_function("shadow1DProj",
>                       _texture(ir_tex, v110,                 
>     glsl_type::vec4_type,  glsl_type::sampler1DShadow_type,
>     glsl_type::vec4_type, TEX_PROJECT),
>                       _texture(ir_txb, v110_derivatives_only,
>     glsl_type::vec4_type,  glsl_type::sampler1DShadow_type,
>     glsl_type::vec4_type, TEX_PROJECT),
>                       NULL);
> 
>          add_function("shadow2DArray",
>                       _texture(ir_tex, texture_array,   
>     glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type,
>     glsl_type::vec4_type),
>     -                _texture(ir_txb, fs_texture_array,
>     glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type,
>     glsl_type::vec4_type),
>     +                _texture(ir_txb, texture_array_derivs_only,
>     glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type,
>     glsl_type::vec4_type),
>                       NULL);
> 
>          add_function("shadowCube",
>                       _texture(ir_tex, gpu_shader4,           
>       glsl_type::vec4_type, glsl_type::samplerCubeShadow_type,
>     glsl_type::vec4_type),
>                       _texture(ir_txb, gpu_shader4_derivs_only,
>     glsl_type::vec4_type, glsl_type::samplerCubeShadow_type,
>     glsl_type::vec4_type),
>                       NULL);
> 
>          add_function("shadow2DProj",
>                       _texture(ir_tex, v110,                 
>     glsl_type::vec4_type,  glsl_type::sampler2DShadow_type,
>     glsl_type::vec4_type, TEX_PROJECT),
>                       _texture(ir_txb, v110_derivatives_only,
>     glsl_type::vec4_type,  glsl_type::sampler2DShadow_type,
>     glsl_type::vec4_type, TEX_PROJECT),
>     -- 
>     2.17.1
> 
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
Sorry, missed this one.

It seems
https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_compute_shader_derivatives.txt
don't explicitly mention the interaction with EXT_texture_array but
seems reasonable to enable those.

This patch is

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>


On Wed, May 01, 2019 at 09:17:05PM -0400, Marek Olšák wrote:
> Ping
> 
> On Wed, Apr 24, 2019 at 1:30 PM Marek Olšák <maraeo@gmail.com> wrote:
> 
> > From: Marek Olšák <marek.olsak@amd.com>
> >
> > ---
> >  src/compiler/glsl/builtin_functions.cpp | 78 ++++++++-----------------
> >  1 file changed, 24 insertions(+), 54 deletions(-)
> >
> > diff --git a/src/compiler/glsl/builtin_functions.cpp
> > b/src/compiler/glsl/builtin_functions.cpp
> > index c8d9e1c9af3..b1ffafa1acf 100644
> > --- a/src/compiler/glsl/builtin_functions.cpp
> > +++ b/src/compiler/glsl/builtin_functions.cpp
> > @@ -125,23 +125,21 @@ gs_only(const _mesa_glsl_parse_state *state)
> >  static bool
> >  v110(const _mesa_glsl_parse_state *state)
> >  {
> >     return !state->es_shader;
> >  }
> >
> >  static bool
> >  v110_derivatives_only(const _mesa_glsl_parse_state *state)
> >  {
> >     return !state->es_shader &&
> > -          (state->stage == MESA_SHADER_FRAGMENT ||
> > -           (state->stage == MESA_SHADER_COMPUTE &&
> > -            state->NV_compute_shader_derivatives_enable));
> > +          derivatives_only(state);
> >  }
> >
> >  static bool
> >  v120(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->is_version(120, 300);
> >  }
> >
> >  static bool
> >  v130(const _mesa_glsl_parse_state *state)
> > @@ -158,38 +156,34 @@ v130_desktop(const _mesa_glsl_parse_state *state)
> >  static bool
> >  v460_desktop(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->is_version(460, 0);
> >  }
> >
> >  static bool
> >  v130_derivatives_only(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->is_version(130, 300) &&
> > -          (state->stage == MESA_SHADER_FRAGMENT ||
> > -           (state->stage == MESA_SHADER_COMPUTE &&
> > -            state->NV_compute_shader_derivatives_enable));
> > +          derivatives_only(state);
> >  }
> >
> >  static bool
> >  v140_or_es3(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->is_version(140, 300);
> >  }
> >
> >  static bool
> >  v400_derivatives_only(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->is_version(400, 0) &&
> > -          (state->stage == MESA_SHADER_FRAGMENT ||
> > -           (state->stage == MESA_SHADER_COMPUTE &&
> > -            state->NV_compute_shader_derivatives_enable));
> > +          derivatives_only(state);
> >  }
> >
> >  static bool
> >  texture_rectangle(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->ARB_texture_rectangle_enable;
> >  }
> >
> >  static bool
> >  texture_external(const _mesa_glsl_parse_state *state)
> > @@ -333,23 +327,21 @@ static bool
> >  gpu_shader4_tbo_integer(const _mesa_glsl_parse_state *state)
> >  {
> >     return gpu_shader4_tbo(state) &&
> >            state->ctx->Extensions.EXT_texture_integer;
> >  }
> >
> >  static bool
> >  gpu_shader4_derivs_only(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->EXT_gpu_shader4_enable &&
> > -          (state->stage == MESA_SHADER_FRAGMENT ||
> > -           (state->stage == MESA_SHADER_COMPUTE &&
> > -            state->NV_compute_shader_derivatives_enable));
> > +          derivatives_only(state);
> >  }
> >
> >  static bool
> >  gpu_shader4_integer_derivs_only(const _mesa_glsl_parse_state *state)
> >  {
> >     return gpu_shader4_derivs_only(state) &&
> >            state->ctx->Extensions.EXT_texture_integer;
> >  }
> >
> >  static bool
> > @@ -435,37 +427,35 @@ fs_interpolate_at(const _mesa_glsl_parse_state
> > *state)
> >
> >  static bool
> >  texture_array_lod(const _mesa_glsl_parse_state *state)
> >  {
> >     return lod_exists_in_stage(state) &&
> >            (state->EXT_texture_array_enable ||
> >             (state->EXT_gpu_shader4_enable &&
> >              state->ctx->Extensions.EXT_texture_array));
> >  }
> >
> > -static bool
> > -fs_texture_array(const _mesa_glsl_parse_state *state)
> > -{
> > -   return state->stage == MESA_SHADER_FRAGMENT &&
> > -          (state->EXT_texture_array_enable ||
> > -           (state->EXT_gpu_shader4_enable &&
> > -            state->ctx->Extensions.EXT_texture_array));
> > -}
> > -
> >  static bool
> >  texture_array(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->EXT_texture_array_enable ||
> >            (state->EXT_gpu_shader4_enable &&
> >             state->ctx->Extensions.EXT_texture_array);
> >  }
> >
> > +static bool
> > +texture_array_derivs_only(const _mesa_glsl_parse_state *state)
> > +{
> > +   return derivatives_only(state) &&
> > +          texture_array(state);
> > +}
> > +
> >  static bool
> >  texture_multisample(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->is_version(150, 310) ||
> >            state->ARB_texture_multisample_enable;
> >  }
> >
> >  static bool
> >  texture_multisample_array(const _mesa_glsl_parse_state *state)
> >  {
> > @@ -485,42 +475,40 @@ static bool
> >  texture_samples_identical_array(const _mesa_glsl_parse_state *state)
> >  {
> >     return texture_multisample_array(state) &&
> >            state->EXT_shader_samples_identical_enable;
> >  }
> >
> >  static bool
> >  derivatives_texture_cube_map_array(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->has_texture_cube_map_array() &&
> > -          (state->stage == MESA_SHADER_FRAGMENT ||
> > -           (state->stage == MESA_SHADER_COMPUTE &&
> > -            state->NV_compute_shader_derivatives_enable));
> > +          derivatives_only(state);
> >  }
> >
> >  static bool
> >  texture_cube_map_array(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->has_texture_cube_map_array();
> >  }
> >
> >  static bool
> >  texture_query_levels(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->is_version(430, 0) ||
> >            state->ARB_texture_query_levels_enable;
> >  }
> >
> >  static bool
> >  texture_query_lod(const _mesa_glsl_parse_state *state)
> >  {
> > -   return state->stage == MESA_SHADER_FRAGMENT &&
> > +   return derivatives_only(state) &&
> >            (state->ARB_texture_query_lod_enable ||
> >             state->EXT_texture_query_lod_enable);
> >  }
> >
> >  static bool
> >  texture_gather_cube_map_array(const _mesa_glsl_parse_state *state)
> >  {
> >     return state->is_version(400, 320) ||
> >            state->ARB_texture_gather_enable ||
> >            state->ARB_gpu_shader5_enable ||
> > @@ -549,54 +537,38 @@ static bool
> >  texture_gather_only_or_es31(const _mesa_glsl_parse_state *state)
> >  {
> >     return !state->is_version(400, 320) &&
> >            !state->ARB_gpu_shader5_enable &&
> >            !state->EXT_gpu_shader5_enable &&
> >            !state->OES_gpu_shader5_enable &&
> >            (state->ARB_texture_gather_enable ||
> >             state->is_version(0, 310));
> >  }
> >
> > -/* Desktop GL or OES_standard_derivatives + fragment shader only */
> > +/* Desktop GL or OES_standard_derivatives */
> >  static bool
> > -fs_oes_derivatives(const _mesa_glsl_parse_state *state)
> > +derivatives(const _mesa_glsl_parse_state *state)
> >  {
> > -   return state->stage == MESA_SHADER_FRAGMENT &&
> > +   return derivatives_only(state) &&
> >            (state->is_version(110, 300) ||
> >             state->OES_standard_derivatives_enable ||
> >             state->ctx->Const.AllowGLSLRelaxedES);
> >  }
> >
> >  static bool
> > -derivatives(const _mesa_glsl_parse_state *state)
> > -{
> > -   return fs_oes_derivatives(state) ||
> > -          (state->stage == MESA_SHADER_COMPUTE &&
> > -           state->NV_compute_shader_derivatives_enable);
> > -}
> > -
> > -static bool
> > -fs_derivative_control(const _mesa_glsl_parse_state *state)
> > +derivative_control(const _mesa_glsl_parse_state *state)
> >  {
> > -   return state->stage == MESA_SHADER_FRAGMENT &&
> > +   return derivatives_only(state) &&
> >            (state->is_version(450, 0) ||
> >             state->ARB_derivative_control_enable);
> >  }
> >
> > -static bool
> > -derivative_control(const _mesa_glsl_parse_state *state)
> > -{
> > -   return fs_derivative_control(state) ||
> > -      (state->stage == MESA_SHADER_COMPUTE &&
> > -       state->NV_compute_shader_derivatives_enable);
> > -}
> > -
> >  static bool
> >  tex1d_lod(const _mesa_glsl_parse_state *state)
> >  {
> >     return !state->es_shader && lod_exists_in_stage(state);
> >  }
> >
> >  /** True if sampler3D exists */
> >  static bool
> >  tex3d(const _mesa_glsl_parse_state *state)
> >  {
> > @@ -605,23 +577,21 @@ tex3d(const _mesa_glsl_parse_state *state)
> >      */
> >     return !state->es_shader ||
> >            state->OES_texture_3D_enable ||
> >            state->language_version >= 300;
> >  }
> >
> >  static bool
> >  derivatives_tex3d(const _mesa_glsl_parse_state *state)
> >  {
> >     return (!state->es_shader || state->OES_texture_3D_enable) &&
> > -          (state->stage == MESA_SHADER_FRAGMENT ||
> > -           (state->stage == MESA_SHADER_COMPUTE &&
> > -            state->NV_compute_shader_derivatives_enable));
> > +          derivatives_only(state);
> >  }
> >
> >  static bool
> >  tex3d_lod(const _mesa_glsl_parse_state *state)
> >  {
> >     return tex3d(state) && lod_exists_in_stage(state);
> >  }
> >
> >  static bool
> >  shader_atomic_counters(const _mesa_glsl_parse_state *state)
> > @@ -3254,21 +3224,21 @@ builtin_builder::create_builtins()
> >                  _texture(ir_tex, v110,
> > glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::float_type),
> >                  _texture(ir_txb, v110_derivatives_only,
> >  glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::float_type),
> >                  _texture(ir_tex, gpu_shader4_integer,
> >  glsl_type::ivec4_type,  glsl_type::isampler1D_type, glsl_type::float_type),
> >                  _texture(ir_txb, gpu_shader4_integer_derivs_only,
> >  glsl_type::ivec4_type,  glsl_type::isampler1D_type, glsl_type::float_type),
> >                  _texture(ir_tex, gpu_shader4_integer,
> >  glsl_type::uvec4_type,  glsl_type::usampler1D_type, glsl_type::float_type),
> >                  _texture(ir_txb, gpu_shader4_integer_derivs_only,
> >  glsl_type::uvec4_type,  glsl_type::usampler1D_type, glsl_type::float_type),
> >                  NULL);
> >
> >     add_function("texture1DArray",
> >                  _texture(ir_tex, texture_array,
> >  glsl_type::vec4_type, glsl_type::sampler1DArray_type,
> > glsl_type::vec2_type),
> > -                _texture(ir_txb, fs_texture_array,
> > glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type),
> > +                _texture(ir_txb,
> > texture_array_derivs_only,glsl_type::vec4_type,
> > glsl_type::sampler1DArray_type, glsl_type::vec2_type),

Minor: looks like a missing space after "only," but maybe just the
double quote in the mail messed up things.


> >                  _texture(ir_tex, gpu_shader4_array_integer,
> >  glsl_type::ivec4_type, glsl_type::isampler1DArray_type,
> > glsl_type::vec2_type),
> >                  _texture(ir_txb, gpu_shader4_array_integer_derivs_only,
> > glsl_type::ivec4_type, glsl_type::isampler1DArray_type,
> > glsl_type::vec2_type),
> >                  _texture(ir_tex, gpu_shader4_array_integer,
> >  glsl_type::uvec4_type, glsl_type::usampler1DArray_type,
> > glsl_type::vec2_type),
> >                  _texture(ir_txb, gpu_shader4_array_integer_derivs_only,
> > glsl_type::uvec4_type, glsl_type::usampler1DArray_type,
> > glsl_type::vec2_type),
> >                  NULL);
> >
> >     add_function("texture1DProj",
> >                  _texture(ir_tex, v110,
> > glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::vec2_type,
> > TEX_PROJECT),
> >                  _texture(ir_tex, v110,
> > glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::vec4_type,
> > TEX_PROJECT),
> >                  _texture(ir_txb, v110_derivatives_only,
> > glsl_type::vec4_type,  glsl_type::sampler1D_type, glsl_type::vec2_type,
> > TEX_PROJECT),
> > @@ -3309,21 +3279,21 @@ builtin_builder::create_builtins()
> >                  _texture(ir_txb, derivatives_only,
> > glsl_type::vec4_type,  glsl_type::sampler2D_type, glsl_type::vec2_type),
> >                  _texture(ir_tex, gpu_shader4_integer,
> >  glsl_type::ivec4_type,  glsl_type::isampler2D_type, glsl_type::vec2_type),
> >                  _texture(ir_txb, gpu_shader4_integer_derivs_only,
> > glsl_type::ivec4_type,  glsl_type::isampler2D_type, glsl_type::vec2_type),
> >                  _texture(ir_tex, gpu_shader4_integer,
> >  glsl_type::uvec4_type,  glsl_type::usampler2D_type, glsl_type::vec2_type),
> >                  _texture(ir_txb, gpu_shader4_integer_derivs_only,
> > glsl_type::uvec4_type,  glsl_type::usampler2D_type, glsl_type::vec2_type),
> >                  _texture(ir_tex, texture_external,
> > glsl_type::vec4_type,  glsl_type::samplerExternalOES_type,
> > glsl_type::vec2_type),
> >                  NULL);
> >
> >     add_function("texture2DArray",
> >                  _texture(ir_tex, texture_array,
> >  glsl_type::vec4_type, glsl_type::sampler2DArray_type,
> > glsl_type::vec3_type),
> > -                _texture(ir_txb, fs_texture_array,
> > glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type),
> > +                _texture(ir_txb, texture_array_derivs_only,
> > glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type),
> >                  _texture(ir_tex, gpu_shader4_array_integer,
> >  glsl_type::ivec4_type, glsl_type::isampler2DArray_type,
> > glsl_type::vec3_type),
> >                  _texture(ir_txb, gpu_shader4_array_integer_derivs_only,
> > glsl_type::ivec4_type, glsl_type::isampler2DArray_type,
> > glsl_type::vec3_type),
> >                  _texture(ir_tex, gpu_shader4_array_integer,
> >  glsl_type::uvec4_type, glsl_type::usampler2DArray_type,
> > glsl_type::vec3_type),
> >                  _texture(ir_txb, gpu_shader4_array_integer_derivs_only,
> > glsl_type::uvec4_type, glsl_type::usampler2DArray_type,
> > glsl_type::vec3_type),
> >                  NULL);
> >
> >     add_function("texture2DProj",
> >                  _texture(ir_tex, always_available,
> > glsl_type::vec4_type,  glsl_type::sampler2D_type, glsl_type::vec3_type,
> > TEX_PROJECT),
> >                  _texture(ir_tex, always_available,
> > glsl_type::vec4_type,  glsl_type::sampler2D_type, glsl_type::vec4_type,
> > TEX_PROJECT),
> >                  _texture(ir_txb, derivatives_only,
> > glsl_type::vec4_type,  glsl_type::sampler2D_type, glsl_type::vec3_type,
> > TEX_PROJECT),
> > @@ -3421,41 +3391,41 @@ builtin_builder::create_builtins()
> >                  _texture(ir_tex, gpu_shader4_rect_integer,
> > glsl_type::uvec4_type,  glsl_type::usampler2DRect_type,
> > glsl_type::vec4_type, TEX_PROJECT),
> >                  NULL);
> >
> >     add_function("shadow1D",
> >                  _texture(ir_tex, v110,
> > glsl_type::vec4_type,  glsl_type::sampler1DShadow_type,
> > glsl_type::vec3_type),
> >                  _texture(ir_txb, v110_derivatives_only,
> > glsl_type::vec4_type,  glsl_type::sampler1DShadow_type,
> > glsl_type::vec3_type),
> >                  NULL);
> >
> >     add_function("shadow1DArray",
> >                  _texture(ir_tex, texture_array,    glsl_type::vec4_type,
> > glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type),
> > -                _texture(ir_txb, fs_texture_array, glsl_type::vec4_type,
> > glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type),
> > +                _texture(ir_txb, texture_array_derivs_only,
> > glsl_type::vec4_type,  glsl_type::sampler1DArrayShadow_type,
> > glsl_type::vec3_type),
> >                  NULL);
> >
> >     add_function("shadow2D",
> >                  _texture(ir_tex, v110,
> > glsl_type::vec4_type,  glsl_type::sampler2DShadow_type,
> > glsl_type::vec3_type),
> >                  _texture(ir_txb, v110_derivatives_only,
> > glsl_type::vec4_type,  glsl_type::sampler2DShadow_type,
> > glsl_type::vec3_type),
> >                  NULL);
> >
> >     add_function("shadow2DArray",
> >                  _texture(ir_tex, texture_array,    glsl_type::vec4_type,
> > glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
> > -                _texture(ir_txb, fs_texture_array, glsl_type::vec4_type,
> > glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
> > +                _texture(ir_txb, texture_array_derivs_only,
> > glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type,
> > glsl_type::vec4_type),
> >                  NULL);
> >
> >     add_function("shadow1DProj",
> >                  _texture(ir_tex, v110,
> > glsl_type::vec4_type,  glsl_type::sampler1DShadow_type,
> > glsl_type::vec4_type, TEX_PROJECT),
> >                  _texture(ir_txb, v110_derivatives_only,
> > glsl_type::vec4_type,  glsl_type::sampler1DShadow_type,
> > glsl_type::vec4_type, TEX_PROJECT),
> >                  NULL);
> >
> >     add_function("shadow2DArray",
> >                  _texture(ir_tex, texture_array,    glsl_type::vec4_type,
> > glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
> > -                _texture(ir_txb, fs_texture_array, glsl_type::vec4_type,
> > glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type),
> > +                _texture(ir_txb, texture_array_derivs_only,
> > glsl_type::vec4_type,  glsl_type::sampler2DArrayShadow_type,
> > glsl_type::vec4_type),
> >                  NULL);
> >
> >     add_function("shadowCube",
> >                  _texture(ir_tex, gpu_shader4,
> >  glsl_type::vec4_type, glsl_type::samplerCubeShadow_type,
> > glsl_type::vec4_type),
> >                  _texture(ir_txb, gpu_shader4_derivs_only,
> > glsl_type::vec4_type, glsl_type::samplerCubeShadow_type,
> > glsl_type::vec4_type),
> >                  NULL);
> >
> >     add_function("shadow2DProj",
> >                  _texture(ir_tex, v110,
> > glsl_type::vec4_type,  glsl_type::sampler2DShadow_type,
> > glsl_type::vec4_type, TEX_PROJECT),
> >                  _texture(ir_txb, v110_derivatives_only,
> > glsl_type::vec4_type,  glsl_type::sampler2DShadow_type,
> > glsl_type::vec4_type, TEX_PROJECT),
> > --
> > 2.17.1
> >
> >

> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev



	Caio