From: Ian Romanick <ian.d.roman...@intel.com> If ARB_gpu_shader_int64 is supported, ARB_shader_clock also adds clockARB() that returns a uint64_t. Rather than add new opcodes and intrinsics for this, just wrap the existing intrinsic with a packUint2x32.
Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> Reviewed-by: Matt Turner <matts...@gmail.com> --- src/compiler/glsl/builtin_functions.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp index e02de3b..e9f089d 100644 --- a/src/compiler/glsl/builtin_functions.cpp +++ b/src/compiler/glsl/builtin_functions.cpp @@ -471,6 +471,13 @@ shader_clock(const _mesa_glsl_parse_state *state) } static bool +shader_clock_int64(const _mesa_glsl_parse_state *state) +{ + return state->ARB_shader_clock_enable && + state->ARB_gpu_shader_int64_enable; +} + +static bool shader_storage_buffer_object(const _mesa_glsl_parse_state *state) { return state->has_shader_storage_buffer_objects(); @@ -3086,6 +3093,11 @@ builtin_builder::create_builtins() glsl_type::uvec2_type), NULL); + add_function("clockARB", + _shader_clock(shader_clock_int64, + glsl_type::uint64_t_type), + NULL); + add_function("anyInvocationARB", _vote(ir_unop_vote_any), NULL); add_function("allInvocationsARB", _vote(ir_unop_vote_all), NULL); add_function("allInvocationsEqualARB", _vote(ir_unop_vote_eq), NULL); @@ -5857,7 +5869,13 @@ builtin_builder::_shader_clock(builtin_available_predicate avail, body.emit(call(shader->symbols->get_function("__intrinsic_shader_clock"), retval, sig->parameters)); - body.emit(ret(retval)); + + if (type == glsl_type::uint64_t_type) { + body.emit(ret(expr(ir_unop_pack_uint_2x32, retval))); + } else { + body.emit(ret(retval)); + } + return sig; } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev