gallivm: add uint/int bld to the base builder. (v2)
authorDave Airlie <airlied@redhat.com>
Mon, 6 Feb 2012 15:28:45 +0000 (15:28 +0000)
committerDave Airlie <airlied@redhat.com>
Fri, 17 Feb 2012 17:39:02 +0000 (17:39 +0000)
These are used inside the action handlers for the integer opcodes.

v2: use uint_bld/int_bld, drop higher level uint_bld.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/auxiliary/gallivm/lp_bld_tgsi.h
src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c
src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c

index b03eefc9ee526371703da88facb88db63540d959..a36a09a8fa4124f7b6aed24b9bfcc93f37c9b4cf 100644 (file)
@@ -279,6 +279,9 @@ struct lp_build_tgsi_context
 {
    struct lp_build_context base;
 
+   struct lp_build_context uint_bld;
+   struct lp_build_context int_bld;
+
    /** This array stores functions that are used to transform TGSI opcodes to
      * LLVM instructions.
      */
@@ -338,9 +341,6 @@ struct lp_build_tgsi_soa_context
 {
    struct lp_build_tgsi_context bld_base;
 
-   /* Builder for vector integer masks and indices */
-   struct lp_build_context uint_bld;
-
    /* Builder for scalar elements of shader's data type (float) */
    struct lp_build_context elem_bld;
 
index 53013f75f2e1f4ca7b845cf54cfce65234ec1cbb..2c2c820708a6785275f2d4e0d8e8b54f89403830 100644 (file)
@@ -991,6 +991,8 @@ lp_build_tgsi_aos(struct gallivm_state *gallivm,
    /* Setup build context */
    memset(&bld, 0, sizeof bld);
    lp_build_context_init(&bld.bld_base.base, gallivm, type);
+   lp_build_context_init(&bld.bld_base.uint_bld, gallivm, lp_uint_type(type));
+   lp_build_context_init(&bld.bld_base.int_bld, gallivm, lp_int_type(type));
    lp_build_context_init(&bld.int_bld, gallivm, lp_int_type(type));
 
    for (chan = 0; chan < 4; ++chan) {
index 5578546089a3de89fcdccd1dc1552ae207e3e4b1..bc063253bcd1926bfc464ccb5e3f3df62b46e739 100644 (file)
@@ -485,7 +485,7 @@ get_indirect_index(struct lp_build_tgsi_soa_context *bld,
                    const struct tgsi_src_register *indirect_reg)
 {
    LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder;
-   struct lp_build_context *uint_bld = &bld->uint_bld;
+   struct lp_build_context *uint_bld = &bld->bld_base.uint_bld;
    /* always use X component of address register */
    unsigned swizzle = indirect_reg->SwizzleX;
    LLVMValueRef base;
@@ -528,7 +528,7 @@ emit_fetch_constant(
    struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
    struct gallivm_state *gallivm = bld_base->base.gallivm;
    LLVMBuilderRef builder = gallivm->builder;
-   struct lp_build_context *uint_bld = &bld->uint_bld;
+   struct lp_build_context *uint_bld = &bld_base->uint_bld;
    LLVMValueRef indirect_index = NULL;
 
    /* XXX: Handle fetching xyzw components as a vector */
@@ -588,7 +588,7 @@ emit_fetch_input(
    struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
    struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
    LLVMBuilderRef builder = gallivm->builder;
-   struct lp_build_context *uint_bld = &bld->uint_bld;
+   struct lp_build_context *uint_bld = &bld_base->uint_bld;
    LLVMValueRef indirect_index = NULL;
    LLVMValueRef res;
 
@@ -645,7 +645,7 @@ emit_fetch_temporary(
    struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
    struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
    LLVMBuilderRef builder = gallivm->builder;
-   struct lp_build_context *uint_bld = &bld->uint_bld;
+   struct lp_build_context *uint_bld = &bld_base->uint_bld;
    LLVMValueRef indirect_index = NULL;
    LLVMValueRef res;
 
@@ -820,7 +820,7 @@ emit_store_chan(
    struct gallivm_state *gallivm = bld->bld_base.base.gallivm;
    LLVMBuilderRef builder = gallivm->builder;
    const struct tgsi_full_dst_register *reg = &inst->Dst[index];
-   struct lp_build_context *uint_bld = &bld->uint_bld;
+   struct lp_build_context *uint_bld = &bld_base->uint_bld;
    LLVMValueRef indirect_index = NULL;
    struct lp_build_context *bld_store;
 
@@ -1758,7 +1758,8 @@ lp_build_tgsi_soa(struct gallivm_state *gallivm,
    /* Setup build context */
    memset(&bld, 0, sizeof bld);
    lp_build_context_init(&bld.bld_base.base, gallivm, type);
-   lp_build_context_init(&bld.uint_bld, gallivm, lp_uint_type(type));
+   lp_build_context_init(&bld.bld_base.uint_bld, gallivm, lp_uint_type(type));
+   lp_build_context_init(&bld.bld_base.int_bld, gallivm, lp_int_type(type));
    lp_build_context_init(&bld.elem_bld, gallivm, lp_elem_type(type));
    bld.mask = mask;
    bld.pos = pos;