Mesa (master): vtn/opencl: Switch division-related ops to use libclc
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Sep 25 20:42:55 UTC 2020
Module: Mesa
Branch: master
Commit: 03fd217d219722dedc3c04726b2a4288e289179b
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=03fd217d219722dedc3c04726b2a4288e289179b
Author: Jesse Natalie <jenatali at microsoft.com>
Date: Tue Aug 18 07:55:42 2020 -0700
vtn/opencl: Switch division-related ops to use libclc
Specifically, fmod only uses libclc if it was going to be lowered.
Also, add missing half_divide and half_recip handling.
Acked-by: Jason Ekstrand <jason at jlekstrand.net>
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6035>
---
src/compiler/spirv/vtn_opencl.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/compiler/spirv/vtn_opencl.c b/src/compiler/spirv/vtn_opencl.c
index 1903ee0a561..86a33ac8d64 100644
--- a/src/compiler/spirv/vtn_opencl.c
+++ b/src/compiler/spirv/vtn_opencl.c
@@ -248,7 +248,6 @@ nir_alu_op_for_opencl_opcode(struct vtn_builder *b,
case OpenCLstd_Fmin: return nir_op_fmin;
case OpenCLstd_SMin: return nir_op_imin;
case OpenCLstd_UMin: return nir_op_umin;
- case OpenCLstd_Fmod: return nir_op_fmod;
case OpenCLstd_Mix: return nir_op_flrp;
case OpenCLstd_Native_cos: return nir_op_fcos;
case OpenCLstd_Native_divide: return nir_op_fdiv;
@@ -262,7 +261,6 @@ nir_alu_op_for_opencl_opcode(struct vtn_builder *b,
case OpenCLstd_SMul_hi: return nir_op_imul_high;
case OpenCLstd_UMul_hi: return nir_op_umul_high;
case OpenCLstd_Popcount: return nir_op_bit_count;
- case OpenCLstd_Remainder: return nir_op_frem;
case OpenCLstd_SRhadd: return nir_op_irhadd;
case OpenCLstd_URhadd: return nir_op_urhadd;
case OpenCLstd_Rsqrt: return nir_op_frsq;
@@ -272,6 +270,8 @@ nir_alu_op_for_opencl_opcode(struct vtn_builder *b,
case OpenCLstd_USub_sat: return nir_op_usub_sat;
case OpenCLstd_Trunc: return nir_op_ftrunc;
case OpenCLstd_Rint: return nir_op_fround_even;
+ case OpenCLstd_Half_divide: return nir_op_fdiv;
+ case OpenCLstd_Half_recip: return nir_op_frcp;
/* uhm... */
case OpenCLstd_UAbs: return nir_op_mov;
default:
@@ -528,6 +528,10 @@ handle_special(struct vtn_builder *b, uint32_t opcode,
return nir_fast_normalize(nb, srcs[0]);
case OpenCLstd_Length:
return nir_length(nb, srcs[0]);
+ case OpenCLstd_Fmod:
+ if (nb->shader->options->lower_fmod)
+ break;
+ return nir_fmod(nb, srcs[0], srcs[1]);
case OpenCLstd_Mad:
return nir_fmad(nb, srcs[0], srcs[1], srcs[2]);
case OpenCLstd_Maxmag:
@@ -781,11 +785,9 @@ vtn_handle_opencl_instruction(struct vtn_builder *b, SpvOp ext_opcode,
case OpenCLstd_Native_rsqrt:
case OpenCLstd_Native_sin:
case OpenCLstd_Native_sqrt:
- case OpenCLstd_Fmod:
case OpenCLstd_SMul_hi:
case OpenCLstd_UMul_hi:
case OpenCLstd_Popcount:
- case OpenCLstd_Remainder:
case OpenCLstd_SRhadd:
case OpenCLstd_URhadd:
case OpenCLstd_Rsqrt:
@@ -795,6 +797,8 @@ vtn_handle_opencl_instruction(struct vtn_builder *b, SpvOp ext_opcode,
case OpenCLstd_USub_sat:
case OpenCLstd_Trunc:
case OpenCLstd_Rint:
+ case OpenCLstd_Half_divide:
+ case OpenCLstd_Half_recip:
handle_instr(b, ext_opcode, w + 5, count - 5, w + 1, handle_alu);
return true;
case OpenCLstd_SAbs_diff:
@@ -855,6 +859,7 @@ vtn_handle_opencl_instruction(struct vtn_builder *b, SpvOp ext_opcode,
case OpenCLstd_Exp2:
case OpenCLstd_Expm1:
case OpenCLstd_Exp10:
+ case OpenCLstd_Fmod:
case OpenCLstd_Ilogb:
case OpenCLstd_Log:
case OpenCLstd_Log2:
@@ -881,6 +886,7 @@ vtn_handle_opencl_instruction(struct vtn_builder *b, SpvOp ext_opcode,
case OpenCLstd_Powr:
case OpenCLstd_Pown:
case OpenCLstd_Rootn:
+ case OpenCLstd_Remainder:
case OpenCLstd_Remquo:
case OpenCLstd_Hypot:
case OpenCLstd_Sincos:
More information about the mesa-commit
mailing list