From 2942d3714e629345a99dda34667bf38192fcba3c Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 22 May 2025 16:08:23 -0400 Subject: [PATCH] vtn/opencl: Handle OpenCLstd_F{Min,Max}_common Normal fmin doesn't make any promises about NaN, common additionally doesn't make any promises about infinities. Would be nice to hook that up to codegen but lowering them to normal works for now. Cc: mesa-stable Reviewed-by: Karol Herbst Part-of: (cherry picked from commit 4b1c824b67134eeef5fe9e87e8b817e706dea6c1) --- .pick_status.json | 2 +- src/compiler/spirv/vtn_opencl.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 60d66a956ce..9627e5e5a4f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -474,7 +474,7 @@ "description": "vtn/opencl: Handle OpenCLstd_F{Min,Max}_common", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/compiler/spirv/vtn_opencl.c b/src/compiler/spirv/vtn_opencl.c index a824f4b3a14..a5cfd34a60d 100644 --- a/src/compiler/spirv/vtn_opencl.c +++ b/src/compiler/spirv/vtn_opencl.c @@ -267,6 +267,9 @@ nir_alu_op_for_opencl_opcode(struct vtn_builder *b, case OpenCLstd_Half_recip: return nir_op_frcp; /* uhm... */ case OpenCLstd_UAbs: return nir_op_mov; + // we could do better + case OpenCLstd_FMin_common: return nir_op_fmin; + case OpenCLstd_FMax_common: return nir_op_fmax; default: vtn_fail("No NIR equivalent"); } @@ -968,6 +971,8 @@ vtn_handle_opencl_instruction(struct vtn_builder *b, SpvOp ext_opcode, case OpenCLstd_Rint: case OpenCLstd_Half_divide: case OpenCLstd_Half_recip: + case OpenCLstd_FMin_common: + case OpenCLstd_FMax_common: handle_instr(b, ext_opcode, w + 5, count - 5, w + 1, handle_alu); return true; case OpenCLstd_SAbs_diff: