[Mesa-dev] [PATCH] glsl: expose textureQueryLod in GLSL 4.00+ fragment shaders

Ilia Mirkin imirkin at alum.mit.edu
Thu Aug 20 08:15:25 PDT 2015


So just stick something like

"""
>From the ARB_texture_query_lod spec:

    (3) The core specification uses the "Lod" spelling, not "LOD". Should
        this extension be modified to use "Lod"?

      RESOLVED: The "Lod" spelling is the correct spelling for the core
      specification and the preferred spelling for use. However, use of
      "LOD" also exists, as the extension predated the core specification,
      so this extension won't remove use of "LOD".
"""

as the commit message? Fine by me. It seems excessive to put that into
builtin_functions.cpp... but if people feel strongly, I can do that
too.

On Thu, Aug 20, 2015 at 11:09 AM, Timothy Arceri <t_arceri at yahoo.com.au> wrote:
> On Wed, 2015-08-19 at 18:44 -0400, Ilia Mirkin wrote:
>
> Maybe quote or at least make mention of Issue 3 of the ARB_texture_query_lod
> spec in the commit message so anyone searching git history can easily discover
> why there are two differently named versions.
>
> Otherwise Reviewed-by: Timothy Arceri <t_arceri at yahoo.com.au>
>
>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>> ---
>>  src/glsl/builtin_functions.cpp | 119 ++++++++++++++++++++++++++++----------
>> ---
>>  1 file changed, 82 insertions(+), 37 deletions(-)
>>
>> diff --git a/src/glsl/builtin_functions.cpp b/src/glsl/builtin_functions.cpp
>> index 04ad617..9351f71 100644
>> --- a/src/glsl/builtin_functions.cpp
>> +++ b/src/glsl/builtin_functions.cpp
>> @@ -136,6 +136,13 @@ v140(const _mesa_glsl_parse_state *state)
>>  }
>>
>>  static bool
>> +v400_fs_only(const _mesa_glsl_parse_state *state)
>> +{
>> +   return state->is_version(400, 0) &&
>> +          state->stage == MESA_SHADER_FRAGMENT;
>> +}
>> +
>> +static bool
>>  es31(const _mesa_glsl_parse_state *state)
>>  {
>>     return state->is_version(0, 310);
>> @@ -670,7 +677,7 @@ private:
>>                                                const glsl_type
>> *stream_type);
>>     B0(barrier)
>>
>> -   B2(textureQueryLod);
>> +   BA2(textureQueryLod);
>>     B1(textureQueryLevels);
>>     B1(dFdx);
>>     B1(dFdy);
>> @@ -1951,40 +1958,77 @@ builtin_builder::create_builtins()
>>     add_function("barrier", _barrier(), NULL);
>>
>>     add_function("textureQueryLOD",
>> -                _textureQueryLod(glsl_type::sampler1D_type,
>>  glsl_type::float_type),
>> -                _textureQueryLod(glsl_type::isampler1D_type,
>> glsl_type::float_type),
>> -                _textureQueryLod(glsl_type::usampler1D_type,
>> glsl_type::float_type),
>> -
>> -                _textureQueryLod(glsl_type::sampler2D_type,
>>  glsl_type::vec2_type),
>> -                _textureQueryLod(glsl_type::isampler2D_type,
>> glsl_type::vec2_type),
>> -                _textureQueryLod(glsl_type::usampler2D_type,
>> glsl_type::vec2_type),
>> -
>> -                _textureQueryLod(glsl_type::sampler3D_type,
>>  glsl_type::vec3_type),
>> -                _textureQueryLod(glsl_type::isampler3D_type,
>> glsl_type::vec3_type),
>> -                _textureQueryLod(glsl_type::usampler3D_type,
>> glsl_type::vec3_type),
>> -
>> -                _textureQueryLod(glsl_type::samplerCube_type,
>>  glsl_type::vec3_type),
>> -                _textureQueryLod(glsl_type::isamplerCube_type,
>> glsl_type::vec3_type),
>> -                _textureQueryLod(glsl_type::usamplerCube_type,
>> glsl_type::vec3_type),
>> -
>> -                _textureQueryLod(glsl_type::sampler1DArray_type,
>>  glsl_type::float_type),
>> -                _textureQueryLod(glsl_type::isampler1DArray_type,
>> glsl_type::float_type),
>> -                _textureQueryLod(glsl_type::usampler1DArray_type,
>> glsl_type::float_type),
>> -
>> -                _textureQueryLod(glsl_type::sampler2DArray_type,
>>  glsl_type::vec2_type),
>> -                _textureQueryLod(glsl_type::isampler2DArray_type,
>> glsl_type::vec2_type),
>> -                _textureQueryLod(glsl_type::usampler2DArray_type,
>> glsl_type::vec2_type),
>> -
>> -                _textureQueryLod(glsl_type::samplerCubeArray_type,
>>  glsl_type::vec3_type),
>> -                _textureQueryLod(glsl_type::isamplerCubeArray_type,
>> glsl_type::vec3_type),
>> -                _textureQueryLod(glsl_type::usamplerCubeArray_type,
>> glsl_type::vec3_type),
>> -
>> -                _textureQueryLod(glsl_type::sampler1DShadow_type,
>> glsl_type::float_type),
>> -                _textureQueryLod(glsl_type::sampler2DShadow_type,
>> glsl_type::vec2_type),
>> -                _textureQueryLod(glsl_type::samplerCubeShadow_type,
>> glsl_type::vec3_type),
>> -                _textureQueryLod(glsl_type::sampler1DArrayShadow_type,
>> glsl_type::float_type),
>> -                _textureQueryLod(glsl_type::sampler2DArrayShadow_type,
>> glsl_type::vec2_type),
>> -                _textureQueryLod(glsl_type::samplerCubeArrayShadow_type,
>> glsl_type::vec3_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::sampler1D_type,  glsl_type::float_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::isampler1D_type, glsl_type::float_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::usampler1D_type, glsl_type::float_type),
>> +
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::sampler2D_type,  glsl_type::vec2_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::isampler2D_type, glsl_type::vec2_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::usampler2D_type, glsl_type::vec2_type),
>> +
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::sampler3D_type,  glsl_type::vec3_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::isampler3D_type, glsl_type::vec3_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::usampler3D_type, glsl_type::vec3_type),
>> +
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::samplerCube_type,  glsl_type::vec3_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::isamplerCube_type, glsl_type::vec3_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::usamplerCube_type, glsl_type::vec3_type),
>> +
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::sampler1DArray_type,  glsl_type::float_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::isampler1DArray_type, glsl_type::float_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::usampler1DArray_type, glsl_type::float_type),
>> +
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::sampler2DArray_type,  glsl_type::vec2_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::isampler2DArray_type, glsl_type::vec2_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::usampler2DArray_type, glsl_type::vec2_type),
>> +
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::samplerCubeArray_type,  glsl_type::vec3_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::isamplerCubeArray_type, glsl_type::vec3_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::usamplerCubeArray_type, glsl_type::vec3_type),
>> +
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::sampler1DShadow_type, glsl_type::float_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::sampler2DShadow_type, glsl_type::vec2_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::samplerCubeShadow_type, glsl_type::vec3_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::sampler1DArrayShadow_type, glsl_type::float_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::sampler2DArrayShadow_type, glsl_type::vec2_type),
>> +                _textureQueryLod(texture_query_lod,
>> glsl_type::samplerCubeArrayShadow_type, glsl_type::vec3_type),
>> +                NULL);
>> +
>> +   add_function("textureQueryLod",
>> +                _textureQueryLod(v400_fs_only, glsl_type::sampler1D_type,
>>  glsl_type::float_type),
>> +                _textureQueryLod(v400_fs_only, glsl_type::isampler1D_type,
>> glsl_type::float_type),
>> +                _textureQueryLod(v400_fs_only, glsl_type::usampler1D_type,
>> glsl_type::float_type),
>> +
>> +                _textureQueryLod(v400_fs_only, glsl_type::sampler2D_type,
>>  glsl_type::vec2_type),
>> +                _textureQueryLod(v400_fs_only, glsl_type::isampler2D_type,
>> glsl_type::vec2_type),
>> +                _textureQueryLod(v400_fs_only, glsl_type::usampler2D_type,
>> glsl_type::vec2_type),
>> +
>> +                _textureQueryLod(v400_fs_only, glsl_type::sampler3D_type,
>>  glsl_type::vec3_type),
>> +                _textureQueryLod(v400_fs_only, glsl_type::isampler3D_type,
>> glsl_type::vec3_type),
>> +                _textureQueryLod(v400_fs_only, glsl_type::usampler3D_type,
>> glsl_type::vec3_type),
>> +
>> +                _textureQueryLod(v400_fs_only, glsl_type::samplerCube_type,
>>   glsl_type::vec3_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::isamplerCube_type, glsl_type::vec3_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::usamplerCube_type, glsl_type::vec3_type),
>> +
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::sampler1DArray_type,  glsl_type::float_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::isampler1DArray_type, glsl_type::float_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::usampler1DArray_type, glsl_type::float_type),
>> +
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::sampler2DArray_type,  glsl_type::vec2_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::isampler2DArray_type, glsl_type::vec2_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::usampler2DArray_type, glsl_type::vec2_type),
>> +
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::samplerCubeArray_type,  glsl_type::vec3_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::isamplerCubeArray_type, glsl_type::vec3_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::usamplerCubeArray_type, glsl_type::vec3_type),
>> +
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::sampler1DShadow_type, glsl_type::float_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::sampler2DShadow_type, glsl_type::vec2_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::samplerCubeShadow_type, glsl_type::vec3_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::sampler1DArrayShadow_type, glsl_type::float_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::sampler2DArrayShadow_type, glsl_type::vec2_type),
>> +                _textureQueryLod(v400_fs_only,
>> glsl_type::samplerCubeArrayShadow_type, glsl_type::vec3_type),
>>                  NULL);
>>
>>     add_function("textureQueryLevels",
>> @@ -4321,13 +4365,14 @@ builtin_builder::_barrier()
>>  }
>>
>>  ir_function_signature *
>> -builtin_builder::_textureQueryLod(const glsl_type *sampler_type,
>> +builtin_builder::_textureQueryLod(builtin_available_predicate avail,
>> +                                  const glsl_type *sampler_type,
>>                                    const glsl_type *coord_type)
>>  {
>>     ir_variable *s = in_var(sampler_type, "sampler");
>>     ir_variable *coord = in_var(coord_type, "coord");
>>     /* The sampler and coordinate always exist; add optional parameters
>> later. */
>> -   MAKE_SIG(glsl_type::vec2_type, texture_query_lod, 2, s, coord);
>> +   MAKE_SIG(glsl_type::vec2_type, avail, 2, s, coord);
>>
>>     ir_texture *tex = new(mem_ctx) ir_texture(ir_lod);
>>     tex->coordinate = var_ref(coord);


More information about the mesa-dev mailing list