[Mesa-dev] [PATCH 23/59] glsl: Add 64-bit integer functions. (v2)
Matt Turner
mattst88 at gmail.com
Wed Oct 26 20:45:41 UTC 2016
On Tue, Oct 25, 2016 at 5:59 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Dave Airlie <airlied at 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 <airlied at redhat.com>
> Reviewed-by: Ian Romanick <ian.d.romanick at 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);
More information about the mesa-dev
mailing list