lp_emit_{declaration,instruction,store,fetch}_aos are now visibile in other files. --- src/gallium/auxiliary/gallivm/lp_bld_tgsi.h | 32 +++++ src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c | 140 ++++++++++++----------- 2 files changed, 103 insertions(+), 69 deletions(-)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h index b235e90..12a3cac 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h @@ -43,7 +43,10 @@ #include "tgsi/tgsi_scan.h" +struct tgsi_full_declaration; +struct tgsi_full_instruction; struct tgsi_full_src_register; +struct tgsi_opcode_info; struct tgsi_token; struct tgsi_shader_info; struct lp_build_mask_context; @@ -257,4 +260,33 @@ struct lp_build_tgsi_aos_context }; +void +lp_emit_declaration_aos( + struct lp_build_tgsi_aos_context *bld, + const struct tgsi_full_declaration *decl); + + +boolean +lp_emit_instruction_aos( + struct lp_build_tgsi_aos_context *bld, + const struct tgsi_full_instruction *inst, + const struct tgsi_opcode_info *info, + int *pc); + + +LLVMValueRef +lp_emit_fetch_aos( + struct lp_build_tgsi_aos_context *bld, + const struct tgsi_full_instruction *inst, + unsigned src_op); + + +void +lp_emit_store_aos( + struct lp_build_tgsi_aos_context *bld, + const struct tgsi_full_instruction *inst, + unsigned index, + LLVMValueRef value); + + #endif /* LP_BLD_TGSI_H */ diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c index 3677e76..35e8d43 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c @@ -196,8 +196,8 @@ emit_fetch_switch_file( /** * Register fetch. */ -static LLVMValueRef -emit_fetch( +LLVMValueRef +lp_emit_fetch_aos( struct lp_build_tgsi_aos_context *bld, const struct tgsi_full_instruction *inst, unsigned src_op) @@ -241,8 +241,8 @@ emit_fetch( /** * Register store. */ -static void -emit_store( +void +lp_emit_store_aos( struct lp_build_tgsi_aos_context *bld, const struct tgsi_full_instruction *inst, unsigned index, @@ -303,6 +303,8 @@ emit_store( return; } + if (!ptr) + return; /* * Predicate */ @@ -392,11 +394,11 @@ emit_tex(struct lp_build_tgsi_aos_context *bld, target = inst->Texture.Texture; - coords = emit_fetch( bld, inst, 0 ); + coords = lp_emit_fetch_aos( bld, inst, 0 ); if (modifier == LP_BLD_TEX_MODIFIER_EXPLICIT_DERIV) { - ddx = emit_fetch( bld, inst, 1 ); - ddy = emit_fetch( bld, inst, 2 ); + ddx = lp_emit_fetch_aos( bld, inst, 1 ); + ddy = lp_emit_fetch_aos( bld, inst, 2 ); unit = inst->Src[3].Register.Index; } else { #if 0 @@ -418,8 +420,8 @@ emit_tex(struct lp_build_tgsi_aos_context *bld, } -static void -emit_declaration( +void +lp_emit_declaration_aos( struct lp_build_tgsi_aos_context *bld, const struct tgsi_full_declaration *decl) { @@ -469,8 +471,8 @@ emit_declaration( * Emit LLVM for one TGSI instruction. * \param return TRUE for success, FALSE otherwise */ -static boolean -emit_instruction( +boolean +lp_emit_instruction_aos( struct lp_build_tgsi_aos_context *bld, const struct tgsi_full_instruction *inst, const struct tgsi_opcode_info *info, @@ -500,12 +502,12 @@ emit_instruction( switch (inst->Instruction.Opcode) { case TGSI_OPCODE_ARL: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); dst0 = lp_build_floor(&bld->base, src0); break; case TGSI_OPCODE_MOV: - dst0 = emit_fetch(bld, inst, 0); + dst0 = lp_emit_fetch_aos(bld, inst, 0); break; case TGSI_OPCODE_LIT: @@ -513,13 +515,13 @@ emit_instruction( case TGSI_OPCODE_RCP: /* TGSI_OPCODE_RECIP */ - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); dst0 = lp_build_rcp(&bld->base, src0); break; case TGSI_OPCODE_RSQ: /* TGSI_OPCODE_RECIPSQRT */ - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); tmp0 = lp_build_abs(&bld->base, src0); dst0 = lp_build_rsqrt(&bld->base, tmp0); break; @@ -531,14 +533,14 @@ emit_instruction( return FALSE; case TGSI_OPCODE_MUL: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); dst0 = lp_build_mul(&bld->base, src0, src1); break; case TGSI_OPCODE_ADD: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); dst0 = lp_build_add(&bld->base, src0, src1); break; @@ -554,61 +556,61 @@ emit_instruction( return FALSE; case TGSI_OPCODE_MIN: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); dst0 = lp_build_max(&bld->base, src0, src1); break; case TGSI_OPCODE_MAX: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); dst0 = lp_build_max(&bld->base, src0, src1); break; case TGSI_OPCODE_SLT: /* TGSI_OPCODE_SETLT */ - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_LESS, src0, src1); dst0 = lp_build_select(&bld->base, tmp0, bld->base.one, bld->base.zero); break; case TGSI_OPCODE_SGE: /* TGSI_OPCODE_SETGE */ - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_GEQUAL, src0, src1); dst0 = lp_build_select(&bld->base, tmp0, bld->base.one, bld->base.zero); break; case TGSI_OPCODE_MAD: /* TGSI_OPCODE_MADD */ - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); - src2 = emit_fetch(bld, inst, 2); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); + src2 = lp_emit_fetch_aos(bld, inst, 2); tmp0 = lp_build_mul(&bld->base, src0, src1); dst0 = lp_build_add(&bld->base, tmp0, src2); break; case TGSI_OPCODE_SUB: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); dst0 = lp_build_sub(&bld->base, src0, src1); break; case TGSI_OPCODE_LRP: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); - src2 = emit_fetch(bld, inst, 2); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); + src2 = lp_emit_fetch_aos(bld, inst, 2); tmp0 = lp_build_sub(&bld->base, src1, src2); tmp0 = lp_build_mul(&bld->base, src0, tmp0); dst0 = lp_build_add(&bld->base, tmp0, src2); break; case TGSI_OPCODE_CND: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); - src2 = emit_fetch(bld, inst, 2); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); + src2 = lp_emit_fetch_aos(bld, inst, 2); tmp1 = lp_build_const_vec(bld->base.gallivm, bld->base.type, 0.5); tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_GREATER, src2, tmp1); dst0 = lp_build_select(&bld->base, tmp0, src0, src1); @@ -618,45 +620,45 @@ emit_instruction( return FALSE; case TGSI_OPCODE_FRC: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); tmp0 = lp_build_floor(&bld->base, src0); dst0 = lp_build_sub(&bld->base, src0, tmp0); break; case TGSI_OPCODE_CLAMP: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); - src2 = emit_fetch(bld, inst, 2); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); + src2 = lp_emit_fetch_aos(bld, inst, 2); tmp0 = lp_build_max(&bld->base, src0, src1); dst0 = lp_build_min(&bld->base, tmp0, src2); break; case TGSI_OPCODE_FLR: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); dst0 = lp_build_floor(&bld->base, src0); break; case TGSI_OPCODE_ROUND: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); dst0 = lp_build_round(&bld->base, src0); break; case TGSI_OPCODE_EX2: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); tmp0 = lp_build_swizzle_scalar_aos(&bld->base, src0, TGSI_SWIZZLE_X); dst0 = lp_build_exp2(&bld->base, tmp0); break; case TGSI_OPCODE_LG2: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); tmp0 = swizzle_scalar_aos(bld, src0, TGSI_SWIZZLE_X); dst0 = lp_build_log2(&bld->base, tmp0); break; case TGSI_OPCODE_POW: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); src0 = swizzle_scalar_aos(bld, src0, TGSI_SWIZZLE_X); - src1 = emit_fetch(bld, inst, 1); + src1 = lp_emit_fetch_aos(bld, inst, 1); src1 = swizzle_scalar_aos(bld, src1, TGSI_SWIZZLE_X); dst0 = lp_build_pow(&bld->base, src0, src1); break; @@ -665,7 +667,7 @@ emit_instruction( return FALSE; case TGSI_OPCODE_ABS: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); dst0 = lp_build_abs(&bld->base, src0); break; @@ -678,7 +680,7 @@ emit_instruction( return FALSE; case TGSI_OPCODE_COS: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); tmp0 = swizzle_scalar_aos(bld, src0, TGSI_SWIZZLE_X); dst0 = lp_build_cos(&bld->base, tmp0); break; @@ -716,8 +718,8 @@ emit_instruction( return FALSE; case TGSI_OPCODE_SEQ: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_EQUAL, src0, src1); dst0 = lp_build_select(&bld->base, tmp0, bld->base.one, bld->base.zero); break; @@ -727,28 +729,28 @@ emit_instruction( break; case TGSI_OPCODE_SGT: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_GREATER, src0, src1); dst0 = lp_build_select(&bld->base, tmp0, bld->base.one, bld->base.zero); break; case TGSI_OPCODE_SIN: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); tmp0 = swizzle_scalar_aos(bld, src0, TGSI_SWIZZLE_X); dst0 = lp_build_sin(&bld->base, tmp0); break; case TGSI_OPCODE_SLE: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_LEQUAL, src0, src1); dst0 = lp_build_select(&bld->base, tmp0, bld->base.one, bld->base.zero); break; case TGSI_OPCODE_SNE: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_NOTEQUAL, src0, src1); dst0 = lp_build_select(&bld->base, tmp0, bld->base.one, bld->base.zero); break; @@ -802,7 +804,7 @@ emit_instruction( break; case TGSI_OPCODE_ARR: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); dst0 = lp_build_round(&bld->base, src0); break; @@ -824,14 +826,14 @@ emit_instruction( case TGSI_OPCODE_SSG: /* TGSI_OPCODE_SGN */ - tmp0 = emit_fetch(bld, inst, 0); + tmp0 = lp_emit_fetch_aos(bld, inst, 0); dst0 = lp_build_sgn(&bld->base, tmp0); break; case TGSI_OPCODE_CMP: - src0 = emit_fetch(bld, inst, 0); - src1 = emit_fetch(bld, inst, 1); - src2 = emit_fetch(bld, inst, 2); + src0 = lp_emit_fetch_aos(bld, inst, 0); + src1 = lp_emit_fetch_aos(bld, inst, 1); + src2 = lp_emit_fetch_aos(bld, inst, 2); tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_LESS, src0, bld->base.zero); dst0 = lp_build_select(&bld->base, tmp0, src1, src2); break; @@ -902,7 +904,7 @@ emit_instruction( break; case TGSI_OPCODE_CEIL: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); dst0 = lp_build_ceil(&bld->base, src0); break; @@ -919,7 +921,7 @@ emit_instruction( break; case TGSI_OPCODE_TRUNC: - src0 = emit_fetch(bld, inst, 0); + src0 = lp_emit_fetch_aos(bld, inst, 0); dst0 = lp_build_trunc(&bld->base, src0); break; @@ -996,7 +998,7 @@ emit_instruction( } if (info->num_dst) { - emit_store(bld, inst, 0, dst0); + lp_emit_store_aos(bld, inst, 0, dst0); } return TRUE; @@ -1053,7 +1055,7 @@ lp_build_tgsi_aos(struct gallivm_state *gallivm, switch(parse.FullToken.Token.Type) { case TGSI_TOKEN_TYPE_DECLARATION: /* Inputs already interpolated */ - emit_declaration(&bld, &parse.FullToken.FullDeclaration); + lp_emit_declaration_aos(&bld, &parse.FullToken.FullDeclaration); break; case TGSI_TOKEN_TYPE_INSTRUCTION: @@ -1116,7 +1118,7 @@ lp_build_tgsi_aos(struct gallivm_state *gallivm, struct tgsi_full_instruction *instr = bld.instructions + pc; const struct tgsi_opcode_info *opcode_info = tgsi_get_opcode_info(instr->Instruction.Opcode); - if (!emit_instruction(&bld, instr, opcode_info, &pc)) + if (!lp_emit_instruction_aos(&bld, instr, opcode_info, &pc)) _debug_printf("warning: failed to translate tgsi opcode %s to LLVM\n", opcode_info->mnemonic); } -- 1.7.6.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev