On 02/08/2012 05:17 AM, Dave Airlie wrote:
From: Dave Airlie<airl...@redhat.com>
Infer from the operand the type of value to store.
MOV is untyped but we use the float store path.
v2: make MOV use float store path.
Signed-off-by: Dave Airlie<airl...@redhat.com>
---
src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 47 +++++++++++++++++++++--
1 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 920fed2..e3f9463 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -855,7 +855,6 @@ emit_fetch_predicate(
}
}
-
/**
* Register store.
*/
@@ -875,8 +874,26 @@ emit_store_chan(
struct lp_build_context *uint_bld =&bld_base->uint_bld;
LLVMValueRef indirect_index = NULL;
struct lp_build_context *bld_store;
+ enum tgsi_opcode_type dtype =
tgsi_opcode_infer_dst_type(inst->Instruction.Opcode);
- bld_store =&bld->bld_base.base;
+ switch (dtype) {
+ default:
+ case TGSI_TYPE_FLOAT:
+ case TGSI_TYPE_UNTYPED:
+ bld_store =&bld_base->base;
+ break;
+ case TGSI_TYPE_UNSIGNED:
+ bld_store =&bld_base->uint_bld;
+ break;
+ case TGSI_TYPE_SIGNED:
+ bld_store =&bld_base->int_bld;
+ break;
+ case TGSI_TYPE_DOUBLE:
+ case TGSI_TYPE_VOID:
+ assert(0);
Minor nit: let's try to avoid generic assert(0) macros. Use something
like assert(!"unexpected TGSI_TYPE in emit_store_chan()") at least.
BTW, theses patches look OK to me on the surface but you might want to
wait for Jose's review too.
-Brian
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev