radeon/llvm: Export prepare_cube_coords helper to driver.
authorMichel Dänzer <michel.daenzer@amd.com>
Mon, 3 Dec 2012 11:45:41 +0000 (12:45 +0100)
committerMichel Dänzer <michel@daenzer.net>
Thu, 6 Dec 2012 19:18:40 +0000 (20:18 +0100)
To be used by radeonsi.

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeon/radeon_llvm.h
src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c

index 61975c4de090de1b8d106812e7868855b70b875e..61f37722f5d63679a49ffc23f9b73d1e6fbee117 100644 (file)
@@ -152,6 +152,9 @@ static inline LLVMValueRef bitcast(
 }
 
 
+void radeon_llvm_emit_prepare_cube_coords(struct lp_build_tgsi_context * bld_base,
+                                          LLVMValueRef *arg, unsigned target);
+
 void radeon_llvm_context_init(struct radeon_llvm_context * ctx);
 
 void radeon_llvm_dispose(struct radeon_llvm_context * ctx);
index 9cb0e9a1953372578c904e5c0e36b56792e9f0ac..db25c8922743441e34e54e7ce469f47afddf3bab 100644 (file)
@@ -514,11 +514,12 @@ static void kil_emit(
 }
 
 
-static void emit_prepare_cube_coords(
+void radeon_llvm_emit_prepare_cube_coords(
                struct lp_build_tgsi_context * bld_base,
-               struct lp_build_emit_data * emit_data)
+               LLVMValueRef *arg,
+                unsigned target)
 {
-       boolean shadowcube = (emit_data->inst->Texture.Texture == TGSI_TEXTURE_SHADOWCUBE);
+       boolean shadowcube = (target == TGSI_TEXTURE_SHADOWCUBE);
        struct gallivm_state * gallivm = bld_base->base.gallivm;
        LLVMBuilderRef builder = gallivm->builder;
        LLVMTypeRef type = bld_base->base.elem_type;
@@ -528,7 +529,7 @@ static void emit_prepare_cube_coords(
 
        LLVMValueRef v = build_intrinsic(builder, "llvm.AMDGPU.cube",
                        LLVMVectorType(type, 4),
-                       &emit_data->args[0],1, LLVMReadNoneAttribute);
+                       arg, 1, LLVMReadNoneAttribute);
 
        /* save src.w for shadow cube */
        cnt = shadowcube ? 3 : 4;
@@ -559,8 +560,7 @@ static void emit_prepare_cube_coords(
        coords[1] = coords[0];
        coords[0] = coords[3];
 
-       emit_data->args[0] = lp_build_gather_values(bld_base->base.gallivm,
-                                               coords, 4);
+       *arg = lp_build_gather_values(bld_base->base.gallivm, coords, 4);
 }
 
 static void txd_fetch_args(
@@ -609,7 +609,8 @@ static void txp_fetch_args(
        if ((inst->Texture.Texture == TGSI_TEXTURE_CUBE ||
             inst->Texture.Texture == TGSI_TEXTURE_SHADOWCUBE) &&
            inst->Instruction.Opcode != TGSI_OPCODE_TXQ) {
-               emit_prepare_cube_coords(bld_base, emit_data);
+               radeon_llvm_emit_prepare_cube_coords(bld_base, &emit_data->args[0],
+                                                     inst->Texture.Texture);
        }
 }
 
@@ -641,7 +642,8 @@ static void tex_fetch_args(
        if ((inst->Texture.Texture == TGSI_TEXTURE_CUBE ||
             inst->Texture.Texture == TGSI_TEXTURE_SHADOWCUBE) &&
            inst->Instruction.Opcode != TGSI_OPCODE_TXQ) {
-               emit_prepare_cube_coords(bld_base, emit_data);
+               radeon_llvm_emit_prepare_cube_coords(bld_base, &emit_data->args[0],
+                                                     inst->Texture.Texture);
        }
 }