[Mesa-dev] [PATCH] nir/vtn: fix OpConvertXToY
Rob Clark
robdclark at gmail.com
Wed Mar 14 15:08:44 UTC 2018
These opcodes don't care about src/dst type, only src/dst size.
Signed-off-by: Rob Clark <robdclark at gmail.com>
---
src/compiler/spirv/vtn_alu.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/compiler/spirv/vtn_alu.c b/src/compiler/spirv/vtn_alu.c
index f0b69b38f83..1ca1f951200 100644
--- a/src/compiler/spirv/vtn_alu.c
+++ b/src/compiler/spirv/vtn_alu.c
@@ -349,11 +349,17 @@ vtn_nir_alu_op_for_spirv_opcode(struct vtn_builder *b,
/* Conversions: */
case SpvOpQuantizeToF16: return nir_op_fquantize2f16;
+
+#define nir_type_cast(type, basetype) (nir_alu_type_get_type_size(type) | nir_type_ ## basetype)
+#define typed_conversion_op(src, srctype, dst, dsttype) \
+ nir_type_conversion_op(nir_type_cast(src, srctype), nir_type_cast(dst, dsttype), nir_rounding_mode_undef)
+
+ case SpvOpConvertFToU: return typed_conversion_op(src, float, dst, uint);
+ case SpvOpConvertFToS: return typed_conversion_op(src, float, dst, int);
+ case SpvOpConvertSToF: return typed_conversion_op(src, int, dst, float);
+ case SpvOpConvertUToF: return typed_conversion_op(src, uint, dst, float);
+
case SpvOpUConvert:
- case SpvOpConvertFToU:
- case SpvOpConvertFToS:
- case SpvOpConvertSToF:
- case SpvOpConvertUToF:
case SpvOpSConvert:
case SpvOpFConvert:
return nir_type_conversion_op(src, dst, nir_rounding_mode_undef);
--
2.14.3
More information about the mesa-dev
mailing list