[Mesa-dev] [PATCH 08/11] glsl: add arithmetic builtin functions for EXT_gpu_shader4

Marek Olšák maraeo at gmail.com
Wed Aug 8 05:42:05 UTC 2018


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)
+{
+   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)
 {
-- 
2.17.1



More information about the mesa-dev mailing list