radeonsi: Create a helper function for computing the thread id
authorTom Stellard <thomas.stellard@amd.com>
Mon, 18 Apr 2016 17:10:10 +0000 (13:10 -0400)
committerTom Stellard <thomas.stellard@amd.com>
Fri, 22 Apr 2016 23:45:34 +0000 (23:45 +0000)
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_shader.c

index c6efbc13774a08c7010011dbf64b7525e88494a3..a8749e4ee94dbf75e48de5d69fd21320defee287 100644 (file)
@@ -1116,6 +1116,14 @@ static LLVMValueRef get_sample_id(struct radeon_llvm_context *radeon_bld)
                            SI_PARAM_ANCILLARY, 8, 4);
 }
 
+static LLVMValueRef get_thread_id(struct si_shader_context *ctx)
+{
+       struct gallivm_state *gallivm = &ctx->radeon_bld.gallivm;
+
+       return lp_build_intrinsic(gallivm->builder, "llvm.SI.tid", ctx->i32,
+                                          NULL, 0, LLVMReadNoneAttribute);
+}
+
 /**
  * Load a dword from a constant buffer.
  */
@@ -1863,8 +1871,7 @@ static void si_llvm_emit_streamout(struct si_shader_context *ctx,
        LLVMValueRef so_vtx_count =
                unpack_param(ctx, ctx->param_streamout_config, 16, 7);
 
-       LLVMValueRef tid = lp_build_intrinsic(builder, "llvm.SI.tid", ctx->i32,
-                                          NULL, 0, LLVMReadNoneAttribute);
+       LLVMValueRef tid = get_thread_id(ctx);
 
        /* can_emit = tid < so_vtx_count; */
        LLVMValueRef can_emit =
@@ -4365,8 +4372,7 @@ static void si_llvm_emit_ddxy(
        unsigned mask;
 
        indices[0] = bld_base->uint_bld.zero;
-       indices[1] = lp_build_intrinsic(gallivm->builder, "llvm.SI.tid", ctx->i32,
-                                    NULL, 0, LLVMReadNoneAttribute);
+       indices[1] = get_thread_id(ctx);
        store_ptr = LLVMBuildGEP(gallivm->builder, ctx->lds,
                                 indices, 2, "");
 
@@ -4437,8 +4443,7 @@ static LLVMValueRef si_llvm_emit_ddxy_interp(
        unsigned c;
 
        indices[0] = bld_base->uint_bld.zero;
-       indices[1] = lp_build_intrinsic(gallivm->builder, "llvm.SI.tid", ctx->i32,
-                                       NULL, 0, LLVMReadNoneAttribute);
+       indices[1] = get_thread_id(ctx);
        store_ptr = LLVMBuildGEP(gallivm->builder, ctx->lds,
                                 indices, 2, "");