Mesa (mesa_7_7_branch): gallium/python: support two more formats in retrace dumps

2010-02-05 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_7_branch
Commit: f8b05566aacbcd0a0e1afa932a85921ed2568afc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f8b05566aacbcd0a0e1afa932a85921ed2568afc

Author: Zack Rusin 
Date:   Fri Feb  5 19:04:11 2010 -0500

gallium/python: support two more formats in retrace dumps

dump PIPE_FORMAT_R8G8B8A8_UNORM and PIPE_FORMAT_R16G16B16_SNORM formats.

---

 .../state_trackers/python/retrace/interpreter.py   |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/gallium/state_trackers/python/retrace/interpreter.py 
b/src/gallium/state_trackers/python/retrace/interpreter.py
index 18fa84f..00d4d87 100755
--- a/src/gallium/state_trackers/python/retrace/interpreter.py
+++ b/src/gallium/state_trackers/python/retrace/interpreter.py
@@ -531,6 +531,8 @@ class Context(Object):
 gallium.PIPE_FORMAT_R32G32B32_FLOAT: '3f',
 gallium.PIPE_FORMAT_R32G32B32A32_FLOAT: '4f',
 gallium.PIPE_FORMAT_B8G8R8A8_UNORM: '4B',
+gallium.PIPE_FORMAT_R8G8B8A8_UNORM: '4B',
+gallium.PIPE_FORMAT_R16G16B16_SNORM: '3h',
 }[velem.src_format]
 
 data = vbuf.buffer.read()

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_7_branch): gallium/draw: fix overflowing element indices

2010-02-05 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_7_branch
Commit: a6148b8eba35a0d4efec4dcca5e3ac6d86708a58
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6148b8eba35a0d4efec4dcca5e3ac6d86708a58

Author: Zack Rusin 
Date:   Fri Feb  5 18:57:10 2010 -0500

gallium/draw: fix overflowing element indices

we piggy back flags in the top four bits of the element indices, so if
the maximum index stored in any of the elements is greater than
sizeof(ushort) - sizeof(flags we piggy back) then we overflow. fix it by
simply falling back to the slow path if we notice the overflow.

---

 src/gallium/auxiliary/draw/draw_pt_vcache.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pt_vcache.c 
b/src/gallium/auxiliary/draw/draw_pt_vcache.c
index d3f179c..a87ec30 100644
--- a/src/gallium/auxiliary/draw/draw_pt_vcache.c
+++ b/src/gallium/auxiliary/draw/draw_pt_vcache.c
@@ -347,7 +347,8 @@ vcache_check_run( struct draw_pt_front_end *frontend,
draw_count);
   
if (max_index == 0x ||
-   fetch_count > draw_count) {
+   fetch_count > draw_count ||
+   max_index != (max_index & ~DRAW_PIPE_FLAG_MASK)) {
   if (0) debug_printf("fail\n");
   goto fail;
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_7_branch): gallium/tgsi: fix soa dependencies in mul and cmp instructions

2010-02-05 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_7_branch
Commit: fb1fe8e76f133b8c9e3713cc7c263a8e63fab40c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fb1fe8e76f133b8c9e3713cc7c263a8e63fab40c

Author: Zack Rusin 
Date:   Fri Feb  5 19:22:45 2010 -0500

gallium/tgsi: fix soa dependencies in mul and cmp instructions

master has this done in a lot nicer way, this is a simple patch to
stop the bleeding in a minimally intrusive manner.

---

 src/gallium/auxiliary/tgsi/tgsi_exec.c |   57 
 1 files changed, 43 insertions(+), 14 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c 
b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index bd9b986..d91b27a 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -336,7 +336,9 @@ tgsi_exec_machine_bind_shader(
 /* XXX we only handle SOA dependencies properly for MOV/SWZ
  * at this time!
  */
-if (opcode != TGSI_OPCODE_MOV) {
+if (opcode != TGSI_OPCODE_MOV &&
+opcode != TGSI_OPCODE_MUL &&
+opcode != TGSI_OPCODE_CMP) {
debug_printf("Warning: SOA dependency in instruction"
 " is not handled:\n");
tgsi_dump_instruction(&parse.FullToken.FullInstruction,
@@ -1852,7 +1854,7 @@ exec_instruction(
int *pc )
 {
uint chan_index;
-   union tgsi_exec_channel r[10];
+   union tgsi_exec_channel r[3 * NUM_CHANNELS];
union tgsi_exec_channel d[8];
 
(*pc)++;
@@ -1980,14 +1982,27 @@ exec_instruction(
   break;
 
case TGSI_OPCODE_MUL:
-  FOR_EACH_ENABLED_CHANNEL( *inst, chan_index )
-  {
- FETCH(&r[0], 0, chan_index);
- FETCH(&r[1], 1, chan_index);
+  if (inst->Flags & SOA_DEPENDENCY_FLAG) {
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index )
+ {
+FETCH(&r[chan_index], 0, chan_index);
+FETCH(&r[chan_index + NUM_CHANNELS], 1, chan_index);
+ }
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index )
+ {
+micro_mul( &r[chan_index], &r[chan_index], &r[chan_index + 
NUM_CHANNELS] );
+STORE(&r[chan_index], 0, chan_index);
+ }
+  } else {
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index )
+ {
+FETCH(&r[0], 0, chan_index);
+FETCH(&r[1], 1, chan_index);
 
- micro_mul( &r[0], &r[0], &r[1] );
+micro_mul( &r[0], &r[0], &r[1] );
 
- STORE(&r[0], 0, chan_index);
+STORE(&r[0], 0, chan_index);
+ }
   }
   break;
 
@@ -2663,14 +2678,28 @@ exec_instruction(
   break;
 
case TGSI_OPCODE_CMP:
-  FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
- FETCH(&r[0], 0, chan_index);
- FETCH(&r[1], 1, chan_index);
- FETCH(&r[2], 2, chan_index);
+  if (inst->Flags & SOA_DEPENDENCY_FLAG) {
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+FETCH(&r[chan_index], 0, chan_index);
+FETCH(&r[chan_index + NUM_CHANNELS], 1, chan_index);
+FETCH(&r[chan_index + 2 * NUM_CHANNELS], 2, chan_index);
+ }
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+micro_lt( &r[chan_index], &r[chan_index],
+  &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &r[chan_index + 
NUM_CHANNELS],
+  &r[chan_index + 2*NUM_CHANNELS] );
+STORE(&r[chan_index], 0, chan_index);
+ }
+  } else {
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+FETCH(&r[0], 0, chan_index);
+FETCH(&r[1], 1, chan_index);
+FETCH(&r[2], 2, chan_index);
 
- micro_lt( &r[0], &r[0], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &r[1], 
&r[2] );
+micro_lt( &r[0], &r[0], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], 
&r[1], &r[2] );
 
- STORE(&r[0], 0, chan_index);
+STORE(&r[0], 0, chan_index);
+ }
   }
   break;
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallium/python: support two more formats in retrace dumps

2010-02-05 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 8109b6d31367986a2c4a8ad82dadd9c0db61b6c3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8109b6d31367986a2c4a8ad82dadd9c0db61b6c3

Author: Zack Rusin 
Date:   Fri Feb  5 19:04:11 2010 -0500

gallium/python: support two more formats in retrace dumps

dump PIPE_FORMAT_R8G8B8A8_UNORM and PIPE_FORMAT_R16G16B16_SNORM formats.

---

 .../state_trackers/python/retrace/interpreter.py   |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/gallium/state_trackers/python/retrace/interpreter.py 
b/src/gallium/state_trackers/python/retrace/interpreter.py
index b61d47d..f9b330e 100755
--- a/src/gallium/state_trackers/python/retrace/interpreter.py
+++ b/src/gallium/state_trackers/python/retrace/interpreter.py
@@ -534,6 +534,8 @@ class Context(Object):
 gallium.PIPE_FORMAT_R32G32B32_FLOAT: '3f',
 gallium.PIPE_FORMAT_R32G32B32A32_FLOAT: '4f',
 gallium.PIPE_FORMAT_B8G8R8A8_UNORM: '4B',
+gallium.PIPE_FORMAT_R8G8B8A8_UNORM: '4B',
+gallium.PIPE_FORMAT_R16G16B16_SNORM: '3h',
 }[velem.src_format]
 
 data = vbuf.buffer.read()

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): llvmpipe: export the tgsi translation code to a common layer

2010-02-08 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: c61bf363937f40624a5632745630d4f2b9907082
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c61bf363937f40624a5632745630d4f2b9907082

Author: Zack Rusin 
Date:   Mon Feb  8 18:05:22 2010 -0500

llvmpipe: export the tgsi translation code to a common layer

the llvmpipe tgsi translation is a lot more complete than what was in
gallivm so replacing the latter with the former. this is needed since
the draw llvm paths will use the same code. effectively the proven
llvmpipe code becomes gallivm.

---

 SConstruct |   16 +-
 configs/linux-llvm |2 +-
 src/gallium/auxiliary/Makefile |   55 +-
 src/gallium/auxiliary/SConscript   |   33 +-
 src/gallium/auxiliary/draw/draw_private.h  |6 -
 src/gallium/auxiliary/draw/draw_vs_llvm.c  |   31 -
 src/gallium/auxiliary/gallivm/gallivm.cpp  |  332 --
 src/gallium/auxiliary/gallivm/gallivm.h|  118 --
 src/gallium/auxiliary/gallivm/gallivm_builtins.cpp |  140 ---
 src/gallium/auxiliary/gallivm/gallivm_cpu.cpp  |  243 
 src/gallium/auxiliary/gallivm/gallivm_p.h  |  110 --
 src/gallium/auxiliary/gallivm/instructions.cpp | 1193 
 src/gallium/auxiliary/gallivm/instructions.h   |  175 ---
 src/gallium/auxiliary/gallivm/instructionssoa.cpp  |  525 -
 src/gallium/auxiliary/gallivm/instructionssoa.h|  116 --
 src/gallium/auxiliary/gallivm/llvm_builtins.c  |  114 --
 src/gallium/auxiliary/gallivm/loweringpass.cpp |   17 -
 src/gallium/auxiliary/gallivm/loweringpass.h   |   15 -
 .../llvmpipe => auxiliary/gallivm}/lp_bld_alpha.c  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_alpha.h  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_arit.c   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_arit.h   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_blend.h  |0 
 .../gallivm}/lp_bld_blend_aos.c|0 
 .../gallivm}/lp_bld_blend_logicop.c|0 
 .../gallivm}/lp_bld_blend_soa.c|0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_const.c  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_const.h  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_conv.c   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_conv.h   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_debug.c  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_debug.h  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_depth.c  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_depth.h  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_flow.c   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_flow.h   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_format.h |0 
 .../gallivm}/lp_bld_format_aos.c   |0 
 .../gallivm}/lp_bld_format_query.c |0 
 .../gallivm}/lp_bld_format_soa.c   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_interp.c |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_interp.h |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_intr.c   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_intr.h   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_logic.c  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_logic.h  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_misc.cpp |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_misc.h   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_pack.c   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_pack.h   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_sample.c |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_sample.h |0 
 .../gallivm}/lp_bld_sample_soa.c   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_struct.c |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_struct.h |0 
 .../gallivm}/lp_bld_swizzle.c  |0 
 .../gallivm}/lp_bld_swizzle.h  |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_tgsi.h   |0 
 .../gallivm}/lp_bld_tgsi_soa.c |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_type.c   |0 
 .../llvmpipe => auxiliary/gallivm}/lp_bld_type.h   |0 
 src/gallium/auxiliary/gallivm/soabuiltins.c|  210 
 src/gallium/auxiliary/gallivm/storage.cpp  |  364 --
 src/gallium/auxiliary/gallivm/storage.h|  133 ---
 src/gallium/auxiliary/gallivm/storagesoa.cpp   |  438 ---
 src/gallium/auxiliary/gallivm/storagesoa.h |  107 --
 src/gallium/auxiliary/gallivm/tgsitollvm.cpp   | 1136 ---
 src/gallium/auxiliary/gallivm/tgsitollvm.h |   20 -
 src/gallium/drivers/llvmpipe/SConscript|   24 -
 src/gallium/drivers/llvmpipe/lp_jit.c  |2 +-
 src/gallium/drivers/llvmpipe/lp_jit.h   

Mesa (master): llvmpipe: switch to using dynamic stack allocation instead of registers

2010-02-08 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 85c7ec70ad41c8ada75a4cbace83d16815d3e2c5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=85c7ec70ad41c8ada75a4cbace83d16815d3e2c5

Author: Zack Rusin 
Date:   Mon Feb  8 21:50:33 2010 -0500

llvmpipe: switch to using dynamic stack allocation instead of registers

with mutable vars we don't need to follow the phi nodes. meaning that
control flow becomes trivial as we don't have scan the rest of the tgsi
to figure out the variable usage anymore. futhermore the memory2register
pass promotes alloca/store/load to registers while inserting the right phi
nodes. so we get simplicity and performance.

---

 src/gallium/auxiliary/gallivm/lp_bld_logic.c|   12 ++
 src/gallium/auxiliary/gallivm/lp_bld_logic.h|2 +
 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |   48 +-
 src/gallium/drivers/llvmpipe/lp_state_fs.c  |   11 +++--
 4 files changed, 65 insertions(+), 8 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_logic.c 
b/src/gallium/auxiliary/gallivm/lp_bld_logic.c
index d23de4f..41ac81b 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_logic.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_logic.c
@@ -419,3 +419,15 @@ lp_build_select_aos(struct lp_build_context *bld,
 #endif
}
 }
+
+LLVMValueRef
+lp_build_alloca(struct lp_build_context *bld)
+{
+   const struct lp_type type = bld->type;
+
+   if (type.length > 1) { /*vector*/
+  return LLVMBuildAlloca(bld->builder, lp_build_vec_type(type), "");
+   } else { /*scalar*/
+  return LLVMBuildAlloca(bld->builder, lp_build_elem_type(type), "");
+   }
+}
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_logic.h 
b/src/gallium/auxiliary/gallivm/lp_bld_logic.h
index 40d64eb..a399ebf 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_logic.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_logic.h
@@ -76,5 +76,7 @@ lp_build_select_aos(struct lp_build_context *bld,
 LLVMValueRef b,
 const boolean cond[4]);
 
+LLVMValueRef
+lp_build_alloca(struct lp_build_context *bld);
 
 #endif /* !LP_BLD_LOGIC_H */
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 85e3b1b..a52c6c5 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -185,7 +185,7 @@ emit_fetch(
  break;
 
   case TGSI_FILE_TEMPORARY:
- res = bld->temps[reg->Register.Index][swizzle];
+ res = LLVMBuildLoad(bld->base.builder, 
bld->temps[reg->Register.Index][swizzle], "");
  if(!res)
 return bld->base.undef;
  break;
@@ -287,11 +287,13 @@ emit_store(
 
switch( reg->Register.File ) {
case TGSI_FILE_OUTPUT:
-  bld->outputs[reg->Register.Index][chan_index] = value;
+  LLVMBuildStore(bld->base.builder, value,
+ bld->outputs[reg->Register.Index][chan_index]);
   break;
 
case TGSI_FILE_TEMPORARY:
-  bld->temps[reg->Register.Index][chan_index] = value;
+  LLVMBuildStore(bld->base.builder, value,
+ bld->temps[reg->Register.Index][chan_index]);
   break;
 
case TGSI_FILE_ADDRESS:
@@ -438,6 +440,42 @@ indirect_temp_reference(const struct tgsi_full_instruction 
*inst)
return FALSE;
 }
 
+static int
+emit_declaration(
+   struct lp_build_tgsi_soa_context *bld,
+   const struct tgsi_full_declaration *decl)
+{
+   unsigned first = decl->Range.First;
+   unsigned last = decl->Range.Last;
+   unsigned idx, i;
+
+   for (idx = first; idx <= last; ++idx) {
+  boolean ok;
+
+  switch (decl->Declaration.File) {
+  case TGSI_FILE_TEMPORARY:
+ for (i = 0; i < NUM_CHANNELS; i++)
+bld->temps[idx][i] = lp_build_alloca(&bld->base);
+ ok = TRUE;
+ break;
+
+  case TGSI_FILE_OUTPUT:
+ for (i = 0; i < NUM_CHANNELS; i++)
+bld->outputs[idx][i] = lp_build_alloca(&bld->base);
+ ok = TRUE;
+ break;
+
+  default:
+ /* don't need to declare other vars */
+ ok = TRUE;
+  }
+
+  if (!ok)
+ return FALSE;
+   }
+
+   return TRUE;
+}
 
 static int
 emit_instruction(
@@ -1429,6 +1467,10 @@ lp_build_tgsi_soa(LLVMBuilderRef builder,
   switch( parse.FullToken.Token.Type ) {
   case TGSI_TOKEN_TYPE_DECLARATION:
  /* Inputs already interpolated */
+ {
+if (!emit_declaration( &bld, &parse.FullToken.FullDeclaration ))
+   _debug_printf("warning: failed to define LLVM variable\n");
+ }
  break;
 
   case TGSI_TOKEN_TYPE_INSTRUCTION:
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c 
b/src/gallium/drivers/llvmpipe/lp_state_fs.c
index 320e2b7..2001a95 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
++

Mesa (master): scons: don't assume llvm is always present

2010-02-08 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 43f8a82a76599c10fa33ef35b6500924768de90c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=43f8a82a76599c10fa33ef35b6500924768de90c

Author: Zack Rusin 
Date:   Tue Feb  9 00:00:35 2010 -0500

scons: don't assume llvm is always present

---

 SConstruct |7 +--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/SConstruct b/SConstruct
index 76ab902..fa67d14 100644
--- a/SConstruct
+++ b/SConstruct
@@ -170,8 +170,11 @@ if dri:
 if drawllvm:
# See also http://www.scons.org/wiki/UsingPkgConfig
 # currently  --ldflags --libsdisabled since the driver will force the 
correct linkage
-   env.ParseConfig('llvm-config --cflags backend bitreader engine 
instrumentation interpreter ipo')
-   env.Append(CPPDEFINES = ['DRAW_LLVM'])
+env.Tool('llvm')
+if not env.has_key('LLVM_VERSION'):
+   drawllvm = False
+   else:
+   env.Append(CPPDEFINES = ['DRAW_LLVM'])
 
 # libGL
 if platform in ('linux', 'freebsd', 'darwin'):

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_7_branch): st/xorg: fix a silly offset bug in xv

2010-02-09 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_7_branch
Commit: 2d3262d47d57d71a55e5c61d4910c1f38cb0bb8c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2d3262d47d57d71a55e5c61d4910c1f38cb0bb8c

Author: Zack Rusin 
Date:   Tue Feb  9 21:12:57 2010 -0500

st/xorg: fix a silly offset bug in xv

we were multiplying the difference in the wrong direction.

---

 src/gallium/state_trackers/xorg/xorg_xv.c |   11 +--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_xv.c 
b/src/gallium/state_trackers/xorg/xorg_xv.c
index 5f6d749..eb5ce88 100644
--- a/src/gallium/state_trackers/xorg/xorg_xv.c
+++ b/src/gallium/state_trackers/xorg/xorg_xv.c
@@ -389,6 +389,9 @@ draw_yuv(struct xorg_xv_port_priv *port,
 {
struct pipe_texture **textures = port->yuv[port->current_set];
 
+   /*debug_printf("  draw_yuv([%d, %d, %d ,%d], [%d, %d, %d, %d])\n",
+src_x, src_y, src_w, src_h,
+dst_x, dst_y, dst_w, dst_h);*/
renderer_draw_yuv(port->r,
  src_x, src_y, src_w, src_h,
  dst_x, dst_y, dst_w, dst_h,
@@ -490,6 +493,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv 
*pPriv, int id,
exaMoveInPixmap(pPixmap);
dst = exaGetPixmapDriverPrivate(pPixmap);
 
+   /*debug_printf("display_video([%d, %d, %d, %d], [%d, %d, %d, %d])\n",
+ src_x, src_y, src_w, src_h, dstX, dstY, dst_w, dst_h);*/
+
if (dst && !dst->tex) {
xorg_exa_set_shared_usage(pPixmap);
pScrn->pScreen->ModifyPixmapHeader(pPixmap, 0, 0, 0, 0, 0, NULL);
@@ -540,8 +546,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv 
*pPriv, int id,
   offset_w = dst_w - w;
   offset_h = dst_h - h;
 
-  draw_yuv(pPriv, src_x + offset_x*diff_x, src_y + offset_y*diff_y,
-   src_w - offset_w*diff_x, src_h - offset_h*diff_x,
+  draw_yuv(pPriv,
+   src_x + offset_x*diff_x, src_y + offset_y*diff_y,
+   src_w - offset_w*diff_x, src_h - offset_h*diff_y,
x, y, w, h);
 
   pbox++;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): scons: export drawllvm after actually checking that llvm is present

2010-02-09 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 08e2eab8a430402c12a551c539bbc68f1f857def
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=08e2eab8a430402c12a551c539bbc68f1f857def

Author: Zack Rusin 
Date:   Wed Feb 10 00:07:51 2010 -0500

scons: export drawllvm after actually checking that llvm is present

---

 SConstruct |   13 ++---
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/SConstruct b/SConstruct
index fa67d14..2e00ec4 100644
--- a/SConstruct
+++ b/SConstruct
@@ -83,6 +83,11 @@ machine = env['machine']
 platform = env['platform']
 drawllvm = 'llvmpipe' in env['drivers']
 
+# LLVM support in the Draw module
+if drawllvm:
+env.Tool('llvm')
+if not env.has_key('LLVM_VERSION'):
+   drawllvm = False
 
 # derived options
 x86 = machine == 'x86'
@@ -168,13 +173,7 @@ if dri:
 
 # LLVM support in the Draw module
 if drawllvm:
-   # See also http://www.scons.org/wiki/UsingPkgConfig
-# currently  --ldflags --libsdisabled since the driver will force the 
correct linkage
-env.Tool('llvm')
-if not env.has_key('LLVM_VERSION'):
-   drawllvm = False
-   else:
-   env.Append(CPPDEFINES = ['DRAW_LLVM'])
+env.Append(CPPDEFINES = ['DRAW_LLVM'])
 
 # libGL
 if platform in ('linux', 'freebsd', 'darwin'):

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/xorg: fix a silly offset bug in xv

2010-02-10 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: f88b43e8d09bf359e7d5770b133cb433b25f9848
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f88b43e8d09bf359e7d5770b133cb433b25f9848

Author: Zack Rusin 
Date:   Tue Feb  9 21:12:57 2010 -0500

st/xorg: fix a silly offset bug in xv

we were multiplying the difference in the wrong direction.

---

 src/gallium/state_trackers/xorg/xorg_xv.c |   11 +--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_xv.c 
b/src/gallium/state_trackers/xorg/xorg_xv.c
index 3dcef22..e37a1c3 100644
--- a/src/gallium/state_trackers/xorg/xorg_xv.c
+++ b/src/gallium/state_trackers/xorg/xorg_xv.c
@@ -388,6 +388,9 @@ draw_yuv(struct xorg_xv_port_priv *port,
 {
struct pipe_texture **textures = port->yuv[port->current_set];
 
+   /*debug_printf("  draw_yuv([%d, %d, %d ,%d], [%d, %d, %d, %d])\n",
+src_x, src_y, src_w, src_h,
+dst_x, dst_y, dst_w, dst_h);*/
renderer_draw_yuv(port->r,
  src_x, src_y, src_w, src_h,
  dst_x, dst_y, dst_w, dst_h,
@@ -489,6 +492,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv 
*pPriv, int id,
exaMoveInPixmap(pPixmap);
dst = exaGetPixmapDriverPrivate(pPixmap);
 
+   /*debug_printf("display_video([%d, %d, %d, %d], [%d, %d, %d, %d])\n",
+ src_x, src_y, src_w, src_h, dstX, dstY, dst_w, dst_h);*/
+
if (dst && !dst->tex) {
xorg_exa_set_shared_usage(pPixmap);
pScrn->pScreen->ModifyPixmapHeader(pPixmap, 0, 0, 0, 0, 0, NULL);
@@ -539,8 +545,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv 
*pPriv, int id,
   offset_w = dst_w - w;
   offset_h = dst_h - h;
 
-  draw_yuv(pPriv, src_x + offset_x*diff_x, src_y + offset_y*diff_y,
-   src_w - offset_w*diff_x, src_h - offset_h*diff_x,
+  draw_yuv(pPriv,
+   src_x + offset_x*diff_x, src_y + offset_y*diff_y,
+   src_w - offset_w*diff_x, src_h - offset_h*diff_y,
x, y, w, h);
 
   pbox++;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_7_branch): st/dri: don't expose visuals we' ll have trouble supporting

2010-02-12 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_7_branch
Commit: df0c8d029d4285ca6edacf6712dcf3a672455254
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=df0c8d029d4285ca6edacf6712dcf3a672455254

Author: Zack Rusin 
Date:   Wed Feb 10 22:15:24 2010 -0500

st/dri: don't expose visuals we'll have trouble supporting

without getBuffersWithFormat some visuals will just cause headaches (crashes),
so if we're running on an older system simply don't advertise them.

---

 src/gallium/state_trackers/dri/dri_screen.c |   29 ++
 1 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri_screen.c 
b/src/gallium/state_trackers/dri/dri_screen.c
index 25c392e..c55daf9 100644
--- a/src/gallium/state_trackers/dri/dri_screen.c
+++ b/src/gallium/state_trackers/dri/dri_screen.c
@@ -99,12 +99,6 @@ dri_fill_in_modes(struct dri_screen *screen,
stencil_bits_array[0] = 0;
depth_buffer_factor = 1;
 
-   pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM,
- PIPE_TEXTURE_2D,
- PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
-   pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM,
- PIPE_TEXTURE_2D,
- PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
pf_x8z24 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_X8Z24_UNORM,
PIPE_TEXTURE_2D,
PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
@@ -117,9 +111,6 @@ dri_fill_in_modes(struct dri_screen *screen,
pf_z24s8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z24S8_UNORM,
PIPE_TEXTURE_2D,
PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
-   pf_r5g6b5 = p_screen->is_format_supported(p_screen, 
PIPE_FORMAT_R5G6B5_UNORM,
-PIPE_TEXTURE_2D,
-PIPE_TEXTURE_USAGE_RENDER_TARGET, 
0);
pf_a8r8g8b8 = p_screen->is_format_supported(p_screen, 
PIPE_FORMAT_A8R8G8B8_UNORM,
   PIPE_TEXTURE_2D,
   
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0);
@@ -127,6 +118,26 @@ dri_fill_in_modes(struct dri_screen *screen,
   PIPE_TEXTURE_2D,
   
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0);
 
+   /* we support buffers with different depths only if we can tell the driver
+* the actual depth of each of them. */
+   if (screen->sPriv->dri2.loader
+   && (screen->sPriv->dri2.loader->base.version > 2)
+   && (screen->sPriv->dri2.loader->getBuffersWithFormat != NULL)) {
+  pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM,
+ PIPE_TEXTURE_2D,
+ PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
+  pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM,
+ PIPE_TEXTURE_2D,
+ PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
+  pf_r5g6b5 = p_screen->is_format_supported(p_screen, 
PIPE_FORMAT_R5G6B5_UNORM,
+PIPE_TEXTURE_2D,
+
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0);
+   } else {
+  pf_z16 = FALSE;
+  pf_z32 = FALSE;
+  pf_r5g6b5 = FALSE;
+   }
+
if (pf_z16) {
   depth_bits_array[depth_buffer_factor] = 16;
   stencil_bits_array[depth_buffer_factor++] = 0;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_7_branch): st/dri, st/xorg: fix buffers that have attachements of different depth

2010-02-12 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_7_branch
Commit: 3477dc4c48fe7b82ba4a8464233c2733f400c4e1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3477dc4c48fe7b82ba4a8464233c2733f400c4e1

Author: Zack Rusin 
Date:   Wed Feb 10 19:00:35 2010 -0500

st/dri, st/xorg: fix buffers that have attachements of different depth

we actually need to specify the formats for different attachements, otherwise
if the color buffer is 24bpp and the app asks for 16bpp depth buffer than
we end up fetching the depth from the drawable which is 24bpp and end up
creating the wrong depth buffer. use the new getBuffersWithFormat extension
to pass the depth correctly.

---

 src/gallium/state_trackers/dri/dri_drawable.c |   84 +---
 src/gallium/state_trackers/xorg/xorg_dri2.c   |   24 +--
 2 files changed, 77 insertions(+), 31 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri_drawable.c 
b/src/gallium/state_trackers/dri/dri_drawable.c
index c20b71e..f3621c1 100644
--- a/src/gallium/state_trackers/dri/dri_drawable.c
+++ b/src/gallium/state_trackers/dri/dri_drawable.c
@@ -132,14 +132,22 @@ dri_get_buffers(__DRIdrawablePrivate * dPriv)
boolean have_depth = FALSE;
int i, count;
 
-   buffers = (*dri_screen->dri2.loader->getBuffers) (dri_drawable,
-&dri_drawable->w,
-&dri_drawable->h,
-drawable->attachments,
-drawable->
-num_attachments, &count,
-dri_drawable->
-loaderPrivate);
+   if ((dri_screen->dri2.loader
+&& (dri_screen->dri2.loader->base.version > 2)
+&& (dri_screen->dri2.loader->getBuffersWithFormat != NULL)))
+  buffers = (*dri_screen->dri2.loader->getBuffersWithFormat)
+(dri_drawable, &dri_drawable->w, &dri_drawable->h,
+ drawable->attachments, drawable->num_attachments,
+ &count, dri_drawable->loaderPrivate);
+   else
+  buffers = (*dri_screen->dri2.loader->getBuffers) (dri_drawable,
+&dri_drawable->w,
+&dri_drawable->h,
+drawable->attachments,
+drawable->
+num_attachments, 
&count,
+dri_drawable->
+loaderPrivate);
 
if (buffers == NULL) {
   return;
@@ -346,12 +354,12 @@ dri_create_buffer(__DRIscreenPrivate * sPriv,
case 24:
   if (visual->stencilBits == 0) {
 drawable->depth_stencil_format = (screen->d_depth_bits_last) ?
-   PIPE_FORMAT_X8Z24_UNORM:
-   PIPE_FORMAT_Z24X8_UNORM;
+  PIPE_FORMAT_X8Z24_UNORM:
+  PIPE_FORMAT_Z24X8_UNORM;
   } else {
 drawable->depth_stencil_format = (screen->sd_depth_bits_last) ?
-   PIPE_FORMAT_S8Z24_UNORM:
-   PIPE_FORMAT_Z24S8_UNORM;
+  PIPE_FORMAT_S8Z24_UNORM:
+  PIPE_FORMAT_Z24S8_UNORM;
   }
   break;
case 32:
@@ -375,23 +383,49 @@ dri_create_buffer(__DRIscreenPrivate * sPriv,
/* setup dri2 buffers information */
/* TODO incase of double buffer visual, delay fake creation */
i = 0;
-   drawable->attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
-   if (!screen->auto_fake_front)
-  drawable->attachments[i++] = __DRI_BUFFER_FAKE_FRONT_LEFT;
-   if (visual->doubleBufferMode)
-  drawable->attachments[i++] = __DRI_BUFFER_BACK_LEFT;
-   if (visual->depthBits && visual->stencilBits)
-  drawable->attachments[i++] = __DRI_BUFFER_DEPTH_STENCIL;
-   else if (visual->depthBits)
-  drawable->attachments[i++] = __DRI_BUFFER_DEPTH;
-   else if (visual->stencilBits)
-  drawable->attachments[i++] = __DRI_BUFFER_STENCIL;
-   drawable->num_attachments = i;
+   if (sPriv->dri2.loader
+   && (sPriv->dri2.loader->base.version > 2)
+   && (sPriv->dri2.loader->getBuffersWithFormat != NULL)) {
+  drawable->attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
+  drawable->attachments[i++] = visual->rgbBits;
+  if (!screen->auto_fake_front)  {
+ drawable->attachments[i++] = __DRI_BUFFER_FAKE_FRONT_LEFT;
+ drawable->attachments[i++]

Mesa (master): st/dri, st/xorg: fix buffers that have attachements of different depth

2010-02-12 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 59b4146a5dbeb108b53fc9c4132095e264ba04be
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=59b4146a5dbeb108b53fc9c4132095e264ba04be

Author: Zack Rusin 
Date:   Wed Feb 10 19:00:35 2010 -0500

st/dri, st/xorg: fix buffers that have attachements of different depth

we actually need to specify the formats for different attachements, otherwise
if the color buffer is 24bpp and the app asks for 16bpp depth buffer than
we end up fetching the depth from the drawable which is 24bpp and end up
creating the wrong depth buffer. use the new getBuffersWithFormat extension
to pass the depth correctly.

---

 src/gallium/state_trackers/dri/dri_drawable.c |   84 +---
 src/gallium/state_trackers/xorg/xorg_dri2.c   |   24 +--
 2 files changed, 77 insertions(+), 31 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri_drawable.c 
b/src/gallium/state_trackers/dri/dri_drawable.c
index ff21f2f..97277c0 100644
--- a/src/gallium/state_trackers/dri/dri_drawable.c
+++ b/src/gallium/state_trackers/dri/dri_drawable.c
@@ -132,14 +132,22 @@ dri_get_buffers(__DRIdrawable * dPriv)
boolean have_depth = FALSE;
int i, count;
 
-   buffers = (*dri_screen->dri2.loader->getBuffers) (dri_drawable,
-&dri_drawable->w,
-&dri_drawable->h,
-drawable->attachments,
-drawable->
-num_attachments, &count,
-dri_drawable->
-loaderPrivate);
+   if ((dri_screen->dri2.loader
+&& (dri_screen->dri2.loader->base.version > 2)
+&& (dri_screen->dri2.loader->getBuffersWithFormat != NULL)))
+  buffers = (*dri_screen->dri2.loader->getBuffersWithFormat)
+(dri_drawable, &dri_drawable->w, &dri_drawable->h,
+ drawable->attachments, drawable->num_attachments,
+ &count, dri_drawable->loaderPrivate);
+   else
+  buffers = (*dri_screen->dri2.loader->getBuffers) (dri_drawable,
+&dri_drawable->w,
+&dri_drawable->h,
+drawable->attachments,
+drawable->
+num_attachments, 
&count,
+dri_drawable->
+loaderPrivate);
 
if (buffers == NULL) {
   return;
@@ -346,12 +354,12 @@ dri_create_buffer(__DRIscreen * sPriv,
case 24:
   if (visual->stencilBits == 0) {
 drawable->depth_stencil_format = (screen->d_depth_bits_last) ?
-   PIPE_FORMAT_X8Z24_UNORM:
-   PIPE_FORMAT_Z24X8_UNORM;
+  PIPE_FORMAT_X8Z24_UNORM:
+  PIPE_FORMAT_Z24X8_UNORM;
   } else {
 drawable->depth_stencil_format = (screen->sd_depth_bits_last) ?
-   PIPE_FORMAT_S8Z24_UNORM:
-   PIPE_FORMAT_Z24S8_UNORM;
+  PIPE_FORMAT_S8Z24_UNORM:
+  PIPE_FORMAT_Z24S8_UNORM;
   }
   break;
case 32:
@@ -375,23 +383,49 @@ dri_create_buffer(__DRIscreen * sPriv,
/* setup dri2 buffers information */
/* TODO incase of double buffer visual, delay fake creation */
i = 0;
-   drawable->attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
-   if (!screen->auto_fake_front)
-  drawable->attachments[i++] = __DRI_BUFFER_FAKE_FRONT_LEFT;
-   if (visual->doubleBufferMode)
-  drawable->attachments[i++] = __DRI_BUFFER_BACK_LEFT;
-   if (visual->depthBits && visual->stencilBits)
-  drawable->attachments[i++] = __DRI_BUFFER_DEPTH_STENCIL;
-   else if (visual->depthBits)
-  drawable->attachments[i++] = __DRI_BUFFER_DEPTH;
-   else if (visual->stencilBits)
-  drawable->attachments[i++] = __DRI_BUFFER_STENCIL;
-   drawable->num_attachments = i;
+   if (sPriv->dri2.loader
+   && (sPriv->dri2.loader->base.version > 2)
+   && (sPriv->dri2.loader->getBuffersWithFormat != NULL)) {
+  drawable->attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
+  drawable->attachments[i++] = visual->rgbBits;
+  if (!screen->auto_fake_front)  {
+ drawable->attachments[i++] = __DRI_BUFFER_FAKE_FRONT_LEFT;
+ drawable->attachments[i++] = visual->rgbBits;

Mesa (master): st/dri: don't expose visuals we'll have trouble supporting

2010-02-12 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: fd40b9ff32ac0ed02928a2b5516c8d678431806f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd40b9ff32ac0ed02928a2b5516c8d678431806f

Author: Zack Rusin 
Date:   Wed Feb 10 22:15:24 2010 -0500

st/dri: don't expose visuals we'll have trouble supporting

without getBuffersWithFormat some visuals will just cause headaches (crashes),
so if we're running on an older system simply don't advertise them.

---

 src/gallium/state_trackers/dri/dri_screen.c |   29 ++
 1 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri_screen.c 
b/src/gallium/state_trackers/dri/dri_screen.c
index 4064976..b36ea43 100644
--- a/src/gallium/state_trackers/dri/dri_screen.c
+++ b/src/gallium/state_trackers/dri/dri_screen.c
@@ -97,12 +97,6 @@ dri_fill_in_modes(struct dri_screen *screen,
stencil_bits_array[0] = 0;
depth_buffer_factor = 1;
 
-   pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM,
- PIPE_TEXTURE_2D,
- PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
-   pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM,
- PIPE_TEXTURE_2D,
- PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0);
pf_x8z24 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_X8Z24_UNORM,
PIPE_TEXTURE_2D,
PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
@@ -115,9 +109,6 @@ dri_fill_in_modes(struct dri_screen *screen,
pf_z24s8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z24S8_UNORM,
PIPE_TEXTURE_2D,
PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
-   pf_r5g6b5 = p_screen->is_format_supported(p_screen, 
PIPE_FORMAT_R5G6B5_UNORM,
-PIPE_TEXTURE_2D,
-PIPE_TEXTURE_USAGE_RENDER_TARGET, 
0);
pf_a8r8g8b8 = p_screen->is_format_supported(p_screen, 
PIPE_FORMAT_A8R8G8B8_UNORM,
   PIPE_TEXTURE_2D,
   
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0);
@@ -125,6 +116,26 @@ dri_fill_in_modes(struct dri_screen *screen,
   PIPE_TEXTURE_2D,
   
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0);
 
+   /* we support buffers with different depths only if we can tell the driver
+* the actual depth of each of them. */
+   if (screen->sPriv->dri2.loader
+   && (screen->sPriv->dri2.loader->base.version > 2)
+   && (screen->sPriv->dri2.loader->getBuffersWithFormat != NULL)) {
+  pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM,
+ PIPE_TEXTURE_2D,
+ PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
+  pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM,
+ PIPE_TEXTURE_2D,
+ PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 
0);
+  pf_r5g6b5 = p_screen->is_format_supported(p_screen, 
PIPE_FORMAT_R5G6B5_UNORM,
+PIPE_TEXTURE_2D,
+
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0);
+   } else {
+  pf_z16 = FALSE;
+  pf_z32 = FALSE;
+  pf_r5g6b5 = FALSE;
+   }
+
if (pf_z16) {
   depth_bits_array[depth_buffer_factor] = 16;
   stencil_bits_array[depth_buffer_factor++] = 0;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): gallium/draw: initial code to properly support llvm in the draw module

2010-02-22 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7

Author: Zack Rusin 
Date:   Mon Feb 22 22:02:58 2010 -0500

gallium/draw: initial code to properly support llvm in the draw module

code generate big chunks of the vertex pipeline in order to speed up
software vertex processing.

---

 src/gallium/auxiliary/SConscript   |2 +
 src/gallium/auxiliary/draw/draw_context.c  |   26 +-
 src/gallium/auxiliary/draw/draw_context.h  |   10 +-
 src/gallium/auxiliary/draw/draw_llvm.c |  311 ++
 src/gallium/auxiliary/draw/draw_llvm.h |  154 +
 src/gallium/auxiliary/draw/draw_llvm_translate.c   |  653 
 src/gallium/auxiliary/draw/draw_private.h  |   11 +
 src/gallium/auxiliary/draw/draw_pt.c   |4 +-
 src/gallium/auxiliary/draw/draw_pt.h   |1 +
 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |  432 +
 src/gallium/auxiliary/draw/draw_vs_llvm.c  |9 +-
 src/gallium/drivers/llvmpipe/lp_context.c  |6 +-
 12 files changed, 1601 insertions(+), 18 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): llvmpipe: implement some control-flow

2010-03-01 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 80f3cc36c511f62666162bca1d88c7746b98a27d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=80f3cc36c511f62666162bca1d88c7746b98a27d

Author: Zack Rusin 
Date:   Mon Mar  1 22:11:08 2010 -0500

llvmpipe: implement some control-flow

implements if/else/endif constructs and lays down the code for looping
and others. we create a conditional execution mask which decides which
of the four inputs are enabled for any store. it's used only if an
execution mask is present, otherwise we go through a direct store.

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |  104 ---
 1 files changed, 93 insertions(+), 11 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 4cf28a9..81b0ab7 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -52,6 +52,7 @@
 #include "lp_bld_swizzle.h"
 #include "lp_bld_flow.h"
 #include "lp_bld_tgsi.h"
+#include "lp_bld_debug.h"
 
 
 #define LP_MAX_TEMPS 256
@@ -81,6 +82,23 @@
 #define QUAD_BOTTOM_LEFT  2
 #define QUAD_BOTTOM_RIGHT 3
 
+#define LP_TGSI_MAX_NESTING 16
+
+struct lp_exec_mask {
+   struct lp_build_context *bld;
+
+   boolean has_mask;
+
+   LLVMTypeRef int_vec_type;
+
+   LLVMValueRef cond_stack[LP_TGSI_MAX_NESTING];
+   int cond_stack_size;
+   LLVMValueRef cond_mask;
+
+   LLVMValueRef exec_mask;
+
+   LLVMValueRef inv_mask;
+};
 
 struct lp_build_tgsi_soa_context
 {
@@ -97,9 +115,9 @@ struct lp_build_tgsi_soa_context
LLVMValueRef temps[LP_MAX_TEMPS][NUM_CHANNELS];
 
struct lp_build_mask_context *mask;
+   struct lp_exec_mask exec_mask;
 };
 
-
 static const unsigned char
 swizzle_left[4] = {
QUAD_TOP_LEFT, QUAD_TOP_LEFT,
@@ -124,6 +142,70 @@ swizzle_bottom[4] = {
QUAD_BOTTOM_LEFT,  QUAD_BOTTOM_RIGHT
 };
 
+static void lp_exec_mask_init(struct lp_exec_mask *mask, struct 
lp_build_context *bld)
+{
+   mask->bld = bld;
+   mask->has_mask = FALSE;
+   mask->cond_stack_size = 0;
+
+   mask->int_vec_type = lp_build_int_vec_type(mask->bld->type);
+   mask->inv_mask =
+  LLVMConstSub(LLVMConstNull(mask->int_vec_type),
+   LLVMConstAllOnes(mask->int_vec_type));
+}
+
+static void lp_exec_mask_update(struct lp_exec_mask *mask)
+{
+   mask->exec_mask = mask->cond_mask;
+   if (mask->cond_stack_size > 0)
+  mask->has_mask = TRUE;
+}
+
+static void lp_exec_mask_cond_push(struct lp_exec_mask *mask,
+   LLVMValueRef val)
+{
+   mask->cond_stack[mask->cond_stack_size++] = mask->cond_mask;
+   mask->cond_mask = LLVMBuildBitCast(mask->bld->builder, val,
+  mask->int_vec_type, "");
+
+   lp_exec_mask_update(mask);
+}
+
+static void lp_exec_mask_cond_invert(struct lp_exec_mask *mask)
+{
+   LLVMValueRef prev_mask = mask->cond_stack[mask->cond_stack_size - 1];
+   LLVMValueRef inv_mask = LLVMBuildXor(mask->bld->builder,
+mask->cond_mask,
+mask->inv_mask, "");
+   mask->cond_mask = LLVMBuildAnd(mask->bld->builder,
+  inv_mask,
+  prev_mask, "");
+   lp_exec_mask_update(mask);
+}
+
+static void lp_exec_mask_cond_pop(struct lp_exec_mask *mask)
+{
+   mask->cond_mask = mask->cond_stack[--mask->cond_stack_size];
+   lp_exec_mask_update(mask);
+}
+
+static void lp_exec_mask_store(struct lp_exec_mask *mask,
+   LLVMValueRef val,
+   LLVMValueRef dst)
+{
+   if (mask->has_mask) {
+  LLVMValueRef real_val, dst_val;
+
+  dst_val = LLVMBuildLoad(mask->bld->builder, dst, "");
+  real_val = lp_build_select(mask->bld,
+ mask->exec_mask,
+ val, dst_val);
+
+  LLVMBuildStore(mask->bld->builder, real_val, dst);
+   } else
+  LLVMBuildStore(mask->bld->builder, val, dst);
+}
+
 
 static LLVMValueRef
 emit_ddx(struct lp_build_tgsi_soa_context *bld,
@@ -287,13 +369,13 @@ emit_store(
 
switch( reg->Register.File ) {
case TGSI_FILE_OUTPUT:
-  LLVMBuildStore(bld->base.builder, value,
- bld->outputs[reg->Register.Index][chan_index]);
+  lp_exec_mask_store(&bld->exec_mask, value,
+ bld->outputs[reg->Register.Index][chan_index]);
   break;
 
case TGSI_FILE_TEMPORARY:
-  LLVMBuildStore(bld->base.builder, value,
- bld->temps[reg->Register.Index][chan_index]);
+  lp_exec_mask_store(&bld->exec_mask, value,
+ bld->temps[reg->Register.Index][chan_index]);
  

Mesa (master): llvmpipe: improve based on review from Jose and fix else clauses

2010-03-02 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: faf8215bae70f020420242dc812ef141fdcf5417
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=faf8215bae70f020420242dc812ef141fdcf5417

Author: Zack Rusin 
Date:   Tue Mar  2 10:18:29 2010 -0500

llvmpipe: improve based on review from Jose and fix else clauses

else was broken in the outter most else statemants, plus the code
didn't need an inverted mask to compute the inverse of the current
condition.

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |   17 +
 1 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 81b0ab7..ae86624 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -96,8 +96,6 @@ struct lp_exec_mask {
LLVMValueRef cond_mask;
 
LLVMValueRef exec_mask;
-
-   LLVMValueRef inv_mask;
 };
 
 struct lp_build_tgsi_soa_context
@@ -149,9 +147,6 @@ static void lp_exec_mask_init(struct lp_exec_mask *mask, 
struct lp_build_context
mask->cond_stack_size = 0;
 
mask->int_vec_type = lp_build_int_vec_type(mask->bld->type);
-   mask->inv_mask =
-  LLVMConstSub(LLVMConstNull(mask->int_vec_type),
-   LLVMConstAllOnes(mask->int_vec_type));
 }
 
 static void lp_exec_mask_update(struct lp_exec_mask *mask)
@@ -174,9 +169,15 @@ static void lp_exec_mask_cond_push(struct lp_exec_mask 
*mask,
 static void lp_exec_mask_cond_invert(struct lp_exec_mask *mask)
 {
LLVMValueRef prev_mask = mask->cond_stack[mask->cond_stack_size - 1];
-   LLVMValueRef inv_mask = LLVMBuildXor(mask->bld->builder,
-mask->cond_mask,
-mask->inv_mask, "");
+   LLVMValueRef inv_mask = LLVMBuildNot(mask->bld->builder,
+mask->cond_mask, "");
+
+   /* means that we didn't have any mask before and that
+* we were fully enabled */
+   if (mask->cond_stack_size <= 1) {
+  prev_mask = LLVMConstAllOnes(mask->int_vec_type);
+   }
+
mask->cond_mask = LLVMBuildAnd(mask->bld->builder,
   inv_mask,
   prev_mask, "");

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: fix a crash by making sure we set the has_mask flag correctly

2010-03-08 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 1d84808dc045d7fcf2fade8d1504bc25e7c5041a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1d84808dc045d7fcf2fade8d1504bc25e7c5041a

Author: Zack Rusin 
Date:   Mon Mar  8 15:04:04 2010 -0500

gallivm: fix a crash by making sure we set the has_mask flag correctly

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 28ff362..fbb664d 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -152,8 +152,7 @@ static void lp_exec_mask_init(struct lp_exec_mask *mask, 
struct lp_build_context
 static void lp_exec_mask_update(struct lp_exec_mask *mask)
 {
mask->exec_mask = mask->cond_mask;
-   if (mask->cond_stack_size > 0)
-  mask->has_mask = TRUE;
+   mask->has_mask = (mask->cond_stack_size > 0);
 }
 
 static void lp_exec_mask_cond_push(struct lp_exec_mask *mask,

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): fpglsl: add some for and while loops

2010-03-10 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 5f80dad7fd03ca811f2b0561269be0180970dbf8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5f80dad7fd03ca811f2b0561269be0180970dbf8

Author: Zack Rusin 
Date:   Wed Mar 10 15:37:18 2010 -0500

fpglsl: add some for and while loops

---

 progs/fpglsl/for.glsl   |   11 +++
 progs/fpglsl/while.glsl |7 +++
 2 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/progs/fpglsl/for.glsl b/progs/fpglsl/for.glsl
new file mode 100644
index 000..6aa03d6
--- /dev/null
+++ b/progs/fpglsl/for.glsl
@@ -0,0 +1,11 @@
+uniform int KernelSizeInt;
+
+void main() {
+int i;
+vec4 sum = vec4(0.0);
+for (i = 0; i < KernelSizeInt; ++i) {
+   sum.g += 0.25;
+}
+sum.a = 1;
+gl_FragColor = sum;
+}
diff --git a/progs/fpglsl/while.glsl b/progs/fpglsl/while.glsl
new file mode 100644
index 000..05fb860
--- /dev/null
+++ b/progs/fpglsl/while.glsl
@@ -0,0 +1,7 @@
+void main() {
+float sum = 0.0;
+while (sum < 0.49) {
+   sum += 0.1;
+}
+gl_FragColor = vec4(sum);
+}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): fpglsl: set an integer uniform required by the loop example

2010-03-10 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 1ad0a0fd8fb5314e33c1b4f82c9e487c05f80fb8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1ad0a0fd8fb5314e33c1b4f82c9e487c05f80fb8

Author: Zack Rusin 
Date:   Wed Mar 10 15:42:26 2010 -0500

fpglsl: set an integer uniform required by the loop example

---

 progs/fpglsl/fp-tri.c |5 +
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/progs/fpglsl/fp-tri.c b/progs/fpglsl/fp-tri.c
index c9b08fb..8af0984 100644
--- a/progs/fpglsl/fp-tri.c
+++ b/progs/fpglsl/fp-tri.c
@@ -129,6 +129,11 @@ static void setup_uniforms()
}
 
{
+  GLint loci = glGetUniformLocationARB(program, "KernelSizeInt");
+  if (loci >= 0)
+ glUniform1i(loci, 4);
+   }
+   {
   GLint loc1f = glGetUniformLocationARB(program, "KernelValue1f");
   GLint loc2f = glGetUniformLocationARB(program, "KernelValue2f");
   GLint loc4f = glGetUniformLocationARB(program, "KernelValue4f");

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): fpglsl: a few more useful glsl tests

2010-03-10 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: a44f362567f6ed4054e88d8afc94d38f19ed6269
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a44f362567f6ed4054e88d8afc94d38f19ed6269

Author: Zack Rusin 
Date:   Wed Mar 10 16:31:18 2010 -0500

fpglsl: a few more useful glsl tests

---

 progs/fpglsl/dowhile.glsl  |8 
 progs/fpglsl/dowhile2.glsl |   10 ++
 progs/fpglsl/forbreak.glsl |   13 +
 progs/fpglsl/simpleif.glsl |6 ++
 progs/fpglsl/while2.glsl   |9 +
 5 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/progs/fpglsl/dowhile.glsl b/progs/fpglsl/dowhile.glsl
new file mode 100644
index 000..ed9d729
--- /dev/null
+++ b/progs/fpglsl/dowhile.glsl
@@ -0,0 +1,8 @@
+void main() {
+float sum = 0.0;
+do {
+   sum += 0.1;
+   break;
+} while (true);
+gl_FragColor = vec4(sum);
+}
diff --git a/progs/fpglsl/dowhile2.glsl b/progs/fpglsl/dowhile2.glsl
new file mode 100644
index 000..f3e00b8
--- /dev/null
+++ b/progs/fpglsl/dowhile2.glsl
@@ -0,0 +1,10 @@
+void main() {
+float sum = 0.0;
+do {
+   sum += 0.1;
+   if (sum < 0.49)
+   continue;
+   break;
+} while (true);
+gl_FragColor = vec4(sum);
+}
diff --git a/progs/fpglsl/forbreak.glsl b/progs/fpglsl/forbreak.glsl
new file mode 100644
index 000..87669c6
--- /dev/null
+++ b/progs/fpglsl/forbreak.glsl
@@ -0,0 +1,13 @@
+uniform int KernelSizeInt;
+
+void main() {
+int i;
+vec4 sum = vec4(0.0);
+for (i = 0; i < KernelSizeInt; ++i) {
+   sum.g += 0.25;
+if (i > 0)
+   break;
+}
+sum.a = 1;
+gl_FragColor = sum;
+}
diff --git a/progs/fpglsl/simpleif.glsl b/progs/fpglsl/simpleif.glsl
new file mode 100644
index 000..922421b
--- /dev/null
+++ b/progs/fpglsl/simpleif.glsl
@@ -0,0 +1,6 @@
+void main() {
+// this should always be true
+if (gl_FragCoord.x >= 0.0) {
+   gl_FragColor = vec4(0.5, 0.0, 0.5, 1.0);
+}
+}
diff --git a/progs/fpglsl/while2.glsl b/progs/fpglsl/while2.glsl
new file mode 100644
index 000..19c8904
--- /dev/null
+++ b/progs/fpglsl/while2.glsl
@@ -0,0 +1,9 @@
+void main() {
+float sum = 0.0;
+while (true) {
+   sum += 0.1;
+if (sum > 0.8)
+   break;
+}
+gl_FragColor = vec4(sum);
+}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: properly test the if condition and branch to the proper label

2010-03-10 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: ac33e7752d22f03db84e6a4c822b3a3f41d05f77
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ac33e7752d22f03db84e6a4c822b3a3f41d05f77

Author: Zack Rusin 
Date:   Wed Mar 10 16:36:20 2010 -0500

gallivm: properly test the if condition and branch to the proper label

makes loops work

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 085afe3..aa57289 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -301,7 +301,7 @@ static void lp_exec_endloop(struct lp_exec_mask *mask)
endloop = lp_build_insert_new_block(mask->bld->builder, "endloop");
 
LLVMBuildCondBr(mask->bld->builder,
-   i1cond, endloop, mask->loop_block);
+   i1cond, mask->loop_block, endloop);
 
LLVMPositionBuilderAtEnd(mask->bld->builder, endloop);
 
@@ -1498,6 +1498,8 @@ emit_instruction(
 
case TGSI_OPCODE_IF:
   tmp0 = emit_fetch(bld, inst, 0, CHAN_X);
+  tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_NOTEQUAL,
+  tmp0, bld->base.zero);
   lp_exec_mask_cond_push(&bld->exec_mask, tmp0);
   break;
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: implement loops

2010-03-10 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 18d406e8a8a838c82ee4ec5dbf244ab8bba0855e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=18d406e8a8a838c82ee4ec5dbf244ab8bba0855e

Author: Zack Rusin 
Date:   Tue Mar  9 15:09:15 2010 -0500

gallivm: implement loops

---

 src/gallium/auxiliary/gallivm/lp_bld_flow.c |2 +-
 src/gallium/auxiliary/gallivm/lp_bld_flow.h |4 +-
 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |  157 +-
 3 files changed, 153 insertions(+), 10 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.c 
b/src/gallium/auxiliary/gallivm/lp_bld_flow.c
index bc83138..c2f3541 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_flow.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.c
@@ -308,7 +308,7 @@ lp_build_flow_scope_end(struct lp_build_flow_context *flow)
  * Note: this function has no dependencies on the flow code and could
  * be used elsewhere.
  */
-static LLVMBasicBlockRef
+LLVMBasicBlockRef
 lp_build_insert_new_block(LLVMBuilderRef builder, const char *name)
 {
LLVMBasicBlockRef current_block;
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.h 
b/src/gallium/auxiliary/gallivm/lp_bld_flow.h
index 4c225a0..8bb2254 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_flow.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.h
@@ -145,7 +145,9 @@ lp_build_else(struct lp_build_if_state *ctx);
 
 void
 lp_build_endif(struct lp_build_if_state *ctx);
-  
+
+LLVMBasicBlockRef
+lp_build_insert_new_block(LLVMBuilderRef builder, const char *name);
 
 
 #endif /* !LP_BLD_FLOW_H */
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index fbb664d..085afe3 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -95,6 +95,19 @@ struct lp_exec_mask {
int cond_stack_size;
LLVMValueRef cond_mask;
 
+   LLVMValueRef break_stack[LP_TGSI_MAX_NESTING];
+   int break_stack_size;
+   LLVMValueRef break_mask;
+
+   LLVMValueRef cont_stack[LP_TGSI_MAX_NESTING];
+   int cont_stack_size;
+   LLVMValueRef cont_mask;
+
+   LLVMBasicBlockRef loop_stack[LP_TGSI_MAX_NESTING];
+   int loop_stack_size;
+   LLVMBasicBlockRef loop_block;
+
+
LLVMValueRef exec_mask;
 };
 
@@ -145,14 +158,33 @@ static void lp_exec_mask_init(struct lp_exec_mask *mask, 
struct lp_build_context
mask->bld = bld;
mask->has_mask = FALSE;
mask->cond_stack_size = 0;
+   mask->loop_stack_size = 0;
+   mask->break_stack_size = 0;
+   mask->cont_stack_size = 0;
 
mask->int_vec_type = lp_build_int_vec_type(mask->bld->type);
 }
 
 static void lp_exec_mask_update(struct lp_exec_mask *mask)
 {
-   mask->exec_mask = mask->cond_mask;
-   mask->has_mask = (mask->cond_stack_size > 0);
+   if (mask->loop_stack_size) {
+  /*for loops we need to update the entire mask at
+   * runtime */
+  LLVMValueRef tmp;
+  tmp = LLVMBuildAnd(mask->bld->builder,
+ mask->cont_mask,
+ mask->break_mask,
+ "maskcb");
+  mask->exec_mask = LLVMBuildAnd(mask->bld->builder,
+ mask->cond_mask,
+ tmp,
+ "maskfull");
+   } else
+  mask->exec_mask = mask->cond_mask;
+
+
+   mask->has_mask = (mask->cond_stack_size > 0 ||
+ mask->loop_stack_size > 0);
 }
 
 static void lp_exec_mask_cond_push(struct lp_exec_mask *mask,
@@ -189,6 +221,102 @@ static void lp_exec_mask_cond_pop(struct lp_exec_mask 
*mask)
lp_exec_mask_update(mask);
 }
 
+static void lp_exec_bgnloop(struct lp_exec_mask *mask)
+{
+
+   if (mask->cont_stack_size == 0)
+  mask->cont_mask = LLVMConstAllOnes(mask->int_vec_type);
+   if (mask->cont_stack_size == 0)
+  mask->break_mask = LLVMConstAllOnes(mask->int_vec_type);
+   if (mask->cond_stack_size == 0)
+  mask->cond_mask = LLVMConstAllOnes(mask->int_vec_type);
+   mask->loop_stack[mask->loop_stack_size++] = mask->loop_block;
+   mask->loop_block = lp_build_insert_new_block(mask->bld->builder, "bgnloop");
+   LLVMBuildBr(mask->bld->builder, mask->loop_block);
+   LLVMPositionBuilderAtEnd(mask->bld->builder, mask->loop_block);
+
+   lp_exec_mask_update(mask);
+}
+
+static void lp_exec_break(struct lp_exec_mask *mask)
+{
+   LLVMValueRef exec_mask = LLVMBuildNot(mask->bld->builder,
+ mask->exec_mask,
+ "break");
+
+   mask->break_stack[mask->break_stack_size++] = mask->break_mask;
+   if (mask->break_stack_size > 1) {
+  mask->break_mask = LLVMBuildAnd(mask->bld->builder,
+

Mesa (master): gallivm: simplify conditional branching

2010-03-10 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: d42229707ad4be9be5a8e122354be7102d6ec348
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d42229707ad4be9be5a8e122354be7102d6ec348

Author: Jose Fonseca 
Date:   Wed Mar 10 17:22:30 2010 -0500

gallivm: simplify conditional branching

Instead of testing each component individually, we can test the entire
vector at once.

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |   29 ++
 1 files changed, 8 insertions(+), 21 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index aa57289..b3a0fe7 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -276,27 +276,14 @@ static void lp_exec_continue(struct lp_exec_mask *mask)
 static void lp_exec_endloop(struct lp_exec_mask *mask)
 {
LLVMBasicBlockRef endloop;
-   LLVMValueRef i1cond;
-
-   { /* convert our soa vector into i1 */
-  int i;
-  LLVMValueRef packed = 0;
-  for (i = 0; i < mask->bld->type.length; ++i) {
- LLVMValueRef component = LLVMBuildExtractElement(
-mask->bld->builder,
-mask->break_mask,
-LLVMConstInt(LLVMInt32Type(), i, 0), "");
- if (packed)
-packed = LLVMBuildOr(mask->bld->builder,
- packed, component, "");
- else
-packed = component;
-  }
-  i1cond = LLVMBuildICmp(mask->bld->builder, LLVMIntNE,
- packed,
- LLVMConstNull(LLVMTypeOf(packed)),
- "");
-   }
+   LLVMTypeRef reg_type = LLVMIntType(mask->bld->type.width*
+  mask->bld->type.length);
+   /* i1cond = (mask == 0) */
+   LLVMValueRef i1cond = LLVMBuildICmp(
+  mask->bld->builder,
+  LLVMIntNE,
+  LLVMBuildBitCast(mask->bld->builder, mask->break_mask, reg_type, ""),
+  LLVMConstNull(reg_type), "");
 
endloop = lp_build_insert_new_block(mask->bld->builder, "endloop");
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: make sure that the alloca' s are the very first thing in the function

2010-03-29 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 012fabca722494162c244a367913562b8cfa4677
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=012fabca722494162c244a367913562b8cfa4677

Author: Zack Rusin 
Date:   Mon Mar 29 16:17:17 2010 -0400

gallivm: make sure that the alloca's are the very first thing in the function

otherwise mem2reg can't put them in registers

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |   20 +++-
 1 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index f160be8..95cd6a0 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -651,6 +651,19 @@ emit_declaration(
unsigned first = decl->Range.First;
unsigned last = decl->Range.Last;
unsigned idx, i;
+   LLVMBasicBlockRef current_block =
+  LLVMGetInsertBlock(bld->base.builder);
+   LLVMBasicBlockRef first_block =
+  LLVMGetEntryBasicBlock(
+ LLVMGetBasicBlockParent(current_block));
+   LLVMValueRef first_inst =
+  LLVMGetFirstInstruction(first_block);
+
+   /* we want alloca's to be the first instruction
+* in the function so we need to rewind the builder
+* to the very beginning */
+   LLVMPositionBuilderBefore(bld->base.builder,
+ first_inst);
 
for (idx = first; idx <= last; ++idx) {
   boolean ok;
@@ -673,10 +686,15 @@ emit_declaration(
  ok = TRUE;
   }
 
-  if (!ok)
+  if (!ok) {
+ LLVMPositionBuilderAtEnd(bld->base.builder,
+  current_block);
  return FALSE;
+  }
}
 
+   LLVMPositionBuilderAtEnd(bld->base.builder,
+current_block);
return TRUE;
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: cleanup the code (found by coverity)

2010-03-30 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: dc886ba1391d7d890bd1f5532bc14553e883a418
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dc886ba1391d7d890bd1f5532bc14553e883a418

Author: Zack Rusin 
Date:   Tue Mar 30 08:55:17 2010 -0400

gallivm: cleanup the code (found by coverity)

the condition can't be false, declerations are ok even if we don't
emit any.

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |   12 +---
 1 files changed, 1 insertions(+), 11 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 95cd6a0..8901e65 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -666,30 +666,20 @@ emit_declaration(
  first_inst);
 
for (idx = first; idx <= last; ++idx) {
-  boolean ok;
-
   switch (decl->Declaration.File) {
   case TGSI_FILE_TEMPORARY:
  for (i = 0; i < NUM_CHANNELS; i++)
 bld->temps[idx][i] = lp_build_alloca(&bld->base);
- ok = TRUE;
  break;
 
   case TGSI_FILE_OUTPUT:
  for (i = 0; i < NUM_CHANNELS; i++)
 bld->outputs[idx][i] = lp_build_alloca(&bld->base);
- ok = TRUE;
  break;
 
   default:
  /* don't need to declare other vars */
- ok = TRUE;
-  }
-
-  if (!ok) {
- LLVMPositionBuilderAtEnd(bld->base.builder,
-  current_block);
- return FALSE;
+ break;
   }
}
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): draw llvm: various fixes for the translation code

2010-03-30 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 1963112f9d0a2ed8e237641eef8eb384365d1375
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1963112f9d0a2ed8e237641eef8eb384365d1375

Author: Zack Rusin 
Date:   Tue Mar 30 12:35:40 2010 -0400

draw llvm: various fixes for the translation code

the from translation isn't quite right yet

---

 src/gallium/auxiliary/SConscript |3 +-
 src/gallium/auxiliary/draw/draw_gs.c |   12 +-
 src/gallium/auxiliary/draw/draw_llvm.c   |   12 +-
 src/gallium/auxiliary/draw/draw_llvm.h   |2 +-
 src/gallium/auxiliary/draw/draw_llvm_translate.c |  420 ++
 5 files changed, 206 insertions(+), 243 deletions(-)

diff --git a/src/gallium/auxiliary/SConscript b/src/gallium/auxiliary/SConscript
index 76675fb..b234b2f 100644
--- a/src/gallium/auxiliary/SConscript
+++ b/src/gallium/auxiliary/SConscript
@@ -205,7 +205,8 @@ if drawllvm:
 'gallivm/lp_bld_tgsi_soa.c',
 'gallivm/lp_bld_type.c',
 'draw/draw_llvm.c',
-'draw/draw_pt_fetch_shade_pipeline_llvm.c'
+'draw/draw_pt_fetch_shade_pipeline_llvm.c',
+'draw/draw_llvm_translate.c'
 ]
 
 gallium = env.ConvenienceLibrary(
diff --git a/src/gallium/auxiliary/draw/draw_gs.c 
b/src/gallium/auxiliary/draw/draw_gs.c
index 7069aa6..131deed 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -342,10 +342,10 @@ void draw_geometry_shader_delete(struct 
draw_geometry_shader *shader)
 void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
   struct draw_context *draw)
 {
-if (shader->machine->Tokens != shader->state.tokens) {
-   tgsi_exec_machine_bind_shader(shader->machine,
- shader->state.tokens,
- draw->gs.num_samplers,
- draw->gs.samplers);
-}
+   if (shader && shader->machine->Tokens != shader->state.tokens) {
+  tgsi_exec_machine_bind_shader(shader->machine,
+shader->state.tokens,
+draw->gs.num_samplers,
+draw->gs.samplers);
+   }
 }
diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 91fe838..aa4a310 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -115,8 +115,8 @@ init_globals(struct draw_llvm *llvm)
   llvm->context_ptr_type = LLVMPointerType(context_type, 0);
}
{
-  LLVMTypeRef buffer_ptr = LLVMPointerType(LLVMOpaqueType(), 0);
-  llvm->buffer_ptr_type = LLVMArrayType(buffer_ptr, PIPE_MAX_ATTRIBS);
+  LLVMTypeRef buffer_ptr = LLVMPointerType(LLVMIntType(8), 0);
+  llvm->buffer_ptr_type = LLVMPointerType(buffer_ptr, 0);
}
 }
 
@@ -221,19 +221,19 @@ generate_vs(struct draw_llvm *llvm,
 
 static void
 generate_fetch(LLVMBuilderRef builder,
-   const LLVMValueRef vbuffers_ptr,
+   LLVMValueRef vbuffers_ptr,
LLVMValueRef *res,
struct pipe_vertex_element *velem,
struct pipe_vertex_buffer *vbuf,
LLVMValueRef index)
 {
-   LLVMValueRef indices = LLVMConstInt(LLVMInt32Type(),
-   velem->vertex_buffer_index, 0);
+   LLVMValueRef indices = LLVMConstInt(LLVMInt64Type(), 
velem->vertex_buffer_index, 0);
LLVMValueRef vbuffer_ptr = LLVMBuildGEP(builder, vbuffers_ptr,
&indices, 1, "");
LLVMValueRef stride = LLVMBuildMul(builder,
   LLVMConstInt(LLVMInt32Type(), 
vbuf->stride, 0),
   index, "");
+
stride = LLVMBuildAdd(builder, stride,
  LLVMConstInt(LLVMInt32Type(), vbuf->buffer_offset, 0),
  "");
@@ -393,7 +393,7 @@ draw_llvm_generate(struct draw_llvm *llvm)
 struct pipe_vertex_element *velem = &draw->pt.vertex_element[j];
 struct pipe_vertex_buffer *vbuf = &draw->pt.vertex_buffer[
velem->vertex_buffer_index];
-
+LLVMDumpValue(function);
 generate_fetch(builder, vbuffers_ptr,
&aos_attribs[j][i], velem, vbuf, true_index);
  }
diff --git a/src/gallium/auxiliary/draw/draw_llvm.h 
b/src/gallium/auxiliary/draw/draw_llvm.h
index cbbfeec..e375008 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.h
+++ b/src/gallium/auxiliary/draw/draw_llvm.h
@@ -115,7 +115,7 @@ draw_shader(struct draw_jit_context *context,
 typedef void
 (*draw_jit_vert_func)(struct draw_jit_context *context,
   struct vertex_header *io,
-

Mesa (gallium_draw_llvm): draw llvm: we translate between pointers, not values directly

2010-03-30 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 6f34339af421d4001dcc01114be462d2ea381f16
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6f34339af421d4001dcc01114be462d2ea381f16

Author: Zack Rusin 
Date:   Tue Mar 30 12:52:09 2010 -0400

draw llvm: we translate between pointers, not values directly

---

 src/gallium/auxiliary/draw/draw_llvm_translate.c |   23 +++--
 1 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm_translate.c 
b/src/gallium/auxiliary/draw/draw_llvm_translate.c
index 6cbe98c..74830f1 100644
--- a/src/gallium/auxiliary/draw/draw_llvm_translate.c
+++ b/src/gallium/auxiliary/draw/draw_llvm_translate.c
@@ -21,7 +21,7 @@ static  LLVMValueRef
 from_64_float(LLVMBuilderRef builder, LLVMValueRef val)
 {
LLVMValueRef bc = LLVMBuildBitCast(builder, val,
-  LLVMDoubleType() , "");
+  LLVMPointerType(LLVMDoubleType(), 0) , 
"");
LLVMValueRef l = LLVMBuildLoad(builder, bc, "");
return LLVMBuildFPTrunc(builder, l, LLVMFloatType(), "");
 }
@@ -30,7 +30,7 @@ static LLVMValueRef
 from_32_float(LLVMBuilderRef builder, LLVMValueRef val)
 {
LLVMValueRef bc = LLVMBuildBitCast(builder, val,
-  LLVMFloatType() , "");
+  LLVMPointerType(LLVMFloatType(), 0) , 
"");
return LLVMBuildLoad(builder, bc, "");
 }
 
@@ -45,7 +45,7 @@ static INLINE LLVMValueRef
 from_16_uscaled(LLVMBuilderRef builder, LLVMValueRef val)
 {
LLVMValueRef bc = LLVMBuildBitCast(builder, val,
-  LLVMIntType(16) , "");
+  LLVMPointerType(LLVMIntType(16), 0) , 
"");
LLVMValueRef l = LLVMBuildLoad(builder, bc, "");
return LLVMBuildUIToFP(builder, l, LLVMFloatType(), "");
 }
@@ -54,7 +54,7 @@ static INLINE LLVMValueRef
 from_32_uscaled(LLVMBuilderRef builder, LLVMValueRef val)
 {
LLVMValueRef bc = LLVMBuildBitCast(builder, val,
-  LLVMIntType(32) , "");
+  LLVMPointerType(LLVMIntType(32), 0) , 
"");
LLVMValueRef l = LLVMBuildLoad(builder, bc, "");
return LLVMBuildUIToFP(builder, l, LLVMFloatType(), "");
 }
@@ -70,7 +70,7 @@ static INLINE LLVMValueRef
 from_16_sscaled(LLVMBuilderRef builder, LLVMValueRef val)
 {
LLVMValueRef bc = LLVMBuildBitCast(builder, val,
-  LLVMIntType(16) , "");
+  LLVMPointerType(LLVMIntType(16), 0) , 
"");
LLVMValueRef l = LLVMBuildLoad(builder, bc, "");
return LLVMBuildSIToFP(builder, l, LLVMFloatType(), "");
 }
@@ -79,7 +79,7 @@ static INLINE LLVMValueRef
 from_32_sscaled(LLVMBuilderRef builder, LLVMValueRef val)
 {
LLVMValueRef bc = LLVMBuildBitCast(builder, val,
-  LLVMIntType(32) , "");
+  LLVMPointerType(LLVMIntType(32), 0) , 
"");
LLVMValueRef l = LLVMBuildLoad(builder, bc, "");
return LLVMBuildSIToFP(builder, l, LLVMFloatType(), "");
 }
@@ -98,7 +98,7 @@ static INLINE LLVMValueRef
 from_16_unorm(LLVMBuilderRef builder, LLVMValueRef val)
 {
LLVMValueRef bc = LLVMBuildBitCast(builder, val,
-  LLVMIntType(16) , "");
+  LLVMPointerType(LLVMIntType(16), 0) , 
"");
LLVMValueRef l = LLVMBuildLoad(builder, bc, "");
LLVMValueRef uscaled = LLVMBuildUIToFP(builder, l, LLVMFloatType(), "");
return LLVMBuildFDiv(builder, uscaled,
@@ -109,7 +109,7 @@ static INLINE LLVMValueRef
 from_32_unorm(LLVMBuilderRef builder, LLVMValueRef val)
 {
LLVMValueRef bc = LLVMBuildBitCast(builder, val,
-  LLVMIntType(32) , "");
+  LLVMPointerType(LLVMIntType(32), 0) , 
"");
LLVMValueRef l = LLVMBuildLoad(builder, bc, "");
LLVMValueRef uscaled = LLVMBuildUIToFP(builder, l, LLVMFloatType(), "");
 
@@ -130,7 +130,7 @@ static INLINE LLVMValueRef
 from_16_snorm(LLVMBuilderRef builder, LLVMValueRef val)
 {
LLVMValueRef bc = LLVMBuildBitCast(builder, val,
-  LLVMIntType(16) , "");
+  LLVMPointerType(LLVMIntType(16), 0) , 
"");
LLVMValueRef l = LLVMBuildLoad(builder, bc, "");
LLVMValueRef uscaled = LLVMBuildSIToFP(builder, l, LLVMFloatType(), "");
return LLVMBuildFDiv(builder, uscaled,
@@ -141,7 +141,7 @@ static INLINE LLVMValueRef
 from_32_snorm(LLVMBuilderRef builder, LLVMValueRef val)

Mesa (gallium_draw_llvm): draw llvm: fix some silly mistakes

2010-03-30 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 8bc07fc83e344c9e693bdec4148009320a1731f1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bc07fc83e344c9e693bdec4148009320a1731f1

Author: Zack Rusin 
Date:   Tue Mar 30 16:16:36 2010 -0400

draw llvm: fix some silly mistakes

the vs_type selection isn't ideal, but for now both llvmpipe's fs and vs
do the same thing which is operate on 4xfloat vector as the base type

---

 src/gallium/auxiliary/draw/draw_llvm.c   |   22 +++---
 src/gallium/auxiliary/draw/draw_llvm_translate.c |1 -
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index aa4a310..cd183d5 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -205,14 +205,24 @@ generate_vs(struct draw_llvm *llvm,
 LLVMValueRef io)
 {
const struct tgsi_token *tokens = 
llvm->draw->vs.vertex_shader->state.tokens;
-   struct lp_type vs_type = lp_type_float(32);
-   LLVMValueRef vs_consts;
+   struct lp_type vs_type;
+   LLVMValueRef consts_ptr = draw_jit_context_vs_constants(builder, 
context_ptr);
+
+   memset(&vs_type, 0, sizeof vs_type);
+   vs_type.floating = TRUE; /* floating point values */
+   vs_type.sign = TRUE; /* values are signed */
+   vs_type.norm = FALSE;/* values are not limited to [0,1] or [-1,1] */
+   vs_type.width = 32;  /* 32-bit float */
+   vs_type.length = 4;  /* 4 elements per vector */
+#if 0
+   num_vs = 4;  /* number of vertices per block */
+#endif
 
lp_build_tgsi_soa(builder,
  tokens,
  vs_type,
  NULL /*struct lp_build_mask_context *mask*/,
- vs_consts,
+ consts_ptr,
  NULL /*pos*/,
  inputs,
  outputs,
@@ -312,7 +322,6 @@ convert_to_soa(LLVMBuilderRef builder,
  LLVMConstInt(LLVMInt32Type(), 2, 0));
   soa[i][3] = aos_to_soa(builder, val0, val1, val2, val3,
  LLVMConstInt(LLVMInt32Type(), 3, 0));
-
}
 }
 
@@ -329,7 +338,6 @@ draw_llvm_generate(struct draw_llvm *llvm)
LLVMValueRef io_ptr, vbuffers_ptr;
struct draw_context *draw = llvm->draw;
unsigned i, j;
-   unsigned chan;
struct lp_build_context bld;
struct lp_build_loop_state lp_loop;
struct lp_type vs_type = lp_type_float_vec(32);
@@ -393,12 +401,11 @@ draw_llvm_generate(struct draw_llvm *llvm)
 struct pipe_vertex_element *velem = &draw->pt.vertex_element[j];
 struct pipe_vertex_buffer *vbuf = &draw->pt.vertex_buffer[
velem->vertex_buffer_index];
-LLVMDumpValue(function);
 generate_fetch(builder, vbuffers_ptr,
&aos_attribs[j][i], velem, vbuf, true_index);
  }
   }
-  convert_to_soa(builder, inputs, aos_attribs,
+  convert_to_soa(builder, aos_attribs, inputs,
  draw->pt.nr_vertex_elements);
 
   generate_vs(llvm,
@@ -407,6 +414,7 @@ draw_llvm_generate(struct draw_llvm *llvm)
   inputs,
   context_ptr,
   io);
+  LLVMDumpModule(llvm->module);
}
lp_build_loop_end(builder, end, step, &lp_loop);
 
diff --git a/src/gallium/auxiliary/draw/draw_llvm_translate.c 
b/src/gallium/auxiliary/draw/draw_llvm_translate.c
index 74830f1..260568a 100644
--- a/src/gallium/auxiliary/draw/draw_llvm_translate.c
+++ b/src/gallium/auxiliary/draw/draw_llvm_translate.c
@@ -436,7 +436,6 @@ fetch(LLVMBuilderRef builder,
 
   src_tmp = LLVMBuildLoad(builder, src_tmp, "");
 
-  LLVMDumpValue(src_tmp);
   /* convert src_tmp to float */
   component = func(builder, src_tmp);
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): draw llvm: actually set the constant buffers on the context

2010-03-30 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: b0f946e90069f34e69a0492caa7a2867ae184e9a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b0f946e90069f34e69a0492caa7a2867ae184e9a

Author: Zack Rusin 
Date:   Tue Mar 30 17:21:11 2010 -0400

draw llvm: actually set the constant buffers on the context

---

 src/gallium/auxiliary/draw/draw_llvm.c |2 +-
 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |8 +++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index cd183d5..1127d54 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -110,7 +110,7 @@ init_globals(struct draw_llvm *llvm)
   LP_CHECK_STRUCT_SIZE(struct draw_jit_context,
llvm->target, context_type);
 
-  LLVMAddTypeName(llvm->module, "context", context_type);
+  LLVMAddTypeName(llvm->module, "draw_jit_context", context_type);
 
   llvm->context_ptr_type = LLVMPointerType(context_type, 0);
}
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c 
b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
index 38b1c44..f93df37 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
@@ -130,6 +130,12 @@ llvm_middle_end_prepare( struct draw_pt_middle_end *middle,
*max_vertices = *max_vertices & ~1;
 
draw_llvm_prepare(fpme->llvm);
+
+   /*XXX we only support one constant buffer */
+   fpme->llvm->jit_context.vs_constants =
+  draw->pt.user.vs_constants[0];
+   fpme->llvm->jit_context.gs_constants =
+  draw->pt.user.gs_constants[0];
 }
 
 
@@ -241,7 +247,7 @@ static void llvm_middle_end_linear_run( struct 
draw_pt_middle_end *middle,
 
fpme->llvm->jit_func( &fpme->llvm->jit_context,
  pipeline_verts,
- draw->pt.user.vbuffer,
+ (const char **)draw->pt.user.vbuffer,
  start,
  count,
  fpme->vertex_size );

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): draw llvm: fix a warning

2010-03-30 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 93e342574f5fc95789028dbe7cf637257562e9bb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=93e342574f5fc95789028dbe7cf637257562e9bb

Author: Zack Rusin 
Date:   Tue Mar 30 21:09:51 2010 -0400

draw llvm: fix a warning

---

 src/gallium/auxiliary/draw/draw_llvm.c |5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 1127d54..6347acb 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -391,6 +391,7 @@ draw_llvm_generate(struct draw_llvm *llvm)
   LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
   LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
   LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &lp_loop.counter, 1, "");
+  const LLVMValueRef (*ptr_aos)[NUM_CHANNELS];
 
   for (i = 0; i < NUM_CHANNELS; ++i) {
  LLVMValueRef true_index = LLVMBuildAdd(
@@ -408,17 +409,17 @@ draw_llvm_generate(struct draw_llvm *llvm)
   convert_to_soa(builder, aos_attribs, inputs,
  draw->pt.nr_vertex_elements);
 
+  ptr_aos = (const LLVMValueRef (*)[NUM_CHANNELS]) inputs;
   generate_vs(llvm,
   builder,
   outputs,
-  inputs,
+  ptr_aos,
   context_ptr,
   io);
   LLVMDumpModule(llvm->module);
}
lp_build_loop_end(builder, end, step, &lp_loop);
 
-
LLVMBuildRetVoid(builder);
 
LLVMDisposeBuilder(builder);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: convert floats to doubles

2010-03-31 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 2fb655d1dbb3f8425aeff1597271262661ef206b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2fb655d1dbb3f8425aeff1597271262661ef206b

Author: Zack Rusin 
Date:   Wed Mar 31 21:30:37 2010 -0400

gallivm: convert floats to doubles

printf can't handle floats, convert them to doubles so that we can
actually print floats.

---

 src/gallium/auxiliary/gallivm/lp_bld_printf.c |   11 +--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_printf.c 
b/src/gallium/auxiliary/gallivm/lp_bld_printf.c
index 78c9ec7..e4fa2c2 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_printf.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_printf.c
@@ -104,8 +104,15 @@ lp_build_printf(LLVMBuilderRef builder, const char *fmt, 
...)
params[0] = LLVMBuildGEP(builder, fmtarg, index, 2, "");
 
va_start(arglist, fmt);
-   for (i = 1; i <= argcount; i++)
-  params[i] = va_arg(arglist, LLVMValueRef);
+   for (i = 1; i <= argcount; i++) {
+  LLVMValueRef val = va_arg(arglist, LLVMValueRef);
+  LLVMTypeRef type = LLVMTypeOf(val);
+  /* printf wants doubles, so lets convert so that
+   * we can actually print them */
+  if (LLVMGetTypeKind(type) == LLVMFloatTypeKind)
+ val = LLVMBuildFPExt(builder, val, LLVMDoubleType(), "");
+  params[i] = val;
+   }
va_end(arglist);
 
return LLVMBuildCall(builder, func_printf, params, argcount + 1, "");

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): 64 new commits

2010-04-01 Thread Zack Rusin
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab5c09738760bc1b665b9809eaf921f4ac27057e
Author: Zack Rusin 
Date:   Thu Apr 1 18:58:51 2010 -0400

draw llvm: a lot better storing implementation

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b6d052e4fd83d923776320cf5fef66abcd4bf3d0
Merge: ae5487d4276007e466b6a7c783d6fb740f9539c5 
2fb655d1dbb3f8425aeff1597271262661ef206b
Author: Zack Rusin 
Date:   Wed Mar 31 22:16:09 2010 -0400

Merge remote branch 'origin/master' into gallium_draw_llvm

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2fb655d1dbb3f8425aeff1597271262661ef206b
Author: Zack Rusin 
Date:   Wed Mar 31 21:30:37 2010 -0400

gallivm: convert floats to doubles

printf can't handle floats, convert them to doubles so that we can
actually print floats.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ab737557258148d52d9b9e983e4b18560b7a460
Author: Marek Olšák 
Date:   Thu Apr 1 02:21:06 2010 +0200

r300g: add RGBA16F colorbuffer support

Disabled by default due to unresolved IP issues.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3252651fb291d7e6e4af5fed8ab461f603574cd6
Author: Marek Olšák 
Date:   Thu Apr 1 02:14:52 2010 +0200

r300g: add RGTC texture support

The CS checker already knows about this.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=39e116e3a0dce1a13dbb4395585cd3873e5ed073
Author: Marek Olšák 
Date:   Thu Apr 1 01:13:26 2010 +0200

r300g: format handling cleanup

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f45d43a17fa1f4de50e1cf3e54d3edfdff91399d
Author: José Fonseca 
Date:   Wed Mar 31 22:47:11 2010 +0100

softpipe: Use S3TC when avaiilable,

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9388ce41917fa4c706c5e284d960e1ca648ee935
Author: José Fonseca 
Date:   Wed Mar 31 22:46:42 2010 +0100

util: Hook into libtxc_dxtn.so (WIP).

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5d073b39d19c261ffdce21b1adb297182654bd0
Author: José Fonseca 
Date:   Wed Mar 31 21:37:57 2010 +0100

llvmpipe: Don't call unused generate_clamp().

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=36e92a0494f8a4d2d840d08ffece6719bc8260d6
Author: José Fonseca 
Date:   Wed Mar 31 21:27:07 2010 +0100

libgl-xlib: Fix missing X11 symbols.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=018aae950df449a18d7d69de54d51af587be94c6
Author: José Fonseca 
Date:   Wed Mar 31 21:16:16 2010 +0100

util: Make the accessors bidimensional again.

Otherwise there's no way to unpack blocks with height >1

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8012643e1f5f6e49593ec8f04d3721df53e6afb
Author: Michal Krol 
Date:   Wed Mar 31 21:54:54 2010 +0200

util: First stab at half-float conversion.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=329814c6ee8a87d67a55ecf197af9d6e6fb7ade0
Author: José Fonseca 
Date:   Thu Mar 18 11:27:29 2010 +

util: Describe PIPE_FORMAT_NONE as PIPE_FORMAT_R8_USCALED.

Avoids the need to special case PIPE_FORMAT_NONE so often.

Conflicts:

src/gallium/auxiliary/util/u_format_table.py

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9fcf2b87b35240efe8dd8ebe7d2f40268e647902
Author: José Fonseca 
Date:   Wed Mar 17 19:50:33 2010 +

util: Silence pointer to integer size mismatch errors.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=69895725cfe9d4dc917ff6e643af9e6e3a6e093f
Author: José Fonseca 
Date:   Wed Mar 31 20:15:17 2010 +0100

util: Add callback to fetch a single pixel.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3200e708582f75b3566a85228de9a698edbfb022
Author: José Fonseca 
Date:   Wed Mar 31 20:05:10 2010 +0100

python/tests: Read the number of tests to execute from command line.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=96548d80e541691281a947836b673177542fd400
Author: José Fonseca 
Date:   Wed Mar 31 19:53:25 2010 +0100

mesa: Use a consistent name of the external s3tc library for all windows 
compilers.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=93eee0537f8245c376c5b6b641b3f1d12f993b0f
Author: José Fonseca 
Date:   Wed Mar 31 19:43:57 2010 +0100

scons: Force to consider the util/u_format_pack.py for 
util/u_format_table.c.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf5cd836def660c1040d9f7a0a59aad1c69dbe37
Author: José Fonseca 
Date:   Thu Mar 11 17:52:34 2010 +

scons: Don't always include/links X11 headers/libs.

Move it into a separate tool.

TODO: Needs to be "tooled" in each SConscript that uses it.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6047c89a2309f09a738912280e49db54ba2b2b60
Author: José Fonseca 
Date:   Thu Mar 11 16:50:37 2010 +

scons: Don't always link expat.

Only needed for DRI. Should be linke

Mesa (gallium_draw_llvm): draw llvm: fix translation of formats with variable components

2010-04-02 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 557b75248a3ebc6daabe3c2b69ac24d409aaa1e0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=557b75248a3ebc6daabe3c2b69ac24d409aaa1e0

Author: Zack Rusin 
Date:   Fri Apr  2 15:56:34 2010 -0400

draw llvm: fix translation of formats with variable components

---

 src/gallium/auxiliary/draw/draw_llvm_translate.c |   13 +
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm_translate.c 
b/src/gallium/auxiliary/draw/draw_llvm_translate.c
index bc17d38..b29ebde 100644
--- a/src/gallium/auxiliary/draw/draw_llvm_translate.c
+++ b/src/gallium/auxiliary/draw/draw_llvm_translate.c
@@ -428,6 +428,12 @@ fetch(LLVMBuilderRef builder,
int offset = 0;
LLVMValueRef res = LLVMConstNull(
   LLVMVectorType(LLVMFloatType(), 4));
+   LLVMValueRef defaults[4];
+
+   defaults[0] = LLVMConstReal(LLVMFloatType(), 0);
+   defaults[1] = LLVMConstReal(LLVMFloatType(), 0);
+   defaults[2] = LLVMConstReal(LLVMFloatType(), 0);
+   defaults[3] = LLVMConstReal(LLVMFloatType(), 1);
 
for (i = 0; i < nr_components; ++i) {
   LLVMValueRef src_index = LLVMConstInt(LLVMInt32Type(), offset, 0);
@@ -447,6 +453,13 @@ fetch(LLVMBuilderRef builder,
dst_index, "");
   offset += val_size;
}
+   for (; i < 4; ++i) {
+  LLVMValueRef dst_index = LLVMConstInt(LLVMInt32Type(), i, 0);
+  res = LLVMBuildInsertElement(builder,
+   res,
+   defaults[i],
+   dst_index, "");
+   }
return res;
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): draw llvm: fix storing of outputs for the rest of the pipeline

2010-04-02 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: cb31d3b5fec6260142ed27cc37f7155915ecfe89
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cb31d3b5fec6260142ed27cc37f7155915ecfe89

Author: Zack Rusin 
Date:   Fri Apr  2 18:52:32 2010 -0400

draw llvm: fix storing of outputs for the rest of the pipeline

there's no good way of aligning the output's, and since the vertex_header
is variable sized in the first place we need to extract elements from a vector
and store them individually into an array. this gets the basic examples working
again

---

 src/gallium/auxiliary/draw/draw_llvm.c |  141 ---
 src/gallium/auxiliary/draw/draw_llvm.h |2 +-
 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |2 +-
 src/gallium/auxiliary/draw/draw_pt_post_vs.c   |3 +
 4 files changed, 94 insertions(+), 54 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 30058c8..388c991 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -20,48 +20,9 @@
 static void
 init_globals(struct draw_llvm *llvm)
 {
-LLVMTypeRef vertex_header;
-LLVMTypeRef texture_type;
+   LLVMTypeRef texture_type;
 
-   /* struct vertex_header */
-   {
-  LLVMTypeRef elem_types[3];
-
-  elem_types[0]  = LLVMIntType(32);
-  elem_types[1]  = LLVMArrayType(LLVMFloatType(), 4);
-  elem_types[2]  = LLVMArrayType(elem_types[1], 0);
-
-  vertex_header = LLVMStructType(elem_types, Elements(elem_types), 0);
-
-  /* these are bit-fields and we can't take address of them
-  LP_CHECK_MEMBER_OFFSET(struct vertex_header, clipmask,
- llvm->target, vertex_header,
- DRAW_JIT_VERTEX_CLIPMASK);
-  LP_CHECK_MEMBER_OFFSET(struct vertex_header, edgeflag,
- llvm->target, vertex_header,
- DRAW_JIT_VERTEX_EDGEFLAG);
-  LP_CHECK_MEMBER_OFFSET(struct vertex_header, pad,
- llvm->target, vertex_header,
- DRAW_JIT_VERTEX_PAD);
-  LP_CHECK_MEMBER_OFFSET(struct vertex_header, vertex_id,
- llvm->target, vertex_header,
- DRAW_JIT_VERTEX_VERTEX_ID);
-  */
-  LP_CHECK_MEMBER_OFFSET(struct vertex_header, clip,
- llvm->target, vertex_header,
- DRAW_JIT_VERTEX_CLIP);
-  LP_CHECK_MEMBER_OFFSET(struct vertex_header, data,
- llvm->target, vertex_header,
- DRAW_JIT_VERTEX_DATA);
-
-  LP_CHECK_STRUCT_SIZE(struct vertex_header,
-   llvm->target, vertex_header);
-
-  LLVMAddTypeName(llvm->module, "vertex_header", vertex_header);
-
-  llvm->vertex_header_ptr_type = LLVMPointerType(vertex_header, 0);
-   }
-  /* struct draw_jit_texture */
+   /* struct draw_jit_texture */
{
   LLVMTypeRef elem_types[4];
 
@@ -122,6 +83,45 @@ init_globals(struct draw_llvm *llvm)
}
 }
 
+static LLVMTypeRef
+create_vertex_header(struct draw_llvm *llvm, int data_elems)
+{
+   /* struct vertex_header */
+   LLVMTypeRef elem_types[3];
+   LLVMTypeRef vertex_header;
+
+   elem_types[0]  = LLVMIntType(32);
+   elem_types[1]  = LLVMArrayType(LLVMFloatType(), 4);
+   elem_types[2]  = LLVMArrayType(elem_types[1], data_elems);
+
+   vertex_header = LLVMStructType(elem_types, Elements(elem_types), 0);
+
+   /* these are bit-fields and we can't take address of them
+  LP_CHECK_MEMBER_OFFSET(struct vertex_header, clipmask,
+  llvm->target, vertex_header,
+  DRAW_JIT_VERTEX_CLIPMASK);
+  LP_CHECK_MEMBER_OFFSET(struct vertex_header, edgeflag,
+  llvm->target, vertex_header,
+  DRAW_JIT_VERTEX_EDGEFLAG);
+  LP_CHECK_MEMBER_OFFSET(struct vertex_header, pad,
+  llvm->target, vertex_header,
+  DRAW_JIT_VERTEX_PAD);
+  LP_CHECK_MEMBER_OFFSET(struct vertex_header, vertex_id,
+  llvm->target, vertex_header,
+  DRAW_JIT_VERTEX_VERTEX_ID);
+   */
+   LP_CHECK_MEMBER_OFFSET(struct vertex_header, clip,
+  llvm->target, vertex_header,
+  DRAW_JIT_VERTEX_CLIP);
+   LP_CHECK_MEMBER_OFFSET(struct vertex_header, data,
+  llvm->target, vertex_header,
+  DRAW_JIT_VERTEX_DATA);
+
+   LLVMAddTypeName(llvm->module, "vertex_header", vertex_header);
+
+   return LLVMPointerType(vertex_header, 0);
+}
+
 struct draw_llvm *
 draw_llvm_create(struct draw_context *draw)
 {
@@ -175,8 +175,9 @@ draw_llvm_destroy(struct draw_llvm *llvm)
 }
 
 void
-draw_llvm_prepare(struct draw_llvm *llvm)
+draw_llvm_prepare(struct draw_llvm *llvm, int num_inputs)
 {
+   llvm->vertex_header_ptr_type = create_vertex_header(llvm, num_inputs)

Mesa (gallium_draw_llvm): draw llvm: when generating the vertex_header struct adjust its name

2010-04-05 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 1b0bab167cd541f70c32249ca3e70da88b8c93c5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b0bab167cd541f70c32249ca3e70da88b8c93c5

Author: Zack Rusin 
Date:   Mon Apr  5 16:43:53 2010 -0400

draw llvm: when generating the vertex_header struct adjust its name

change the name to not clash and accuretly represent the number of inputs
we store in the data member

---

 src/gallium/auxiliary/draw/draw_llvm.c |5 -
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 388c991..382f765 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -89,6 +89,9 @@ create_vertex_header(struct draw_llvm *llvm, int data_elems)
/* struct vertex_header */
LLVMTypeRef elem_types[3];
LLVMTypeRef vertex_header;
+   char struct_name[24];
+
+   snprintf(struct_name, 23, "vertex_header%d", data_elems);
 
elem_types[0]  = LLVMIntType(32);
elem_types[1]  = LLVMArrayType(LLVMFloatType(), 4);
@@ -117,7 +120,7 @@ create_vertex_header(struct draw_llvm *llvm, int data_elems)
   llvm->target, vertex_header,
   DRAW_JIT_VERTEX_DATA);
 
-   LLVMAddTypeName(llvm->module, "vertex_header", vertex_header);
+   LLVMAddTypeName(llvm->module, struct_name, vertex_header);
 
return LLVMPointerType(vertex_header, 0);
 }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): draw llvm: fix loop iteration and vertex header offsets

2010-04-05 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 9dd70e7b85ddbc73bd976c4dab81476aa36c557e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9dd70e7b85ddbc73bd976c4dab81476aa36c557e

Author: Zack Rusin 
Date:   Tue Apr  6 00:13:20 2010 -0400

draw llvm: fix loop iteration and vertex header offsets

the loop was doing a NE comparison which we could have skipped if the prim
was triangles (3 verts) and our step was 4 verts. also fix offsets in conversion
to aos.

---

 src/gallium/auxiliary/draw/draw_llvm.c |   44 +--
 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |2 -
 src/gallium/auxiliary/gallivm/lp_bld_flow.c|   29 +
 src/gallium/auxiliary/gallivm/lp_bld_flow.h|7 +++
 4 files changed, 66 insertions(+), 16 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 382f765..27df596 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -17,6 +17,8 @@
 
 #include 
 
+#define DEBUG_STORE 0
+
 static void
 init_globals(struct draw_llvm *llvm)
 {
@@ -235,7 +237,7 @@ generate_vs(struct draw_llvm *llvm,
  NULL/*sampler*/);
 }
 
-
+#if DEBUG_STORE
 static void print_vectorf(LLVMBuilderRef builder,
  LLVMValueRef vec)
 {
@@ -251,6 +253,7 @@ static void print_vectorf(LLVMBuilderRef builder,
lp_build_printf(builder, "vector = [%f, %f, %f, %f]\n",
val[0], val[1], val[2], val[3]);
 }
+#endif
 
 static void
 generate_fetch(LLVMBuilderRef builder,
@@ -404,6 +407,9 @@ store_aos(LLVMBuilderRef builder,
LLVMBuildStore(builder, LLVMConstInt(LLVMInt32Type(),
 0x, 0), id_ptr);
 
+#if DEBUG_STORE
+   lp_build_printf(builder, " %p storing at %d (%p)\n", io_ptr, index, 
data_ptr);
+#endif
 #if 0
/*lp_build_printf(builder, "  %p storing at %d (%p)  ", io_ptr, index, 
data_ptr);
  print_vectorf(builder, value);*/
@@ -458,16 +464,10 @@ store_aos_array(LLVMBuilderRef builder,
 int num_outputs)
 {
LLVMValueRef attr_index = LLVMConstInt(LLVMInt32Type(), attrib, 0);
-   LLVMValueRef ind0 = start_index;
-   LLVMValueRef ind1 =
-  LLVMBuildAdd(builder, start_index,
-   LLVMConstInt(LLVMInt32Type(), 1, 0), "");
-   LLVMValueRef ind2 =
-  LLVMBuildAdd(builder, start_index,
-   LLVMConstInt(LLVMInt32Type(), 2, 0), "");
-   LLVMValueRef ind3 =
-  LLVMBuildAdd(builder, start_index,
-   LLVMConstInt(LLVMInt32Type(), 3, 0), "");
+   LLVMValueRef ind0 = LLVMConstInt(LLVMInt32Type(), 0, 0);
+   LLVMValueRef ind1 = LLVMConstInt(LLVMInt32Type(), 1, 0);
+   LLVMValueRef ind2 = LLVMConstInt(LLVMInt32Type(), 2, 0);
+   LLVMValueRef ind3 = LLVMConstInt(LLVMInt32Type(), 3, 0);
LLVMValueRef io0_ptr, io1_ptr, io2_ptr, io3_ptr;
 
debug_assert(NUM_CHANNELS == 4);
@@ -481,7 +481,10 @@ store_aos_array(LLVMBuilderRef builder,
io3_ptr = LLVMBuildGEP(builder, io_ptr,
   &ind3, 1, "");
 
-   /*lp_build_printf(builder, "io = %d\n", start_index);*/
+#if DEBUG_STORE
+   lp_build_printf(builder, "io = %d, indexes[%d, %d, %d, %d]\n",
+   start_index, ind0, ind1, ind2, ind3);
+#endif
 
store_aos(builder, io0_ptr, attr_index, aos[0]);
store_aos(builder, io1_ptr, attr_index, aos[1]);
@@ -499,6 +502,9 @@ convert_to_aos(LLVMBuilderRef builder,
 {
unsigned chan, attrib;
 
+#if DEBUG_STORE
+   lp_build_printf(builder, "   # storing begin\n");
+#endif
for (attrib = 0; attrib < num_outputs; ++attrib) {
   LLVMValueRef soa[4];
   LLVMValueRef aos[4];
@@ -522,6 +528,9 @@ convert_to_aos(LLVMBuilderRef builder,
   attrib,
   num_outputs);
}
+#if DEBUG_STORE
+   lp_build_printf(builder, "   # storing end\n");
+#endif
 }
 
 void
@@ -586,13 +595,20 @@ draw_llvm_generate(struct draw_llvm *llvm)
 
step = LLVMConstInt(LLVMInt32Type(), max_vertices, 0);
 
+#if DEBUG_STORE
+   lp_build_printf(builder, "start = %d, end = %d, step = %d\n",
+   start, end, step);
+#endif
lp_build_loop_begin(builder, start, &lp_loop);
{
   LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
   LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
   LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &lp_loop.counter, 1, "");
   const LLVMValueRef (*ptr_aos)[NUM_CHANNELS];
-
+#if DEBUG_STORE
+  lp_build_printf(builder, " --- loop counter %d\n",
+  lp_loop.counter);
+#endif
   for (i = 0; i < NUM_CHANNELS; ++i) {
  LLVMValueRef true_index = LLVMBuildAdd(
 builder,
@@ -620,7 +636,7 @@ draw_llvm_generate(struct draw_llvm *llvm)

Mesa (gallium_draw_llvm): draw llvm: fix draw arrays

2010-04-06 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: aeaf2cf18fc74f2d65fcadfad8c19f244ccd4206
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=aeaf2cf18fc74f2d65fcadfad8c19f244ccd4206

Author: Zack Rusin 
Date:   Tue Apr  6 11:00:35 2010 -0400

draw llvm: fix draw arrays

we don't index within the outputs but only within the inputs

---

 src/gallium/auxiliary/draw/draw_llvm.c |   21 ++-
 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |2 +
 src/gallium/auxiliary/draw/draw_pt_post_vs.c   |2 +-
 3 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 27df596..eac5e91 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -408,7 +408,7 @@ store_aos(LLVMBuilderRef builder,
 0x, 0), id_ptr);
 
 #if DEBUG_STORE
-   lp_build_printf(builder, " %p storing at %d (%p)\n", io_ptr, index, 
data_ptr);
+   lp_build_printf(builder, " %p storing attribute %d (io = %p)\n", 
data_ptr, index, io_ptr);
 #endif
 #if 0
/*lp_build_printf(builder, "  %p storing at %d (%p)  ", io_ptr, index, 
data_ptr);
@@ -459,7 +459,6 @@ static void
 store_aos_array(LLVMBuilderRef builder,
 LLVMValueRef io_ptr,
 LLVMValueRef aos[NUM_CHANNELS],
-LLVMValueRef start_index,
 int attrib,
 int num_outputs)
 {
@@ -482,8 +481,8 @@ store_aos_array(LLVMBuilderRef builder,
   &ind3, 1, "");
 
 #if DEBUG_STORE
-   lp_build_printf(builder, "io = %d, indexes[%d, %d, %d, %d]\n",
-   start_index, ind0, ind1, ind2, ind3);
+   lp_build_printf(builder, "io = %p, indexes[%d, %d, %d, %d]\n",
+   io_ptr, ind0, ind1, ind2, ind3);
 #endif
 
store_aos(builder, io0_ptr, attr_index, aos[0]);
@@ -497,8 +496,7 @@ convert_to_aos(LLVMBuilderRef builder,
LLVMValueRef io,
LLVMValueRef (*outputs)[NUM_CHANNELS],
int num_outputs,
-   int max_vertices,
-   LLVMValueRef start_index)
+   int max_vertices)
 {
unsigned chan, attrib;
 
@@ -524,7 +522,6 @@ convert_to_aos(LLVMBuilderRef builder,
   store_aos_array(builder,
   io,
   aos,
-  start_index,
   attrib,
   num_outputs);
}
@@ -542,7 +539,7 @@ draw_llvm_generate(struct draw_llvm *llvm)
LLVMBasicBlockRef block;
LLVMBuilderRef builder;
LLVMValueRef function;
-   LLVMValueRef start, end, count, stride, step;
+   LLVMValueRef start, end, count, stride, step, io_itr;
LLVMValueRef io_ptr, vbuffers_ptr;
struct draw_context *draw = llvm->draw;
unsigned i, j;
@@ -595,6 +592,7 @@ draw_llvm_generate(struct draw_llvm *llvm)
 
step = LLVMConstInt(LLVMInt32Type(), max_vertices, 0);
 
+   io_itr = LLVMConstInt(LLVMInt32Type(), 0, 0);
 #if DEBUG_STORE
lp_build_printf(builder, "start = %d, end = %d, step = %d\n",
start, end, step);
@@ -603,7 +601,7 @@ draw_llvm_generate(struct draw_llvm *llvm)
{
   LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
   LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
-  LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &lp_loop.counter, 1, "");
+  LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &io_itr, 1, "");
   const LLVMValueRef (*ptr_aos)[NUM_CHANNELS];
 #if DEBUG_STORE
   lp_build_printf(builder, " --- loop counter %d\n",
@@ -634,7 +632,10 @@ draw_llvm_generate(struct draw_llvm *llvm)
 
   convert_to_aos(builder, io, outputs,
  draw->vs.vertex_shader->info.num_outputs,
- max_vertices, lp_loop.counter);
+ max_vertices);
+
+  io_itr = LLVMBuildAdd(builder, io_itr,
+LLVMConstInt(LLVMInt32Type(), 1, 0), "");
}
lp_build_loop_end_cond(builder, end, step, LLVMIntUGE, &lp_loop);
 
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c 
b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
index aebfe40..307e6cc 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
@@ -245,6 +245,8 @@ static void llvm_middle_end_linear_run( struct 
draw_pt_middle_end *middle,
   return;
}
 
+   debug_printf(" Pipeline = %p (data = %p)\n",
+pipeline_verts, pipeline_verts->data);
fpme->llvm->jit_func( &fpme->llvm->jit_context,
  pipeline_verts,
  (const char **)draw->pt.user.vbuff

Mesa (gallium_draw_llvm): draw llvm: iterate with the correct stop over the outputs

2010-04-06 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: de0647dbad96db222b5643d03b3f61b093e7ef76
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=de0647dbad96db222b5643d03b3f61b093e7ef76

Author: Zack Rusin 
Date:   Tue Apr  6 12:07:33 2010 -0400

draw llvm: iterate with the correct stop over the outputs

it's whatever the var step is (4 usually) not an unconditional 1

---

 src/gallium/auxiliary/draw/draw_llvm.c |3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index eac5e91..021662e 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -634,8 +634,7 @@ draw_llvm_generate(struct draw_llvm *llvm)
  draw->vs.vertex_shader->info.num_outputs,
  max_vertices);
 
-  io_itr = LLVMBuildAdd(builder, io_itr,
-LLVMConstInt(LLVMInt32Type(), 1, 0), "");
+  io_itr = LLVMBuildAdd(builder, io_itr, step, "");
}
lp_build_loop_end_cond(builder, end, step, LLVMIntUGE, &lp_loop);
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): draw llvm: fix iteration for larger vertex arrays

2010-04-06 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 1e0bf24139f6047f505b138392fc0f1d6584d6bc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e0bf24139f6047f505b138392fc0f1d6584d6bc

Author: Zack Rusin 
Date:   Tue Apr  6 12:37:31 2010 -0400

draw llvm: fix iteration for larger vertex arrays

we were trying to store the outputs starting at the same offset we
were using for the input arrays, which was writing beyond the end of
the output array.

---

 src/gallium/auxiliary/draw/draw_llvm.c |   16 
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 021662e..a09e2a9 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -17,7 +17,7 @@
 
 #include 
 
-#define DEBUG_STORE 0
+#define DEBUG_STORE 1
 
 static void
 init_globals(struct draw_llvm *llvm)
@@ -481,7 +481,7 @@ store_aos_array(LLVMBuilderRef builder,
   &ind3, 1, "");
 
 #if DEBUG_STORE
-   lp_build_printf(builder, "io = %p, indexes[%d, %d, %d, %d]\n",
+   lp_build_printf(builder, "   io = %p, indexes[%d, %d, %d, %d]\n",
io_ptr, ind0, ind1, ind2, ind3);
 #endif
 
@@ -592,7 +592,6 @@ draw_llvm_generate(struct draw_llvm *llvm)
 
step = LLVMConstInt(LLVMInt32Type(), max_vertices, 0);
 
-   io_itr = LLVMConstInt(LLVMInt32Type(), 0, 0);
 #if DEBUG_STORE
lp_build_printf(builder, "start = %d, end = %d, step = %d\n",
start, end, step);
@@ -601,11 +600,14 @@ draw_llvm_generate(struct draw_llvm *llvm)
{
   LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
   LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
-  LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &io_itr, 1, "");
+  LLVMValueRef io;
   const LLVMValueRef (*ptr_aos)[NUM_CHANNELS];
+
+  io_itr = LLVMBuildSub(builder, lp_loop.counter, start, "");
+  io = LLVMBuildGEP(builder, io_ptr, &io_itr, 1, "");
 #if DEBUG_STORE
-  lp_build_printf(builder, " --- loop counter %d\n",
-  lp_loop.counter);
+  lp_build_printf(builder, " --- io %d = %p, loop counter %d\n",
+  io_itr, io, lp_loop.counter);
 #endif
   for (i = 0; i < NUM_CHANNELS; ++i) {
  LLVMValueRef true_index = LLVMBuildAdd(
@@ -633,8 +635,6 @@ draw_llvm_generate(struct draw_llvm *llvm)
   convert_to_aos(builder, io, outputs,
  draw->vs.vertex_shader->info.num_outputs,
  max_vertices);
-
-  io_itr = LLVMBuildAdd(builder, io_itr, step, "");
}
lp_build_loop_end_cond(builder, end, step, LLVMIntUGE, &lp_loop);
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): draw llvm: implement simple pipeline caching using variants

2010-04-06 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 323fdd8ae5baf16df6c57754e58adc8e22d28e10
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=323fdd8ae5baf16df6c57754e58adc8e22d28e10

Author: Zack Rusin 
Date:   Tue Apr  6 16:28:48 2010 -0400

draw llvm: implement simple pipeline caching using variants

---

 src/gallium/auxiliary/draw/draw_llvm.c |   75 ++--
 src/gallium/auxiliary/draw/draw_llvm.h |   27 ++--
 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |   36 --
 3 files changed, 103 insertions(+), 35 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index a09e2a9..26f756c 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -17,7 +17,12 @@
 
 #include 
 
-#define DEBUG_STORE 1
+#define DEBUG_STORE 0
+
+
+/* generates the draw jit function */
+static void
+draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *var);
 
 static void
 init_globals(struct draw_llvm *llvm)
@@ -179,11 +184,18 @@ draw_llvm_destroy(struct draw_llvm *llvm)
free(llvm);
 }
 
-void
+struct draw_llvm_variant *
 draw_llvm_prepare(struct draw_llvm *llvm, int num_inputs)
 {
+   struct draw_llvm_variant *variant = MALLOC(sizeof(struct 
draw_llvm_variant));
+
+   draw_llvm_make_variant_key(llvm, &variant->key);
+
llvm->vertex_header_ptr_type = create_vertex_header(llvm, num_inputs);
-   draw_llvm_generate(llvm);
+
+   draw_llvm_generate(llvm, variant);
+
+   return variant;
 }
 
 
@@ -530,15 +542,14 @@ convert_to_aos(LLVMBuilderRef builder,
 #endif
 }
 
-void
-draw_llvm_generate(struct draw_llvm *llvm)
+static void
+draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant)
 {
LLVMTypeRef arg_types[6];
LLVMTypeRef func_type;
LLVMValueRef context_ptr;
LLVMBasicBlockRef block;
LLVMBuilderRef builder;
-   LLVMValueRef function;
LLVMValueRef start, end, count, stride, step, io_itr;
LLVMValueRef io_ptr, vbuffers_ptr;
struct draw_context *draw = llvm->draw;
@@ -558,18 +569,18 @@ draw_llvm_generate(struct draw_llvm *llvm)
 
func_type = LLVMFunctionType(LLVMVoidType(), arg_types, 
Elements(arg_types), 0);
 
-   function = LLVMAddFunction(llvm->module, "draw_llvm_shader", func_type);
-   LLVMSetFunctionCallConv(function, LLVMCCallConv);
+   variant->function = LLVMAddFunction(llvm->module, "draw_llvm_shader", 
func_type);
+   LLVMSetFunctionCallConv(variant->function, LLVMCCallConv);
for(i = 0; i < Elements(arg_types); ++i)
   if(LLVMGetTypeKind(arg_types[i]) == LLVMPointerTypeKind)
- LLVMAddAttribute(LLVMGetParam(function, i), LLVMNoAliasAttribute);
+ LLVMAddAttribute(LLVMGetParam(variant->function, i), 
LLVMNoAliasAttribute);
 
-   context_ptr  = LLVMGetParam(function, 0);
-   io_ptr   = LLVMGetParam(function, 1);
-   vbuffers_ptr = LLVMGetParam(function, 2);
-   start= LLVMGetParam(function, 3);
-   count= LLVMGetParam(function, 4);
-   stride   = LLVMGetParam(function, 5);
+   context_ptr  = LLVMGetParam(variant->function, 0);
+   io_ptr   = LLVMGetParam(variant->function, 1);
+   vbuffers_ptr = LLVMGetParam(variant->function, 2);
+   start= LLVMGetParam(variant->function, 3);
+   count= LLVMGetParam(variant->function, 4);
+   stride   = LLVMGetParam(variant->function, 5);
 
lp_build_name(context_ptr, "context");
lp_build_name(io_ptr, "io");
@@ -582,7 +593,7 @@ draw_llvm_generate(struct draw_llvm *llvm)
 * Function body
 */
 
-   block = LLVMAppendBasicBlock(function, "entry");
+   block = LLVMAppendBasicBlock(variant->function, "entry");
builder = LLVMCreateBuilder();
LLVMPositionBuilderAtEnd(builder, block);
 
@@ -647,20 +658,40 @@ draw_llvm_generate(struct draw_llvm *llvm)
 */
 
 #ifdef DEBUG
-   if(LLVMVerifyFunction(function, LLVMPrintMessageAction)) {
-  LLVMDumpValue(function);
+   if(LLVMVerifyFunction(variant->function, LLVMPrintMessageAction)) {
+  LLVMDumpValue(variant->function);
   assert(0);
}
 #endif
 
-   LLVMRunFunctionPassManager(llvm->pass, function);
+   LLVMRunFunctionPassManager(llvm->pass, variant->function);
 
if (1) {
-  LLVMDumpValue(function);
+  LLVMDumpValue(variant->function);
   debug_printf("\n");
}
-   llvm->jit_func = 
(draw_jit_vert_func)LLVMGetPointerToGlobal(llvm->draw->engine, function);
+   variant->jit_func = 
(draw_jit_vert_func)LLVMGetPointerToGlobal(llvm->draw->engine, 
variant->function);
 
if (1)
-  lp_disassemble(llvm->jit_func);
+  lp_disassemble(variant->jit_func);
+}
+
+void
+draw_llvm_make_variant_key(struct draw_llvm *llvm,
+   struct draw_llvm_variant_key *key)
+{
+   key->nr_vertex_buffers = llvm->draw->pt

Mesa (gallium_draw_llvm): draw llvm: disable debugging output

2010-04-06 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 06bda76c08618eaf68de70f4f776329e6ef1f196
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=06bda76c08618eaf68de70f4f776329e6ef1f196

Author: Zack Rusin 
Date:   Tue Apr  6 17:14:13 2010 -0400

draw llvm: disable debugging output

---

 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |2 ++
 src/gallium/auxiliary/draw/draw_pt_post_vs.c   |2 ++
 2 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c 
b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
index 0ed043d..d2ed0eb 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
@@ -264,8 +264,10 @@ static void llvm_middle_end_linear_run( struct 
draw_pt_middle_end *middle,
   return;
}
 
+#if 0
debug_printf(" Pipeline = %p (data = %p)\n",
 pipeline_verts, pipeline_verts->data);
+#endif
fpme->current_variant->jit_func( &fpme->llvm->jit_context,
 pipeline_verts,
 (const char **)draw->pt.user.vbuffer,
diff --git a/src/gallium/auxiliary/draw/draw_pt_post_vs.c 
b/src/gallium/auxiliary/draw/draw_pt_post_vs.c
index af07926..5525dfc 100644
--- a/src/gallium/auxiliary/draw/draw_pt_post_vs.c
+++ b/src/gallium/auxiliary/draw/draw_pt_post_vs.c
@@ -108,8 +108,10 @@ static boolean post_vs_cliptest_viewport_gl( struct 
pt_post_vs *pvs,
for (j = 0; j < count; j++) {
   float *position = out->data[pos];
 
+#if 0
   debug_printf("%d) io = %p, data = %p = [%f, %f, %f, %f]\n",
j, out, position, position[0], position[1], position[2], 
position[3]);
+#endif
 
   out->clip[0] = position[0];
   out->clip[1] = position[1];

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (gallium_draw_llvm): llvmpipe: use a define to decide whether to use draw llvm paths

2010-04-06 Thread Zack Rusin
Module: Mesa
Branch: gallium_draw_llvm
Commit: 695a029e9b8c70a34c5cde01ab32ac377e513707
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=695a029e9b8c70a34c5cde01ab32ac377e513707

Author: Zack Rusin 
Date:   Tue Apr  6 17:14:30 2010 -0400

llvmpipe: use a define to decide whether to use draw llvm paths

right now disabled by default

---

 src/gallium/drivers/llvmpipe/lp_context.c |6 +-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_context.c 
b/src/gallium/drivers/llvmpipe/lp_context.c
index 383e4b0..5c476f6 100644
--- a/src/gallium/drivers/llvmpipe/lp_context.c
+++ b/src/gallium/drivers/llvmpipe/lp_context.c
@@ -47,7 +47,7 @@
 #include "lp_setup.h"
 
 
-
+#define USE_DRAW_LLVM 0
 
 
 static void llvmpipe_destroy( struct pipe_context *pipe )
@@ -182,7 +182,11 @@ llvmpipe_create_context( struct pipe_screen *screen, void 
*priv )
/*
 * Create drawing context and plug our rendering stage into it.
 */
+#if USE_DRAW_LLVM
llvmpipe->draw = draw_create_with_llvm(llvmscreen->engine);
+#else
+   llvmpipe->draw = draw_create();
+#endif
if (!llvmpipe->draw)
   goto fail;
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): 23 new commits

2010-04-06 Thread Zack Rusin
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ae69f9fbf0a1aab7186e5b644085a5fe5aea99af
Merge: fe130a7e5e3e7cc31e070d8088203706c687e6e8 
695a029e9b8c70a34c5cde01ab32ac377e513707
Author: Zack Rusin 
Date:   Tue Apr 6 20:09:08 2010 -0400

Merge branch 'gallium_draw_llvm'

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=695a029e9b8c70a34c5cde01ab32ac377e513707
Author: Zack Rusin 
Date:   Tue Apr 6 17:14:30 2010 -0400

llvmpipe: use a define to decide whether to use draw llvm paths

right now disabled by default

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=06bda76c08618eaf68de70f4f776329e6ef1f196
Author: Zack Rusin 
Date:   Tue Apr 6 17:14:13 2010 -0400

draw llvm: disable debugging output

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=323fdd8ae5baf16df6c57754e58adc8e22d28e10
Author: Zack Rusin 
Date:   Tue Apr 6 16:28:48 2010 -0400

draw llvm: implement simple pipeline caching using variants

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e0bf24139f6047f505b138392fc0f1d6584d6bc
Author: Zack Rusin 
Date:   Tue Apr 6 12:37:31 2010 -0400

draw llvm: fix iteration for larger vertex arrays

we were trying to store the outputs starting at the same offset we
were using for the input arrays, which was writing beyond the end of
the output array.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=de0647dbad96db222b5643d03b3f61b093e7ef76
Author: Zack Rusin 
Date:   Tue Apr 6 12:07:33 2010 -0400

draw llvm: iterate with the correct stop over the outputs

it's whatever the var step is (4 usually) not an unconditional 1

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=aeaf2cf18fc74f2d65fcadfad8c19f244ccd4206
Author: Zack Rusin 
Date:   Tue Apr 6 11:00:35 2010 -0400

draw llvm: fix draw arrays

we don't index within the outputs but only within the inputs

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9dd70e7b85ddbc73bd976c4dab81476aa36c557e
Author: Zack Rusin 
Date:   Tue Apr 6 00:13:20 2010 -0400

draw llvm: fix loop iteration and vertex header offsets

the loop was doing a NE comparison which we could have skipped if the prim
was triangles (3 verts) and our step was 4 verts. also fix offsets in 
conversion
to aos.

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b0bab167cd541f70c32249ca3e70da88b8c93c5
Author: Zack Rusin 
Date:   Mon Apr 5 16:43:53 2010 -0400

draw llvm: when generating the vertex_header struct adjust its name

change the name to not clash and accuretly represent the number of inputs
we store in the data member

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cb31d3b5fec6260142ed27cc37f7155915ecfe89
Author: Zack Rusin 
Date:   Fri Apr 2 18:52:32 2010 -0400

draw llvm: fix storing of outputs for the rest of the pipeline

there's no good way of aligning the output's, and since the vertex_header
is variable sized in the first place we need to extract elements from a 
vector
and store them individually into an array. this gets the basic examples 
working
again

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=557b75248a3ebc6daabe3c2b69ac24d409aaa1e0
Author: Zack Rusin 
Date:   Fri Apr 2 15:56:34 2010 -0400

draw llvm: fix translation of formats with variable components

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab5c09738760bc1b665b9809eaf921f4ac27057e
Author: Zack Rusin 
Date:   Thu Apr 1 18:58:51 2010 -0400

draw llvm: a lot better storing implementation

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b6d052e4fd83d923776320cf5fef66abcd4bf3d0
Merge: ae5487d4276007e466b6a7c783d6fb740f9539c5 
2fb655d1dbb3f8425aeff1597271262661ef206b
Author: Zack Rusin 
Date:   Wed Mar 31 22:16:09 2010 -0400

Merge remote branch 'origin/master' into gallium_draw_llvm

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ae5487d4276007e466b6a7c783d6fb740f9539c5
Author: Zack Rusin 
Date:   Wed Mar 31 22:15:12 2010 -0400

draw llvm: fix iteration over buffers

fetching was converting garbage

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=880e3fb09b538f6f0b6fad2db7e0e10e9df43555
Merge: 93e342574f5fc95789028dbe7cf637257562e9bb 
4afed821baa6993d85a07c67d42ea40d4e9a600a
Author: Zack Rusin 
Date:   Tue Mar 30 21:10:33 2010 -0400

Merge remote branch 'origin/master' into gallium_draw_llvm

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=93e342574f5fc95789028dbe7cf637257562e9bb
Author: Zack Rusin 
Date:   Tue Mar 30 21:09:51 2010 -0400

draw llvm: fix a warning

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b0f946e90069f34e69a0492caa7a2867ae184e9a
Author: Zack Rusin 
Date:   Tue Mar 30 17:21:11 2010 -0400

draw llvm: actually set the constant buffers on the context

URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bc07fc83e344c9e693bde

Mesa (master): draw llvm: disable printing of the LLVM ir

2010-04-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 1570760a9756234978ff56a9db4c781a630fe6ce
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1570760a9756234978ff56a9db4c781a630fe6ce

Author: Zack Rusin 
Date:   Tue Apr  6 20:27:17 2010 -0400

draw llvm: disable printing of the LLVM ir

---

 src/gallium/auxiliary/draw/draw_llvm.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 26f756c..121cce3 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -666,13 +666,13 @@ draw_llvm_generate(struct draw_llvm *llvm, struct 
draw_llvm_variant *variant)
 
LLVMRunFunctionPassManager(llvm->pass, variant->function);
 
-   if (1) {
+   if (0) {
   LLVMDumpValue(variant->function);
   debug_printf("\n");
}
variant->jit_func = 
(draw_jit_vert_func)LLVMGetPointerToGlobal(llvm->draw->engine, 
variant->function);
 
-   if (1)
+   if (0)
   lp_disassemble(variant->jit_func);
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): scons: define DRAW_LLVM if we're building it

2010-04-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: c60a161cc5c92b495007cbd3f709a5b9405e019a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c60a161cc5c92b495007cbd3f709a5b9405e019a

Author: Zack Rusin 
Date:   Tue Apr  6 22:41:11 2010 -0400

scons: define DRAW_LLVM if we're building it

---

 SConstruct |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/SConstruct b/SConstruct
index d9230bd..56d88cc 100644
--- a/SConstruct
+++ b/SConstruct
@@ -88,6 +88,8 @@ if drawllvm:
 env.Tool('llvm')
 if not env.has_key('LLVM_VERSION'):
drawllvm = False
+if drawllvm:
+env.Append(CFLAGS = ['-DDRAW_LLVM=1'])
 
 # derived options
 x86 = machine == 'x86'

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): draw llvm: highly reduce the compilation times for draw llvm

2010-04-07 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 821abff8c03031603111abc17dabe7cfa28a31e1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=821abff8c03031603111abc17dabe7cfa28a31e1

Author: Zack Rusin 
Date:   Wed Apr  7 17:46:55 2010 -0400

draw llvm: highly reduce the compilation times for draw llvm

our code resets pipe_vertex_buffer's with different offsets when rendering
vbo, meaning that we kept creating insane number of shaders even for simple
apps e.g. geartrain had 54 shaders and it was taking almost 27 seconds just to
compile them. this patch passes pipe_vertex_buffer's to the jit function and 
lets
it to the stride/buffer_offset computation at run time. the slowdown at runtime
is largely unnoticable but the we go from 54 shaders to 3, and from 27 seconds 
to less
than 1.

---

 src/gallium/auxiliary/draw/draw_llvm.c |   59 ++-
 src/gallium/auxiliary/draw/draw_llvm.h |   58 +++-
 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |6 ++-
 3 files changed, 56 insertions(+), 67 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 3a4e14c..be73a67 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -90,6 +90,29 @@ init_globals(struct draw_llvm *llvm)
   LLVMTypeRef buffer_ptr = LLVMPointerType(LLVMIntType(8), 0);
   llvm->buffer_ptr_type = LLVMPointerType(buffer_ptr, 0);
}
+   /* struct pipe_vertex_buffer */
+   {
+  LLVMTypeRef elem_types[4];
+  LLVMTypeRef vb_type;
+
+  elem_types[0] = LLVMInt32Type();
+  elem_types[1] = LLVMInt32Type();
+  elem_types[2] = LLVMInt32Type();
+  elem_types[3] = LLVMPointerType(LLVMOpaqueType(), 0); /* vs_constants */
+
+  vb_type = LLVMStructType(elem_types, Elements(elem_types), 0);
+
+  LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, stride,
+ llvm->target, vb_type, 0);
+  LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, buffer_offset,
+ llvm->target, vb_type, 2);
+  LP_CHECK_STRUCT_SIZE(struct pipe_vertex_buffer,
+   llvm->target, vb_type);
+
+  LLVMAddTypeName(llvm->module, "pipe_vertex_buffer", vb_type);
+
+  llvm->vb_ptr_type = LLVMPointerType(vb_type, 0);
+   }
 }
 
 static LLVMTypeRef
@@ -241,7 +264,7 @@ generate_vs(struct draw_llvm *llvm,
num_vs = 4;  /* number of vertices per block */
 #endif
 
-   tgsi_dump(tokens, 0);
+   /*tgsi_dump(tokens, 0);*/
lp_build_tgsi_soa(builder,
  tokens,
  vs_type,
@@ -276,20 +299,22 @@ generate_fetch(LLVMBuilderRef builder,
LLVMValueRef vbuffers_ptr,
LLVMValueRef *res,
struct pipe_vertex_element *velem,
-   struct pipe_vertex_buffer *vbuf,
+   LLVMValueRef vbuf,
LLVMValueRef index)
 {
LLVMValueRef indices = LLVMConstInt(LLVMInt64Type(), 
velem->vertex_buffer_index, 0);
LLVMValueRef vbuffer_ptr = LLVMBuildGEP(builder, vbuffers_ptr,
&indices, 1, "");
+   LLVMValueRef vb_stride = draw_jit_vbuffer_stride(builder, vbuf);
+   LLVMValueRef vb_buffer_offset = draw_jit_vbuffer_offset(builder, vbuf);
LLVMValueRef stride = LLVMBuildMul(builder,
-  LLVMConstInt(LLVMInt32Type(), 
vbuf->stride, 0),
+  vb_stride,
   index, "");
 
vbuffer_ptr = LLVMBuildLoad(builder, vbuffer_ptr, "vbuffer");
 
stride = LLVMBuildAdd(builder, stride,
- LLVMConstInt(LLVMInt32Type(), vbuf->buffer_offset, 0),
+ vb_buffer_offset,
  "");
stride = LLVMBuildAdd(builder, stride,
  LLVMConstInt(LLVMInt32Type(), velem->src_offset, 0),
@@ -549,13 +574,13 @@ convert_to_aos(LLVMBuilderRef builder,
 static void
 draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant)
 {
-   LLVMTypeRef arg_types[6];
+   LLVMTypeRef arg_types[7];
LLVMTypeRef func_type;
LLVMValueRef context_ptr;
LLVMBasicBlockRef block;
LLVMBuilderRef builder;
LLVMValueRef start, end, count, stride, step, io_itr;
-   LLVMValueRef io_ptr, vbuffers_ptr;
+   LLVMValueRef io_ptr, vbuffers_ptr, vb_ptr;
struct draw_context *draw = llvm->draw;
unsigned i, j;
struct lp_build_context bld;
@@ -570,6 +595,7 @@ draw_llvm_generate(struct draw_llvm *llvm, struct 
draw_llvm_variant *variant)
arg_types[3] = LLVMInt32Type();  /* start */
arg_types[4] = LLVMInt32Type();  /* count */
arg_types[5] = LLVMInt32Type();  /* stride */
+   arg_types[6] = llvm->vb_ptr_type;/* pipe_vert

Mesa (master): draw llvm: hook up the generated function into the draw elts path

2010-04-08 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 074084d5639dc0eba93d3497a5618e018b8b7433
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=074084d5639dc0eba93d3497a5618e018b8b7433

Author: Zack Rusin 
Date:   Thu Apr  8 10:53:21 2010 -0400

draw llvm: hook up the generated function into the draw elts path

we were only using the jited function in the linear case, now drawelts
correctly uses the same path. it results in a significant gain in
real world apps (openarena went from 23fps to 29fps)

---

 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |   40 +++
 1 files changed, 7 insertions(+), 33 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c 
b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
index 42dcc08..f71271b 100644
--- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c
@@ -314,8 +314,6 @@ llvm_middle_end_linear_run_elts( struct draw_pt_middle_end 
*middle,
 {
struct llvm_middle_end *fpme = (struct llvm_middle_end *)middle;
struct draw_context *draw = fpme->draw;
-   struct draw_vertex_shader *shader = draw->vs.vertex_shader;
-   struct draw_geometry_shader *geometry_shader = draw->gs.geometry_shader;
unsigned opt = fpme->opt;
unsigned alloc_count = align( count, 4 );
 
@@ -325,37 +323,13 @@ llvm_middle_end_linear_run_elts( struct 
draw_pt_middle_end *middle,
if (!pipeline_verts)
   return FALSE;
 
-   /* Fetch into our vertex buffer
-*/
-   draw_pt_fetch_run_linear( fpme->fetch,
- start,
- count,
- (char *)pipeline_verts );
-
-   /* Run the shader, note that this overwrites the data[] parts of
-* the pipeline verts.  If there is no shader, ie if
-* bypass_vs_clip_and_viewport, then the inputs == outputs, and are
-* already in the correct place.
-*/
-   if (opt & PT_SHADE)
-   {
-  shader->run_linear(shader,
-(const float (*)[4])pipeline_verts->data,
-(  float (*)[4])pipeline_verts->data,
-draw->pt.user.vs_constants,
-count,
-fpme->vertex_size,
-fpme->vertex_size);
-
-  if (geometry_shader)
- draw_geometry_shader_run(geometry_shader,
-  (const float (*)[4])pipeline_verts->data,
-  (  float (*)[4])pipeline_verts->data,
-  draw->pt.user.gs_constants,
-  count,
-  fpme->vertex_size,
-  fpme->vertex_size);
-   }
+   fpme->current_variant->jit_func( &fpme->llvm->jit_context,
+pipeline_verts,
+(const char **)draw->pt.user.vbuffer,
+start,
+count,
+fpme->vertex_size,
+draw->pt.vertex_buffer );
 
if (draw_pt_post_vs_run( fpme->post_vs,
pipeline_verts,

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Re: Mesa (master): gallium/util: add fast half float conversion functions

2010-04-12 Thread Zack Rusin
On Thursday 01 April 2010 07:33:26 Micha?? Kr??l wrote:
> Module: Mesa
> Branch: master
> Commit: 3ff175d6de89ad92d167362355501f99d06f0f97
> URL:   
>  http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ff175d6de89ad92d16736235
> 5501f99d06f0f97
> 
> Author: Luca Barbieri 
> Date:   Wed Mar 24 18:12:45 2010 +0100
> 
> gallium/util: add fast half float conversion functions

>  src/gallium/auxiliary/util/u_half.c |  123
>  +++ 
>  src/gallium/auxiliary/util/u_half.h | 
>   55 ++

Can you please fix the indention on those two files?
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): draw llvm: fix constructor mess

2010-04-19 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 7c4208c3a0f48955720f41b3cb320a120c505ba6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7c4208c3a0f48955720f41b3cb320a120c505ba6

Author: Zack Rusin 
Date:   Mon Apr 19 12:46:08 2010 -0400

draw llvm: fix constructor mess

use just one constructor to figure out whether to use llvm.

---

 src/gallium/auxiliary/draw/draw_context.c |8 
 src/gallium/auxiliary/draw/draw_context.h |7 ---
 src/gallium/auxiliary/draw/draw_llvm.c|   22 +-
 src/gallium/drivers/llvmpipe/lp_context.c |8 
 4 files changed, 9 insertions(+), 36 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_context.c 
b/src/gallium/auxiliary/draw/draw_context.c
index 5726444..0d8f880 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -38,6 +38,9 @@
 #include "draw_vs.h"
 #include "draw_gs.h"
 
+#if HAVE_LLVM
+#include "gallivm/lp_bld_init.h"
+#endif
 
 struct draw_context *draw_create( struct pipe_context *pipe )
 {
@@ -45,6 +48,11 @@ struct draw_context *draw_create( struct pipe_context *pipe )
if (draw == NULL)
   goto fail;
 
+#if HAVE_LLVM
+   assert(lp_build_engine);
+   draw->engine = lp_build_engine;
+#endif
+
if (!draw_init(draw))
   goto fail;
 
diff --git a/src/gallium/auxiliary/draw/draw_context.h 
b/src/gallium/auxiliary/draw/draw_context.h
index 0d32830..51767bb 100644
--- a/src/gallium/auxiliary/draw/draw_context.h
+++ b/src/gallium/auxiliary/draw/draw_context.h
@@ -197,11 +197,4 @@ boolean draw_need_pipeline(const struct draw_context *draw,
const struct pipe_rasterizer_state *rasterizer,
unsigned prim );
 
-#ifdef HAVE_LLVM
-/***
- * LLVM integration
- */
-struct draw_context *draw_create_with_llvm(void);
-#endif
-
 #endif /* DRAW_CONTEXT_H */
diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index a5403a4..e3ef9e4 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -196,7 +196,7 @@ draw_llvm_create(struct draw_context *draw)
init_globals(llvm);
 
 
-#if 1
+#if 0
LLVMDumpModule(llvm->module);
 #endif
 
@@ -223,26 +223,6 @@ draw_llvm_prepare(struct draw_llvm *llvm, int num_inputs)
return variant;
 }
 
-
-struct draw_context *draw_create_with_llvm(void)
-{
-   struct draw_context *draw = CALLOC_STRUCT( draw_context );
-   if (draw == NULL)
-  goto fail;
-
-   assert(lp_build_engine);
-   draw->engine = lp_build_engine;
-
-   if (!draw_init(draw))
-  goto fail;
-
-   return draw;
-
-fail:
-   draw_destroy( draw );
-   return NULL;
-}
-
 static void
 generate_vs(struct draw_llvm *llvm,
 LLVMBuilderRef builder,
diff --git a/src/gallium/drivers/llvmpipe/lp_context.c 
b/src/gallium/drivers/llvmpipe/lp_context.c
index efdc245..f7cf06d 100644
--- a/src/gallium/drivers/llvmpipe/lp_context.c
+++ b/src/gallium/drivers/llvmpipe/lp_context.c
@@ -45,10 +45,6 @@
 #include "lp_query.h"
 #include "lp_setup.h"
 
-
-#define USE_DRAW_LLVM 1
-
-
 static void llvmpipe_destroy( struct pipe_context *pipe )
 {
struct llvmpipe_context *llvmpipe = llvmpipe_context( pipe );
@@ -162,11 +158,7 @@ llvmpipe_create_context( struct pipe_screen *screen, void 
*priv )
/*
 * Create drawing context and plug our rendering stage into it.
 */
-#if USE_DRAW_LLVM
-   llvmpipe->draw = draw_create_with_llvm(&llvmpipe->pipe);
-#else
llvmpipe->draw = draw_create(&llvmpipe->pipe);
-#endif
if (!llvmpipe->draw)
   goto fail;
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): llvmpipe: enable draw llvm by default

2010-04-19 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: deee1523639b4b59841ecbbdebe6797541e0e7d1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=deee1523639b4b59841ecbbdebe6797541e0e7d1

Author: Zack Rusin 
Date:   Fri Apr  9 19:17:04 2010 -0400

llvmpipe: enable draw llvm by default

---

 src/gallium/drivers/llvmpipe/lp_context.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_context.c 
b/src/gallium/drivers/llvmpipe/lp_context.c
index 900740e..efdc245 100644
--- a/src/gallium/drivers/llvmpipe/lp_context.c
+++ b/src/gallium/drivers/llvmpipe/lp_context.c
@@ -46,7 +46,7 @@
 #include "lp_setup.h"
 
 
-#define USE_DRAW_LLVM 0
+#define USE_DRAW_LLVM 1
 
 
 static void llvmpipe_destroy( struct pipe_context *pipe )

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): draw llvm: allow runtime switching of pipelines (yes/ no to llvm)

2010-04-19 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 4df3e76949e1ca7b29f844ad9a715b442396a024
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4df3e76949e1ca7b29f844ad9a715b442396a024

Author: Zack Rusin 
Date:   Mon Apr 19 12:52:25 2010 -0400

draw llvm: allow runtime switching of pipelines (yes/no to llvm)

use DRAW_USE_LLVM to disable or enable (default) llvm

---

 src/gallium/auxiliary/draw/draw_private.h |1 +
 src/gallium/auxiliary/draw/draw_pt.c  |4 +++-
 2 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_private.h 
b/src/gallium/auxiliary/draw/draw_private.h
index e250b3a..2ef05ce 100644
--- a/src/gallium/auxiliary/draw/draw_private.h
+++ b/src/gallium/auxiliary/draw/draw_private.h
@@ -251,6 +251,7 @@ struct draw_context
 
 #ifdef HAVE_LLVM
LLVMExecutionEngineRef engine;
+   bool use_llvm;
 #endif
void *driver_private;
 };
diff --git a/src/gallium/auxiliary/draw/draw_pt.c 
b/src/gallium/auxiliary/draw/draw_pt.c
index 43f6c56..f803e6d 100644
--- a/src/gallium/auxiliary/draw/draw_pt.c
+++ b/src/gallium/auxiliary/draw/draw_pt.c
@@ -123,6 +123,7 @@ boolean draw_pt_init( struct draw_context *draw )
 {
draw->pt.test_fse = debug_get_bool_option("DRAW_FSE", FALSE);
draw->pt.no_fse = debug_get_bool_option("DRAW_NO_FSE", FALSE);
+   draw->use_llvm = debug_get_bool_option("DRAW_USE_LLVM", TRUE);
 
draw->pt.front.vcache = draw_pt_vcache( draw );
if (!draw->pt.front.vcache)
@@ -141,7 +142,8 @@ boolean draw_pt_init( struct draw_context *draw )
   return FALSE;
 
 #if HAVE_LLVM
-   draw->pt.middle.general = draw_pt_fetch_pipeline_or_emit_llvm( draw );
+   if (draw->use_llvm)
+  draw->pt.middle.general = draw_pt_fetch_pipeline_or_emit_llvm( draw );
 #else
draw->pt.middle.general = NULL;
 #endif

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): draw llvm: fix typo (boolean, not bool)

2010-04-19 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: e3e5faba89996c64f6d5b5a00b9028900ddbd64f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e3e5faba89996c64f6d5b5a00b9028900ddbd64f

Author: Zack Rusin 
Date:   Mon Apr 19 13:30:16 2010 -0400

draw llvm: fix typo (boolean, not bool)

---

 src/gallium/auxiliary/draw/draw_private.h |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_private.h 
b/src/gallium/auxiliary/draw/draw_private.h
index 2ef05ce..fa20c8e 100644
--- a/src/gallium/auxiliary/draw/draw_private.h
+++ b/src/gallium/auxiliary/draw/draw_private.h
@@ -251,7 +251,7 @@ struct draw_context
 
 #ifdef HAVE_LLVM
LLVMExecutionEngineRef engine;
-   bool use_llvm;
+   boolean use_llvm;
 #endif
void *driver_private;
 };

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): draw llvm: make sure use_llvm isn't used when not defined

2010-04-19 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 7dfde3aadc7f776abf828e4c45dbce2177564a53
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7dfde3aadc7f776abf828e4c45dbce2177564a53

Author: Zack Rusin 
Date:   Mon Apr 19 13:33:49 2010 -0400

draw llvm: make sure use_llvm isn't used when not defined

---

 src/gallium/auxiliary/draw/draw_pt.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pt.c 
b/src/gallium/auxiliary/draw/draw_pt.c
index f803e6d..cea186c 100644
--- a/src/gallium/auxiliary/draw/draw_pt.c
+++ b/src/gallium/auxiliary/draw/draw_pt.c
@@ -123,7 +123,6 @@ boolean draw_pt_init( struct draw_context *draw )
 {
draw->pt.test_fse = debug_get_bool_option("DRAW_FSE", FALSE);
draw->pt.no_fse = debug_get_bool_option("DRAW_NO_FSE", FALSE);
-   draw->use_llvm = debug_get_bool_option("DRAW_USE_LLVM", TRUE);
 
draw->pt.front.vcache = draw_pt_vcache( draw );
if (!draw->pt.front.vcache)
@@ -142,6 +141,7 @@ boolean draw_pt_init( struct draw_context *draw )
   return FALSE;
 
 #if HAVE_LLVM
+   draw->use_llvm = debug_get_bool_option("DRAW_USE_LLVM", TRUE);
if (draw->use_llvm)
   draw->pt.middle.general = draw_pt_fetch_pipeline_or_emit_llvm( draw );
 #else

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: make sure we return the correct type when approximating log's

2010-04-22 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 63aa9b505a2439399af3e6ed47c5a0b1b791fba8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=63aa9b505a2439399af3e6ed47c5a0b1b791fba8

Author: Zack Rusin 
Date:   Thu Apr 22 13:00:48 2010 -0400

gallivm: make sure we return the correct type when approximating log's

---

 src/gallium/auxiliary/gallivm/lp_bld_arit.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c 
b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
index 8e8fccc..d696763 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
@@ -1502,8 +1502,10 @@ lp_build_log2_approx(struct lp_build_context *bld,
   res = LLVMBuildAdd(bld->builder, logmant, logexp, "");
}
 
-   if(p_exp)
+   if(p_exp) {
+  exp = LLVMConstBitCast(exp, vec_type);
   *p_exp = exp;
+   }
 
if(p_floor_log2)
   *p_floor_log2 = logexp;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: fix nested break statemants

2010-04-22 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 3a423dcf9dfa725a4e5dca60f0f2b02599d2ed9b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a423dcf9dfa725a4e5dca60f0f2b02599d2ed9b

Author: Zack Rusin 
Date:   Thu Apr 22 13:43:37 2010 -0400

gallivm: fix nested break statemants

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 44f8aec..b87817d 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -232,6 +232,8 @@ static void lp_exec_bgnloop(struct lp_exec_mask *mask)
   mask->break_mask = LLVMConstAllOnes(mask->int_vec_type);
if (mask->cond_stack_size == 0)
   mask->cond_mask = LLVMConstAllOnes(mask->int_vec_type);
+
+   mask->break_stack[mask->break_stack_size++] = mask->break_mask;
mask->loop_stack[mask->loop_stack_size++] = mask->loop_block;
mask->loop_block = lp_build_insert_new_block(mask->bld->builder, "bgnloop");
LLVMBuildBr(mask->bld->builder, mask->loop_block);
@@ -246,7 +248,6 @@ static void lp_exec_break(struct lp_exec_mask *mask)
  mask->exec_mask,
  "break");
 
-   mask->break_stack[mask->break_stack_size++] = mask->break_mask;
if (mask->break_stack_size > 1) {
   mask->break_mask = LLVMBuildAnd(mask->bld->builder,
   mask->break_mask,
@@ -304,7 +305,7 @@ static void lp_exec_endloop(struct lp_exec_mask *mask)
   mask->cont_mask = mask->cont_stack[--mask->cont_stack_size];
}
if (mask->break_stack_size) {
-  mask->break_mask = mask->cont_stack[--mask->break_stack_size];
+  mask->break_mask = mask->break_stack[--mask->break_stack_size];
}
 
lp_exec_mask_update(mask);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: fix nested cont statements

2010-04-22 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 6d2e09fdc23e2573e9466f60db20ef4ac04b367d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6d2e09fdc23e2573e9466f60db20ef4ac04b367d

Author: Zack Rusin 
Date:   Thu Apr 22 13:45:25 2010 -0400

gallivm: fix nested cont statements

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index b87817d..e55e3dc 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -234,6 +234,7 @@ static void lp_exec_bgnloop(struct lp_exec_mask *mask)
   mask->cond_mask = LLVMConstAllOnes(mask->int_vec_type);
 
mask->break_stack[mask->break_stack_size++] = mask->break_mask;
+   mask->cont_stack[mask->cont_stack_size++] = mask->cont_mask;
mask->loop_stack[mask->loop_stack_size++] = mask->loop_block;
mask->loop_block = lp_build_insert_new_block(mask->bld->builder, "bgnloop");
LLVMBuildBr(mask->bld->builder, mask->loop_block);
@@ -264,7 +265,6 @@ static void lp_exec_continue(struct lp_exec_mask *mask)
  mask->exec_mask,
  "");
 
-   mask->cont_stack[mask->cont_stack_size++] = mask->cont_mask;
if (mask->cont_stack_size > 1) {
   mask->cont_mask = LLVMBuildAnd(mask->bld->builder,
  mask->cont_mask,

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: update comments

2010-04-22 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 18a4a83ddab7655253fdb71d37393a32adcda488
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=18a4a83ddab7655253fdb71d37393a32adcda488

Author: Zack Rusin 
Date:   Thu Apr 22 13:56:54 2010 -0400

gallivm: update comments

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |   15 ---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index e55e3dc..53a5ce0 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -169,8 +169,7 @@ static void lp_exec_mask_init(struct lp_exec_mask *mask, 
struct lp_build_context
 static void lp_exec_mask_update(struct lp_exec_mask *mask)
 {
if (mask->loop_stack_size) {
-  /*for loops we need to update the entire mask at
-   * runtime */
+  /*for loops we need to update the entire mask at runtime */
   LLVMValueRef tmp;
   assert(mask->break_mask);
   tmp = LLVMBuildAnd(mask->bld->builder,
@@ -249,6 +248,10 @@ static void lp_exec_break(struct lp_exec_mask *mask)
  mask->exec_mask,
  "break");
 
+   /* mask->break_stack_size > 1 implies that we encountered a break
+* statemant already and if that's the case we want to make sure
+* our mask is a combination of the previous break and the current
+* execution mask */
if (mask->break_stack_size > 1) {
   mask->break_mask = LLVMBuildAnd(mask->bld->builder,
   mask->break_mask,
@@ -300,10 +303,11 @@ static void lp_exec_endloop(struct lp_exec_mask *mask)
LLVMPositionBuilderAtEnd(mask->bld->builder, endloop);
 
mask->loop_block = mask->loop_stack[--mask->loop_stack_size];
-   /* pop the break mask */
+   /* pop the cont mask */
if (mask->cont_stack_size) {
   mask->cont_mask = mask->cont_stack[--mask->cont_stack_size];
}
+   /* pop the break mask */
if (mask->break_stack_size) {
   mask->break_mask = mask->break_stack[--mask->break_stack_size];
}
@@ -311,6 +315,11 @@ static void lp_exec_endloop(struct lp_exec_mask *mask)
lp_exec_mask_update(mask);
 }
 
+/* stores val into an address pointed to by dst.
+ * mask->exec_mask is used to figure out which bits of val
+ * should be stored into the address
+ * (0 means don't store this bit, 1 means do store).
+ */
 static void lp_exec_mask_store(struct lp_exec_mask *mask,
LLVMValueRef val,
LLVMValueRef dst)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: implement indirect addressing over constants

2010-04-22 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: ded2374e67bdc2c24e868775d2ff77b39b339d56
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ded2374e67bdc2c24e868775d2ff77b39b339d56

Author: Zack Rusin 
Date:   Thu Apr 22 17:31:55 2010 -0400

gallivm: implement indirect addressing over constants

implement indirect addressing (ARL and ARR instructions) when used
with CONST's. indirect addressing over other vars (temps, inputs, outputs)
is not supported yet.

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |   50 --
 1 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 53a5ce0..72ed8c0 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -125,6 +125,7 @@ struct lp_build_tgsi_soa_context
 
LLVMValueRef immediates[LP_MAX_IMMEDIATES][NUM_CHANNELS];
LLVMValueRef temps[LP_MAX_TEMPS][NUM_CHANNELS];
+   LLVMValueRef addr[LP_MAX_TEMPS][NUM_CHANNELS];
 
struct lp_build_mask_context *mask;
struct lp_exec_mask exec_mask;
@@ -371,6 +372,7 @@ emit_fetch(
const struct tgsi_full_src_register *reg = &inst->Src[index];
unsigned swizzle = tgsi_util_get_full_src_register_swizzle( reg, chan_index 
);
LLVMValueRef res;
+   LLVMValueRef addr;
 
switch (swizzle) {
case TGSI_SWIZZLE_X:
@@ -378,11 +380,34 @@ emit_fetch(
case TGSI_SWIZZLE_Z:
case TGSI_SWIZZLE_W:
 
+  if (reg->Register.Indirect) {
+ LLVMTypeRef int_vec_type = lp_build_int_vec_type(bld->base.type);
+ unsigned swizzle = tgsi_util_get_src_register_swizzle( 
®->Indirect, chan_index );
+ addr = LLVMBuildLoad(bld->base.builder,
+  bld->addr[reg->Indirect.Index][swizzle],
+  "");
+ /* for indexing we want integers */
+ addr = LLVMBuildFPToSI(bld->base.builder, addr,
+int_vec_type, "");
+ addr = LLVMBuildExtractElement(bld->base.builder,
+addr, LLVMConstInt(LLVMInt32Type(), 0, 
0),
+"");
+  }
+
   switch (reg->Register.File) {
   case TGSI_FILE_CONSTANT: {
  LLVMValueRef index = LLVMConstInt(LLVMInt32Type(), 
reg->Register.Index*4 + swizzle, 0);
- LLVMValueRef scalar_ptr = LLVMBuildGEP(bld->base.builder, 
bld->consts_ptr, &index, 1, "");
- LLVMValueRef scalar = LLVMBuildLoad(bld->base.builder, scalar_ptr, 
"");
+ LLVMValueRef scalar, scalar_ptr;
+
+ if (reg->Register.Indirect) {
+/*lp_build_printf(bld->base.builder,
+  "\taddr = %d\n", addr);*/
+addr = lp_build_mul(&bld->base, addr, 
LLVMConstInt(LLVMInt32Type(), 4, 0));
+index = lp_build_add(&bld->base, index, addr);
+ }
+ scalar_ptr = LLVMBuildGEP(bld->base.builder, bld->consts_ptr, &index, 
1, "");
+ scalar = LLVMBuildLoad(bld->base.builder, scalar_ptr, "");
+
  res = lp_build_broadcast_scalar(&bld->base, scalar);
  break;
   }
@@ -510,8 +535,8 @@ emit_store(
   break;
 
case TGSI_FILE_ADDRESS:
-  /* FIXME */
-  assert(0);
+  lp_exec_mask_store(&bld->exec_mask, value,
+ bld->addr[reg->Indirect.Index][chan_index]);
   break;
 
case TGSI_FILE_PREDICATE:
@@ -724,6 +749,11 @@ emit_declaration(
 bld->outputs[idx][i] = lp_build_alloca(&bld->base);
  break;
 
+  case TGSI_FILE_ADDRESS:
+ for (i = 0; i < NUM_CHANNELS; i++)
+bld->addr[idx][i] = lp_build_alloca(&bld->base);
+ break;
+
   default:
  /* don't need to declare other vars */
  break;
@@ -780,17 +810,13 @@ emit_instruction(
}
 
switch (inst->Instruction.Opcode) {
-#if 0
case TGSI_OPCODE_ARL:
-  /* FIXME */
   FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
  tmp0 = emit_fetch( bld, inst, 0, chan_index );
- emit_flr(bld, 0, 0);
- emit_f2it( bld, 0 );
+ tmp0 = lp_build_floor(&bld->base, tmp0);
  dst0[chan_index] = tmp0;
   }
   break;
-#endif
 
case TGSI_OPCODE_MOV:
   FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
@@ -1360,17 +1386,13 @@ emit_instruction(
   return FALSE;
   break;
 
-#if 0
case TGSI_OPCODE_ARR:
-  /* FIXME */
   FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
  tmp0 = emit_fetch( bld, inst, 0, chan_index );
- emit_rnd( bld, 0, 0 );
- emit_f2it( bld, 0 );
+ tmp0 = lp_build_round(&bld->base, tmp0);
  dst0[chan_index] = tmp0;
   }
   break;
-#endif
 
case TGSI_OPCODE_BRA:
   /* deprecated */

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallivm: implement indirect addressing over temporaries

2010-04-22 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 021e0dc78b15fab29e761012860276c2597c8d8f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=021e0dc78b15fab29e761012860276c2597c8d8f

Author: Zack Rusin 
Date:   Thu Apr 22 18:36:07 2010 -0400

gallivm: implement indirect addressing over temporaries

a bit more involved than indirect addressing over consts, but still
fairly reasonable. we allocate an array instead of individual alloca's,
and we do it only if the shader does indirect addressing.

---

 src/gallium/auxiliary/draw/draw_llvm.c  |3 +-
 src/gallium/auxiliary/gallivm/lp_bld_tgsi.h |4 +-
 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |  105 +++
 src/gallium/drivers/llvmpipe/lp_state_fs.c  |2 +-
 4 files changed, 74 insertions(+), 40 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 9d11031..5e8bef4 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -252,7 +252,8 @@ generate_vs(struct draw_llvm *llvm,
  NULL /*pos*/,
  inputs,
  outputs,
- NULL/*sampler*/);
+ NULL/*sampler*/,
+ &llvm->draw->vs.vertex_shader->info);
 }
 
 #if DEBUG_STORE
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h
index 63b938b..2eac5da 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h
@@ -39,6 +39,7 @@
 
 
 struct tgsi_token;
+struct tgsi_shader_info;
 struct lp_type;
 struct lp_build_context;
 struct lp_build_mask_context;
@@ -78,7 +79,8 @@ lp_build_tgsi_soa(LLVMBuilderRef builder,
   const LLVMValueRef *pos,
   const LLVMValueRef (*inputs)[4],
   LLVMValueRef (*outputs)[4],
-  struct lp_build_sampler_soa *sampler);
+  struct lp_build_sampler_soa *sampler,
+  struct tgsi_shader_info *info);
 
 
 #endif /* LP_BLD_TGSI_H */
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 72ed8c0..df2e24c 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -46,6 +46,7 @@
 #include "tgsi/tgsi_parse.h"
 #include "tgsi/tgsi_util.h"
 #include "tgsi/tgsi_exec.h"
+#include "tgsi/tgsi_scan.h"
 #include "lp_bld_type.h"
 #include "lp_bld_const.h"
 #include "lp_bld_arit.h"
@@ -127,6 +128,11 @@ struct lp_build_tgsi_soa_context
LLVMValueRef temps[LP_MAX_TEMPS][NUM_CHANNELS];
LLVMValueRef addr[LP_MAX_TEMPS][NUM_CHANNELS];
 
+   /* we allocate an array of temps if we have indirect
+* addressing and then the temps above is unused */
+   LLVMValueRef temps_array;
+   boolean has_indirect_addressing;
+
struct lp_build_mask_context *mask;
struct lp_exec_mask exec_mask;
 };
@@ -358,6 +364,23 @@ emit_ddy(struct lp_build_tgsi_soa_context *bld,
return lp_build_sub(&bld->base, src_top, src_bottom);
 }
 
+static LLVMValueRef
+get_temp_ptr(struct lp_build_tgsi_soa_context *bld,
+ unsigned index,
+ unsigned swizzle,
+ boolean is_indirect,
+ LLVMValueRef addr)
+{
+   if (!bld->has_indirect_addressing) {
+  return bld->temps[index][swizzle];
+   } else {
+  LLVMValueRef lindex =
+ LLVMConstInt(LLVMInt32Type(), index*4 + swizzle, 0);
+  if (is_indirect)
+ lindex = lp_build_add(&bld->base, lindex, addr);
+  return LLVMBuildGEP(bld->base.builder, bld->temps_array, &lindex, 1, "");
+   }
+}
 
 /**
  * Register fetch.
@@ -392,6 +415,7 @@ emit_fetch(
  addr = LLVMBuildExtractElement(bld->base.builder,
 addr, LLVMConstInt(LLVMInt32Type(), 0, 
0),
 "");
+ addr = lp_build_mul(&bld->base, addr, LLVMConstInt(LLVMInt32Type(), 
4, 0));
   }
 
   switch (reg->Register.File) {
@@ -402,7 +426,6 @@ emit_fetch(
  if (reg->Register.Indirect) {
 /*lp_build_printf(bld->base.builder,
   "\taddr = %d\n", addr);*/
-addr = lp_build_mul(&bld->base, addr, 
LLVMConstInt(LLVMInt32Type(), 4, 0));
 index = lp_build_add(&bld->base, index, addr);
  }
  scalar_ptr = LLVMBuildGEP(bld->base.builder, bld->consts_ptr, &index, 
1, "");
@@ -422,11 +445,16 @@ emit_fetch(
  assert(res);
  break;
 
-  case TGSI_FILE_TEMPORARY:
- res = LLVMBuildLoad(bld->base.builder, 
bld->temps[reg->Register.Index][swizzle], "");
+  case TGSI_FILE_TEMPORARY: {
+ LLVMValueRef temp_ptr

Mesa (master): draw/llvm: implement fetch elts paths

2010-04-26 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 52f145a186b8e47439fb4a96d04a099d439477b7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=52f145a186b8e47439fb4a96d04a099d439477b7

Author: Zack Rusin 
Date:   Mon Apr 26 13:51:47 2010 -0400

draw/llvm: implement fetch elts paths

we were only running the llvm paths when the input elts were linear,
now we can handle abritrary fetch elts arrays. we do this by generating
two paths - linear and fetch_elts one and just selecting the right one
at run time.

---

 src/gallium/auxiliary/draw/draw_llvm.c |  141 
 src/gallium/auxiliary/draw/draw_llvm.h |   12 ++
 .../draw/draw_pt_fetch_shade_pipeline_llvm.c   |   38 +-
 3 files changed, 160 insertions(+), 31 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 703b46b..2738322 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -24,6 +24,8 @@
 /* generates the draw jit function */
 static void
 draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *var);
+static void
+draw_llvm_generate_elts(struct draw_llvm *llvm, struct draw_llvm_variant *var);
 
 static void
 init_globals(struct draw_llvm *llvm)
@@ -218,6 +220,7 @@ draw_llvm_prepare(struct draw_llvm *llvm, int num_inputs)
llvm->vertex_header_ptr_type = create_vertex_header(llvm, num_inputs);
 
draw_llvm_generate(llvm, variant);
+   draw_llvm_generate_elts(llvm, variant);
 
return variant;
 }
@@ -696,6 +699,144 @@ draw_llvm_generate(struct draw_llvm *llvm, struct 
draw_llvm_variant *variant)
   lp_disassemble(variant->jit_func);
 }
 
+
+static void
+draw_llvm_generate_elts(struct draw_llvm *llvm, struct draw_llvm_variant 
*variant)
+{
+   LLVMTypeRef arg_types[7];
+   LLVMTypeRef func_type;
+   LLVMValueRef context_ptr;
+   LLVMBasicBlockRef block;
+   LLVMBuilderRef builder;
+   LLVMValueRef fetch_elts, fetch_count, stride, step, io_itr;
+   LLVMValueRef io_ptr, vbuffers_ptr, vb_ptr;
+   struct draw_context *draw = llvm->draw;
+   unsigned i, j;
+   struct lp_build_context bld;
+   struct lp_build_loop_state lp_loop;
+   struct lp_type vs_type = lp_type_float_vec(32);
+   const int max_vertices = 4;
+   LLVMValueRef outputs[PIPE_MAX_SHADER_OUTPUTS][NUM_CHANNELS];
+
+   arg_types[0] = llvm->context_ptr_type;   /* context */
+   arg_types[1] = llvm->vertex_header_ptr_type; /* vertex_header */
+   arg_types[2] = llvm->buffer_ptr_type;/* vbuffers */
+   arg_types[3] = LLVMPointerType(LLVMInt32Type(), 0);  /* fetch_elts * */
+   arg_types[4] = LLVMInt32Type();  /* fetch_count */
+   arg_types[5] = LLVMInt32Type();  /* stride */
+   arg_types[6] = llvm->vb_ptr_type;/* 
pipe_vertex_buffer's */
+
+   func_type = LLVMFunctionType(LLVMVoidType(), arg_types, 
Elements(arg_types), 0);
+
+   variant->function_elts = LLVMAddFunction(llvm->module, 
"draw_llvm_shader_elts", func_type);
+   LLVMSetFunctionCallConv(variant->function_elts, LLVMCCallConv);
+   for(i = 0; i < Elements(arg_types); ++i)
+  if(LLVMGetTypeKind(arg_types[i]) == LLVMPointerTypeKind)
+ LLVMAddAttribute(LLVMGetParam(variant->function_elts, i), 
LLVMNoAliasAttribute);
+
+   context_ptr  = LLVMGetParam(variant->function_elts, 0);
+   io_ptr   = LLVMGetParam(variant->function_elts, 1);
+   vbuffers_ptr = LLVMGetParam(variant->function_elts, 2);
+   fetch_elts   = LLVMGetParam(variant->function_elts, 3);
+   fetch_count  = LLVMGetParam(variant->function_elts, 4);
+   stride   = LLVMGetParam(variant->function_elts, 5);
+   vb_ptr   = LLVMGetParam(variant->function_elts, 6);
+
+   lp_build_name(context_ptr, "context");
+   lp_build_name(io_ptr, "io");
+   lp_build_name(vbuffers_ptr, "vbuffers");
+   lp_build_name(fetch_elts, "fetch_elts");
+   lp_build_name(fetch_count, "fetch_count");
+   lp_build_name(stride, "stride");
+   lp_build_name(vb_ptr, "vb");
+
+   /*
+* Function body
+*/
+
+   block = LLVMAppendBasicBlock(variant->function_elts, "entry");
+   builder = LLVMCreateBuilder();
+   LLVMPositionBuilderAtEnd(builder, block);
+
+   lp_build_context_init(&bld, builder, vs_type);
+
+   step = LLVMConstInt(LLVMInt32Type(), max_vertices, 0);
+
+   lp_build_loop_begin(builder, LLVMConstInt(LLVMInt32Type(), 0, 0), &lp_loop);
+   {
+  LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS];
+  LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS] = { { 0 } 
};
+  LLVMValueRef io;
+  const LLVMValueRef (*ptr_aos)[NUM_CHANNELS];
+
+  io_itr = lp_loop.counter;
+  io = LLVMBuildGEP(builder, io_ptr, &io_itr, 1, "");
+#if DEBUG_STORE
+  lp_build_printf(builder, " --- io %d = %p, loop counter 

Mesa (gallium-mesa-7.4): egl: don't crash with one more khronos api

2009-04-17 Thread Zack Rusin
Module: Mesa
Branch: gallium-mesa-7.4
Commit: f3b1c9bd94f3e289b75ec66dac39e913de586e06
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f3b1c9bd94f3e289b75ec66dac39e913de586e06

Author: Zack Rusin 
Date:   Fri Apr 17 07:05:24 2009 -0400

egl: don't crash with one more khronos api

---

 src/gallium/winsys/egl_xlib/egl_xlib.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/gallium/winsys/egl_xlib/egl_xlib.c 
b/src/gallium/winsys/egl_xlib/egl_xlib.c
index 872106d..83ceab0 100644
--- a/src/gallium/winsys/egl_xlib/egl_xlib.c
+++ b/src/gallium/winsys/egl_xlib/egl_xlib.c
@@ -386,6 +386,7 @@ xlib_eglDestroyContext(_EGLDriver *drv, EGLDisplay dpy, 
EGLContext ctx)
  /* API-dependent clean-up */
  switch (context->Base.ClientAPI) {
  case EGL_OPENGL_ES_API:
+ case EGL_OPENVG_API:
 /* fall-through */
  case EGL_OPENGL_API:
 st_destroy_context(context->Context);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl: don't crash with one more khronos api

2009-04-17 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: ee2a5f307a026c1c258d3f7616d46cc7230d77ce
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ee2a5f307a026c1c258d3f7616d46cc7230d77ce

Author: Zack Rusin 
Date:   Fri Apr 17 07:05:24 2009 -0400

egl: don't crash with one more khronos api

---

 src/gallium/winsys/egl_xlib/egl_xlib.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/gallium/winsys/egl_xlib/egl_xlib.c 
b/src/gallium/winsys/egl_xlib/egl_xlib.c
index 9ceb67d..68fe64a 100644
--- a/src/gallium/winsys/egl_xlib/egl_xlib.c
+++ b/src/gallium/winsys/egl_xlib/egl_xlib.c
@@ -388,6 +388,7 @@ xlib_eglDestroyContext(_EGLDriver *drv, EGLDisplay dpy, 
EGLContext ctx)
  /* API-dependent clean-up */
  switch (context->Base.ClientAPI) {
  case EGL_OPENGL_ES_API:
+ case EGL_OPENVG_API:
 /* fall-through */
  case EGL_OPENGL_API:
 st_destroy_context(context->Context);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): actually add debug to the debug config

2009-05-01 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: fbceedd2dee967b426ee187205941c6506769ea5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fbceedd2dee967b426ee187205941c6506769ea5

Author: Zack Rusin 
Date:   Fri May  1 12:50:38 2009 -0400

actually add debug to the debug config

---

 configs/linux-x86-64-debug |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/configs/linux-x86-64-debug b/configs/linux-x86-64-debug
index 46e72c9..6f631c0 100644
--- a/configs/linux-x86-64-debug
+++ b/configs/linux-x86-64-debug
@@ -4,4 +4,5 @@ include $(TOP)/configs/linux-x86-64
 
 CONFIG_NAME = linux-x86-64-debug
 
+OPT_FLAGS = -g
 DEFINES += -DDEBUG -DDEBUG_MATH

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl_xlib: Pass RTLD_LAZY to dlopen.

2009-05-01 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 293f576db7cf3f411c2eeb0a72232d25b631dcd1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=293f576db7cf3f411c2eeb0a72232d25b631dcd1

Author: José Fonseca 
Date:   Tue Mar 24 19:18:06 2009 +

egl_xlib: Pass RTLD_LAZY to dlopen.

dlopen manpage mandates that either RTLD_LAZY or RTLD_NOW flags must be
passed. Not doing so was causing a NULL return on debian unstable x86-64.

---

 src/gallium/winsys/egl_xlib/egl_xlib.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/winsys/egl_xlib/egl_xlib.c 
b/src/gallium/winsys/egl_xlib/egl_xlib.c
index b52f427..c10e3c0 100644
--- a/src/gallium/winsys/egl_xlib/egl_xlib.c
+++ b/src/gallium/winsys/egl_xlib/egl_xlib.c
@@ -588,7 +588,9 @@ find_supported_apis(void)
EGLint mask = 0;
void *handle;
 
-   handle = dlopen(NULL, 0);
+   handle = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL);
+   if(!handle)
+  return mask;
 
if (dlsym(handle, "st_api_OpenGL_ES1"))
   mask |= EGL_OPENGL_ES_BIT;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (openvg-1.0): OpenVG 1.0 State Tracker

2009-05-01 Thread Zack Rusin
Module: Mesa
Branch: openvg-1.0
Commit: 544dd4b11f7be76bb00fe29a60eaf2772dcc69ca
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=544dd4b11f7be76bb00fe29a60eaf2772dcc69ca

Author: Zack Rusin 
Date:   Fri May  1 12:41:38 2009 -0400

OpenVG 1.0 State Tracker

Import of the OpenVG 1.0 state tracker for Gallium.

---

 docs/openvg.html|   48 +
 include/VG/openvg.h |  686 
 include/VG/vgext.h  |  233 +++
 include/VG/vgplatform.h |  106 ++
 include/VG/vgu.h|  130 ++
 progs/openvg/demos/Makefile |   40 +
 progs/openvg/demos/gears.c  |  394 +
 progs/openvg/demos/lion-render.c| 1573 ++
 progs/openvg/demos/lion-render.h|   16 +
 progs/openvg/demos/lion.c   |  288 
 progs/openvg/demos/sp.c |  103 ++
 progs/openvg/trivial/Makefile   |  127 ++
 progs/openvg/trivial/arc.c  |  139 ++
 progs/openvg/trivial/cap.c  |   75 +
 progs/openvg/trivial/clear.c|   42 +
 progs/openvg/trivial/coord.c|   66 +
 progs/openvg/trivial/dash.c |   95 ++
 progs/openvg/trivial/eglcommon.c|  288 
 progs/openvg/trivial/eglcommon.h|   20 +
 progs/openvg/trivial/ellipse.c  |   84 +
 progs/openvg/trivial/filter.c   |  107 ++
 progs/openvg/trivial/gradorigin.c   |   98 ++
 progs/openvg/trivial/lineto.c   |   56 +
 progs/openvg/trivial/lingrad.c  |   87 +
 progs/openvg/trivial/lookup.c   |   71 +
 progs/openvg/trivial/mask.c |   58 +
 progs/openvg/trivial/mask4.c|  132 ++
 progs/openvg/trivial/path3.c|   77 +
 progs/openvg/trivial/radialgrad.c   |   99 ++
 progs/openvg/trivial/readpixels.c   |   75 +
 progs/openvg/trivial/roundedrect.c  |   67 +
 progs/openvg/trivial/star-nonzero.c |   55 +
 progs/openvg/trivial/star-oddeven.c |  102 ++
 progs/openvg/trivial/stroke.c   |  116 ++
 progs/openvg/trivial/stroke2.c  |  207 +++
 progs/openvg/trivial/vguarc.c   |   74 +
 src/gallium/state_trackers/vega/Makefile|  128 ++
 src/gallium/state_trackers/vega/api_consts.h|   56 +
 src/gallium/state_trackers/vega/api_context.c   |   75 +
 src/gallium/state_trackers/vega/api_filters.c   |  805 +
 src/gallium/state_trackers/vega/api_images.c|  489 ++
 src/gallium/state_trackers/vega/api_masks.c |  373 +
 src/gallium/state_trackers/vega/api_misc.c  |   83 +
 src/gallium/state_trackers/vega/api_paint.c |  166 ++
 src/gallium/state_trackers/vega/api_params.c| 1673 +++
 src/gallium/state_trackers/vega/api_path.c  |  488 ++
 src/gallium/state_trackers/vega/api_text.c  |  258 +++
 src/gallium/state_trackers/vega/api_transform.c |  128 ++
 src/gallium/state_trackers/vega/arc.c   |  708 
 src/gallium/state_trackers/vega/arc.h   |   80 +
 src/gallium/state_trackers/vega/asm_fill.h  |  246 +++
 src/gallium/state_trackers/vega/asm_filters.h   |  117 ++
 src/gallium/state_trackers/vega/asm_util.h  |  136 ++
 src/gallium/state_trackers/vega/bezier.c|  704 
 src/gallium/state_trackers/vega/bezier.h|   81 +
 src/gallium/state_trackers/vega/image.c |  654 
 src/gallium/state_trackers/vega/image.h |  104 ++
 src/gallium/state_trackers/vega/mask.c  |  690 
 src/gallium/state_trackers/vega/mask.h  |   68 +
 src/gallium/state_trackers/vega/matrix.h|  462 +
 src/gallium/state_trackers/vega/paint.c |  699 
 src/gallium/state_trackers/vega/paint.h |  118 ++
 src/gallium/state_trackers/vega/path.c  | 2034 +++
 src/gallium/state_trackers/vega/path.h  |  126 ++
 src/gallium/state_trackers/vega/path_utils.h|  109 ++
 src/gallium/state_trackers/vega/polygon.c   |  550 ++
 src/gallium/state_trackers/vega/polygon.h   |   75 +
 src/gallium/state_trackers/vega/renderer.c  |  592 +++
 src/gallium/state_trackers/vega/renderer.h  |   76 +
 src/gallium/state_trackers/vega/shader.c|  310 
 src/gallium/state_trackers/vega/shader.h|   56 +
 src/gallium/state_trackers/vega/shaders_cache.c |  439 +
 src/gallium/state_trackers/vega/shaders_cache.h |   77 +
 src/gallium/state_trackers/vega/st_inlines.h|  159 ++
 src/gallium/state_trackers/vega/stroker.c   | 1349 +++
 src/gallium/state_trackers/vega/stroker.h   |   89 +
 src/gallium/state_trackers/vega/util_array.h|  122 ++
 src

Mesa (openvg-1.0): vg: remove a silly demo and add a bit better one

2009-05-01 Thread Zack Rusin
Module: Mesa
Branch: openvg-1.0
Commit: 54324d9e0c6956bdc7bc9b0620fe53c8e6b66a04
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=54324d9e0c6956bdc7bc9b0620fe53c8e6b66a04

Author: Zack Rusin 
Date:   Fri May  1 19:08:32 2009 -0400

vg: remove a silly demo and add a bit better one

---

 progs/openvg/demos/Makefile |   19 +-
 progs/openvg/demos/{gears.c => eglcommon.c} |  236 --
 progs/openvg/demos/eglcommon.h  |   20 ++
 progs/openvg/demos/sp.c |  466 ++-
 4 files changed, 544 insertions(+), 197 deletions(-)

diff --git a/progs/openvg/demos/Makefile b/progs/openvg/demos/Makefile
index 7ecb987..6e15342 100644
--- a/progs/openvg/demos/Makefile
+++ b/progs/openvg/demos/Makefile
@@ -7,8 +7,8 @@ VG_LIBS=-lm -pthread -lEGL -lOpenVG
 INCLUDE_DIRS = -I$(TOP)/include
 
 PROGRAMS = \
-   gears \
-lion
+lion \
+sp
 
 .c.o:
$(CC) -c $(INCLUDE_DIRS) $(CFLAGS) $< -o $@
@@ -17,14 +17,6 @@ PROGRAMS = \
 
 default: $(PROGRAMS)
 
-
-gears: gears.o
-   $(CC) $(CFLAGS) gears.o -L$(TOP)/$(LIB_DIR) $(VG_LIBS)  -o $@
-
-gears.o: gears.c $(HEADERS)
-   $(CC) -c $(CFLAGS) -I$(TOP)/include gears.c
-
-
 lion: lion.o lion-render.o
$(CC) $(CFLAGS) lion.o lion-render.o -L$(TOP)/$(LIB_DIR) $(VG_LIBS) -o 
$@
 
@@ -34,6 +26,13 @@ lion-render.o: lion-render.c lion-render.h $(HEADERS)
$(CC) -c $(CFLAGS) -I$(TOP)/include lion-render.c
 
 
+sp: sp.c eglcommon.o
+   $(CC) $(INCLUDE_DIRS) $(CFLAGS) $^  -L$(TOP)/$(LIB_DIR) $(LIBS) 
$(VG_LIBS)  $(APP_LIB_DEPS) -o $@
+
+eglcommon.o: eglcommon.c $(HEADERS)
+   $(CC) -c $(INCLUDE_DIRS) $(CFLAGS) eglcommon.c
+
+
 clean:
rm -f *.o *~
rm -f *.so
diff --git a/progs/openvg/demos/gears.c b/progs/openvg/demos/eglcommon.c
similarity index 56%
rename from progs/openvg/demos/gears.c
rename to progs/openvg/demos/eglcommon.c
index 7dcb395..bacd568 100644
--- a/progs/openvg/demos/gears.c
+++ b/progs/openvg/demos/eglcommon.c
@@ -1,3 +1,6 @@
+#include "eglcommon.h"
+
+
 #include 
 #include 
 #include 
@@ -6,157 +9,23 @@
 #include 
 #include 
 #include 
-#include 
+#include   /* using full OpenGL for now */
 #include 
 
-static VGint width, height;
-static VGPath gear1;
-static VGPath gear2;
-static VGPath gear3;
-
-static VGPaint fill;
-const VGfloat color[4] = {0.5, 0.5, 0.5, 1.0};
-
-static VGfloat gear1_angle = 35;
-static VGfloat gear2_angle = 24;
-static VGfloat gear3_angle = 33.5;
-
-static  void moveTo(VGPath path, VGfloat x, VGfloat y)
-{
-   static VGubyte moveTo = VG_MOVE_TO | VG_ABSOLUTE;
-   VGfloat pathData[2];
-   pathData[0] = x; pathData[1] = y;
-   vgAppendPathData(path, 1, &moveTo, pathData);
-}
-
-static  void lineTo(VGPath path, VGfloat x, VGfloat y)
-{
-   static VGubyte lineTo = VG_LINE_TO | VG_ABSOLUTE;
-   VGfloat pathData[2];
-   pathData[0] = x; pathData[1] = y;
-   vgAppendPathData(path, 1, &lineTo, pathData);
-}
-
-static  void closeSubpath(VGPath path)
-{
-   static VGubyte close = VG_CLOSE_PATH | VG_ABSOLUTE;
-   VGfloat pathData[2];
-   vgAppendPathData(path, 1, &close, pathData);
-}
-
-static  void cubicTo(VGPath path, VGfloat x1, VGfloat y1, VGfloat x2, VGfloat 
y2,
- VGfloat midx, VGfloat midy)
-{
-   static VGubyte cubic = VG_CUBIC_TO | VG_ABSOLUTE;
-   VGfloat pathData[6];
-   pathData[0] = x1;
-   pathData[1] = y1;
-   pathData[2] = x2;
-   pathData[3] = y2;
-   pathData[4] = midx;
-   pathData[5] = midy;
-   vgAppendPathData(path, 1, &cubic, pathData);
-}
-
-static VGPath gearsPath(double inner_radius, double outer_radius,
-int teeth, double tooth_depth)
-{
-   VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 
1.0f, 0.0f,
-  0, 0, (unsigned int)VG_PATH_CAPABILITY_ALL);
-
-   int i;
-   double r0, r1, r2;
-   double angle, da;
-
-   r0 = inner_radius;
-   r1 = outer_radius - tooth_depth / 2.0;
-   r2 = outer_radius + tooth_depth / 2.0;
-
-   da = 2.0 * M_PI / (VGfloat) teeth / 4.0;
 
-   angle = 0.0;
-   moveTo(path, r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da));
-
-   for (i = 1; i <= teeth; i++) {
-  angle = i * 2.0 * M_PI / (VGfloat)teeth;
-
-  lineTo(path, r1 * cos(angle), r1 * sin(angle));
-  lineTo(path, r2 * cos(angle + da), r2 * sin(angle + da));
-  lineTo(path, r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da));
-
-  if (i < teeth)
- lineTo(path, r1 * cos(angle + 3 * da),
-r1 * sin(angle + 3 * da));
-   }
+static init_funcinit = 0;
+static draw_funcdraw = 0;
+static reshape_func reshape = 0;
+static key_func keyPress = 0;
+static VGint width = 300, height = 300;
 
-   closeSubpath(path);
 
-   moveTo(path, r0 * cos(angle + 3 * da), r0 * sin(angle + 3 * da));
-
-   for (i = 1; i <= teeth; i++) {
-  angle = i * 2.0 * M_PI / (VGfloat) teeth;
-
-  lineTo(path, r0 * cos(angle), r0 * s

Mesa (arb_geometry_shader4): gs: recognize "varying in|out" language

2009-05-18 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: baf438c8a5c0927024777956edf807ae3bd6232c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=baf438c8a5c0927024777956edf807ae3bd6232c

Author: Zack Rusin 
Date:   Mon May 18 21:07:25 2009 -0400

gs: recognize "varying in|out" language

---

 src/mesa/shader/slang/library/slang_shader.syn   |5 +
 src/mesa/shader/slang/library/slang_shader_syn.h |3 +++
 src/mesa/shader/slang/slang_compile.c|2 ++
 src/mesa/state_tracker/st_program.c  |2 +-
 4 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/src/mesa/shader/slang/library/slang_shader.syn 
b/src/mesa/shader/slang/library/slang_shader.syn
index f3fd1f8..66e2fd9 100644
--- a/src/mesa/shader/slang/library/slang_shader.syn
+++ b/src/mesa/shader/slang/library/slang_shader.syn
@@ -137,6 +137,7 @@
 .emtcode TYPE_QUALIFIER_UNIFORM 4
 .emtcode TYPE_QUALIFIER_FIXEDOUTPUT 5
 .emtcode TYPE_QUALIFIER_FIXEDINPUT  6
+.emtcode TYPE_QUALIFIER_VARYING_IN  7
 
 /* invariant qualifier */
 .emtcode TYPE_VARIANT   90
@@ -957,6 +958,8 @@ centroid_qualifier
  *  ::= "const"
  *| "attribute" // Vertex only.
  *| "varying"
+ *| "varying out"
+ *| "varying in"
  *| "uniform"
  *| "__fixed_output"
  *| "__fixed_input"
@@ -968,6 +971,8 @@ type_qualifier
 "const" .emit TYPE_QUALIFIER_CONST .or
 .if (shader_type == 2) "attribute" .emit TYPE_QUALIFIER_ATTRIBUTE .or
 "varying" .emit TYPE_QUALIFIER_VARYING .or
+"varying out" .emit TYPE_QUALIFIER_VARYING .or
+"varying in" .emit TYPE_QUALIFIER_VARYING_IN .or
 "uniform" .emit TYPE_QUALIFIER_UNIFORM .or
 .if (parsing_builtin != 0) "__fixed_output" .emit 
TYPE_QUALIFIER_FIXEDOUTPUT .or
 .if (parsing_builtin != 0) "__fixed_input" .emit TYPE_QUALIFIER_FIXEDINPUT;
diff --git a/src/mesa/shader/slang/library/slang_shader_syn.h 
b/src/mesa/shader/slang/library/slang_shader_syn.h
index 9312270..8c0884f 100644
--- a/src/mesa/shader/slang/library/slang_shader_syn.h
+++ b/src/mesa/shader/slang/library/slang_shader_syn.h
@@ -49,6 +49,7 @@
 ".emtcode TYPE_QUALIFIER_UNIFORM 4\n"
 ".emtcode TYPE_QUALIFIER_FIXEDOUTPUT 5\n"
 ".emtcode TYPE_QUALIFIER_FIXEDINPUT 6\n"
+".emtcode TYPE_QUALIFIER_VARYING_IN 7\n"
 ".emtcode TYPE_VARIANT 90\n"
 ".emtcode TYPE_INVARIANT 91\n"
 ".emtcode TYPE_CENTER 95\n"
@@ -468,6 +469,8 @@
 " \"const\" .emit TYPE_QUALIFIER_CONST .or\n"
 " .if (shader_type == 2) \"attribute\" .emit TYPE_QUALIFIER_ATTRIBUTE .or\n"
 " \"varying\" .emit TYPE_QUALIFIER_VARYING .or\n"
+" \"varying out\" .emit TYPE_QUALIFIER_VARYING .or\n"
+" \"varying in\" .emit TYPE_QUALIFIER_VARYING_IN .or\n"
 " \"uniform\" .emit TYPE_QUALIFIER_UNIFORM .or\n"
 " .if (parsing_builtin != 0) \"__fixed_output\" .emit 
TYPE_QUALIFIER_FIXEDOUTPUT .or\n"
 " .if (parsing_builtin != 0) \"__fixed_input\" .emit 
TYPE_QUALIFIER_FIXEDINPUT;\n"
diff --git a/src/mesa/shader/slang/slang_compile.c 
b/src/mesa/shader/slang/slang_compile.c
index ebb5f5b..5512b95 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -562,6 +562,7 @@ parse_type_centroid(slang_parse_ctx * C, 
slang_type_centroid *centroid)
 #define TYPE_QUALIFIER_UNIFORM 4
 #define TYPE_QUALIFIER_FIXEDOUTPUT 5
 #define TYPE_QUALIFIER_FIXEDINPUT 6
+#define TYPE_QUALIFIER_VARYING_IN 7
 
 static int
 parse_type_qualifier(slang_parse_ctx * C, slang_type_qualifier * qual)
@@ -578,6 +579,7 @@ parse_type_qualifier(slang_parse_ctx * C, 
slang_type_qualifier * qual)
   *qual = SLANG_QUAL_ATTRIBUTE;
   break;
case TYPE_QUALIFIER_VARYING:
+   case TYPE_QUALIFIER_VARYING_IN:
   *qual = SLANG_QUAL_VARYING;
   break;
case TYPE_QUALIFIER_UNIFORM:
diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index d451c26..082a6e9 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -649,7 +649,7 @@ st_translate_geometry_program(struct st_context *st,
 * Determine number of outputs, the (default) output register
 * mapping and the semantic information for each output.
 */
-   for (attr = 0; attr < VERT_RESULT_MAX; attr++) {
+   for (attr = 0; attr < GEOM_RESULT_MAX; attr++) {
   if (stgp->Base.Base.OutputsWritten & (1 << attr)) {
  GLuint slot;
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: better way of handling varying in/out

2009-05-18 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 95863e570e8b675efbdf58a7524f5a92b4a3d9e8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=95863e570e8b675efbdf58a7524f5a92b4a3d9e8

Author: Zack Rusin 
Date:   Tue May 19 00:13:15 2009 -0400

gs: better way of handling varying in/out

---

 src/mesa/shader/slang/library/slang_120_core_gc.h  | 1449 +-
 .../slang/library/slang_builtin_120_common_gc.h|  201 ++--
 .../slang/library/slang_builtin_120_fragment_gc.h  |2 +-
 .../shader/slang/library/slang_common_builtin_gc.h | 1692 ++--
 src/mesa/shader/slang/library/slang_core_gc.h  | 1689 ++--
 .../slang/library/slang_fragment_builtin_gc.h  |  209 ++--
 .../shader/slang/library/slang_geometry_builtin.gc |   34 +-
 src/mesa/shader/slang/library/slang_shader.syn |   16 +-
 src/mesa/shader/slang/library/slang_shader_syn.h   |   10 +-
 .../shader/slang/library/slang_vertex_builtin_gc.h |  207 ++--
 src/mesa/shader/slang/slang_compile.c  |   49 +-
 src/mesa/shader/slang/slang_typeinfo.c |1 +
 src/mesa/shader/slang/slang_typeinfo.h |7 +
 13 files changed, 2814 insertions(+), 2752 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=95863e570e8b675efbdf58a7524f5a92b4a3d9e8
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: better builtin setup

2009-05-19 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: c714fd50d978c203c6977457a0ee270054f69a1e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c714fd50d978c203c6977457a0ee270054f69a1e

Author: Zack Rusin 
Date:   Tue May 19 13:30:10 2009 -0400

gs: better builtin setup

---

 .../shader/slang/library/slang_geometry_builtin.gc |8 +++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/src/mesa/shader/slang/library/slang_geometry_builtin.gc 
b/src/mesa/shader/slang/library/slang_geometry_builtin.gc
index b2dc185..3f1adba 100644
--- a/src/mesa/shader/slang/library/slang_geometry_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_geometry_builtin.gc
@@ -22,6 +22,12 @@
 
 const int _mesa_VerticesInMax = 6;
 
+__fixed_input int gl_VerticesIn;
+__fixed_input int gl_PrimitiveIDIn;
+__fixed_output int gl_PrimitiveID;
+__fixed_output int gl_Layer;
+
+
 varying in vec4 gl_FrontColorIn[_mesa_VerticesInMax];
 varying in vec4 gl_BackColorIn[_mesa_VerticesInMax];
 varying in vec4 gl_FrontSecondaryColorIn[_mesa_VerticesInMax];
@@ -37,7 +43,7 @@ varying out vec4 gl_FrontColor;
 varying out vec4 gl_BackColor;
 varying out vec4 gl_FrontSecondaryColor;
 varying out vec4 gl_BackSecondaryColor;
-varying out vec4 gl_TexCoord[_mesa_VerticesInMax];
+varying out vec4 gl_TexCoord[gl_MaxTextureCoords];
 varying out float gl_FogFragCoord;
 
 void EmitVertex()

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: fixed input also for geometry shaders

2009-05-19 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 366224a3441ef9924aaa48b28ed71875e6936e46
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=366224a3441ef9924aaa48b28ed71875e6936e46

Author: Zack Rusin 
Date:   Tue May 19 14:37:57 2009 -0400

gs: fixed input also for geometry shaders

---

 src/mesa/shader/slang/slang_codegen.c |   12 +---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/mesa/shader/slang/slang_codegen.c 
b/src/mesa/shader/slang/slang_codegen.c
index 41f5878..b03d5dc 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -4565,9 +4565,15 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, 
slang_variable *var,
}
else if (var->type.qualifier == SLANG_QUAL_FIXEDINPUT) {
   GLuint swizzle = SWIZZLE_XYZW; /* silence compiler warning */
-  GLint index = _slang_input_index(varName, GL_FRAGMENT_PROGRAM_ARB,
-   &swizzle);
-  store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, swizzle);
+  if (type == SLANG_UNIT_FRAGMENT_BUILTIN) {
+ GLint index = _slang_input_index(varName, GL_FRAGMENT_PROGRAM_ARB,
+  &swizzle);
+ store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, 
swizzle);
+  } else if (type == SLANG_UNIT_GEOMETRY_BUILTIN) {
+ GLint index = _slang_input_index(varName, MESA_GEOMETRY_PROGRAM,
+  &swizzle);
+ store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, 
swizzle);
+  }
   if (dbg) printf("INPUT ");
}
else if (var->type.qualifier == SLANG_QUAL_FIXEDOUTPUT) {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: handle gl_VerticesIn and gl_PrimitiveIDIn specially

2009-05-19 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: f9328aaf5abd1b8d4458426cd02d252a6d36fcbc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f9328aaf5abd1b8d4458426cd02d252a6d36fcbc

Author: Zack Rusin 
Date:   Tue May 19 21:59:13 2009 -0400

gs: handle gl_VerticesIn and gl_PrimitiveIDIn specially

---

 src/mesa/shader/slang/slang_codegen.c |   11 ++-
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/mesa/shader/slang/slang_codegen.c 
b/src/mesa/shader/slang/slang_codegen.c
index b03d5dc..7c02dfc 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -359,7 +359,6 @@ _slang_input_index(const char *name, GLenum target, GLuint 
*swizzleOut)
   { NULL, 0, SWIZZLE_NOOP }
};
static const struct input_info geoInputs[] = {
-  { "gl_VerticesIn", GEOM_ATTRIB_VERTICES, SWIZZLE_NOOP },
   { "gl_FrontColorIn", GEOM_ATTRIB_COLOR0, SWIZZLE_NOOP },
   { "gl_BackColorIn", GEOM_ATTRIB_COLOR1, SWIZZLE_NOOP },
   { "gl_FrontSecondaryColorIn", GEOM_ATTRIB_SECONDARY_COLOR0, SWIZZLE_NOOP 
},
@@ -369,7 +368,6 @@ _slang_input_index(const char *name, GLenum target, GLuint 
*swizzleOut)
   { "gl_PositionIn", GEOM_ATTRIB_POSITION, SWIZZLE_NOOP },
   { "gl_ClipVertexIn", GEOM_ATTRIB_CLIP_VERTEX, SWIZZLE_NOOP },
   { "gl_PointSizeIn", GEOM_ATTRIB_POINT_SIZE, SWIZZLE_NOOP },
-  { "gl_PrimitiveIDIn", GEOM_ATTRIB_PRIMITIVE_ID, SWIZZLE_NOOP },
   { NULL, 0, SWIZZLE_NOOP }
};
static const struct input_info fragInputs[] = {
@@ -4570,9 +4568,12 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, 
slang_variable *var,
   &swizzle);
  store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, 
swizzle);
   } else if (type == SLANG_UNIT_GEOMETRY_BUILTIN) {
- GLint index = _slang_input_index(varName, MESA_GEOMETRY_PROGRAM,
-  &swizzle);
- store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, 
swizzle);
+ const GLfloat value = 0;
+ GLint index;
+
+ index = _mesa_add_named_constant(prog->Parameters, varName,
+  &value, size);
+ store = _slang_new_ir_storage_swz(PROGRAM_CONSTANT, index, size, 
swizzle);
   }
   if (dbg) printf("INPUT ");
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: treat those two special inputs more like other varyings

2009-05-20 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 0b2761402ed70af6f82bc2b0485db895f19ab430
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0b2761402ed70af6f82bc2b0485db895f19ab430

Author: Zack Rusin 
Date:   Tue May 19 23:36:17 2009 -0400

gs: treat those two special inputs more like other varyings

---

 src/mesa/shader/slang/slang_codegen.c |   11 +--
 1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/mesa/shader/slang/slang_codegen.c 
b/src/mesa/shader/slang/slang_codegen.c
index 7c02dfc..f4785a9 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -359,6 +359,8 @@ _slang_input_index(const char *name, GLenum target, GLuint 
*swizzleOut)
   { NULL, 0, SWIZZLE_NOOP }
};
static const struct input_info geoInputs[] = {
+  { "gl_VerticesIn", GEOM_ATTRIB_VERTICES, SWIZZLE_NOOP },
+  { "gl_PrimitiveIDIn", GEOM_ATTRIB_PRIMITIVE_ID, SWIZZLE_NOOP },
   { "gl_FrontColorIn", GEOM_ATTRIB_COLOR0, SWIZZLE_NOOP },
   { "gl_BackColorIn", GEOM_ATTRIB_COLOR1, SWIZZLE_NOOP },
   { "gl_FrontSecondaryColorIn", GEOM_ATTRIB_SECONDARY_COLOR0, SWIZZLE_NOOP 
},
@@ -4568,12 +4570,9 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, 
slang_variable *var,
   &swizzle);
  store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, 
swizzle);
   } else if (type == SLANG_UNIT_GEOMETRY_BUILTIN) {
- const GLfloat value = 0;
- GLint index;
-
- index = _mesa_add_named_constant(prog->Parameters, varName,
-  &value, size);
- store = _slang_new_ir_storage_swz(PROGRAM_CONSTANT, index, size, 
swizzle);
+ GLint index = _slang_input_index(varName, MESA_GEOMETRY_PROGRAM,
+  &swizzle);
+ store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, 
swizzle);
   }
   if (dbg) printf("INPUT ");
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: actually translate a geometry program

2009-05-20 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: d3685a42e9511efde5ef9759fb8d493656601a2d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3685a42e9511efde5ef9759fb8d493656601a2d

Author: Zack Rusin 
Date:   Tue May 19 23:35:50 2009 -0400

gs: actually translate a geometry program

plus enable debugging output for now

---

 src/mesa/state_tracker/st_program.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index 082a6e9..88311f6 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -52,7 +52,7 @@
 #define ST_MAX_SHADER_TOKENS 4096
 
 
-#define TGSI_DEBUG 0
+#define TGSI_DEBUG 1
 
 
 /** XXX we should use the version of this from u_memory.h but including
@@ -731,7 +731,7 @@ st_translate_geometry_program(struct st_context *st,
/* XXX: fix static allocation of tokens:
 */
num_tokens = st_translate_mesa_program(st->ctx,
-  TGSI_PROCESSOR_VERTEX,
+  TGSI_PROCESSOR_GEOMETRY,
   &stgp->Base.Base,
   /* inputs */
   gs_num_inputs,

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: make tgsi translation code treat geometry progs a lot like vertex progs

2009-05-20 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 2d487cabf7188fd9a93e067f64875a5440ee2a6b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2d487cabf7188fd9a93e067f64875a5440ee2a6b

Author: Zack Rusin 
Date:   Wed May 20 00:19:58 2009 -0400

gs: make tgsi translation code treat geometry progs a lot like vertex progs

---

 src/mesa/state_tracker/st_mesa_to_tgsi.c |7 ---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c 
b/src/mesa/state_tracker/st_mesa_to_tgsi.c
index 3d7cf62..b5d12c6 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -905,7 +905,8 @@ st_translate_mesa_program(
GLint wposTemp = -1, winHeightConst = -1;
 
assert(procType == TGSI_PROCESSOR_FRAGMENT ||
-  procType == TGSI_PROCESSOR_VERTEX);
+  procType == TGSI_PROCESSOR_VERTEX ||
+  procType == TGSI_PROCESSOR_GEOMETRY);
 
find_temporaries(program, tempsUsed);
 
@@ -953,7 +954,7 @@ st_translate_mesa_program(
   }
}
else {
-  /* vertex prog */
+  /* vertex/geometry prog */
   /* XXX: this could probaby be merged with the clause above.
* the only difference is the semantic tags.
*/
@@ -1003,7 +1004,7 @@ st_translate_mesa_program(
   }
}
else {
-  /* vertex prog */
+  /* vertex/geometry prog */
   for (i = 0; i < numOutputs; i++) {
  struct tgsi_full_declaration fulldecl;
  fulldecl = make_output_decl(i,

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: add the relevant state to the geometry shader token

2009-05-20 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 96a4de1db7f83ed0e4b86e8d8d70fa84a20b0609
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=96a4de1db7f83ed0e4b86e8d8d70fa84a20b0609

Author: Zack Rusin 
Date:   Wed May 20 17:16:35 2009 -0400

gs: add the relevant state to the geometry shader token

it looks that to compile it we'll actually need to piggy back the state
that was set at link time. otherwise there's not enough informations to bind it

---

 src/gallium/include/pipe/p_context.h|2 +-
 src/gallium/include/pipe/p_defines.h|   24 +---
 src/gallium/include/pipe/p_state.h  |7 +++
 src/mesa/shader/slang/slang_link.c  |   11 +++
 src/mesa/state_tracker/st_atom_shader.c |2 +-
 src/mesa/state_tracker/st_cb_program.c  |   12 ++--
 src/mesa/state_tracker/st_program.c |   17 ++---
 src/mesa/state_tracker/st_program.h |2 +-
 8 files changed, 50 insertions(+), 27 deletions(-)

diff --git a/src/gallium/include/pipe/p_context.h 
b/src/gallium/include/pipe/p_context.h
index 4ee0807..4576999 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -147,7 +147,7 @@ struct pipe_context {
void   (*delete_vs_state)(struct pipe_context *, void *);
 
void * (*create_gs_state)(struct pipe_context *,
- const struct pipe_shader_state *);
+ const struct pipe_geometry_shader_state *);
void   (*bind_gs_state)(struct pipe_context *, void *);
void   (*delete_gs_state)(struct pipe_context *, void *);
 
diff --git a/src/gallium/include/pipe/p_defines.h 
b/src/gallium/include/pipe/p_defines.h
index f5ab83a..8881bec 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -243,17 +243,19 @@ enum pipe_transfer_usage {
 /**
  * Primitive types:
  */
-#define PIPE_PRIM_POINTS  0
-#define PIPE_PRIM_LINES   1
-#define PIPE_PRIM_LINE_LOOP   2
-#define PIPE_PRIM_LINE_STRIP  3
-#define PIPE_PRIM_TRIANGLES   4
-#define PIPE_PRIM_TRIANGLE_STRIP  5
-#define PIPE_PRIM_TRIANGLE_FAN6
-#define PIPE_PRIM_QUADS   7
-#define PIPE_PRIM_QUAD_STRIP  8
-#define PIPE_PRIM_POLYGON 9
-#define PIPE_PRIM_MAX 10
+#define PIPE_PRIM_POINTS   0
+#define PIPE_PRIM_LINES1
+#define PIPE_PRIM_LINE_LOOP2
+#define PIPE_PRIM_LINE_STRIP   3
+#define PIPE_PRIM_TRIANGLES4
+#define PIPE_PRIM_TRIANGLE_STRIP   5
+#define PIPE_PRIM_TRIANGLE_FAN 6
+#define PIPE_PRIM_QUADS7
+#define PIPE_PRIM_QUAD_STRIP   8
+#define PIPE_PRIM_POLYGON  9
+#define PIPE_PRIM_LINES_ADJACENCY 10
+#define PIPE_PRIM_TRIANGLES_ADJACENCY 11
+#define PIPE_PRIM_MAX 12
 
 
 /**
diff --git a/src/gallium/include/pipe/p_state.h 
b/src/gallium/include/pipe/p_state.h
index 4b590bd..602042c 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -172,6 +172,13 @@ struct pipe_shader_state
 {
const struct tgsi_token *tokens;
 };
+struct pipe_geometry_shader_state
+{
+   struct pipe_shader_state shader;
+   unsigned vertices_out : 16;
+   unsigned input_type   : 8;
+   unsigned output_type  : 8;
+};
 
 
 struct pipe_depth_state 
diff --git a/src/mesa/shader/slang/slang_link.c 
b/src/mesa/shader/slang/slang_link.c
index 624cbba..590e0e2 100644
--- a/src/mesa/shader/slang/slang_link.c
+++ b/src/mesa/shader/slang/slang_link.c
@@ -814,6 +814,17 @@ _slang_link(GLcontext *ctx,
   }
}
if (shProg->GeometryProgram) {
+  if (!shProg->VertexProgram) {
+ link_error(shProg,
+"Geometry shader without a vertex shader is illegal!\n");
+ return;
+  }
+  if (shProg->GeometryProgram->VerticesOut == 0) {
+ link_error(shProg,
+"GEOMETRY_VERTICES_OUT is zero\n");
+ return;
+  }
+
   _slang_count_temporaries(&shProg->GeometryProgram->Base);
   _slang_update_inputs_outputs(&shProg->GeometryProgram->Base);
}
diff --git a/src/mesa/state_tracker/st_atom_shader.c 
b/src/mesa/state_tracker/st_atom_shader.c
index 173566b..ae9caf1 100644
--- a/src/mesa/state_tracker/st_atom_shader.c
+++ b/src/mesa/state_tracker/st_atom_shader.c
@@ -154,7 +154,7 @@ find_translated_vp(struct st_context *st,
   st_translate_fragment_program(st, stfp, stfp->input_to_slot);
}
 
-   if (!stgp->state.tokens) {
+   if (!stgp->state.shader.tokens) {
   GLuint inAttr, numIn = 0;
 
   for (inAttr = 0; inAttr < GEOM_ATTRIB_MAX; inAttr++) {
diff --git a/src/mesa/state_tracker/st_cb_program.c 
b/src/mesa/state_tracker/st_cb_program.c
index 5fb9ada..b71894d 100644
--- a/src/mesa/state_tracker/st_cb_program.c
+++ b/src/mesa/state_tracker/st_cb_program.c
@@ -201,9 +201,9 @@ st_delete_program(GLcont

Mesa (arb_geometry_shader4): tgsi: add a aos execution engine

2009-05-26 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 3c9a6c6e73c9f2fbf1d5995751a25706d0cf3bf1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3c9a6c6e73c9f2fbf1d5995751a25706d0cf3bf1

Author: Zack Rusin 
Date:   Tue May 26 14:07:32 2009 -0400

tgsi: add a aos execution engine

a simple port of the current soa code, so quite inneficient

---

 src/gallium/auxiliary/tgsi/Makefile|3 +-
 src/gallium/auxiliary/tgsi/tgsi_exec_aos.c | 2819 
 src/gallium/auxiliary/tgsi/tgsi_exec_aos.h |  169 ++
 3 files changed, 2990 insertions(+), 1 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=3c9a6c6e73c9f2fbf1d5995751a25706d0cf3bf1
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: fixup paths for programparameteri

2009-05-29 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 9f3199e2939e11c931c336bb5ec1af067ec2aff8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9f3199e2939e11c931c336bb5ec1af067ec2aff8

Author: Zack Rusin 
Date:   Fri May 29 12:41:17 2009 -0400

gs: fixup paths for programparameteri

---

 src/mesa/main/dd.h |2 +
 src/mesa/main/shaders.c|   56 +--
 src/mesa/shader/shader_api.c   |   60 
 .../shader/slang/library/slang_geometry_builtin.gc |2 +-
 4 files changed, 65 insertions(+), 55 deletions(-)

diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 32b1d4e..5ff2fb9 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -915,6 +915,8 @@ struct dd_function_table {
  GLboolean transpose, const GLfloat *values);
void (*UseProgram)(GLcontext *ctx, GLuint program);
void (*ValidateProgram)(GLcontext *ctx, GLuint program);
+   void (*ProgramParameteri)(GLcontext *ctx, GLuint program,
+ GLenum pname, GLint value);
/* XXX many more to come */
/*...@}*/
 
diff --git a/src/mesa/main/shaders.c b/src/mesa/main/shaders.c
index 31caede..d6bf8ae 100644
--- a/src/mesa/main/shaders.c
+++ b/src/mesa/main/shaders.c
@@ -728,61 +728,9 @@ _mesa_ValidateProgramARB(GLhandleARB program)
ctx->Driver.ValidateProgram(ctx, program);
 }
 
-static struct gl_geometry_program *_mesa_geometryFromShader(GLuint program)
-{
-   GET_CURRENT_CONTEXT(ctx);
-   struct gl_shader_program *shProg = NULL;
-   struct gl_shader *sh = NULL;
-   GLuint i;
-
-   shProg = _mesa_lookup_shader_program(ctx, program);
-
-   if (!ctx->Extensions.ARB_geometry_shader4) {
-  _mesa_error(ctx, GL_INVALID_OPERATION, "glProgramParameteriARB");
-  return NULL;
-   }
-
-   if (!shProg) {
-  _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB");
-  return NULL;
-   }
-   for (i = 0; i < shProg->NumShaders; ++i) {
-  if (shProg->Shaders[i]->Type == GL_GEOMETRY_SHADER_ARB) {
- sh = shProg->Shaders[i];
-  }
-   }
-   if (!sh || !sh->Program) {
-  _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB");
-  return NULL;
-   }
-   return (struct gl_geometry_program *) sh->Program;
-}
-
 void GLAPIENTRY
 _mesa_ProgramParameteriARB(GLuint program, GLenum pname, GLint value)
 {
-   struct gl_geometry_program *gprog;
-   GET_CURRENT_CONTEXT(ctx);
-   ASSERT_OUTSIDE_BEGIN_END(ctx);
-
-   switch (pname) {
-   case GL_GEOMETRY_VERTICES_OUT_ARB:
-  gprog = _mesa_geometryFromShader(program);
-  if (gprog)
- gprog->VerticesOut = value;
-  break;
-   case GL_GEOMETRY_INPUT_TYPE_ARB:
-  gprog = _mesa_geometryFromShader(program);
-  if (gprog)
- gprog->InputType = value;
-  break;
-   case GL_GEOMETRY_OUTPUT_TYPE_ARB:
-  gprog = _mesa_geometryFromShader(program);
-  if (gprog)
- gprog->OutputType = value;
-  break;
-   default:
-  _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB");
-  break;
-   }
+   GET_CURRENT_CONTEXT(ctx);
+   ctx->Driver.ProgramParameteri(ctx, program, pname, value);
 }
diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index 0ac40d0..a121a72 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -1068,6 +1068,65 @@ _mesa_get_programiv(GLcontext *ctx, GLuint program,
}
 }
 
+static struct gl_geometry_program *
+_mesa_geometry_from_shader(GLuint program)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   struct gl_shader_program *shProg = NULL;
+   struct gl_shader *sh = NULL;
+   GLuint i;
+
+   shProg = _mesa_lookup_shader_program(ctx, program);
+
+   if (!ctx->Extensions.ARB_geometry_shader4) {
+  _mesa_error(ctx, GL_INVALID_OPERATION, "glProgramParameteriARB");
+  return NULL;
+   }
+
+   if (!shProg) {
+  _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB");
+  return NULL;
+   }
+   for (i = 0; i < shProg->NumShaders; ++i) {
+  if (shProg->Shaders[i]->Type == GL_GEOMETRY_SHADER_ARB) {
+ sh = shProg->Shaders[i];
+  }
+   }
+   if (!sh || !sh->Program) {
+  _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB");
+  return NULL;
+   }
+   return (struct gl_geometry_program *) sh->Program;
+}
+
+static void
+_mesa_program_parameteri(GLcontext *ctx, GLuint program,
+ GLenum pname, GLint value)
+{
+   struct gl_geometry_program *gprog;
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+   switch (pname) {
+   case GL_GEOMETRY_VERTICES_OUT_ARB:
+  gprog = _mesa_geometryFromShader(program);
+  if (gprog)
+ gprog->VerticesOut = value;
+  break;
+   case GL_GEOMETRY_INPUT_TYPE_ARB:
+  gprog = _mesa_geometryFromShader(program);
+  if (gprog)
+ gprog->InputType = val

Mesa (arb_geometry_shader4): gs: fix typos

2009-06-05 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 306be014ab9c086c11bb2f49f1d6eb102569f103
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=306be014ab9c086c11bb2f49f1d6eb102569f103

Author: Zack Rusin 
Date:   Wed May 20 18:18:20 2009 -0400

gs: fix typos

---

 src/mesa/state_tracker/st_program.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index 54fc691..6603f6f 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -702,7 +702,7 @@ st_translate_geometry_program(struct st_context *st,
  case GEOM_RESULT_TEX6:
  case GEOM_RESULT_TEX7:
 /* fall-through */
- case VERT_RESULT_VAR0:
+ case GEOM_RESULT_VAR0:
 /* fall-through */
  default:
 /* use default semantic info */
@@ -724,7 +724,7 @@ st_translate_geometry_program(struct st_context *st,
   stgp->state.shader.tokens = NULL;
}
if (stgp->driver_shader) {
-  cso_delete_vertex_shader(st->cso_context, stgp->driver_shader);
+  cso_delete_geometry_shader(st->cso_context, stgp->driver_shader);
   stgp->driver_shader = NULL;
}
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: use pipe_geometry_shader_state

2009-06-05 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 8b7c63848a74d0fd615016a778918ec03b577570
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8b7c63848a74d0fd615016a778918ec03b577570

Author: Zack Rusin 
Date:   Fri May 22 13:38:07 2009 -0400

gs: use pipe_geometry_shader_state

---

 src/gallium/auxiliary/draw/draw_context.h  |2 +-
 src/gallium/auxiliary/draw/draw_gs.c   |2 +-
 src/gallium/drivers/softpipe/sp_state.h|4 ++--
 src/gallium/drivers/softpipe/sp_state_fs.c |8 
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_context.h 
b/src/gallium/auxiliary/draw/draw_context.h
index ed72139..d236cf2 100644
--- a/src/gallium/auxiliary/draw/draw_context.h
+++ b/src/gallium/auxiliary/draw/draw_context.h
@@ -118,7 +118,7 @@ void draw_delete_vertex_shader(struct draw_context *draw,
  */
 struct draw_geometry_shader *
 draw_create_geometry_shader(struct draw_context *draw,
-const struct pipe_shader_state *shader);
+const struct pipe_geometry_shader_state *shader);
 void draw_bind_geometry_shader(struct draw_context *draw,
struct draw_geometry_shader *dvs);
 void draw_delete_geometry_shader(struct draw_context *draw,
diff --git a/src/gallium/auxiliary/draw/draw_gs.c 
b/src/gallium/auxiliary/draw/draw_gs.c
index 283717d..c7f6839 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -36,7 +36,7 @@
 
 struct draw_geometry_shader *
 draw_create_geometry_shader(struct draw_context *draw,
-const struct pipe_shader_state *shader)
+const struct pipe_geometry_shader_state *shader)
 {
struct draw_geometry_shader *gs;
 
diff --git a/src/gallium/drivers/softpipe/sp_state.h 
b/src/gallium/drivers/softpipe/sp_state.h
index 03d0652..67a8cf0 100644
--- a/src/gallium/drivers/softpipe/sp_state.h
+++ b/src/gallium/drivers/softpipe/sp_state.h
@@ -92,7 +92,7 @@ struct sp_vertex_shader {
 
 /** Subclass of pipe_shader_state */
 struct sp_geometry_shader {
-   struct pipe_shader_state shader;
+   struct pipe_geometry_shader_state shader;
struct draw_geometry_shader *draw_data;
 };
 
@@ -145,7 +145,7 @@ void *softpipe_create_vs_state(struct pipe_context *,
 void softpipe_bind_vs_state(struct pipe_context *, void *);
 void softpipe_delete_vs_state(struct pipe_context *, void *);
 void *softpipe_create_gs_state(struct pipe_context *,
-   const struct pipe_shader_state *);
+   const struct pipe_geometry_shader_state *);
 void softpipe_bind_gs_state(struct pipe_context *, void *);
 void softpipe_delete_gs_state(struct pipe_context *, void *);
 
diff --git a/src/gallium/drivers/softpipe/sp_state_fs.c 
b/src/gallium/drivers/softpipe/sp_state_fs.c
index 6c28126..f20110e 100644
--- a/src/gallium/drivers/softpipe/sp_state_fs.c
+++ b/src/gallium/drivers/softpipe/sp_state_fs.c
@@ -170,7 +170,7 @@ softpipe_set_constant_buffer(struct pipe_context *pipe,
 
 void *
 softpipe_create_gs_state(struct pipe_context *pipe,
- const struct pipe_shader_state *templ)
+ const struct pipe_geometry_shader_state *templ)
 {
struct softpipe_context *softpipe = softpipe_context(pipe);
struct sp_geometry_shader *state;
@@ -181,8 +181,8 @@ softpipe_create_gs_state(struct pipe_context *pipe,
 
/* copy shader tokens, the ones passed in will go away.
 */
-   state->shader.tokens = tgsi_dup_tokens(templ->tokens);
-   if (state->shader.tokens == NULL)
+   state->shader.shader.tokens = tgsi_dup_tokens(templ->shader.tokens);
+   if (state->shader.shader.tokens == NULL)
   goto fail;
 
state->draw_data = draw_create_geometry_shader(softpipe->draw, templ);
@@ -193,7 +193,7 @@ softpipe_create_gs_state(struct pipe_context *pipe,
 
 fail:
if (state) {
-  FREE( (void *)state->shader.tokens );
+  FREE( (void *)state->shader.shader.tokens );
   FREE( state->draw_data );
   FREE( state );
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: those signatures changed

2009-06-05 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: b1d15215e072afdcf737bf640890bd104c3e7e98
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b1d15215e072afdcf737bf640890bd104c3e7e98

Author: Zack Rusin 
Date:   Fri May 29 20:00:55 2009 -0400

gs: those signatures changed

---

 src/mesa/shader/shader_api.c |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index a121a72..b88b996 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -1108,17 +1108,17 @@ _mesa_program_parameteri(GLcontext *ctx, GLuint program,
 
switch (pname) {
case GL_GEOMETRY_VERTICES_OUT_ARB:
-  gprog = _mesa_geometryFromShader(program);
+  gprog = _mesa_geometry_from_shader(program);
   if (gprog)
  gprog->VerticesOut = value;
   break;
case GL_GEOMETRY_INPUT_TYPE_ARB:
-  gprog = _mesa_geometryFromShader(program);
+  gprog = _mesa_geometry_from_shader(program);
   if (gprog)
  gprog->InputType = value;
   break;
case GL_GEOMETRY_OUTPUT_TYPE_ARB:
-  gprog = _mesa_geometryFromShader(program);
+  gprog = _mesa_geometry_from_shader(program);
   if (gprog)
  gprog->OutputType = value;
   break;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_5_branch): gallium: fix the front face semantics

2009-07-01 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_5_branch
Commit: 1c04731b8721850b6abb12a43a3eec616b850e86
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c04731b8721850b6abb12a43a3eec616b850e86

Author: Zack Rusin 
Date:   Wed Jul  1 10:42:58 2009 -0400

gallium: fix the front face semantics

mesa allocates both frontface and pointcoord registers within the fog
coordinate register, by using swizzling. to make it cleaner and easier
for drivers we want each of them in its own register. so when doing
compilation from the mesa IR to tgsi allocate new registers for both
and add new semantics to the respective declarations.

---

 src/gallium/drivers/softpipe/sp_setup.c |   27 ++
 src/gallium/drivers/softpipe/sp_state_derived.c |1 +
 src/gallium/include/pipe/p_shader_tokens.h  |3 +-
 src/mesa/state_tracker/st_atom_shader.c |   19 ++-
 src/mesa/state_tracker/st_mesa_to_tgsi.c|   23 ++-
 src/mesa/state_tracker/st_program.c |7 +-
 6 files changed, 60 insertions(+), 20 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_setup.c 
b/src/gallium/drivers/softpipe/sp_setup.c
index e5be652..1eb23cd 100644
--- a/src/gallium/drivers/softpipe/sp_setup.c
+++ b/src/gallium/drivers/softpipe/sp_setup.c
@@ -785,11 +785,10 @@ static void setup_tri_coefficients( struct setup_context 
*setup )
  assert(0);
   }
 
-  if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FOG) {
- /* FOG.y = front/back facing  XXX fix this */
- setup->coef[fragSlot].a0[1] = 1.0f - setup->quad.input.facing;
- setup->coef[fragSlot].dadx[1] = 0.0;
- setup->coef[fragSlot].dady[1] = 0.0;
+  if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FACE) {
+ setup->coef[fragSlot].a0[0] = 1.0f - setup->quad.input.facing;
+ setup->coef[fragSlot].dadx[0] = 0.0;
+ setup->coef[fragSlot].dady[0] = 0.0;
   }
}
 }
@@ -1096,11 +1095,10 @@ setup_line_coefficients(struct setup_context *setup,
  assert(0);
   }
 
-  if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FOG) {
- /* FOG.y = front/back facing  XXX fix this */
- setup->coef[fragSlot].a0[1] = 1.0f - setup->quad.input.facing;
- setup->coef[fragSlot].dadx[1] = 0.0;
- setup->coef[fragSlot].dady[1] = 0.0;
+  if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FACE) {
+ setup->coef[fragSlot].a0[0] = 1.0f - setup->quad.input.facing;
+ setup->coef[fragSlot].dadx[0] = 0.0;
+ setup->coef[fragSlot].dady[0] = 0.0;
   }
}
return TRUE;
@@ -1342,11 +1340,10 @@ setup_point( struct setup_context *setup,
  assert(0);
   }
 
-  if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FOG) {
- /* FOG.y = front/back facing  XXX fix this */
- setup->coef[fragSlot].a0[1] = 1.0f - setup->quad.input.facing;
- setup->coef[fragSlot].dadx[1] = 0.0;
- setup->coef[fragSlot].dady[1] = 0.0;
+  if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FACE) {
+ setup->coef[fragSlot].a0[0] = 1.0f - setup->quad.input.facing;
+ setup->coef[fragSlot].dadx[0] = 0.0;
+ setup->coef[fragSlot].dady[0] = 0.0;
   }
}
 
diff --git a/src/gallium/drivers/softpipe/sp_state_derived.c 
b/src/gallium/drivers/softpipe/sp_state_derived.c
index 6b6a4c3..7555100 100644
--- a/src/gallium/drivers/softpipe/sp_state_derived.c
+++ b/src/gallium/drivers/softpipe/sp_state_derived.c
@@ -110,6 +110,7 @@ softpipe_get_vertex_info(struct softpipe_context *softpipe)
 break;
 
  case TGSI_SEMANTIC_GENERIC:
+ case TGSI_SEMANTIC_FACE:
 /* this includes texcoords and varying vars */
 src = draw_find_vs_output(softpipe->draw, TGSI_SEMANTIC_GENERIC,
   spfs->info.input_semantic_index[i]);
diff --git a/src/gallium/include/pipe/p_shader_tokens.h 
b/src/gallium/include/pipe/p_shader_tokens.h
index 4dafdd6..b00cfe3 100644
--- a/src/gallium/include/pipe/p_shader_tokens.h
+++ b/src/gallium/include/pipe/p_shader_tokens.h
@@ -131,7 +131,8 @@ struct tgsi_declaration_range
 #define TGSI_SEMANTIC_PSIZE4
 #define TGSI_SEMANTIC_GENERIC  5
 #define TGSI_SEMANTIC_NORMAL   6
-#define TGSI_SEMANTIC_COUNT7 /**< number of semantic values */
+#define TGSI_SEMANTIC_FACE 7
+#define TGSI_SEMANTIC_COUNT8 /**< number of semantic values */
 
 struct tgsi_declaration_semantic
 {
diff --git a/src/mesa/state_tracker/st_atom_shader.c 
b/src/mesa/state_tracker/st_atom_shader.c
index ee649be..c02ccc3 100644
--- a/src/mesa/state_tracker/st_atom_shader.c
+++ b/src/mesa/state_tracker/st_atom_shader.c
@@ -137,8 +137,23 @@ find_translated_vp(struct st_context *st,
 
   for (inAttr = 0; inAttr < FRAG_ATTRIB_MAX; inA

Mesa (mesa_7_5_branch): gallium: more fog extraction fixes

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_5_branch
Commit: a4d952358d8fd0f9d135c91c37969acdcf394f0a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a4d952358d8fd0f9d135c91c37969acdcf394f0a

Author: Zack Rusin 
Date:   Mon Jul  6 21:33:56 2009 -0400

gallium: more fog extraction fixes

fix the cases when fog coord/front face/point coord are used in the same
shader.

---

 src/mesa/state_tracker/st_atom_shader.c  |   21 ++
 src/mesa/state_tracker/st_mesa_to_tgsi.c |9 +++-
 src/mesa/state_tracker/st_program.c  |   34 +
 3 files changed, 39 insertions(+), 25 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_shader.c 
b/src/mesa/state_tracker/st_atom_shader.c
index c02ccc3..299aa76 100644
--- a/src/mesa/state_tracker/st_atom_shader.c
+++ b/src/mesa/state_tracker/st_atom_shader.c
@@ -137,22 +137,15 @@ find_translated_vp(struct st_context *st,
 
   for (inAttr = 0; inAttr < FRAG_ATTRIB_MAX; inAttr++) {
  if (fragInputsRead & (1 << inAttr)) {
+stfp->input_to_slot[inAttr] = numIn;
+numIn++;
 if ((fragInputsRead & FRAG_BIT_FOGC)) {
-   if (stfp->Base.UsesPointCoord) {
-  stfp->input_to_slot[inAttr] = numIn;
-  numIn++;
+   /* leave placeholders for the
+* extra registers we extract from fog */
+   if (stfp->Base.UsesFrontFacing ||
+   stfp->Base.UsesPointCoord) {
+  numIn += 2;
}
-   if (stfp->Base.UsesFrontFacing) {
-  stfp->input_to_slot[inAttr] = numIn;
-  numIn++;
-   }
-   if (stfp->Base.UsesFogFragCoord) {
-  stfp->input_to_slot[inAttr] = numIn;
-  numIn++;
-   }
-} else {
-   stfp->input_to_slot[inAttr] = numIn;
-   numIn++;
 }
  }
  else {
diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c 
b/src/mesa/state_tracker/st_mesa_to_tgsi.c
index 3140ebe..8aef3fc 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -122,8 +122,15 @@ map_register_file_index(
  SWIZZLE_X,
  SWIZZLE_X,
  SWIZZLE_X);
+/* register after fog */
+return inputMapping[index] + 1;
  } else {
-/* fixme: point coord */
+*swizzle = MAKE_SWIZZLE4(SWIZZLE_Z,
+ SWIZZLE_W,
+ SWIZZLE_Z,
+ SWIZZLE_W);
+/* register after frontface */
+return inputMapping[index] + 2;
  }
   }
   /* inputs are mapped according to the user-defined map */
diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index 9a346fb..18d1046 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -433,20 +433,34 @@ st_translate_fragment_program(struct st_context *st,
 stfp->input_semantic_index[slot] = 1;
 interpMode[slot] = TGSI_INTERPOLATE_LINEAR;
 break;
- case FRAG_ATTRIB_FOGC:
-if (stfp->Base.UsesPointCoord) {
-   stfp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;
-   stfp->input_semantic_index[slot] = num_generic++;
-   interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
-} else if (stfp->Base.UsesFrontFacing) {
-   stfp->input_semantic_name[slot] = TGSI_SEMANTIC_FACE;
-   stfp->input_semantic_index[slot] = 0;
-   interpMode[slot] = TGSI_INTERPOLATE_CONSTANT;
-} else {
+ case FRAG_ATTRIB_FOGC: {
+int extra_decls = 0;
+if (stfp->Base.UsesFogFragCoord) {
stfp->input_semantic_name[slot] = TGSI_SEMANTIC_FOG;
stfp->input_semantic_index[slot] = 0;
interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
+   input_flags[slot] = stfp->Base.Base.InputFlags[attr];
+   ++extra_decls;
}
+if (stfp->Base.UsesFrontFacing) {
+   GLint idx = slot + extra_decls;
+   stfp->input_semantic_name[idx] = TGSI_SEMANTIC_FACE;
+   stfp->input_semantic_index[idx] = 0;
+   interpMode[idx] = TGSI_INTERPOLATE_CONSTANT;
+   input_flags[idx] = stfp->Base.Base.InputFlags[attr];
+   ++extra_decls;
+}
+if (stfp->Base.UsesPointCoord) {
+   GLint idx = slot + extra_decls;
+   stfp->input_semantic_name[idx] = TGSI_SEMANTIC_GENERIC;
+   stfp->input_semantic_index[idx] = num_gener

Mesa (master): docs: asst updates to openvg.html

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: d6318ba8a856c5a61c402fce43c3fa56c414064a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d6318ba8a856c5a61c402fce43c3fa56c414064a

Author: Brian Paul 
Date:   Fri May  1 11:37:09 2009 -0600

docs: asst updates to openvg.html

---

 docs/openvg.html |   34 +++---
 1 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/docs/openvg.html b/docs/openvg.html
index a8153b9..442ee52 100644
--- a/docs/openvg.html
+++ b/docs/openvg.html
@@ -14,7 +14,9 @@
 The current version of the OpenVG state tracker implements OpenVG 1.0.
 
 
-More informations about OpenVG can be found at http://www.khronos.org/openvg/";>http://www.khronos.org/openvg/ .
+More informations about OpenVG can be found at
+http://www.khronos.org/openvg/"; target="_parent">
+http://www.khronos.org/openvg/ .
 
 
 The OpenVG state tracker depends on the Gallium architecture and a working EGL 
implementation.
@@ -31,14 +33,32 @@ The OpenVG state tracker depends on the Gallium 
architecture and a working EGL i
 Sample build
 A sample build looks as follows:
 
-make linux-x86-64-debug
-cd src/gallium/state_trackers/vega
-make
-cd ../../../..
-export LD_LIBRARY_PATH=$PWD/lib64
-export EGL_DRIVER="egl_softpipe"
+  make linux-x86-64-debug
+  cd src/gallium/state_trackers/vega
+  make
+  cd ../../../..
+  export LD_LIBRARY_PATH=$PWD/lib64
+  export EGL_DRIVER="egl_softpipe"
 
 
+OpenVG Demos
+
+
+To build the OpenVG demos:
+
+
+  cd progs/openvg
+  make
+
+
+To run a demo:
+
+
+  cd openvg/demos
+  ./lion
+
+
+
 Notes
 
 EGL_DRIVER environmental variable: forces usage of a specific EGL driver. 
Unless you force egl_softpipe the implementation will look for a DRI hardware 
accelerate driver and unless you have a Gallium driver that supports it, you'll 
see crashes

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): OpenVG 1.0 State Tracker

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 544dd4b11f7be76bb00fe29a60eaf2772dcc69ca
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=544dd4b11f7be76bb00fe29a60eaf2772dcc69ca

Author: Zack Rusin 
Date:   Fri May  1 12:41:38 2009 -0400

OpenVG 1.0 State Tracker

Import of the OpenVG 1.0 state tracker for Gallium.

---

 docs/openvg.html|   48 +
 include/VG/openvg.h |  686 
 include/VG/vgext.h  |  233 +++
 include/VG/vgplatform.h |  106 ++
 include/VG/vgu.h|  130 ++
 progs/openvg/demos/Makefile |   40 +
 progs/openvg/demos/gears.c  |  394 +
 progs/openvg/demos/lion-render.c| 1573 ++
 progs/openvg/demos/lion-render.h|   16 +
 progs/openvg/demos/lion.c   |  288 
 progs/openvg/demos/sp.c |  103 ++
 progs/openvg/trivial/Makefile   |  127 ++
 progs/openvg/trivial/arc.c  |  139 ++
 progs/openvg/trivial/cap.c  |   75 +
 progs/openvg/trivial/clear.c|   42 +
 progs/openvg/trivial/coord.c|   66 +
 progs/openvg/trivial/dash.c |   95 ++
 progs/openvg/trivial/eglcommon.c|  288 
 progs/openvg/trivial/eglcommon.h|   20 +
 progs/openvg/trivial/ellipse.c  |   84 +
 progs/openvg/trivial/filter.c   |  107 ++
 progs/openvg/trivial/gradorigin.c   |   98 ++
 progs/openvg/trivial/lineto.c   |   56 +
 progs/openvg/trivial/lingrad.c  |   87 +
 progs/openvg/trivial/lookup.c   |   71 +
 progs/openvg/trivial/mask.c |   58 +
 progs/openvg/trivial/mask4.c|  132 ++
 progs/openvg/trivial/path3.c|   77 +
 progs/openvg/trivial/radialgrad.c   |   99 ++
 progs/openvg/trivial/readpixels.c   |   75 +
 progs/openvg/trivial/roundedrect.c  |   67 +
 progs/openvg/trivial/star-nonzero.c |   55 +
 progs/openvg/trivial/star-oddeven.c |  102 ++
 progs/openvg/trivial/stroke.c   |  116 ++
 progs/openvg/trivial/stroke2.c  |  207 +++
 progs/openvg/trivial/vguarc.c   |   74 +
 src/gallium/state_trackers/vega/Makefile|  128 ++
 src/gallium/state_trackers/vega/api_consts.h|   56 +
 src/gallium/state_trackers/vega/api_context.c   |   75 +
 src/gallium/state_trackers/vega/api_filters.c   |  805 +
 src/gallium/state_trackers/vega/api_images.c|  489 ++
 src/gallium/state_trackers/vega/api_masks.c |  373 +
 src/gallium/state_trackers/vega/api_misc.c  |   83 +
 src/gallium/state_trackers/vega/api_paint.c |  166 ++
 src/gallium/state_trackers/vega/api_params.c| 1673 +++
 src/gallium/state_trackers/vega/api_path.c  |  488 ++
 src/gallium/state_trackers/vega/api_text.c  |  258 +++
 src/gallium/state_trackers/vega/api_transform.c |  128 ++
 src/gallium/state_trackers/vega/arc.c   |  708 
 src/gallium/state_trackers/vega/arc.h   |   80 +
 src/gallium/state_trackers/vega/asm_fill.h  |  246 +++
 src/gallium/state_trackers/vega/asm_filters.h   |  117 ++
 src/gallium/state_trackers/vega/asm_util.h  |  136 ++
 src/gallium/state_trackers/vega/bezier.c|  704 
 src/gallium/state_trackers/vega/bezier.h|   81 +
 src/gallium/state_trackers/vega/image.c |  654 
 src/gallium/state_trackers/vega/image.h |  104 ++
 src/gallium/state_trackers/vega/mask.c  |  690 
 src/gallium/state_trackers/vega/mask.h  |   68 +
 src/gallium/state_trackers/vega/matrix.h|  462 +
 src/gallium/state_trackers/vega/paint.c |  699 
 src/gallium/state_trackers/vega/paint.h |  118 ++
 src/gallium/state_trackers/vega/path.c  | 2034 +++
 src/gallium/state_trackers/vega/path.h  |  126 ++
 src/gallium/state_trackers/vega/path_utils.h|  109 ++
 src/gallium/state_trackers/vega/polygon.c   |  550 ++
 src/gallium/state_trackers/vega/polygon.h   |   75 +
 src/gallium/state_trackers/vega/renderer.c  |  592 +++
 src/gallium/state_trackers/vega/renderer.h  |   76 +
 src/gallium/state_trackers/vega/shader.c|  310 
 src/gallium/state_trackers/vega/shader.h|   56 +
 src/gallium/state_trackers/vega/shaders_cache.c |  439 +
 src/gallium/state_trackers/vega/shaders_cache.h |   77 +
 src/gallium/state_trackers/vega/st_inlines.h|  159 ++
 src/gallium/state_trackers/vega/stroker.c   | 1349 +++
 src/gallium/state_trackers/vega/stroker.h   |   89 +
 src/gallium/state_trackers/vega/util_array.h|  122 ++
 src/gallium

Mesa (master): exa: some infrastucture work for accelerating composite

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 21cce6afb03bf9b9adfc6d8a1a446bb3ef22c7a8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=21cce6afb03bf9b9adfc6d8a1a446bb3ef22c7a8

Author: Zack Rusin 
Date:   Mon Jun  8 00:07:04 2009 -0400

exa: some infrastucture work for accelerating composite

---

 src/gallium/state_trackers/xorg/xorg_composite.c |   27 ++
 src/gallium/state_trackers/xorg/xorg_composite.h |   22 +
 src/gallium/state_trackers/xorg/xorg_exa.c   |   98 +++---
 src/gallium/state_trackers/xorg/xorg_exa.h   |   27 ++
 src/gallium/state_trackers/xorg/xorg_tracker.h   |5 +-
 5 files changed, 130 insertions(+), 49 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_composite.c 
b/src/gallium/state_trackers/xorg/xorg_composite.c
new file mode 100644
index 000..255ae91
--- /dev/null
+++ b/src/gallium/state_trackers/xorg/xorg_composite.c
@@ -0,0 +1,27 @@
+#include "xorg_composite.h"
+
+
+boolean xorg_composite_accelerated(int op,
+   PicturePtr pSrcPicture,
+   PicturePtr pMaskPicture,
+   PicturePtr pDstPicture)
+{
+   return FALSE;
+}
+
+boolean xorg_composite_bind_state(struct exa_context *exa,
+  int op,
+  PicturePtr pSrcPicture,
+  PicturePtr pMaskPicture,
+  PicturePtr pDstPicture)
+{
+   return FALSE;
+}
+
+void xorg_composite(struct exa_context *exa,
+struct exa_pixmap_priv *dst,
+int srcX, int srcY, int maskX, int maskY,
+int dstX, int dstY, int width, int height)
+{
+}
+
diff --git a/src/gallium/state_trackers/xorg/xorg_composite.h 
b/src/gallium/state_trackers/xorg/xorg_composite.h
new file mode 100644
index 000..a52e0e6
--- /dev/null
+++ b/src/gallium/state_trackers/xorg/xorg_composite.h
@@ -0,0 +1,22 @@
+#ifndef XORG_COMPOSITE_H
+#define XORG_COMPOSITE_H
+
+#include "xorg_exa.h"
+
+boolean xorg_composite_accelerated(int op,
+   PicturePtr pSrcPicture,
+   PicturePtr pMaskPicture,
+   PicturePtr pDstPicture);
+
+boolean xorg_composite_bind_state(struct exa_context *exa,
+  int op,
+  PicturePtr pSrcPicture,
+  PicturePtr pMaskPicture,
+  PicturePtr pDstPicture);
+
+void xorg_composite(struct exa_context *exa,
+struct exa_pixmap_priv *dst,
+int srcX, int srcY, int maskX, int maskY,
+int dstX, int dstY, int width, int height);
+
+#endif
diff --git a/src/gallium/state_trackers/xorg/xorg_exa.c 
b/src/gallium/state_trackers/xorg/xorg_exa.c
index 0fbfed1..2c4291a 100644
--- a/src/gallium/state_trackers/xorg/xorg_exa.c
+++ b/src/gallium/state_trackers/xorg/xorg_exa.c
@@ -28,9 +28,14 @@
  *
  */
 
-#include "xorg-server.h"
-#include "xf86.h"
+#include "xorg_exa.h"
 #include "xorg_tracker.h"
+#include "xorg_composite.h"
+
+#include 
+#include 
+#include 
+#include 
 
 #include "pipe/p_format.h"
 #include "pipe/p_context.h"
@@ -39,24 +44,6 @@
 
 #include "util/u_rect.h"
 
-struct exa_entity
-{
-ExaDriverPtr pExa;
-struct pipe_context *ctx;
-struct pipe_screen *scrn;
-};
-
-struct PixmapPriv
-{
-int flags;
-struct pipe_texture *tex;
-unsigned int color;
-struct pipe_surface *src_surf; /* for copies */
-
-struct pipe_transfer *map_transfer;
-unsigned map_count;
-};
-
 /*
  * Helper functions
  */
@@ -113,8 +100,8 @@ ExaPrepareAccess(PixmapPtr pPix, int index)
 ScreenPtr pScreen = pPix->drawable.pScreen;
 ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
 modesettingPtr ms = modesettingPTR(pScrn);
-struct exa_entity *exa = ms->exa;
-struct PixmapPriv *priv;
+struct exa_context *exa = ms->exa;
+struct exa_pixmap_priv *priv;
 
 priv = exaGetPixmapDriverPrivate(pPix);
 
@@ -145,8 +132,8 @@ ExaFinishAccess(PixmapPtr pPix, int index)
 ScreenPtr pScreen = pPix->drawable.pScreen;
 ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
 modesettingPtr ms = modesettingPTR(pScrn);
-struct exa_entity *exa = ms->exa;
-struct PixmapPriv *priv;
+struct exa_context *exa = ms->exa;
+struct exa_pixmap_priv *priv;
 priv = exaGetPixmapDriverPrivate(pPix);
 
 if (!priv)
@@ -168,8 +155,8 @@ ExaDone(PixmapPtr pPixmap)
 {
 ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
 modesettingPtr ms = modesettingPTR(pScrn);
-struct PixmapPriv *priv = exaGetPixmapDriverPrivate(pPixmap);
-struct exa_entity *exa = ms->exa;
+struct exa_pixmap_priv *

Mesa (master): vg: remove a silly demo and add a bit better one

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 54324d9e0c6956bdc7bc9b0620fe53c8e6b66a04
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=54324d9e0c6956bdc7bc9b0620fe53c8e6b66a04

Author: Zack Rusin 
Date:   Fri May  1 19:08:32 2009 -0400

vg: remove a silly demo and add a bit better one

---

 progs/openvg/demos/Makefile |   19 +-
 progs/openvg/demos/{gears.c => eglcommon.c} |  236 --
 progs/openvg/demos/eglcommon.h  |   20 ++
 progs/openvg/demos/sp.c |  466 ++-
 4 files changed, 544 insertions(+), 197 deletions(-)

diff --git a/progs/openvg/demos/Makefile b/progs/openvg/demos/Makefile
index 7ecb987..6e15342 100644
--- a/progs/openvg/demos/Makefile
+++ b/progs/openvg/demos/Makefile
@@ -7,8 +7,8 @@ VG_LIBS=-lm -pthread -lEGL -lOpenVG
 INCLUDE_DIRS = -I$(TOP)/include
 
 PROGRAMS = \
-   gears \
-lion
+lion \
+sp
 
 .c.o:
$(CC) -c $(INCLUDE_DIRS) $(CFLAGS) $< -o $@
@@ -17,14 +17,6 @@ PROGRAMS = \
 
 default: $(PROGRAMS)
 
-
-gears: gears.o
-   $(CC) $(CFLAGS) gears.o -L$(TOP)/$(LIB_DIR) $(VG_LIBS)  -o $@
-
-gears.o: gears.c $(HEADERS)
-   $(CC) -c $(CFLAGS) -I$(TOP)/include gears.c
-
-
 lion: lion.o lion-render.o
$(CC) $(CFLAGS) lion.o lion-render.o -L$(TOP)/$(LIB_DIR) $(VG_LIBS) -o 
$@
 
@@ -34,6 +26,13 @@ lion-render.o: lion-render.c lion-render.h $(HEADERS)
$(CC) -c $(CFLAGS) -I$(TOP)/include lion-render.c
 
 
+sp: sp.c eglcommon.o
+   $(CC) $(INCLUDE_DIRS) $(CFLAGS) $^  -L$(TOP)/$(LIB_DIR) $(LIBS) 
$(VG_LIBS)  $(APP_LIB_DEPS) -o $@
+
+eglcommon.o: eglcommon.c $(HEADERS)
+   $(CC) -c $(INCLUDE_DIRS) $(CFLAGS) eglcommon.c
+
+
 clean:
rm -f *.o *~
rm -f *.so
diff --git a/progs/openvg/demos/gears.c b/progs/openvg/demos/eglcommon.c
similarity index 56%
rename from progs/openvg/demos/gears.c
rename to progs/openvg/demos/eglcommon.c
index 7dcb395..bacd568 100644
--- a/progs/openvg/demos/gears.c
+++ b/progs/openvg/demos/eglcommon.c
@@ -1,3 +1,6 @@
+#include "eglcommon.h"
+
+
 #include 
 #include 
 #include 
@@ -6,157 +9,23 @@
 #include 
 #include 
 #include 
-#include 
+#include   /* using full OpenGL for now */
 #include 
 
-static VGint width, height;
-static VGPath gear1;
-static VGPath gear2;
-static VGPath gear3;
-
-static VGPaint fill;
-const VGfloat color[4] = {0.5, 0.5, 0.5, 1.0};
-
-static VGfloat gear1_angle = 35;
-static VGfloat gear2_angle = 24;
-static VGfloat gear3_angle = 33.5;
-
-static  void moveTo(VGPath path, VGfloat x, VGfloat y)
-{
-   static VGubyte moveTo = VG_MOVE_TO | VG_ABSOLUTE;
-   VGfloat pathData[2];
-   pathData[0] = x; pathData[1] = y;
-   vgAppendPathData(path, 1, &moveTo, pathData);
-}
-
-static  void lineTo(VGPath path, VGfloat x, VGfloat y)
-{
-   static VGubyte lineTo = VG_LINE_TO | VG_ABSOLUTE;
-   VGfloat pathData[2];
-   pathData[0] = x; pathData[1] = y;
-   vgAppendPathData(path, 1, &lineTo, pathData);
-}
-
-static  void closeSubpath(VGPath path)
-{
-   static VGubyte close = VG_CLOSE_PATH | VG_ABSOLUTE;
-   VGfloat pathData[2];
-   vgAppendPathData(path, 1, &close, pathData);
-}
-
-static  void cubicTo(VGPath path, VGfloat x1, VGfloat y1, VGfloat x2, VGfloat 
y2,
- VGfloat midx, VGfloat midy)
-{
-   static VGubyte cubic = VG_CUBIC_TO | VG_ABSOLUTE;
-   VGfloat pathData[6];
-   pathData[0] = x1;
-   pathData[1] = y1;
-   pathData[2] = x2;
-   pathData[3] = y2;
-   pathData[4] = midx;
-   pathData[5] = midy;
-   vgAppendPathData(path, 1, &cubic, pathData);
-}
-
-static VGPath gearsPath(double inner_radius, double outer_radius,
-int teeth, double tooth_depth)
-{
-   VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 
1.0f, 0.0f,
-  0, 0, (unsigned int)VG_PATH_CAPABILITY_ALL);
-
-   int i;
-   double r0, r1, r2;
-   double angle, da;
-
-   r0 = inner_radius;
-   r1 = outer_radius - tooth_depth / 2.0;
-   r2 = outer_radius + tooth_depth / 2.0;
-
-   da = 2.0 * M_PI / (VGfloat) teeth / 4.0;
 
-   angle = 0.0;
-   moveTo(path, r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da));
-
-   for (i = 1; i <= teeth; i++) {
-  angle = i * 2.0 * M_PI / (VGfloat)teeth;
-
-  lineTo(path, r1 * cos(angle), r1 * sin(angle));
-  lineTo(path, r2 * cos(angle + da), r2 * sin(angle + da));
-  lineTo(path, r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da));
-
-  if (i < teeth)
- lineTo(path, r1 * cos(angle + 3 * da),
-r1 * sin(angle + 3 * da));
-   }
+static init_funcinit = 0;
+static draw_funcdraw = 0;
+static reshape_func reshape = 0;
+static key_func keyPress = 0;
+static VGint width = 300, height = 300;
 
-   closeSubpath(path);
 
-   moveTo(path, r0 * cos(angle + 3 * da), r0 * sin(angle + 3 * da));
-
-   for (i = 1; i <= teeth; i++) {
-  angle = i * 2.0 * M_PI / (VGfloat) teeth;
-
-  lineTo(path, r0 * cos(angle), r0 * sin(angle));
-

Mesa (master): util: fix possible null pointer usage

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 4873031e29e0e8f654f78307e6ec885e68a54d86
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4873031e29e0e8f654f78307e6ec885e68a54d86

Author: Zack Rusin 
Date:   Sat Jun 20 21:19:57 2009 -0400

util: fix possible null pointer usage

found by the clang static analyzer

---

 src/gallium/auxiliary/util/u_cache.c|   10 +-
 src/gallium/auxiliary/util/u_handle_table.c |   13 +
 src/gallium/auxiliary/util/u_hash_table.c   |   22 +-
 src/gallium/auxiliary/util/u_keymap.c   |   12 +++-
 4 files changed, 46 insertions(+), 11 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_cache.c 
b/src/gallium/auxiliary/util/u_cache.c
index 41cd381..47c16b1 100644
--- a/src/gallium/auxiliary/util/u_cache.c
+++ b/src/gallium/auxiliary/util/u_cache.c
@@ -137,6 +137,8 @@ util_cache_set(struct util_cache *cache,
struct util_cache_entry *entry;
 
assert(cache);
+   if (!cache)
+  return;
 
entry = util_cache_entry_get(cache, key);
util_cache_entry_destroy(cache, entry);
@@ -158,6 +160,8 @@ util_cache_get(struct util_cache *cache,
struct util_cache_entry *entry;
 
assert(cache);
+   if (!cache)
+  return NULL;
 
entry = util_cache_entry_get(cache, key);
if(!entry->key && !entry->value)
@@ -176,7 +180,9 @@ util_cache_clear(struct util_cache *cache)
uint32_t i;
 
assert(cache);
-   
+   if (!cache)
+  return;
+
for(i = 0; i < cache->size; ++i)
   util_cache_entry_destroy(cache, &cache->entries[i]);
 }
@@ -186,6 +192,8 @@ void
 util_cache_destroy(struct util_cache *cache)
 {
assert(cache);
+   if (!cache)
+  return;
 
 #ifdef DEBUG
if(cache->count >= 20*cache->size) {
diff --git a/src/gallium/auxiliary/util/u_handle_table.c 
b/src/gallium/auxiliary/util/u_handle_table.c
index 6da7353..3703718 100644
--- a/src/gallium/auxiliary/util/u_handle_table.c
+++ b/src/gallium/auxiliary/util/u_handle_table.c
@@ -87,6 +87,8 @@ handle_table_set_destroy(struct handle_table *ht,
  void (*destroy)(void *object))
 {
assert(ht);
+   if (!ht)
+  return;
ht->destroy = destroy;
 }
 
@@ -155,7 +157,7 @@ handle_table_add(struct handle_table *ht,

assert(ht);
assert(object);
-   if(!object)
+   if(!object || !ht)
   return 0;
 
/* linear search for an empty handle */
@@ -193,7 +195,7 @@ handle_table_set(struct handle_table *ht,

assert(ht);
assert(handle);
-   if(!handle)
+   if(!handle || !ht)
   return 0;
 
assert(object);
@@ -222,7 +224,7 @@ handle_table_get(struct handle_table *ht,

assert(ht);
assert(handle);
-   if(!handle || handle > ht->size)
+   if(!handle || !ht || handle > ht->size)
   return NULL;
 
object = ht->objects[handle - 1];
@@ -240,7 +242,7 @@ handle_table_remove(struct handle_table *ht,

assert(ht);
assert(handle);
-   if(!handle || handle > ht->size)
+   if(!handle || !ht || handle > ht->size)
   return;
 
index = handle - 1;
@@ -283,6 +285,9 @@ handle_table_destroy(struct handle_table *ht)
unsigned index;
assert(ht);
 
+   if (!ht)
+  return;
+
if(ht->destroy)
   for(index = 0; index < ht->size; ++index)
  handle_table_clear(ht, index);
diff --git a/src/gallium/auxiliary/util/u_hash_table.c 
b/src/gallium/auxiliary/util/u_hash_table.c
index 2f83e31..8c2a8f4 100644
--- a/src/gallium/auxiliary/util/u_hash_table.c
+++ b/src/gallium/auxiliary/util/u_hash_table.c
@@ -148,6 +148,8 @@ hash_table_set(struct hash_table *ht,
struct cso_hash_iter iter;
 
assert(ht);
+   if (!ht)
+  return PIPE_ERROR_BAD_INPUT;
 
key_hash = ht->hash(key);
 
@@ -183,6 +185,8 @@ hash_table_get(struct hash_table *ht,
struct hash_table_item *item;
 
assert(ht);
+   if (!ht)
+  return NULL;
 
key_hash = ht->hash(key);
 
@@ -203,6 +207,8 @@ hash_table_remove(struct hash_table *ht,
struct hash_table_item *item;
 
assert(ht);
+   if (!ht)
+  return;
 
key_hash = ht->hash(key);
 
@@ -225,7 +231,9 @@ hash_table_clear(struct hash_table *ht)
struct hash_table_item *item;
 
assert(ht);
-   
+   if (!ht)
+  return;
+
iter = cso_hash_first_node(ht->cso);
while (!cso_hash_iter_is_null(iter)) {
   item = (struct hash_table_item *)cso_hash_take(ht->cso, 
cso_hash_iter_key(iter));
@@ -243,9 +251,11 @@ hash_table_foreach(struct hash_table *ht,
struct cso_hash_iter iter;
struct hash_table_item *item;
enum pipe_error result;
-   
+
assert(ht);
-   
+   if (!ht)
+  return PIPE_ERROR_BAD_INPUT;
+
iter = cso_hash_first_node(ht->cso);
while (!cso_hash_iter_is_null(iter)) {
   item = (struct hash_table_item *)cso_hash_iter_data(iter);
@@ -264,9 +274,11 @@ hash_table_destroy(struct hash_table *ht)
 {
struct cso_hash_iter iter;
struct hash_table_item *item;
-   
+
asse

Mesa (master): cso: possible null pointer dereference

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: f311893bf4cd4e20e5b43fa404c4a2f656791943
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f311893bf4cd4e20e5b43fa404c4a2f656791943

Author: Zack Rusin 
Date:   Sat Jun 20 21:25:47 2009 -0400

cso: possible null pointer dereference

reported by clang static analyzer

---

 src/gallium/auxiliary/cso_cache/cso_cache.c |4 
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/cso_cache/cso_cache.c 
b/src/gallium/auxiliary/cso_cache/cso_cache.c
index 0bc77a5..e6dce3f 100644
--- a/src/gallium/auxiliary/cso_cache/cso_cache.c
+++ b/src/gallium/auxiliary/cso_cache/cso_cache.c
@@ -361,6 +361,10 @@ void cso_for_each_state(struct cso_cache *sc, enum 
cso_cache_type type,
 void cso_cache_delete(struct cso_cache *sc)
 {
assert(sc);
+
+   if (!sc)
+  return;
+
/* delete driver data */
cso_for_each_state(sc, CSO_BLEND, delete_blend_state, 0);
cso_for_each_state(sc, CSO_DEPTH_STENCIL_ALPHA, delete_depth_stencil_state, 
0);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): pipebuffer: handle possible null pointer dereference

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 5920b6b67988fc3977f43b39d8546cc20247bf31
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5920b6b67988fc3977f43b39d8546cc20247bf31

Author: Zack Rusin 
Date:   Sat Jun 20 21:36:40 2009 -0400

pipebuffer: handle possible null pointer dereference

reported by clang static analyzer

---

 .../auxiliary/pipebuffer/pb_buffer_malloc.c|2 ++
 .../auxiliary/pipebuffer/pb_bufmgr_ondemand.c  |2 ++
 2 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_malloc.c 
b/src/gallium/auxiliary/pipebuffer/pb_buffer_malloc.c
index 0760d60..6bdce5f 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_buffer_malloc.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_malloc.c
@@ -53,6 +53,8 @@ static INLINE struct malloc_buffer *
 malloc_buffer(struct pb_buffer *buf)
 {
assert(buf);
+   if (!buf)
+  return NULL;
assert(buf->vtbl == &malloc_buffer_vtbl);
return (struct malloc_buffer *)buf;
 }
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_ondemand.c 
b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_ondemand.c
index bc3093f..cb32d25 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_ondemand.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_ondemand.c
@@ -74,6 +74,8 @@ static INLINE struct pb_ondemand_buffer *
 pb_ondemand_buffer(struct pb_buffer *buf)
 {
assert(buf);
+   if (!buf)
+  return NULL;
assert(buf->vtbl == &pb_ondemand_buffer_vtbl);
return (struct pb_ondemand_buffer *)buf;
 }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallium: rearrange some members to avoid memory holes/ padding

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: 124a6b1958c630ea049025e2b72547096fdc8f2c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=124a6b1958c630ea049025e2b72547096fdc8f2c

Author: Zack Rusin 
Date:   Tue Jun 23 19:12:46 2009 -0400

gallium: rearrange some members to avoid memory holes/padding

plus it saves us a cacheline in the cso

---

 src/gallium/auxiliary/cso_cache/cso_context.c |4 ++--
 src/gallium/include/pipe/p_state.h|   12 ++--
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c 
b/src/gallium/auxiliary/cso_cache/cso_context.c
index f388bf5..36c882a 100644
--- a/src/gallium/auxiliary/cso_cache/cso_context.c
+++ b/src/gallium/auxiliary/cso_cache/cso_context.c
@@ -55,14 +55,14 @@ struct cso_context {
void *samplers[PIPE_MAX_SAMPLERS];
unsigned nr_samplers;
 
-   void *samplers_saved[PIPE_MAX_SAMPLERS];
unsigned nr_samplers_saved;
+   void *samplers_saved[PIPE_MAX_SAMPLERS];
 
struct pipe_texture *textures[PIPE_MAX_SAMPLERS];
uint nr_textures;
 
-   struct pipe_texture *textures_saved[PIPE_MAX_SAMPLERS];
uint nr_textures_saved;
+   struct pipe_texture *textures_saved[PIPE_MAX_SAMPLERS];
 
/** Current and saved state.
 * The saved state is used as a 1-deep stack.
diff --git a/src/gallium/include/pipe/p_state.h 
b/src/gallium/include/pipe/p_state.h
index 932c024..626bedb 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -75,11 +75,11 @@ struct pipe_surface;
  */
 struct pipe_buffer
 {
-   struct pipe_reference reference;
-   struct pipe_screen *screen;
-   unsigned alignment;
-   unsigned usage;
-   unsigned size;
+   struct pipe_reference  reference;
+   unsigned   size;
+   struct pipe_screen*screen;
+   unsigned   alignment;
+   unsigned   usage;
 };
 
 
@@ -286,10 +286,10 @@ struct pipe_surface
unsigned offset;  /**< offset from start of buffer, in bytes */
unsigned usage;   /**< PIPE_BUFFER_USAGE_*  */
 
+   unsigned zslice;
struct pipe_texture *texture; /**< texture into which this is a view  */
unsigned face;
unsigned level;
-   unsigned zslice;
 };
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): Merge commit 'origin/openvg-1.0'

2009-07-06 Thread Zack Rusin
Module: Mesa
Branch: master
Commit: edb02671704aeb60e3eeaa7f58c73f4845c5b7e2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=edb02671704aeb60e3eeaa7f58c73f4845c5b7e2

Author: Zack Rusin 
Date:   Mon Jul  6 21:43:26 2009 -0400

Merge commit 'origin/openvg-1.0'

---



___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_5_branch): gallium: fixup register indexes for fog/frontface/ point coord

2009-07-07 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_5_branch
Commit: 7b861b9b9efdb3ac0dfc3806afcd494cd0ea006c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7b861b9b9efdb3ac0dfc3806afcd494cd0ea006c

Author: Zack Rusin 
Date:   Tue Jul  7 12:48:50 2009 -0700

gallium: fixup register indexes for fog/frontface/point coord

---

 src/mesa/state_tracker/st_atom_shader.c |   15 ---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_shader.c 
b/src/mesa/state_tracker/st_atom_shader.c
index 299aa76..5219119 100644
--- a/src/mesa/state_tracker/st_atom_shader.c
+++ b/src/mesa/state_tracker/st_atom_shader.c
@@ -142,9 +142,18 @@ find_translated_vp(struct st_context *st,
 if ((fragInputsRead & FRAG_BIT_FOGC)) {
/* leave placeholders for the
 * extra registers we extract from fog */
-   if (stfp->Base.UsesFrontFacing ||
-   stfp->Base.UsesPointCoord) {
-  numIn += 2;
+   if (stfp->Base.UsesFrontFacing) {
+  if (!stfp->Base.UsesFogFragCoord)
+ --stfp->input_to_slot[inAttr];
+  else
+ ++numIn;
+   }
+   if (stfp->Base.UsesPointCoord) {
+  if (!stfp->Base.UsesFrontFacing &&
+  !stfp->Base.UsesFogFragCoord)
+ stfp->input_to_slot[inAttr] -= 2;
+  else
+ ++numIn;
}
 }
  }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (mesa_7_5_branch): gallium: compare the actual register, not all the inputs

2009-07-11 Thread Zack Rusin
Module: Mesa
Branch: mesa_7_5_branch
Commit: 1c1307e7c55844f63f7bd7ac02c64f4b936f3c66
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c1307e7c55844f63f7bd7ac02c64f4b936f3c66

Author: Zack Rusin 
Date:   Sat Jul 11 13:48:41 2009 -0400

gallium: compare the actual register, not all the inputs

otherwise we decrement indexes for all registers

---

 src/mesa/state_tracker/st_atom_shader.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_shader.c 
b/src/mesa/state_tracker/st_atom_shader.c
index 5219119..8b3bb5c 100644
--- a/src/mesa/state_tracker/st_atom_shader.c
+++ b/src/mesa/state_tracker/st_atom_shader.c
@@ -139,7 +139,7 @@ find_translated_vp(struct st_context *st,
  if (fragInputsRead & (1 << inAttr)) {
 stfp->input_to_slot[inAttr] = numIn;
 numIn++;
-if ((fragInputsRead & FRAG_BIT_FOGC)) {
+if (((1 << inAttr) & FRAG_BIT_FOGC)) {
/* leave placeholders for the
 * extra registers we extract from fog */
if (stfp->Base.UsesFrontFacing) {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: fix getters

2009-07-13 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 67d7ef2f562a694ed011c8ca27eb06a148d1025f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=67d7ef2f562a694ed011c8ca27eb06a148d1025f

Author: Zack Rusin 
Date:   Mon Jul 13 16:55:18 2009 -0400

gs: fix getters

---

 src/mesa/main/get.c   |   68 +++-
 src/mesa/main/get_gen.py  |   16 
 src/mesa/shader/slang/slang_codegen.c |2 +-
 3 files changed, 74 insertions(+), 12 deletions(-)

diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 35c8aeb..caf8cf4 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -1867,6 +1867,30 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
  CHECK_EXT1(ARB_vertex_shader, "GetBooleanv");
  params[0] = INT_TO_BOOLEAN(MAX_COMBINED_TEXTURE_IMAGE_UNITS);
  break;
+  case GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv");
+ params[0] = 
INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryTextureImageUnit);
+ break;
+  case GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv");
+ params[0] = 
INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryOutputVertices);
+ break;
+  case GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv");
+ params[0] = 
INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryTotalOutputComponents);
+ break;
+  case GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv");
+ params[0] = 
INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryUniformComponents);
+ break;
+  case GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv");
+ params[0] = 
INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryVaryingComponents);
+ break;
+  case GL_MAX_VERTEX_VARYING_COMPONENTS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv");
+ params[0] = 
INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxVertexVaryingComponents);
+ break;
   case GL_CURRENT_PROGRAM:
  CHECK_EXT1(ARB_shader_objects, "GetBooleanv");
  params[0] = INT_TO_BOOLEAN(ctx->Shader.CurrentProgram ? 
ctx->Shader.CurrentProgram->Name : 0);
@@ -3689,6 +3713,30 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
  CHECK_EXT1(ARB_vertex_shader, "GetFloatv");
  params[0] = (GLfloat)(MAX_COMBINED_TEXTURE_IMAGE_UNITS);
  break;
+  case GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetFloatv");
+ params[0] = 
(GLfloat)(ctx->Const.GeometryProgram.MaxGeometryTextureImageUnit);
+ break;
+  case GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetFloatv");
+ params[0] = 
(GLfloat)(ctx->Const.GeometryProgram.MaxGeometryOutputVertices);
+ break;
+  case GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetFloatv");
+ params[0] = 
(GLfloat)(ctx->Const.GeometryProgram.MaxGeometryTotalOutputComponents);
+ break;
+  case GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetFloatv");
+ params[0] = 
(GLfloat)(ctx->Const.GeometryProgram.MaxGeometryUniformComponents);
+ break;
+  case GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetFloatv");
+ params[0] = 
(GLfloat)(ctx->Const.GeometryProgram.MaxGeometryVaryingComponents);
+ break;
+  case GL_MAX_VERTEX_VARYING_COMPONENTS_ARB:
+ CHECK_EXT1(ARB_geometry_shader4, "GetFloatv");
+ params[0] = 
(GLfloat)(ctx->Const.GeometryProgram.MaxVertexVaryingComponents);
+ break;
   case GL_CURRENT_PROGRAM:
  CHECK_EXT1(ARB_shader_objects, "GetFloatv");
  params[0] = (GLfloat)(ctx->Shader.CurrentProgram ? 
ctx->Shader.CurrentProgram->Name : 0);
@@ -5511,15 +5559,6 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
  CHECK_EXT1(ARB_vertex_shader, "GetIntegerv");
  params[0] = MAX_COMBINED_TEXTURE_IMAGE_UNITS;
  break;
-  case GL_CURRENT_PROGRAM:
- CHECK_EXT1(ARB_shader_objects, "GetIntegerv");
- params[0] = ctx->Shader.CurrentProgram ? 
ctx->Shader.CurrentProgram->Name : 0;
- break;
-  case GL_MAX_SAMPLES:
- CHECK_EXT1(ARB_framebuffer_object, "GetIntegerv");
- params[0] = ctx->Const.MaxSamples;
- break;
-<<<<<<< HEAD:src/mesa/main/get.c
   case GL_MAX_GEOMETRY_TEXTUR

Mesa (arb_geometry_shader4): gs: use mesa_realloc like the code for fs and vs

2009-07-13 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 856c41deb0d890f92a7f7158d4e27a1c34a1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=856c41deb0d890f92a7f7158d4e27a1c34a1

Author: Zack Rusin 
Date:   Mon Jul 13 17:28:36 2009 -0400

gs: use mesa_realloc like the code for fs and vs

---

 src/mesa/state_tracker/st_program.c |   13 +++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index 6c0d61d..27862cd 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -593,7 +593,7 @@ st_translate_geometry_program(struct st_context *st,
   const GLuint inputMapping[])
 {
struct pipe_context *pipe = st->pipe;
-   struct tgsi_token tokens[ST_MAX_SHADER_TOKENS];
+   struct tgsi_token *tokens;
GLuint *outputMapping;
GLuint defaultInputMapping[GEOM_ATTRIB_MAX];
GLuint defaultOutputMapping[GEOM_RESULT_MAX];
@@ -616,6 +616,13 @@ st_translate_geometry_program(struct st_context *st,
 
GLint i;
 
+   tokens =  (struct tgsi_token *)MALLOC(ST_MAX_SHADER_TOKENS * sizeof 
*tokens);
+   if(!tokens) {
+  /* FIXME: propagate error to the caller */
+  assert(0);
+  return;
+   }
+
memset(&gs, 0, sizeof(gs));
memset(input_flags, 0, sizeof(input_flags));
memset(output_flags, 0, sizeof(output_flags));
@@ -792,7 +799,9 @@ st_translate_geometry_program(struct st_context *st,
assert(num_tokens < ST_MAX_SHADER_TOKENS);
 
gs.shader.tokens = (struct tgsi_token *)
-  mem_dup(tokens, num_tokens * sizeof(tokens[0]));
+  _mesa_realloc(tokens,
+ST_MAX_SHADER_TOKENS * sizeof *tokens,
+num_tokens * sizeof *tokens);
gs.vertices_out = stgp->Base.VerticesOut;
gs.input_type = stgp->Base.InputType;
gs.output_type = stgp->Base.OutputType;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: initialize the machine

2009-07-13 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 92b8a37bbe827c8191af385c84cd876c68da4074
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=92b8a37bbe827c8191af385c84cd876c68da4074

Author: Zack Rusin 
Date:   Tue Jul 14 00:02:46 2009 -0400

gs: initialize the machine

---

 src/gallium/auxiliary/draw/draw_context.c |3 +++
 src/gallium/auxiliary/draw/draw_gs.c  |   20 
 src/gallium/auxiliary/draw/draw_private.h |5 +
 3 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_context.c 
b/src/gallium/auxiliary/draw/draw_context.c
index a4f1fcd..d891b92 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -67,6 +67,9 @@ struct draw_context *draw_create( void )
if (!draw_vs_init( draw ))
   goto fail;
 
+   if (!draw_gs_init( draw ))
+  goto fail;
+
return draw;
 
 fail:
diff --git a/src/gallium/auxiliary/draw/draw_gs.c 
b/src/gallium/auxiliary/draw/draw_gs.c
index 3911766..a51cae9 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -36,6 +36,26 @@
 #include "util/u_math.h"
 #include "util/u_memory.h"
 
+#define MAX_PRIM_VERTICES 6
+
+boolean
+draw_gs_init( struct draw_context *draw )
+{
+   tgsi_exec_machine_init(&draw->gs.machine);
+
+   draw->gs.machine.Inputs = align_malloc(MAX_PRIM_VERTICES *
+  PIPE_MAX_ATTRIBS * sizeof(struct 
tgsi_exec_vector), 16);
+   if (!draw->gs.machine.Inputs)
+  return FALSE;
+
+   draw->gs.machine.Outputs = align_malloc(MAX_PRIM_VERTICES *
+   PIPE_MAX_ATTRIBS * sizeof(struct 
tgsi_exec_vector), 16);
+   if (!draw->gs.machine.Outputs)
+  return FALSE;
+
+   return TRUE;
+}
+
 
 struct draw_geometry_shader *
 draw_create_geometry_shader(struct draw_context *draw,
diff --git a/src/gallium/auxiliary/draw/draw_private.h 
b/src/gallium/auxiliary/draw/draw_private.h
index 44050bd..260e191 100644
--- a/src/gallium/auxiliary/draw/draw_private.h
+++ b/src/gallium/auxiliary/draw/draw_private.h
@@ -262,6 +262,11 @@ void draw_vs_set_constants( struct draw_context *,
 
 
 
+/***
+ * Geometry shading (was passthrough) code:
+ */
+boolean draw_gs_init( struct draw_context *draw );
+
 
 
/***
  * Vertex processing (was passthrough) code:

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: allocate primitives

2009-07-13 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: be2e807f8113c8b491d84755847c86fc9c8a51c3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=be2e807f8113c8b491d84755847c86fc9c8a51c3

Author: Zack Rusin 
Date:   Tue Jul 14 00:26:59 2009 -0400

gs: allocate primitives

---

 src/gallium/auxiliary/draw/draw_gs.c |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_gs.c 
b/src/gallium/auxiliary/draw/draw_gs.c
index a51cae9..7ee5978 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -37,6 +37,8 @@
 #include "util/u_memory.h"
 
 #define MAX_PRIM_VERTICES 6
+/* fixme: move it from here */
+#define MAX_PRIMITIVES 128
 
 boolean
 draw_gs_init( struct draw_context *draw )
@@ -53,6 +55,10 @@ draw_gs_init( struct draw_context *draw )
if (!draw->gs.machine.Outputs)
   return FALSE;
 
+   draw->gs.machine.Primitives = align_malloc(MAX_PRIMITIVES * sizeof(struct 
tgsi_exec_vector), 16);
+   if (!draw->gs.machine.Primitives)
+  return FALSE;
+
return TRUE;
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: semi work (at least don't crash)

2009-07-14 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: 718b7ae756d2084036d563ad216df7236de4d01d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=718b7ae756d2084036d563ad216df7236de4d01d

Author: Zack Rusin 
Date:   Tue Jul 14 11:45:51 2009 -0400

gs: semi work (at least don't crash)

the primitive assembly is busted though

---

 src/gallium/auxiliary/draw/draw_gs.c |   13 ++---
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_gs.c 
b/src/gallium/auxiliary/draw/draw_gs.c
index 7ee5978..9132ded 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -151,20 +151,19 @@ void draw_geometry_shader_run(struct draw_geometry_shader 
*shader,
struct tgsi_exec_machine *machine = shader->machine;
unsigned int i, j, k;
unsigned slot;
-   int num_vertices = num_vertices_for_prim(shader->state.input_type);
+   unsigned num_vertices = num_vertices_for_prim(shader->state.input_type);
+   unsigned num_primitives = count/num_vertices;
 
machine->Consts = constants;
 
-   for (i = 0; i < count; i += MAX_TGSI_PRIMITIVES) {
-  unsigned int max_primitives = MIN2(MAX_TGSI_PRIMITIVES, count - i);
+   for (i = 0; i < num_primitives; i += MAX_TGSI_PRIMITIVES) {
+  unsigned int max_primitives = MIN2(MAX_TGSI_PRIMITIVES, num_primitives - 
i);
 
-  /* Swizzle inputs.
-   */
   for (k = 0; k < max_primitives; ++k) {
  for (j = 0; j < num_vertices; j++) {
 int idx = (k * num_vertices + j) * shader->info.num_inputs;
-#if 0
-debug_printf("%d) Input vert:\n", i + j);
+#if 1
+debug_printf("%d) Prim, %d) Input vert:\n", i, idx);
 for (slot = 0; slot < shader->info.num_inputs; slot++) {
debug_printf("\t%d: %f %f %f %f\n", slot,
 input[idx + slot][0],

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (arb_geometry_shader4): gs: add geometry shader semantics

2009-07-15 Thread Zack Rusin
Module: Mesa
Branch: arb_geometry_shader4
Commit: a6dead44a1a880ad0deaf861fbec7f7389e9ed64
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6dead44a1a880ad0deaf861fbec7f7389e9ed64

Author: Zack Rusin 
Date:   Wed Jul 15 23:33:43 2009 -0400

gs: add geometry shader semantics

---

 src/gallium/auxiliary/draw/draw_gs.c   |2 +-
 src/gallium/auxiliary/tgsi/tgsi_dump.c |4 +++-
 src/gallium/include/pipe/p_shader_tokens.h |   20 +++-
 src/mesa/state_tracker/st_program.c|   12 +++-
 4 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_gs.c 
b/src/gallium/auxiliary/draw/draw_gs.c
index 9132ded..bdef375 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -161,7 +161,7 @@ void draw_geometry_shader_run(struct draw_geometry_shader 
*shader,
 
   for (k = 0; k < max_primitives; ++k) {
  for (j = 0; j < num_vertices; j++) {
-int idx = (k * num_vertices + j) * shader->info.num_inputs;
+int idx = ((i + k) * num_vertices + j) * shader->info.num_inputs;
 #if 1
 debug_printf("%d) Prim, %d) Input vert:\n", i, idx);
 for (slot = 0; slot < shader->info.num_inputs; slot++) {
diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c 
b/src/gallium/auxiliary/tgsi/tgsi_dump.c
index a6994ec..76201de 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
@@ -110,7 +110,9 @@ static const char *semantic_names[] =
"PSIZE",
"GENERIC",
"NORMAL",
-   "FACE"
+   "FACE",
+   "VERTICES_IN",
+   "PRIM_ID"
 };
 
 static const char *immediate_type_names[] =
diff --git a/src/gallium/include/pipe/p_shader_tokens.h 
b/src/gallium/include/pipe/p_shader_tokens.h
index b00cfe3..c374c5b 100644
--- a/src/gallium/include/pipe/p_shader_tokens.h
+++ b/src/gallium/include/pipe/p_shader_tokens.h
@@ -124,15 +124,17 @@ struct tgsi_declaration_range
unsigned Last: 16; /**< UINT */
 };
 
-#define TGSI_SEMANTIC_POSITION 0
-#define TGSI_SEMANTIC_COLOR1
-#define TGSI_SEMANTIC_BCOLOR   2 /**< back-face color */
-#define TGSI_SEMANTIC_FOG  3
-#define TGSI_SEMANTIC_PSIZE4
-#define TGSI_SEMANTIC_GENERIC  5
-#define TGSI_SEMANTIC_NORMAL   6
-#define TGSI_SEMANTIC_FACE 7
-#define TGSI_SEMANTIC_COUNT8 /**< number of semantic values */
+#define TGSI_SEMANTIC_POSITION  0
+#define TGSI_SEMANTIC_COLOR 1
+#define TGSI_SEMANTIC_BCOLOR2 /**< back-face color */
+#define TGSI_SEMANTIC_FOG   3
+#define TGSI_SEMANTIC_PSIZE 4
+#define TGSI_SEMANTIC_GENERIC   5
+#define TGSI_SEMANTIC_NORMAL6
+#define TGSI_SEMANTIC_FACE  7
+#define TGSI_SEMANTIC_VERTICES  8
+#define TGSI_SEMANTIC_PRIMID9
+#define TGSI_SEMANTIC_COUNT10 /**< number of semantic values */
 
 struct tgsi_declaration_semantic
 {
diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index 27862cd..720e257 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -647,6 +647,16 @@ st_translate_geometry_program(struct st_context *st,
  gs_num_inputs++;
 
  switch (attr) {
+ case GEOM_ATTRIB_VERTICES:
+stgp->input_semantic_name[slot] = TGSI_SEMANTIC_VERTICES;
+stgp->input_semantic_index[slot] = 0;
+interpMode[slot] = TGSI_INTERPOLATE_CONSTANT;
+break;
+ case GEOM_ATTRIB_PRIMITIVE_ID:
+stgp->input_semantic_name[slot] = TGSI_SEMANTIC_PRIMID;
+stgp->input_semantic_index[slot] = 0;
+interpMode[slot] = TGSI_INTERPOLATE_CONSTANT;
+break;
  case GEOM_ATTRIB_POSITION:
 stgp->input_semantic_name[slot] = TGSI_SEMANTIC_POSITION;
 stgp->input_semantic_index[slot] = 0;
@@ -672,7 +682,7 @@ st_translate_geometry_program(struct st_context *st,
 stgp->input_semantic_index[slot] = num_generic++;
 interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
 break;
- case FRAG_ATTRIB_VAR0:
+ case GEOM_ATTRIB_VAR0:
 /* fall-through */
  default:
 stgp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit


  1   2   3   4   5   6   7   >