Mesa (master): r600: Flip point sprite coordinates when rendering to an FBO .

2010-07-22 Thread Alex Deucher
Module: Mesa
Branch: master
Commit: 2fdff50999825f5698f1f7f88565162f39227b2f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2fdff50999825f5698f1f7f88565162f39227b2f

Author: Henri Verbeet 
Date:   Thu Jul 22 11:10:11 2010 -0400

r600: Flip point sprite coordinates when rendering to an FBO.

This supersedes 
http://lists.freedesktop.org/archives/mesa-dev/2010-July/001442.html.

---

 src/mesa/drivers/dri/r600/r700_fragprog.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_fragprog.c 
b/src/mesa/drivers/dri/r600/r700_fragprog.c
index bf17a97..f9d84b6 100644
--- a/src/mesa/drivers/dri/r600/r700_fragprog.c
+++ b/src/mesa/drivers/dri/r600/r700_fragprog.c
@@ -587,7 +587,9 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx)
 SETfield(r700->SPI_INTERP_CONTROL_0.u32All, SPI_PNT_SPRITE_SEL_T, 
PNT_SPRITE_OVRD_Y_shift, PNT_SPRITE_OVRD_Y_mask);
 SETfield(r700->SPI_INTERP_CONTROL_0.u32All, SPI_PNT_SPRITE_SEL_0, 
PNT_SPRITE_OVRD_Z_shift, PNT_SPRITE_OVRD_Z_mask);
 SETfield(r700->SPI_INTERP_CONTROL_0.u32All, SPI_PNT_SPRITE_SEL_1, 
PNT_SPRITE_OVRD_W_shift, PNT_SPRITE_OVRD_W_mask);
-if(ctx->Point.SpriteOrigin == GL_LOWER_LEFT)
+/* Like e.g. viewport and winding, point sprite coordinates are
+ * inverted when rendering to FBO. */
+if ((ctx->Point.SpriteOrigin == GL_LOWER_LEFT) == 
!ctx->DrawBuffer->Name)
 SETbit(r700->SPI_INTERP_CONTROL_0.u32All, PNT_SPRITE_TOP_1_bit);
 else
 CLEARbit(r700->SPI_INTERP_CONTROL_0.u32All, PNT_SPRITE_TOP_1_bit);

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


Mesa (master): i965: Fix up VS temporary array access for fixed index offset != 0.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: b69ef5744a5caf5cc169abf47ed2040f7ea8b923
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b69ef5744a5caf5cc169abf47ed2040f7ea8b923

Author: Eric Anholt 
Date:   Thu Jul 22 00:06:10 2010 -0700

i965: Fix up VS temporary array access for fixed index offset != 0.

---

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

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c 
b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 9c2f722..bb82147 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -972,7 +972,7 @@ static struct brw_reg deref( struct brw_vs_compile *c,
struct brw_reg tmp = vec4(get_tmp(c));
struct brw_reg addr_reg = c->regs[PROGRAM_ADDRESS][0];
struct brw_reg vp_address = retype(vec1(addr_reg), BRW_REGISTER_TYPE_UW);
-   GLuint byte_offset = arg.nr * 32 + arg.subnr + offset * 16;
+   GLuint byte_offset = arg.nr * 32 + arg.subnr + offset * reg_size;
struct brw_reg indirect = brw_vec4_indirect(0,0);
struct brw_reg acc = retype(brw_acc_reg(), BRW_REGISTER_TYPE_D);
 

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


Mesa (master): i965: Avoid extra MOV in VS indirect register reads.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 86fb92f59c98168d41c7d827f60c12b244f26382
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=86fb92f59c98168d41c7d827f60c12b244f26382

Author: Eric Anholt 
Date:   Thu Jul 22 01:27:15 2010 -0700

i965: Avoid extra MOV in VS indirect register reads.

---

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

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c 
b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index bb82147..ae6cdcb 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -969,34 +969,35 @@ static struct brw_reg deref( struct brw_vs_compile *c,
 GLuint reg_size )
 {
struct brw_compile *p = &c->func;
-   struct brw_reg tmp = vec4(get_tmp(c));
+   struct brw_reg tmp = get_tmp(c);
struct brw_reg addr_reg = c->regs[PROGRAM_ADDRESS][0];
-   struct brw_reg vp_address = retype(vec1(addr_reg), BRW_REGISTER_TYPE_UW);
+   struct brw_reg vp_address = retype(vec1(addr_reg), BRW_REGISTER_TYPE_D);
GLuint byte_offset = arg.nr * 32 + arg.subnr + offset * reg_size;
struct brw_reg indirect = brw_vec4_indirect(0,0);
-   struct brw_reg acc = retype(brw_acc_reg(), BRW_REGISTER_TYPE_D);
+   struct brw_reg acc = retype(vec1(get_tmp(c)), BRW_REGISTER_TYPE_UW);
+
+   /* Set the vertical stride on the register access so that the first
+* 4 components come from a0.0 and the second 4 from a0.1.
+*/
+   indirect.vstride = BRW_VERTICAL_STRIDE_ONE_DIMENSIONAL;
 
{
   brw_push_insn_state(p);
   brw_set_access_mode(p, BRW_ALIGN_1);
 
-  /* This is pretty clunky - load the address register twice and
-   * fetch each 4-dword value in turn.  There must be a way to do
-   * this in a single pass, but I couldn't get it to work.
-   */
-  brw_MUL(p, acc, vp_address, brw_imm_d(reg_size));
-  brw_ADD(p, brw_address_reg(0), acc, brw_imm_d(byte_offset));
-  brw_MOV(p, tmp, indirect);
+  brw_MUL(p, acc, vp_address, brw_imm_uw(reg_size));
+  brw_ADD(p, brw_address_reg(0), acc, brw_imm_uw(byte_offset));
 
-  brw_MUL(p, acc, suboffset(vp_address, 8), brw_imm_d(reg_size));
-  brw_ADD(p, brw_address_reg(0), acc, brw_imm_d(byte_offset));
-  brw_MOV(p, suboffset(tmp, 4), indirect);
+  brw_MUL(p, acc, suboffset(vp_address, 4), brw_imm_uw(reg_size));
+  brw_ADD(p, brw_address_reg(1), acc, brw_imm_uw(byte_offset));
+
+  brw_MOV(p, tmp, indirect);
 
   brw_pop_insn_state(p);
}
-   
+
/* NOTE: tmp not released */
-   return vec8(tmp);
+   return tmp;
 }
 
 

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


Mesa (master): i965: Fix the disasm output for da16 src widths.

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

Author: Eric Anholt 
Date:   Thu Jul 22 01:53:43 2010 -0700

i965: Fix the disasm output for da16 src widths.

This has confused me twice now.  It's a fixed width of 4 (usually a
region description of <4,4,1>), not 1.  If it was 1, we'd have been
skipping all over register space.

---

 src/mesa/drivers/dri/i965/brw_disasm.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_disasm.c 
b/src/mesa/drivers/dri/i965/brw_disasm.c
index 52865c7..d230714 100644
--- a/src/mesa/drivers/dri/i965/brw_disasm.c
+++ b/src/mesa/drivers/dri/i965/brw_disasm.c
@@ -598,7 +598,7 @@ static int src_da16 (FILE *file,
format (file, ".%d", _subreg_nr);
 string (file, "<");
 err |= control (file, "vert stride", vert_stride, _vert_stride, NULL);
-string (file, ",1,1>");
+string (file, ",4,1>");
 err |= control (file, "src da16 reg type", reg_encoding, _reg_type, NULL);
 /*
  * Three kinds of swizzle display:

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


Mesa (master): i965: Respect VS/VP point size result when enabled.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 63ba1ec3c1192a1b7299e5768e7721638cd5fa0b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=63ba1ec3c1192a1b7299e5768e7721638cd5fa0b

Author: Eric Anholt 
Date:   Thu Jul 22 10:04:24 2010 -0700

i965: Respect VS/VP point size result when enabled.

Fixes glsl-vs-point-size.

---

 src/mesa/drivers/dri/i965/brw_sf_state.c |7 ---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_sf_state.c 
b/src/mesa/drivers/dri/i965/brw_sf_state.c
index e290ca9..914f275 100644
--- a/src/mesa/drivers/dri/i965/brw_sf_state.c
+++ b/src/mesa/drivers/dri/i965/brw_sf_state.c
@@ -130,7 +130,7 @@ struct brw_sf_unit_key {
unsigned scissor:1;
unsigned line_smooth:1;
unsigned point_sprite:1;
-   unsigned point_attenuated:1;
+   unsigned use_vs_point_size:1;
unsigned render_to_fbo:1;
float line_width;
float point_size;
@@ -164,7 +164,8 @@ sf_unit_populate_key(struct brw_context *brw, struct 
brw_sf_unit_key *key)
 
key->point_sprite = ctx->Point.PointSprite;
key->point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize, 
ctx->Point.MaxSize);
-   key->point_attenuated = ctx->Point._Attenuated;
+   key->use_vs_point_size = (ctx->VertexProgram.PointSizeEnabled ||
+ctx->Point._Attenuated);
 
/* _NEW_LIGHT */
key->pv_first = (ctx->Light.ProvokingVertex == GL_FIRST_VERTEX_CONVENTION);
@@ -296,7 +297,7 @@ sf_unit_create_from_key(struct brw_context *brw, struct 
brw_sf_unit_key *key,
/* _NEW_POINT */
sf.sf7.sprite_point = key->point_sprite;
sf.sf7.point_size = CLAMP(rint(key->point_size), 1, 255) * (1<<3);
-   sf.sf7.use_point_size_state = !key->point_attenuated;
+   sf.sf7.use_point_size_state = !key->use_vs_point_size;
sf.sf7.aa_line_distance_mode = 0;
 
/* might be BRW_NEW_PRIMITIVE if we have to adjust pv for polygons:

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


Mesa (master): draw: added new assertions to clipping code

2010-07-22 Thread Brian Paul
Module: Mesa
Branch: master
Commit: ca3238f3fce89b4641833d1722d03c5d23b3e081
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ca3238f3fce89b4641833d1722d03c5d23b3e081

Author: Brian Paul 
Date:   Thu Jul 22 11:18:45 2010 -0600

draw: added new assertions to clipping code

---

 src/gallium/auxiliary/draw/draw_pipe_clip.c |   11 ++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c 
b/src/gallium/auxiliary/draw/draw_pipe_clip.c
index 122b1c7..1cf6ee7 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_clip.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c
@@ -262,6 +262,7 @@ do_clip_tri( struct draw_stage *stage,
 
   clipmask &= ~(1stage.tmp[tmpnr++];
+   struct vertex_header *new_vert;
+
+assert(tmpnr < MAX_CLIPPED_VERTICES+1);
+new_vert = clipper->stage.tmp[tmpnr++];
+
+assert(outcount < MAX_CLIPPED_VERTICES);
outlist[outcount++] = new_vert;
 
if (IS_NEGATIVE(dp)) {
@@ -317,12 +324,14 @@ do_clip_tri( struct draw_stage *stage,
if (clipper->flat) {
   if (stage->draw->rasterizer->flatshade_first) {
  if (inlist[0] != header->v[0]) {
+assert(tmpnr < MAX_CLIPPED_VERTICES + 1);
 inlist[0] = dup_vert(stage, inlist[0], tmpnr++);
 copy_colors(stage, inlist[0], header->v[0]);
  }
   }
   else {
  if (inlist[0] != header->v[2]) {
+assert(tmpnr < MAX_CLIPPED_VERTICES + 1);
 inlist[0] = dup_vert(stage, inlist[0], tmpnr++);
 copy_colors(stage, inlist[0], header->v[2]);
  }

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


Mesa (glsl2): glsl2: Use talloc on InfoLog handling in ValidateProgram

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: 7095e2f860b91288c89c57add438e912e10df38e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7095e2f860b91288c89c57add438e912e10df38e

Author: Eric Anholt 
Date:   Wed Jul 21 23:21:23 2010 -0700

glsl2: Use talloc on InfoLog handling in ValidateProgram

Fixes a segfault in Regnum Online.

---

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

diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index cd02d7d..1c16653 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -1380,9 +1380,9 @@ _mesa_validate_program(GLcontext *ctx, GLuint program)
if (!shProg->Validated) {
   /* update info log */
   if (shProg->InfoLog) {
- free(shProg->InfoLog);
+ talloc_free(shProg->InfoLog);
   }
-  shProg->InfoLog = _mesa_strdup(errMsg);
+  shProg->InfoLog = talloc_strdup(shProg, errMsg);
}
 }
 

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


Mesa (glsl2): ir_to_mesa: Add support for MESA_GLSL=dump environment var.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: c8d0a9f0065c321308be635529c95735f3beb68f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c8d0a9f0065c321308be635529c95735f3beb68f

Author: Eric Anholt 
Date:   Thu Jul 22 12:11:36 2010 -0700

ir_to_mesa: Add support for MESA_GLSL=dump environment var.

---

 src/mesa/shader/ir_to_mesa.cpp |   18 ++
 1 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index bfb8e32..c92fe49 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -2030,12 +2030,21 @@ get_mesa_program(GLcontext *ctx, struct 
gl_shader_program *shader_program,
int i;
struct gl_program *prog;
GLenum target;
+   const char *target_string;
GLboolean progress;
 
switch (shader->Type) {
-   case GL_VERTEX_SHADER:   target = GL_VERTEX_PROGRAM_ARB; break;
-   case GL_FRAGMENT_SHADER: target = GL_FRAGMENT_PROGRAM_ARB; break;
-   default: assert(!"should not be reached"); break;
+   case GL_VERTEX_SHADER:
+  target = GL_VERTEX_PROGRAM_ARB;
+  target_string = "vertex";
+  break;
+   case GL_FRAGMENT_SHADER:
+  target = GL_FRAGMENT_PROGRAM_ARB;
+  target_string = "fragment";
+  break;
+   default:
+  assert(!"should not be reached");
+  break;
}
 
validate_ir_tree(shader->ir);
@@ -2127,7 +2136,8 @@ get_mesa_program(GLcontext *ctx, struct gl_shader_program 
*shader_program,
}
 
set_branchtargets(&v, mesa_instructions, num_instructions);
-   if (0) {
+   if (ctx->Shader.Flags & GLSL_DUMP) {
+  printf("Mesa %s program:\n", target_string);
   print_program(mesa_instructions, mesa_instruction_annotation,
num_instructions);
}

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


Mesa (glsl2): mesa: Only complain about an infinite loop in a swrast program once.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: cc15ef07e03e465d93df7062a516f9b4bfbaeda0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cc15ef07e03e465d93df7062a516f9b4bfbaeda0

Author: Eric Anholt 
Date:   Thu Jul 22 12:16:11 2010 -0700

mesa: Only complain about an infinite loop in a swrast program once.

Chances are, if one fragment looped badly, others will too, and
debugging output gets overwhelmed by the looping complaints.

---

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

diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c
index f85c651..b6da344 100644
--- a/src/mesa/shader/prog_execute.c
+++ b/src/mesa/shader/prog_execute.c
@@ -1788,7 +1788,11 @@ _mesa_execute_program(GLcontext * ctx,
 
   numExec++;
   if (numExec > maxExec) {
- _mesa_problem(ctx, "Infinite loop detected in fragment program");
+static GLboolean reported = GL_FALSE;
+if (!reported) {
+   _mesa_problem(ctx, "Infinite loop detected in fragment program");
+   reported = GL_TRUE;
+}
  return GL_TRUE;
   }
 

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


Mesa (glsl2): ir_to_mesa: Pretty up the printing of MESA_GLSL=dump

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: 748c343f8bdbbc8c5f00403b790ad7130424c35f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=748c343f8bdbbc8c5f00403b790ad7130424c35f

Author: Eric Anholt 
Date:   Thu Jul 22 12:25:39 2010 -0700

ir_to_mesa: Pretty up the printing of MESA_GLSL=dump

---

 src/mesa/shader/ir_to_mesa.cpp |   16 +---
 1 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index c92fe49..ba45c87 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -1885,19 +1885,29 @@ print_program(struct prog_instruction 
*mesa_instructions,
 {
ir_instruction *last_ir = NULL;
int i;
+   int indent = 0;
 
for (i = 0; i < num_instructions; i++) {
   struct prog_instruction *mesa_inst = mesa_instructions + i;
   ir_instruction *ir = mesa_instruction_annotation[i];
 
+  fprintf(stdout, "%3d: ", i);
+
   if (last_ir != ir && ir) {
-ir_print_visitor print;
-ir->accept(&print);
+int j;
+
+for (j = 0; j < indent; j++) {
+   fprintf(stdout, " ");
+}
+ir->print();
 printf("\n");
 last_ir = ir;
+
+fprintf(stdout, " "); /* line number spacing. */
   }
 
-  _mesa_print_instruction(mesa_inst);
+  indent = _mesa_fprint_instruction_opt(stdout, mesa_inst, indent,
+   PROG_PRINT_DEBUG, NULL);
}
 }
 

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


Mesa (glsl2): glsl2: When a "continue" happens in a "for" loop, run the loop expression.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: 2d1ed7b1b112cf13dd7eda7f500691f4c98a1ccc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2d1ed7b1b112cf13dd7eda7f500691f4c98a1ccc

Author: Eric Anholt 
Date:   Thu Jul 22 12:55:16 2010 -0700

glsl2: When a "continue" happens in a "for" loop, run the loop expression.

Fixes:
glsl1-for-loop with continue

Bug #29097

---

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

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 99a2183..0cb3863 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -2308,6 +2308,16 @@ ast_jump_statement::hir(exec_list *instructions,
   } else {
 ir_loop *const loop = state->loop_or_switch_nesting->as_loop();
 
+/* Inline the for loop expression again, since we don't know
+ * where near the end of the loop body the normal copy of it
+ * is going to be placed.
+ */
+if (mode == ast_continue &&
+state->loop_or_switch_nesting_ast->rest_expression) {
+   
state->loop_or_switch_nesting_ast->rest_expression->hir(instructions,
+   state);
+}
+
 if (loop != NULL) {
ir_loop_jump *const jump =
   new(ctx) ir_loop_jump((mode == ast_break)
@@ -2422,7 +2432,10 @@ ast_iteration_statement::hir(exec_list *instructions,
/* Track the current loop and / or switch-statement nesting.
 */
ir_instruction *const nesting = state->loop_or_switch_nesting;
+   ast_iteration_statement *nesting_ast = state->loop_or_switch_nesting_ast;
+
state->loop_or_switch_nesting = stmt;
+   state->loop_or_switch_nesting_ast = this;
 
if (mode != ast_do_while)
   condition_to_hir(stmt, state);
@@ -2442,6 +2455,7 @@ ast_iteration_statement::hir(exec_list *instructions,
/* Restore previous nesting before returning.
 */
state->loop_or_switch_nesting = nesting;
+   state->loop_or_switch_nesting_ast = nesting_ast;
 
/* Loops do not have r-values.
 */
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 56f6e18..3865843 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -104,6 +104,7 @@ struct _mesa_glsl_parse_state {
 
/** Loop or switch statement containing the current instructions. */
class ir_instruction *loop_or_switch_nesting;
+   class ast_iteration_statement *loop_or_switch_nesting_ast;
 
/** List of structures defined in user code. */
const glsl_type **user_structures;

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


Mesa (glsl2): glsl2: When inlining, don' t clone and assign sampler arguments.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: 8ec0b8187ea695353c75eed7314e86344df60e5a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8ec0b8187ea695353c75eed7314e86344df60e5a

Author: Eric Anholt 
Date:   Thu Jul 22 13:52:41 2010 -0700

glsl2: When inlining, don't clone and assign sampler arguments.

Instead, just use the incoming sampler param.  Fixes many texture-using
piglit tests since the linker rework.

---

 src/glsl/ir_function_inlining.cpp |   26 ++
 1 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/glsl/ir_function_inlining.cpp 
b/src/glsl/ir_function_inlining.cpp
index c391f12..b143190 100644
--- a/src/glsl/ir_function_inlining.cpp
+++ b/src/glsl/ir_function_inlining.cpp
@@ -133,17 +133,27 @@ ir_call::generate_inline(ir_instruction *next_ir)
exec_list_iterator sig_param_iter = this->callee->parameters.iterator();
exec_list_iterator param_iter = this->actual_parameters.iterator();
for (i = 0; i < num_parameters; i++) {
-  const ir_variable *const sig_param = (ir_variable *) 
sig_param_iter.get();
+  ir_variable *sig_param = (ir_variable *) sig_param_iter.get();
   ir_rvalue *param = (ir_rvalue *) param_iter.get();
 
   /* Generate a new variable for the parameter. */
-  parameters[i] = sig_param->clone(ht);
-  parameters[i]->mode = ir_var_auto;
-  next_ir->insert_before(parameters[i]);
+  if (sig_param->type->base_type == GLSL_TYPE_SAMPLER) {
+/* For samplers, we want the inlined sampler references
+ * referencing the passed in sampler variable, since that
+ * will have the location information, which an assignment of
+ * a sampler wouldn't.
+ */
+parameters[i] = NULL;
+hash_table_insert(ht, param->variable_referenced(), sig_param);
+  } else {
+parameters[i] = sig_param->clone(ht);
+parameters[i]->mode = ir_var_auto;
+next_ir->insert_before(parameters[i]);
+  }
 
   /* Move the actual param into our param variable if it's an 'in' type. */
-  if (sig_param->mode == ir_var_in ||
- sig_param->mode == ir_var_inout) {
+  if (parameters[i] && (sig_param->mode == ir_var_in ||
+   sig_param->mode == ir_var_inout)) {
 ir_assignment *assign;
 
 assign = new(ctx) ir_assignment(new(ctx) 
ir_dereference_variable(parameters[i]),
@@ -175,8 +185,8 @@ ir_call::generate_inline(ir_instruction *next_ir)
   const ir_variable *const sig_param = (ir_variable *) 
sig_param_iter.get();
 
   /* Move our param variable into the actual param if it's an 'out' type. 
*/
-  if (sig_param->mode == ir_var_out ||
- sig_param->mode == ir_var_inout) {
+  if (parameters[i] && (sig_param->mode == ir_var_out ||
+   sig_param->mode == ir_var_inout)) {
 ir_assignment *assign;
 
 assign = new(ctx) ir_assignment(param->clone(NULL)->as_rvalue(),

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


Mesa (glsl2): glsl2: Fix the type of (1.0 - arg2) for mix(gen, gen, float).

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: e65dfa89eef86be127d788ecd5bd23c35c8fbbe4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e65dfa89eef86be127d788ecd5bd23c35c8fbbe4

Author: Eric Anholt 
Date:   Thu Jul 22 14:25:26 2010 -0700

glsl2: Fix the type of (1.0 - arg2) for mix(gen, gen, float).

Previously, we'd constant-fold up a value of vec4(1.0 - arg2, 0, 0, 0).

Fixes:
glsl1-mix(vec4) function

---

 src/glsl/builtin_function.cpp |6 +++---
 src/glsl/builtins/110/mix |6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/glsl/builtin_function.cpp b/src/glsl/builtin_function.cpp
index 10e59e4..ae0eabc 100644
--- a/src/glsl/builtin_function.cpp
+++ b/src/glsl/builtin_function.cpp
@@ -1320,21 +1320,21 @@ static const char *builtins_110_mix = {
"   (declare (in) vec2 arg0)\n"
"   (declare (in) vec2 arg1)\n"
"   (declare (in) float arg2))\n"
-   " ((return (expression vec2 + (expression vec2 * (var_ref arg0) 
(expression vec2 - (constant float (1.00)) (var_ref arg2))) (expression 
vec2 * (var_ref arg1) (var_ref arg2))\n"
+   " ((return (expression vec2 + (expression vec2 * (var_ref arg0) 
(expression float - (constant float (1.00)) (var_ref arg2))) (expression 
vec2 * (var_ref arg1) (var_ref arg2))\n"
"\n"
"   (signature vec3\n"
" (parameters\n"
"   (declare (in) vec3 arg0)\n"
"   (declare (in) vec3 arg1)\n"
"   (declare (in) float arg2))\n"
-   " ((return (expression vec3 + (expression vec3 * (var_ref arg0) 
(expression vec3 - (constant float (1.00)) (var_ref arg2))) (expression 
vec3 * (var_ref arg1) (var_ref arg2))\n"
+   " ((return (expression vec3 + (expression vec3 * (var_ref arg0) 
(expression float - (constant float (1.00)) (var_ref arg2))) (expression 
vec3 * (var_ref arg1) (var_ref arg2))\n"
"\n"
"   (signature vec4\n"
" (parameters\n"
"   (declare (in) vec4 arg0)\n"
"   (declare (in) vec4 arg1)\n"
"   (declare (in) float arg2))\n"
-   " ((return (expression vec4 + (expression vec4 * (var_ref arg0) 
(expression vec4 - (constant float (1.00)) (var_ref arg2))) (expression 
vec4 * (var_ref arg1) (var_ref arg2))\n"
+   " ((return (expression vec4 + (expression vec4 * (var_ref arg0) 
(expression float - (constant float (1.00)) (var_ref arg2))) (expression 
vec4 * (var_ref arg1) (var_ref arg2))\n"
"))\n"
 };
 
diff --git a/src/glsl/builtins/110/mix b/src/glsl/builtins/110/mix
index 032f29e..8638d06 100644
--- a/src/glsl/builtins/110/mix
+++ b/src/glsl/builtins/110/mix
@@ -32,19 +32,19 @@
(declare (in) vec2 arg0)
(declare (in) vec2 arg1)
(declare (in) float arg2))
- ((return (expression vec2 + (expression vec2 * (var_ref arg0) (expression 
vec2 - (constant float (1.00)) (var_ref arg2))) (expression vec2 * (var_ref 
arg1) (var_ref arg2))
+ ((return (expression vec2 + (expression vec2 * (var_ref arg0) (expression 
float - (constant float (1.00)) (var_ref arg2))) (expression vec2 * 
(var_ref arg1) (var_ref arg2))
 
(signature vec3
  (parameters
(declare (in) vec3 arg0)
(declare (in) vec3 arg1)
(declare (in) float arg2))
- ((return (expression vec3 + (expression vec3 * (var_ref arg0) (expression 
vec3 - (constant float (1.00)) (var_ref arg2))) (expression vec3 * (var_ref 
arg1) (var_ref arg2))
+ ((return (expression vec3 + (expression vec3 * (var_ref arg0) (expression 
float - (constant float (1.00)) (var_ref arg2))) (expression vec3 * 
(var_ref arg1) (var_ref arg2))
 
(signature vec4
  (parameters
(declare (in) vec4 arg0)
(declare (in) vec4 arg1)
(declare (in) float arg2))
- ((return (expression vec4 + (expression vec4 * (var_ref arg0) (expression 
vec4 - (constant float (1.00)) (var_ref arg2))) (expression vec4 * (var_ref 
arg1) (var_ref arg2))
+ ((return (expression vec4 + (expression vec4 * (var_ref arg0) (expression 
float - (constant float (1.00)) (var_ref arg2))) (expression vec4 * 
(var_ref arg1) (var_ref arg2))
 ))

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


Mesa (glsl2): glsl2: Fix expected type for multiplying vector with non-square matrix.

2010-07-22 Thread Carl Worth
Module: Mesa
Branch: glsl2
Commit: 47c90b144729e3edf3b5cbf5b260c1c46e429879
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=47c90b144729e3edf3b5cbf5b260c1c46e429879

Author: Carl Worth 
Date:   Thu Jul 22 14:56:14 2010 -0700

glsl2: Fix expected type for multiplying vector with non-square matrix.

Previously, the compiler expected the result of the multiplication to
be of the same type as the vector. This is correct for square
matrices, but wrong for all others.

We fix this by instead expecting a vector with the same number of rows
as the matrix (for the case of M*v with a column vector) or the same
number of columns as the matrix (for v*M with a row vector).

This fix causes the following four glean tests to now pass:

glsl1-mat4x2 * vec4
glsl1-vec2 * mat4x2 multiply
glsl1-vec3 * mat4x3 multiply
glsl1-vec4 * mat3x4 multiply

---

 src/glsl/ast_to_hir.cpp |   26 ++
 1 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 0cb3863..5e26f21 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -282,8 +282,17 @@ arithmetic_result_type(ir_rvalue * &value_a, ir_rvalue * 
&value_b,
  * means the vector type of a row from A must be the same as the
  * vector the type of B.
  */
-if (type_a->row_type() == type_b)
-   return type_b;
+if (type_a->row_type() == type_b) {
+   /* The resulting vector has a number of elements equal to
+* the number of rows of matrix A. */
+   const glsl_type *const type =
+  glsl_type::get_instance(type_a->base_type,
+  type_a->column_type()->vector_elements,
+  1);
+   assert(type != glsl_type::error_type);
+
+   return type;
+}
   } else {
 assert(type_b->is_matrix());
 
@@ -292,8 +301,17 @@ arithmetic_result_type(ir_rvalue * &value_a, ir_rvalue * 
&value_b,
  * the type of A must be the same as the vector type of a column from
  * B.
  */
-if (type_a == type_b->column_type())
-   return type_a;
+if (type_a == type_b->column_type()) {
+   /* The resulting vector has a number of elements equal to
+* the number of columns of matrix B. */
+   const glsl_type *const type =
+  glsl_type::get_instance(type_a->base_type,
+  type_b->row_type()->vector_elements,
+  1);
+   assert(type != glsl_type::error_type);
+
+   return type;
+}
   }
 
   _mesa_glsl_error(loc, state, "size mismatch for matrix multiplication");

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


Mesa (glsl2): glsl2: Fix builtin prototypes defined in multiple glsl/ builtins/* files

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: 1bef4c8c4bc11e7f4150500def6e6a4291ceb587
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1bef4c8c4bc11e7f4150500def6e6a4291ceb587

Author: Eric Anholt 
Date:   Thu Jul 22 14:57:55 2010 -0700

glsl2: Fix builtin prototypes defined in multiple glsl/builtins/* files

If we put the protos in separate ir_functions, they wouldn't be found
at lookup time for linking.

Fixes:
glsl-fs-texture2d-bias
glsl-fs-texture2dproj-bias
glsl-fs-texture2dproj-bias-2
glsl-lod-bias
glsl1-texture2D(), computed coordinate

---

 src/glsl/ir_import_prototypes.cpp |   21 +++--
 1 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/glsl/ir_import_prototypes.cpp 
b/src/glsl/ir_import_prototypes.cpp
index 20aa8a6..5c5dc00 100644
--- a/src/glsl/ir_import_prototypes.cpp
+++ b/src/glsl/ir_import_prototypes.cpp
@@ -55,7 +55,17 @@ public:
virtual ir_visitor_status visit_enter(ir_function *ir)
{
   assert(this->function == NULL);
-  this->function = new(this->mem_ctx) ir_function(ir->name);
+
+  this->function = this->symbols->get_function(ir->name);
+  if (!this->function) {
+this->function = new(this->mem_ctx) ir_function(ir->name);
+
+list->push_tail(this->function);
+
+/* Add the new function to the symbol table.
+ */
+this->symbols->add_function(this->function->name, this->function);
+  }
   return visit_continue;
}
 
@@ -64,15 +74,6 @@ public:
   (void) ir;
   assert(this->function != NULL);
 
-  /* Add the new function (and all its signatures) to the end of the
-   * instruction stream.
-   */
-  list->push_tail(this->function);
-
-  /* Add the new function to the symbol table.
-   */
-  this->symbols->add_function(this->function->name, this->function);
-
   this->function = NULL;
   return visit_continue;
}

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


Mesa (master): draw: re-order optimization passes depending on LLVM version , 32/64-bit

2010-07-22 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 815e79e72c1f4aa849c0ee6103621685b678bc9d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=815e79e72c1f4aa849c0ee6103621685b678bc9d

Author: Brian Paul 
Date:   Thu Jul 22 16:07:18 2010 -0600

draw: re-order optimization passes depending on LLVM version, 32/64-bit

This is a work-around for an apparent bug in LLVM seen with piglit's
glsl-vs-sqrt-zero test.

---

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

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 1ee8769..19f96c3 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -238,9 +238,22 @@ draw_llvm_create(struct draw_context *draw)
   /* These are the passes currently listed in llvm-c/Transforms/Scalar.h,
* but there are more on SVN. */
   /* TODO: Add more passes */
+
   LLVMAddCFGSimplificationPass(llvm->pass);
-  LLVMAddPromoteMemoryToRegisterPass(llvm->pass);
-  LLVMAddConstantPropagationPass(llvm->pass);
+
+  if (HAVE_LLVM >= 0x207 && sizeof(void*) == 4) {
+ /* For LLVM >= 2.7 and 32-bit build, use this order of passes to
+  * avoid generating bad code.
+  * Test with piglit glsl-vs-sqrt-zero test.
+  */
+ LLVMAddConstantPropagationPass(llvm->pass);
+ LLVMAddPromoteMemoryToRegisterPass(llvm->pass);
+  }
+  else {
+ LLVMAddPromoteMemoryToRegisterPass(llvm->pass);
+ LLVMAddConstantPropagationPass(llvm->pass);
+  }
+
   if(util_cpu_caps.has_sse4_1) {
  /* FIXME: There is a bug in this pass, whereby the combination of 
fptosi
   * and sitofp (necessary for trunc/floor/ceil/round implementation)

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


Mesa (glsl2): glsl2: Add the API defines to the glsl2 build so we get the right GLcontext

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: a711ad6bf2407f63110de8e8f216eacd09dd8e82
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a711ad6bf2407f63110de8e8f216eacd09dd8e82

Author: Eric Anholt 
Date:   Thu Jul 22 15:17:23 2010 -0700

glsl2: Add the API defines to the glsl2 build so we get the right GLcontext

Fixes:
draw_buffers-08.frag
draw_buffers-09.frag
glsl-vs-texturematrix-2

---

 src/glsl/Makefile |8 ++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/glsl/Makefile b/src/glsl/Makefile
index 47292bd..f4b0fb5 100644
--- a/src/glsl/Makefile
+++ b/src/glsl/Makefile
@@ -81,6 +81,10 @@ GLSL2_OBJECTS = \
 
 ### Basic defines ###
 
+DEFINES = \
+   $(LIBRARY_DEFINES) \
+   $(API_DEFINES)
+
 GLCPP_OBJECTS = \
$(GLCPP_SOURCES:.c=.o) \
../mesa/shader/hash_table.o
@@ -134,10 +138,10 @@ glcpp/glcpp: $(GLCPP_OBJECTS) libglsl.a
$(APP_CC) $(INCLUDES) $(CFLAGS) $(LDFLAGS) $(GLCPP_OBJECTS) $(LIBS) -o 
$@
 
 .cpp.o:
-   $(CXX) -c $(INCLUDES) $(CXXFLAGS) $(LIBRARY_DEFINES) $< -o $@
+   $(CXX) -c $(INCLUDES) $(CXXFLAGS) $(DEFINES) $< -o $@
 
 .c.o:
-   $(CC) -c $(INCLUDES) $(CFLAGS) $(LIBRARY_DEFINES) $< -o $@
+   $(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@
 
 glsl_lexer.cpp: glsl_lexer.lpp
flex --never-interactive --outfile="$@"  $<

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


Mesa (master): glsl: remove invalid _mesa_problem() call

2010-07-22 Thread Brian Paul
Module: Mesa
Branch: master
Commit: c20a3628c7c6b7c41efe309b712bf93eb4e92039
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c20a3628c7c6b7c41efe309b712bf93eb4e92039

Author: Brian Paul 
Date:   Thu Jul 22 16:35:43 2010 -0600

glsl: remove invalid _mesa_problem() call

Fixes fd.o bug 29206.

---

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

diff --git a/src/mesa/slang/slang_codegen.c b/src/mesa/slang/slang_codegen.c
index 11a9074..95787e4 100644
--- a/src/mesa/slang/slang_codegen.c
+++ b/src/mesa/slang/slang_codegen.c
@@ -1047,8 +1047,10 @@ slang_substitute(slang_assemble_ctx *A, slang_operation 
*oper,
 GLuint i;
  v = _slang_variable_locate(oper->locals, id, GL_TRUE);
 if (!v) {
+#if 0
 if (strcmp((char *) oper->a_id, "__notRetFlag"))
_mesa_problem(NULL, "var %s not found!\n", (char *) oper->a_id);
+#endif
 return;
 }
 

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


Mesa (glsl2): glsl2: When setting the size of an unsized array, set its deref's size too.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: 9703ed05e684f4269cd8af27c94e9b6bf8781d85
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9703ed05e684f4269cd8af27c94e9b6bf8781d85

Author: Eric Anholt 
Date:   Thu Jul 22 15:50:37 2010 -0700

glsl2: When setting the size of an unsized array, set its deref's size too.

---

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

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 5e26f21..c03206f 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -531,6 +531,7 @@ do_assignment(exec_list *instructions, struct 
_mesa_glsl_parse_state *state,
 
 var->type = glsl_type::get_array_instance(lhs->type->element_type(),
   rhs->type->array_size());
+d->type = var->type;
   }
}
 

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


Mesa (glsl2): glsl2: Set the type on cloned tex instructions.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: c3081e627302429cdf2ee23a40fb20fa5cbf5770
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c3081e627302429cdf2ee23a40fb20fa5cbf5770

Author: Eric Anholt 
Date:   Thu Jul 22 15:34:01 2010 -0700

glsl2: Set the type on cloned tex instructions.

---

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

diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp
index a3e4a3a..c49a732 100644
--- a/src/glsl/ir_clone.cpp
+++ b/src/glsl/ir_clone.cpp
@@ -210,6 +210,7 @@ ir_texture::clone(struct hash_table *ht) const
 {
void *ctx = talloc_parent(this);
ir_texture *new_tex = new(ctx) ir_texture(this->op);
+   new_tex->type = this->type;
 
new_tex->sampler = this->sampler->clone(ht);
new_tex->coordinate = this->coordinate->clone(ht);

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


Mesa (glsl2): ir_to_mesa: Fix the swizzles on record and array dereferences .

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: 85e93da18ca2c967ca12870b62ab1aac2f0b880c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=85e93da18ca2c967ca12870b62ab1aac2f0b880c

Author: Eric Anholt 
Date:   Thu Jul 22 16:11:08 2010 -0700

ir_to_mesa: Fix the swizzles on record and array dereferences.

Fixes:
glsl1-struct (1)
glsl1-struct (2)
glsl1-struct (3)
glsl1-struct (4)

---

 src/mesa/shader/ir_to_mesa.cpp |   12 +---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index ba45c87..c397838 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -1151,7 +1151,10 @@ ir_to_mesa_visitor::visit(ir_dereference_variable *ir)
src_reg.file = entry->file;
src_reg.index = entry->index;
/* If the type is smaller than a vec4, replicate the last channel out. */
-   src_reg.swizzle = swizzle_for_size(ir->var->type->vector_elements);
+   if (ir->type->is_scalar() || ir->type->is_vector())
+  src_reg.swizzle = swizzle_for_size(ir->var->type->vector_elements);
+   else
+  src_reg.swizzle = SWIZZLE_NOOP;
src_reg.reladdr = NULL;
src_reg.negate = 0;
 
@@ -1231,7 +1234,10 @@ ir_to_mesa_visitor::visit(ir_dereference_array *ir)
}
 
/* If the type is smaller than a vec4, replicate the last channel out. */
-   src_reg.swizzle = swizzle_for_size(ir->type->vector_elements);
+   if (ir->type->is_scalar() || ir->type->is_vector())
+  src_reg.swizzle = swizzle_for_size(ir->type->vector_elements);
+   else
+  src_reg.swizzle = SWIZZLE_NOOP;
 
this->result = src_reg;
 }
@@ -1250,6 +1256,7 @@ ir_to_mesa_visitor::visit(ir_dereference_record *ir)
 break;
   offset += type_size(struct_type->fields.structure[i].type);
}
+   this->result.swizzle = swizzle_for_size(ir->type->vector_elements);
this->result.index += offset;
 }
 
@@ -1322,7 +1329,6 @@ ir_to_mesa_visitor::visit(ir_assignment *ir)
int i;
 
assert(!ir->lhs->type->is_array());
-   assert(ir->lhs->type->base_type != GLSL_TYPE_STRUCT);
 
ir->rhs->accept(this);
r = this->result;

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


Mesa (glsl2): glsl2: Put side effects of the RHS of logic_or in the right branch.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: a0879b9dd438d78635f047cdd5ed4c72bc831b60
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a0879b9dd438d78635f047cdd5ed4c72bc831b60

Author: Eric Anholt 
Date:   Thu Jul 22 16:30:41 2010 -0700

glsl2: Put side effects of the RHS of logic_or in the right branch.

Kind of missing the point to only do the side effects if the LHS
evaluates as true.

Fixes:
glsl1-|| operator, short-circuit

---

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

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index c03206f..98ea789 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -898,7 +898,7 @@ ast_expression::hir(exec_list *instructions,
 ir_if *const stmt = new(ctx) ir_if(op[0]);
 instructions->push_tail(stmt);
 
-op[1] = this->subexpressions[1]->hir(&stmt->then_instructions, state);
+op[1] = this->subexpressions[1]->hir(&stmt->else_instructions, state);
 
 if (!op[1]->type->is_boolean() || !op[1]->type->is_scalar()) {
YYLTYPE loc = this->subexpressions[1]->get_location();

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


Mesa (glsl2): glsl2: Validate that ir_if conditions are actually bool.

2010-07-22 Thread Eric Anholt
Module: Mesa
Branch: glsl2
Commit: 432b787b29202301dbfc139c3289521b0bfc3dec
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=432b787b29202301dbfc139c3289521b0bfc3dec

Author: Eric Anholt 
Date:   Thu Jul 22 16:24:49 2010 -0700

glsl2: Validate that ir_if conditions are actually bool.

---

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

diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp
index c05edf2..bb381a0 100644
--- a/src/glsl/ir_validate.cpp
+++ b/src/glsl/ir_validate.cpp
@@ -59,6 +59,7 @@ public:
 
virtual ir_visitor_status visit(ir_variable *v);
virtual ir_visitor_status visit(ir_dereference_variable *ir);
+   virtual ir_visitor_status visit(ir_if *ir);
 
virtual ir_visitor_status visit_enter(ir_function *ir);
virtual ir_visitor_status visit_leave(ir_function *ir);
@@ -93,6 +94,18 @@ ir_validate::visit(ir_dereference_variable *ir)
return visit_continue;
 }
 
+ir_visitor_status
+ir_validate::visit(ir_if *ir)
+{
+   if (ir->condition->type != glsl_type::bool_type) {
+  printf("ir_if condition %s type instead of bool.\n",
+ir->condition->type->name);
+  ir->print();
+  printf("\n");
+  abort();
+   }
+}
+
 
 ir_visitor_status
 ir_validate::visit_enter(ir_function *ir)

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


Mesa (glsl2): glcpp: Fix function-like macros with an argument used multiple times.

2010-07-22 Thread Carl Worth
Module: Mesa
Branch: glsl2
Commit: fbe4240626bfe102a9c4c889ee18cb9ea27bddec
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fbe4240626bfe102a9c4c889ee18cb9ea27bddec

Author: Carl Worth 
Date:   Thu Jul 22 16:36:04 2010 -0700

glcpp: Fix function-like macros with an argument used multiple times.

It's really hard to believe that this case has been broken, but apparently
no test previously exercised it. So this commit adds such a test and fixes
it by making a copy of the argument token-list before expanding it.

This fix causes the following glean tests to now pass:

glsl1-Preprocessor test 6 (#if 0, #define macro)
glsl1-Preprocessor test 7 (multi-line #define)

---

 src/glsl/glcpp/glcpp-parse.y |   10 +++---
 src/glsl/glcpp/tests/069-repeated-argument.c |2 ++
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y
index e4dcc76..5b74678 100644
--- a/src/glsl/glcpp/glcpp-parse.y
+++ b/src/glsl/glcpp/glcpp-parse.y
@@ -1075,7 +1075,7 @@ _token_list_create_with_one_space (void *ctx)
  *
  * Returns the token list that results from the expansion and sets
  * *last to the last node in the list that was consumed by the
- * expansion. Specificallty, *last will be set as follows: as the
+ * expansion. Specifically, *last will be set as follows: as the
  * token of the closing right parenthesis.
  */
 static token_list_t *
@@ -1147,9 +1147,13 @@ _glcpp_parser_expand_function (glcpp_parser_t *parser,
 * tokens, or append a placeholder token for
 * an empty argument. */
if (argument->head) {
+   token_list_t *expanded_argument;
+   expanded_argument = _token_list_copy (parser,
+ argument);
_glcpp_parser_expand_token_list (parser,
-argument);
-   _token_list_append_list (substituted, argument);
+
expanded_argument);
+   _token_list_append_list (substituted,
+expanded_argument);
} else {
token_t *new_token;
 
diff --git a/src/glsl/glcpp/tests/069-repeated-argument.c 
b/src/glsl/glcpp/tests/069-repeated-argument.c
new file mode 100644
index 000..2b46ead
--- /dev/null
+++ b/src/glsl/glcpp/tests/069-repeated-argument.c
@@ -0,0 +1,2 @@
+#define double(x) x x
+double(1)

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


Mesa (glsl2): ir_print_visitor: Add "temporary" to mode string printing.

2010-07-22 Thread Kenneth Graunke
Module: Mesa
Branch: glsl2
Commit: 40c4298a6ea9e83b49858916d5423fd2135ef39c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=40c4298a6ea9e83b49858916d5423fd2135ef39c

Author: Kenneth Graunke 
Date:   Thu Jul 22 16:18:57 2010 -0700

ir_print_visitor: Add "temporary" to mode string printing.

Variables with mode ir_var_temporary were causing an out of bounds array
access and filling my screen with rubbish.  I'm not sure if "temporary"
is the right thing to print.

---

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

diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp
index 1eb073f..ee489cd 100644
--- a/src/glsl/ir_print_visitor.cpp
+++ b/src/glsl/ir_print_visitor.cpp
@@ -85,7 +85,8 @@ void ir_print_visitor::visit(ir_variable *ir)
 
const char *const cent = (ir->centroid) ? "centroid " : "";
const char *const inv = (ir->invariant) ? "invariant " : "";
-   const char *const mode[] = { "", "uniform ", "in ", "out ", "inout " };
+   const char *const mode[] = { "", "uniform ", "in ", "out ", "inout ",
+   "temporary " };
const char *const interp[] = { "", "flat", "noperspective" };
 
printf("(%s%s%s%s) ",

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


Mesa (glsl2): glsl2: Fix standalone compiler to not crash horribly.

2010-07-22 Thread Kenneth Graunke
Module: Mesa
Branch: glsl2
Commit: aa9f86ae8b3bb2172092ff9b50751677c509e6b4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=aa9f86ae8b3bb2172092ff9b50751677c509e6b4

Author: Kenneth Graunke 
Date:   Thu Jul 22 16:20:36 2010 -0700

glsl2: Fix standalone compiler to not crash horribly.

ir_to_mesa was updated for the _mesa_glsl_parse_state constructor
changes, but main.cpp was not.

---

 src/glsl/glsl_parser_extras.cpp |   23 
 src/glsl/main.cpp   |   45 +++---
 2 files changed, 27 insertions(+), 41 deletions(-)

diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index bcf2579..009aabc 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -68,10 +68,33 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct 
__GLcontextRec *ctx,
 
   this->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
} else {
+  /* If there is no GL context (standalone compiler), fill in constants
+   * with the minimum required values.
+   */
   static struct gl_extensions null_extensions;
 
   memset(&null_extensions, 0, sizeof(null_extensions));
   this->extensions = &null_extensions;
+
+  /* 1.10 minimums. */
+  this->Const.MaxLights = 8;
+  this->Const.MaxClipPlanes = 8;
+  this->Const.MaxTextureUnits = 2;
+
+  /* More than the 1.10 minimum to appease parser tests taken from
+   * apps that (hopefully) already checked the number of coords.
+   */
+  this->Const.MaxTextureCoords = 4;
+
+  this->Const.MaxVertexAttribs = 16;
+  this->Const.MaxVertexUniformComponents = 512;
+  this->Const.MaxVaryingFloats = 32;
+  this->Const.MaxVertexTextureImageUnits = 0;
+  this->Const.MaxCombinedTextureImageUnits = 2;
+  this->Const.MaxTextureImageUnits = 2;
+  this->Const.MaxFragmentUniformComponents = 64;
+
+  this->Const.MaxDrawBuffers = 2;
}
 }
 
diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index 2ecf57f..5c0f647 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -121,49 +121,12 @@ const struct option compiler_opts[] = {
 void
 compile_shader(struct gl_shader *shader)
 {
-   struct _mesa_glsl_parse_state *state;
-   struct gl_extensions ext;
-
-   state = talloc_zero(talloc_parent(shader), struct _mesa_glsl_parse_state);
-
-   switch (shader->Type) {
-   case GL_VERTEX_SHADER:   state->target = vertex_shader; break;
-   case GL_FRAGMENT_SHADER: state->target = fragment_shader; break;
-   case GL_GEOMETRY_SHADER: state->target = geometry_shader; break;
-   }
-
-   state->scanner = NULL;
-   state->translation_unit.make_empty();
-   state->symbols = new(shader) glsl_symbol_table;
-   state->info_log = talloc_strdup(shader, "");
-   state->error = false;
-   state->loop_or_switch_nesting = NULL;
-   state->ARB_texture_rectangle_enable = true;
-
-   memset(&ext, 0, sizeof(ext));
-   state->extensions = &ext;
-   /* 1.10 minimums. */
-   state->Const.MaxLights = 8;
-   state->Const.MaxClipPlanes = 8;
-   state->Const.MaxTextureUnits = 2;
-
-   /* More than the 1.10 minimum to appease parser tests taken from
-* apps that (hopefully) already checked the number of coords.
-*/
-   state->Const.MaxTextureCoords = 4;
-
-   state->Const.MaxVertexAttribs = 16;
-   state->Const.MaxVertexUniformComponents = 512;
-   state->Const.MaxVaryingFloats = 32;
-   state->Const.MaxVertexTextureImageUnits = 0;
-   state->Const.MaxCombinedTextureImageUnits = 2;
-   state->Const.MaxTextureImageUnits = 2;
-   state->Const.MaxFragmentUniformComponents = 64;
-
-   state->Const.MaxDrawBuffers = 2;
+   struct _mesa_glsl_parse_state *state =
+  new(shader) _mesa_glsl_parse_state(NULL, shader->Type, shader);
 
const char *source = shader->Source;
-   state->error = preprocess(state, &source, &state->info_log, &ext);
+   state->error = preprocess(state, &source, &state->info_log,
+state->extensions);
 
if (!state->error) {
   _mesa_glsl_lexer_ctor(state, source);

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


Mesa (glsl2): glsl2: Initialize ir_instruction::type and ir_rvalue::type.

2010-07-22 Thread Kenneth Graunke
Module: Mesa
Branch: glsl2
Commit: 0a89175a35ba3ac2a94d0ba9bcc9926edc8927e3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0a89175a35ba3ac2a94d0ba9bcc9926edc8927e3

Author: Kenneth Graunke 
Date:   Thu Jul 22 16:45:37 2010 -0700

glsl2: Initialize ir_instruction::type and ir_rvalue::type.

Top-level instructions now get NULL as their default type (since type is
irrelevant for things like ir_function), while ir_rvalues get error_type
by default.

This should make it easier to tell if we've forgotten to set a type.  It
also fixes some "Conditional jump or move depends on uninitialized
value" errors in valgrind caused by ir_validate examining the type of
top level ir_instructions, which weren't set.

---

 src/glsl/ir.cpp |5 +
 src/glsl/ir.h   |6 ++
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
index 5054ec7..8ebef7d 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -26,6 +26,11 @@
 #include "ir_visitor.h"
 #include "glsl_types.h"
 
+ir_rvalue::ir_rvalue()
+{
+   this->type = glsl_type::error_type;
+}
+
 ir_assignment::ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs,
 ir_rvalue *condition)
 {
diff --git a/src/glsl/ir.h b/src/glsl/ir.h
index 3fd3a76..e0f3683 100644
--- a/src/glsl/ir.h
+++ b/src/glsl/ir.h
@@ -106,6 +106,7 @@ protected:
ir_instruction()
{
   ir_type = ir_type_unset;
+  type = NULL;
}
 };
 
@@ -150,10 +151,7 @@ public:
}
 
 protected:
-   ir_rvalue()
-   {
-  /* empty */
-   }
+   ir_rvalue();
 };
 
 

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


Mesa (glsl2): glsl2: Make ir_assignment derive from ir_instruction, not ir_rvalue.

2010-07-22 Thread Kenneth Graunke
Module: Mesa
Branch: glsl2
Commit: 3c033637de7def553559c11d037f2e8bbb750f77
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3c033637de7def553559c11d037f2e8bbb750f77

Author: Kenneth Graunke 
Date:   Thu Jul 22 16:40:35 2010 -0700

glsl2: Make ir_assignment derive from ir_instruction, not ir_rvalue.

Assignments can only exist at the top level instruction stream; the
residual value is handled by assigning the value to a temporary and
returning an ir_dereference_variable of that temporary.

---

 src/glsl/ir.h  |2 +-
 src/glsl/ir_reader.cpp |4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/glsl/ir.h b/src/glsl/ir.h
index c73bf4c..3fd3a76 100644
--- a/src/glsl/ir.h
+++ b/src/glsl/ir.h
@@ -506,7 +506,7 @@ public:
 };
 
 
-class ir_assignment : public ir_rvalue {
+class ir_assignment : public ir_instruction {
 public:
ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs, ir_rvalue *condition);
 
diff --git a/src/glsl/ir_reader.cpp b/src/glsl/ir_reader.cpp
index 2248e92..14bd2d6 100644
--- a/src/glsl/ir_reader.cpp
+++ b/src/glsl/ir_reader.cpp
@@ -357,6 +357,8 @@ read_instruction(_mesa_glsl_parse_state *st, s_expression 
*expr,
ir_instruction *inst = NULL;
if (strcmp(tag->value(), "declare") == 0) {
   inst = read_declaration(st, list);
+   } else if (strcmp(tag->value(), "assign") == 0) {
+  inst = read_assignment(st, list);
} else if (strcmp(tag->value(), "if") == 0) {
   inst = read_if(st, list, loop_ctx);
} else if (strcmp(tag->value(), "loop") == 0) {
@@ -546,8 +548,6 @@ read_rvalue(_mesa_glsl_parse_state *st, s_expression *expr)
   return rvalue;
else if (strcmp(tag->value(), "swiz") == 0) {
   rvalue = read_swizzle(st, list);
-   } else if (strcmp(tag->value(), "assign") == 0) {
-  rvalue = read_assignment(st, list);
} else if (strcmp(tag->value(), "expression") == 0) {
   rvalue = read_expression(st, list);
} else if (strcmp(tag->value(), "call") == 0) {

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


Mesa (glsl2): glsl2/builtins: Fix 1.30 sign implementation for ints.

2010-07-22 Thread Kenneth Graunke
Module: Mesa
Branch: glsl2
Commit: 5304c251fcceca40096d69002efcf1a122df259d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5304c251fcceca40096d69002efcf1a122df259d

Author: Kenneth Graunke 
Date:   Wed Jul 21 17:25:49 2010 -0700

glsl2/builtins: Fix 1.30 sign implementation for ints.

---

 src/glsl/builtins/130/sign |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/glsl/builtins/130/sign b/src/glsl/builtins/130/sign
index 1707959..f86062a 100644
--- a/src/glsl/builtins/130/sign
+++ b/src/glsl/builtins/130/sign
@@ -2,7 +2,7 @@
(signature int
  (parameters
(declare (in) int x))
- ((return (expression int / (var_ref x) (expression int abs (var_ref 
x))
+ ((return (expression int sign (var_ref x)
 
(signature ivec2
  (parameters

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


Mesa (glsl2): glsl2/builtins: Fix "mod" builtin to use scalar/ vector operations.

2010-07-22 Thread Kenneth Graunke
Module: Mesa
Branch: glsl2
Commit: 63a92c975dd97445979c6aa1c5fef63d37bfc897
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=63a92c975dd97445979c6aa1c5fef63d37bfc897

Author: Kenneth Graunke 
Date:   Wed Jul 21 17:17:44 2010 -0700

glsl2/builtins: Fix "mod" builtin to use scalar/vector operations.

---

 src/glsl/builtins/110/mod |   27 +++
 1 files changed, 3 insertions(+), 24 deletions(-)

diff --git a/src/glsl/builtins/110/mod b/src/glsl/builtins/110/mod
index 9e08bbc..aeaea24 100644
--- a/src/glsl/builtins/110/mod
+++ b/src/glsl/builtins/110/mod
@@ -27,38 +27,17 @@
  (parameters
(declare (in) vec2  arg0)
(declare (in) float arg1))
- ((declare () vec2 result)
-  (assign (constant bool (1)) (swiz x (var_ref result))
-  (expression float % (swiz x (var_ref arg0)) (var_ref arg1)))
-  (assign (constant bool (1)) (swiz y (var_ref result))
-  (expression float % (swiz y (var_ref arg0)) (var_ref arg1)))
-  (return (var_ref result
+ ((return (expression vec2 % (var_ref arg0) (var_ref arg1)
 
(signature vec3
  (parameters
(declare (in) vec3  arg0)
(declare (in) float arg1))
- ((declare () vec3 result)
-  (assign (constant bool (1)) (swiz x (var_ref result))
-  (expression float % (swiz x (var_ref arg0)) (var_ref arg1)))
-  (assign (constant bool (1)) (swiz y (var_ref result))
-  (expression float % (swiz y (var_ref arg0)) (var_ref arg1)))
-  (assign (constant bool (1)) (swiz z (var_ref result))
-  (expression float % (swiz z (var_ref arg0)) (var_ref arg1)))
-  (return (var_ref result
+ ((return (expression vec3 % (var_ref arg0) (var_ref arg1)
 
(signature vec4
  (parameters
(declare (in) vec4  arg0)
(declare (in) float arg1))
- ((declare () vec4 result)
-  (assign (constant bool (1)) (swiz x (var_ref result))
-  (expression float % (swiz x (var_ref arg0)) (var_ref arg1)))
-  (assign (constant bool (1)) (swiz y (var_ref result))
-  (expression float % (swiz y (var_ref arg0)) (var_ref arg1)))
-  (assign (constant bool (1)) (swiz z (var_ref result))
-  (expression float % (swiz z (var_ref arg0)) (var_ref arg1)))
-  (assign (constant bool (1)) (swiz w (var_ref result))
-  (expression float % (swiz w (var_ref arg0)) (var_ref arg1)))
-  (return (var_ref result
+ ((return (expression vec4 % (var_ref arg0) (var_ref arg1)
 ))

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


Mesa (glsl2): glsl2/builtins: Add 1.30 bvec variant of the "mix" builtin.

2010-07-22 Thread Kenneth Graunke
Module: Mesa
Branch: glsl2
Commit: 0b8e5f384c75b56bf2ee34c317bb9d06095c798b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0b8e5f384c75b56bf2ee34c317bb9d06095c798b

Author: Kenneth Graunke 
Date:   Thu Jul 22 16:52:32 2010 -0700

glsl2/builtins: Add 1.30 bvec variant of the "mix" builtin.

---

 src/glsl/builtins/130/mix |   39 +++
 1 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/src/glsl/builtins/130/mix b/src/glsl/builtins/130/mix
new file mode 100644
index 000..9a1fcd7
--- /dev/null
+++ b/src/glsl/builtins/130/mix
@@ -0,0 +1,39 @@
+((function mix
+   (signature float
+ (parameters
+   (declare (in) float v1)
+   (declare (in) float v2)
+   (declare (in) bool  a))
+ ((assign (var_ref a) (var_ref v1) (var_ref v2))
+  (return (var_ref v1
+
+   (signature vec2
+ (parameters
+   (declare (in) vec2 v1)
+   (declare (in) vec2 v2)
+   (declare (in) bvec2 a))
+ ((assign (swiz x (var_ref a)) (swiz x (var_ref v1)) (swiz x (var_ref v2)))
+  (assign (swiz y (var_ref a)) (swiz y (var_ref v1)) (swiz y (var_ref v2)))
+  (return (var_ref v1
+
+   (signature vec3
+ (parameters
+   (declare (in) vec3 v1)
+   (declare (in) vec3 v2)
+   (declare (in) bvec3 a))
+ ((assign (swiz x (var_ref a)) (swiz x (var_ref v1)) (swiz x (var_ref v2)))
+  (assign (swiz y (var_ref a)) (swiz y (var_ref v1)) (swiz y (var_ref v2)))
+  (assign (swiz z (var_ref a)) (swiz z (var_ref v1)) (swiz z (var_ref v2)))
+  (return (var_ref v1
+
+   (signature vec4
+ (parameters
+   (declare (in) vec4 v1)
+   (declare (in) vec4 v2)
+   (declare (in) bvec4 a))
+ ((assign (swiz x (var_ref a)) (swiz x (var_ref v1)) (swiz x (var_ref v2)))
+  (assign (swiz y (var_ref a)) (swiz y (var_ref v1)) (swiz y (var_ref v2)))
+  (assign (swiz z (var_ref a)) (swiz z (var_ref v1)) (swiz z (var_ref v2)))
+  (assign (swiz w (var_ref a)) (swiz w (var_ref v1)) (swiz w (var_ref v2)))
+  (return (var_ref v1
+))

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


Mesa (glsl2): glsl2: Refresh autogenerated file builtin_function.cpp.

2010-07-22 Thread Kenneth Graunke
Module: Mesa
Branch: glsl2
Commit: 0a71527dabb7086e81d488451cf4a5cd90380938
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0a71527dabb7086e81d488451cf4a5cd90380938

Author: Kenneth Graunke 
Date:   Wed Jul 21 17:33:57 2010 -0700

glsl2: Refresh autogenerated file builtin_function.cpp.

---

 src/glsl/builtin_function.cpp |   72 ++--
 1 files changed, 47 insertions(+), 25 deletions(-)

diff --git a/src/glsl/builtin_function.cpp b/src/glsl/builtin_function.cpp
index ae0eabc..cc957e4 100644
--- a/src/glsl/builtin_function.cpp
+++ b/src/glsl/builtin_function.cpp
@@ -1368,40 +1368,19 @@ static const char *builtins_110_mod = {
" (parameters\n"
"   (declare (in) vec2  arg0)\n"
"   (declare (in) float arg1))\n"
-   " ((declare () vec2 result)\n"
-   "  (assign (constant bool (1)) (swiz x (var_ref result))\n"
-   "  (expression float % (swiz x (var_ref arg0)) (var_ref 
arg1)))\n"
-   "  (assign (constant bool (1)) (swiz y (var_ref result))\n"
-   "  (expression float % (swiz y (var_ref arg0)) (var_ref 
arg1)))\n"
-   "  (return (var_ref result\n"
+   " ((return (expression vec2 % (var_ref arg0) (var_ref arg1)\n"
"\n"
"   (signature vec3\n"
" (parameters\n"
"   (declare (in) vec3  arg0)\n"
"   (declare (in) float arg1))\n"
-   " ((declare () vec3 result)\n"
-   "  (assign (constant bool (1)) (swiz x (var_ref result))\n"
-   "  (expression float % (swiz x (var_ref arg0)) (var_ref 
arg1)))\n"
-   "  (assign (constant bool (1)) (swiz y (var_ref result))\n"
-   "  (expression float % (swiz y (var_ref arg0)) (var_ref 
arg1)))\n"
-   "  (assign (constant bool (1)) (swiz z (var_ref result))\n"
-   "  (expression float % (swiz z (var_ref arg0)) (var_ref 
arg1)))\n"
-   "  (return (var_ref result\n"
+   " ((return (expression vec3 % (var_ref arg0) (var_ref arg1)\n"
"\n"
"   (signature vec4\n"
" (parameters\n"
"   (declare (in) vec4  arg0)\n"
"   (declare (in) float arg1))\n"
-   " ((declare () vec4 result)\n"
-   "  (assign (constant bool (1)) (swiz x (var_ref result))\n"
-   "  (expression float % (swiz x (var_ref arg0)) (var_ref 
arg1)))\n"
-   "  (assign (constant bool (1)) (swiz y (var_ref result))\n"
-   "  (expression float % (swiz y (var_ref arg0)) (var_ref 
arg1)))\n"
-   "  (assign (constant bool (1)) (swiz z (var_ref result))\n"
-   "  (expression float % (swiz z (var_ref arg0)) (var_ref 
arg1)))\n"
-   "  (assign (constant bool (1)) (swiz w (var_ref result))\n"
-   "  (expression float % (swiz w (var_ref arg0)) (var_ref 
arg1)))\n"
-   "  (return (var_ref result\n"
+   " ((return (expression vec4 % (var_ref arg0) (var_ref arg1)\n"
"))\n"
 };
 
@@ -3406,6 +3385,48 @@ static const char *builtins_130_min = {
"))\n"
 };
 
+static const char *builtins_130_mix = {
+   "((function mix\n"
+   "   (signature float\n"
+   " (parameters\n"
+   "   (declare (in) float v1)\n"
+   "   (declare (in) float v2)\n"
+   "   (declare (in) bool  a))\n"
+   " ((assign (var_ref a) (var_ref v1) (var_ref v2))\n"
+   "  (return (var_ref v1\n"
+   "\n"
+   "   (signature vec2\n"
+   " (parameters\n"
+   "   (declare (in) vec2 v1)\n"
+   "   (declare (in) vec2 v2)\n"
+   "   (declare (in) bvec2 a))\n"
+   " ((assign (swiz x (var_ref a)) (swiz x (var_ref v1)) (swiz x (var_ref 
v2)))\n"
+   "  (assign (swiz y (var_ref a)) (swiz y (var_ref v1)) (swiz y (var_ref 
v2)))\n"
+   "  (return (var_ref v1\n"
+   "\n"
+   "   (signature vec3\n"
+   " (parameters\n"
+   "   (declare (in) vec3 v1)\n"
+   "   (declare (in) vec3 v2)\n"
+   "   (declare (in) bvec3 a))\n"
+   " ((assign (swiz x (var_ref a)) (swiz x (var_ref v1)) (swiz x (var_ref 
v2)))\n"
+   "  (assign (swiz y (var_ref a)) (swiz y (var_ref v1)) (swiz y (var_ref 
v2)))\n"
+   "  (assign (swiz z (var_ref a)) (swiz z (var_ref v1)) (swiz z (var_ref 
v2)))\n"
+   "  (return (var_ref v1\n"
+   "\n"
+   "   (signature vec4\n"
+   " (parameters\n"
+   "   (declare (in) vec4 v1)\n"
+   "   (declare (in) vec4 v2)\n"
+   "   (declare (in) bvec4 a))\n"
+   " ((assign (swiz x (var_ref a)) (swiz x (var_ref v1)) (swiz x (var_ref 
v2)))\n"
+   "  (assign (swiz y (var_ref a)) (swiz y (var_ref v1)) (swiz y (var_ref 
v2)))\n"
+   "  (assign (swiz z (var_ref a)) (swiz z (var_ref v1)) (swiz z (var_ref 
v2)))\n"
+   "  (assign (swiz w (var_ref a)) (swiz w (var_ref v1)) (swiz w (var_ref 
v2)))\n"
+   "  (return (var_ref v1\n"
+   "))\n"
+};
+
 static const char *builtins_130_notEqual = {
"((function notEqual\n"
"   (signature bvec2\n"
@@ -3445,7 +3466,7 @@ static const char *builtins_130_sign = {
"   (signature int\n"
" 

Mesa (glsl2): ir_constant_expression: Fix broken code for floating point modulus.

2010-07-22 Thread Kenneth Graunke
Module: Mesa
Branch: glsl2
Commit: 3e882ec84a2493da74c55d105010a37de521e593
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3e882ec84a2493da74c55d105010a37de521e593

Author: Kenneth Graunke 
Date:   Thu Jul 22 17:44:34 2010 -0700

ir_constant_expression: Fix broken code for floating point modulus.

It's supposed to be x - y * floor(x/y), not (x - y) * floor(x/y).

---

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

diff --git a/src/glsl/ir_constant_expression.cpp 
b/src/glsl/ir_constant_expression.cpp
index 5bef17c..f15530a 100644
--- a/src/glsl/ir_constant_expression.cpp
+++ b/src/glsl/ir_constant_expression.cpp
@@ -533,7 +533,7 @@ ir_expression::constant_expression_value()
/* We don't use fmod because it rounds toward zero; GLSL specifies
 * the use of floor.
 */
-   data.f[c] = (op[0]->value.f[c0] - op[1]->value.f[c1])
+   data.f[c] = op[0]->value.f[c0] - op[1]->value.f[c1]
   * floorf(op[0]->value.f[c0] / op[1]->value.f[c1]);
break;
 default:

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


Mesa (master): glx: Use _Xglobal_lock for protecting extension display list

2010-07-22 Thread Kristian Høgsberg
Module: Mesa
Branch: master
Commit: ab434f6b7641a64d30725a9ac24929240362d466
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab434f6b7641a64d30725a9ac24929240362d466

Author: Kristian Høgsberg 
Date:   Thu Jul 22 21:11:02 2010 -0400

glx: Use _Xglobal_lock for protecting extension display list

Avoids double locking glXLock in the X wire to event handlers.

---

 src/glx/dri2.c  |4 +-
 src/glx/glxclient.h |4 +
 src/glx/glxext.c|  204 ---
 3 files changed, 86 insertions(+), 126 deletions(-)

diff --git a/src/glx/dri2.c b/src/glx/dri2.c
index ab530ba..d53431c 100644
--- a/src/glx/dri2.c
+++ b/src/glx/dri2.c
@@ -88,7 +88,7 @@ static Bool
 DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire)
 {
XExtDisplayInfo *info = DRI2FindDisplay(dpy);
-   XExtDisplayInfo *glx_info = __glXFindDisplay(dpy);
+   __GLXdisplayPrivate *glx_dpy = __glXInitialize(dpy);
 
XextCheckExtension(dpy, info, dri2ExtensionName, False);
 
@@ -107,7 +107,7 @@ DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire)
 return False;
 
   aevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *) wire);
-  aevent->type = glx_info->codes->first_event + GLX_BufferSwapComplete;
+  aevent->type = glx_dpy->codes->first_event + GLX_BufferSwapComplete;
   aevent->send_event = (awire->type & 0x80) != 0;
   aevent->display = dpy;
   aevent->drawable = awire->drawable;
diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h
index 26f2885..4f83305 100644
--- a/src/glx/glxclient.h
+++ b/src/glx/glxclient.h
@@ -557,6 +557,10 @@ struct __GLXscreenConfigsRec
  */
 struct __GLXdisplayPrivateRec
 {
+   /* The extension protocol codes */
+   XExtCodes *codes;
+   struct __GLXdisplayPrivateRec *next;
+
 /**
  * Back pointer to the display
  */
diff --git a/src/glx/glxext.c b/src/glx/glxext.c
index 9c3c7a4..88e74c2 100644
--- a/src/glx/glxext.c
+++ b/src/glx/glxext.c
@@ -68,13 +68,8 @@ _X_HIDDEN int __glXDebug = 0;
 
 /* Extension required boiler plate */
 
-static char *__glXExtensionName = GLX_EXTENSION_NAME;
-#ifdef GLX_USE_APPLEGL
-static XExtensionInfo __glXExtensionInfo_data;
-XExtensionInfo *__glXExtensionInfo = &__glXExtensionInfo_data;
-#else
-XExtensionInfo *__glXExtensionInfo = NULL;
-#endif
+static const char __glXExtensionName[] = GLX_EXTENSION_NAME;
+static __GLXdisplayPrivate *glx_displays;
 
 static /* const */ char *error_list[] = {
"GLXBadContext",
@@ -92,21 +87,6 @@ static /* const */ char *error_list[] = {
"GLXBadWindow",
 };
 
-static int
-__glXCloseDisplay(Display * dpy, XExtCodes * codes)
-{
-   GLXContext gc;
-
-   gc = __glXGetCurrentContext();
-   if (dpy == gc->currentDpy) {
-  __glXSetCurrentContextNull();
-  __glXFreeContext(gc);
-   }
-
-   return XextRemoveDisplay(__glXExtensionInfo, dpy);
-}
-
-
 #ifdef GLX_USE_APPLEGL
 static char *__glXErrorString(Display *dpy, int code, XExtCodes *codes, 
   char *buf, int n);
@@ -115,29 +95,14 @@ static char *__glXErrorString(Display *dpy, int code, 
XExtCodes *codes,
 static
 XEXT_GENERATE_ERROR_STRING(__glXErrorString, __glXExtensionName,
__GLX_NUMBER_ERRORS, error_list)
+
+static int
+__glXCloseDisplay(Display * dpy, XExtCodes * codes);
 static Bool
 __glXWireToEvent(Display *dpy, XEvent *event, xEvent *wire);
 static Status
 __glXEventToWire(Display *dpy, XEvent *event, xEvent *wire);
 
-static /* const */ XExtensionHooks __glXExtensionHooks = {
-  NULL,   /* create_gc */
-  NULL,   /* copy_gc */
-  NULL,   /* flush_gc */
-  NULL,   /* free_gc */
-  NULL,   /* create_font */
-  NULL,   /* free_font */
-  __glXCloseDisplay,  /* close_display */
-  __glXWireToEvent,   /* wire_to_event */
-  __glXEventToWire,   /* event_to_wire */
-  NULL,   /* error */
-  __glXErrorString,   /* error_string */
-};
-
-XEXT_GENERATE_FIND_DISPLAY(__glXFindDisplay, __glXExtensionInfo,
-   __glXExtensionName, &__glXExtensionHooks,
-   __GLX_NUMBER_EVENTS, NULL)
-
 /*
  * GLX events are a bit funky.  We don't stuff the X event code into
  * our user exposed (via XNextEvent) structure.  Instead we use the GLX
@@ -150,11 +115,12 @@ XEXT_GENERATE_FIND_DISPLAY(__glXFindDisplay, 
__glXExtensionInfo,
 static Bool
 __glXWireToEvent(Display *dpy, XEvent *event, xEvent *wire)
 {
-   XExtDisplayInfo *info = __glXFindDisplay(dpy);
+   __GLXdisplayPrivate *glx_dpy = __glXInitialize(dpy);
 
-   XextCheckExtension(dpy, info, __glXExtensionName, False);
+   if (glx_dpy == NULL)
+  return False;
 
-   switch ((wire->u.u.type & 0x7f) - info->codes->first_event) {
+   switch ((wire->u.u.type & 0x7f) - glx_dpy->codes->first_event) {
case GLX_PbufferClobber:
{
   GLXPbufferClobberEvent *aevent = (GLXPbufferClobberEvent *)event;
@@ -209,9 +175,1

Mesa (master): glx: Allocate the __GLXcontext in the DRI drivers

2010-07-22 Thread Kristian Høgsberg
Module: Mesa
Branch: master
Commit: 31819830b66a49f1b62e09090cc65aefc657aeb8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=31819830b66a49f1b62e09090cc65aefc657aeb8

Author: Kristian Høgsberg 
Date:   Thu Jul 22 21:24:14 2010 -0400

glx: Allocate the __GLXcontext in the DRI drivers

---

 src/glx/dri2_glx.c   |   40 +++
 src/glx/dri_glx.c|   43 +++-
 src/glx/drisw_glx.c  |   30 --
 src/glx/glxclient.h  |   31 +-
 src/glx/glxcmds.c|  108 ++---
 src/glx/glxcurrent.c |8 +--
 6 files changed, 136 insertions(+), 124 deletions(-)

diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c
index 6ce5ae6..778607d 100644
--- a/src/glx/dri2_glx.c
+++ b/src/glx/dri2_glx.c
@@ -94,9 +94,9 @@ struct dri2_screen {
 
 struct dri2_context
 {
-   __GLXDRIcontext base;
+   __GLXcontext base;
+   __GLXDRIcontext dri_vtable;
__DRIcontext *driContext;
-   __GLXscreenConfigs *psc;
 };
 
 struct dri2_drawable
@@ -111,12 +111,13 @@ struct dri2_drawable
int swap_interval;
 };
 
+static const struct glx_context_vtable dri2_context_vtable;
+
 static void
-dri2DestroyContext(__GLXDRIcontext *context,
-  __GLXscreenConfigs *base, Display *dpy)
+dri2DestroyContext(__GLXcontext *context)
 {
struct dri2_context *pcp = (struct dri2_context *) context;
-   struct dri2_screen *psc = (struct dri2_screen *) base;
+   struct dri2_screen *psc = (struct dri2_screen *) context->psc;
 
(*psc->core->destroyContext) (pcp->driContext);
 
@@ -124,11 +125,11 @@ dri2DestroyContext(__GLXDRIcontext *context,
 }
 
 static Bool
-dri2BindContext(__GLXDRIcontext *context,
+dri2BindContext(__GLXcontext *context,
__GLXDRIdrawable *draw, __GLXDRIdrawable *read)
 {
struct dri2_context *pcp = (struct dri2_context *) context;
-   struct dri2_screen *psc = (struct dri2_screen *) pcp->psc;
+   struct dri2_screen *psc = (struct dri2_screen *) pcp->base.psc;
struct dri2_drawable *pdr = (struct dri2_drawable *) draw;
struct dri2_drawable *prd = (struct dri2_drawable *) read;
 
@@ -137,18 +138,18 @@ dri2BindContext(__GLXDRIcontext *context,
 }
 
 static void
-dri2UnbindContext(__GLXDRIcontext *context)
+dri2UnbindContext(__GLXcontext *context)
 {
struct dri2_context *pcp = (struct dri2_context *) context;
-   struct dri2_screen *psc = (struct dri2_screen *) pcp->psc;
+   struct dri2_screen *psc = (struct dri2_screen *) pcp->base.psc;
 
(*psc->core->unbindContext) (pcp->driContext);
 }
 
-static __GLXDRIcontext *
+static __GLXcontext *
 dri2CreateContext(__GLXscreenConfigs *base,
   const __GLcontextModes * mode,
-  GLXContext gc, GLXContext shareList, int renderType)
+  GLXContext shareList, int renderType)
 {
struct dri2_context *pcp, *pcp_shared;
struct dri2_screen *psc = (struct dri2_screen *) base;
@@ -164,7 +165,12 @@ dri2CreateContext(__GLXscreenConfigs *base,
if (pcp == NULL)
   return NULL;
 
-   pcp->psc = &psc->base;
+   memset(pcp, 0, sizeof *pcp);
+   if (!glx_context_init(&pcp->base, &psc->base, mode)) {
+  Xfree(pcp);
+  return NULL;
+   }
+
pcp->driContext =
   (*psc->dri2->createNewContext) (psc->driScreen,
   config->driConfig, shared, pcp);
@@ -174,9 +180,11 @@ dri2CreateContext(__GLXscreenConfigs *base,
   return NULL;
}
 
-   pcp->base.destroyContext = dri2DestroyContext;
-   pcp->base.bindContext = dri2BindContext;
-   pcp->base.unbindContext = dri2UnbindContext;
+   pcp->base.vtable = &dri2_context_vtable;
+   pcp->base.driContext = &pcp->dri_vtable;
+   pcp->dri_vtable.destroyContext = dri2DestroyContext;
+   pcp->dri_vtable.bindContext = dri2BindContext;
+   pcp->dri_vtable.unbindContext = dri2UnbindContext;
 
return &pcp->base;
 }
@@ -826,8 +834,6 @@ dri2CreateScreen(int screen, __GLXdisplayPrivate * priv)
psp->copySubBuffer = dri2CopySubBuffer;
__glXEnableDirectExtension(&psc->base, "GLX_MESA_copy_sub_buffer");
 
-   psc->base.direct_context_vtable = &dri2_context_vtable;
-
Xfree(driverName);
Xfree(deviceName);
 
diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c
index 369d07a..959fc74 100644
--- a/src/glx/dri_glx.c
+++ b/src/glx/dri_glx.c
@@ -78,7 +78,8 @@ struct dri_screen
 
 struct dri_context
 {
-   __GLXDRIcontext base;
+   __GLXcontext base;
+   __GLXDRIcontext dri_vtable;
__DRIcontext *driContext;
XID hwContextID;
__GLXscreenConfigs *psc;
@@ -91,6 +92,11 @@ struct dri_drawable
__DRIdrawable *driDrawable;
 };
 
+static const struct glx_context_vtable dri_context_vtable = {
+   NULL,
+   NULL,
+};
+
 /*
  * Given a display pointer and screen number, determine the name of
  * the DRI driver for the screen. (I.e. "r128", "tdfx", etc).
@@ -497,11 +503,10 @@ CallCreateNewScreen(Display *dpy, int scrn, struct 
dri_screen *psc,
 }
 
 static void
-driDestroyContext(__GLXDRIcontext * context,
- 

Mesa (master): glx: Move WaitGL, WaitX, UseXFont to context vtable functions

2010-07-22 Thread Kristian Høgsberg
Module: Mesa
Branch: master
Commit: 7b7845a076c933e096ac511b4184141ba194449a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7b7845a076c933e096ac511b4184141ba194449a

Author: Kristian Høgsberg 
Date:   Thu Jul 22 22:24:00 2010 -0400

glx: Move WaitGL, WaitX, UseXFont to context vtable functions

---

 src/glx/dri2_glx.c  |   21 ---
 src/glx/dri_glx.c   |5 +-
 src/glx/drisw_glx.c |   11 +++-
 src/glx/glxclient.h |9 ++-
 src/glx/glxcmds.c   |  148 +++
 src/glx/xfont.c |4 +-
 6 files changed, 97 insertions(+), 101 deletions(-)

diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c
index 778607d..aa01203 100644
--- a/src/glx/dri2_glx.c
+++ b/src/glx/dri2_glx.c
@@ -394,22 +394,24 @@ dri2_copy_drawable(struct dri2_drawable *priv, int dest, 
int src)
 }
 
 static void
-dri2WaitX(__GLXDRIdrawable *pdraw)
+dri2_wait_x(__GLXcontext *gc)
 {
-   struct dri2_drawable *priv = (struct dri2_drawable *) pdraw;
+   struct dri2_drawable *priv = (struct dri2_drawable *)
+  GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable, NULL);
 
-   if (!priv->have_fake_front)
+   if (priv == NULL || !priv->have_fake_front)
   return;
 
dri2_copy_drawable(priv, DRI2BufferFakeFrontLeft, DRI2BufferFrontLeft);
 }
 
 static void
-dri2WaitGL(__GLXDRIdrawable * pdraw)
+dri2_wait_gl(__GLXcontext *gc)
 {
-   struct dri2_drawable *priv = (struct dri2_drawable *) pdraw;
+   struct dri2_drawable *priv = (struct dri2_drawable *)
+  GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable, NULL);
 
-   if (!priv->have_fake_front)
+   if (priv == NULL || !priv->have_fake_front)
   return;
 
dri2_copy_drawable(priv, DRI2BufferFrontLeft, DRI2BufferFakeFrontLeft);
@@ -426,7 +428,7 @@ dri2FlushFrontBuffer(__DRIdrawable *driDrawable, void 
*loaderPrivate)
if (!pdp->invalidateAvailable)
dri2InvalidateBuffers(priv->dpy, pdraw->base.drawable);
 
-   dri2WaitGL(loaderPrivate);
+   dri2_copy_drawable(pdraw, DRI2BufferFrontLeft, DRI2BufferFakeFrontLeft);
 }
 
 
@@ -672,6 +674,9 @@ dri2_release_tex_image(Display * dpy, GLXDrawable drawable, 
int buffer)
 }
 
 static const struct glx_context_vtable dri2_context_vtable = {
+   dri2_wait_gl,
+   dri2_wait_x,
+   DRI_glXUseXFont,
dri2_bind_tex_image,
dri2_release_tex_image,
 };
@@ -804,8 +809,6 @@ dri2CreateScreen(int screen, __GLXdisplayPrivate * priv)
psp->createContext = dri2CreateContext;
psp->createDrawable = dri2CreateDrawable;
psp->swapBuffers = dri2SwapBuffers;
-   psp->waitGL = dri2WaitGL;
-   psp->waitX = dri2WaitX;
psp->getDrawableMSC = NULL;
psp->waitForMSC = NULL;
psp->waitForSBC = NULL;
diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c
index 959fc74..352d833 100644
--- a/src/glx/dri_glx.c
+++ b/src/glx/dri_glx.c
@@ -95,6 +95,9 @@ struct dri_drawable
 static const struct glx_context_vtable dri_context_vtable = {
NULL,
NULL,
+   DRI_glXUseXFont,
+   NULL,
+   NULL,
 };
 
 /*
@@ -879,8 +882,6 @@ driCreateScreen(int screen, __GLXdisplayPrivate *priv)
psp->createContext = driCreateContext;
psp->createDrawable = driCreateDrawable;
psp->swapBuffers = driSwapBuffers;
-   psp->waitX = NULL;
-   psp->waitGL = NULL;
 
 #ifdef __DRI_SWAP_BUFFER_COUNTER
psp->getDrawableMSC = driDrawableGetMSC;
diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c
index 367aa6a..0ad7391 100644
--- a/src/glx/drisw_glx.c
+++ b/src/glx/drisw_glx.c
@@ -272,6 +272,14 @@ driUnbindContext(__GLXcontext * context)
(*psc->core->unbindContext) (pcp->driContext);
 }
 
+static const struct glx_context_vtable drisw_context_vtable = {
+   NULL,
+   NULL,
+   DRI_glXUseXFont,
+   NULL,
+   NULL,
+};
+
 static __GLXcontext *
 driCreateContext(__GLXscreenConfigs *base,
 const __GLcontextModes *mode,
@@ -308,6 +316,7 @@ driCreateContext(__GLXscreenConfigs *base,
   return NULL;
}
 
+   pcp->base.vtable = &drisw_context_vtable;
pcp->base.driContext = &pcp->dri_vtable;
pcp->dri_vtable.destroyContext = driDestroyContext;
pcp->dri_vtable.bindContext = driBindContext;
@@ -472,8 +481,6 @@ driCreateScreen(int screen, __GLXdisplayPrivate *priv)
psp->createContext = driCreateContext;
psp->createDrawable = driCreateDrawable;
psp->swapBuffers = driSwapBuffers;
-   psp->waitX = NULL;
-   psp->waitGL = NULL;
 
return &psc->base;
 
diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h
index dcb75d4..581db97 100644
--- a/src/glx/glxclient.h
+++ b/src/glx/glxclient.h
@@ -95,7 +95,8 @@ typedef struct _glapi_table __GLapi;
 #define containerOf(ptr, type, member)  \
 (type *)( (char *)ptr - offsetof(type,member) )
 
-extern void DRI_glXUseXFont(Font font, int first, int count, int listbase);
+extern void DRI_glXUseXFont(GLXContext CC,
+   Font font, int first, int count, int listbase);
 
 #endif
 
@@ -139,8 +140,6 @@ struct __GLXDRIscreenRec {
  int64_t divisor, int64_t remainder);
   

Mesa (master): glx: Drop screen argument to GetGLXDRIDrawable

2010-07-22 Thread Kristian Høgsberg
Module: Mesa
Branch: master
Commit: eeaab2047cfce8a7445fd9f835e737682eb503ac
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=eeaab2047cfce8a7445fd9f835e737682eb503ac

Author: Kristian Høgsberg 
Date:   Thu Jul 22 22:36:37 2010 -0400

glx: Drop screen argument to GetGLXDRIDrawable

We'll just get it from the returned drawable when we need it.

---

 src/glx/dri2_glx.c|6 ++--
 src/glx/glx_pbuffer.c |   10 +++-
 src/glx/glxclient.h   |2 +-
 src/glx/glxcmds.c |   58 +---
 4 files changed, 33 insertions(+), 43 deletions(-)

diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c
index aa01203..2f12387 100644
--- a/src/glx/dri2_glx.c
+++ b/src/glx/dri2_glx.c
@@ -397,7 +397,7 @@ static void
 dri2_wait_x(__GLXcontext *gc)
 {
struct dri2_drawable *priv = (struct dri2_drawable *)
-  GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable, NULL);
+  GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable);
 
if (priv == NULL || !priv->have_fake_front)
   return;
@@ -409,7 +409,7 @@ static void
 dri2_wait_gl(__GLXcontext *gc)
 {
struct dri2_drawable *priv = (struct dri2_drawable *)
-  GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable, NULL);
+  GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable);
 
if (priv == NULL || !priv->have_fake_front)
   return;
@@ -638,7 +638,7 @@ dri2_bind_tex_image(Display * dpy,
int buffer, const int *attrib_list)
 {
GLXContext gc = __glXGetCurrentContext();
-   __GLXDRIdrawable *base = GetGLXDRIDrawable(dpy, drawable, NULL);
+   __GLXDRIdrawable *base = GetGLXDRIDrawable(dpy, drawable);
__GLXdisplayPrivate *dpyPriv = __glXInitialize(dpy);
struct dri2_drawable *pdraw = (struct dri2_drawable *) base;
struct dri2_display *pdp =
diff --git a/src/glx/glx_pbuffer.c b/src/glx/glx_pbuffer.c
index 171ede4..02809aa 100644
--- a/src/glx/glx_pbuffer.c
+++ b/src/glx/glx_pbuffer.c
@@ -95,7 +95,7 @@ ChangeDrawableAttribute(Display * dpy, GLXDrawable drawable,
   return;
}
 
-   pdraw = GetGLXDRIDrawable(dpy, drawable, NULL);
+   pdraw = GetGLXDRIDrawable(dpy, drawable);
 
opcode = __glXSetupForCommand(dpy);
if (!opcode)
@@ -214,14 +214,12 @@ CreateDRIDrawable(Display *dpy, const __GLcontextModes 
*fbconfig,
 static void
 DestroyDRIDrawable(Display *dpy, GLXDrawable drawable, int destroy_xdrawable)
 {
-   int screen;
__GLXdisplayPrivate *const priv = __glXInitialize(dpy);
-   __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, drawable, &screen);
-   __GLXscreenConfigs *psc = priv->screenConfigs[screen];
+   __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, drawable);
 
if (pdraw != NULL) {
   if (destroy_xdrawable)
- XFreePixmap(psc->dpy, pdraw->xDrawable);
+ XFreePixmap(pdraw->psc->dpy, pdraw->xDrawable);
   (*pdraw->destroyDrawable) (pdraw);
   __glxHashDelete(priv->drawHash, drawable);
}
@@ -341,7 +339,7 @@ GetDrawableAttribute(Display * dpy, GLXDrawable drawable,
 
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
  {
-__GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, drawable, NULL);
+__GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, drawable);
 
 if (pdraw != NULL && !pdraw->textureTarget)
pdraw->textureTarget =
diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h
index 581db97..8112c01 100644
--- a/src/glx/glxclient.h
+++ b/src/glx/glxclient.h
@@ -791,7 +791,7 @@ __glxGetMscRate(__GLXDRIdrawable *glxDraw,
 XExtDisplayInfo *__glXFindDisplay (Display *dpy);
 
 extern __GLXDRIdrawable *
-GetGLXDRIDrawable(Display *dpy, GLXDrawable drawable, int *const scrn_num);
+GetGLXDRIDrawable(Display *dpy, GLXDrawable drawable);
 
 #endif
 
diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c
index eef2b62..8ee9a99 100644
--- a/src/glx/glxcmds.c
+++ b/src/glx/glxcmds.c
@@ -126,7 +126,7 @@ GarbageCollectDRIDrawables(__GLXscreenConfigs * sc)
  *   the drawable is not associated with a direct-rendering context.
  */
 _X_HIDDEN __GLXDRIdrawable *
-GetGLXDRIDrawable(Display * dpy, GLXDrawable drawable, int *const scrn_num)
+GetGLXDRIDrawable(Display * dpy, GLXDrawable drawable)
 {
__GLXdisplayPrivate *priv = __glXInitialize(dpy);
__GLXDRIdrawable *pdraw;
@@ -134,11 +134,8 @@ GetGLXDRIDrawable(Display * dpy, GLXDrawable drawable, int 
*const scrn_num)
if (priv == NULL)
   return NULL;
 
-   if (__glxHashLookup(priv->drawHash, drawable, (void *) &pdraw) == 0) {
-  if (scrn_num != NULL)
-*scrn_num = pdraw->psc->scr;
+   if (__glxHashLookup(priv->drawHash, drawable, (void *) &pdraw) == 0)
   return pdraw;
-   }
 
return NULL;
 }
@@ -1022,7 +1019,7 @@ glXDestroyGLXPixmap(Display * dpy, GLXPixmap glxpixmap)
 #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
{
   __GLXdisplayPrivate *const priv = __glXInitialize(dpy);
-  __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, glxpixmap, NULL);

Mesa (master): tgsi: Fix error message on invalid swizzle parse

2010-07-22 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: e36a08221400af025f1585f4e1ddbd3715810368
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e36a08221400af025f1585f4e1ddbd3715810368

Author: Jakob Bornecrantz 
Date:   Thu Jul 15 21:11:24 2010 -0700

tgsi: Fix error message on invalid swizzle parse

---

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

diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c 
b/src/gallium/auxiliary/tgsi/tgsi_text.c
index 8a9409b..b01d2ff 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_text.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_text.c
@@ -732,7 +732,7 @@ parse_optional_swizzle(
  else if (uprcase( *cur ) == 'W')
 swizzle[i] = TGSI_SWIZZLE_W;
  else {
-   report_error( ctx, "Expected register swizzle component `x', `y', 
`z', `w', `0' or `1'" );
+   report_error( ctx, "Expected register swizzle component `x', `y', 
`z' or `w'" );
return FALSE;
  }
  cur++;

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


Mesa (master): i915g: Ifdef out debug code on non-debug builds

2010-07-22 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 4eaa6710526469b56875ff9c1ec07e673169386e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4eaa6710526469b56875ff9c1ec07e673169386e

Author: Jakob Bornecrantz 
Date:   Thu Jul 22 20:00:28 2010 -0700

i915g: Ifdef out debug code on non-debug builds

---

 src/gallium/drivers/i915/i915_debug.h |5 +
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_debug.h 
b/src/gallium/drivers/i915/i915_debug.h
index 8aa09f9..fa60799 100644
--- a/src/gallium/drivers/i915/i915_debug.h
+++ b/src/gallium/drivers/i915/i915_debug.h
@@ -47,6 +47,7 @@ struct i915_winsys_batchbuffer;
 
 extern unsigned i915_debug;
 
+#ifdef DEBUG
 static INLINE boolean
 I915_DBG_ON(unsigned flags)
 {
@@ -64,6 +65,10 @@ I915_DBG(unsigned flags, const char *fmt, ...)
   va_end(args);
}
 }
+#else
+#define I915_DBG_ON(flags) (0)
+static INLINE void I915_DBG(unsigned flags, const char *fmt, ...) {}
+#endif
 
 void i915_debug_init(struct i915_screen *i915);
 

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


Mesa (master): i915g: Add some debug prints in texture code

2010-07-22 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 5de2678b4e552c032cf2da6ec1549020fd9c7afd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5de2678b4e552c032cf2da6ec1549020fd9c7afd

Author: Jakob Bornecrantz 
Date:   Thu Jul 22 20:02:58 2010 -0700

i915g: Add some debug prints in texture code

---

 src/gallium/drivers/i915/i915_resource_texture.c |   16 ++--
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_resource_texture.c 
b/src/gallium/drivers/i915/i915_resource_texture.c
index 17fcdee..8252881 100644
--- a/src/gallium/drivers/i915/i915_resource_texture.c
+++ b/src/gallium/drivers/i915/i915_resource_texture.c
@@ -42,6 +42,7 @@
 #include "i915_resource.h"
 #include "i915_screen.h"
 #include "i915_winsys.h"
+#include "i915_debug.h"
 
 
 #define DEBUG_TEXTURES 0
@@ -800,12 +801,10 @@ i915_texture_create(struct pipe_screen *screen,
ws->buffer_unmap(ws, tex->buffer);
 #endif
 
-#if DEBUG_TEXTURES
-   debug_printf("%s: %p size %u, stride %u, blocks (%u, %u)\n", __func__,
-tex, (unsigned int)tex_size, tex->stride,
-tex->stride / util_format_get_blocksize(tex->b.b.format),
-tex->total_nblocksy);
-#endif
+   I915_DBG(DBG_TEXTURE, "%s: %p size %u, stride %u, blocks (%u, %u)\n", 
__func__,
+tex, (unsigned int)tex_size, tex->stride,
+tex->stride / util_format_get_blocksize(tex->b.b.format),
+tex->total_nblocksy);
 
return &tex->b.b;
 
@@ -852,6 +851,11 @@ i915_texture_from_handle(struct pipe_screen * screen,
 
tex->buffer = buffer;
 
+   I915_DBG(DBG_TEXTURE, "%s: %p stride %u, blocks (%ux%u)\n", __func__,
+tex, tex->stride,
+tex->stride / util_format_get_blocksize(tex->b.b.format),
+tex->total_nblocksy);
+
return &tex->b.b;
 }
 

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


Mesa (master): i915g: Set total_nblocksy in from_handle

2010-07-22 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 37dabfeef76134b4e3d987723e70e869036d1083
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=37dabfeef76134b4e3d987723e70e869036d1083

Author: Jakob Bornecrantz 
Date:   Thu Jul 22 20:03:29 2010 -0700

i915g: Set total_nblocksy in from_handle

---

 src/gallium/drivers/i915/i915_resource_texture.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_resource_texture.c 
b/src/gallium/drivers/i915/i915_resource_texture.c
index 8252881..752ddaa 100644
--- a/src/gallium/drivers/i915/i915_resource_texture.c
+++ b/src/gallium/drivers/i915/i915_resource_texture.c
@@ -845,6 +845,7 @@ i915_texture_from_handle(struct pipe_screen * screen,
tex->b.b.screen = screen;
 
tex->stride = stride;
+   tex->total_nblocksy = align_nblocksy(tex->b.b.format, tex->b.b.height0, 8);
 
i915_texture_set_level_info(tex, 0, 1);
i915_texture_set_image_offset(tex, 0, 0, 0, 0);

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


Mesa (master): i915g: Allow wrapping with software pipes

2010-07-22 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 5ccab575fd737f3f08fe345ed96518f3784b74d3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5ccab575fd737f3f08fe345ed96518f3784b74d3

Author: Jakob Bornecrantz 
Date:   Thu Jul 22 20:11:20 2010 -0700

i915g: Allow wrapping with software pipes

---

 src/gallium/targets/dri-i915/Makefile |   10 +++---
 src/gallium/targets/dri-i915/target.c |4 
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/gallium/targets/dri-i915/Makefile 
b/src/gallium/targets/dri-i915/Makefile
index 068f223..e88c3c9 100644
--- a/src/gallium/targets/dri-i915/Makefile
+++ b/src/gallium/targets/dri-i915/Makefile
@@ -6,11 +6,11 @@ LIBNAME = i915_dri.so
 PIPE_DRIVERS = \
$(TOP)/src/gallium/state_trackers/dri/drm/libdridrm.a \
$(TOP)/src/gallium/winsys/i915/drm/libi915drm.a \
+   $(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a \
+   $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
$(TOP)/src/gallium/drivers/galahad/libgalahad.a \
$(TOP)/src/gallium/drivers/trace/libtrace.a \
$(TOP)/src/gallium/drivers/rbug/librbug.a \
-   $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
-   $(TOP)/src/gallium/drivers/identity/libidentity.a \
$(TOP)/src/gallium/drivers/i915/libi915.a
 
 C_SOURCES = \
@@ -19,7 +19,11 @@ C_SOURCES = \
$(DRIVER_SOURCES)
 
 DRIVER_DEFINES = \
-   -DGALLIUM_RBUG -DGALLIUM_TRACE -DGALLIUM_GALAHAD
+   -DGALLIUM_RBUG -DGALLIUM_TRACE -DGALLIUM_GALAHAD -DGALLIUM_SOFTPIPE
+
+ifeq ($(MESA_LLVM),1)
+DRIVER_DEFINS += -DGALLIUM_LLVMPIPE
+endif
 
 include ../Makefile.dri
 
diff --git a/src/gallium/targets/dri-i915/target.c 
b/src/gallium/targets/dri-i915/target.c
index 8c8ef7e..5ae6ca3 100644
--- a/src/gallium/targets/dri-i915/target.c
+++ b/src/gallium/targets/dri-i915/target.c
@@ -1,5 +1,6 @@
 
 #include "state_tracker/drm_driver.h"
+#include "target-helpers/inline_wrapper_sw_helper.h"
 #include "target-helpers/inline_debug_helper.h"
 #include "i915/drm/i915_drm_public.h"
 #include "i915/i915_public.h"
@@ -18,6 +19,9 @@ create_screen(int fd)
if (!screen)
   return NULL;
 
+   if (debug_get_bool_option("I915_SOFTWARE", FALSE))
+  screen = sw_screen_wrap(screen);
+
screen = debug_screen_wrap(screen);
 
return screen;

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


Mesa (master): i915g: Rename winsys debug options

2010-07-22 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 095e99ddf6187aacf520944dabababdfd7b9a974
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=095e99ddf6187aacf520944dabababdfd7b9a974

Author: Jakob Bornecrantz 
Date:   Thu Jul 22 20:13:02 2010 -0700

i915g: Rename winsys debug options

---

 src/gallium/winsys/i915/drm/i915_drm_winsys.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/winsys/i915/drm/i915_drm_winsys.c 
b/src/gallium/winsys/i915/drm/i915_drm_winsys.c
index d591645..179a84a 100644
--- a/src/gallium/winsys/i915/drm/i915_drm_winsys.c
+++ b/src/gallium/winsys/i915/drm/i915_drm_winsys.c
@@ -70,8 +70,8 @@ i915_drm_winsys_create(int drmFD)
idws->pools.gem = drm_intel_bufmgr_gem_init(idws->fd, idws->max_batch_size);
drm_intel_bufmgr_gem_enable_reuse(idws->pools.gem);
 
-   idws->dump_cmd = debug_get_bool_option("INTEL_DUMP_CMD", FALSE);
-   idws->send_cmd = !debug_get_bool_option("INTEL_NO_HW", FALSE);
+   idws->dump_cmd = debug_get_bool_option("I915_DUMP_CMD", FALSE);
+   idws->send_cmd = !debug_get_bool_option("I915_NO_HW", FALSE);
 
return &idws->base;
 }

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


Mesa (master): llvmpipe: Don't align values already aligned

2010-07-22 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: dc544d87a2f66ba8cf44e0b544f6eca3729e4f2a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dc544d87a2f66ba8cf44e0b544f6eca3729e4f2a

Author: Jakob Bornecrantz 
Date:   Thu Jul 22 20:17:35 2010 -0700

llvmpipe: Don't align values already aligned

---

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

diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c 
b/src/gallium/drivers/llvmpipe/lp_texture.c
index bbd8345..f4f2c68 100644
--- a/src/gallium/drivers/llvmpipe/lp_texture.c
+++ b/src/gallium/drivers/llvmpipe/lp_texture.c
@@ -184,8 +184,8 @@ llvmpipe_displaytarget_layout(struct llvmpipe_screen 
*screen,
 */
const unsigned width = align(lpr->base.width0, TILE_SIZE);
const unsigned height = align(lpr->base.height0, TILE_SIZE);
-   const unsigned width_t = align(width, TILE_SIZE) / TILE_SIZE;
-   const unsigned height_t = align(height, TILE_SIZE) / TILE_SIZE;
+   const unsigned width_t = width / TILE_SIZE;
+   const unsigned height_t = height / TILE_SIZE;
 
lpr->tiles_per_row[0] = width_t;
lpr->tiles_per_image[0] = width_t * height_t;

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


Mesa (master): llvmpipe: Partially fix resource texture from_handle

2010-07-22 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 2299ff4c6bc172cb25ea3ecb75ee3dcc2cffd7ed
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2299ff4c6bc172cb25ea3ecb75ee3dcc2cffd7ed

Author: Jakob Bornecrantz 
Date:   Thu Jul 22 20:18:51 2010 -0700

llvmpipe: Partially fix resource texture from_handle

---

 src/gallium/drivers/llvmpipe/lp_texture.c |   36 -
 1 files changed, 35 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c 
b/src/gallium/drivers/llvmpipe/lp_texture.c
index f4f2c68..25112c1 100644
--- a/src/gallium/drivers/llvmpipe/lp_texture.c
+++ b/src/gallium/drivers/llvmpipe/lp_texture.c
@@ -56,6 +56,7 @@
 #ifdef DEBUG
 static struct llvmpipe_resource resource_list;
 #endif
+static unsigned id_counter = 0;
 
 
 static INLINE boolean
@@ -210,7 +211,6 @@ static struct pipe_resource *
 llvmpipe_resource_create(struct pipe_screen *_screen,
  const struct pipe_resource *templat)
 {
-   static unsigned id_counter = 0;
struct llvmpipe_screen *screen = llvmpipe_screen(_screen);
struct llvmpipe_resource *lpr = CALLOC_STRUCT(llvmpipe_resource);
if (!lpr)
@@ -446,6 +446,10 @@ llvmpipe_resource_from_handle(struct pipe_screen *screen,
 {
struct sw_winsys *winsys = llvmpipe_screen(screen)->winsys;
struct llvmpipe_resource *lpr = CALLOC_STRUCT(llvmpipe_resource);
+   unsigned width, height, width_t, height_t;
+
+   /* XXX Seems like from_handled depth textures doesn't work that well */
+
if (!lpr)
   return NULL;
 
@@ -453,6 +457,25 @@ llvmpipe_resource_from_handle(struct pipe_screen *screen,
pipe_reference_init(&lpr->base.reference, 1);
lpr->base.screen = screen;
 
+   width = align(lpr->base.width0, TILE_SIZE);
+   height = align(lpr->base.height0, TILE_SIZE);
+   width_t = width / TILE_SIZE;
+   height_t = height / TILE_SIZE;
+
+   /*
+* Looks like unaligned displaytargets work just fine,
+* at least sampler/render ones.
+*/
+#if 0
+   assert(lpr->base.width0 == width);
+   assert(lpr->base.height0 == height);
+#endif
+
+   lpr->tiles_per_row[0] = width_t;
+   lpr->tiles_per_image[0] = width_t * height_t;
+   lpr->num_slices_faces[0] = 1;
+   lpr->img_stride[0] = 0;
+
lpr->dt = winsys->displaytarget_from_handle(winsys,
template,
whandle,
@@ -460,6 +483,17 @@ llvmpipe_resource_from_handle(struct pipe_screen *screen,
if (!lpr->dt)
   goto fail;
 
+   lpr->layout[0] = alloc_layout_array(1, lpr->base.width0, lpr->base.height0);
+
+   assert(lpr->layout[0]);
+   assert(lpr->layout[0][0] == LP_TEX_LAYOUT_NONE);
+
+   lpr->id = id_counter++;
+
+#ifdef DEBUG
+   insert_at_tail(&resource_list, lpr);
+#endif
+
return &lpr->base;
 
  fail:

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