mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 07:30:09 +01:00
gallium/radeon: normalize the code style
no change in behavior Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
ed3912d0da
commit
f2f573e777
2 changed files with 286 additions and 338 deletions
|
|
@ -66,15 +66,15 @@ struct radeon_llvm_context {
|
|||
* called once for each input declared in the TGSI shader.
|
||||
*/
|
||||
void (*load_input)(struct radeon_llvm_context *,
|
||||
unsigned input_index,
|
||||
const struct tgsi_full_declaration *decl);
|
||||
unsigned input_index,
|
||||
const struct tgsi_full_declaration *decl);
|
||||
|
||||
void (*load_system_value)(struct radeon_llvm_context *,
|
||||
unsigned index,
|
||||
const struct tgsi_full_declaration *decl);
|
||||
unsigned index,
|
||||
const struct tgsi_full_declaration *decl);
|
||||
|
||||
void (*declare_memory_region)(struct radeon_llvm_context *,
|
||||
const struct tgsi_full_declaration *decl);
|
||||
const struct tgsi_full_declaration *decl);
|
||||
|
||||
/** This array contains the input values for the shader. Typically these
|
||||
* values will be in the form of a target intrinsic that will inform the
|
||||
|
|
@ -112,77 +112,38 @@ struct radeon_llvm_context {
|
|||
struct gallivm_state gallivm;
|
||||
};
|
||||
|
||||
static inline LLVMTypeRef tgsi2llvmtype(
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
enum tgsi_opcode_type type)
|
||||
{
|
||||
LLVMContextRef ctx = bld_base->base.gallivm->context;
|
||||
LLVMTypeRef tgsi2llvmtype(struct lp_build_tgsi_context *bld_base,
|
||||
enum tgsi_opcode_type type);
|
||||
|
||||
switch (type) {
|
||||
case TGSI_TYPE_UNSIGNED:
|
||||
case TGSI_TYPE_SIGNED:
|
||||
return LLVMInt32TypeInContext(ctx);
|
||||
case TGSI_TYPE_DOUBLE:
|
||||
return LLVMDoubleTypeInContext(ctx);
|
||||
case TGSI_TYPE_UNTYPED:
|
||||
case TGSI_TYPE_FLOAT:
|
||||
return LLVMFloatTypeInContext(ctx);
|
||||
default: break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
LLVMValueRef bitcast(struct lp_build_tgsi_context *bld_base,
|
||||
enum tgsi_opcode_type type, LLVMValueRef value);
|
||||
|
||||
static inline LLVMValueRef bitcast(
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
enum tgsi_opcode_type type,
|
||||
LLVMValueRef value
|
||||
)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
LLVMTypeRef dst_type = tgsi2llvmtype(bld_base, type);
|
||||
|
||||
if (dst_type)
|
||||
return LLVMBuildBitCast(builder, value, dst_type, "");
|
||||
else
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
void radeon_llvm_emit_prepare_cube_coords(struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data,
|
||||
void radeon_llvm_emit_prepare_cube_coords(struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data,
|
||||
LLVMValueRef *coords_arg,
|
||||
LLVMValueRef *derivs_arg);
|
||||
|
||||
void radeon_llvm_context_init(struct radeon_llvm_context * ctx,
|
||||
void radeon_llvm_context_init(struct radeon_llvm_context *ctx,
|
||||
const char *triple);
|
||||
|
||||
void radeon_llvm_create_func(struct radeon_llvm_context * ctx,
|
||||
void radeon_llvm_create_func(struct radeon_llvm_context *ctx,
|
||||
LLVMTypeRef *return_types, unsigned num_return_elems,
|
||||
LLVMTypeRef *ParamTypes, unsigned ParamCount);
|
||||
|
||||
void radeon_llvm_dispose(struct radeon_llvm_context * ctx);
|
||||
|
||||
inline static struct radeon_llvm_context * radeon_llvm_context(
|
||||
struct lp_build_tgsi_context * bld_base)
|
||||
{
|
||||
return (struct radeon_llvm_context*)bld_base;
|
||||
}
|
||||
void radeon_llvm_dispose(struct radeon_llvm_context *ctx);
|
||||
|
||||
unsigned radeon_llvm_reg_index_soa(unsigned index, unsigned chan);
|
||||
|
||||
void radeon_llvm_finalize_module(struct radeon_llvm_context * ctx);
|
||||
void radeon_llvm_finalize_module(struct radeon_llvm_context *ctx);
|
||||
|
||||
void
|
||||
build_tgsi_intrinsic_nomem(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data);
|
||||
void build_tgsi_intrinsic_nomem(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data);
|
||||
|
||||
LLVMValueRef
|
||||
radeon_llvm_emit_fetch_64bit(struct lp_build_tgsi_context *bld_base,
|
||||
enum tgsi_opcode_type type,
|
||||
LLVMValueRef ptr,
|
||||
LLVMValueRef ptr2);
|
||||
LLVMValueRef radeon_llvm_emit_fetch_64bit(struct lp_build_tgsi_context *bld_base,
|
||||
enum tgsi_opcode_type type,
|
||||
LLVMValueRef ptr,
|
||||
LLVMValueRef ptr2);
|
||||
|
||||
LLVMValueRef radeon_llvm_saturate(struct lp_build_tgsi_context *bld_base,
|
||||
LLVMValueRef value);
|
||||
|
|
@ -192,10 +153,15 @@ LLVMValueRef radeon_llvm_emit_fetch(struct lp_build_tgsi_context *bld_base,
|
|||
enum tgsi_opcode_type type,
|
||||
unsigned swizzle);
|
||||
|
||||
void radeon_llvm_emit_store(
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
const struct tgsi_full_instruction * inst,
|
||||
const struct tgsi_opcode_info * info,
|
||||
LLVMValueRef dst[4]);
|
||||
void radeon_llvm_emit_store(struct lp_build_tgsi_context *bld_base,
|
||||
const struct tgsi_full_instruction *inst,
|
||||
const struct tgsi_opcode_info *info,
|
||||
LLVMValueRef dst[4]);
|
||||
|
||||
static inline struct radeon_llvm_context *
|
||||
radeon_llvm_context(struct lp_build_tgsi_context *bld_base)
|
||||
{
|
||||
return (struct radeon_llvm_context*)bld_base;
|
||||
}
|
||||
|
||||
#endif /* RADEON_LLVM_H */
|
||||
|
|
|
|||
|
|
@ -41,13 +41,43 @@
|
|||
#include <llvm-c/Core.h>
|
||||
#include <llvm-c/Transforms/Scalar.h>
|
||||
|
||||
static struct radeon_llvm_loop * get_current_loop(struct radeon_llvm_context * ctx)
|
||||
LLVMTypeRef tgsi2llvmtype(struct lp_build_tgsi_context *bld_base,
|
||||
enum tgsi_opcode_type type)
|
||||
{
|
||||
LLVMContextRef ctx = bld_base->base.gallivm->context;
|
||||
|
||||
switch (type) {
|
||||
case TGSI_TYPE_UNSIGNED:
|
||||
case TGSI_TYPE_SIGNED:
|
||||
return LLVMInt32TypeInContext(ctx);
|
||||
case TGSI_TYPE_DOUBLE:
|
||||
return LLVMDoubleTypeInContext(ctx);
|
||||
case TGSI_TYPE_UNTYPED:
|
||||
case TGSI_TYPE_FLOAT:
|
||||
return LLVMFloatTypeInContext(ctx);
|
||||
default: break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
LLVMValueRef bitcast(struct lp_build_tgsi_context *bld_base,
|
||||
enum tgsi_opcode_type type, LLVMValueRef value)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
LLVMTypeRef dst_type = tgsi2llvmtype(bld_base, type);
|
||||
|
||||
if (dst_type)
|
||||
return LLVMBuildBitCast(builder, value, dst_type, "");
|
||||
else
|
||||
return value;
|
||||
}
|
||||
|
||||
static struct radeon_llvm_loop *get_current_loop(struct radeon_llvm_context *ctx)
|
||||
{
|
||||
return ctx->loop_depth > 0 ? ctx->loop + (ctx->loop_depth - 1) : NULL;
|
||||
}
|
||||
|
||||
static struct radeon_llvm_branch * get_current_branch(
|
||||
struct radeon_llvm_context * ctx)
|
||||
static struct radeon_llvm_branch *get_current_branch(struct radeon_llvm_context *ctx)
|
||||
{
|
||||
return ctx->branch_depth > 0 ?
|
||||
ctx->branch + (ctx->branch_depth - 1) : NULL;
|
||||
|
|
@ -55,16 +85,15 @@ static struct radeon_llvm_branch * get_current_branch(
|
|||
|
||||
unsigned radeon_llvm_reg_index_soa(unsigned index, unsigned chan)
|
||||
{
|
||||
return (index * 4) + chan;
|
||||
return (index * 4) + chan;
|
||||
}
|
||||
|
||||
static LLVMValueRef emit_swizzle(
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
LLVMValueRef value,
|
||||
unsigned swizzle_x,
|
||||
unsigned swizzle_y,
|
||||
unsigned swizzle_z,
|
||||
unsigned swizzle_w)
|
||||
static LLVMValueRef emit_swizzle(struct lp_build_tgsi_context *bld_base,
|
||||
LLVMValueRef value,
|
||||
unsigned swizzle_x,
|
||||
unsigned swizzle_y,
|
||||
unsigned swizzle_z,
|
||||
unsigned swizzle_w)
|
||||
{
|
||||
LLVMValueRef swizzles[4];
|
||||
LLVMTypeRef i32t =
|
||||
|
|
@ -76,9 +105,9 @@ static LLVMValueRef emit_swizzle(
|
|||
swizzles[3] = LLVMConstInt(i32t, swizzle_w, 0);
|
||||
|
||||
return LLVMBuildShuffleVector(bld_base->base.gallivm->builder,
|
||||
value,
|
||||
LLVMGetUndef(LLVMTypeOf(value)),
|
||||
LLVMConstVector(swizzles, 4), "");
|
||||
value,
|
||||
LLVMGetUndef(LLVMTypeOf(value)),
|
||||
LLVMConstVector(swizzles, 4), "");
|
||||
}
|
||||
|
||||
static struct tgsi_declaration_range
|
||||
|
|
@ -86,7 +115,7 @@ get_array_range(struct lp_build_tgsi_context *bld_base,
|
|||
unsigned File, unsigned reg_index,
|
||||
const struct tgsi_ind_register *reg)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
|
||||
if (!reg) {
|
||||
unsigned i;
|
||||
|
|
@ -112,18 +141,16 @@ get_array_range(struct lp_build_tgsi_context *bld_base,
|
|||
return ctx->arrays[reg->ArrayID - 1].range;
|
||||
}
|
||||
|
||||
static LLVMValueRef get_alloca_for_array(
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
unsigned file,
|
||||
unsigned index) {
|
||||
|
||||
static LLVMValueRef get_alloca_for_array(struct lp_build_tgsi_context *bld_base,
|
||||
unsigned file,
|
||||
unsigned index)
|
||||
{
|
||||
unsigned i;
|
||||
unsigned num_arrays;
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
|
||||
if (file != TGSI_FILE_TEMPORARY) {
|
||||
if (file != TGSI_FILE_TEMPORARY)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
num_arrays = bld_base->info->array_max[TGSI_FILE_TEMPORARY];
|
||||
for (i = 0; i < num_arrays; i++) {
|
||||
|
|
@ -138,12 +165,11 @@ static LLVMValueRef get_alloca_for_array(
|
|||
}
|
||||
|
||||
static LLVMValueRef
|
||||
emit_array_index(
|
||||
struct lp_build_tgsi_soa_context *bld,
|
||||
const struct tgsi_ind_register *reg,
|
||||
unsigned offset)
|
||||
emit_array_index(struct lp_build_tgsi_soa_context *bld,
|
||||
const struct tgsi_ind_register *reg,
|
||||
unsigned offset)
|
||||
{
|
||||
struct gallivm_state * gallivm = bld->bld_base.base.gallivm;
|
||||
struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
|
||||
|
||||
if (!reg) {
|
||||
return lp_build_const_int32(gallivm, offset);
|
||||
|
|
@ -153,11 +179,10 @@ emit_array_index(
|
|||
}
|
||||
|
||||
LLVMValueRef
|
||||
radeon_llvm_emit_fetch_64bit(
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
enum tgsi_opcode_type type,
|
||||
LLVMValueRef ptr,
|
||||
LLVMValueRef ptr2)
|
||||
radeon_llvm_emit_fetch_64bit(struct lp_build_tgsi_context *bld_base,
|
||||
enum tgsi_opcode_type type,
|
||||
LLVMValueRef ptr,
|
||||
LLVMValueRef ptr2)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
LLVMValueRef result;
|
||||
|
|
@ -176,14 +201,13 @@ radeon_llvm_emit_fetch_64bit(
|
|||
}
|
||||
|
||||
static LLVMValueRef
|
||||
emit_array_fetch(
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
unsigned File, enum tgsi_opcode_type type,
|
||||
struct tgsi_declaration_range range,
|
||||
unsigned swizzle)
|
||||
emit_array_fetch(struct lp_build_tgsi_context *bld_base,
|
||||
unsigned File, enum tgsi_opcode_type type,
|
||||
struct tgsi_declaration_range range,
|
||||
unsigned swizzle)
|
||||
{
|
||||
struct lp_build_tgsi_soa_context *bld = lp_soa_context(bld_base);
|
||||
struct gallivm_state * gallivm = bld->bld_base.base.gallivm;
|
||||
struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
|
||||
unsigned i, size = range.Last - range.First + 1;
|
||||
|
|
@ -203,13 +227,12 @@ emit_array_fetch(
|
|||
}
|
||||
|
||||
static LLVMValueRef
|
||||
load_value_from_array(
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
unsigned file,
|
||||
enum tgsi_opcode_type type,
|
||||
unsigned swizzle,
|
||||
unsigned reg_index,
|
||||
const struct tgsi_ind_register *reg_indirect)
|
||||
load_value_from_array(struct lp_build_tgsi_context *bld_base,
|
||||
unsigned file,
|
||||
enum tgsi_opcode_type type,
|
||||
unsigned swizzle,
|
||||
unsigned reg_index,
|
||||
const struct tgsi_ind_register *reg_indirect)
|
||||
{
|
||||
struct lp_build_tgsi_soa_context *bld = lp_soa_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
|
|
@ -243,13 +266,13 @@ load_value_from_array(
|
|||
return val;
|
||||
}
|
||||
|
||||
static LLVMValueRef store_value_to_array(
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
LLVMValueRef value,
|
||||
unsigned file,
|
||||
unsigned chan_index,
|
||||
unsigned reg_index,
|
||||
const struct tgsi_ind_register *reg_indirect)
|
||||
static LLVMValueRef
|
||||
store_value_to_array(struct lp_build_tgsi_context *bld_base,
|
||||
LLVMValueRef value,
|
||||
unsigned file,
|
||||
unsigned chan_index,
|
||||
unsigned reg_index,
|
||||
const struct tgsi_ind_register *reg_indirect)
|
||||
{
|
||||
struct lp_build_tgsi_soa_context *bld = lp_soa_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
|
|
@ -279,7 +302,7 @@ LLVMValueRef radeon_llvm_emit_fetch(struct lp_build_tgsi_context *bld_base,
|
|||
enum tgsi_opcode_type type,
|
||||
unsigned swizzle)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct lp_build_tgsi_soa_context *bld = lp_soa_context(bld_base);
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
LLVMValueRef result = NULL, ptr, ptr2;
|
||||
|
|
@ -362,13 +385,12 @@ LLVMValueRef radeon_llvm_emit_fetch(struct lp_build_tgsi_context *bld_base,
|
|||
return bitcast(bld_base, type, result);
|
||||
}
|
||||
|
||||
static LLVMValueRef fetch_system_value(
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
const struct tgsi_full_src_register *reg,
|
||||
enum tgsi_opcode_type type,
|
||||
unsigned swizzle)
|
||||
static LLVMValueRef fetch_system_value(struct lp_build_tgsi_context *bld_base,
|
||||
const struct tgsi_full_src_register *reg,
|
||||
enum tgsi_opcode_type type,
|
||||
unsigned swizzle)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
|
||||
LLVMValueRef cval = ctx->system_values[reg->Register.Index];
|
||||
|
|
@ -388,11 +410,10 @@ static LLVMValueRef si_build_alloca_undef(struct gallivm_state *gallivm,
|
|||
return ptr;
|
||||
}
|
||||
|
||||
static void emit_declaration(
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
const struct tgsi_full_declaration *decl)
|
||||
static void emit_declaration(struct lp_build_tgsi_context *bld_base,
|
||||
const struct tgsi_full_declaration *decl)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
unsigned first, last, i, idx;
|
||||
switch(decl->Declaration.File) {
|
||||
|
|
@ -516,13 +537,12 @@ LLVMValueRef radeon_llvm_saturate(struct lp_build_tgsi_context *bld_base,
|
|||
&clamp_emit_data);
|
||||
}
|
||||
|
||||
void radeon_llvm_emit_store(
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
const struct tgsi_full_instruction * inst,
|
||||
const struct tgsi_opcode_info * info,
|
||||
LLVMValueRef dst[4])
|
||||
void radeon_llvm_emit_store(struct lp_build_tgsi_context *bld_base,
|
||||
const struct tgsi_full_instruction *inst,
|
||||
const struct tgsi_opcode_info *info,
|
||||
LLVMValueRef dst[4])
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct lp_build_tgsi_soa_context *bld = lp_soa_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
|
||||
const struct tgsi_full_dst_register *reg = &inst->Dst[0];
|
||||
|
|
@ -644,13 +664,12 @@ void radeon_llvm_emit_store(
|
|||
}
|
||||
}
|
||||
|
||||
static void bgnloop_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void bgnloop_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMBasicBlockRef loop_block;
|
||||
LLVMBasicBlockRef endloop_block;
|
||||
endloop_block = LLVMAppendBasicBlockInContext(gallivm->context,
|
||||
|
|
@ -676,38 +695,35 @@ static void bgnloop_emit(
|
|||
ctx->loop[ctx->loop_depth - 1].endloop_block = endloop_block;
|
||||
}
|
||||
|
||||
static void brk_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void brk_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_loop * current_loop = get_current_loop(ctx);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_loop *current_loop = get_current_loop(ctx);
|
||||
|
||||
LLVMBuildBr(gallivm->builder, current_loop->endloop_block);
|
||||
}
|
||||
|
||||
static void cont_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void cont_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_loop * current_loop = get_current_loop(ctx);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_loop *current_loop = get_current_loop(ctx);
|
||||
|
||||
LLVMBuildBr(gallivm->builder, current_loop->loop_block);
|
||||
}
|
||||
|
||||
static void else_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void else_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_branch * current_branch = get_current_branch(ctx);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_branch *current_branch = get_current_branch(ctx);
|
||||
LLVMBasicBlockRef current_block = LLVMGetInsertBlock(gallivm->builder);
|
||||
|
||||
/* We need to add a terminator to the current block if the previous
|
||||
|
|
@ -734,14 +750,13 @@ static void else_emit(
|
|||
LLVMPositionBuilderAtEnd(gallivm->builder, current_branch->else_block);
|
||||
}
|
||||
|
||||
static void endif_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void endif_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_branch * current_branch = get_current_branch(ctx);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_branch *current_branch = get_current_branch(ctx);
|
||||
LLVMBasicBlockRef current_block = LLVMGetInsertBlock(gallivm->builder);
|
||||
|
||||
/* If we have consecutive ENDIF instructions, then the first ENDIF
|
||||
|
|
@ -766,14 +781,13 @@ static void endif_emit(
|
|||
ctx->branch_depth--;
|
||||
}
|
||||
|
||||
static void endloop_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void endloop_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_loop * current_loop = get_current_loop(ctx);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_loop *current_loop = get_current_loop(ctx);
|
||||
|
||||
if (!LLVMGetBasicBlockTerminator(LLVMGetInsertBlock(gallivm->builder))) {
|
||||
LLVMBuildBr(gallivm->builder, current_loop->loop_block);
|
||||
|
|
@ -783,14 +797,13 @@ static void endloop_emit(
|
|||
ctx->loop_depth--;
|
||||
}
|
||||
|
||||
static void if_cond_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data,
|
||||
LLVMValueRef cond)
|
||||
static void if_cond_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data,
|
||||
LLVMValueRef cond)
|
||||
{
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMBasicBlockRef if_block, else_block, endif_block;
|
||||
|
||||
endif_block = LLVMAppendBasicBlockInContext(gallivm->context,
|
||||
|
|
@ -820,12 +833,11 @@ static void if_cond_emit(
|
|||
ctx->branch[ctx->branch_depth - 1].has_else = 0;
|
||||
}
|
||||
|
||||
static void if_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void if_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMValueRef cond;
|
||||
|
||||
cond = LLVMBuildFCmp(gallivm->builder, LLVMRealUNE,
|
||||
|
|
@ -835,12 +847,11 @@ static void if_emit(
|
|||
if_cond_emit(action, bld_base, emit_data, cond);
|
||||
}
|
||||
|
||||
static void uif_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void uif_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMValueRef cond;
|
||||
|
||||
cond = LLVMBuildICmp(gallivm->builder, LLVMIntNE,
|
||||
|
|
@ -850,11 +861,10 @@ static void uif_emit(
|
|||
if_cond_emit(action, bld_base, emit_data, cond);
|
||||
}
|
||||
|
||||
static void kill_if_fetch_args(
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void kill_if_fetch_args(struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
const struct tgsi_full_instruction * inst = emit_data->inst;
|
||||
const struct tgsi_full_instruction *inst = emit_data->inst;
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMBuilderRef builder = gallivm->builder;
|
||||
unsigned i;
|
||||
|
|
@ -878,10 +888,9 @@ static void kill_if_fetch_args(
|
|||
bld_base->base.zero, "");
|
||||
}
|
||||
|
||||
static void kil_emit(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void kil_emit(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < emit_data->arg_count; i++) {
|
||||
|
|
@ -895,7 +904,7 @@ static void kil_emit(
|
|||
static void radeon_llvm_cube_to_2d_coords(struct lp_build_tgsi_context *bld_base,
|
||||
LLVMValueRef *in, LLVMValueRef *out)
|
||||
{
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMBuilderRef builder = gallivm->builder;
|
||||
LLVMTypeRef type = bld_base->base.elem_type;
|
||||
LLVMValueRef coords[4];
|
||||
|
|
@ -932,16 +941,15 @@ static void radeon_llvm_cube_to_2d_coords(struct lp_build_tgsi_context *bld_base
|
|||
out[2] = coords[3];
|
||||
}
|
||||
|
||||
void radeon_llvm_emit_prepare_cube_coords(
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data,
|
||||
LLVMValueRef *coords_arg,
|
||||
LLVMValueRef *derivs_arg)
|
||||
void radeon_llvm_emit_prepare_cube_coords(struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data,
|
||||
LLVMValueRef *coords_arg,
|
||||
LLVMValueRef *derivs_arg)
|
||||
{
|
||||
|
||||
unsigned target = emit_data->inst->Texture.Texture;
|
||||
unsigned opcode = emit_data->inst->Instruction.Opcode;
|
||||
struct gallivm_state * gallivm = bld_base->base.gallivm;
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMBuilderRef builder = gallivm->builder;
|
||||
LLVMValueRef coords[4];
|
||||
unsigned i;
|
||||
|
|
@ -1004,10 +1012,9 @@ void radeon_llvm_emit_prepare_cube_coords(
|
|||
memcpy(coords_arg, coords, sizeof(coords));
|
||||
}
|
||||
|
||||
static void emit_icmp(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_icmp(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
unsigned pred;
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
|
|
@ -1035,10 +1042,9 @@ static void emit_icmp(
|
|||
emit_data->output[emit_data->chan] = v;
|
||||
}
|
||||
|
||||
static void emit_ucmp(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_ucmp(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
|
||||
|
|
@ -1066,10 +1072,9 @@ static void emit_cmp(const struct lp_build_tgsi_action *action,
|
|||
LLVMBuildSelect(builder, cond, args[1], args[2], "");
|
||||
}
|
||||
|
||||
static void emit_set_cond(
|
||||
const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_set_cond(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
LLVMRealPredicate pred;
|
||||
|
|
@ -1095,10 +1100,9 @@ static void emit_set_cond(
|
|||
cond, bld_base->base.one, bld_base->base.zero, "");
|
||||
}
|
||||
|
||||
static void emit_fcmp(
|
||||
const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_fcmp(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
LLVMContextRef context = bld_base->base.gallivm->context;
|
||||
|
|
@ -1124,10 +1128,9 @@ static void emit_fcmp(
|
|||
emit_data->output[emit_data->chan] = v;
|
||||
}
|
||||
|
||||
static void emit_dcmp(
|
||||
const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_dcmp(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
LLVMContextRef context = bld_base->base.gallivm->context;
|
||||
|
|
@ -1153,10 +1156,9 @@ static void emit_dcmp(
|
|||
emit_data->output[emit_data->chan] = v;
|
||||
}
|
||||
|
||||
static void emit_not(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_not(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
LLVMValueRef v = bitcast(bld_base, TGSI_TYPE_UNSIGNED,
|
||||
|
|
@ -1164,10 +1166,9 @@ static void emit_not(
|
|||
emit_data->output[emit_data->chan] = LLVMBuildNot(builder, v, "");
|
||||
}
|
||||
|
||||
static void emit_arl(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_arl(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
LLVMValueRef floor_index = lp_build_emit_llvm_unary(bld_base, TGSI_OPCODE_FLR, emit_data->args[0]);
|
||||
|
|
@ -1175,119 +1176,107 @@ static void emit_arl(
|
|||
floor_index, bld_base->base.int_elem_type , "");
|
||||
}
|
||||
|
||||
static void emit_and(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_and(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildAnd(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_or(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_or(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildOr(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_uadd(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_uadd(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildAdd(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_udiv(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_udiv(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildUDiv(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_idiv(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_idiv(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildSDiv(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_mod(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_mod(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildSRem(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_umod(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_umod(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildURem(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_shl(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_shl(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildShl(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_ushr(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_ushr(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildLShr(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
static void emit_ishr(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_ishr(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildAShr(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_xor(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_xor(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildXor(builder,
|
||||
emit_data->args[0], emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void emit_ssg(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_ssg(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
|
||||
|
|
@ -1308,30 +1297,27 @@ static void emit_ssg(
|
|||
emit_data->output[emit_data->chan] = val;
|
||||
}
|
||||
|
||||
static void emit_ineg(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_ineg(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildNeg(builder,
|
||||
emit_data->args[0], "");
|
||||
}
|
||||
|
||||
static void emit_dneg(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_dneg(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildFNeg(builder,
|
||||
emit_data->args[0], "");
|
||||
}
|
||||
|
||||
static void emit_frac(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_frac(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
char *intr;
|
||||
|
|
@ -1352,51 +1338,47 @@ static void emit_frac(
|
|||
emit_data->args[0], floor, "");
|
||||
}
|
||||
|
||||
static void emit_f2i(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_f2i(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildFPToSI(builder,
|
||||
emit_data->args[0], bld_base->int_bld.elem_type, "");
|
||||
}
|
||||
|
||||
static void emit_f2u(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_f2u(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildFPToUI(builder,
|
||||
emit_data->args[0], bld_base->uint_bld.elem_type, "");
|
||||
}
|
||||
|
||||
static void emit_i2f(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_i2f(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildSIToFP(builder,
|
||||
emit_data->args[0], bld_base->base.elem_type, "");
|
||||
}
|
||||
|
||||
static void emit_u2f(
|
||||
const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_u2f(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
emit_data->output[emit_data->chan] = LLVMBuildUIToFP(builder,
|
||||
emit_data->args[0], bld_base->base.elem_type, "");
|
||||
}
|
||||
|
||||
static void emit_immediate(struct lp_build_tgsi_context * bld_base,
|
||||
const struct tgsi_full_immediate *imm)
|
||||
static void emit_immediate(struct lp_build_tgsi_context *bld_base,
|
||||
const struct tgsi_full_immediate *imm)
|
||||
{
|
||||
unsigned i;
|
||||
struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
|
||||
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
|
||||
|
||||
for (i = 0; i < 4; ++i) {
|
||||
ctx->soa.immediates[ctx->soa.num_immediates][i] =
|
||||
|
|
@ -1411,16 +1393,16 @@ build_tgsi_intrinsic_nomem(const struct lp_build_tgsi_action *action,
|
|||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct lp_build_context * base = &bld_base->base;
|
||||
struct lp_build_context *base = &bld_base->base;
|
||||
emit_data->output[emit_data->chan] =
|
||||
lp_build_intrinsic(base->gallivm->builder, action->intr_name,
|
||||
emit_data->dst_type, emit_data->args,
|
||||
emit_data->arg_count, LLVMReadNoneAttribute);
|
||||
}
|
||||
|
||||
static void emit_bfi(const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_bfi(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMBuilderRef builder = gallivm->builder;
|
||||
|
|
@ -1452,9 +1434,9 @@ static void emit_bfi(const struct lp_build_tgsi_action * action,
|
|||
}
|
||||
|
||||
/* this is ffs in C */
|
||||
static void emit_lsb(const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_lsb(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMValueRef args[2] = {
|
||||
|
|
@ -1477,9 +1459,9 @@ static void emit_lsb(const struct lp_build_tgsi_action * action,
|
|||
}
|
||||
|
||||
/* Find the last bit set. */
|
||||
static void emit_umsb(const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_umsb(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMBuilderRef builder = gallivm->builder;
|
||||
|
|
@ -1508,9 +1490,9 @@ static void emit_umsb(const struct lp_build_tgsi_action * action,
|
|||
}
|
||||
|
||||
/* Find the last bit opposite of the sign bit. */
|
||||
static void emit_imsb(const struct lp_build_tgsi_action * action,
|
||||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void emit_imsb(const struct lp_build_tgsi_action *action,
|
||||
struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
LLVMBuilderRef builder = gallivm->builder;
|
||||
|
|
@ -1585,8 +1567,8 @@ static void emit_minmax_int(const struct lp_build_tgsi_action *action,
|
|||
emit_data->args[1], "");
|
||||
}
|
||||
|
||||
static void pk2h_fetch_args(struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void pk2h_fetch_args(struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
emit_data->args[0] = lp_build_emit_fetch(bld_base, emit_data->inst,
|
||||
0, TGSI_CHAN_X);
|
||||
|
|
@ -1621,8 +1603,8 @@ static void emit_pk2h(const struct lp_build_tgsi_action *action,
|
|||
emit_data->output[emit_data->chan] = comp[0];
|
||||
}
|
||||
|
||||
static void up2h_fetch_args(struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
static void up2h_fetch_args(struct lp_build_tgsi_context *bld_base,
|
||||
struct lp_build_emit_data *emit_data)
|
||||
{
|
||||
emit_data->args[0] = lp_build_emit_fetch(bld_base, emit_data->inst,
|
||||
0, TGSI_CHAN_X);
|
||||
|
|
@ -1685,7 +1667,7 @@ static void emit_rsq(const struct lp_build_tgsi_action *action,
|
|||
bld_base->base.one, sqrt);
|
||||
}
|
||||
|
||||
void radeon_llvm_context_init(struct radeon_llvm_context * ctx, const char *triple)
|
||||
void radeon_llvm_context_init(struct radeon_llvm_context *ctx, const char *triple)
|
||||
{
|
||||
struct lp_type type;
|
||||
|
||||
|
|
@ -1702,7 +1684,7 @@ void radeon_llvm_context_init(struct radeon_llvm_context * ctx, const char *trip
|
|||
LLVMSetTarget(ctx->gallivm.module, triple);
|
||||
ctx->gallivm.builder = LLVMCreateBuilderInContext(ctx->gallivm.context);
|
||||
|
||||
struct lp_build_tgsi_context * bld_base = &ctx->soa.bld_base;
|
||||
struct lp_build_tgsi_context *bld_base = &ctx->soa.bld_base;
|
||||
|
||||
type.floating = true;
|
||||
type.fixed = false;
|
||||
|
|
@ -1865,7 +1847,7 @@ void radeon_llvm_context_init(struct radeon_llvm_context * ctx, const char *trip
|
|||
bld_base->op_actions[TGSI_OPCODE_UP2H].emit = emit_up2h;
|
||||
}
|
||||
|
||||
void radeon_llvm_create_func(struct radeon_llvm_context * ctx,
|
||||
void radeon_llvm_create_func(struct radeon_llvm_context *ctx,
|
||||
LLVMTypeRef *return_types, unsigned num_return_elems,
|
||||
LLVMTypeRef *ParamTypes, unsigned ParamCount)
|
||||
{
|
||||
|
|
@ -1888,9 +1870,9 @@ void radeon_llvm_create_func(struct radeon_llvm_context * ctx,
|
|||
LLVMPositionBuilderAtEnd(ctx->gallivm.builder, main_fn_body);
|
||||
}
|
||||
|
||||
void radeon_llvm_finalize_module(struct radeon_llvm_context * ctx)
|
||||
void radeon_llvm_finalize_module(struct radeon_llvm_context *ctx)
|
||||
{
|
||||
struct gallivm_state * gallivm = ctx->soa.bld_base.base.gallivm;
|
||||
struct gallivm_state *gallivm = ctx->soa.bld_base.base.gallivm;
|
||||
const char *triple = LLVMGetTarget(gallivm->module);
|
||||
LLVMTargetLibraryInfoRef target_library_info;
|
||||
|
||||
|
|
@ -1919,7 +1901,7 @@ void radeon_llvm_finalize_module(struct radeon_llvm_context * ctx)
|
|||
gallivm_dispose_target_library_info(target_library_info);
|
||||
}
|
||||
|
||||
void radeon_llvm_dispose(struct radeon_llvm_context * ctx)
|
||||
void radeon_llvm_dispose(struct radeon_llvm_context *ctx)
|
||||
{
|
||||
LLVMDisposeModule(ctx->soa.bld_base.base.gallivm->module);
|
||||
LLVMContextDispose(ctx->soa.bld_base.base.gallivm->context);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue