From ba392e9511d9cc22535b2b8b2d8dbafffa870731 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Fri, 28 May 2021 11:04:31 +0200 Subject: [PATCH] zink: implement half-float packing This cap isn't really optional for drivers that implement GL SPIR-V support, so let's just implement it. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4846 Reviewed-by: Hoe Hao Cheng Reviewed-By: Mike Blumenkrantz Part-of: --- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 3 +++ src/gallium/drivers/zink/zink_screen.c | 1 + 2 files changed, 4 insertions(+) diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index 6c7543d7da7..6e267f5363f 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -1654,6 +1654,9 @@ emit_alu(struct ntv_context *ctx, nir_alu_instr *alu) BUILTIN_UNOP(nir_op_ufind_msb, GLSLstd450FindUMsb) BUILTIN_UNOP(nir_op_find_lsb, GLSLstd450FindILsb) BUILTIN_UNOP(nir_op_ifind_msb, GLSLstd450FindSMsb) + BUILTIN_UNOP(nir_op_pack_half_2x16, GLSLstd450PackHalf2x16) + BUILTIN_UNOP(nir_op_unpack_half_2x16, GLSLstd450UnpackHalf2x16) + #undef BUILTIN_UNOP case nir_op_frcp: diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 2094f8c2312..d0f855f218d 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -254,6 +254,7 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_INVALIDATE_BUFFER: case PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0: case PIPE_CAP_PACKED_UNIFORMS: + case PIPE_CAP_TGSI_PACK_HALF_FLOAT: return 1; case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: