OSDN Git Service

radeonsi: fix si_build_wrapper_function for compute-based primitive culling
authorMarek Olšák <marek.olsak@amd.com>
Thu, 9 Jan 2020 02:51:23 +0000 (21:51 -0500)
committerMarge Bot <eric+marge@anholt.net>
Wed, 15 Jan 2020 20:17:23 +0000 (20:17 +0000)
Fixes: 3b143369a55 "ac/nir, radv, radeonsi: Switch to using ac_shader_args"

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3338>

src/gallium/drivers/radeonsi/si_shader.c

index 99d4f81..c229eb9 100644 (file)
@@ -4739,7 +4739,20 @@ void si_build_wrapper_function(struct si_shader_context *ctx, LLVMValueRef *part
                 */
                enum ac_arg_type arg_type = AC_ARG_INT;
                if (LLVMGetTypeKind(type) == LLVMPointerTypeKind) {
-                       arg_type = AC_ARG_CONST_PTR;
+                       type = LLVMGetElementType(type);
+
+                       if (LLVMGetTypeKind(type) == LLVMVectorTypeKind) {
+                               if (LLVMGetVectorSize(type) == 4)
+                                       arg_type = AC_ARG_CONST_DESC_PTR;
+                               else if (LLVMGetVectorSize(type) == 8)
+                                       arg_type = AC_ARG_CONST_IMAGE_PTR;
+                               else
+                                       assert(0);
+                       } else if (type == ctx->f32) {
+                               arg_type = AC_ARG_CONST_FLOAT_PTR;
+                       } else {
+                               assert(0);
+                       }
                }
 
                ac_add_arg(&ctx->args, gprs < num_sgprs ? AC_ARG_SGPR : AC_ARG_VGPR,