On Tue, Oct 25, 2016 at 5:59 PM, Ian Romanick <i...@freedesktop.org> wrote: > From: Dave Airlie <airl...@redhat.com> > > These are all the allowed 64-bit functions from ARB_gpu_shader_int64 > spec. > > v2: restrict int64/double functions better. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> > --- > src/compiler/glsl/builtin_functions.cpp | 179 > +++++++++++++++++++++++++++++++- > 1 file changed, 176 insertions(+), 3 deletions(-) > > diff --git a/src/compiler/glsl/builtin_functions.cpp > b/src/compiler/glsl/builtin_functions.cpp > index 3e4bcbb..8ccb5d9 100644 > --- a/src/compiler/glsl/builtin_functions.cpp > +++ b/src/compiler/glsl/builtin_functions.cpp > @@ -532,6 +532,18 @@ fp64(const _mesa_glsl_parse_state *state) > } > > static bool > +int64(const _mesa_glsl_parse_state *state) > +{ > + return state->has_int64(); > +} > + > +static bool > +int64_fp64(const _mesa_glsl_parse_state *state) > +{ > + return state->has_int64() && state->has_double(); > +} > + > +static bool > compute_shader(const _mesa_glsl_parse_state *state) > { > return state->stage == MESA_SHADER_COMPUTE; > @@ -723,6 +735,12 @@ private: > B1(floatBitsToUint) > B1(intBitsToFloat) > B1(uintBitsToFloat) > + > + BA1(doubleBitsToInt64) > + BA1(doubleBitsToUint64) > + BA1(int64BitsToDouble) > + BA1(uint64BitsToDouble) > + > ir_function_signature *_packUnorm2x16(builtin_available_predicate avail); > ir_function_signature *_packSnorm2x16(builtin_available_predicate avail); > ir_function_signature *_packUnorm4x8(builtin_available_predicate avail); > @@ -735,6 +753,10 @@ private: > ir_function_signature *_unpackHalf2x16(builtin_available_predicate avail); > ir_function_signature *_packDouble2x32(builtin_available_predicate avail); > ir_function_signature *_unpackDouble2x32(builtin_available_predicate > avail); > + ir_function_signature *_packInt2x32(builtin_available_predicate avail); > + ir_function_signature *_unpackInt2x32(builtin_available_predicate avail); > + ir_function_signature *_packUint2x32(builtin_available_predicate avail); > + ir_function_signature *_unpackUint2x32(builtin_available_predicate avail); > > BA1(length) > BA1(distance); > @@ -1184,7 +1206,7 @@ builtin_builder::create_builtins() > _##NAME(glsl_type::ivec4_type), \ > NULL); > > -#define FID(NAME) \ > +#define FI64(NAME) \ > add_function(#NAME, \ > _##NAME(always_available, glsl_type::float_type), \ > _##NAME(always_available, glsl_type::vec2_type), \ > @@ -1198,6 +1220,10 @@ builtin_builder::create_builtins() > _##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), \ > NULL); > > #define FIUD(NAME) \ > @@ -1220,6 +1246,14 @@ builtin_builder::create_builtins() > _##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), \ > + _##NAME(int64, glsl_type::u64vec4_type), \ > NULL); > > #define IU(NAME) \ > @@ -1261,6 +1295,14 @@ builtin_builder::create_builtins() > _##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), \ > + _##NAME(int64, glsl_type::u64vec4_type), \ > NULL); > > #define FIUD2_MIXED(NAME) > \ > @@ -1299,6 +1341,21 @@ builtin_builder::create_builtins() > _##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), \ > + _##NAME(int64, glsl_type::i64vec2_type, > glsl_type::int64_t_type), \ > + _##NAME(int64, glsl_type::i64vec3_type, > glsl_type::int64_t_type), \ > + _##NAME(int64, glsl_type::i64vec4_type, > glsl_type::int64_t_type), \ > + _##NAME(int64, glsl_type::i64vec2_type, > glsl_type::i64vec2_type), \ > + _##NAME(int64, glsl_type::i64vec3_type, > glsl_type::i64vec3_type), \ > + _##NAME(int64, glsl_type::i64vec4_type, > glsl_type::i64vec4_type), \ > + _##NAME(int64, glsl_type::uint64_t_type, > glsl_type::uint64_t_type), \ > + _##NAME(int64, glsl_type::u64vec2_type, > glsl_type::uint64_t_type), \ > + _##NAME(int64, glsl_type::u64vec3_type, > glsl_type::uint64_t_type), \ > + _##NAME(int64, glsl_type::u64vec4_type, > glsl_type::uint64_t_type), \ > + _##NAME(int64, glsl_type::u64vec2_type, > glsl_type::u64vec2_type), \ > + _##NAME(int64, glsl_type::u64vec3_type, > glsl_type::u64vec3_type), \ > + _##NAME(int64, glsl_type::u64vec4_type, > glsl_type::u64vec4_type), \ > NULL); > > F(radians) > @@ -1333,8 +1390,8 @@ builtin_builder::create_builtins() > F(log2) > FD(sqrt) > FD(inversesqrt) > - FID(abs) > - FID(sign) > + FI64(abs) > + FI64(sign) > FD(floor) > FD(trunc) > FD(round) > @@ -1411,6 +1468,18 @@ builtin_builder::create_builtins() > _mix_sel(shader_integer_mix, glsl_type::bvec2_type, > glsl_type::bvec2_type), > _mix_sel(shader_integer_mix, glsl_type::bvec3_type, > glsl_type::bvec3_type), > _mix_sel(shader_integer_mix, glsl_type::bvec4_type, > glsl_type::bvec4_type), > + > + _mix_sel(int64, glsl_type::int64_t_type, > glsl_type::bool_type), > + _mix_sel(int64, glsl_type::i64vec2_type, > glsl_type::bvec2_type), > + _mix_sel(int64, glsl_type::i64vec3_type, > glsl_type::bvec3_type), > + _mix_sel(int64, glsl_type::i64vec4_type, > glsl_type::bvec4_type), > + > + _mix_sel(int64, glsl_type::uint64_t_type, > glsl_type::bool_type), > + _mix_sel(int64, glsl_type::u64vec2_type, > glsl_type::bvec2_type), > + _mix_sel(int64, glsl_type::u64vec3_type, > glsl_type::bvec3_type), > + _mix_sel(int64, glsl_type::u64vec4_type, > glsl_type::bvec4_type), > + > +
Two extra newlines. > NULL); _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev