[Mesa-dev] [PATCH 08/11] glsl: add arithmetic builtin functions for EXT_gpu_shader4
Ian Romanick
idr at freedesktop.org
Mon Aug 13 17:51:48 UTC 2018
On 08/07/2018 10:42 PM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ---
> src/compiler/glsl/builtin_functions.cpp | 48 ++++++++++++++++++-------
> 1 file changed, 35 insertions(+), 13 deletions(-)
>
> diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp
> index 7119903795f..1370245ff91 100644
> --- a/src/compiler/glsl/builtin_functions.cpp
> +++ b/src/compiler/glsl/builtin_functions.cpp
> @@ -264,20 +264,32 @@ shader_packing_or_es3(const _mesa_glsl_parse_state *state)
> }
>
> static bool
> shader_packing_or_es3_or_gpu_shader5(const _mesa_glsl_parse_state *state)
> {
> return state->ARB_shading_language_packing_enable ||
> state->ARB_gpu_shader5_enable ||
> state->is_version(400, 300);
> }
>
> +static bool
> +gpu_shader4(const _mesa_glsl_parse_state *state)
> +{
> + return state->EXT_gpu_shader4_enable;
> +}
> +
> +static bool
> +v130_gpu_shader4(const _mesa_glsl_parse_state *state)
The other things like this use "or" in the name. Maybe
v130_or_gpu_shader4? With that changed, this patch is
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> +{
> + return state->is_version(130, 300) || state->EXT_gpu_shader4_enable;
> +}
> +
> static bool
> gpu_shader5(const _mesa_glsl_parse_state *state)
> {
> return state->is_version(400, 0) || state->ARB_gpu_shader5_enable;
> }
>
> static bool
> gpu_shader5_es(const _mesa_glsl_parse_state *state)
> {
> return state->is_version(400, 320) ||
> @@ -786,20 +798,21 @@ private:
> B1(pow)
> B1(exp)
> B1(log)
> B1(exp2)
> B1(log2)
> BA1(sqrt)
> BA1(inversesqrt)
> BA1(abs)
> BA1(sign)
> BA1(floor)
> + BA1(truncate)
> BA1(trunc)
> BA1(round)
> BA1(roundEven)
> BA1(ceil)
> BA1(fract)
> BA2(mod)
> BA1(modf)
> BA2(min)
> BA2(max)
> BA2(clamp)
> @@ -1384,23 +1397,23 @@ builtin_builder::create_builtins()
> #define FIUD_VEC(NAME) \
> add_function(#NAME, \
> _##NAME(always_available, glsl_type::vec2_type), \
> _##NAME(always_available, glsl_type::vec3_type), \
> _##NAME(always_available, glsl_type::vec4_type), \
> \
> _##NAME(always_available, glsl_type::ivec2_type), \
> _##NAME(always_available, glsl_type::ivec3_type), \
> _##NAME(always_available, glsl_type::ivec4_type), \
> \
> - _##NAME(v130, glsl_type::uvec2_type), \
> - _##NAME(v130, glsl_type::uvec3_type), \
> - _##NAME(v130, glsl_type::uvec4_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec2_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec3_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec4_type), \
> _##NAME(fp64, glsl_type::dvec2_type), \
> _##NAME(fp64, glsl_type::dvec3_type), \
> _##NAME(fp64, glsl_type::dvec4_type), \
> _##NAME(int64, glsl_type::int64_t_type), \
> _##NAME(int64, glsl_type::i64vec2_type), \
> _##NAME(int64, glsl_type::i64vec3_type), \
> _##NAME(int64, glsl_type::i64vec4_type), \
> _##NAME(int64, glsl_type::uint64_t_type), \
> _##NAME(int64, glsl_type::u64vec2_type), \
> _##NAME(int64, glsl_type::u64vec3_type), \
> @@ -1423,23 +1436,23 @@ builtin_builder::create_builtins()
> #define FIUBD_VEC(NAME) \
> add_function(#NAME, \
> _##NAME(always_available, glsl_type::vec2_type), \
> _##NAME(always_available, glsl_type::vec3_type), \
> _##NAME(always_available, glsl_type::vec4_type), \
> \
> _##NAME(always_available, glsl_type::ivec2_type), \
> _##NAME(always_available, glsl_type::ivec3_type), \
> _##NAME(always_available, glsl_type::ivec4_type), \
> \
> - _##NAME(v130, glsl_type::uvec2_type), \
> - _##NAME(v130, glsl_type::uvec3_type), \
> - _##NAME(v130, glsl_type::uvec4_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec2_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec3_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec4_type), \
> \
> _##NAME(always_available, glsl_type::bvec2_type), \
> _##NAME(always_available, glsl_type::bvec3_type), \
> _##NAME(always_available, glsl_type::bvec4_type), \
> \
> _##NAME(fp64, glsl_type::dvec2_type), \
> _##NAME(fp64, glsl_type::dvec3_type), \
> _##NAME(fp64, glsl_type::dvec4_type), \
> _##NAME(int64, glsl_type::int64_t_type), \
> _##NAME(int64, glsl_type::i64vec2_type), \
> @@ -1464,28 +1477,28 @@ builtin_builder::create_builtins()
> \
> _##NAME(always_available, glsl_type::int_type, glsl_type::int_type), \
> _##NAME(always_available, glsl_type::ivec2_type, glsl_type::int_type), \
> _##NAME(always_available, glsl_type::ivec3_type, glsl_type::int_type), \
> _##NAME(always_available, glsl_type::ivec4_type, glsl_type::int_type), \
> \
> _##NAME(always_available, glsl_type::ivec2_type, glsl_type::ivec2_type), \
> _##NAME(always_available, glsl_type::ivec3_type, glsl_type::ivec3_type), \
> _##NAME(always_available, glsl_type::ivec4_type, glsl_type::ivec4_type), \
> \
> - _##NAME(v130, glsl_type::uint_type, glsl_type::uint_type), \
> - _##NAME(v130, glsl_type::uvec2_type, glsl_type::uint_type), \
> - _##NAME(v130, glsl_type::uvec3_type, glsl_type::uint_type), \
> - _##NAME(v130, glsl_type::uvec4_type, glsl_type::uint_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uint_type, glsl_type::uint_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec2_type, glsl_type::uint_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec3_type, glsl_type::uint_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec4_type, glsl_type::uint_type), \
> \
> - _##NAME(v130, glsl_type::uvec2_type, glsl_type::uvec2_type), \
> - _##NAME(v130, glsl_type::uvec3_type, glsl_type::uvec3_type), \
> - _##NAME(v130, glsl_type::uvec4_type, glsl_type::uvec4_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec2_type, glsl_type::uvec2_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec3_type, glsl_type::uvec3_type), \
> + _##NAME(v130_gpu_shader4, glsl_type::uvec4_type, glsl_type::uvec4_type), \
> \
> _##NAME(fp64, glsl_type::double_type, glsl_type::double_type), \
> _##NAME(fp64, glsl_type::dvec2_type, glsl_type::double_type), \
> _##NAME(fp64, glsl_type::dvec3_type, glsl_type::double_type), \
> _##NAME(fp64, glsl_type::dvec4_type, glsl_type::double_type), \
> _##NAME(fp64, glsl_type::dvec2_type, glsl_type::dvec2_type), \
> _##NAME(fp64, glsl_type::dvec3_type, glsl_type::dvec3_type), \
> _##NAME(fp64, glsl_type::dvec4_type, glsl_type::dvec4_type), \
> \
> _##NAME(int64, glsl_type::int64_t_type, glsl_type::int64_t_type), \
> @@ -1538,20 +1551,28 @@ builtin_builder::create_builtins()
> FD(inversesqrt)
> FI64(abs)
> FI64(sign)
> FD(floor)
> FD(trunc)
> FD(round)
> FD(roundEven)
> FD(ceil)
> FD(fract)
>
> + add_function("truncate",
> + _truncate(gpu_shader4, glsl_type::float_type),
> + _truncate(gpu_shader4, glsl_type::vec2_type),
> + _truncate(gpu_shader4, glsl_type::vec3_type),
> + _truncate(gpu_shader4, glsl_type::vec4_type),
> + NULL);
> +
> +
> add_function("mod",
> _mod(always_available, glsl_type::float_type, glsl_type::float_type),
> _mod(always_available, glsl_type::vec2_type, glsl_type::float_type),
> _mod(always_available, glsl_type::vec3_type, glsl_type::float_type),
> _mod(always_available, glsl_type::vec4_type, glsl_type::float_type),
>
> _mod(always_available, glsl_type::vec2_type, glsl_type::vec2_type),
> _mod(always_available, glsl_type::vec3_type, glsl_type::vec3_type),
> _mod(always_available, glsl_type::vec4_type, glsl_type::vec4_type),
>
> @@ -4066,20 +4087,21 @@ UNOP(log, ir_unop_log, always_available)
> UNOP(exp2, ir_unop_exp2, always_available)
> UNOP(log2, ir_unop_log2, always_available)
> UNOPA(sqrt, ir_unop_sqrt)
> UNOPA(inversesqrt, ir_unop_rsq)
>
> /** @} */
>
> UNOPA(abs, ir_unop_abs)
> UNOPA(sign, ir_unop_sign)
> UNOPA(floor, ir_unop_floor)
> +UNOPA(truncate, ir_unop_trunc)
> UNOPA(trunc, ir_unop_trunc)
> UNOPA(round, ir_unop_round_even)
> UNOPA(roundEven, ir_unop_round_even)
> UNOPA(ceil, ir_unop_ceil)
> UNOPA(fract, ir_unop_fract)
>
> ir_function_signature *
> builtin_builder::_mod(builtin_available_predicate avail,
> const glsl_type *x_type, const glsl_type *y_type)
> {
>
More information about the mesa-dev
mailing list