X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fauxiliary%2Fgallivm%2Flp_bld_tgsi_aos.c;h=4dee9bb4dd41e0d3c8c3495803282c5c7d6dbeb9;hb=865d0312c0dd7411ce813206cef3c399d6641241;hp=80c148124ee2daa9a96b899e1438e8cc13df37ae;hpb=141f2c2fc9325a5d30629373bb962f42517967ae;p=mesa.git diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c index 80c148124ee..4dee9bb4dd4 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c @@ -56,6 +56,7 @@ #include "lp_bld_quad.h" #include "lp_bld_tgsi.h" #include "lp_bld_debug.h" +#include "lp_bld_sample.h" /** @@ -93,7 +94,7 @@ swizzle_scalar_aos(struct lp_build_tgsi_aos_context *bld, unsigned chan) { chan = bld->swizzles[chan]; - return lp_build_swizzle_scalar_aos(&bld->bld_base.base, a, chan); + return lp_build_swizzle_scalar_aos(&bld->bld_base.base, a, chan, 4); } @@ -325,8 +326,11 @@ lp_emit_store_aos( if (reg->Register.WriteMask != TGSI_WRITEMASK_XYZW) { LLVMValueRef writemask; - writemask = lp_build_const_mask_aos(bld->bld_base.base.gallivm, bld->bld_base.base.type, - reg->Register.WriteMask); + writemask = lp_build_const_mask_aos_swizzled(bld->bld_base.base.gallivm, + bld->bld_base.base.type, + reg->Register.WriteMask, + TGSI_NUM_CHANNELS, + bld->swizzles); if (mask) { mask = LLVMBuildAnd(builder, mask, writemask, ""); @@ -359,8 +363,7 @@ emit_tex(struct lp_build_tgsi_aos_context *bld, unsigned target; unsigned unit; LLVMValueRef coords; - LLVMValueRef ddx; - LLVMValueRef ddy; + struct lp_derivatives derivs = { {NULL}, {NULL} }; if (!bld->sampler) { _debug_printf("warning: found texture instruction but no sampler generator supplied\n"); @@ -372,25 +375,18 @@ emit_tex(struct lp_build_tgsi_aos_context *bld, coords = lp_build_emit_fetch( &bld->bld_base, inst, 0 , LP_CHAN_ALL); if (modifier == LP_BLD_TEX_MODIFIER_EXPLICIT_DERIV) { - ddx = lp_build_emit_fetch( &bld->bld_base, inst, 1 , LP_CHAN_ALL); - ddy = lp_build_emit_fetch( &bld->bld_base, inst, 2 , LP_CHAN_ALL); + /* probably not going to work */ + derivs.ddx[0] = lp_build_emit_fetch( &bld->bld_base, inst, 1 , LP_CHAN_ALL); + derivs.ddy[0] = lp_build_emit_fetch( &bld->bld_base, inst, 2 , LP_CHAN_ALL); unit = inst->Src[3].Register.Index; - } else { -#if 0 - ddx = lp_build_ddx( &bld->bld_base.base, coords ); - ddy = lp_build_ddy( &bld->bld_base.base, coords ); -#else - /* TODO */ - ddx = bld->bld_base.base.one; - ddy = bld->bld_base.base.one; -#endif + } + else { unit = inst->Src[1].Register.Index; } - return bld->sampler->emit_fetch_texel(bld->sampler, &bld->bld_base.base, target, unit, - coords, ddx, ddy, + coords, derivs, modifier); } @@ -410,7 +406,7 @@ lp_emit_declaration_aos( for (idx = first; idx <= last; ++idx) { switch (decl->Declaration.File) { case TGSI_FILE_TEMPORARY: - assert(idx < LP_MAX_TGSI_TEMPS); + assert(idx < LP_MAX_INLINED_TEMPS); if (bld->indirect_files & (1 << TGSI_FILE_TEMPORARY)) { LLVMValueRef array_size = lp_build_const_int32(gallivm, last + 1); bld->temps_array = lp_build_array_alloca(bld->bld_base.base.gallivm, @@ -533,7 +529,7 @@ lp_emit_instruction_aos( case TGSI_OPCODE_MIN: src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); - dst0 = lp_build_max(&bld->bld_base.base, src0, src1); + dst0 = lp_build_min(&bld->bld_base.base, src0, src1); break; case TGSI_OPCODE_MAX: @@ -620,7 +616,7 @@ lp_emit_instruction_aos( case TGSI_OPCODE_EX2: src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); - tmp0 = lp_build_swizzle_scalar_aos(&bld->bld_base.base, src0, TGSI_SWIZZLE_X); + tmp0 = lp_build_swizzle_scalar_aos(&bld->bld_base.base, src0, TGSI_SWIZZLE_X, TGSI_NUM_CHANNELS); dst0 = lp_build_exp2(&bld->bld_base.base, tmp0); break; @@ -661,12 +657,10 @@ lp_emit_instruction_aos( case TGSI_OPCODE_DDY: return FALSE; - case TGSI_OPCODE_KILP: - /* predicated kill */ + case TGSI_OPCODE_KILL: return FALSE; - case TGSI_OPCODE_KIL: - /* conditional kill */ + case TGSI_OPCODE_KILL_IF: return FALSE; case TGSI_OPCODE_PK2H: @@ -841,6 +835,7 @@ lp_emit_instruction_aos( return FALSE; case TGSI_OPCODE_IF: + case TGSI_OPCODE_UIF: return FALSE; case TGSI_OPCODE_BGNLOOP: @@ -1047,7 +1042,7 @@ lp_build_tgsi_aos(struct gallivm_state *gallivm, const uint size = parse.FullToken.FullImmediate.Immediate.NrTokens - 1; float imm[4]; assert(size <= 4); - assert(num_immediates < LP_MAX_TGSI_IMMEDIATES); + assert(num_immediates < LP_MAX_INLINED_IMMEDIATES); for (chan = 0; chan < 4; ++chan) { imm[chan] = 0.0f; } @@ -1089,6 +1084,7 @@ lp_build_tgsi_aos(struct gallivm_state *gallivm, debug_printf("2222222222222222222222222222 \n"); } tgsi_parse_free(&parse); + FREE(bld.bld_base.instructions); if (0) { LLVMModuleRef module = LLVMGetGlobalParent(