Mesa (master): st/egl: Fix win32 build.

2010-08-18 Thread Chia-I Wu
Module: Mesa
Branch: master
Commit: ce29e864588b0fdf36607864df45a3c237781e78
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ce29e864588b0fdf36607864df45a3c237781e78

Author: Chia-I Wu 
Date:   Thu Aug 19 13:45:29 2010 +0800

st/egl: Fix win32 build.

Add new source files to SConscripts.

---

 src/egl/main/SConscript   |1 +
 src/gallium/state_trackers/egl/SConscript |1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/egl/main/SConscript b/src/egl/main/SConscript
index 3d7ae3a..c7ba45c 100644
--- a/src/egl/main/SConscript
+++ b/src/egl/main/SConscript
@@ -36,6 +36,7 @@ if env['platform'] != 'winddk':
'eglscreen.c',
'eglstring.c',
'eglsurface.c',
+   'eglsync.c',
]
 
egl = env.SharedLibrary(
diff --git a/src/gallium/state_trackers/egl/SConscript 
b/src/gallium/state_trackers/egl/SConscript
index e71aec3..efcce25 100644
--- a/src/gallium/state_trackers/egl/SConscript
+++ b/src/gallium/state_trackers/egl/SConscript
@@ -21,6 +21,7 @@ if 'egl' in env['statetrackers']:
 'common/egl_g3d_api.c',
 'common/egl_g3d_image.c',
 'common/egl_g3d_st.c',
+'common/egl_g3d_sync.c',
 'common/native_helper.c',
 ]
 

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


Mesa (master): r600g: add sin/cos

2010-08-18 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 88f5976484842671ecb2cefcfa91838a43032359
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=88f5976484842671ecb2cefcfa91838a43032359

Author: Dave Airlie 
Date:   Thu Aug 19 14:43:44 2010 +1000

r600g: add sin/cos

This pretty much ports the code from r600c, however it doesn't
always seem to work quite perfectly, but I can't find anything in this
code that is wrong. I'm guessing either literal input or constants
aren't working always.

---

 src/gallium/drivers/r600/r600_shader.c |  124 +++-
 src/gallium/drivers/r600/r600_sq.h |1 +
 2 files changed, 123 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 3caeaa3..4d390f9 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -674,6 +674,126 @@ static int tgsi_op2(struct r600_shader_ctx *ctx)
return 0;
 }
 
+/* 
+ * r600 - trunc to -PI..PI range
+ * r700 - normalize by dividing by 2PI
+ * see fdo bug 27901
+ */
+static int tgsi_trig(struct r600_shader_ctx *ctx)
+{
+   struct tgsi_full_instruction *inst = 
&ctx->parse.FullToken.FullInstruction;
+   struct r600_bc_alu_src r600_src[3];
+   struct r600_bc_alu alu;
+   int i, r;
+   uint32_t lit_vals[4];
+
+   memset(lit_vals, 0, 4*4);
+   r = tgsi_split_constant(ctx, r600_src);
+   if (r)
+   return r;
+   lit_vals[0] = fui(1.0 /(3.1415926535 * 2));
+   lit_vals[1] = fui(0.5f);
+
+   memset(&alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_MULADD;
+   alu.is_op3 = 1;
+
+   alu.dst.chan = 0;
+   alu.dst.sel = ctx->temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0] = r600_src[0];
+   alu.src[0].chan = tgsi_chan(&inst->Src[0], 0);
+   
+   alu.src[1].sel = SQ_ALU_SRC_LITERAL;
+   alu.src[1].chan = 0;
+   alu.src[2].sel = SQ_ALU_SRC_LITERAL;
+   alu.src[2].chan = 1;
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx->bc, &alu);
+   if (r)
+   return r;
+   r = r600_bc_add_literal(ctx->bc, lit_vals);
+   if (r)
+   return r;
+
+   memset(&alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FRACT;
+   
+   alu.dst.chan = 0;
+   alu.dst.sel = ctx->temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0].sel = ctx->temp_reg;
+   alu.src[0].chan = 0;
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx->bc, &alu);
+   if (r)
+   return r;
+
+   if (ctx->bc->chiprev == 0) {
+   lit_vals[0] = fui(3.1415926535897f * 2.0f);
+   lit_vals[1] = fui(-3.1415926535897f);
+   } else {
+   lit_vals[0] = fui(1.0f);
+   lit_vals[1] = fui(-0.5f);
+   }
+
+   memset(&alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_MULADD;
+   alu.is_op3 = 1;
+
+   alu.dst.chan = 0;
+   alu.dst.sel = ctx->temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0].sel = ctx->temp_reg;
+   alu.src[0].chan = 0;
+   
+   alu.src[1].sel = SQ_ALU_SRC_LITERAL;
+   alu.src[1].chan = 0;
+   alu.src[2].sel = SQ_ALU_SRC_LITERAL;
+   alu.src[2].chan = 1;
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx->bc, &alu);
+   if (r)
+   return r;
+   r = r600_bc_add_literal(ctx->bc, lit_vals);
+   if (r)
+   return r;
+
+   memset(&alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = ctx->inst_info->r600_opcode;
+   alu.dst.chan = 0;
+   alu.dst.sel = ctx->temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0].sel = ctx->temp_reg;
+   alu.src[0].chan = 0;
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx->bc, &alu);
+   if (r)
+   return r;
+
+   /* replicate result */
+   for (i = 0; i < 4; i++) {
+   memset(&alu, 0, sizeof(struct r600_bc_alu));
+   alu.src[0].sel = ctx->temp_reg;
+   alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV;
+   alu.dst.chan = i;
+   r = tgsi_dst(ctx, &inst->Dst[0], i, &alu.dst);
+   if (r)
+   return r;
+   alu.dst.write = (inst->Dst[0].Register.WriteMask >> i) & 1;
+   if (i == 3)
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx->bc, &alu);
+   if (r)
+   return r;
+   }
+   return 0;
+}
+
 static int tgsi_kill(struct r600_shader_ctx *ctx)
 {
struct tgsi_full_instruction *inst = 
&ctx->parse.FullToken.FullInstruction;
@@ -1300,7 +1420,7 @@ static struct r600_shader_tgsi_instruction 
r600_shader_tgsi_instruction[] = {
{TGSI_OPCODE_ABS,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV, 
tgsi_op2},
{TGSI_OPCODE_RCC,   0, V_SQ_ALU_WORD1_OP2_SQ_OP2_

Mesa (master): r600g: add SSG, SEQ, SGT and SNE

2010-08-18 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 0d48925a56ad4fb253386110b545abda82a25464
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0d48925a56ad4fb253386110b545abda82a25464

Author: Dave Airlie 
Date:   Thu Aug 19 11:41:18 2010 +1000

r600g: add SSG, SEQ, SGT and SNE

---

 src/gallium/drivers/r600/r600_shader.c |   84 +++-
 src/gallium/drivers/r600/r600_sq.h |   16 ++
 2 files changed, 88 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 828082d..3caeaa3 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -684,7 +684,7 @@ static int tgsi_kill(struct r600_shader_ctx *ctx)
memset(&alu, 0, sizeof(struct r600_bc_alu));
alu.inst = ctx->inst_info->r600_opcode;
alu.dst.chan = i;
-   alu.src[0].sel = 248;
+   alu.src[0].sel = SQ_ALU_SRC_0;
r = tgsi_src(ctx, &inst->Src[0], &alu.src[1]);
if (r)
return r;
@@ -743,7 +743,7 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
/* dst.x, <- 1.0  */
memset(&alu, 0, sizeof(struct r600_bc_alu));
alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV;
-   alu.src[0].sel  = 249; /*1.0*/
+   alu.src[0].sel  = SQ_ALU_SRC_1; /*1.0*/
alu.src[0].chan = 0;
r = tgsi_dst(ctx, &inst->Dst[0], 0, &alu.dst);
if (r)
@@ -759,7 +759,7 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
r = tgsi_src(ctx, &inst->Src[0], &alu.src[0]);
if (r)
return r;
-   alu.src[1].sel  = 248; /*0.0*/
+   alu.src[1].sel  = SQ_ALU_SRC_0; /*0.0*/
alu.src[1].chan = tgsi_chan(&inst->Src[0], 0);
r = tgsi_dst(ctx, &inst->Dst[0], 1, &alu.dst);
if (r)
@@ -780,7 +780,7 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
/* dst.w, <- 1.0  */
memset(&alu, 0, sizeof(struct r600_bc_alu));
alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV;
-   alu.src[0].sel  = 249;
+   alu.src[0].sel  = SQ_ALU_SRC_1;
alu.src[0].chan = 0;
r = tgsi_dst(ctx, &inst->Dst[0], 3, &alu.dst);
if (r)
@@ -919,6 +919,66 @@ static int tgsi_trans_srcx_replicate(struct 
r600_shader_ctx *ctx)
return 0;
 }
 
+static int tgsi_ssg(struct r600_shader_ctx *ctx)
+{
+   struct tgsi_full_instruction *inst = 
&ctx->parse.FullToken.FullInstruction;
+   struct r600_bc_alu alu;
+   struct r600_bc_alu_src r600_src[3];
+   int i, j, r;
+
+   r = tgsi_split_constant(ctx, r600_src);
+   if (r)
+   return r;
+
+   /* tmp = (src > 0 ? 1 : src) */
+   for (i = 0; i < 4; i++) {
+   memset(&alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_CNDGT;
+   alu.is_op3 = 1;
+   alu.dst.sel = ctx->temp_reg;
+   alu.dst.write = 1;
+
+   alu.src[0] = r600_src[0];
+   alu.src[0].chan = tgsi_chan(&inst->Src[0], i);
+
+   alu.src[1].sel = SQ_ALU_SRC_1;
+
+   alu.src[2] = r600_src[0];
+   alu.src[2].chan = tgsi_chan(&inst->Src[0], i);
+   if (i == 3)
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx->bc, &alu);
+   if (r)
+   return r;
+   }
+
+   /* dst = (-tmp > 0 ? -1 : tmp) */
+   for (i = 0; i < 4; i++) {
+   memset(&alu, 0, sizeof(struct r600_bc_alu));
+   alu.inst = V_SQ_ALU_WORD1_OP3_SQ_OP3_INST_CNDGT;
+   alu.is_op3 = 1;
+   r = tgsi_dst(ctx, &inst->Dst[0], i, &alu.dst);
+   if (r)
+   return r;
+
+   alu.src[0].sel = ctx->temp_reg;
+   alu.src[0].neg = 1;
+
+   alu.src[1].sel = SQ_ALU_SRC_1;
+   alu.src[1].neg = 1;
+
+   alu.src[2].sel = ctx->temp_reg;
+
+   alu.dst.write = 1;
+   if (i == 3)
+   alu.last = 1;
+   r = r600_bc_add_alu(ctx->bc, &alu);
+   if (r)
+   return r;
+   }
+   return 0;
+}
+
 static int tgsi_helper_copy(struct r600_shader_ctx *ctx, struct 
tgsi_full_instruction *inst)
 {
struct r600_bc_alu alu;
@@ -1006,13 +1066,13 @@ static int tgsi_dp(struct r600_shader_ctx *ctx)
switch (ctx->inst_info->tgsi_opcode) {
case TGSI_OPCODE_DP2:
if (i > 1) {
-   alu.src[0].sel = alu.src[1].sel = 248;
+   alu.src[0].sel = alu.src[1].sel = SQ_ALU_SRC_0;
alu.src[0].chan = alu.src[1].chan = 0;
}
break;
case TGSI_OPCODE_DP3:
if (i > 2) {
-   alu.src[0].

Mesa (master): r600g: add a chiprev type for r600/r700/ evergreen instead of using family

2010-08-18 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 098064e8cb6950f60c51a44e280cb335f07920b1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=098064e8cb6950f60c51a44e280cb335f07920b1

Author: Dave Airlie 
Date:   Thu Aug 19 14:43:11 2010 +1000

r600g: add a chiprev type for r600/r700/evergreen instead of using family

---

 src/gallium/drivers/r600/r600_asm.c |   37 ++
 src/gallium/drivers/r600/r600_asm.h |1 +
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_asm.c 
b/src/gallium/drivers/r600/r600_asm.c
index 9ea9d43..e6efae4 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -76,6 +76,27 @@ int r600_bc_init(struct r600_bc *bc, enum radeon_family 
family)
 {
LIST_INITHEAD(&bc->cf);
bc->family = family;
+   switch (bc->family) {
+   case CHIP_R600:
+   case CHIP_RV610:
+   case CHIP_RV630:
+   case CHIP_RV670:
+   case CHIP_RV620:
+   case CHIP_RV635:
+   case CHIP_RS780:
+   case CHIP_RS880:
+   bc->chiprev = 0;
+   break;
+   case CHIP_RV770:
+   case CHIP_RV730:
+   case CHIP_RV710:
+   case CHIP_RV740:
+   bc->chiprev = 1;
+   break;
+   default:
+   R600_ERR("unknown family %d\n", bc->family);
+   return -EINVAL;
+   }
return 0;
 }
 
@@ -418,21 +439,11 @@ int r600_bc_build(struct r600_bc *bc)
switch (cf->inst) {
case (V_SQ_CF_ALU_WORD1_SQ_CF_INST_ALU << 3):
LIST_FOR_EACH_ENTRY(alu, &cf->alu, list) {
-   switch (bc->family) {
-   case CHIP_R600:
-   case CHIP_RV610:
-   case CHIP_RV630:
-   case CHIP_RV670:
-   case CHIP_RV620:
-   case CHIP_RV635:
-   case CHIP_RS780:
-   case CHIP_RS880:
+   switch(bc->chiprev) {
+   case 0:
r = r600_bc_alu_build(bc, alu, addr);
break;
-   case CHIP_RV770:
-   case CHIP_RV730:
-   case CHIP_RV710:
-   case CHIP_RV740:
+   case 1:
r = r700_bc_alu_build(bc, alu, addr);
break;
default:
diff --git a/src/gallium/drivers/r600/r600_asm.h 
b/src/gallium/drivers/r600/r600_asm.h
index 10d98af..e944bd0 100644
--- a/src/gallium/drivers/r600/r600_asm.h
+++ b/src/gallium/drivers/r600/r600_asm.h
@@ -122,6 +122,7 @@ struct r600_bc_cf {
 
 struct r600_bc {
enum radeon_family  family;
+   int chiprev; /* 0 - r600, 1 - r700, 2 - evergreen */
struct list_headcf;
struct r600_bc_cf   *cf_last;
unsignedndw;

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


Mesa (master): i965: Set the if stack pop count when breaking out of a loop inside an if.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 8de8c97275e9555183a7e8f2238143657bbe60b2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8de8c97275e9555183a7e8f2238143657bbe60b2

Author: Eric Anholt 
Date:   Wed Aug 18 21:21:05 2010 -0700

i965: Set the if stack pop count when breaking out of a loop inside an if.

Otherwise, we might end up with the if stack pointing at the wrong
place.  Fixes GPU hang with glsl-vs-if-loop.

---

 src/mesa/drivers/dri/i965/brw_vs_emit.c |   16 +++-
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c 
b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 7cbf22f..18eb845 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -1562,6 +1562,7 @@ void brw_vs_emit(struct brw_vs_compile *c )
const GLuint nr_insns = c->vp->program.Base.NumInstructions;
GLuint insn, if_depth = 0, loop_depth = 0;
struct brw_instruction *if_inst[MAX_IF_DEPTH], *loop_inst[MAX_LOOP_DEPTH] = 
{ 0 };
+   int if_depth_in_loop[MAX_LOOP_DEPTH];
const struct brw_indirect stack_index = brw_indirect(0, 0);   
GLuint index;
GLuint file;
@@ -1575,6 +1576,7 @@ void brw_vs_emit(struct brw_vs_compile *c )
 
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
brw_set_access_mode(p, BRW_ALIGN_16);
+   if_depth_in_loop[loop_depth] = 0;
 
for (insn = 0; insn < nr_insns; insn++) {
GLuint i;
@@ -1613,7 +1615,8 @@ void brw_vs_emit(struct brw_vs_compile *c )
   const struct prog_instruction *inst = 
&c->vp->program.Base.Instructions[insn];
   struct brw_reg args[3], dst;
   GLuint i;
-  
+  struct brw_instruction *temp;
+
 #if 0
   printf("%d: ", insn);
   _mesa_print_instruction(inst);
@@ -1781,6 +1784,7 @@ void brw_vs_emit(struct brw_vs_compile *c )
 if_inst[if_depth] = brw_IF(p, BRW_EXECUTE_8);
 /* Note that brw_IF smashes the predicate_control field. */
 if_inst[if_depth]->header.predicate_control = get_predicate(inst);
+if_depth_in_loop[loop_depth]++;
 if_depth++;
 break;
   case OPCODE_ELSE:
@@ -1790,18 +1794,22 @@ void brw_vs_emit(struct brw_vs_compile *c )
   case OPCODE_ENDIF:
  assert(if_depth > 0);
 brw_ENDIF(p, if_inst[--if_depth]);
+if_depth_in_loop[loop_depth]--;
 break; 
   case OPCODE_BGNLOOP:
  loop_inst[loop_depth++] = brw_DO(p, BRW_EXECUTE_8);
+if_depth_in_loop[loop_depth] = 0;
  break;
   case OPCODE_BRK:
 brw_set_predicate_control(p, get_predicate(inst));
- brw_BREAK(p);
+temp = brw_BREAK(p);
+temp->bits3.if_else.pop_count = if_depth_in_loop[loop_depth];
 brw_set_predicate_control(p, BRW_PREDICATE_NONE);
  break;
   case OPCODE_CONT:
 brw_set_predicate_control(p, get_predicate(inst));
- brw_CONT(p);
+temp = brw_CONT(p);
+temp->bits3.if_else.pop_count = if_depth_in_loop[loop_depth];
  brw_set_predicate_control(p, BRW_PREDICATE_NONE);
  break;
   case OPCODE_ENDLOOP: 
@@ -1821,12 +1829,10 @@ void brw_vs_emit(struct brw_vs_compile *c )
if (inst0->header.opcode == BRW_OPCODE_BREAK &&
   inst0->bits3.if_else.jump_count == 0) {
   inst0->bits3.if_else.jump_count = br * (inst1 - inst0 + 1);
-  inst0->bits3.if_else.pop_count = 0;
}
else if (inst0->header.opcode == BRW_OPCODE_CONTINUE &&
inst0->bits3.if_else.jump_count == 0) {
   inst0->bits3.if_else.jump_count = br * (inst1 - inst0);
-  inst0->bits3.if_else.pop_count = 0;
}
 }
  }

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


Mesa (master): i965: Don't set the swizzle on an immediate value in the VS.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: bad29dc6dad7ed1bff46c67e61dab01f8d82b557
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bad29dc6dad7ed1bff46c67e61dab01f8d82b557

Author: Eric Anholt 
Date:   Wed Aug 18 21:18:23 2010 -0700

i965: Don't set the swizzle on an immediate value in the VS.

Fixes glsl-vs-if-nested (70.0 is not <= 70.000648 thanks to the
swizzle bits getting set).  Some safety checks are added to make sure
this doesn't happen again as we increase the usage of immediate values
in program generation.

---

 src/mesa/drivers/dri/i965/brw_eu.h  |4 
 src/mesa/drivers/dri/i965/brw_vs_emit.c |   11 +++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_eu.h 
b/src/mesa/drivers/dri/i965/brw_eu.h
index ff0..d15a8f9 100644
--- a/src/mesa/drivers/dri/i965/brw_eu.h
+++ b/src/mesa/drivers/dri/i965/brw_eu.h
@@ -633,6 +633,8 @@ static INLINE struct brw_reg brw_swizzle( struct brw_reg 
reg,
GLuint z,
GLuint w)
 {
+   assert(reg.file != BRW_IMMEDIATE_VALUE);
+
reg.dw1.bits.swizzle = BRW_SWIZZLE4(BRW_GET_SWZ(reg.dw1.bits.swizzle, x),
   BRW_GET_SWZ(reg.dw1.bits.swizzle, y),
   BRW_GET_SWZ(reg.dw1.bits.swizzle, z),
@@ -650,6 +652,7 @@ static INLINE struct brw_reg brw_swizzle1( struct brw_reg 
reg,
 static INLINE struct brw_reg brw_writemask( struct brw_reg reg,
  GLuint mask )
 {
+   assert(reg.file != BRW_IMMEDIATE_VALUE);
reg.dw1.bits.writemask &= mask;
return reg;
 }
@@ -657,6 +660,7 @@ static INLINE struct brw_reg brw_writemask( struct brw_reg 
reg,
 static INLINE struct brw_reg brw_set_writemask( struct brw_reg reg,
  GLuint mask )
 {
+   assert(reg.file != BRW_IMMEDIATE_VALUE);
reg.dw1.bits.writemask = mask;
return reg;
 }
diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c 
b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 7b946eb..7cbf22f 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -1180,10 +1180,12 @@ static struct brw_reg get_arg( struct brw_vs_compile *c,
 
/* Convert 3-bit swizzle to 2-bit.  
 */
-   reg.dw1.bits.swizzle = BRW_SWIZZLE4(GET_SWZ(src->Swizzle, 0),
-  GET_SWZ(src->Swizzle, 1),
-  GET_SWZ(src->Swizzle, 2),
-  GET_SWZ(src->Swizzle, 3));
+   if (reg.file != BRW_IMMEDIATE_VALUE) {
+  reg.dw1.bits.swizzle = BRW_SWIZZLE4(GET_SWZ(src->Swizzle, 0),
+ GET_SWZ(src->Swizzle, 1),
+ GET_SWZ(src->Swizzle, 2),
+ GET_SWZ(src->Swizzle, 3));
+   }
 
/* Note this is ok for non-swizzle instructions: 
 */
@@ -1229,6 +1231,7 @@ static struct brw_reg get_dst( struct brw_vs_compile *c,
   reg = brw_null_reg();
}
 
+   assert(reg.type != BRW_IMMEDIATE_VALUE);
reg.dw1.bits.writemask = dst.WriteMask;
 
return reg;

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


Mesa (master): mesa: Fix the whining for link failures to actually be under MESA_GLSL=dump.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: af2ef53a2701426d32382e861d8f238a449e9cd9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=af2ef53a2701426d32382e861d8f238a449e9cd9

Author: Eric Anholt 
Date:   Wed Aug 18 18:01:55 2010 -0700

mesa: Fix the whining for link failures to actually be under MESA_GLSL=dump.

---

 src/mesa/program/ir_to_mesa.cpp |5 +
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 7b0c28e..fafc620 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2750,6 +2750,11 @@ _mesa_glsl_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
if (prog->LinkStatus) {
   if (!ctx->Driver.LinkShader(ctx, prog)) {
 prog->LinkStatus = GL_FALSE;
+  }
+   }
+
+   if (ctx->Shader.Flags & GLSL_DUMP) {
+  if (!prog->LinkStatus) {
 printf("GLSL shader program %d failed to link\n", prog->Name);
   }
 

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


Mesa (master): glsl: Replace sscanf in s_expression reader with strspn and strcspn.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 365ce61997a28a0c0dad79e7d3f7616e57f105f5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=365ce61997a28a0c0dad79e7d3f7616e57f105f5

Author: Kenneth Graunke 
Date:   Wed Aug 18 18:03:22 2010 -0700

glsl: Replace sscanf in s_expression reader with strspn and strcspn.

This seems to give roughly a 20% speedup.

---

 src/glsl/s_expression.cpp |   49 ++--
 src/glsl/s_expression.h   |2 +-
 2 files changed, 30 insertions(+), 21 deletions(-)

diff --git a/src/glsl/s_expression.cpp b/src/glsl/s_expression.cpp
index 26be23e..4458c48 100644
--- a/src/glsl/s_expression.cpp
+++ b/src/glsl/s_expression.cpp
@@ -28,9 +28,9 @@
 #include 
 #include "s_expression.h"
 
-s_symbol::s_symbol(const char *tmp)
+s_symbol::s_symbol(const char *tmp, size_t n)
 {
-   this->str = talloc_strdup (this, tmp);
+   this->str = talloc_strndup (this, tmp, n);
assert(this->str != NULL);
 }
 
@@ -51,26 +51,34 @@ s_list::length() const
 static s_expression *
 read_atom(void *ctx, const char *& src)
 {
-   char buf[101];
-   int n;
-   if (sscanf(src, " %100[^( \v\t\r\n)]%n", buf, &n) != 1)
+   s_expression *expr = NULL;
+
+   // Skip leading spaces.
+   src += strspn(src, " \v\t\r\n");
+
+   size_t n = strcspn(src, "( \v\t\r\n)");
+   if (n == 0)
   return NULL; // no atom
-   src += n;
 
// Check if the atom is a number.
char *float_end = NULL;
-   double f = strtod(buf, &float_end);
-   if (float_end != buf) {
+   double f = strtod(src, &float_end);
+   if (float_end != src) {
   char *int_end = NULL;
-  int i = strtol(buf, &int_end, 10);
+  int i = strtol(src, &int_end, 10);
   // If strtod matched more characters, it must have a decimal part
   if (float_end > int_end)
-return new(ctx) s_float(f);
-
-  return new(ctx) s_int(i);
+expr = new(ctx) s_float(f);
+  else
+expr = new(ctx) s_int(i);
+   } else {
+  // Not a number; return a symbol.
+  expr = new(ctx) s_symbol(src, n);
}
-   // Not a number; return a symbol.
-   return new(ctx) s_symbol(buf);
+
+   src += n;
+
+   return expr;
 }
 
 s_expression *
@@ -82,10 +90,10 @@ s_expression::read_expression(void *ctx, const char *&src)
if (atom != NULL)
   return atom;
 
-   char c;
-   int n;
-   if (sscanf(src, " %c%n", &c, &n) == 1 && c == '(') {
-  src += n;
+   // Skip leading spaces.
+   src += strspn(src, " \v\t\r\n");
+   if (src[0] == '(') {
+  ++src;
 
   s_list *list = new(ctx) s_list;
   s_expression *expr;
@@ -93,11 +101,12 @@ s_expression::read_expression(void *ctx, const char *&src)
   while ((expr = read_expression(ctx, src)) != NULL) {
 list->subexpressions.push_tail(expr);
   }
-  if (sscanf(src, " %c%n", &c, &n) != 1 || c != ')') {
+  src += strspn(src, " \v\t\r\n");
+  if (src[0] != ')') {
 printf("Unclosed expression (check your parenthesis).\n");
 return NULL;
   }
-  src += n;
+  ++src;
   return list;
}
return NULL;
diff --git a/src/glsl/s_expression.h b/src/glsl/s_expression.h
index 1a0c03c..aa22475 100644
--- a/src/glsl/s_expression.h
+++ b/src/glsl/s_expression.h
@@ -113,7 +113,7 @@ private:
 class s_symbol : public s_expression
 {
 public:
-   s_symbol(const char *);
+   s_symbol(const char *, size_t);
 
bool is_symbol() const { return true; }
 

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


Mesa (master): mesa: Remove unnecessary heaaders from shaderapi.c.

2010-08-18 Thread Vinson Lee
Module: Mesa
Branch: master
Commit: a575067d7029c7af3bb6d650d6bd944ac8bb6bb7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a575067d7029c7af3bb6d650d6bd944ac8bb6bb7

Author: Vinson Lee 
Date:   Wed Aug 18 18:49:32 2010 -0700

mesa: Remove unnecessary heaaders from shaderapi.c.

---

 src/mesa/main/shaderapi.c |2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 89b9557..cc350c9 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -46,8 +46,6 @@
 #include "program/program.h"
 #include "program/prog_parameter.h"
 #include "program/prog_uniform.h"
-#include "slang/slang_compile.h"
-#include "slang/slang_link.h"
 #include "talloc.h"
 
 

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


Mesa (master): glsl: Also strdup the names of uniform list entries for > vec4 types.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: f1d5a9419784e939da1a4bcc482567f315da541a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f1d5a9419784e939da1a4bcc482567f315da541a

Author: Eric Anholt 
Date:   Wed Aug 18 17:39:57 2010 -0700

glsl: Also strdup the names of uniform list entries for >vec4 types.

Fixes double-free since the fix to free all of the uniform list.

---

 src/glsl/linker.cpp |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index b256574..2dc5697 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -843,7 +843,7 @@ assign_uniform_locations(struct gl_shader_program *prog)
 
n->u[0].Name = strdup(var->name);
for (unsigned j = 1; j < vec4_slots; j++)
-  n->u[j].Name = n->u[0].Name;
+  n->u[j].Name = strdup(var->name);
 
hash_table_insert(ht, n, n->u[0].Name);
uniforms.push_tail(& n->link);

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


Mesa (master): mesa: Don't try to free components of a NULL uniform list.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: f5703a54e2f765237e01eef6ddbd019ca6a58e81
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f5703a54e2f765237e01eef6ddbd019ca6a58e81

Author: Eric Anholt 
Date:   Wed Aug 18 17:42:34 2010 -0700

mesa: Don't try to free components of a NULL uniform list.

This might happen if we manage to trigger the right linker errors.

---

 src/mesa/program/prog_uniform.c |4 
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/mesa/program/prog_uniform.c b/src/mesa/program/prog_uniform.c
index 5aa9878..28acb88 100644
--- a/src/mesa/program/prog_uniform.c
+++ b/src/mesa/program/prog_uniform.c
@@ -44,6 +44,10 @@ void
 _mesa_free_uniform_list(struct gl_uniform_list *list)
 {
GLuint i;
+
+   if (!list)
+  return;
+
for (i = 0; i < list->NumUniforms; i++) {
   free((void *) list->Uniforms[i].Name);
}

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


Mesa (master): glcpp: Add basic #line support ( adapted from the main compiler).

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 9cf62bdfeb3982405b9360500d7e0fa52036f38f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9cf62bdfeb3982405b9360500d7e0fa52036f38f

Author: Kenneth Graunke 
Date:   Wed Aug 18 17:38:05 2010 -0700

glcpp: Add basic #line support (adapted from the main compiler).

---

 src/glsl/glcpp/glcpp-lex.l |   31 +++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-lex.l b/src/glsl/glcpp/glcpp-lex.l
index a14e580..c81bd04 100644
--- a/src/glsl/glcpp/glcpp-lex.l
+++ b/src/glsl/glcpp/glcpp-lex.l
@@ -100,6 +100,37 @@ HEXADECIMAL_INTEGER0[xX][0-9a-fA-F]+[uU]?
return OTHER;
 }
 
+{HASH}line{HSPACE}+{DECIMAL_INTEGER}{HSPACE}+{DECIMAL_INTEGER}{HSPACE}*$ {
+   /* Eat characters until the first digit is
+* encountered
+*/
+   char *ptr = yytext;
+   while (!isdigit(*ptr))
+   ptr++;
+
+   /* Subtract one from the line number because
+* yylineno is zero-based instead of
+* one-based.
+*/
+   yylineno = strtol(ptr, &ptr, 0) - 1;
+   yylloc->source = strtol(ptr, NULL, 0);
+}
+
+{HASH}line{HSPACE}+{DECIMAL_INTEGER}{HSPACE}*$ {
+   /* Eat characters until the first digit is
+* encountered
+*/
+   char *ptr = yytext;
+   while (!isdigit(*ptr))
+   ptr++;
+
+   /* Subtract one from the line number because
+* yylineno is zero-based instead of
+* one-based.
+*/
+   yylineno = strtol(ptr, &ptr, 0) - 1;
+}
+
 {HASH}ifdef/.*\n {
yyextra->lexing_if = 1;
yyextra->space_tokens = 0;

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


Mesa (master): glcpp: Refresh autogenerated lexer.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: bd7853768dd7ad52604e3b636ae71dacaa7352fe
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bd7853768dd7ad52604e3b636ae71dacaa7352fe

Author: Kenneth Graunke 
Date:   Wed Aug 18 17:38:24 2010 -0700

glcpp: Refresh autogenerated lexer.

---

 src/glsl/glcpp/glcpp-lex.c |  589 
 1 files changed, 326 insertions(+), 263 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-lex.c b/src/glsl/glcpp/glcpp-lex.c
index a0de91a..1f0a77b 100644
--- a/src/glsl/glcpp/glcpp-lex.c
+++ b/src/glsl/glcpp/glcpp-lex.c
@@ -54,6 +54,7 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -84,8 +85,6 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX (4294967295U)
 #endif
 
-#endif /* ! C99 */
-
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -159,15 +158,7 @@ typedef void* yyscan_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the 
main buffer.
@@ -358,8 +349,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t 
yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 41
-#define YY_END_OF_BUFFER 42
+#define YY_NUM_RULES 43
+#define YY_END_OF_BUFFER 44
 /* This struct is not used in this scanner,
but its presence is necessary. */
 struct yy_trans_info
@@ -367,26 +358,26 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_acclist[133] =
+static yyconst flex_int16_t yy_acclist[137] =
 {   0,
-3,3,   42,   37,   41,   38,   41,   39,   41,   41,
-   36,   41,   41,   36,   41,   36,   41,   36,   41,   23,
-   37,   41,   22,   37,   41,   36,   41,   36,   41,   36,
-   41,   35,   37,   41,   35,   37,   41,   36,   41,   38,
-   41,   21,   41,   41,3,   41,4,   41,5,   41,
-   40,   41,   37,   16,   38,   30,   33,   31,2,1,
-   23,   37,   23,   37,   37,   22,   37,   22,   37,   25,
-   27,   29,   28,   26,   35,   37,   35,   37,   32,   38,
-   21,   21,3,4,5,6,5,7,1,   24,
-   37,   35,   37,16396,   24,   37,   35,   37,   16,   35,
-
-   37,16397,16398, 8204,   16, 8204,   35,   37, 8205,   16,
- 8206,   16,16399,   17,16394,   20,   34,   35,   37,   19,
- 8207,   16,   17, 8202,   16,16395,16402, 8203,   16,9,
-8, 8210
+3,3,   44,   39,   43,   40,   43,   41,   43,   43,
+   38,   43,   43,   38,   43,   38,   43,   38,   43,   25,
+   39,   43,   24,   39,   43,   38,   43,   38,   43,   38,
+   43,   37,   39,   43,   37,   39,   43,   38,   43,   40,
+   43,   23,   43,   43,3,   43,4,   43,5,   43,
+   42,   43,   39,   18,   40,   32,   35,   33,2,1,
+   25,   39,   25,   39,   39,   24,   39,   24,   39,   27,
+   29,   31,   30,   28,   37,   39,   37,   39,   34,   40,
+   23,   23,3,4,5,6,5,7,1,   26,
+   39,   37,   39,16398,   26,   39,   37,   39,   18,   37,
+
+   39,16399,16400, 8206,   18, 8206,   37,   39, 8207,   18,
+ 8208,   18,16401,   19,16396,   22,   36,   37,   39,   21,
+ 8209,   18,   19, 8204,   18,16397,16404, 8205,   18,   11,
+   18,9,8, 8212,   10,   18
 } ;
 
-static yyconst flex_int16_t yy_accept[151] =
+static yyconst flex_int16_t yy_accept[166] =
 {   0,
 1,1,1,1,1,2,3,3,3,4,
 6,8,   10,   11,   13,   14,   16,   18,   20,   23,
@@ -394,16 +385,18 @@ static yyconst flex_int16_t yy_accept[151] =
47,   49,   51,   53,   54,   54,   55,   56,   57,   58,
59,   60,   61,   63,   65,   66,   68,   70,   71,   72,
73,   74,   75,   77,   79,   80,   81,   82,   83,   83,
-   83,   83,   83,   83,   83,   84,   85,   86,   87,   88,
-   89,   90,   92,   94,   94,   94,   94,   94,   94,   95,
-   95,   95,   95,   97,   99,   99,   99,   99,   99,   99,
-   99,   99,  100,  100,  100,  100,  100,  100,  102,  102,
-
-  103,  104,  104,  104,  104,  104,  106,  106,  107,  107,
-  107,  107,  107,  107,  109,  109,  109,  111,  111,  113,
-  114,  115,  115,  116,  116,  116,  117,  117,  120,  121,
-  121,  123,  124,  124,  124,  126,  127,  127,  127,  128,
-  128,  128,  130,  131,  132,  132,  132,  133,  133,  133
+   83,   83,   83,   83,   83,   83,   84,   85,   8

Mesa (master): ir_to_mesa: Fix leak by improper freeing of a uniform list.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 49dfa89873403967d9f99d08d2e25042dea544e0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=49dfa89873403967d9f99d08d2e25042dea544e0

Author: Eric Anholt 
Date:   Wed Aug 18 17:12:18 2010 -0700

ir_to_mesa: Fix leak by improper freeing of a uniform list.

---

 src/mesa/program/ir_to_mesa.cpp |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index b566706..7b0c28e 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2743,7 +2743,7 @@ _mesa_glsl_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
   /* We don't use the linker's uniforms list, and cook up our own at
* generate time.
*/
-  free(prog->Uniforms);
+  _mesa_free_uniform_list(prog->Uniforms);
   prog->Uniforms = _mesa_new_uniform_list();
}
 

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


Mesa (master): glsl2: Free the shader compiler at dri screen destruction.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: b83846475bac76268d75f53632faf8aad8cad02c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b83846475bac76268d75f53632faf8aad8cad02c

Author: Eric Anholt 
Date:   Wed Aug 18 16:56:39 2010 -0700

glsl2: Free the shader compiler at dri screen destruction.

Hooray, we can valgrind again without adding suppressions.  This also
adds an interface for use by an implementation of
glReleaseShaderCompiler().

---

 src/glsl/glsl_parser_extras.cpp|   30 ++
 src/glsl/glsl_parser_extras.h  |3 +++
 src/mesa/drivers/dri/common/dri_util.c |2 ++
 3 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index d1bb1ae..b864218 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -741,3 +741,33 @@ do_common_optimization(exec_list *ir, bool linked)
 
return progress;
 }
+
+extern "C" {
+
+/**
+ * To be called at GL teardown time, this frees compiler datastructures.
+ *
+ * After calling this, any previously compiled shaders and shader
+ * programs would be invalid.  So this should happen at approximately
+ * program exit.
+ */
+void
+_mesa_destroy_shader_compiler(void)
+{
+   _mesa_destroy_shader_compiler_caches();
+
+   _mesa_glsl_release_types();
+}
+
+/**
+ * Releases compiler caches to trade off performance for memory.
+ *
+ * Intended to be used with glReleaseShaderCompiler().
+ */
+void
+_mesa_destroy_shader_compiler_caches(void)
+{
+   _mesa_glsl_release_functions();
+}
+
+}
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 9e3cac2..b0b1bc3 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -178,6 +178,9 @@ extern void _mesa_glsl_warning(const YYLTYPE *locp,
 extern "C" {
 extern int preprocess(void *ctx, const char **shader, char **info_log,
  const struct gl_extensions *extensions);
+
+extern void _mesa_destroy_shader_compiler();
+extern void _mesa_destroy_shader_compiler_caches();
 }
 
 extern void _mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state,
diff --git a/src/mesa/drivers/dri/common/dri_util.c 
b/src/mesa/drivers/dri/common/dri_util.c
index 5eb8b62..b1a7b3e 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -707,6 +707,8 @@ static void driDestroyScreen(__DRIscreen *psp)
 * stream open to the X-server anymore.
 */
 
+   _mesa_destroy_shader_compiler();
+
if (psp->DriverAPI.DestroyScreen)
(*psp->DriverAPI.DestroyScreen)(psp);
 

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


Mesa (nvfx-next-7g): glsl: don' t crash if a field is specified for a non-struct uniform

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: nvfx-next-7g
Commit: 1d57e3e2ec2b62380578ddda8cae668f24d7ddcc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1d57e3e2ec2b62380578ddda8cae668f24d7ddcc

Author: Luca Barbieri 
Date:   Wed Aug 18 12:39:18 2010 +0200

glsl: don't crash if a field is specified for a non-struct uniform

This was triggered by the previous bug, but is a separate problem
in the general sense.

---

 src/mesa/program/ir_to_mesa.cpp |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 1f3072f..825c6f4 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -1145,7 +1145,7 @@ get_builtin_uniform_reg(struct gl_program *prog,
   if (!field && statevars[i].field) {
 assert(!"FINISHME: whole-structure state var dereference");
   }
-  if (field && strcmp(statevars[i].field, field) != 0)
+  if (field && (!statevars[i].field || strcmp(statevars[i].field, field) 
!= 0))
 continue;
   break;
}

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


Mesa (gallium-rect-textures): nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 05e000d31c6f5441e8bbbce5175c0b6afa29946b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=05e000d31c6f5441e8bbbce5175c0b6afa29946b

Author: Luca Barbieri 
Date:   Wed Aug 18 17:29:59 2010 +0200

nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

Is this the right thing?!?

---

 src/gallium/drivers/nv50/nv50_tex.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_tex.c 
b/src/gallium/drivers/nv50/nv50_tex.c
index 4db53f7..d41d9c5 100644
--- a/src/gallium/drivers/nv50/nv50_tex.c
+++ b/src/gallium/drivers/nv50/nv50_tex.c
@@ -131,9 +131,11 @@ nv50_tex_construct(struct nv50_sampler_view *view)
tic[2] |= NV50TIC_0_2_TARGET_1D;
break;
case PIPE_TEXTURE_2D:
-   case PIPE_TEXTURE_RECT:
tic[2] |= NV50TIC_0_2_TARGET_2D;
break;
+   case PIPE_TEXTURE_RECT:
+   tic[2] |= NV50TIC_0_2_TARGET_RECT;
+   break;
case PIPE_TEXTURE_3D:
tic[2] |= NV50TIC_0_2_TARGET_3D;
break;

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


Mesa (gallium-rect-textures): galahad: check resource_create template

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 86f1c6e919b69d308f71a874b558179e51ac3047
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=86f1c6e919b69d308f71a874b558179e51ac3047

Author: Luca Barbieri 
Date:   Thu Aug 19 01:38:33 2010 +0200

galahad: check resource_create template

---

 src/gallium/drivers/galahad/glhd_screen.c |   29 +
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/galahad/glhd_screen.c 
b/src/gallium/drivers/galahad/glhd_screen.c
index 4117485..8e3c614 100644
--- a/src/gallium/drivers/galahad/glhd_screen.c
+++ b/src/gallium/drivers/galahad/glhd_screen.c
@@ -30,6 +30,7 @@
 #include "pipe/p_screen.h"
 #include "pipe/p_state.h"
 #include "util/u_memory.h"
+#include "util/u_math.h"
 
 #include "glhd_public.h"
 #include "glhd_screen.h"
@@ -134,6 +135,34 @@ galahad_screen_resource_create(struct pipe_screen *_screen,
struct pipe_screen *screen = glhd_screen->screen;
struct pipe_resource *result;
 
+   if (templat->target >= PIPE_MAX_TEXTURE_TYPES)
+  glhd_warn("Received bogus resource target %d", templat->target);
+
+   if(templat->target != PIPE_TEXTURE_RECT && templat->target != PIPE_BUFFER 
&& !screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES))
+   {
+  if(!util_is_pot(templat->width0) || !util_is_pot(templat->height0))
+ glhd_warn("Requested NPOT (%ux%u) non-rectangle texture without NPOT 
support", templat->width0, templat->height0);
+   }
+
+   /* TODO: allow this for OpenCL flexible sampling */
+   if(templat->target == PIPE_TEXTURE_RECT && templat->last_level)
+  glhd_warn("Rectangle textures cannot have mipmaps, but last_level = %u", 
templat->last_level);
+
+   if(templat->target == PIPE_BUFFER && templat->last_level)
+  glhd_warn("Buffers cannot have mipmaps, but last_level = %u", 
templat->last_level);
+
+   if(templat->target != PIPE_TEXTURE_3D && templat->depth0 != 1)
+  glhd_warn("Only 3D textures can have depth != 1, but received target %u 
and depth %u", templat->target, templat->depth0);
+
+   if(templat->target == PIPE_TEXTURE_1D && templat->height0 != 1)
+ glhd_warn("1D textures must have height 1 but got asked for height %u", 
templat->height0);
+
+   if(templat->target == PIPE_TEXTURE_1D && templat->height0 != 1)
+ glhd_warn("Buffers must have height 1 but got asked for height %u", 
templat->height0);
+
+   if(templat->target == PIPE_TEXTURE_CUBE && templat->width0 != 
templat->height0)
+  glhd_warn("Cube maps must be square, but got asked for %ux%u", 
templat->width0, templat->height0);
+
result = screen->resource_create(screen,
 templat);
 

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


Mesa (gallium-rect-textures): mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 7d7ba12491087c884bd682d7858a517b29f6402f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d7ba12491087c884bd682d7858a517b29f6402f

Author: Luca Barbieri 
Date:   Thu Apr 15 09:04:20 2010 +0200

mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

---

 src/mesa/state_tracker/st_cb_texture.c |6 --
 src/mesa/state_tracker/st_texture.c|2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 4c3e368..a41c780 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -74,9 +74,11 @@ gl_target_to_pipe(GLenum target)
   return PIPE_TEXTURE_1D;
 
case GL_TEXTURE_2D:
-   case GL_TEXTURE_RECTANGLE_NV:
   return PIPE_TEXTURE_2D;
 
+   case GL_TEXTURE_RECTANGLE_NV:
+  return PIPE_TEXTURE_RECT;
+
case GL_TEXTURE_3D:
   return PIPE_TEXTURE_3D;
 
@@ -449,7 +451,7 @@ compress_with_blit(GLcontext * ctx,
/* Create the temporary source texture
 */
memset(&templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = st->internal_target;
templ.format = st_mesa_format_to_pipe_format(mesa_format);
templ.width0 = width;
templ.height0 = height;
diff --git a/src/mesa/state_tracker/st_texture.c 
b/src/mesa/state_tracker/st_texture.c
index add6e94..c6cf2ba 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -64,7 +64,7 @@ st_texture_create(struct st_context *st,
struct pipe_resource pt, *newtex;
struct pipe_screen *screen = st->pipe->screen;
 
-   assert(target <= PIPE_TEXTURE_CUBE);
+   assert(target < PIPE_MAX_TEXTURE_TYPES);
assert(width0 > 0);
assert(height0 > 0);
assert(depth0 > 0);

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


Mesa (gallium-rect-textures): winsys/sw: use PIPE_TEXTURE_RECT if appropriate

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: afbb41f5ee3d749482cb8cad53596a703f4a8879
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=afbb41f5ee3d749482cb8cad53596a703f4a8879

Author: Luca Barbieri 
Date:   Thu Aug 19 01:44:02 2010 +0200

winsys/sw: use PIPE_TEXTURE_RECT if appropriate

---

 src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c |8 +++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c 
b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
index b997abd..3a76098 100644
--- a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
+++ b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
@@ -52,6 +52,7 @@ struct wrapper_sw_winsys
struct sw_winsys base;
struct pipe_screen *screen;
struct pipe_context *pipe;
+   enum pipe_texture_target target;
 };
 
 struct wrapper_sw_displaytarget
@@ -145,7 +146,7 @@ wsw_dt_create(struct sw_winsys *ws,
 * XXX Why don't we just get the template.
 */
memset(&templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = wsw->target;
templ.width0 = width;
templ.height0 = height;
templ.format = format;
@@ -291,6 +292,11 @@ wrapper_sw_winsys_warp_pipe_screen(struct pipe_screen 
*screen)
if (!wsw->pipe)
   goto err_free;
 
+   if(screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES))
+  wsw->target = PIPE_TEXTURE_2D;
+   else
+  wsw->target = PIPE_TEXTURE_RECT;
+
return &wsw->base;
 
 err_free:

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


Mesa (gallium-rect-textures): nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 53ace33626a32c523b96088043c0d8b76e23dc2d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=53ace33626a32c523b96088043c0d8b76e23dc2d

Author: Luca Barbieri 
Date:   Wed Aug 18 17:29:59 2010 +0200

nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

Is this the right thing?!?

---

 src/gallium/drivers/nv50/nv50_tex.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_tex.c 
b/src/gallium/drivers/nv50/nv50_tex.c
index 4db53f7..d41d9c5 100644
--- a/src/gallium/drivers/nv50/nv50_tex.c
+++ b/src/gallium/drivers/nv50/nv50_tex.c
@@ -131,9 +131,11 @@ nv50_tex_construct(struct nv50_sampler_view *view)
tic[2] |= NV50TIC_0_2_TARGET_1D;
break;
case PIPE_TEXTURE_2D:
-   case PIPE_TEXTURE_RECT:
tic[2] |= NV50TIC_0_2_TARGET_2D;
break;
+   case PIPE_TEXTURE_RECT:
+   tic[2] |= NV50TIC_0_2_TARGET_RECT;
+   break;
case PIPE_TEXTURE_3D:
tic[2] |= NV50TIC_0_2_TARGET_3D;
break;

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


Mesa (gallium-rect-textures): galahad: check resource_create template

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 14c63fd0d1e875619c84214bcb43ed612bde79a2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=14c63fd0d1e875619c84214bcb43ed612bde79a2

Author: Luca Barbieri 
Date:   Thu Aug 19 01:38:33 2010 +0200

galahad: check resource_create template

---

 src/gallium/drivers/galahad/glhd_screen.c |   29 +
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/galahad/glhd_screen.c 
b/src/gallium/drivers/galahad/glhd_screen.c
index 4117485..8e3c614 100644
--- a/src/gallium/drivers/galahad/glhd_screen.c
+++ b/src/gallium/drivers/galahad/glhd_screen.c
@@ -30,6 +30,7 @@
 #include "pipe/p_screen.h"
 #include "pipe/p_state.h"
 #include "util/u_memory.h"
+#include "util/u_math.h"
 
 #include "glhd_public.h"
 #include "glhd_screen.h"
@@ -134,6 +135,34 @@ galahad_screen_resource_create(struct pipe_screen *_screen,
struct pipe_screen *screen = glhd_screen->screen;
struct pipe_resource *result;
 
+   if (templat->target >= PIPE_MAX_TEXTURE_TYPES)
+  glhd_warn("Received bogus resource target %d", templat->target);
+
+   if(templat->target != PIPE_TEXTURE_RECT && templat->target != PIPE_BUFFER 
&& !screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES))
+   {
+  if(!util_is_pot(templat->width0) || !util_is_pot(templat->height0))
+ glhd_warn("Requested NPOT (%ux%u) non-rectangle texture without NPOT 
support", templat->width0, templat->height0);
+   }
+
+   /* TODO: allow this for OpenCL flexible sampling */
+   if(templat->target == PIPE_TEXTURE_RECT && templat->last_level)
+  glhd_warn("Rectangle textures cannot have mipmaps, but last_level = %u", 
templat->last_level);
+
+   if(templat->target == PIPE_BUFFER && templat->last_level)
+  glhd_warn("Buffers cannot have mipmaps, but last_level = %u", 
templat->last_level);
+
+   if(templat->target != PIPE_TEXTURE_3D && templat->depth0 != 1)
+  glhd_warn("Only 3D textures can have depth != 1, but received target %u 
and depth %u", templat->target, templat->depth0);
+
+   if(templat->target == PIPE_TEXTURE_1D && templat->height0 != 1)
+ glhd_warn("1D textures must have height 1 but got asked for height %u", 
templat->height0);
+
+   if(templat->target == PIPE_TEXTURE_1D && templat->height0 != 1)
+ glhd_warn("Buffers must have height 1 but got asked for height %u", 
templat->height0);
+
+   if(templat->target == PIPE_TEXTURE_CUBE && templat->width0 != 
templat->height0)
+  glhd_warn("Cube maps must be square, but got asked for %ux%u", 
templat->width0, templat->height0);
+
result = screen->resource_create(screen,
 templat);
 

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


Mesa (gallium-rect-textures): mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: ecd85347872eb35716bc3b65b2a6612c97954667
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ecd85347872eb35716bc3b65b2a6612c97954667

Author: Luca Barbieri 
Date:   Thu Apr 15 09:04:20 2010 +0200

mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

---

 src/mesa/state_tracker/st_cb_texture.c |6 --
 src/mesa/state_tracker/st_texture.c|2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 4c3e368..a41c780 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -74,9 +74,11 @@ gl_target_to_pipe(GLenum target)
   return PIPE_TEXTURE_1D;
 
case GL_TEXTURE_2D:
-   case GL_TEXTURE_RECTANGLE_NV:
   return PIPE_TEXTURE_2D;
 
+   case GL_TEXTURE_RECTANGLE_NV:
+  return PIPE_TEXTURE_RECT;
+
case GL_TEXTURE_3D:
   return PIPE_TEXTURE_3D;
 
@@ -449,7 +451,7 @@ compress_with_blit(GLcontext * ctx,
/* Create the temporary source texture
 */
memset(&templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = st->internal_target;
templ.format = st_mesa_format_to_pipe_format(mesa_format);
templ.width0 = width;
templ.height0 = height;
diff --git a/src/mesa/state_tracker/st_texture.c 
b/src/mesa/state_tracker/st_texture.c
index add6e94..c6cf2ba 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -64,7 +64,7 @@ st_texture_create(struct st_context *st,
struct pipe_resource pt, *newtex;
struct pipe_screen *screen = st->pipe->screen;
 
-   assert(target <= PIPE_TEXTURE_CUBE);
+   assert(target < PIPE_MAX_TEXTURE_TYPES);
assert(width0 > 0);
assert(height0 > 0);
assert(depth0 > 0);

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


Mesa (gallium-rect-textures): st/glx: use PIPE_TEXTURE_RECT if appropriate

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 527a9ef610280097d42bd91a4ed0efe07589d214
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=527a9ef610280097d42bd91a4ed0efe07589d214

Author: Luca Barbieri 
Date:   Thu Aug 19 00:55:13 2010 +0200

st/glx: use PIPE_TEXTURE_RECT if appropriate

---

 src/gallium/state_trackers/glx/xlib/xm_st.c |7 ++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/glx/xlib/xm_st.c 
b/src/gallium/state_trackers/glx/xlib/xm_st.c
index c62eb8b..9cd744c 100644
--- a/src/gallium/state_trackers/glx/xlib/xm_st.c
+++ b/src/gallium/state_trackers/glx/xlib/xm_st.c
@@ -38,6 +38,7 @@ struct xmesa_st_framebuffer {
struct pipe_screen *screen;
 
struct st_visual stvis;
+   enum pipe_texture_target target;
 
unsigned texture_width, texture_height, texture_mask;
struct pipe_resource *textures[ST_ATTACHMENT_COUNT];
@@ -139,7 +140,7 @@ xmesa_st_framebuffer_validate_textures(struct 
st_framebuffer_iface *stfbi,
}
 
memset(&templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = xstfb->target;
templ.width0 = width;
templ.height0 = height;
templ.depth0 = 1;
@@ -279,6 +280,10 @@ xmesa_create_st_framebuffer(XMesaDisplay xmdpy, 
XMesaBuffer b)
xstfb->buffer = b;
xstfb->screen = xmdpy->screen;
xstfb->stvis = b->xm_visual->stvis;
+   if(xstfb->screen->get_param(xstfb->screen, PIPE_CAP_NPOT_TEXTURES))
+  xstfb->target = PIPE_TEXTURE_2D;
+   else
+  xstfb->target = PIPE_TEXTURE_RECT;
 
stfbi->visual = &xstfb->stvis;
stfbi->flush_front = xmesa_st_framebuffer_flush_front;

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


Mesa (gallium-rect-textures): auxiliary: support using PIPE_TEXTURE_RECT internally

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 36e1ea53da8943cde1d08df4abd7248ac7eab550
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=36e1ea53da8943cde1d08df4abd7248ac7eab550

Author: Luca Barbieri 
Date:   Fri Aug  6 07:39:21 2010 +0200

auxiliary: support using PIPE_TEXTURE_RECT internally

Currently Gallium internals always use PIPE_TEXTURE_2D and normalized
coordinates to access textures.

However, PIPE_TEXTURE_2D is not always supported for NPOT textures,
and PIPE_TEXTURE_RECT requires unnormalized coordinates.

Hence, this change adds support for both kinds of normalization.

---

 src/gallium/auxiliary/util/u_blit.c|   67 
 src/gallium/auxiliary/util/u_blitter.c |   48 +++
 2 files changed, 81 insertions(+), 34 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blit.c 
b/src/gallium/auxiliary/util/u_blit.c
index 30c7a96..6fb341e 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -62,6 +62,7 @@ struct blit_state
struct pipe_viewport_state viewport;
struct pipe_clip_state clip;
struct pipe_vertex_element velem[2];
+   enum pipe_texture_target internal_target;
 
void *vs;
void *fs[TGSI_WRITEMASK_XYZW + 1];
@@ -110,7 +111,6 @@ util_create_blit(struct pipe_context *pipe, struct 
cso_context *cso)
ctx->sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
ctx->sampler.min_img_filter = 0; /* set later */
ctx->sampler.mag_img_filter = 0; /* set later */
-   ctx->sampler.normalized_coords = 1;
 
/* vertex elements state */
memset(&ctx->velem[0], 0, sizeof(ctx->velem[0]) * 2);
@@ -145,6 +145,11 @@ util_create_blit(struct pipe_context *pipe, struct 
cso_context *cso)
   ctx->vertices[i][1][3] = 1.0f; /* q */
}
 
+   if(pipe->screen->get_param(pipe->screen, PIPE_CAP_NPOT_TEXTURES))
+  ctx->internal_target = PIPE_TEXTURE_2D;
+   else
+  ctx->internal_target = PIPE_TEXTURE_RECT;
+
return ctx;
 }
 
@@ -296,6 +301,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
unsigned offset;
boolean overlap;
float s0, t0, s1, t1;
+   boolean normalized;
 
assert(filter == PIPE_TEX_MIPFILTER_NEAREST ||
   filter == PIPE_TEX_MIPFILTER_LINEAR);
@@ -335,7 +341,6 @@ util_blit_pixels_writemask(struct blit_state *ctx,
   return;
}
 
-
/* Create a temporary texture when src and dest alias or when src
 * is anything other than a 2d texture.
 * XXX should just use appropriate shader to access 1d / 3d slice / cube 
face,
@@ -373,7 +378,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
 
   /* create temp texture */
   memset(&texTemp, 0, sizeof(texTemp));
-  texTemp.target = PIPE_TEXTURE_2D;
+  texTemp.target = ctx->internal_target;
   texTemp.format = src_tex->format;
   texTemp.last_level = 0;
   texTemp.width0 = srcW;
@@ -393,10 +398,19 @@ util_blit_pixels_writemask(struct blit_state *ctx,
  src_tex, srcsub, srcLeft, srcTop, srcZ0, /* 
src */
  srcW, srcH); /* size */
 
-  s0 = 0.0f; 
-  s1 = 1.0f;
-  t0 = 0.0f;
-  t1 = 1.0f;
+  normalized = tex->target != PIPE_TEXTURE_RECT;
+  if(normalized) {
+ s0 = 0.0f;
+ s1 = 1.0f;
+ t0 = 0.0f;
+ t1 = 1.0f;
+  }
+  else {
+ s0 = 0;
+ s1 = srcW;
+ t0 = 0;
+ t1 = srcH;
+  }
 
   u_sampler_view_default_template(&sv_templ, tex, tex->format);
   sampler_view = pipe->create_sampler_view(pipe, tex, &sv_templ);
@@ -416,17 +430,25 @@ util_blit_pixels_writemask(struct blit_state *ctx,
  return;
   }
 
-  s0 = srcX0 / (float)(u_minify(sampler_view->texture->width0, 
srcsub.level));
-  s1 = srcX1 / (float)(u_minify(sampler_view->texture->width0, 
srcsub.level));
-  t0 = srcY0 / (float)(u_minify(sampler_view->texture->height0, 
srcsub.level));
-  t1 = srcY1 / (float)(u_minify(sampler_view->texture->height0, 
srcsub.level));
+  s0 = srcX0;
+  s1 = srcX1;
+  t0 = srcY0;
+  t1 = srcY1;
+  normalized = sampler_view->texture->target != PIPE_TEXTURE_RECT;
+  if(normalized)
+  {
+ s0 /= (float)(u_minify(sampler_view->texture->width0, srcsub.level));
+ s1 /= (float)(u_minify(sampler_view->texture->width0, srcsub.level));
+ t0 /= (float)(u_minify(sampler_view->texture->height0, srcsub.level));
+ t1 /= (float)(u_minify(sampler_view->texture->height0, srcsub.level));
+  }
}
 
 
-   assert(screen->is_format_supported(screen, sampler_view->format, 
PIPE_TEXTURE_2D,
+   assert(screen->is_format_supported(screen, sampler_view->format, 
ctx->internal_target,
   sampler_view->texture->nr_samples,
   PIPE_BIND_SAMPLER_VIEW, 0));
-   assert(screen->is_format_supported(screen, dst->format, PIPE_TEXTURE_2D,
+   assert(screen->is_format_s

Mesa (gallium-rect-textures): st/dri: use PIPE_TEXTURE_RECT if appropriate

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 64ab845b7e123e9305ccb260392eda217beaed93
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=64ab845b7e123e9305ccb260392eda217beaed93

Author: Luca Barbieri 
Date:   Wed Aug 18 22:57:22 2010 +0200

st/dri: use PIPE_TEXTURE_RECT if appropriate

---

 src/gallium/state_trackers/dri/common/dri_screen.c |5 +
 src/gallium/state_trackers/dri/common/dri_screen.h |1 +
 src/gallium/state_trackers/dri/drm/dri2.c  |4 ++--
 src/gallium/state_trackers/dri/sw/drisw.c  |2 +-
 4 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/gallium/state_trackers/dri/common/dri_screen.c 
b/src/gallium/state_trackers/dri/common/dri_screen.c
index 6ad2c7d..0ab4dd1 100644
--- a/src/gallium/state_trackers/dri/common/dri_screen.c
+++ b/src/gallium/state_trackers/dri/common/dri_screen.c
@@ -383,6 +383,11 @@ dri_init_screen_helper(struct dri_screen *screen,
if (!screen->st_api)
   return NULL;
 
+   if(pscreen->get_param(pscreen, PIPE_CAP_NPOT_TEXTURES))
+  screen->target = PIPE_TEXTURE_2D;
+   else
+  screen->target = PIPE_TEXTURE_RECT;
+
driParseOptionInfo(&screen->optionCache,
   __driConfigOptions, __driNConfigOptions);
 
diff --git a/src/gallium/state_trackers/dri/common/dri_screen.h 
b/src/gallium/state_trackers/dri/common/dri_screen.h
index 53ccce1..849f399 100644
--- a/src/gallium/state_trackers/dri/common/dri_screen.h
+++ b/src/gallium/state_trackers/dri/common/dri_screen.h
@@ -68,6 +68,7 @@ struct dri_screen
boolean d_depth_bits_last;
boolean sd_depth_bits_last;
boolean auto_fake_front;
+   enum pipe_texture_target target;
 };
 
 /** cast wrapper */
diff --git a/src/gallium/state_trackers/dri/drm/dri2.c 
b/src/gallium/state_trackers/dri/drm/dri2.c
index 47005c1..93f910a 100644
--- a/src/gallium/state_trackers/dri/drm/dri2.c
+++ b/src/gallium/state_trackers/dri/drm/dri2.c
@@ -195,7 +195,7 @@ dri2_drawable_process_buffers(struct dri_drawable *drawable,
   pipe_resource_reference(&drawable->textures[i], NULL);
 
memset(&templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = screen->target;
templ.last_level = 0;
templ.width0 = dri_drawable->w;
templ.height0 = dri_drawable->h;
@@ -342,7 +342,7 @@ dri2_create_image_from_name(__DRIcontext *context,
memset(&templ, 0, sizeof(templ));
templ.bind = tex_usage;
templ.format = pf;
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = screen->target;
templ.last_level = 0;
templ.width0 = width;
templ.height0 = height;
diff --git a/src/gallium/state_trackers/dri/sw/drisw.c 
b/src/gallium/state_trackers/dri/sw/drisw.c
index 249ccd7..04bba63 100644
--- a/src/gallium/state_trackers/dri/sw/drisw.c
+++ b/src/gallium/state_trackers/dri/sw/drisw.c
@@ -216,7 +216,7 @@ drisw_allocate_textures(struct dri_drawable *drawable,
}
 
memset(&templ, 0, sizeof(templ));
-   templ.target = PIPE_TEXTURE_2D;
+   templ.target = screen->target;
templ.width0 = width;
templ.height0 = height;
templ.depth0 = 1;

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


Mesa (gallium-rect-textures): mesa/st: support using PIPE_TEXTURE_RECT internally

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 655c1ad637523c9fc9f90bfff9fdeb393bf20253
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=655c1ad637523c9fc9f90bfff9fdeb393bf20253

Author: Luca Barbieri 
Date:   Fri Aug  6 07:39:21 2010 +0200

mesa/st: support using PIPE_TEXTURE_RECT internally

Currently Gallium internals always use PIPE_TEXTURE_2D and normalized
coordinates to access textures.

However, PIPE_TEXTURE_2D is not always supported for NPOT textures,
and PIPE_TEXTURE_RECT requires unnormalized coordinates.

Hence, this change adds support for both kinds of normalization.

---

 src/mesa/state_tracker/st_cb_bitmap.c |   23 ++-
 src/mesa/state_tracker/st_cb_drawpixels.c |   42 ++--
 src/mesa/state_tracker/st_cb_fbo.c|2 +-
 src/mesa/state_tracker/st_context.c   |5 +++
 src/mesa/state_tracker/st_context.h   |3 +-
 5 files changed, 32 insertions(+), 43 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_bitmap.c 
b/src/mesa/state_tracker/st_cb_bitmap.c
index 91037ab..d40e413 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -275,7 +275,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei 
height,
/**
 * Create texture to hold bitmap pattern.
 */
-   pt = st_texture_create(st, PIPE_TEXTURE_2D, st->bitmap.tex_format,
+   pt = st_texture_create(st, st->internal_target, st->bitmap.tex_format,
   0, width, height, 1,
   PIPE_BIND_SAMPLER_VIEW);
if (!pt) {
@@ -304,7 +304,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei 
height,
 }
 
 static GLuint
-setup_bitmap_vertex_data(struct st_context *st,
+setup_bitmap_vertex_data(struct st_context *st, bool normalized,
  int x, int y, int width, int height,
  float z, const float color[4])
 {
@@ -316,13 +316,19 @@ setup_bitmap_vertex_data(struct st_context *st,
const GLfloat x1 = (GLfloat)(x + width);
const GLfloat y0 = (GLfloat)y;
const GLfloat y1 = (GLfloat)(y + height);
-   const GLfloat sLeft = (GLfloat)0.0, sRight = (GLfloat)1.0;
-   const GLfloat tTop = (GLfloat)0.0, tBot = (GLfloat)1.0 - tTop;
+   GLfloat sLeft = (GLfloat)0.0, sRight = (GLfloat)1.0;
+   GLfloat tTop = (GLfloat)0.0, tBot = (GLfloat)1.0 - tTop;
const GLfloat clip_x0 = (GLfloat)(x0 / fb_width * 2.0 - 1.0);
const GLfloat clip_y0 = (GLfloat)(y0 / fb_height * 2.0 - 1.0);
const GLfloat clip_x1 = (GLfloat)(x1 / fb_width * 2.0 - 1.0);
const GLfloat clip_y1 = (GLfloat)(y1 / fb_height * 2.0 - 1.0);
 
+   if(!normalized)
+   {
+  sRight = width;
+  tBot = height;
+   }
+
/* XXX: Need to improve buffer_write to allow NO_WAIT (as well as
 * no_flush) updates to buffers where we know there is no conflict
 * with previous data.  Currently using max_slots > 1 will cause
@@ -462,7 +468,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat 
z,
   for (i = 0; i < st->state.num_samplers; i++) {
  samplers[i] = &st->state.samplers[i];
   }
-  samplers[stfp->bitmap_sampler] = &st->bitmap.sampler;
+  samplers[stfp->bitmap_sampler] = 
&st->bitmap.samplers[sv->texture->target != PIPE_TEXTURE_RECT];
   cso_set_samplers(cso, num, (const struct pipe_sampler_state **) 
samplers);
}
 
@@ -499,7 +505,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat 
z,
z = z * 2.0 - 1.0;
 
/* draw textured quad */
-   offset = setup_bitmap_vertex_data(st, x, y, width, height, z, color);
+   offset = setup_bitmap_vertex_data(st, sv->texture->target != 
PIPE_TEXTURE_RECT, x, y, width, height, z, color);
 
util_draw_vertex_buffer(pipe, st->bitmap.vbuf, offset,
PIPE_PRIM_TRIANGLE_FAN,
@@ -789,7 +795,7 @@ st_init_bitmap_functions(struct dd_function_table 
*functions)
 void
 st_init_bitmap(struct st_context *st)
 {
-   struct pipe_sampler_state *sampler = &st->bitmap.sampler;
+   struct pipe_sampler_state *sampler = &st->bitmap.samplers[0];
struct pipe_context *pipe = st->pipe;
struct pipe_screen *screen = pipe->screen;
 
@@ -801,7 +807,8 @@ st_init_bitmap(struct st_context *st)
sampler->min_img_filter = PIPE_TEX_FILTER_NEAREST;
sampler->min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
sampler->mag_img_filter = PIPE_TEX_FILTER_NEAREST;
-   sampler->normalized_coords = 1;
+   st->bitmap.samplers[1] = *sampler;
+   st->bitmap.samplers[1].normalized_coords = 1;
 
/* init baseline rasterizer state once */
memset(&st->bitmap.rasterizer, 0, sizeof(st->bitmap.rasterizer));
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c 
b/src/mesa/state_tracker/st_cb_drawpixels.c
index 69a3dd4..d934fdc 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -304,34 +304,9 @@ alloc_texture(struct st_context *st, GLsizei width, 
GLsizei height,
struct pipe_context *pipe = st->pipe;

Mesa (master): ir_to_mesa: Don't leak the whole linked assembly program.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 3cd233eb5714137dccb6218ad78005511bcc02bd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3cd233eb5714137dccb6218ad78005511bcc02bd

Author: Eric Anholt 
Date:   Wed Aug 18 16:29:02 2010 -0700

ir_to_mesa: Don't leak the whole linked assembly program.

---

 src/mesa/program/ir_to_mesa.cpp |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index eb3be91..b566706 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2633,6 +2633,7 @@ _mesa_ir_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
   if (!ok) {
 return GL_FALSE;
   }
+  _mesa_reference_program(ctx, &linked_prog, NULL);
}
 
return GL_TRUE;

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


Mesa (master): glsl: Fix leak-causing typo in destructor that made it another constructor.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 4532feba14fcf4e39ea6e44dd2b6a290697bbd50
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4532feba14fcf4e39ea6e44dd2b6a290697bbd50

Author: Eric Anholt 
Date:   Wed Aug 18 15:59:31 2010 -0700

glsl: Fix leak-causing typo in destructor that made it another constructor.

---

 src/glsl/ir_set_program_inouts.cpp |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/glsl/ir_set_program_inouts.cpp 
b/src/glsl/ir_set_program_inouts.cpp
index 6586377..534f602 100644
--- a/src/glsl/ir_set_program_inouts.cpp
+++ b/src/glsl/ir_set_program_inouts.cpp
@@ -51,7 +51,7 @@ public:
 hash_table_pointer_hash,
 hash_table_pointer_compare);
}
-   ir_set_program_inouts_visitor()
+   ~ir_set_program_inouts_visitor()
{
   hash_table_dtor(this->ht);
}

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


Mesa (master): dri2: Clean up the common dri2 options at screen destroy.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: a482e033082bb0794fdf56c47dd76d949afde6fa
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a482e033082bb0794fdf56c47dd76d949afde6fa

Author: Eric Anholt 
Date:   Wed Aug 18 16:17:10 2010 -0700

dri2: Clean up the common dri2 options at screen destroy.

---

 src/mesa/drivers/dri/common/dri_util.c |   10 +++---
 src/mesa/drivers/dri/common/dri_util.h |1 +
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/common/dri_util.c 
b/src/mesa/drivers/dri/common/dri_util.c
index dce84ef..5eb8b62 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -714,6 +714,9 @@ static void driDestroyScreen(__DRIscreen *psp)
   (void)drmUnmap((drmAddress)psp->pSAREA, SAREA_MAX);
   (void)drmUnmap((drmAddress)psp->pFB, psp->fbSize);
   (void)drmCloseOnce(psp->fd);
+   } else {
+  driDestroyOptionCache(&psp->optionCache);
+  driDestroyOptionInfo(&psp->optionInfo);
}
 
free(psp);
@@ -839,7 +842,6 @@ dri2CreateNewScreen(int scrn, int fd,
 static const __DRIextension *emptyExtensionList[] = { NULL };
 __DRIscreen *psp;
 drmVersionPtr version;
-driOptionCache options;
 
 if (driDriverAPI.InitScreen2 == NULL)
 return NULL;
@@ -873,8 +875,10 @@ dri2CreateNewScreen(int scrn, int fd,
 
 psp->DriverAPI = driDriverAPI;
 
-driParseOptionInfo(&options, __dri2ConfigOptions, __dri2NConfigOptions);
-driParseConfigFiles(&psp->optionCache, &options, psp->myNum, "dri2");
+driParseOptionInfo(&psp->optionInfo, __dri2ConfigOptions,
+  __dri2NConfigOptions);
+driParseConfigFiles(&psp->optionCache, &psp->optionInfo, psp->myNum,
+   "dri2");
 
 return psp;
 }
diff --git a/src/mesa/drivers/dri/common/dri_util.h 
b/src/mesa/drivers/dri/common/dri_util.h
index e2fcdaa..5096d22 100644
--- a/src/mesa/drivers/dri/common/dri_util.h
+++ b/src/mesa/drivers/dri/common/dri_util.h
@@ -536,6 +536,7 @@ struct __DRIscreenRec {
 /* The lock actually in use, old sarea or DRI2 */
 drmLock *lock;
 
+driOptionCache optionInfo;
 driOptionCache optionCache;
unsigned int api_mask;
 };

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


Mesa (master): glsl: Fix uninitialized member in ir_hierarchical_vistor constructor.

2010-08-18 Thread Vinson Lee
Module: Mesa
Branch: master
Commit: 352e62c3c26c75ddce1345962339f78c64d0aa95
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=352e62c3c26c75ddce1345962339f78c64d0aa95

Author: Vinson Lee 
Date:   Wed Aug 18 16:10:15 2010 -0700

glsl: Fix uninitialized member in ir_hierarchical_vistor constructor.

Class member base_ir was not initialized by the default constructor.

---

 src/glsl/ir_hierarchical_visitor.cpp |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/glsl/ir_hierarchical_visitor.cpp 
b/src/glsl/ir_hierarchical_visitor.cpp
index d475df6..809b08e 100644
--- a/src/glsl/ir_hierarchical_visitor.cpp
+++ b/src/glsl/ir_hierarchical_visitor.cpp
@@ -26,6 +26,7 @@
 
 ir_hierarchical_visitor::ir_hierarchical_visitor()
 {
+   this->base_ir = NULL;
this->callback = NULL;
this->data = NULL;
 }

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


Mesa (master): mesa: fpclassify is available on OpenSolaris.

2010-08-18 Thread Vinson Lee
Module: Mesa
Branch: master
Commit: e1c7f3af0cb6769ef20a954459cfb87b9f99b4d6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e1c7f3af0cb6769ef20a954459cfb87b9f99b4d6

Author: Vinson Lee 
Date:   Wed Aug 18 14:36:08 2010 -0700

mesa: fpclassify is available on OpenSolaris.

There is no explicit predefined macro to distinguish between OpenSolaris
and Solaris. This patch assumes that the difference is in the compilers.
OpenSolaris uses GCC and not the Sun Studio compiler. Assume that the
availability of fpclassify is due to GCC.

This patch was not tested on Solaris. It would break the build on
Solaris with GCC if GCC on Solaris does not have fpclassify.

---

 src/mesa/main/querymatrix.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/mesa/main/querymatrix.c b/src/mesa/main/querymatrix.c
index 32aaa79..36236eb 100644
--- a/src/mesa/main/querymatrix.c
+++ b/src/mesa/main/querymatrix.c
@@ -72,7 +72,8 @@ fpclassify(double x)
 
 #elif defined(__APPLE__) || defined(__CYGWIN__) || defined(__FreeBSD__) || \
  defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \
- (defined(__sun) && defined(__C99FEATURES__)) || defined(__MINGW32__)
+ (defined(__sun) && defined(__C99FEATURES__)) || defined(__MINGW32__) || \
+ (defined(__sun) && defined(__GNUC__))
 
 /* fpclassify is available. */
 

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


Mesa (master): ir_to_mesa: Fix leak of set_branchtargets temp data.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 3ef83d270b2c24867a0d020b81bdc6c54cb1c9b0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ef83d270b2c24867a0d020b81bdc6c54cb1c9b0

Author: Eric Anholt 
Date:   Wed Aug 18 14:13:30 2010 -0700

ir_to_mesa: Fix leak of set_branchtargets temp data.

---

 src/mesa/program/ir_to_mesa.cpp |6 ++
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 5299d77..eb3be91 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2266,8 +2266,8 @@ set_branchtargets(ir_to_mesa_visitor *v,
   }
}
 
-   if_stack = (int *)calloc(if_count, sizeof(*if_stack));
-   loop_stack = (int *)calloc(loop_count, sizeof(*loop_stack));
+   if_stack = talloc_zero_array(v->mem_ctx, int, if_count);
+   loop_stack = talloc_zero_array(v->mem_ctx, int, loop_count);
 
for (i = 0; i < num_instructions; i++) {
   switch (mesa_instructions[i].Opcode) {
@@ -2319,8 +2319,6 @@ set_branchtargets(ir_to_mesa_visitor *v,
 break;
   }
}
-
-   free(if_stack);
 }
 
 static void

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


Mesa (master): glsl: Garbage collect old prototype for ir_to_mesa.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: e271384219ebc1f9e8afb63b20256f9d56102592
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e271384219ebc1f9e8afb63b20256f9d56102592

Author: Eric Anholt 
Date:   Wed Aug 18 12:04:43 2010 -0700

glsl: Garbage collect old prototype for ir_to_mesa.

---

 src/glsl/glsl_parser_extras.h |2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 3b53ba0..9e3cac2 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -209,6 +209,4 @@ extern bool _mesa_glsl_process_extension(const char *name, 
YYLTYPE *name_locp,
 extern const char *
 _mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target);
 
-void do_ir_to_mesa(exec_list *instructions);
-
 #endif /* GLSL_PARSER_EXTRAS_H */

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


Mesa (master): ir_to_mesa: Stop leaking the ir_instruction * annotation of our compile.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 850c659044d081c53713800cacf8d518fae6cd70
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=850c659044d081c53713800cacf8d518fae6cd70

Author: Eric Anholt 
Date:   Wed Aug 18 13:48:32 2010 -0700

ir_to_mesa: Stop leaking the ir_instruction * annotation of our compile.

---

 src/mesa/program/ir_to_mesa.cpp |3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 394370d..5299d77 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2412,7 +2412,6 @@ struct gl_program *
 get_mesa_program(GLcontext *ctx, struct gl_shader_program *shader_program,
 struct gl_shader *shader)
 {
-   void *mem_ctx = shader_program;
ir_to_mesa_visitor v;
struct prog_instruction *mesa_instructions, *mesa_inst;
ir_instruction **mesa_instruction_annotation;
@@ -2490,7 +2489,7 @@ get_mesa_program(GLcontext *ctx, struct gl_shader_program 
*shader_program,
mesa_instructions =
   (struct prog_instruction *)calloc(num_instructions,
sizeof(*mesa_instructions));
-   mesa_instruction_annotation = talloc_array(mem_ctx, ir_instruction *,
+   mesa_instruction_annotation = talloc_array(v.mem_ctx, ir_instruction *,
  num_instructions);
 
mesa_inst = mesa_instructions;

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


Mesa (master): mesa: Free linked shaders when deleting the shader program.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 56a0690a81cd6a0e7db4c041430ca38e5063e145
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=56a0690a81cd6a0e7db4c041430ca38e5063e145

Author: Eric Anholt 
Date:   Wed Aug 18 14:12:52 2010 -0700

mesa: Free linked shaders when deleting the shader program.

---

 src/mesa/main/shaderobj.c |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/shaderobj.c b/src/mesa/main/shaderobj.c
index 863d50f..1755e8a 100644
--- a/src/mesa/main/shaderobj.c
+++ b/src/mesa/main/shaderobj.c
@@ -314,6 +314,12 @@ _mesa_free_shader_program_data(GLcontext *ctx,
free(shProg->TransformFeedback.VaryingNames);
shProg->TransformFeedback.VaryingNames = NULL;
shProg->TransformFeedback.NumVarying = 0;
+
+
+   for (i = 0; i < shProg->_NumLinkedShaders; i++) {
+  ctx->Driver.DeleteShader(ctx, shProg->_LinkedShaders[i]);
+   }
+   shProg->_NumLinkedShaders = 0;
 }
 
 

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


Mesa (master): mesa: Free old linked shaders when relinking new shaders.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 5d0f430e8ed01db29d11d22e4b6c3760d8c39f8f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5d0f430e8ed01db29d11d22e4b6c3760d8c39f8f

Author: Eric Anholt 
Date:   Wed Aug 18 12:02:35 2010 -0700

mesa: Free old linked shaders when relinking new shaders.

---

 src/glsl/linker.cpp |   15 ++-
 src/glsl/main.cpp   |6 +-
 src/glsl/program.h  |2 +-
 src/mesa/program/ir_to_mesa.cpp |2 +-
 4 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 4172e41..b256574 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -674,7 +674,8 @@ get_main_function_signature(gl_shader *sh)
  * shader is returned.
  */
 static struct gl_shader *
-link_intrastage_shaders(struct gl_shader_program *prog,
+link_intrastage_shaders(GLcontext *ctx,
+   struct gl_shader_program *prog,
struct gl_shader **shader_list,
unsigned num_shaders)
 {
@@ -747,7 +748,7 @@ link_intrastage_shaders(struct gl_shader_program *prog,
   return NULL;
}
 
-   gl_shader *const linked = _mesa_new_shader(NULL, 0, main->Type);
+   gl_shader *const linked = ctx->Driver.NewShader(NULL, 0, main->Type);
linked->ir = new(linked) exec_list;
clone_ir_list(linked, linked->ir, main->ir);
 
@@ -1212,7 +1213,7 @@ assign_varying_locations(struct gl_shader_program *prog,
 
 
 void
-link_shaders(struct gl_shader_program *prog)
+link_shaders(GLcontext *ctx, struct gl_shader_program *prog)
 {
prog->LinkStatus = false;
prog->Validated = false;
@@ -1270,12 +1271,16 @@ link_shaders(struct gl_shader_program *prog)
 
prog->Version = max_version;
 
+   for (unsigned int i = 0; i < prog->_NumLinkedShaders; i++) {
+  ctx->Driver.DeleteShader(ctx, prog->_LinkedShaders[i]);
+   }
+
/* Link all shaders for a particular stage and validate the result.
 */
prog->_NumLinkedShaders = 0;
if (num_vert_shaders > 0) {
   gl_shader *const sh =
-link_intrastage_shaders(prog, vert_shader_list, num_vert_shaders);
+link_intrastage_shaders(ctx, prog, vert_shader_list, num_vert_shaders);
 
   if (sh == NULL)
 goto done;
@@ -1289,7 +1294,7 @@ link_shaders(struct gl_shader_program *prog)
 
if (num_frag_shaders > 0) {
   gl_shader *const sh =
-link_intrastage_shaders(prog, frag_shader_list, num_frag_shaders);
+link_intrastage_shaders(ctx, prog, frag_shader_list, num_frag_shaders);
 
   if (sh == NULL)
 goto done;
diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index 24d6076..cb9f8a5 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -209,6 +209,10 @@ int
 main(int argc, char **argv)
 {
int status = EXIT_SUCCESS;
+   GLcontext local_ctx;
+   GLcontext *ctx = &local_ctx;
+
+   ctx->Driver.NewShader = _mesa_new_shader;
 
int c;
int idx = 0;
@@ -265,7 +269,7 @@ main(int argc, char **argv)
}
 
if ((status == EXIT_SUCCESS) && do_link)  {
-  link_shaders(whole_program);
+  link_shaders(ctx, whole_program);
   status = (whole_program->LinkStatus) ? EXIT_SUCCESS : EXIT_FAILURE;
 
   if (strlen(whole_program->InfoLog) > 0)
diff --git a/src/glsl/program.h b/src/glsl/program.h
index 0a49203..ea2c4ab 100644
--- a/src/glsl/program.h
+++ b/src/glsl/program.h
@@ -30,4 +30,4 @@ extern "C" {
 }
 
 extern void
-link_shaders(struct gl_shader_program *prog);
+link_shaders(GLcontext *ctx, struct gl_shader_program *prog);
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 4f49943..394370d 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2740,7 +2740,7 @@ _mesa_glsl_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
_mesa_reference_fragprog(ctx, &prog->FragmentProgram, NULL);
 
if (prog->LinkStatus) {
-  link_shaders(prog);
+  link_shaders(ctx, prog);
 
   /* We don't use the linker's uniforms list, and cook up our own at
* generate time.

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


Mesa (master): glsl2: Fix copy'n' paste hilarity leading to leaking in the refcount visitor.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 0b09e6410f1173c2f69b601e43c5b14d8ad97345
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0b09e6410f1173c2f69b601e43c5b14d8ad97345

Author: Eric Anholt 
Date:   Wed Aug 18 11:42:42 2010 -0700

glsl2: Fix copy'n'paste hilarity leading to leaking in the refcount visitor.

---

 src/glsl/ir_dead_code.cpp   |1 -
 src/glsl/ir_variable_refcount.h |2 +-
 2 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/src/glsl/ir_dead_code.cpp b/src/glsl/ir_dead_code.cpp
index fce9212..7ff580d 100644
--- a/src/glsl/ir_dead_code.cpp
+++ b/src/glsl/ir_dead_code.cpp
@@ -101,7 +101,6 @@ do_dead_code(exec_list *instructions)
 }
   }
}
-   talloc_free(v.mem_ctx);
 
return progress;
 }
diff --git a/src/glsl/ir_variable_refcount.h b/src/glsl/ir_variable_refcount.h
index 30dd2bd..059ea09 100644
--- a/src/glsl/ir_variable_refcount.h
+++ b/src/glsl/ir_variable_refcount.h
@@ -67,7 +67,7 @@ public:
 
~ir_variable_refcount_visitor(void)
{
-  this->mem_ctx = talloc_new(NULL);
+  talloc_free(this->mem_ctx);
}
 
virtual ir_visitor_status visit(ir_variable *);

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


Mesa (master): ir_to_mesa: Free the ir_to_mesa temporary storage when we' re done.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: abc6d7e0b4b04c75129d24c3cb6f021b92cd46f6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=abc6d7e0b4b04c75129d24c3cb6f021b92cd46f6

Author: Eric Anholt 
Date:   Wed Aug 18 11:37:18 2010 -0700

ir_to_mesa: Free the ir_to_mesa temporary storage when we're done.

---

 src/mesa/program/ir_to_mesa.cpp |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 8ed3834..4f49943 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2212,10 +2212,12 @@ ir_to_mesa_visitor::ir_to_mesa_visitor()
next_signature_id = 1;
sampler_map = NULL;
current_function = NULL;
+   mem_ctx = talloc_new(NULL);
 }
 
 ir_to_mesa_visitor::~ir_to_mesa_visitor()
 {
+   talloc_free(mem_ctx);
if (this->sampler_map)
   hash_table_dtor(this->sampler_map);
 }
@@ -2445,8 +2447,6 @@ get_mesa_program(GLcontext *ctx, struct gl_shader_program 
*shader_program,
v.ctx = ctx;
v.prog = prog;
 
-   v.mem_ctx = talloc_new(NULL);
-
/* Emit Mesa IR for main(). */
visit_exec_list(shader->ir, &v);
v.ir_to_mesa_emit_op0(NULL, OPCODE_END);

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


Mesa (master): mesa: Hang the compiled shader off the shader->ir, not the shader.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 4a6a4316846ead3ec12759c96ecc4b61491aad65
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4a6a4316846ead3ec12759c96ecc4b61491aad65

Author: Eric Anholt 
Date:   Wed Aug 18 11:36:09 2010 -0700

mesa: Hang the compiled shader off the shader->ir, not the shader.

Otherwise, with repeated program recompile, we never free the results
of the previous compile.

---

 src/mesa/program/ir_to_mesa.cpp |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 58d3b41..8ed3834 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2662,6 +2662,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct 
gl_shader *shader)
  _mesa_glsl_lexer_dtor(state);
}
 
+   talloc_free(shader->ir);
shader->ir = new(shader) exec_list;
if (!state->error && !state->translation_unit.is_empty())
   _mesa_ast_to_hir(shader->ir, state);
@@ -2706,7 +2707,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct 
gl_shader *shader)
}
 
/* Retain any live IR, but trash the rest. */
-   reparent_ir(shader->ir, shader);
+   reparent_ir(shader->ir, shader->ir);
 
talloc_free(state);
 

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


Mesa (master): mesa: Make MESA_GLSL=dump include when compile/link fails, and the info log.

2010-08-18 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 0df61bdb669d03d9c25e49d5698f193deca3cf6d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0df61bdb669d03d9c25e49d5698f193deca3cf6d

Author: Eric Anholt 
Date:   Wed Aug 18 11:35:15 2010 -0700

mesa: Make MESA_GLSL=dump include when compile/link fails, and the info log.

---

 src/mesa/program/ir_to_mesa.cpp |   25 -
 1 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 7de1939..58d3b41 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2691,10 +2691,18 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct 
gl_shader *shader)
   _mesa_write_shader_to_file(shader);
}
 
-   if ((ctx->Shader.Flags & GLSL_DUMP) && shader->CompileStatus) {
-  printf("GLSL IR for shader %d:\n", shader->Name);
-  _mesa_print_ir(shader->ir, NULL);
-  printf("\n\n");
+   if (ctx->Shader.Flags & GLSL_DUMP) {
+  if (shader->CompileStatus) {
+printf("GLSL IR for shader %d:\n", shader->Name);
+_mesa_print_ir(shader->ir, NULL);
+printf("\n\n");
+  } else {
+printf("GLSL shader %d failed to compile.\n", shader->Name);
+  }
+  if (shader->InfoLog && shader->InfoLog[0] != 0) {
+printf("GLSL shader %d info log:\n", shader->Name);
+printf("%s\n", shader->InfoLog);
+  }
}
 
/* Retain any live IR, but trash the rest. */
@@ -2741,8 +2749,15 @@ _mesa_glsl_link_shader(GLcontext *ctx, struct 
gl_shader_program *prog)
}
 
if (prog->LinkStatus) {
-  if (!ctx->Driver.LinkShader(ctx, prog))
+  if (!ctx->Driver.LinkShader(ctx, prog)) {
 prog->LinkStatus = GL_FALSE;
+printf("GLSL shader program %d failed to link\n", prog->Name);
+  }
+
+  if (prog->InfoLog && prog->InfoLog[0] != 0) {
+printf("GLSL shader program %d info log:\n", prog->Name);
+printf("%s\n", prog->InfoLog);
+  }
}
 }
 

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


Mesa (master): glsl: Fix scoping bug in if statements.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 665d75cc5a23f8024034d0c4176fb281f94a30e9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=665d75cc5a23f8024034d0c4176fb281f94a30e9

Author: Kenneth Graunke 
Date:   Wed Aug 18 13:54:50 2010 -0700

glsl: Fix scoping bug in if statements.

Fixes glslparsertest/glsl2/scoping-01.frag (successfully compiled but
should've failed) and scoping-02.frag (assertion triggered).

---

 src/glsl/ast_to_hir.cpp |   10 --
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 6e5d01e..bd1ab78 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -2395,11 +2395,17 @@ ast_selection_statement::hir(exec_list *instructions,
 
ir_if *const stmt = new(ctx) ir_if(condition);
 
-   if (then_statement != NULL)
+   if (then_statement != NULL) {
+  state->symbols->push_scope();
   then_statement->hir(& stmt->then_instructions, state);
+  state->symbols->pop_scope();
+   }
 
-   if (else_statement != NULL)
+   if (else_statement != NULL) {
+  state->symbols->push_scope();
   else_statement->hir(& stmt->else_instructions, state);
+  state->symbols->pop_scope();
+   }
 
instructions->push_tail(stmt);
 

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


Mesa (master): glsl: Refresh autogenerated file builtin_function.cpp.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: cf37ba34301374aecf16fea659ac70b000a11a55
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf37ba34301374aecf16fea659ac70b000a11a55

Author: Kenneth Graunke 
Date:   Wed Aug 18 13:20:58 2010 -0700

glsl: Refresh autogenerated file builtin_function.cpp.

---

 src/glsl/builtin_function.cpp |20903 +
 1 files changed, 6719 insertions(+), 14184 deletions(-)

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


Mesa (master): glsl/builtins: Add forgotten hyperbolic trig builtins in 1. 30 profiles.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 08a84c6a4aa8f69af6b6981f62d81dd0424dae4a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=08a84c6a4aa8f69af6b6981f62d81dd0424dae4a

Author: Kenneth Graunke 
Date:   Wed Aug 18 13:16:50 2010 -0700

glsl/builtins: Add forgotten hyperbolic trig builtins in 1.30 profiles.

---

 src/glsl/builtins/profiles/130.frag |   32 
 src/glsl/builtins/profiles/130.vert |   32 
 2 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/src/glsl/builtins/profiles/130.frag 
b/src/glsl/builtins/profiles/130.frag
index 39c73c4..aa7a6ad 100644
--- a/src/glsl/builtins/profiles/130.frag
+++ b/src/glsl/builtins/profiles/130.frag
@@ -47,6 +47,38 @@ vec2  atan(vec2  y_over_x);
 vec3  atan(vec3  y_over_x);
 vec4  atan(vec4  y_over_x);
 
+float sinh(float x);
+vec2  sinh(vec2  x);
+vec3  sinh(vec3  x);
+vec4  sinh(vec4  x);
+
+float cosh(float x);
+vec2  cosh(vec2  x);
+vec3  cosh(vec3  x);
+vec4  cosh(vec4  x);
+
+float tanh(float x);
+vec2  tanh(vec2  x);
+vec3  tanh(vec3  x);
+vec4  tanh(vec4  x);
+
+#if 0
+float asinh(float x);
+vec2  asinh(vec2  x);
+vec3  asinh(vec3  x);
+vec4  asinh(vec4  x);
+
+float acosh(float x);
+vec2  acosh(vec2  x);
+vec3  acosh(vec3  x);
+vec4  acosh(vec4  x);
+
+float atanh(float x);
+vec2  atanh(vec2  x);
+vec3  atanh(vec3  x);
+vec4  atanh(vec4  x);
+#endif
+
 /*
  * 8.2 - Exponential Functions
  */
diff --git a/src/glsl/builtins/profiles/130.vert 
b/src/glsl/builtins/profiles/130.vert
index 1aaad19..d0152b0 100644
--- a/src/glsl/builtins/profiles/130.vert
+++ b/src/glsl/builtins/profiles/130.vert
@@ -47,6 +47,38 @@ vec2  atan(vec2  y_over_x);
 vec3  atan(vec3  y_over_x);
 vec4  atan(vec4  y_over_x);
 
+float sinh(float x);
+vec2  sinh(vec2  x);
+vec3  sinh(vec3  x);
+vec4  sinh(vec4  x);
+
+float cosh(float x);
+vec2  cosh(vec2  x);
+vec3  cosh(vec3  x);
+vec4  cosh(vec4  x);
+
+float tanh(float x);
+vec2  tanh(vec2  x);
+vec3  tanh(vec3  x);
+vec4  tanh(vec4  x);
+
+#if 0
+float asinh(float x);
+vec2  asinh(vec2  x);
+vec3  asinh(vec3  x);
+vec4  asinh(vec4  x);
+
+float acosh(float x);
+vec2  acosh(vec2  x);
+vec3  acosh(vec3  x);
+vec4  acosh(vec4  x);
+
+float atanh(float x);
+vec2  atanh(vec2  x);
+vec3  atanh(vec3  x);
+vec4  atanh(vec4  x);
+#endif
+
 /*
  * 8.2 - Exponential Functions
  */

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


Mesa (master): generate_builtins.py: Clean up generated output a bit.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 011be6b5948e66adb468aef292a7c8e9be600a89
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=011be6b5948e66adb468aef292a7c8e9be600a89

Author: Kenneth Graunke 
Date:   Wed Aug 18 13:17:27 2010 -0700

generate_builtins.py: Clean up generated output a bit.

This should make it easier to diff the output, clean up some of the
insane whitespace, and make the strings a bit smaller.

We'll probably need to split up the prototype strings eventually, but
for now, this gets it under the 65K mark.

---

 src/glsl/builtins/tools/generate_builtins.py |   12 
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/src/glsl/builtins/tools/generate_builtins.py 
b/src/glsl/builtins/tools/generate_builtins.py
index 2eb67e3..6c38922 100755
--- a/src/glsl/builtins/tools/generate_builtins.py
+++ b/src/glsl/builtins/tools/generate_builtins.py
@@ -38,6 +38,14 @@ def run_compiler(args):
 command = [compiler_path, '--dump-lir'] + args
 p = Popen(command, 1, stdout=PIPE, shell=False)
 output = p.communicate()[0]
+
+# Clean up output a bit by killing whitespace before a closing paren.
+kill_paren_whitespace = re.compile(r'[ \n]*\)', re.MULTILINE);
+output = kill_paren_whitespace.sub(')', output);
+
+# Also toss any duplicate newlines
+output = output.replace('\n\n', '\n')
+
 return (output, p.returncode)
 
 def write_profile(filename, profile):
@@ -51,6 +59,10 @@ def write_profile(filename, profile):
 kill_globals = re.compile(r'^\(declare.*\n', re.MULTILINE);
 proto_ir = kill_globals.sub('', proto_ir)
 
+# Kill pointer addresses.  They're not necessary in prototypes and just
+# clutter the diff output.
+proto_ir = re.sub(r'@0x[0-9a-f]+', '', proto_ir);
+
 print 'static const char *prototypes_for_' + profile + ' ='
 print stringify(proto_ir), ';'
 

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


Mesa (master): ir_constant_expression: Implement equal/ notEqual for booleans.

2010-08-18 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: d12cb77d85ec726a67c2099c4105df63829b45a4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d12cb77d85ec726a67c2099c4105df63829b45a4

Author: Kenneth Graunke 
Date:   Wed Aug 18 12:06:25 2010 -0700

ir_constant_expression: Implement equal/notEqual for booleans.

Calls to equal(bvec, bvec) or notEqual(bvec, bvec) previously caused an
assertion.  Fixes piglit tests glsl-const-builtin-equal-bool and
glsl-const-builtin-notEqual-bool.

---

 src/glsl/ir_constant_expression.cpp |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/glsl/ir_constant_expression.cpp 
b/src/glsl/ir_constant_expression.cpp
index 0a92424..54f14d1 100644
--- a/src/glsl/ir_constant_expression.cpp
+++ b/src/glsl/ir_constant_expression.cpp
@@ -904,6 +904,9 @@ ir_call::constant_expression_value()
 case GLSL_TYPE_FLOAT:
data.b[c] = op[0]->value.f[c] == op[1]->value.f[c];
break;
+case GLSL_TYPE_BOOL:
+   data.b[c] = op[0]->value.b[c] == op[1]->value.b[c];
+   break;
 default:
assert(!"Should not get here.");
 }
@@ -1047,6 +1050,9 @@ ir_call::constant_expression_value()
 case GLSL_TYPE_FLOAT:
data.b[c] = op[0]->value.f[c] != op[1]->value.f[c];
break;
+case GLSL_TYPE_BOOL:
+   data.b[c] = op[0]->value.b[c] != op[1]->value.b[c];
+   break;
 default:
assert(!"Should not get here.");
 }

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


Mesa (gallium-rect-textures): nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: fe7451ae8754d3318b29681812787cc0e1059143
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe7451ae8754d3318b29681812787cc0e1059143

Author: Luca Barbieri 
Date:   Wed Aug 18 17:29:59 2010 +0200

nv50: use NV50TIC_0_2_TARGET_RECT (?!?)

Is this the right thing?!?

---

 src/gallium/drivers/nv50/nv50_tex.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_tex.c 
b/src/gallium/drivers/nv50/nv50_tex.c
index 4db53f7..d41d9c5 100644
--- a/src/gallium/drivers/nv50/nv50_tex.c
+++ b/src/gallium/drivers/nv50/nv50_tex.c
@@ -131,9 +131,11 @@ nv50_tex_construct(struct nv50_sampler_view *view)
tic[2] |= NV50TIC_0_2_TARGET_1D;
break;
case PIPE_TEXTURE_2D:
-   case PIPE_TEXTURE_RECT:
tic[2] |= NV50TIC_0_2_TARGET_2D;
break;
+   case PIPE_TEXTURE_RECT:
+   tic[2] |= NV50TIC_0_2_TARGET_RECT;
+   break;
case PIPE_TEXTURE_3D:
tic[2] |= NV50TIC_0_2_TARGET_3D;
break;

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


Mesa (gallium-rect-textures): auxiliary: support using PIPE_TEXTURE_RECT internally

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: d1bb7254071fb21185069ad10e5024cab6e01d41
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d1bb7254071fb21185069ad10e5024cab6e01d41

Author: Luca Barbieri 
Date:   Fri Aug  6 07:39:21 2010 +0200

auxiliary: support using PIPE_TEXTURE_RECT internally

Currently Gallium internals always use PIPE_TEXTURE_2D and normalized
coordinates to access textures.

However, PIPE_TEXTURE_2D is not always supported for NPOT textures,
and PIPE_TEXTURE_RECT requires unnormalized coordinates.

Hence, this change adds support for both kinds of normalization.

---

 src/gallium/auxiliary/util/u_blit.c|   67 
 src/gallium/auxiliary/util/u_blitter.c |   48 +++
 2 files changed, 81 insertions(+), 34 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_blit.c 
b/src/gallium/auxiliary/util/u_blit.c
index 30c7a96..6fb341e 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -62,6 +62,7 @@ struct blit_state
struct pipe_viewport_state viewport;
struct pipe_clip_state clip;
struct pipe_vertex_element velem[2];
+   enum pipe_texture_target internal_target;
 
void *vs;
void *fs[TGSI_WRITEMASK_XYZW + 1];
@@ -110,7 +111,6 @@ util_create_blit(struct pipe_context *pipe, struct 
cso_context *cso)
ctx->sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
ctx->sampler.min_img_filter = 0; /* set later */
ctx->sampler.mag_img_filter = 0; /* set later */
-   ctx->sampler.normalized_coords = 1;
 
/* vertex elements state */
memset(&ctx->velem[0], 0, sizeof(ctx->velem[0]) * 2);
@@ -145,6 +145,11 @@ util_create_blit(struct pipe_context *pipe, struct 
cso_context *cso)
   ctx->vertices[i][1][3] = 1.0f; /* q */
}
 
+   if(pipe->screen->get_param(pipe->screen, PIPE_CAP_NPOT_TEXTURES))
+  ctx->internal_target = PIPE_TEXTURE_2D;
+   else
+  ctx->internal_target = PIPE_TEXTURE_RECT;
+
return ctx;
 }
 
@@ -296,6 +301,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
unsigned offset;
boolean overlap;
float s0, t0, s1, t1;
+   boolean normalized;
 
assert(filter == PIPE_TEX_MIPFILTER_NEAREST ||
   filter == PIPE_TEX_MIPFILTER_LINEAR);
@@ -335,7 +341,6 @@ util_blit_pixels_writemask(struct blit_state *ctx,
   return;
}
 
-
/* Create a temporary texture when src and dest alias or when src
 * is anything other than a 2d texture.
 * XXX should just use appropriate shader to access 1d / 3d slice / cube 
face,
@@ -373,7 +378,7 @@ util_blit_pixels_writemask(struct blit_state *ctx,
 
   /* create temp texture */
   memset(&texTemp, 0, sizeof(texTemp));
-  texTemp.target = PIPE_TEXTURE_2D;
+  texTemp.target = ctx->internal_target;
   texTemp.format = src_tex->format;
   texTemp.last_level = 0;
   texTemp.width0 = srcW;
@@ -393,10 +398,19 @@ util_blit_pixels_writemask(struct blit_state *ctx,
  src_tex, srcsub, srcLeft, srcTop, srcZ0, /* 
src */
  srcW, srcH); /* size */
 
-  s0 = 0.0f; 
-  s1 = 1.0f;
-  t0 = 0.0f;
-  t1 = 1.0f;
+  normalized = tex->target != PIPE_TEXTURE_RECT;
+  if(normalized) {
+ s0 = 0.0f;
+ s1 = 1.0f;
+ t0 = 0.0f;
+ t1 = 1.0f;
+  }
+  else {
+ s0 = 0;
+ s1 = srcW;
+ t0 = 0;
+ t1 = srcH;
+  }
 
   u_sampler_view_default_template(&sv_templ, tex, tex->format);
   sampler_view = pipe->create_sampler_view(pipe, tex, &sv_templ);
@@ -416,17 +430,25 @@ util_blit_pixels_writemask(struct blit_state *ctx,
  return;
   }
 
-  s0 = srcX0 / (float)(u_minify(sampler_view->texture->width0, 
srcsub.level));
-  s1 = srcX1 / (float)(u_minify(sampler_view->texture->width0, 
srcsub.level));
-  t0 = srcY0 / (float)(u_minify(sampler_view->texture->height0, 
srcsub.level));
-  t1 = srcY1 / (float)(u_minify(sampler_view->texture->height0, 
srcsub.level));
+  s0 = srcX0;
+  s1 = srcX1;
+  t0 = srcY0;
+  t1 = srcY1;
+  normalized = sampler_view->texture->target != PIPE_TEXTURE_RECT;
+  if(normalized)
+  {
+ s0 /= (float)(u_minify(sampler_view->texture->width0, srcsub.level));
+ s1 /= (float)(u_minify(sampler_view->texture->width0, srcsub.level));
+ t0 /= (float)(u_minify(sampler_view->texture->height0, srcsub.level));
+ t1 /= (float)(u_minify(sampler_view->texture->height0, srcsub.level));
+  }
}
 
 
-   assert(screen->is_format_supported(screen, sampler_view->format, 
PIPE_TEXTURE_2D,
+   assert(screen->is_format_supported(screen, sampler_view->format, 
ctx->internal_target,
   sampler_view->texture->nr_samples,
   PIPE_BIND_SAMPLER_VIEW, 0));
-   assert(screen->is_format_supported(screen, dst->format, PIPE_TEXTURE_2D,
+   assert(screen->is_format_s

Mesa (gallium-rect-textures): mesa/st: support using PIPE_TEXTURE_RECT internally

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 6d09c51a358a70d107e682fa6d4f3ba1938579ae
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6d09c51a358a70d107e682fa6d4f3ba1938579ae

Author: Luca Barbieri 
Date:   Fri Aug  6 07:39:21 2010 +0200

mesa/st: support using PIPE_TEXTURE_RECT internally

Currently Gallium internals always use PIPE_TEXTURE_2D and normalized
coordinates to access textures.

However, PIPE_TEXTURE_2D is not always supported for NPOT textures,
and PIPE_TEXTURE_RECT requires unnormalized coordinates.

Hence, this change adds support for both kinds of normalization.

---

 src/mesa/state_tracker/st_cb_bitmap.c |   23 ++-
 src/mesa/state_tracker/st_cb_drawpixels.c |   42 ++--
 src/mesa/state_tracker/st_context.c   |5 +++
 src/mesa/state_tracker/st_context.h   |3 +-
 4 files changed, 31 insertions(+), 42 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_bitmap.c 
b/src/mesa/state_tracker/st_cb_bitmap.c
index 91037ab..d40e413 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -275,7 +275,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei 
height,
/**
 * Create texture to hold bitmap pattern.
 */
-   pt = st_texture_create(st, PIPE_TEXTURE_2D, st->bitmap.tex_format,
+   pt = st_texture_create(st, st->internal_target, st->bitmap.tex_format,
   0, width, height, 1,
   PIPE_BIND_SAMPLER_VIEW);
if (!pt) {
@@ -304,7 +304,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei 
height,
 }
 
 static GLuint
-setup_bitmap_vertex_data(struct st_context *st,
+setup_bitmap_vertex_data(struct st_context *st, bool normalized,
  int x, int y, int width, int height,
  float z, const float color[4])
 {
@@ -316,13 +316,19 @@ setup_bitmap_vertex_data(struct st_context *st,
const GLfloat x1 = (GLfloat)(x + width);
const GLfloat y0 = (GLfloat)y;
const GLfloat y1 = (GLfloat)(y + height);
-   const GLfloat sLeft = (GLfloat)0.0, sRight = (GLfloat)1.0;
-   const GLfloat tTop = (GLfloat)0.0, tBot = (GLfloat)1.0 - tTop;
+   GLfloat sLeft = (GLfloat)0.0, sRight = (GLfloat)1.0;
+   GLfloat tTop = (GLfloat)0.0, tBot = (GLfloat)1.0 - tTop;
const GLfloat clip_x0 = (GLfloat)(x0 / fb_width * 2.0 - 1.0);
const GLfloat clip_y0 = (GLfloat)(y0 / fb_height * 2.0 - 1.0);
const GLfloat clip_x1 = (GLfloat)(x1 / fb_width * 2.0 - 1.0);
const GLfloat clip_y1 = (GLfloat)(y1 / fb_height * 2.0 - 1.0);
 
+   if(!normalized)
+   {
+  sRight = width;
+  tBot = height;
+   }
+
/* XXX: Need to improve buffer_write to allow NO_WAIT (as well as
 * no_flush) updates to buffers where we know there is no conflict
 * with previous data.  Currently using max_slots > 1 will cause
@@ -462,7 +468,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat 
z,
   for (i = 0; i < st->state.num_samplers; i++) {
  samplers[i] = &st->state.samplers[i];
   }
-  samplers[stfp->bitmap_sampler] = &st->bitmap.sampler;
+  samplers[stfp->bitmap_sampler] = 
&st->bitmap.samplers[sv->texture->target != PIPE_TEXTURE_RECT];
   cso_set_samplers(cso, num, (const struct pipe_sampler_state **) 
samplers);
}
 
@@ -499,7 +505,7 @@ draw_bitmap_quad(GLcontext *ctx, GLint x, GLint y, GLfloat 
z,
z = z * 2.0 - 1.0;
 
/* draw textured quad */
-   offset = setup_bitmap_vertex_data(st, x, y, width, height, z, color);
+   offset = setup_bitmap_vertex_data(st, sv->texture->target != 
PIPE_TEXTURE_RECT, x, y, width, height, z, color);
 
util_draw_vertex_buffer(pipe, st->bitmap.vbuf, offset,
PIPE_PRIM_TRIANGLE_FAN,
@@ -789,7 +795,7 @@ st_init_bitmap_functions(struct dd_function_table 
*functions)
 void
 st_init_bitmap(struct st_context *st)
 {
-   struct pipe_sampler_state *sampler = &st->bitmap.sampler;
+   struct pipe_sampler_state *sampler = &st->bitmap.samplers[0];
struct pipe_context *pipe = st->pipe;
struct pipe_screen *screen = pipe->screen;
 
@@ -801,7 +807,8 @@ st_init_bitmap(struct st_context *st)
sampler->min_img_filter = PIPE_TEX_FILTER_NEAREST;
sampler->min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
sampler->mag_img_filter = PIPE_TEX_FILTER_NEAREST;
-   sampler->normalized_coords = 1;
+   st->bitmap.samplers[1] = *sampler;
+   st->bitmap.samplers[1].normalized_coords = 1;
 
/* init baseline rasterizer state once */
memset(&st->bitmap.rasterizer, 0, sizeof(st->bitmap.rasterizer));
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c 
b/src/mesa/state_tracker/st_cb_drawpixels.c
index 69a3dd4..d934fdc 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -304,34 +304,9 @@ alloc_texture(struct st_context *st, GLsizei width, 
GLsizei height,
struct pipe_context *pipe = st->pipe;
struct pipe_screen *screen = pipe->screen;
s

Mesa (gallium-rect-textures): mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 338abab672939328d4b68024cf9494044dfc4103
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=338abab672939328d4b68024cf9494044dfc4103

Author: Luca Barbieri 
Date:   Thu Apr 15 09:04:20 2010 +0200

mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

---

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

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 4c3e368..a3c1ce3 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -74,9 +74,11 @@ gl_target_to_pipe(GLenum target)
   return PIPE_TEXTURE_1D;
 
case GL_TEXTURE_2D:
-   case GL_TEXTURE_RECTANGLE_NV:
   return PIPE_TEXTURE_2D;
 
+   case GL_TEXTURE_RECTANGLE_NV:
+  return PIPE_TEXTURE_RECT;
+
case GL_TEXTURE_3D:
   return PIPE_TEXTURE_3D;
 
diff --git a/src/mesa/state_tracker/st_texture.c 
b/src/mesa/state_tracker/st_texture.c
index add6e94..c6cf2ba 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -64,7 +64,7 @@ st_texture_create(struct st_context *st,
struct pipe_resource pt, *newtex;
struct pipe_screen *screen = st->pipe->screen;
 
-   assert(target <= PIPE_TEXTURE_CUBE);
+   assert(target < PIPE_MAX_TEXTURE_TYPES);
assert(width0 > 0);
assert(height0 > 0);
assert(depth0 > 0);

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


Mesa (gallium-rect-textures): u_blitter: use TGSI_TEXTURE_RECT

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: da37dfc9fc8b978fbb68d9372733a16a7e055735
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=da37dfc9fc8b978fbb68d9372733a16a7e055735

Author: Luca Barbieri 
Date:   Wed Aug 18 17:30:20 2010 +0200

u_blitter: use TGSI_TEXTURE_RECT

This seems to make sense, although I suspect the semantics of
TGSI_TEXTURE_RECT need to be closely reviewed.

---

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

diff --git a/src/gallium/auxiliary/util/u_blitter.c 
b/src/gallium/auxiliary/util/u_blitter.c
index 1d95280..163f3d6 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -569,7 +569,7 @@ pipe_tex_to_tgsi_tex(enum pipe_texture_target 
pipe_tex_target)
case PIPE_TEXTURE_2D:
   return TGSI_TEXTURE_2D;
case PIPE_TEXTURE_RECT:
-  return TGSI_TEXTURE_2D;
+  return TGSI_TEXTURE_RECT;
case PIPE_TEXTURE_3D:
   return TGSI_TEXTURE_3D;
case PIPE_TEXTURE_CUBE:

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


Mesa (gallium-rect-textures): gallium: make all checks for PIPE_TEXTURE_2D check for PIPE_TEXTURE_RECT too

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: f907b4c168d6174320c626c8067a11021b29610e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f907b4c168d6174320c626c8067a11021b29610e

Author: Luca Barbieri 
Date:   Wed Aug 18 17:28:08 2010 +0200

gallium: make all checks for PIPE_TEXTURE_2D check for PIPE_TEXTURE_RECT too

Searched for them with:
git grep -E 
'[!=]=.*PIPE_TEXTURE_2D|PIPE_TEXTURE_2D.*[!=]=|case.*PIPE_TEXTURE_2D'

Behavior hasn't been changed.

---

 src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c |7 +--
 src/gallium/auxiliary/util/u_blit.c   |3 ++-
 src/gallium/auxiliary/util/u_blitter.c|3 +++
 src/gallium/auxiliary/util/u_gen_mipmap.c |1 +
 src/gallium/auxiliary/util/u_surfaces.h   |4 ++--
 src/gallium/drivers/i915/i915_resource_texture.c  |5 -
 src/gallium/drivers/i965/brw_resource_texture.c   |4 +++-
 src/gallium/drivers/llvmpipe/lp_screen.c  |1 +
 src/gallium/drivers/llvmpipe/lp_texture.c |1 +
 src/gallium/drivers/nv50/nv50_miptree.c   |3 ++-
 src/gallium/drivers/nv50/nv50_tex.c   |1 +
 src/gallium/drivers/nvfx/nv30_fragtex.c   |1 +
 src/gallium/drivers/nvfx/nv40_fragtex.c   |1 +
 src/gallium/drivers/nvfx/nvfx_miptree.c   |3 ++-
 src/gallium/drivers/r300/r300_hyperz.c|3 ++-
 src/gallium/drivers/r300/r300_texture.c   |6 --
 src/gallium/drivers/r300/r300_texture_desc.c  |6 --
 src/gallium/drivers/r600/r600_state.c |1 +
 src/gallium/drivers/r600/r600_texture.c   |3 ++-
 src/gallium/drivers/softpipe/sp_screen.c  |1 +
 src/gallium/drivers/softpipe/sp_tex_sample.c  |2 ++
 src/gallium/drivers/svga/svga_resource_texture.c  |3 ++-
 src/gallium/drivers/svga/svga_tgsi_emit.h |1 +
 src/gallium/tests/python/tests/texture_blit.py|2 +-
 src/mesa/state_tracker/st_cb_bitmap.c |2 +-
 25 files changed, 50 insertions(+), 18 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c 
b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
index 806c7d5..f6b6162 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
@@ -176,6 +176,7 @@ texture_dims(enum pipe_texture_target tex)
case PIPE_TEXTURE_1D:
   return 1;
case PIPE_TEXTURE_2D:
+   case PIPE_TEXTURE_RECT:
case PIPE_TEXTURE_CUBE:
   return 2;
case PIPE_TEXTURE_3D:
@@ -1749,7 +1750,8 @@ lp_build_sample_2d_linear_aos(struct 
lp_build_sample_context *bld,
LLVMValueRef unswizzled[4];
LLVMValueRef stride;
 
-   assert(bld->static_state->target == PIPE_TEXTURE_2D);
+   assert(bld->static_state->target == PIPE_TEXTURE_2D
+ || bld->static_state->target == PIPE_TEXTURE_RECT);
assert(bld->static_state->min_img_filter == PIPE_TEX_FILTER_LINEAR);
assert(bld->static_state->mag_img_filter == PIPE_TEX_FILTER_LINEAR);
assert(bld->static_state->min_mip_filter == PIPE_TEX_MIPFILTER_NONE);
@@ -2077,7 +2079,8 @@ lp_build_sample_soa(LLVMBuilderRef builder,
}
else if (util_format_fits_8unorm(bld.format_desc) &&
 bld.format_desc->nr_channels > 1 &&
-static_state->target == PIPE_TEXTURE_2D &&
+(static_state->target == PIPE_TEXTURE_2D ||
+  static_state->target == PIPE_TEXTURE_RECT) &&
 static_state->min_img_filter == PIPE_TEX_FILTER_LINEAR &&
 static_state->mag_img_filter == PIPE_TEX_FILTER_LINEAR &&
 static_state->min_mip_filter == PIPE_TEX_MIPFILTER_NONE &&
diff --git a/src/gallium/auxiliary/util/u_blit.c 
b/src/gallium/auxiliary/util/u_blit.c
index 97fa99e..30c7a96 100644
--- a/src/gallium/auxiliary/util/u_blit.c
+++ b/src/gallium/auxiliary/util/u_blit.c
@@ -347,7 +347,8 @@ util_blit_pixels_writemask(struct blit_state *ctx,
dst->face == srcsub.face &&
dst->level == srcsub.level &&
dst->zslice == srcZ0) ||
-   src_tex->target != PIPE_TEXTURE_2D)
+   (src_tex->target != PIPE_TEXTURE_2D &&
+   src_tex->target != PIPE_TEXTURE_RECT))
{
   struct pipe_resource texTemp;
   struct pipe_resource *tex;
diff --git a/src/gallium/auxiliary/util/u_blitter.c 
b/src/gallium/auxiliary/util/u_blitter.c
index b5b86b7..1d95280 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -568,6 +568,8 @@ pipe_tex_to_tgsi_tex(enum pipe_texture_target 
pipe_tex_target)
   return TGSI_TEXTURE_1D;
case PIPE_TEXTURE_2D:
   return TGSI_TEXTURE_2D;
+   case PIPE_TEXTURE_RECT:
+  return TGSI_TEXTURE_2D;
case PIPE_TEXTURE_3D:
   return TGSI_TEXTURE_3D;
case PIPE_TEXTURE_CUBE:
@@ -806,6 +808,7 @@ void util_blitter_copy_region(struct blitter_context 
*blitter,
   /* Draw the quad with the draw_rectangle callback. */
   case PIPE_TEXTURE_1D:
   case PIPE_TEXTU

Mesa (gallium-rect-textures): gallium: add PIPE_TEXTURE_RECT target

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 84ce64c65c549151b4ed96661d462306aa898751
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=84ce64c65c549151b4ed96661d462306aa898751

Author: Luca Barbieri 
Date:   Thu Apr 15 09:02:29 2010 +0200

gallium: add PIPE_TEXTURE_RECT target

This allows to properly support OpenGL rectangle textures in a well
defined way, especially on drivers that don't expose
PIPE_CAP_NPOT_TEXTURES.

---

 src/gallium/docs/source/index.rst |1 +
 src/gallium/docs/source/resources.rst |   43 +
 src/gallium/include/pipe/p_defines.h  |4 ++-
 3 files changed, 47 insertions(+), 1 deletions(-)

diff --git a/src/gallium/docs/source/index.rst 
b/src/gallium/docs/source/index.rst
index 6c19842..2a73e3a 100644
--- a/src/gallium/docs/source/index.rst
+++ b/src/gallium/docs/source/index.rst
@@ -15,6 +15,7 @@ Contents:
debugging
tgsi
screen
+   resources
context
cso
distro
diff --git a/src/gallium/docs/source/resources.rst 
b/src/gallium/docs/source/resources.rst
new file mode 100644
index 000..da0f880
--- /dev/null
+++ b/src/gallium/docs/source/resources.rst
@@ -0,0 +1,43 @@
+Resources
+=
+
+Resources are a core part of Gallium's API.
+
+They represent objects that hold data: textures and buffers.
+
+They are mostly modelled after the resources in Direct3D 10/11, but with a
+different transfer/update mechanism, and more features for OpenGL support.
+
+Resource targets
+
+
+Resource targets determine the type of a resource.
+
+Note that drivers may not actually have the restrictions listed regarding
+coordinate normalization and wrap modes, and in fact efficient OpenCL
+support will probably require drivers that don't have any of them, which
+will probably advertised with an appropriate cap.
+
+TODO: document all targets. Note that both 3D and cube have restrictions
+that depend on the hardware generation.
+TODO: can buffers have a non-R8 format?
+
+PIPE_TEXTURE_RECT
+^
+2D surface with OpenGL GL_TEXTURE_RECTANGLE semantics.
+
+depth must be 1
+- last_level must be 0
+- Must use unnormalized coordinates
+- Must use a clamp wrap mode
+
+PIPE_TEXTURE_2D
+^^^
+2D surface accessed with normalized coordinates.
+
+- If PIPE_CAP_NPOT_TEXTURES is not supported,
+  width and height must be powers of two
+- Mipmaps can be used
+- Must use normalized coordinates
+- No special restrictions on wrap modes
+
diff --git a/src/gallium/include/pipe/p_defines.h 
b/src/gallium/include/pipe/p_defines.h
index 00aa207..35eccf1 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -135,13 +135,15 @@ enum pipe_error {
 #define PIPE_STENCIL_OP_DECR_WRAP  6
 #define PIPE_STENCIL_OP_INVERT 7
 
-/** Texture types */
+/** Texture types.
+ * See the documentation for info on PIPE_TEXTURE_RECT vs PIPE_TEXTURE_2D */
 enum pipe_texture_target {
PIPE_BUFFER   = 0,
PIPE_TEXTURE_1D   = 1,
PIPE_TEXTURE_2D   = 2,
PIPE_TEXTURE_3D   = 3,
PIPE_TEXTURE_CUBE = 4,
+   PIPE_TEXTURE_RECT = 5,
PIPE_MAX_TEXTURE_TYPES
 };
 

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


Mesa (gallium-rect-textures): mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

2010-08-18 Thread Luca Barbieri
Module: Mesa
Branch: gallium-rect-textures
Commit: 18cd153fe31a53f92f7ec1c1f93416ba8e7fd56f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=18cd153fe31a53f92f7ec1c1f93416ba8e7fd56f

Author: Luca Barbieri 
Date:   Thu Apr 15 09:04:20 2010 +0200

mesa/st: use PIPE_TEXTURE_RECT for GL_TEXTURE_RECTANGLE

---

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

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 4c3e368..a3c1ce3 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -74,9 +74,11 @@ gl_target_to_pipe(GLenum target)
   return PIPE_TEXTURE_1D;
 
case GL_TEXTURE_2D:
-   case GL_TEXTURE_RECTANGLE_NV:
   return PIPE_TEXTURE_2D;
 
+   case GL_TEXTURE_RECTANGLE_NV:
+  return PIPE_TEXTURE_RECT;
+
case GL_TEXTURE_3D:
   return PIPE_TEXTURE_3D;
 
diff --git a/src/mesa/state_tracker/st_texture.c 
b/src/mesa/state_tracker/st_texture.c
index add6e94..c6cf2ba 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -64,7 +64,7 @@ st_texture_create(struct st_context *st,
struct pipe_resource pt, *newtex;
struct pipe_screen *screen = st->pipe->screen;
 
-   assert(target <= PIPE_TEXTURE_CUBE);
+   assert(target < PIPE_MAX_TEXTURE_TYPES);
assert(width0 > 0);
assert(height0 > 0);
assert(depth0 > 0);

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


Mesa (master): r600: implement SSG instruction

2010-08-18 Thread Andre Maasikas
Module: Mesa
Branch: master
Commit: d442a01ac14382d83cdaac87d2832315ceb3e963
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d442a01ac14382d83cdaac87d2832315ceb3e963

Author: Andre Maasikas 
Date:   Wed Aug 18 14:14:38 2010 +0300

r600: implement SSG instruction

---

 src/mesa/drivers/dri/r600/r700_assembler.c |   66 
 src/mesa/drivers/dri/r600/r700_assembler.h |1 +
 2 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c 
b/src/mesa/drivers/dri/r600/r700_assembler.c
index 4902f76..2476174 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -4369,6 +4369,65 @@ GLboolean assemble_SLT(r700_AssemblerBase *pAsm)
 return GL_TRUE;
 }
  
+GLboolean assemble_SSG(r700_AssemblerBase *pAsm)
+{
+checkop1(pAsm);
+
+GLuint tmp = gethelpr(pAsm);
+/* tmp = (src > 0 ? 1 : src) */
+pAsm->D.dst.opcode = SQ_OP3_INST_CNDGT;
+pAsm->D.dst.op3= 1;
+pAsm->D.dst.rtype = DST_REG_TEMPORARY;
+pAsm->D.dst.reg   = tmp;
+
+if( GL_FALSE == assemble_src(pAsm, 0, -1) )
+{
+return GL_FALSE;
+}
+
+setswizzle_PVSSRC(&(pAsm->S[1].src), SQ_SEL_1);
+
+if( GL_FALSE == assemble_src(pAsm, 0, 2) )
+{
+return GL_FALSE;
+}
+
+if( GL_FALSE == next_ins(pAsm) )
+{
+return GL_FALSE;
+}
+
+/* dst = (-tmp > 0 ? -1 : tmp) */
+pAsm->D.dst.opcode = SQ_OP3_INST_CNDGT;
+pAsm->D.dst.op3= 1;
+
+if( GL_FALSE == assemble_dst(pAsm) )
+{
+return GL_FALSE;
+}
+
+setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE);
+pAsm->S[0].src.rtype = SRC_REG_TEMPORARY;
+pAsm->S[0].src.reg   = tmp;
+noswizzle_PVSSRC(&(pAsm->S[0].src));
+neg_PVSSRC(&(pAsm->S[0].src));
+
+setswizzle_PVSSRC(&(pAsm->S[1].src), SQ_SEL_1);
+neg_PVSSRC(&(pAsm->S[1].src));
+
+setaddrmode_PVSSRC(&(pAsm->S[2].src), ADDR_ABSOLUTE);
+pAsm->S[2].src.rtype = SRC_REG_TEMPORARY;
+pAsm->S[2].src.reg   = tmp;
+noswizzle_PVSSRC(&(pAsm->S[2].src));
+
+if( GL_FALSE == next_ins(pAsm) )
+{
+return GL_FALSE;
+}
+
+return GL_TRUE;
+}
+
 GLboolean assemble_STP(r700_AssemblerBase *pAsm) 
 {
 return GL_TRUE;
@@ -5893,6 +5952,13 @@ GLboolean AssembleInstr(GLuint uiFirstInst,
 //return GL_FALSE;
 //break;
 
+case OPCODE_SSG:
+if ( GL_FALSE == assemble_SSG(pR700AsmCode) )
+{
+return GL_FALSE;
+}
+break;
+
 case OPCODE_SWZ: 
 if ( GL_FALSE == assemble_MOV(pR700AsmCode) ) 
 {
diff --git a/src/mesa/drivers/dri/r600/r700_assembler.h 
b/src/mesa/drivers/dri/r600/r700_assembler.h
index ab954ec..f00f4da 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.h
+++ b/src/mesa/drivers/dri/r600/r700_assembler.h
@@ -625,6 +625,7 @@ GLboolean assemble_LOGIC_PRED(r700_AssemblerBase *pAsm, 
BITS opcode);
 GLboolean assemble_TRIG(r700_AssemblerBase *pAsm, BITS opcode);
 
 GLboolean assemble_SLT(r700_AssemblerBase *pAsm);
+GLboolean assemble_SSG(r700_AssemblerBase *pAsm);
 GLboolean assemble_STP(r700_AssemblerBase *pAsm);
 GLboolean assemble_TEX(r700_AssemblerBase *pAsm);
 GLboolean assemble_XPD(r700_AssemblerBase *pAsm);

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


Mesa (master): gallivm: Use proper index to lookup predicate register array .

2010-08-18 Thread Michał Król
Module: Mesa
Branch: master
Commit: 8690c6a6b4fb0b48e2ae75cd0f64de86b039081c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8690c6a6b4fb0b48e2ae75cd0f64de86b039081c

Author: michal 
Date:   Wed Aug 18 13:16:42 2010 +0200

gallivm: Use proper index to lookup predicate register array.

Doesn't fix anything, as those indices were both always 0.

---

 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 0aa64af..ca8db9c 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -802,7 +802,7 @@ emit_store(
 
case TGSI_FILE_PREDICATE:
   lp_exec_mask_store(&bld->exec_mask, pred, value,
- bld->preds[index][chan_index]);
+ bld->preds[reg->Register.Index][chan_index]);
   break;
 
default:

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


Mesa (master): r600: implement DP2 opcode

2010-08-18 Thread Andre Maasikas
Module: Mesa
Branch: master
Commit: c17d5de593fbfee91b799894b1c1a8a37a6a9c95
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c17d5de593fbfee91b799894b1c1a8a37a6a9c95

Author: Andre Maasikas 
Date:   Wed Aug 18 11:57:28 2010 +0300

r600: implement DP2 opcode

---

 src/mesa/drivers/dri/r600/r700_assembler.c |   12 ++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c 
b/src/mesa/drivers/dri/r600/r700_assembler.c
index 94bc261..4902f76 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -3017,7 +3017,14 @@ GLboolean assemble_DOT(r700_AssemblerBase *pAsm)
 return GL_FALSE;
 }
 
-if(OPCODE_DP3 == pAsm->pILInst[pAsm->uiCurInst].Opcode)
+if(OPCODE_DP2 == pAsm->pILInst[pAsm->uiCurInst].Opcode)
+{
+   zerocomp_PVSSRC(&(pAsm->S[0].src),2);
+   zerocomp_PVSSRC(&(pAsm->S[0].src),3);
+   zerocomp_PVSSRC(&(pAsm->S[1].src),2);
+   zerocomp_PVSSRC(&(pAsm->S[1].src),3);
+}
+else if(OPCODE_DP3 == pAsm->pILInst[pAsm->uiCurInst].Opcode)
 {
 zerocomp_PVSSRC(&(pAsm->S[0].src), 3);
 zerocomp_PVSSRC(&(pAsm->S[1].src), 3);
@@ -5694,6 +5701,7 @@ GLboolean AssembleInstr(GLuint uiFirstInst,
 return GL_FALSE;
 break;  
 
+case OPCODE_DP2:
 case OPCODE_DP3: 
 case OPCODE_DP4: 
 case OPCODE_DPH: 
@@ -6019,7 +6027,7 @@ GLboolean AssembleInstr(GLuint uiFirstInst,
 return GL_TRUE;
 
 default:
-radeon_error("internal: unknown instruction\n");
+radeon_error("r600: unknown instruction %d\n", pILInst[i].Opcode);
 return GL_FALSE;
 }
 }

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