diff options
| author | José Fonseca <jfonseca@vmware.com> | 2010-10-09 19:53:21 +0100 | 
|---|---|---|
| committer | José Fonseca <jfonseca@vmware.com> | 2010-10-09 19:53:21 +0100 | 
| commit | ea7b49028b15364a32988ec77ec88f2a6a591437 (patch) | |
| tree | 34de1d41d1a2b2050c5498de6a68f03d20b4de92 /src | |
| parent | cc40abad519cc0f765c6d8f6fad4154bed8dd9c2 (diff) | |
gallivm: Use varilables instead of Phis for cubemap selection.
Diffstat (limited to 'src')
| -rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_sample.c | 62 | 
1 files changed, 26 insertions, 36 deletions
| diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c b/src/gallium/auxiliary/gallivm/lp_bld_sample.c index 43ea8b1a14..acceae2bad 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c @@ -927,21 +927,15 @@ lp_build_cube_lookup(struct lp_build_sample_context *bld,     {        struct lp_build_flow_context *flow_ctx;        struct lp_build_if_state if_ctx; +      LLVMValueRef face_s_var; +      LLVMValueRef face_t_var; +      LLVMValueRef face_var;        flow_ctx = lp_build_flow_create(bld->builder); -      lp_build_flow_scope_begin(flow_ctx); -      *face_s = bld->coord_bld.undef; -      *face_t = bld->coord_bld.undef; -      *face = bld->int_bld.undef; - -      lp_build_name(*face_s, "face_s"); -      lp_build_name(*face_t, "face_t"); -      lp_build_name(*face, "face"); - -      lp_build_flow_scope_declare(flow_ctx, face_s); -      lp_build_flow_scope_declare(flow_ctx, face_t); -      lp_build_flow_scope_declare(flow_ctx, face); +      face_s_var = lp_build_alloca(bld->builder, bld->coord_bld.vec_type, "face_s_var"); +      face_t_var = lp_build_alloca(bld->builder, bld->coord_bld.vec_type, "face_t_var"); +      face_var = lp_build_alloca(bld->builder, bld->int_bld.vec_type, "face_var");        lp_build_if(&if_ctx, flow_ctx, bld->builder, arx_ge_ary_arz);        { @@ -953,57 +947,53 @@ lp_build_cube_lookup(struct lp_build_sample_context *bld,           *face = lp_build_cube_face(bld, rx,                                      PIPE_TEX_FACE_POS_X,                                      PIPE_TEX_FACE_NEG_X); +         LLVMBuildStore(bld->builder, *face_s, face_s_var); +         LLVMBuildStore(bld->builder, *face_t, face_t_var); +         LLVMBuildStore(bld->builder, *face, face_var);        }        lp_build_else(&if_ctx);        { -         struct lp_build_flow_context *flow_ctx2;           struct lp_build_if_state if_ctx2; -         LLVMValueRef face_s2 = bld->coord_bld.undef; -         LLVMValueRef face_t2 = bld->coord_bld.undef; -         LLVMValueRef face2 = bld->int_bld.undef; - -         flow_ctx2 = lp_build_flow_create(bld->builder); -         lp_build_flow_scope_begin(flow_ctx2); -         lp_build_flow_scope_declare(flow_ctx2, &face_s2); -         lp_build_flow_scope_declare(flow_ctx2, &face_t2); -         lp_build_flow_scope_declare(flow_ctx2, &face2); -           ary_ge_arx_arz = LLVMBuildAnd(bld->builder, ary_ge_arx, ary_ge_arz, ""); -         lp_build_if(&if_ctx2, flow_ctx2, bld->builder, ary_ge_arx_arz); +         lp_build_if(&if_ctx2, flow_ctx, bld->builder, ary_ge_arx_arz);           {              /* +/- Y face */              LLVMValueRef sign = lp_build_sgn(float_bld, ry);              LLVMValueRef ima = lp_build_cube_ima(coord_bld, t); -            face_s2 = lp_build_cube_coord(coord_bld, NULL, -1, s, ima); -            face_t2 = lp_build_cube_coord(coord_bld, sign, -1, r, ima); -            face2 = lp_build_cube_face(bld, ry, +            *face_s = lp_build_cube_coord(coord_bld, NULL, -1, s, ima); +            *face_t = lp_build_cube_coord(coord_bld, sign, -1, r, ima); +            *face = lp_build_cube_face(bld, ry,                                         PIPE_TEX_FACE_POS_Y,                                         PIPE_TEX_FACE_NEG_Y); +            LLVMBuildStore(bld->builder, *face_s, face_s_var); +            LLVMBuildStore(bld->builder, *face_t, face_t_var); +            LLVMBuildStore(bld->builder, *face, face_var);           }           lp_build_else(&if_ctx2);           {              /* +/- Z face */              LLVMValueRef sign = lp_build_sgn(float_bld, rz);              LLVMValueRef ima = lp_build_cube_ima(coord_bld, r); -            face_s2 = lp_build_cube_coord(coord_bld, sign, -1, s, ima); -            face_t2 = lp_build_cube_coord(coord_bld, NULL, +1, t, ima); -            face2 = lp_build_cube_face(bld, rz, +            *face_s = lp_build_cube_coord(coord_bld, sign, -1, s, ima); +            *face_t = lp_build_cube_coord(coord_bld, NULL, +1, t, ima); +            *face = lp_build_cube_face(bld, rz,                                         PIPE_TEX_FACE_POS_Z,                                         PIPE_TEX_FACE_NEG_Z); +            LLVMBuildStore(bld->builder, *face_s, face_s_var); +            LLVMBuildStore(bld->builder, *face_t, face_t_var); +            LLVMBuildStore(bld->builder, *face, face_var);           }           lp_build_endif(&if_ctx2); -         lp_build_flow_scope_end(flow_ctx2); -         lp_build_flow_destroy(flow_ctx2); -         *face_s = face_s2; -         *face_t = face_t2; -         *face = face2;        }        lp_build_endif(&if_ctx); -      lp_build_flow_scope_end(flow_ctx);        lp_build_flow_destroy(flow_ctx); + +      *face_s = LLVMBuildLoad(bld->builder, face_s_var, "face_s"); +      *face_t = LLVMBuildLoad(bld->builder, face_t_var, "face_t"); +      *face   = LLVMBuildLoad(bld->builder, face_var, "face");     }  } | 
