[Mesa-dev] [PATCH] glsl: fix and clean up NV_compute_shader_derivatives support

Marek Olšák maraeo at gmail.com
Thu May 2 01:17:05 UTC 2019


Ping

On Wed, Apr 24, 2019 at 1:30 PM Marek Olšák <maraeo at gmail.com> wrote:

> From: Marek Olšák <marek.olsak at 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190501/ed6eaabc/attachment-0001.html>


More information about the mesa-dev mailing list