From 50881d59e66fbf0be73cf61677754e512956fd84 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 18 Mar 2021 09:47:54 -0400 Subject: [PATCH] compiler/spirv: fix image sample queries this was only implemented for textures (I assume because drivers which implement the corresponding intrinsic don't support multisampled images), but it's also used for shader images Fixes: 22fdb2f8551 ("nir/spirv: Update to the latest revision") Reviewed-by: Jason Ekstrand Part-of: --- src/compiler/spirv/spirv_to_nir.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index e29bd39..270a3a2 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -3147,6 +3147,7 @@ vtn_handle_image(struct vtn_builder *b, SpvOp opcode, break; case SpvOpImageQuerySize: + case SpvOpImageQuerySamples: res_val = vtn_untyped_value(b, w[3]); image.image = vtn_get_image(b, w[3], &access); image.coord = NULL; @@ -3280,6 +3281,7 @@ vtn_handle_image(struct vtn_builder *b, SpvOp opcode, OP(AtomicFMaxEXT, atomic_fmax) OP(ImageQueryFormat, format) OP(ImageQueryOrder, order) + OP(ImageQuerySamples, samples) #undef OP default: vtn_fail_with_opcode("Invalid image opcode", opcode); @@ -3290,6 +3292,7 @@ vtn_handle_image(struct vtn_builder *b, SpvOp opcode, intrin->src[0] = nir_src_for_ssa(&image.image->dest.ssa); switch (opcode) { + case SpvOpImageQuerySamples: case SpvOpImageQuerySize: case SpvOpImageQuerySizeLod: case SpvOpImageQueryFormat: @@ -3321,6 +3324,7 @@ vtn_handle_image(struct vtn_builder *b, SpvOp opcode, nir_intrinsic_set_access(intrin, access); switch (opcode) { + case SpvOpImageQuerySamples: case SpvOpImageQueryFormat: case SpvOpImageQueryOrder: /* No additional sources */ @@ -5359,7 +5363,6 @@ vtn_handle_body_instruction(struct vtn_builder *b, SpvOp opcode, case SpvOpImageSparseDrefGather: case SpvOpImageQueryLod: case SpvOpImageQueryLevels: - case SpvOpImageQuerySamples: vtn_handle_texture(b, opcode, w, count); break; @@ -5372,6 +5375,7 @@ vtn_handle_body_instruction(struct vtn_builder *b, SpvOp opcode, vtn_handle_image(b, opcode, w, count); break; + case SpvOpImageQuerySamples: case SpvOpImageQuerySizeLod: case SpvOpImageQuerySize: { struct vtn_type *image_type = vtn_get_value_type(b, w[3]); -- 2.7.4