Mesa (master): vbo: fix breakage from previous commit

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 90d654b09d98fc597ca273c65c2b1b00a9c35f09
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=90d654b09d98fc597ca273c65c2b1b00a9c35f09

Author: Brian Paul 
Date:   Wed Jan 11 20:23:07 2012 -0700

vbo: fix breakage from previous commit

Don't know how that slipped by.

---

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

diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index 89f032f..9861b21 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -114,7 +114,7 @@ vbo_get_minmax_index(struct gl_context *ctx,
 
indices = (char *) ib->ptr + prim->start * index_size;
if (_mesa_is_bufferobj(ib->obj)) {
-  GLsizeiptr size = MIN2(count * ib_size, index->obj->Size);
+  GLsizeiptr size = MIN2(count * index_size, ib->obj->Size);
   indices = ctx->Driver.MapBufferRange(ctx, (GLintptr) indices, size,
GL_MAP_READ_BIT, ib->obj);
}

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


Mesa (master): vbo: fix void * arithmetic compilation error on MSVC

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: bbc74ffad6551272a4551f8dd9de5b34916c0ac2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bbc74ffad6551272a4551f8dd9de5b34916c0ac2

Author: Brian Paul 
Date:   Wed Jan 11 20:03:32 2012 -0700

vbo: fix void * arithmetic compilation error on MSVC

Also, call vbo_sizeof_ib_type() once and fix argument cast in
MapBufferRange() call.

---

 src/mesa/vbo/vbo_exec_array.c |9 +
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index 263e429..89f032f 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -108,13 +108,14 @@ vbo_get_minmax_index(struct gl_context *ctx,
 {
const GLboolean restart = ctx->Array.PrimitiveRestart;
const GLuint restartIndex = ctx->Array.RestartIndex;
-   const void *indices;
+   const int index_size = vbo_sizeof_ib_type(ib->type);
+   const char *indices;
GLuint i;
 
-   indices = (void *)ib->ptr + prim->start * vbo_sizeof_ib_type(ib->type);
+   indices = (char *) ib->ptr + prim->start * index_size;
if (_mesa_is_bufferobj(ib->obj)) {
-  GLsizeiptr size = MIN2(count * vbo_sizeof_ib_type(ib->type), 
ib->obj->Size);
-  indices = ctx->Driver.MapBufferRange(ctx, (GLsizeiptr) indices, size,
+  GLsizeiptr size = MIN2(count * ib_size, index->obj->Size);
+  indices = ctx->Driver.MapBufferRange(ctx, (GLintptr) indices, size,
GL_MAP_READ_BIT, ib->obj);
}
 

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


Mesa (master): docs/GL3: consolidate FBO extensions into one ARB

2012-01-11 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 4c0d88c14514346438c4d6c0c3af76a0deee2af6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4c0d88c14514346438c4d6c0c3af76a0deee2af6

Author: Marek Olšák 
Date:   Thu Jan 12 03:52:06 2012 +0100

docs/GL3: consolidate FBO extensions into one ARB

---

 docs/GL3.txt |4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/docs/GL3.txt b/docs/GL3.txt
index 4dfca64..f677b76 100644
--- a/docs/GL3.txt
+++ b/docs/GL3.txt
@@ -21,12 +21,10 @@ Float textures, renderbuffers (GL_ARB_texture_float)  DONE 
(i965, r300, r600)
 GL_EXT_packed_float   DONE (i965, r600)
 GL_EXT_texture_shared_exponentDONE (i965, r600, swrast)
 Float depth buffers (GL_ARB_depth_buffer_float)   DONE (i965, r600)
-Framebuffer objects (GL_EXT_framebuffer_object)   DONE (i965, r300, r600, 
swrast)
+Framebuffer objects (GL_ARB_framebuffer_object)   DONE (i965, r300, r600, 
swrast)
 Half-floatDONE
-Multisample blit  DONE
 Non-normalized Integer texture/framebuffer formats~50% done
 1D/2D Texture arrays  DONE
-Packed depth/stencil formats  DONE
 Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE (i965, r600, swrast)
 GL_EXT_texture_compression_rgtc   DONE (i965, r300, r600, 
swrast)
 Red and red/green texture formats DONE (i965, swrast, 
gallium)

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


Mesa (master): docs/GL3: document r300 extension support

2012-01-11 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 571e1947d0f9058a14b7f2b7798ebfacab1547a5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=571e1947d0f9058a14b7f2b7798ebfacab1547a5

Author: Marek Olšák 
Date:   Thu Jan 12 03:27:27 2012 +0100

docs/GL3: document r300 extension support

---

 docs/GL3.txt |   48 
 1 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/docs/GL3.txt b/docs/GL3.txt
index 91f42ee..4dfca64 100644
--- a/docs/GL3.txt
+++ b/docs/GL3.txt
@@ -14,24 +14,24 @@ GL 3.0:
 
 GLSL 1.30 DONE
 glBindFragDataLocation, glGetFragDataLocation DONE
-Conditional rendering (GL_NV_conditional_render)  DONE (i965, r600, swrast)
-Map buffer subranges (GL_ARB_map_buffer_range)DONE (i965, r600, swrast)
-Clamping controls (GL_ARB_color_buffer_float) DONE (i965, r600)
-Float textures, renderbuffers (GL_ARB_texture_float)  DONE (i965, r600)
+Conditional rendering (GL_NV_conditional_render)  DONE (i965, r300, r600, 
swrast)
+Map buffer subranges (GL_ARB_map_buffer_range)DONE (i965, r300, r600, 
swrast)
+Clamping controls (GL_ARB_color_buffer_float) DONE (i965, r300, r600)
+Float textures, renderbuffers (GL_ARB_texture_float)  DONE (i965, r300, r600)
 GL_EXT_packed_float   DONE (i965, r600)
 GL_EXT_texture_shared_exponentDONE (i965, r600, swrast)
 Float depth buffers (GL_ARB_depth_buffer_float)   DONE (i965, r600)
-Framebuffer objects (GL_EXT_framebuffer_object)   DONE (i965, r600, swrast)
+Framebuffer objects (GL_EXT_framebuffer_object)   DONE (i965, r300, r600, 
swrast)
 Half-floatDONE
 Multisample blit  DONE
 Non-normalized Integer texture/framebuffer formats~50% done
 1D/2D Texture arrays  DONE
 Packed depth/stencil formats  DONE
 Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE (i965, r600, swrast)
-GL_EXT_texture_compression_rgtc   DONE (i965, r600, swrast)
+GL_EXT_texture_compression_rgtc   DONE (i965, r300, r600, 
swrast)
 Red and red/green texture formats DONE (i965, swrast, 
gallium)
 Transform feedback (GL_EXT_transform_feedback)DONE (i965)
-Vertex array objects (GL_APPLE_vertex_array_object)   DONE (i965, r600, swrast)
+Vertex array objects (GL_APPLE_vertex_array_object)   DONE (i965, r300, r600, 
swrast)
 sRGB framebuffer format (GL_EXT_framebuffer_sRGB) DONE (i965, r600)
 glClearBuffer commandsDONE
 glGetStringi command  DONE
@@ -46,13 +46,13 @@ GL 3.1:
 
 GLSL 1.40 not started
 Instanced drawing (GL_ARB_draw_instanced) DONE (gallium, swrast)
-Buffer copying (GL_ARB_copy_buffer)   DONE (i965, r600, swrast)
+Buffer copying (GL_ARB_copy_buffer)   DONE (i965, r300, r600, 
swrast)
 Primitive restart (GL_NV_primitive_restart)   DONE (r600)
 16 vertex texture image units DONE
 Texture buffer objs (GL_ARB_texture_buffer_object)not started
-Rectangular textures (GL_ARB_texture_rectangle)   DONE (i965, r600, swrast)
+Rectangular textures (GL_ARB_texture_rectangle)   DONE (i965, r300, r600, 
swrast)
 Uniform buffer objs (GL_ARB_uniform_buffer_object)not started
-Signed normalized textures (GL_EXT_texture_snorm) DONE (i965, r600)
+Signed normalized textures (GL_EXT_texture_snorm) DONE (i965, r300, r600)
 
 
 GL 3.2:
@@ -60,14 +60,14 @@ GL 3.2:
 Core/compatibility profiles   not started
 GLSL 1.50 not started
 Geometry shaders (GL_ARB_geometry_shader4)partially done (Zack)
-BGRA vertex order (GL_ARB_vertex_array_bgra)  DONE (i965, r600, swrast)
-Base vertex offset(GL_ARB_draw_elements_base_vertex)  DONE (i965, r600, swrast)
-Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r600, swrast)
-Provoking vertex (GL_ARB_provoking_vertex)DONE (i965, r600, swrast)
+BGRA vertex order (GL_ARB_vertex_array_bgra)  DONE (i965, r300, r600, 
swrast)
+Base vertex offset(GL_ARB_draw_elements_base_vertex)  DONE (i965, r300, r600, 
swrast)
+Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r300, r600, 
swrast)
+Provoking vertex (GL_ARB_provoking_vertex)DONE (i965, r300, r600, 
swrast)
 Seamless cubemaps (GL_ARB_seamless_cube_map)  DONE (i965, r600)
 Multisample textures (GL_ARB_texture_multisample) not started
 Frag depth clamp (GL_ARB_depth_clamp) DONE (i965, r600, swrast)
-Fence objects (GL_ARB_sync)   DONE (i965, r600, swrast)
+Fence objects (GL_ARB_sync)   DONE (i965, r

Mesa (master): docs/GL3: document what's missing for GL3

2012-01-11 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 272896b885a942b993afb3926a5b6c3ad5abca74
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=272896b885a942b993afb3926a5b6c3ad5abca74

Author: Marek Olšák 
Date:   Thu Jan 12 03:26:09 2012 +0100

docs/GL3: document what's missing for GL3

---

 docs/GL3.txt |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/GL3.txt b/docs/GL3.txt
index 069d36d..91f42ee 100644
--- a/docs/GL3.txt
+++ b/docs/GL3.txt
@@ -36,8 +36,8 @@ sRGB framebuffer format (GL_EXT_framebuffer_sRGB) DONE 
(i965, r600)
 glClearBuffer commandsDONE
 glGetStringi command  DONE
 glTexParameterI, glGetTexParameterI commands  DONE
-glVertexAttribI commands  DONE (but converts int
-values to floats)
+glVertexAttribI commands  ~50% done (converts int
+ values to 
floats)
 Depth format cube texturesDONE
 GLX_ARB_create_context (GLX 1.4 is required)  DONE
 

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


Mesa (master): vbo: introduce vbo_get_minmax_indices function

2012-01-11 Thread Yuanhan Liu
Module: Mesa
Branch: master
Commit: 42d4972bf0b147b0241c2be7e6579fd64cf2c216
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=42d4972bf0b147b0241c2be7e6579fd64cf2c216

Author: Yuanhan Liu 
Date:   Sat Dec 31 14:22:46 2011 +0800

vbo: introduce vbo_get_minmax_indices function

Introduce vbo_get_minmax_indices() function to handle the min/max index
computation for nr_prims(>= 1). The old code just compute the first
prim's min/max index; this would results an error rendering if user
called functions like glMultiDrawElements(). This patch servers as
fixing this issue.

As when nr_prims = 1, we can pass 1 to paramter nr_prims, thus I made
vbo_get_minmax_index() static.

v2: per Roland's suggestion, put the indices address compuation into
vbo_get_minmax_index() instead.

Also do comination if possible to reduce map/unmap count

v3: per Brian's suggestion, use a pointer for start_prim to avoid
structure copy per loop.

Signed-off-by: Yuanhan Liu 
Reviewed-by: Roland Scheidegger 
Reviewed-by: Brian Paul 

---

 src/mesa/drivers/dri/i965/brw_draw.c |2 +-
 src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c |3 +-
 src/mesa/main/api_validate.c |2 +-
 src/mesa/state_tracker/st_draw.c |3 +-
 src/mesa/state_tracker/st_draw_feedback.c|2 +-
 src/mesa/tnl/t_draw.c|2 +-
 src/mesa/vbo/vbo.h   |6 ++--
 src/mesa/vbo/vbo_exec_array.c|   50 +
 8 files changed, 53 insertions(+), 17 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_draw.c 
b/src/mesa/drivers/dri/i965/brw_draw.c
index 621195d..f50fffd 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -586,7 +586,7 @@ void brw_draw_prims( struct gl_context *ctx,
 
if (!vbo_all_varyings_in_vbos(arrays)) {
   if (!index_bounds_valid)
-vbo_get_minmax_index(ctx, prim, ib, &min_index, &max_index);
+vbo_get_minmax_indices(ctx, prim, ib, &min_index, &max_index, 
nr_prims);
 
   /* Decide if we want to rebase.  If so we end up recursing once
* only into this function.
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c 
b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
index de04d18..59f1542 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c
@@ -437,7 +437,8 @@ TAG(vbo_render_prims)(struct gl_context *ctx,
struct nouveau_render_state *render = to_render_state(ctx);
 
if (!index_bounds_valid)
-   vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index);
+   vbo_get_minmax_indices(ctx, prims, ib, &min_index, &max_index,
+  nr_prims);
 
vbo_choose_render_mode(ctx, arrays);
vbo_choose_attrs(ctx, arrays);
diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 945f127..b6871d0 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -184,7 +184,7 @@ check_index_bounds(struct gl_context *ctx, GLsizei count, 
GLenum type,
ib.ptr = indices;
ib.obj = ctx->Array.ArrayObj->ElementArrayBufferObj;
 
-   vbo_get_minmax_index(ctx, &prim, &ib, &min, &max);
+   vbo_get_minmax_indices(ctx, &prim, &ib, &min, &max, 1);
 
if ((int)(min + basevertex) < 0 ||
max + basevertex > ctx->Array.ArrayObj->_MaxElement) {
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 6d6fc85..c0554cf 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -990,7 +990,8 @@ st_draw_vbo(struct gl_context *ctx,
   /* Gallium probably doesn't want this in some cases. */
   if (!index_bounds_valid)
  if (!all_varyings_in_vbos(arrays))
-vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index);
+vbo_get_minmax_indices(ctx, prims, ib, &min_index, &max_index,
+   nr_prims);
 
   for (i = 0; i < nr_prims; i++) {
  num_instances = MAX2(num_instances, prims[i].num_instances);
diff --git a/src/mesa/state_tracker/st_draw_feedback.c 
b/src/mesa/state_tracker/st_draw_feedback.c
index fbf0349..a559b73 100644
--- a/src/mesa/state_tracker/st_draw_feedback.c
+++ b/src/mesa/state_tracker/st_draw_feedback.c
@@ -119,7 +119,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
st_validate_state(st);
 
if (!index_bounds_valid)
-  vbo_get_minmax_index(ctx, prims, ib, &min_index, &max_index);
+  vbo_get_minmax_indices(ctx, prims, ib, &min_index, &max_index, nr_prims);
 
/* must get these after state validation! */
vp = st->vp;
diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c
index f949c34..17042cf 100644
--- a/src/mesa/tnl/t_draw.c
+++ b/src/mesa/tnl/t_draw.c
@@ -418,7 +418,7 @@ void _tnl_vbo_draw_prims(struct gl_context *ctx,
 struct gl_transform_feedback_object *tfb_vertcount)
 {
 

Mesa (8.0): mesa: remove const qualifier from fProg to silence warning

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: 8.0
Commit: 9489ae8938b74551913337876656bcb9178a8905
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9489ae8938b74551913337876656bcb9178a8905

Author: Brian Paul 
Date:   Wed Jan 11 18:19:37 2012 -0700

mesa: remove const qualifier from fProg to silence warning

The args to _mesa_reference_shader_program() can't be const.
(cherry picked from commit 459a44460e4d31d69d7ff04c1000917ca7870ff3)

---

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

diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 56bb797..b910543 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -228,7 +228,7 @@ update_program(struct gl_context *ctx)
 {
const struct gl_shader_program *vsProg = ctx->Shader.CurrentVertexProgram;
const struct gl_shader_program *gsProg = ctx->Shader.CurrentGeometryProgram;
-   const struct gl_shader_program *fsProg = ctx->Shader.CurrentFragmentProgram;
+   struct gl_shader_program *fsProg = ctx->Shader.CurrentFragmentProgram;
const struct gl_vertex_program *prevVP = ctx->VertexProgram._Current;
const struct gl_fragment_program *prevFP = ctx->FragmentProgram._Current;
const struct gl_geometry_program *prevGP = ctx->GeometryProgram._Current;

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


Mesa (8.0): mesa: include uniforms.h to silence warning, remove unused var

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: 8.0
Commit: b8af8b83cf3d42dd286c8de062ab9f5fee84d397
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8af8b83cf3d42dd286c8de062ab9f5fee84d397

Author: Brian Paul 
Date:   Wed Jan 11 18:19:09 2012 -0700

mesa: include uniforms.h to silence warning, remove unused var

(cherry picked from commit fe1b38960b44135f6557a1e7a9fb5adc66d0edbb)

---

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

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 5bfe217..8b68ebf 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -45,6 +45,7 @@
 #include "main/mtypes.h"
 #include "main/shaderapi.h"
 #include "main/shaderobj.h"
+#include "main/uniforms.h"
 #include "program/program.h"
 #include "program/prog_parameter.h"
 #include "ralloc.h"
@@ -936,8 +937,6 @@ static GLboolean
 validate_shader_program(const struct gl_shader_program *shProg,
 char *errMsg)
 {
-   unsigned i;
-
if (!shProg->LinkStatus) {
   return GL_FALSE;
}

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


Mesa (master): mesa: remove const qualifier from fProg to silence warning

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 459a44460e4d31d69d7ff04c1000917ca7870ff3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=459a44460e4d31d69d7ff04c1000917ca7870ff3

Author: Brian Paul 
Date:   Wed Jan 11 18:19:37 2012 -0700

mesa: remove const qualifier from fProg to silence warning

The args to _mesa_reference_shader_program() can't be const.

---

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

diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 56bb797..b910543 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -228,7 +228,7 @@ update_program(struct gl_context *ctx)
 {
const struct gl_shader_program *vsProg = ctx->Shader.CurrentVertexProgram;
const struct gl_shader_program *gsProg = ctx->Shader.CurrentGeometryProgram;
-   const struct gl_shader_program *fsProg = ctx->Shader.CurrentFragmentProgram;
+   struct gl_shader_program *fsProg = ctx->Shader.CurrentFragmentProgram;
const struct gl_vertex_program *prevVP = ctx->VertexProgram._Current;
const struct gl_fragment_program *prevFP = ctx->FragmentProgram._Current;
const struct gl_geometry_program *prevGP = ctx->GeometryProgram._Current;

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


Mesa (master): mesa: include uniforms.h to silence warning, remove unused var

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: fe1b38960b44135f6557a1e7a9fb5adc66d0edbb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe1b38960b44135f6557a1e7a9fb5adc66d0edbb

Author: Brian Paul 
Date:   Wed Jan 11 18:19:09 2012 -0700

mesa: include uniforms.h to silence warning, remove unused var

---

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

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 5bfe217..8b68ebf 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -45,6 +45,7 @@
 #include "main/mtypes.h"
 #include "main/shaderapi.h"
 #include "main/shaderobj.h"
+#include "main/uniforms.h"
 #include "program/program.h"
 #include "program/prog_parameter.h"
 #include "ralloc.h"
@@ -936,8 +937,6 @@ static GLboolean
 validate_shader_program(const struct gl_shader_program *shProg,
 char *errMsg)
 {
-   unsigned i;
-
if (!shProg->LinkStatus) {
   return GL_FALSE;
}

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


Mesa (8.0): mesa: Include glx tests Makefile.in in tarball

2012-01-11 Thread Jakob Bornecrantz
Module: Mesa
Branch: 8.0
Commit: 6fe42b603d0ec9e13a8b7d6c46c6d89da3a6a614
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6fe42b603d0ec9e13a8b7d6c46c6d89da3a6a614

Author: Jakob Bornecrantz 
Date:   Thu Jan 12 00:36:23 2012 +0100

mesa: Include glx tests Makefile.in in tarball

Fix suggested by Kenneth Graunke.

Signed-off-by: Jakob Bornecrantz 
Kenneth Graunke 

---

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

diff --git a/Makefile b/Makefile
index 4a41948..1fa369a 100644
--- a/Makefile
+++ b/Makefile
@@ -191,6 +191,8 @@ PACKAGE_NAME = MesaLib-$(PACKAGE_VERSION)
 EXTRA_FILES = \
aclocal.m4  \
configure   \
+   tests/Makefile.in   \
+   tests/glx/Makefile.in   \
src/glsl/glsl_parser.cpp\
src/glsl/glsl_parser.h  \
src/glsl/glsl_lexer.cpp \

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


Mesa (master): mesa: Include glx tests Makefile.in in tarball

2012-01-11 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 6fe42b603d0ec9e13a8b7d6c46c6d89da3a6a614
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6fe42b603d0ec9e13a8b7d6c46c6d89da3a6a614

Author: Jakob Bornecrantz 
Date:   Thu Jan 12 00:36:23 2012 +0100

mesa: Include glx tests Makefile.in in tarball

Fix suggested by Kenneth Graunke.

Signed-off-by: Jakob Bornecrantz 
Kenneth Graunke 

---

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

diff --git a/Makefile b/Makefile
index 4a41948..1fa369a 100644
--- a/Makefile
+++ b/Makefile
@@ -191,6 +191,8 @@ PACKAGE_NAME = MesaLib-$(PACKAGE_VERSION)
 EXTRA_FILES = \
aclocal.m4  \
configure   \
+   tests/Makefile.in   \
+   tests/glx/Makefile.in   \
src/glsl/glsl_parser.cpp\
src/glsl/glsl_parser.h  \
src/glsl/glsl_lexer.cpp \

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


Mesa (master): Enable is_front_buffer_rendering variable in case of GL_FRONT_AND_BACK

2012-01-11 Thread Anuj Phogat
Module: Mesa
Branch: master
Commit: c979fe3e200f42ff1fad75ebdbebe69da27e1aaa
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c979fe3e200f42ff1fad75ebdbebe69da27e1aaa

Author: Anuj Phogat 
Date:   Fri Jan  6 12:48:45 2012 -0800

Enable is_front_buffer_rendering variable in case of GL_FRONT_AND_BACK

glDrawBuffer(GL_FRONT_AND_BACK) results in to segmentation fault if
intel->is_front_buffer_rendering is not enabled with GL_FRONT_AND_BACK.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44153

Reported-by: Yi Sun 
Signed-off-by: Anuj Phogat 
Reviewed-by: Eric Anholt 

---

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

diff --git a/src/mesa/drivers/dri/intel/intel_buffers.c 
b/src/mesa/drivers/dri/intel/intel_buffers.c
index 4632751..9809f79 100644
--- a/src/mesa/drivers/dri/intel/intel_buffers.c
+++ b/src/mesa/drivers/dri/intel/intel_buffers.c
@@ -88,7 +88,7 @@ intelDrawBuffer(struct gl_context * ctx, GLenum mode)
intel->is_front_buffer_rendering;
 
   intel->is_front_buffer_rendering = (mode == GL_FRONT_LEFT)
-   || (mode == GL_FRONT);
+   || (mode == GL_FRONT) || (mode == GL_FRONT_AND_BACK);
 
   /* If we weren't front-buffer rendering before but we are now,
* invalidate our DRI drawable so we'll ask for new buffers

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


Mesa (master): rbug: Silence warning

2012-01-11 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: c076882fbd933e973dfd079289f8e9d7deb7b0dd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c076882fbd933e973dfd079289f8e9d7deb7b0dd

Author: Jakob Bornecrantz 
Date:   Mon Jan  9 14:53:42 2012 +0100

rbug: Silence warning

Signed-off-by: Jakob Bornecrantz 
Reviewed-by Brian Paul 

---

 src/gallium/drivers/rbug/rbug_core.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/rbug/rbug_core.c 
b/src/gallium/drivers/rbug/rbug_core.c
index b80bcd4..253d21b 100644
--- a/src/gallium/drivers/rbug/rbug_core.c
+++ b/src/gallium/drivers/rbug/rbug_core.c
@@ -104,7 +104,8 @@ rbug_shader_create_locked(struct pipe_context *pipe,
   struct tgsi_token *tokens)
 {
void *state = NULL;
-   struct pipe_shader_state pss = { 0 };
+   struct pipe_shader_state pss;
+   memset(&pss, 0, sizeof(pss));
pss.tokens = tokens;
 
switch(rb_shader->type) {

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


Mesa (master): mesa: Remove unused opengl version macro

2012-01-11 Thread Jakob Bornecrantz
Module: Mesa
Branch: master
Commit: 04e262ebe978872b7da0a04ae1fe6fe2129743fc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=04e262ebe978872b7da0a04ae1fe6fe2129743fc

Author: Jakob Bornecrantz 
Date:   Wed Jan 11 23:17:37 2012 +0100

mesa: Remove unused opengl version macro

Signed-off-by: Jakob Bornecrantz 
Reviewed-by: Brian Paul 

---

 src/mesa/main/version.h |   11 ---
 1 files changed, 0 insertions(+), 11 deletions(-)

diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
index d288c4d..8723c1f 100644
--- a/src/mesa/main/version.h
+++ b/src/mesa/main/version.h
@@ -42,17 +42,6 @@ struct gl_context;
 #define MESA_VERSION_CODE MESA_VERSION(MESA_MAJOR, MESA_MINOR, MESA_PATCH)
 
 
-/* OpenGL API version */
-#define OPENGL_MAJOR 2
-#define OPENGL_MINOR 1
-#define OPENGL_PATCH 0
-#define OPENGL_VERSION_STRING "2.1"
-
-/* To make version comparison easy */
-#define OPENGL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
-#define OPENGL_VERSION_CODE OPENGL_VERSION(OPENGL_MAJOR, OPENGL_MINOR, 
OPENGL_PATCH)
-
-
 extern void
 _mesa_compute_version(struct gl_context *ctx);
 

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


Mesa (master): i965: Don't use _mesa_ir_link_shader to do our dirty work

2012-01-11 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: 1c177452005a0366db01629d875da553f7949ddd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c177452005a0366db01629d875da553f7949ddd

Author: Ian Romanick 
Date:   Fri Jan  6 16:26:49 2012 -0800

i965: Don't use _mesa_ir_link_shader to do our dirty work

Instead, do the uniform setting and input / output mapping directly in
brw_link_shader.  Hurray for not generating Mesa IR!  However, once
the i965 driver stops calling _mesa_ir_link_shader, UsesClipDistance
and UsesKill are no longer set.

Ideally gen6_upload_vs_push_constants should use the
gl_shader_program, but I don't see a way to propagate the information
there.  The other alternative, since this is the only usage, is to
move gl_vertex_program::UsesClipDistance to brw_vertex_program.

The compile (and precompile) stages use UsesKill to determine the
cache key for the shader.  This is then used to determine whether or
not to compile the shader.  Calculating this data during compilation
is too late.

Signed-off-by: Ian Romanick 
Acked-by: Kenneth Graunke 
Acked-by: Eric Anholt 

---

 src/mesa/drivers/dri/i965/brw_shader.cpp |   92 +++--
 1 files changed, 85 insertions(+), 7 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp 
b/src/mesa/drivers/dri/i965/brw_shader.cpp
index 1845c3d..ef0f09d 100644
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
@@ -77,22 +77,63 @@ brw_shader_precompile(struct gl_context *ctx, struct 
gl_shader_program *prog)
 }
 
 GLboolean
-brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
+brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
 {
struct brw_context *brw = brw_context(ctx);
struct intel_context *intel = &brw->intel;
unsigned int stage;
 
-   if (!_mesa_ir_link_shader(ctx, prog))
-  return false;
-
-   for (stage = 0; stage < ARRAY_SIZE(prog->_LinkedShaders); stage++) {
+   for (stage = 0; stage < ARRAY_SIZE(shProg->_LinkedShaders); stage++) {
   struct brw_shader *shader =
-(struct brw_shader *)prog->_LinkedShaders[stage];
+(struct brw_shader *)shProg->_LinkedShaders[stage];
+  static const GLenum targets[] = {
+GL_VERTEX_PROGRAM_ARB,
+GL_FRAGMENT_PROGRAM_ARB,
+GL_GEOMETRY_PROGRAM_NV
+  };
 
   if (!shader)
 continue;
 
+  struct gl_program *prog =
+ctx->Driver.NewProgram(ctx, targets[stage], shader->base.Name);
+  if (!prog)
+   return NULL;
+  prog->Parameters = _mesa_new_parameter_list();
+
+  _mesa_generate_parameters_list_for_uniforms(shProg, &shader->base,
+ prog->Parameters);
+
+  if (stage == 0) {
+struct gl_vertex_program *vp = (struct gl_vertex_program *) prog;
+vp->UsesClipDistance = shProg->Vert.UsesClipDistance;
+  }
+
+  if (stage == 1) {
+class uses_kill_visitor : public ir_hierarchical_visitor {
+public:
+   uses_kill_visitor() : uses_kill(false)
+   {
+  /* empty */
+   }
+
+   virtual ir_visitor_status visit_enter(class ir_discard *ir)
+   {
+  this->uses_kill = true;
+  return visit_stop;
+   }
+
+   bool uses_kill;
+};
+
+uses_kill_visitor v;
+
+v.run(shader->base.ir);
+
+struct gl_fragment_program *fp = (struct gl_fragment_program *) prog;
+fp->UsesKill = v.uses_kill;
+  }
+
   void *mem_ctx = ralloc_context(NULL);
   bool progress;
 
@@ -147,13 +188,50 @@ brw_link_shader(struct gl_context *ctx, struct 
gl_shader_program *prog)
   || progress;
   } while (progress);
 
+  /* Make a pass over the IR to add state references for any built-in
+   * uniforms that are used.  This has to be done now (during linking).
+   * Code generation doesn't happen until the first time this shader is
+   * used for rendering.  Waiting until then to generate the parameters is
+   * too late.  At that point, the values for the built-in informs won't
+   * get sent to the shader.
+   */
+  foreach_list(node, shader->ir) {
+ir_variable *var = ((ir_instruction *) node)->as_variable();
+
+if ((var == NULL) || (var->mode != ir_var_uniform)
+|| (strncmp(var->name, "gl_", 3) != 0))
+   continue;
+
+const ir_state_slot *const slots = var->state_slots;
+assert(var->state_slots != NULL);
+
+for (unsigned int i = 0; i < var->num_state_slots; i++) {
+   _mesa_add_state_reference(prog->Parameters,
+ (gl_state_index *) slots[i].tokens);
+}
+  }
+
   validate_ir_tree(shader->ir);
 
   reparent_ir(shader->ir, shader->ir);
   ralloc_free(mem_ctx);
+
+  do_set_program_inouts(shader->ir, prog,
+   shader->base.Type == GL_FRAGMENT_SHADER

Mesa (master): i965: Don't calculate masks of used FS inputs

2012-01-11 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: efdc8bf1894790a85c118881395a998cbae34c1a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=efdc8bf1894790a85c118881395a998cbae34c1a

Author: Ian Romanick 
Date:   Fri Jan  6 14:49:02 2012 -0800

i965: Don't calculate masks of used FS inputs

This previously enabled some optimizations in the fragment shader
(interpolation, etc.) if some input components were always 0.0 or
1.0.  However, this data was generated by analyzing Mesa IR.  The
next patch in this series removes generation of Mesa IR for GLSL
paths.  When we detect that case, just set the used mask to ~0 and
circumvent the optimizations.

Signed-off-by: Ian Romanick 
Reviewed-by: Eric Anholt 
Reviewed-by: Kenneth Graunke 

---

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

diff --git a/src/mesa/drivers/dri/i965/brw_vs_constval.c 
b/src/mesa/drivers/dri/i965/brw_vs_constval.c
index 9ce5ab3..5b26c7a 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_constval.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_constval.c
@@ -195,6 +195,21 @@ static void calc_wm_input_sizes( struct brw_context *brw )
GLuint insn;
GLuint i;
 
+   /* Mesa IR is not generated for GLSL vertex shaders.  If there's no Mesa
+* IR, the code below cannot determine which output components are
+* written.  So, skip it and assume everything is written.  This
+* circumvents some optimizations in the fragment shader, but it guarantees
+* that correct code is generated.
+*/
+   if (vp->program.Base.NumInstructions == 0) {
+  brw->wm.input_size_masks[0] = ~0;
+  brw->wm.input_size_masks[1] = ~0;
+  brw->wm.input_size_masks[2] = ~0;
+  brw->wm.input_size_masks[3] = ~0;
+  return;
+   }
+
+
memset(&t, 0, sizeof(t));
 
/* _NEW_LIGHT | _NEW_PROGRAM */

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


Mesa (master): linker: Calculate used samplers and shadow samplers in the linker

2012-01-11 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: 6c0df75803e1944f82a1468dcca47d23de82ea6b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6c0df75803e1944f82a1468dcca47d23de82ea6b

Author: Ian Romanick 
Date:   Mon Nov 14 21:58:50 2011 -0800

linker: Calculate used samplers and shadow samplers in the linker

It used to be done in ir_to_mesa, and that was kind of a bad place.

I didn't change st_glsl_to_tgsi because there is some strange stuff
happening in the code that generates glDrawPixels shaders.  It looked
like this would break horribly if I touched anything.

Signed-off-by: Ian Romanick 
Reviewed-by: Eric Anholt 
Reviewed-by: Kenneth Graunke 

---

 src/glsl/link_uniforms.cpp  |   45 ++-
 src/mesa/main/mtypes.h  |   14 +--
 src/mesa/main/uniform_query.cpp |   13 ---
 src/mesa/program/ir_to_mesa.cpp |   31 +++---
 4 files changed, 64 insertions(+), 39 deletions(-)

diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index 47d34cf..02f57d9 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -212,6 +212,12 @@ public:
   memset(this->targets, 0, sizeof(this->targets));
}
 
+   void start_shader()
+   {
+  this->shader_samplers_used = 0;
+  this->shader_shadow_samplers = 0;
+   }
+
 private:
virtual void visit_field(const glsl_type *type, const char *name)
{
@@ -230,8 +236,25 @@ private:
* example, we may be processing the uniform in the fragment shader, but
* the uniform was already processed in the vertex shader.
*/
-  if (this->uniforms[id].storage != NULL)
+  if (this->uniforms[id].storage != NULL) {
+/* If the uniform already has storage set from another shader stage,
+ * mark the samplers used for this shader stage.
+ */
+if (type->contains_sampler()) {
+   const unsigned count = MAX2(1, this->uniforms[id].array_elements);
+   const unsigned shadow = (type->is_array())
+  ? type->fields.array->sampler_shadow : type->sampler_shadow;
+
+   for (unsigned i = 0; i < count; i++) {
+  const unsigned s = this->uniforms[id].sampler + i;
+
+  this->shader_samplers_used |= 1U << s;
+  this->shader_shadow_samplers |= shadow << s;
+   }
+}
+
 return;
+  }
 
   const glsl_type *base_type;
   if (type->is_array()) {
@@ -251,10 +274,13 @@ private:
 this->next_sampler += MAX2(1, this->uniforms[id].array_elements);
 
 const gl_texture_index target = base_type->sampler_index();
+const unsigned shadow = base_type->sampler_shadow;
 for (unsigned i = this->uniforms[id].sampler
 ; i < this->next_sampler
 ; i++) {
this->targets[i] = target;
+   this->shader_samplers_used |= 1U << i;
+   this->shader_shadow_samplers |= shadow << i;
 }
 
   } else {
@@ -280,6 +306,16 @@ public:
union gl_constant_value *values;
 
gl_texture_index targets[MAX_SAMPLERS];
+
+   /**
+* Mask of samplers used by the current shader stage.
+*/
+   unsigned shader_samplers_used;
+
+   /**
+* Mask of samplers used by the current shader stage for shadows.
+*/
+   unsigned shader_shadow_samplers;
 };
 
 void
@@ -356,6 +392,10 @@ link_assign_uniform_locations(struct gl_shader_program 
*prog)
   if (prog->_LinkedShaders[i] == NULL)
 continue;
 
+  /* Reset various per-shader target counts.
+   */
+  parcel.start_shader();
+
   foreach_list(node, prog->_LinkedShaders[i]->ir) {
 ir_variable *const var = ((ir_instruction *) node)->as_variable();
 
@@ -369,6 +409,9 @@ link_assign_uniform_locations(struct gl_shader_program 
*prog)
 
 parcel.process(var);
   }
+
+  prog->_LinkedShaders[i]->active_samplers = parcel.shader_samplers_used;
+  prog->_LinkedShaders[i]->shadow_samplers = parcel.shader_shadow_samplers;
}
 
assert(sizeof(prog->SamplerTargets) == sizeof(parcel.targets));
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 2559795..9fdabf9 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2183,9 +2183,17 @@ struct gl_shader
 
unsigned Version;   /**< GLSL version used for linking */
 
-   unsigned num_samplers;  /**< Number of samplers used by this shader.
-* This field is only set post-linking.
-*/
+   /**
+* \name Sampler tracking
+*
+* \note Each of these fields is only set post-linking.
+*/
+   /*@{*/
+   unsigned num_samplers;  /**< Number of samplers used by this shader. */
+   GLbitfield active_samplers; /**< Bitfield of which samplers are used */
+   GLbitfield shadow_samplers; /**< Samplers used for shadow sampling. */
+   /*@}*/
+
/**
 * Number of uniform components used by this shader.
 *
diff --git a/src/

Mesa (master): linker: Calculate the sampler to texture target mapping during linking

2012-01-11 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: 6a992c3288b6f7a5d94172c9ad1908e71e58233e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6a992c3288b6f7a5d94172c9ad1908e71e58233e

Author: Ian Romanick 
Date:   Mon Nov 14 18:12:16 2011 -0800

linker: Calculate the sampler to texture target mapping during linking

Track the calculated data in gl_shader_program instead of the
individual assembly shaders.

Signed-off-by: Ian Romanick 
Reviewed-by: Eric Anholt 
Reviewed-by: Kenneth Graunke 

---

 src/glsl/link_uniforms.cpp |   15 ++-
 src/mesa/main/ff_fragment_shader.cpp   |2 +-
 src/mesa/main/mtypes.h |2 --
 src/mesa/main/uniform_query.cpp|2 +-
 src/mesa/main/uniforms.c   |7 ---
 src/mesa/main/uniforms.h   |3 ++-
 src/mesa/program/ir_to_mesa.cpp|8 +++-
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |6 +++---
 8 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
index b331db7..47d34cf 100644
--- a/src/glsl/link_uniforms.cpp
+++ b/src/glsl/link_uniforms.cpp
@@ -209,7 +209,7 @@ public:
  union gl_constant_value *values)
   : map(map), uniforms(uniforms), next_sampler(0), values(values)
{
-  /* empty */
+  memset(this->targets, 0, sizeof(this->targets));
}
 
 private:
@@ -249,6 +249,14 @@ private:
  * array elements for arrays.
  */
 this->next_sampler += MAX2(1, this->uniforms[id].array_elements);
+
+const gl_texture_index target = base_type->sampler_index();
+for (unsigned i = this->uniforms[id].sampler
+; i < this->next_sampler
+; i++) {
+   this->targets[i] = target;
+}
+
   } else {
 this->uniforms[id].sampler = ~0;
   }
@@ -270,6 +278,8 @@ private:
 
 public:
union gl_constant_value *values;
+
+   gl_texture_index targets[MAX_SAMPLERS];
 };
 
 void
@@ -361,6 +371,9 @@ link_assign_uniform_locations(struct gl_shader_program 
*prog)
   }
}
 
+   assert(sizeof(prog->SamplerTargets) == sizeof(parcel.targets));
+   memcpy(prog->SamplerTargets, parcel.targets, sizeof(prog->SamplerTargets));
+
 #ifndef NDEBUG
for (unsigned i = 0; i < num_user_uniforms; i++) {
   assert(uniforms[i].storage != NULL);
diff --git a/src/mesa/main/ff_fragment_shader.cpp 
b/src/mesa/main/ff_fragment_shader.cpp
index 165230c..3596a3d 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -1540,7 +1540,7 @@ create_new_program(struct gl_context *ctx, struct 
state_key *key)
 _mesa_propagate_uniforms_to_driver_storage(storage, 0, 1);
   }
}
-   _mesa_update_shader_textures_used(fp);
+   _mesa_update_shader_textures_used(p.shader_program, fp);
(void) ctx->Driver.ProgramStringNotify(ctx, fp->Target, fp);
 
if (!p.shader_program->LinkStatus)
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index aca4737..2559795 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1894,8 +1894,6 @@ struct gl_program
 
/** Map from sampler unit to texture unit (set by glUniform1i()) */
GLubyte SamplerUnits[MAX_SAMPLERS];
-   /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */
-   gl_texture_index SamplerTargets[MAX_SAMPLERS];
 
/** Bitmask of which register files are read/written with indirect
 * addressing.  Mask of (1 << PROGRAM_x) bits.
diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index a5a85cd..d156cae 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -728,7 +728,7 @@ _mesa_uniform(struct gl_context *ctx, struct 
gl_shader_program *shProg,
   shProg->SamplerUnits,
   sizeof(shProg->SamplerUnits));
 
-   _mesa_update_shader_textures_used(prog);
+   _mesa_update_shader_textures_used(shProg, prog);
(void) ctx->Driver.ProgramStringNotify(ctx, prog->Target, prog);
 }
   }
diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c
index 685c0f1..e0214a8 100644
--- a/src/mesa/main/uniforms.c
+++ b/src/mesa/main/uniforms.c
@@ -60,7 +60,8 @@
  * We'll use that info for state validation before rendering.
  */
 void
-_mesa_update_shader_textures_used(struct gl_program *prog)
+_mesa_update_shader_textures_used(struct gl_shader_program *shProg,
+ struct gl_program *prog)
 {
GLuint s;
 
@@ -68,8 +69,8 @@ _mesa_update_shader_textures_used(struct gl_program *prog)
 
for (s = 0; s < MAX_SAMPLERS; s++) {
   if (prog->SamplersUsed & (1 << s)) {
- GLuint unit = prog->SamplerUnits[s];
- GLuint tgt = prog->SamplerTargets[s];
+ GLuint unit = shProg->SamplerUnits[s];
+ GLuint tgt = shProg->SamplerTargets[s];
  assert(unit < Elements(prog->TexturesUsed));
 

Mesa (master): glsl: Add glsl_type::sampler_index

2012-01-11 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: 32be81de39f7548e353afabf1215b0ea7c7b0916
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=32be81de39f7548e353afabf1215b0ea7c7b0916

Author: Ian Romanick 
Date:   Mon Nov 14 14:02:09 2011 -0800

glsl: Add glsl_type::sampler_index

Signed-off-by: Ian Romanick 
Reviewed-by: Eric Anholt 
Reviewed-by: Kenneth Graunke 

---

 src/glsl/glsl_types.cpp |   29 +
 src/glsl/glsl_types.h   |6 ++
 2 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
index 8587da0..d4385a6 100644
--- a/src/glsl/glsl_types.cpp
+++ b/src/glsl/glsl_types.cpp
@@ -127,6 +127,35 @@ glsl_type::contains_sampler() const
}
 }
 
+gl_texture_index
+glsl_type::sampler_index() const
+{
+   const glsl_type *const t = (this->is_array()) ? this->fields.array : this;
+
+   assert(t->is_sampler());
+
+   switch (t->sampler_dimensionality) {
+   case GLSL_SAMPLER_DIM_1D:
+  return (t->sampler_array) ? TEXTURE_1D_ARRAY_INDEX : TEXTURE_1D_INDEX;
+   case GLSL_SAMPLER_DIM_2D:
+  return (t->sampler_array) ? TEXTURE_2D_ARRAY_INDEX : TEXTURE_2D_INDEX;
+   case GLSL_SAMPLER_DIM_3D:
+  return TEXTURE_3D_INDEX;
+   case GLSL_SAMPLER_DIM_CUBE:
+  return TEXTURE_CUBE_INDEX;
+   case GLSL_SAMPLER_DIM_RECT:
+  return TEXTURE_RECT_INDEX;
+   case GLSL_SAMPLER_DIM_BUF:
+  assert(!"FINISHME: Implement ARB_texture_buffer_object");
+  break;
+   case GLSL_SAMPLER_DIM_EXTERNAL:
+  return TEXTURE_EXTERNAL_INDEX;
+   default:
+  assert(!"Should not get here.");
+  break;
+   }
+}
+
 void
 glsl_type::generate_100ES_types(glsl_symbol_table *symtab)
 {
diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
index 4ac9011..2997c93 100644
--- a/src/glsl/glsl_types.h
+++ b/src/glsl/glsl_types.h
@@ -28,6 +28,7 @@
 
 #include 
 #include 
+#include "main/mtypes.h" /* for gl_texture_index, C++'s enum rules are broken 
*/
 
 #ifdef __cplusplus
 extern "C" {
@@ -354,6 +355,11 @@ struct glsl_type {
bool contains_sampler() const;
 
/**
+* Get the Mesa texture target index for a sampler type.
+*/
+   gl_texture_index sampler_index() const;
+
+   /**
 * Query whether or not a type is an array
 */
bool is_array() const

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


Mesa (master): mesa: Track fixed-function fragment shader as a shader

2012-01-11 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: b527dd65c830a2b008816cf390d5be906e29bb23
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b527dd65c830a2b008816cf390d5be906e29bb23

Author: Ian Romanick 
Date:   Tue Nov 15 12:01:18 2011 -0800

mesa: Track fixed-function fragment shader as a shader

Previously the fixed-function fragment shader was tracked as a
gl_program.  This means that it shows up in the driver as a Mesa IR
program instead of as a GLSL IR program.  If a driver doesn't generate
Mesa IR from the GLSL IR, that program is empty.  If the program is
empty there is either no rendering or a GPU hang.

Signed-off-by: Ian Romanick 
Reviewed-by: Eric Anholt 
Acked-by: Kenneth Graunke 

---

 src/mesa/drivers/dri/i965/brw_wm.c|2 +-
 src/mesa/drivers/dri/i965/brw_wm_state.c  |4 ++--
 src/mesa/drivers/dri/i965/gen6_wm_state.c |4 +++-
 src/mesa/drivers/dri/i965/gen7_wm_state.c |4 +++-
 src/mesa/main/mtypes.h|2 ++
 src/mesa/main/shaderapi.c |   29 +
 src/mesa/main/state.c |   10 ++
 7 files changed, 50 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_wm.c 
b/src/mesa/drivers/dri/i965/brw_wm.c
index cad0af8..7dee20b 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -543,7 +543,7 @@ brw_upload_wm_prog(struct brw_context *brw)
if (!brw_search_cache(&brw->cache, BRW_WM_PROG,
 &key, sizeof(key),
 &brw->wm.prog_offset, &brw->wm.prog_data)) {
-  bool success = do_wm_prog(brw, ctx->Shader.CurrentFragmentProgram, fp,
+  bool success = do_wm_prog(brw, ctx->Shader._CurrentFragmentProgram, fp,
&key);
   (void) success;
   assert(success);
diff --git a/src/mesa/drivers/dri/i965/brw_wm_state.c 
b/src/mesa/drivers/dri/i965/brw_wm_state.c
index e1791c2..dd67795 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_state.c
@@ -169,9 +169,9 @@ brw_upload_wm_unit(struct brw_context *brw)
 * If using the fragment shader backend, the program is always
 * 8-wide.  If not, it's always 16.
 */
-   if (ctx->Shader.CurrentFragmentProgram) {
+   if (ctx->Shader._CurrentFragmentProgram) {
   struct brw_shader *shader = (struct brw_shader *)
-
ctx->Shader.CurrentFragmentProgram->_LinkedShaders[MESA_SHADER_FRAGMENT];
+
ctx->Shader._CurrentFragmentProgram->_LinkedShaders[MESA_SHADER_FRAGMENT];
 
   if (shader != NULL && shader->ir != NULL) {
 wm->wm5.enable_8_pix = 1;
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c 
b/src/mesa/drivers/dri/i965/gen6_wm_state.c
index 0547eb8..3669811 100644
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c
@@ -135,7 +135,9 @@ upload_wm_state(struct brw_context *brw)
dw5 |= GEN6_WM_LINE_END_CAP_AA_WIDTH_0_5;
 
/* Use ALT floating point mode for ARB fragment programs, because they
-* require 0^0 == 1.
+* require 0^0 == 1.  Even though _CurrentFragmentProgram is used for
+* rendering, CurrentFragmentProgram is used for this check to
+* differentiate between the GLSL and non-GLSL cases.
 */
if (ctx->Shader.CurrentFragmentProgram == NULL)
   dw2 |= GEN6_WM_FLOATING_POINT_MODE_ALT;
diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c 
b/src/mesa/drivers/dri/i965/gen7_wm_state.c
index 1468fcc..3f9 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
@@ -166,7 +166,9 @@ upload_ps_state(struct brw_context *brw)
dw2 |= (ALIGN(brw->sampler.count, 4) / 4) << GEN7_PS_SAMPLER_COUNT_SHIFT;
 
/* Use ALT floating point mode for ARB fragment programs, because they
-* require 0^0 == 1.
+* require 0^0 == 1.  Even though _CurrentFragmentProgram is used for
+* rendering, CurrentFragmentProgram is used for this check to
+* differentiate between the GLSL and non-GLSL cases.
 */
if (intel->ctx.Shader.CurrentFragmentProgram == NULL)
   dw2 |= GEN7_PS_FLOATING_POINT_MODE_ALT;
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index bb46ba0..aca4737 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2350,6 +2350,8 @@ struct gl_shader_state
struct gl_shader_program *CurrentGeometryProgram;
struct gl_shader_program *CurrentFragmentProgram;
 
+   struct gl_shader_program *_CurrentFragmentProgram;
+
/**
 * Program used by glUniform calls.
 *
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 9372d6d..f3f13a0 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -124,6 +124,8 @@ _mesa_free_shader_state(struct gl_context *ctx)
  NULL);
_mesa_reference_shader_program(ctx, &ctx->Shader.CurrentFragmentProgram,
  NULL);
+   _mesa_reference_shader_p

Mesa (master): mesa: Validate sampler settings using uniform storage

2012-01-11 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: 195ee502c3196607e3a74075aefade9770a08a67
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=195ee502c3196607e3a74075aefade9770a08a67

Author: Ian Romanick 
Date:   Mon Nov 14 12:11:46 2011 -0800

mesa: Validate sampler settings using uniform storage

Rather than looking at the settings in individual assembly programs,
look at the settings in the top-level uniform values.  The old code
was flawed because examining each shader stage in isolation could
allow inconsitent usage across stages (e.g., bind unit 0 to a
sampler2D in the vertex shader and sampler1DShadow in the fragment
shader).

Signed-off-by: Ian Romanick 
Reviewed-by: Eric Anholt 
Reviewed-by: Kenneth Graunke 

---

 src/mesa/main/shaderapi.c   |   64 +-
 src/mesa/main/uniform_query.cpp |   43 ++
 src/mesa/main/uniforms.h|3 ++
 3 files changed, 48 insertions(+), 62 deletions(-)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index f3f13a0..5bfe217 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -927,62 +927,6 @@ _mesa_use_program(struct gl_context *ctx, struct 
gl_shader_program *shProg)
   ctx->Driver.UseProgram(ctx, shProg);
 }
 
-
-/**
- * Validate a program's samplers.
- * Specifically, check that there aren't two samplers of different types
- * pointing to the same texture unit.
- * \return GL_TRUE if valid, GL_FALSE if invalid
- */
-static GLboolean
-validate_samplers(const struct gl_program *prog, char *errMsg)
-{
-   static const char *targetName[] = {
-  "TEXTURE_BUFFER",
-  "TEXTURE_2D_ARRAY",
-  "TEXTURE_1D_ARRAY",
-  "TEXTURE_EXTERNAL",
-  "TEXTURE_CUBE",
-  "TEXTURE_3D",
-  "TEXTURE_RECT",
-  "TEXTURE_2D",
-  "TEXTURE_1D",
-   };
-   GLint targetUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
-   GLbitfield samplersUsed = prog->SamplersUsed;
-   GLuint i;
-
-   STATIC_ASSERT(Elements(targetName) == NUM_TEXTURE_TARGETS);
-
-   if (samplersUsed == 0x0)
-  return GL_TRUE;
-
-   for (i = 0; i < Elements(targetUsed); i++)
-  targetUsed[i] = -1;
-
-   /* walk over bits which are set in 'samplers' */
-   while (samplersUsed) {
-  GLuint unit;
-  gl_texture_index target;
-  GLint sampler = _mesa_ffs(samplersUsed) - 1;
-  assert(sampler >= 0);
-  assert(sampler < Elements(prog->SamplerUnits));
-  unit = prog->SamplerUnits[sampler];
-  target = prog->SamplerTargets[sampler];
-  if (targetUsed[unit] != -1 && targetUsed[unit] != (int) target) {
- _mesa_snprintf(errMsg, 100,
- "Texture unit %d is accessed both as %s and %s",
- unit, targetName[targetUsed[unit]], targetName[target]);
- return GL_FALSE;
-  }
-  targetUsed[unit] = target;
-  samplersUsed ^= (1 << sampler);
-   }
-
-   return GL_TRUE;
-}
-
-
 /**
  * Do validation of the given shader program.
  * \param errMsg  returns error message if validation fails.
@@ -1018,12 +962,8 @@ validate_shader_program(const struct gl_shader_program 
*shProg,
 * Check: any two active samplers in the current program object are of
 * different types, but refer to the same texture image unit,
 */
-   for (i = 0; i < Elements(shProg->_LinkedShaders); i++) {
-  if (shProg->_LinkedShaders[i]
- && !validate_samplers(shProg->_LinkedShaders[i]->Program, errMsg)) {
-return GL_FALSE;
-  }
-   }
+   if (!_mesa_sampler_uniforms_are_valid(shProg, errMsg, 100))
+  return GL_FALSE;
 
return GL_TRUE;
 }
diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index f3d6a16..a5a85cd 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -933,3 +933,46 @@ _mesa_get_uniform_location(struct gl_context *ctx,
 
return _mesa_uniform_merge_location_offset(location, offset);
 }
+
+extern "C" bool
+_mesa_sampler_uniforms_are_valid(const struct gl_shader_program *shProg,
+char *errMsg, size_t errMsgLength)
+{
+   const glsl_type *unit_types[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
+
+   memset(unit_types, 0, sizeof(unit_types));
+
+   for (unsigned i = 0; i < shProg->NumUserUniformStorage; i++) {
+  const struct gl_uniform_storage *const storage =
+&shProg->UniformStorage[i];
+  const glsl_type *const t = (storage->type->is_array())
+? storage->type->fields.array : storage->type;
+
+  if (!t->is_sampler())
+continue;
+
+  const unsigned count = MAX2(1, storage->type->array_size());
+  for (unsigned j = 0; j < count; j++) {
+const unsigned unit = storage->storage[j].i;
+
+/* The types of the samplers associated with a particular texture
+ * unit must be an exact match.  Page 74 (page 89 of the PDF) of the
+ * OpenGL 3.3 core spec says:
+ *
+ * "It is not allowed to have variables of different sampler
+ * types p

Mesa (master): mesa: Use static buffer for uniform name

2012-01-11 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: ca5b30bf8142d916a40eaaa7091882464a237f1f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ca5b30bf8142d916a40eaaa7091882464a237f1f

Author: Ian Romanick 
Date:   Mon Nov 14 16:52:05 2011 -0800

mesa: Use static buffer for uniform name

Signed-off-by: Ian Romanick 
Reviewed-by: Eric Anholt 
Reviewed-by: Kenneth Graunke 

---

 src/mesa/main/ff_fragment_shader.cpp |7 ++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/src/mesa/main/ff_fragment_shader.cpp 
b/src/mesa/main/ff_fragment_shader.cpp
index 49a8af0..165230c 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -1509,7 +1509,12 @@ create_new_program(struct gl_context *ctx, struct 
state_key *key)
_mesa_associate_uniform_storage(ctx, p.shader_program, fp->Parameters);
 
for (unsigned int i = 0; i < MAX_TEXTURE_UNITS; i++) {
-  char *name = ralloc_asprintf(p.mem_ctx, "sampler_%d", i);
+  /* Enough space for 'sampler_999\0'.
+   */
+  char name[12];
+
+  snprintf(name, sizeof(name), "sampler_%d", i);
+
   int loc = _mesa_get_uniform_location(ctx, p.shader_program, name);
   if (loc != -1) {
 unsigned base;

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


Mesa (master): mesa: Use uniform interfaces in fixed-function fragment shader code

2012-01-11 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: f409a710e3562856a53a3b43ed526b877639a27c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f409a710e3562856a53a3b43ed526b877639a27c

Author: Ian Romanick 
Date:   Mon Nov 14 14:32:39 2011 -0800

mesa: Use uniform interfaces in fixed-function fragment shader code

Poking directly at the backing resources works only by luck.  Core
Mesa code should only know about the gl_uniform_storage structure.
Soon other code that looks at samplers will use the gl_uniform_storage
structures instead of the data in the gl_program.

Signed-off-by: Ian Romanick 
Reviewed-by: Eric Anholt 
Acked-by: Kenneth Graunke 

---

 src/mesa/main/ff_fragment_shader.cpp |   29 -
 1 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/mesa/main/ff_fragment_shader.cpp 
b/src/mesa/main/ff_fragment_shader.cpp
index 3e736fa..49a8af0 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -42,6 +42,7 @@ extern "C" {
 #include "program/programopt.h"
 #include "texenvprogram.h"
 }
+#include "main/uniforms.h"
 #include "../glsl/glsl_types.h"
 #include "../glsl/ir.h"
 #include "../glsl/glsl_symbol_table.h"
@@ -1498,22 +1499,40 @@ create_new_program(struct gl_context *ctx, struct 
state_key *key)
/* Set the sampler uniforms, and relink to get them into the linked
 * program.
 */
-   struct gl_program *fp;
-   fp = p.shader_program->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program;
+   struct gl_shader *const fs =
+  p.shader_program->_LinkedShaders[MESA_SHADER_FRAGMENT];
+   struct gl_program *const fp = fs->Program;
+
+   _mesa_generate_parameters_list_for_uniforms(p.shader_program, fs,
+  fp->Parameters);
+
+   _mesa_associate_uniform_storage(ctx, p.shader_program, fp->Parameters);
 
for (unsigned int i = 0; i < MAX_TEXTURE_UNITS; i++) {
   char *name = ralloc_asprintf(p.mem_ctx, "sampler_%d", i);
   int loc = _mesa_get_uniform_location(ctx, p.shader_program, name);
   if (loc != -1) {
+unsigned base;
+unsigned idx;
+
 /* Avoid using _mesa_uniform() because it flags state
  * updates, so if we're generating this shader_program in a
  * state update, we end up recursing.  Instead, just set the
  * value, which is picked up at re-link.
  */
-loc = (loc & 0x) + (loc >> 16);
-int sampler = fp->Parameters->ParameterValues[loc][0].f;
+_mesa_uniform_split_location_offset(loc, &base, &idx);
+assert(idx == 0);
+
+struct gl_uniform_storage *const storage =
+   &p.shader_program->UniformStorage[base];
 
-fp->SamplerUnits[sampler] = i;
+/* Update the storage, the SamplerUnits in the shader program, and
+ * the SamplerUnits in the assembly shader.
+ */
+storage->storage[idx].i = i;
+fp->SamplerUnits[storage->sampler] = i;
+p.shader_program->SamplerUnits[storage->sampler] = i;
+_mesa_propagate_uniforms_to_driver_storage(storage, 0, 1);
   }
}
_mesa_update_shader_textures_used(fp);

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


Mesa (master): Clean up GL3 status

2012-01-11 Thread Matt Turner
Module: Mesa
Branch: master
Commit: 151b4f336934d283961e28e111aa30544e3ceb50
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=151b4f336934d283961e28e111aa30544e3ceb50

Author: Matt Turner 
Date:   Wed Jan 11 15:29:51 2012 -0500

Clean up GL3 status

Reviewed-by: Ian Romanick 
Signed-off-by: Matt Turner 

---

 docs/GL3.txt |   78 +-
 1 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/docs/GL3.txt b/docs/GL3.txt
index 0c67dce..069d36d 100644
--- a/docs/GL3.txt
+++ b/docs/GL3.txt
@@ -12,47 +12,47 @@ Feature   Status
 
 GL 3.0:
 
-GLSL 1.30 (GL_EXT_gpu_shader4, etc.)  started
+GLSL 1.30 DONE
 glBindFragDataLocation, glGetFragDataLocation DONE
-Conditional rendering (GL_NV_conditional_render)  DONE (swrast, softpipe, 
i965)
-Map buffer subranges (GL_ARB_map_buffer_range)DONE
-Clamping controls (GL_ARB_color_buffer_float) DONE
-Float textures, renderbuffers (GL_ARB_texture_float)  DONE (gallium r300)
-GL_EXT_packed_float   DONE (gallium r600)
-GL_EXT_texture_shared_exponentDONE (gallium, swrast)
-Float depth buffers (GL_ARB_depth_buffer_float)   DONE
-Framebuffer objects (GL_EXT_framebuffer_object)   DONE
+Conditional rendering (GL_NV_conditional_render)  DONE (i965, r600, swrast)
+Map buffer subranges (GL_ARB_map_buffer_range)DONE (i965, r600, swrast)
+Clamping controls (GL_ARB_color_buffer_float) DONE (i965, r600)
+Float textures, renderbuffers (GL_ARB_texture_float)  DONE (i965, r600)
+GL_EXT_packed_float   DONE (i965, r600)
+GL_EXT_texture_shared_exponentDONE (i965, r600, swrast)
+Float depth buffers (GL_ARB_depth_buffer_float)   DONE (i965, r600)
+Framebuffer objects (GL_EXT_framebuffer_object)   DONE (i965, r600, swrast)
 Half-floatDONE
 Multisample blit  DONE
 Non-normalized Integer texture/framebuffer formats~50% done
-1D/2D Texture arrays  DONE (gallium, swrast)
+1D/2D Texture arrays  DONE
 Packed depth/stencil formats  DONE
-Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE
-GL_EXT_texture_compression_rgtc   DONE (swrast, gallium 
r600)
-Red and red/green texture formats DONE (swrast, i965, 
gallium)
-Transform feedback (GL_EXT_transform_feedback)DONE
-Vertex array objects (GL_APPLE_vertex_array_object)   DONE
-sRGB framebuffer format (GL_EXT_framebuffer_sRGB) core GL done (i965, 
gallium), GLX todo
+Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE (i965, r600, swrast)
+GL_EXT_texture_compression_rgtc   DONE (i965, r600, swrast)
+Red and red/green texture formats DONE (i965, swrast, 
gallium)
+Transform feedback (GL_EXT_transform_feedback)DONE (i965)
+Vertex array objects (GL_APPLE_vertex_array_object)   DONE (i965, r600, swrast)
+sRGB framebuffer format (GL_EXT_framebuffer_sRGB) DONE (i965, r600)
 glClearBuffer commandsDONE
 glGetStringi command  DONE
 glTexParameterI, glGetTexParameterI commands  DONE
 glVertexAttribI commands  DONE (but converts int
 values to floats)
-Depth format cube texturesnot started
-GLX_ARB_create_context (GLX 1.4 is required)  not started
+Depth format cube texturesDONE
+GLX_ARB_create_context (GLX 1.4 is required)  DONE
 
 
 GL 3.1:
 
 GLSL 1.40 not started
 Instanced drawing (GL_ARB_draw_instanced) DONE (gallium, swrast)
-Buffer copying (GL_ARB_copy_buffer)   DONE
-Primitive restart (GL_NV_primitive_restart)   DONE (gallium)
+Buffer copying (GL_ARB_copy_buffer)   DONE (i965, r600, swrast)
+Primitive restart (GL_NV_primitive_restart)   DONE (r600)
 16 vertex texture image units DONE
 Texture buffer objs (GL_ARB_texture_buffer_object)not started
-Rectangular textures (GL_ARB_texture_rectangle)   DONE
+Rectangular textures (GL_ARB_texture_rectangle)   DONE (i965, r600, swrast)
 Uniform buffer objs (GL_ARB_uniform_buffer_object)not started
-Signed normalized textures (GL_EXT_texture_snorm) DONE (gallium)
+Signed normalized textures (GL_EXT_texture_snorm) DONE (i965, r600)
 
 
 GL 3.2:
@@ -60,36 +60,36 @@ GL 3.2:
 Core/compatibility profiles   not started
 GLSL 1.50 not started
 Geometry sha

Mesa (master): configure.ac: use AC_PROG_SED

2012-01-11 Thread Matt Turner
Module: Mesa
Branch: master
Commit: 3a343ef3465c828d6f2285498e1eb86929c74690
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a343ef3465c828d6f2285498e1eb86929c74690

Author: Matt Turner 
Date:   Wed Jan 11 01:05:56 2012 -0500

configure.ac: use AC_PROG_SED

It looks like AC_PROG_SED was added in 2.59b, and wasn't in the
original 2.59 in the original 2.59.  Presumably that's why, though
it could've been an oversight.

Reviewed-by: Kenneth Graunke 
Signed-off-by: Matt Turner 

---

 configure.ac |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/configure.ac b/configure.ac
index bc3a831..e2302de 100644
--- a/configure.ac
+++ b/configure.ac
@@ -38,8 +38,8 @@ AC_PROG_CC
 AC_PROG_CXX
 AC_CHECK_PROGS([MAKE], [gmake make])
 AC_CHECK_PROGS([PYTHON2], [python2 python])
+AC_PROG_SED
 AC_PATH_PROG([MKDEP], [makedepend])
-AC_PATH_PROG([SED], [sed])
 
 if test "x$MKDEP" = "x"; then
 AC_MSG_ERROR([makedepend is required to build Mesa])

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


Mesa (master): configure.ac: don't set HAVE_GTEST twice

2012-01-11 Thread Matt Turner
Module: Mesa
Branch: master
Commit: 198892c044ce508b43450eeb48828e0b9d31052b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=198892c044ce508b43450eeb48828e0b9d31052b

Author: Matt Turner 
Date:   Wed Jan 11 01:11:35 2012 -0500

configure.ac: don't set HAVE_GTEST twice

Reviewed-by: Ian Romanick 
Signed-off-by: Matt Turner 

---

 configure.ac |1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/configure.ac b/configure.ac
index 511d147..bc3a831 100644
--- a/configure.ac
+++ b/configure.ac
@@ -70,7 +70,6 @@ AC_PATH_PROG([GTESTCONFIG], [gtest-config])
 if test "x$GTESTCONFIG" != "x"; then
 GTEST_CFLAGS=`gtest-config --cppflags --cxxflags`
 GTEST_LIBS=`gtest-config --ldflags --libs`
-HAVE_GTEST=1
 AC_SUBST([GTEST_CFLAGS])
 AC_SUBST([GTEST_LIBS])
 HAVE_GTEST=yes

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


Mesa (master): i965: Don' t reallocate push constant URB space on new VS programs.

2012-01-11 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 28cfa1fa213fe7ba6e5b57e61da663a6c3bf0c13
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=28cfa1fa213fe7ba6e5b57e61da663a6c3bf0c13

Author: Kenneth Graunke 
Date:   Wed Jan 11 11:44:02 2012 -0800

i965: Don't reallocate push constant URB space on new VS programs.

The gen7_urb atom depends on CACHE_NEW_VS_PROG and CACHE_NEW_GS_PROG,
causing gen7_upload_urb() to be called when switching to a new VS
program.

In addition to partitioning the URB space between the VS and GS,
gen7_upload_urb() also allocated space for VS and PS push constants.
Unfortunately, this meant that whenever CACHE_NEW_VS was flagged, we'd
reallocate the space for the PS push constants.  According to the BSpec,
after sending 3DSTATE_PUSH_CONSTANT_ALLOC_PS, we must reprogram
3DSTATE_CONSTANT_PS prior to the next 3DPRIMITIVE.

Since our URB allocation for push constants is entirely static, it makes
sense to split it out into its own atom that only subscribes to
BRW_NEW_CONTEXT.  This avoids reallocating the space and trashing
constants.

Fixes a rendering artifact in Extreme Tuxracer, where instead of a snow
trail, you'd get a bright red streak (affectionately known as the
"bloody penguin bug").

This also explains why adding VS-related dirty bits to gen7_ps_state
made the problem disappear: it made 3DSTATE_CONSTANT_PS be emitted after
every 3DSTATE_PUSH_CONSTANT_ALLOC_PS packet.

NOTE: This is a candidate for the 7.11 branch.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=38868
Signed-off-by: Kenneth Graunke 
Reviewed-by: Paul Berry 

---

 src/mesa/drivers/dri/i965/brw_state.h|1 +
 src/mesa/drivers/dri/i965/brw_state_upload.c |1 +
 src/mesa/drivers/dri/i965/gen7_urb.c |   34 ++---
 3 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_state.h 
b/src/mesa/drivers/dri/i965/brw_state.h
index fcfe79f..2dd5665 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -110,6 +110,7 @@ extern const struct brw_tracked_state gen7_clip_state;
 extern const struct brw_tracked_state gen7_depth_stencil_state_pointer;
 extern const struct brw_tracked_state gen7_disable_stages;
 extern const struct brw_tracked_state gen7_ps_state;
+extern const struct brw_tracked_state gen7_push_constant_alloc;
 extern const struct brw_tracked_state gen7_samplers;
 extern const struct brw_tracked_state gen7_sbe_state;
 extern const struct brw_tracked_state gen7_sf_clip_viewport;
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c 
b/src/mesa/drivers/dri/i965/brw_state_upload.c
index c7b796c..d071f87 100644
--- a/src/mesa/drivers/dri/i965/brw_state_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
@@ -188,6 +188,7 @@ const struct brw_tracked_state *gen7_atoms[] =
 
/* Command packets: */
&brw_invariant_state,
+   &gen7_push_constant_alloc,
 
/* must do before binding table pointers, cc state ptrs */
&brw_state_base_address,
diff --git a/src/mesa/drivers/dri/i965/gen7_urb.c 
b/src/mesa/drivers/dri/i965/gen7_urb.c
index e53fcb7..e6cf1eb 100644
--- a/src/mesa/drivers/dri/i965/gen7_urb.c
+++ b/src/mesa/drivers/dri/i965/gen7_urb.c
@@ -51,6 +51,30 @@
  * See "Volume 2a: 3D Pipeline," section 1.8.
  */
 static void
+gen7_allocate_push_constants(struct brw_context *brw)
+{
+   struct intel_context *intel = &brw->intel;
+   BEGIN_BATCH(2);
+   OUT_BATCH(_3DSTATE_PUSH_CONSTANT_ALLOC_VS << 16 | (2 - 2));
+   OUT_BATCH(8);
+   ADVANCE_BATCH();
+
+   BEGIN_BATCH(2);
+   OUT_BATCH(_3DSTATE_PUSH_CONSTANT_ALLOC_PS << 16 | (2 - 2));
+   OUT_BATCH(8 | 8 << GEN7_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT);
+   ADVANCE_BATCH();
+}
+
+const struct brw_tracked_state gen7_push_constant_alloc = {
+   .dirty = {
+  .mesa = 0,
+  .brw = BRW_NEW_CONTEXT,
+  .cache = 0,
+   },
+   .emit = gen7_allocate_push_constants,
+};
+
+static void
 gen7_upload_urb(struct brw_context *brw)
 {
struct intel_context *intel = &brw->intel;
@@ -76,16 +100,6 @@ gen7_upload_urb(struct brw_context *brw)
assert(!brw->gs.prog_active);
 
BEGIN_BATCH(2);
-   OUT_BATCH(_3DSTATE_PUSH_CONSTANT_ALLOC_VS << 16 | (2 - 2));
-   OUT_BATCH(8);
-   ADVANCE_BATCH();
-
-   BEGIN_BATCH(2);
-   OUT_BATCH(_3DSTATE_PUSH_CONSTANT_ALLOC_PS << 16 | (2 - 2));
-   OUT_BATCH(8 | 8 << GEN7_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT);
-   ADVANCE_BATCH();
-
-   BEGIN_BATCH(2);
OUT_BATCH(_3DSTATE_URB_VS << 16 | (2 - 2));
OUT_BATCH(brw->urb.nr_vs_entries |
  ((brw->urb.vs_size - 1) << GEN7_URB_ENTRY_SIZE_SHIFT) |

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


Mesa (master): glx/dri: Initialize api even if num_attribs == 0.

2012-01-11 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 10a6fde333f0170fbac70924581c647e531aba3e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=10a6fde333f0170fbac70924581c647e531aba3e

Author: Kenneth Graunke 
Date:   Tue Jan 10 23:32:50 2012 -0800

glx/dri: Initialize api even if num_attribs == 0.

Both dri2_create_context_attribs and drisw_create_context_attribs call
dri2_convert_glx_attribs, expecting it to fill in *api on success.

However, when num_attribs == 0, it was returning true without setting
*api, causing the caller to use an uninitialized value.

Tested-by: Vadim Girlin 
Reviewed-by: Ian Romanick 
Signed-off-by: Kenneth Graunke 

---

 src/glx/dri_common.c |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c
index 8feb587..ed0b134 100644
--- a/src/glx/dri_common.c
+++ b/src/glx/dri_common.c
@@ -429,8 +429,10 @@ dri2_convert_glx_attribs(unsigned num_attribs, const 
uint32_t *attribs,
uint32_t profile;
int render_type = GLX_RGBA_TYPE;
 
-   if (num_attribs == 0)
+   if (num_attribs == 0) {
+  *api = __DRI_API_OPENGL;
   return true;
+   }
 
/* This is actually an internal error, but what the heck.
 */

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


Mesa (master): svga: don't reference count svga_sampler_view's texture

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: dce4c368b5536716770e5cabef0321db8537a6d9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dce4c368b5536716770e5cabef0321db8537a6d9

Author: Brian Paul 
Date:   Wed Jan 11 19:52:23 2012 +0100

svga: don't reference count svga_sampler_view's texture

svga_sampler_view contains a pointer to a pipe_resource (base class of
svga_texture) and svga_texture contains a pointer to an svga_sampler_view.
This circular dependency prevented the objects from ever being freed when
they pointed to each other.  Make the svga_sampler_view::texture pointer
a "weak reference" (no reference counting) to break the dependency.

This is safe to do because the pipe_resource/texture always has a longer
lifespan than the sampler view so when svga_sampler_view stops referencing
the texture, the texture's refcount never hits zero.

Fixes a memory leak seen with google earth and other apps.

Reviewed-by: Jakob Bornecrantz 

---

 src/gallium/drivers/svga/svga_sampler_view.c |   14 --
 1 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/svga/svga_sampler_view.c 
b/src/gallium/drivers/svga/svga_sampler_view.c
index b756b07..e8234d6 100644
--- a/src/gallium/drivers/svga/svga_sampler_view.c
+++ b/src/gallium/drivers/svga/svga_sampler_view.c
@@ -105,7 +105,12 @@ svga_get_tex_sampler_view(struct pipe_context *pipe,
 
sv = CALLOC_STRUCT(svga_sampler_view);
pipe_reference_init(&sv->reference, 1);
-   pipe_resource_reference(&sv->texture, pt);
+
+   /* Note: we're not refcounting the texture resource here to avoid
+* a circular dependency.
+*/
+   sv->texture = pt;
+
sv->min_lod = min_lod;
sv->max_lod = max_lod;
 
@@ -206,6 +211,11 @@ svga_destroy_sampler_view_priv(struct svga_sampler_view *v)
   SVGA_DBG(DEBUG_DMA, "unref sid %p (sampler view)\n", v->handle);
   svga_screen_surface_destroy(ss, &v->key, &v->handle);
}
-   pipe_resource_reference(&v->texture, NULL);
+
+   /* Note: we're not refcounting the texture resource here to avoid
+* a circular dependency.
+*/
+   v->texture = NULL;
+
FREE(v);
 }

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


Mesa (master): i965: Fix compiler warning from uninitialized "success" value.

2012-01-11 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 35cdd7b6dbc763fe57bf466def0a4257ca09beb8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=35cdd7b6dbc763fe57bf466def0a4257ca09beb8

Author: Eric Anholt 
Date:   Wed Jan 11 12:07:15 2012 -0800

i965: Fix compiler warning from uninitialized "success" value.

This shouldn't happen, because the DDX should only load this driver if
IS_965.  But better to do something defined in that case.

---

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

diff --git a/src/mesa/drivers/dri/intel/intel_screen.c 
b/src/mesa/drivers/dri/intel/intel_screen.c
index ce96ddd..b0e800b 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -525,7 +525,7 @@ intelCreateContext(gl_api api,
 {
__DRIscreen *sPriv = driContextPriv->driScreenPriv;
struct intel_screen *intelScreen = sPriv->driverPrivate;
-   bool success;
+   bool success = false;
 
 #ifdef I915
if (IS_9XX(intelScreen->deviceID)) {

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


Mesa (master): i965/vs: Try to emit more components of constant vectors at once.

2012-01-11 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 2c623c2be529edc974ca293f3c71929c639ec0c9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2c623c2be529edc974ca293f3c71929c639ec0c9

Author: Eric Anholt 
Date:   Fri Jan  6 10:20:09 2012 -0800

i965/vs: Try to emit more components of constant vectors at once.

We were naively emitting each component at a time, even if we were
emitting the same value to multiple channels.  Improves on a codegen
regression from the old VS to the new VS on some unigine shaders
(because we emit constant vecs/matrices as immediates instead of
loading them as push constants, so we had over 4x the instructions for
using them).

shader-db results:
Total instructions: 58594 -> 58540
11/870 programs affected (1.3%)
765 -> 711 instructions in affected programs (7.1% reduction)

---

 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp |   29 ++-
 1 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp 
b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index 20da487..5df2470 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -1701,22 +1701,45 @@ vec4_visitor::emit_constant_values(dst_reg *dst, 
ir_constant *ir)
 
if (ir->type->is_matrix()) {
   for (int i = 0; i < ir->type->matrix_columns; i++) {
+float *vec = &ir->value.f[i * ir->type->vector_elements];
+
 for (int j = 0; j < ir->type->vector_elements; j++) {
dst->writemask = 1 << j;
dst->type = BRW_REGISTER_TYPE_F;
 
-   emit(MOV(*dst,
-src_reg(ir->value.f[i * ir->type->vector_elements + j])));
+   emit(MOV(*dst, src_reg(vec[j])));
 }
 dst->reg_offset++;
   }
   return;
}
 
+   int remaining_writemask = (1 << ir->type->vector_elements) - 1;
+
for (int i = 0; i < ir->type->vector_elements; i++) {
+  if (!(remaining_writemask & (1 << i)))
+continue;
+
   dst->writemask = 1 << i;
   dst->type = brw_type_for_base_type(ir->type);
 
+  /* Find other components that match the one we're about to
+   * write.  Emits fewer instructions for things like vec4(0.5,
+   * 1.5, 1.5, 1.5).
+   */
+  for (int j = i + 1; j < ir->type->vector_elements; j++) {
+if (ir->type->base_type == GLSL_TYPE_BOOL) {
+   if (ir->value.b[i] == ir->value.b[j])
+  dst->writemask |= (1 << j);
+} else {
+   /* u, i, and f storage all line up, so no need for a
+* switch case for comparing each type.
+*/
+   if (ir->value.u[i] == ir->value.u[j])
+  dst->writemask |= (1 << j);
+}
+  }
+
   switch (ir->type->base_type) {
   case GLSL_TYPE_FLOAT:
 emit(MOV(*dst, src_reg(ir->value.f[i])));
@@ -1734,6 +1757,8 @@ vec4_visitor::emit_constant_values(dst_reg *dst, 
ir_constant *ir)
 assert(!"Non-float/uint/int/bool constant");
 break;
   }
+
+  remaining_writemask &= ~dst->writemask;
}
dst->reg_offset++;
 }

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


Mesa (master): i965/gen7: Fix segfault in transform feedback to DYNAMIC_DRAW buffers.

2012-01-11 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: ba6f4c9ee2294de66977d292972d47355fa58be0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ba6f4c9ee2294de66977d292972d47355fa58be0

Author: Eric Anholt 
Date:   Mon Jan  2 14:03:59 2012 -0800

i965/gen7: Fix segfault in transform feedback to DYNAMIC_DRAW buffers.

Fixes piglit EXT_transform_feedback/buffer-usage.

---

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

diff --git a/src/mesa/drivers/dri/i965/gen7_sol_state.c 
b/src/mesa/drivers/dri/i965/gen7_sol_state.c
index 04783ec..110c166 100644
--- a/src/mesa/drivers/dri/i965/gen7_sol_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_sol_state.c
@@ -53,7 +53,8 @@ upload_3dstate_so_buffers(struct brw_context *brw)
 * gl_transform_feedback_object.
 */
for (i = 0; i < 4; i++) {
-  struct gl_buffer_object *bufferobj = xfb_obj->Buffers[i];
+  struct intel_buffer_object *bufferobj =
+intel_buffer_object(xfb_obj->Buffers[i]);
   drm_intel_bo *bo;
   uint32_t start, end;
   uint32_t stride;
@@ -72,7 +73,7 @@ upload_3dstate_so_buffers(struct brw_context *brw)
 continue;
   }
 
-  bo = intel_buffer_object(bufferobj)->buffer;
+  bo = intel_bufferobj_buffer(intel, bufferobj, INTEL_WRITE_PART);
   stride = linked_xfb_info->BufferStride[i] * 4;
 
   start = xfb_obj->Offset[i];

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


Mesa (master): mesa: add _mesa_HashNumEntries() function

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: f1b33c74dc11b97a86a7f0e9cbe4cb168b2b9540
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f1b33c74dc11b97a86a7f0e9cbe4cb168b2b9540

Author: Brian Paul 
Date:   Wed Jan 11 12:58:43 2012 -0700

mesa: add _mesa_HashNumEntries() function

Useful when debugging to find the number of texture objects, shader
programs, etc.

---

 src/mesa/main/hash.c |   20 
 src/mesa/main/hash.h |3 +++
 2 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/hash.c b/src/mesa/main/hash.c
index 4b250ad..61c369a 100644
--- a/src/mesa/main/hash.c
+++ b/src/mesa/main/hash.c
@@ -480,6 +480,26 @@ _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, 
GLuint numKeys)
 }
 
 
+/**
+ * Return the number of entries in the hash table.
+ */
+GLuint
+_mesa_HashNumEntries(const struct _mesa_HashTable *table)
+{
+   GLuint pos, count = 0;
+
+   for (pos = 0; pos < TABLE_SIZE; pos++) {
+  const struct HashEntry *entry;
+  for (entry = table->Table[pos]; entry; entry = entry->Next) {
+ count++;
+  }
+   }
+
+   return count;
+}
+
+
+
 #if 0 /* debug only */
 
 /**
diff --git a/src/mesa/main/hash.h b/src/mesa/main/hash.h
index 4f916f9..e935f8d 100644
--- a/src/mesa/main/hash.h
+++ b/src/mesa/main/hash.h
@@ -63,6 +63,9 @@ extern void _mesa_HashPrint(const struct _mesa_HashTable 
*table);
 
 extern GLuint _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, GLuint 
numKeys);
 
+extern GLuint
+_mesa_HashNumEntries(const struct _mesa_HashTable *table);
+
 extern void _mesa_test_hash_functions(void);
 
 

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


Mesa (master): st/wgl: Return NULL for NULL HDCs in wglGetExtensionsStringARB.

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 6811704830b6637d7c9b19914bd3549143eeb3e5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6811704830b6637d7c9b19914bd3549143eeb3e5

Author: José Fonseca 
Date:   Fri Dec 23 02:57:29 2011 +

st/wgl: Return NULL for NULL HDCs in wglGetExtensionsStringARB.

WGL_ARB_extensions_string states that wglGetExtensionsStringARB should
return NULL for invalid HDCs.  And some applications rely on it.

Reviewed-By: "Keith Whitwell" 

---

 .../state_trackers/wgl/stw_ext_extensionsstring.c  |4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/state_trackers/wgl/stw_ext_extensionsstring.c 
b/src/gallium/state_trackers/wgl/stw_ext_extensionsstring.c
index ecb326f..7cad49c 100644
--- a/src/gallium/state_trackers/wgl/stw_ext_extensionsstring.c
+++ b/src/gallium/state_trackers/wgl/stw_ext_extensionsstring.c
@@ -47,7 +47,9 @@ WINGDIAPI const char * APIENTRY
 wglGetExtensionsStringARB(
HDC hdc )
 {
-   (void) hdc;
+   if (!hdc) {
+  return NULL;
+   }
 
return stw_extension_string;
 }

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


Mesa (master): llvmpipe: disable native integers

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 2d80cad16e55b6eb11084045015a08fff43a7485
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2d80cad16e55b6eb11084045015a08fff43a7485

Author: Dave Airlie 
Date:   Wed Jan 11 19:48:00 2012 +

llvmpipe: disable native integers

llvmpipe shouldn't be reporting native integer support.

Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/llvmpipe/lp_screen.c |9 -
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c 
b/src/gallium/drivers/llvmpipe/lp_screen.c
index 5798a19..fd6e439 100644
--- a/src/gallium/drivers/llvmpipe/lp_screen.c
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c
@@ -168,7 +168,12 @@ llvmpipe_get_shader_param(struct pipe_screen *screen, 
unsigned shader, enum pipe
switch(shader)
{
case PIPE_SHADER_FRAGMENT:
-  return tgsi_exec_get_shader_param(param);
+  switch (param) {
+  case PIPE_SHADER_CAP_INTEGERS:
+ return 0;
+  default:
+ return tgsi_exec_get_shader_param(param);
+  }
case PIPE_SHADER_VERTEX:
case PIPE_SHADER_GEOMETRY:
   switch (param) {
@@ -181,6 +186,8 @@ llvmpipe_get_shader_param(struct pipe_screen *screen, 
unsigned shader, enum pipe
 return PIPE_MAX_VERTEX_SAMPLERS;
  else
 return 0;
+  case PIPE_SHADER_CAP_INTEGERS:
+ return 0;
   default:
  return draw_get_shader_param(shader, param);
   }

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


Mesa (master): xlib: stop calling XShmQueryVersion()

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 0a20051e6da99e91b7bf589ea457c77a8b618f26
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0a20051e6da99e91b7bf589ea457c77a8b618f26

Author: Brian Paul 
Date:   Tue Jan 10 19:32:38 2012 -0700

xlib: stop calling XShmQueryVersion()

It caused an X protocol error in some (rare) situations.
This is a follow-on to the previous commits which fixes a bug reported
by Wayne E. Robertz.

NOTE: This is a candidate for the 7.11 branch.

Reviewed-by: Adam Jackson 

---

 src/mesa/drivers/x11/xm_api.c |   16 
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c
index 81b2459..bdee2a2 100644
--- a/src/mesa/drivers/x11/xm_api.c
+++ b/src/mesa/drivers/x11/xm_api.c
@@ -114,16 +114,16 @@ static int host_byte_order( void )
 static int check_for_xshm( XMesaDisplay *display )
 {
 #if defined(USE_XSHM) 
-   int major, minor, ignore;
-   Bool pixmaps;
+   int ignore;
 
if (XQueryExtension( display, "MIT-SHM", &ignore, &ignore, &ignore )) {
-  if (XShmQueryVersion( display, &major, &minor, &pixmaps )==True) {
-return (pixmaps==True) ? 2 : 1;
-  }
-  else {
-return 0;
-  }
+  /* Note: we're no longer calling XShmQueryVersion() here.  It seems
+   * to be flakey (triggers a spurious X protocol error when we close
+   * one display connection and start using a new one.  XShm has been
+   * around a long time and hasn't changed so if MIT_SHM is supported
+   * we assume we're good to go.
+   */
+  return 2;
}
else {
   return 0;

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


Mesa (master): st/glx/xlib: call register_with_display() in glXChooseFBConfig()

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 7f6de60c585c6ac99d8e6b1280a8d7ce82f3c5e2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7f6de60c585c6ac99d8e6b1280a8d7ce82f3c5e2

Author: Brian Paul 
Date:   Tue Jan 10 19:39:04 2012 -0700

st/glx/xlib: call register_with_display() in glXChooseFBConfig()

This is the same fix as the previous commit, except it's for the gallium
glx/xlib state tracker.

NOTE: This is a candidate for the 7.11 branch.

Reviewed-by: Adam Jackson 

---

 src/gallium/state_trackers/glx/xlib/glx_api.c |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/gallium/state_trackers/glx/xlib/glx_api.c 
b/src/gallium/state_trackers/glx/xlib/glx_api.c
index b68882b..d034fb5 100644
--- a/src/gallium/state_trackers/glx/xlib/glx_api.c
+++ b/src/gallium/state_trackers/glx/xlib/glx_api.c
@@ -1788,6 +1788,9 @@ glXChooseFBConfig(Display *dpy, int screen,
 {
XMesaVisual xmvis;
 
+   /* register ourselves as an extension on this display */
+   register_with_display(dpy);
+
if (!attribList || !attribList[0]) {
   /* return list of all configs (per GLX_SGIX_fbconfig spec) */
   return glXGetFBConfigs(dpy, screen, nitems);

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


Mesa (master): xlib: call register_with_display() in Fake_glXChooseFBConfig ()

2012-01-11 Thread Brian Paul
Module: Mesa
Branch: master
Commit: ecbdb173bbe3e37b4cbc6b08a5ba5a70236a0d1d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ecbdb173bbe3e37b4cbc6b08a5ba5a70236a0d1d

Author: Brian Paul 
Date:   Tue Jan 10 19:24:41 2012 -0700

xlib: call register_with_display() in Fake_glXChooseFBConfig()

as we do in Fake_glXChooseVisual().  This registers the MesaGLX
extension on the display so we can clean up buffers, etc. when
the display connection is closed.

Fixes a bug reported by Wayne E. Robertz.

NOTE: This is a candidate for the 7.11 branch.

Reviewed-by: Adam Jackson 

---

 src/mesa/drivers/x11/fakeglx.c |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c
index 445d43b..916296d 100644
--- a/src/mesa/drivers/x11/fakeglx.c
+++ b/src/mesa/drivers/x11/fakeglx.c
@@ -1983,6 +1983,9 @@ Fake_glXChooseFBConfig( Display *dpy, int screen,
 {
XMesaVisual xmvis;
 
+   /* register ourselves as an extension on this display */
+   register_with_display(dpy);
+
if (!attribList || !attribList[0]) {
   /* return list of all configs (per GLX_SGIX_fbconfig spec) */
   return Fake_glXGetFBConfigs(dpy, screen, nitems);

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


Mesa (master): nv50/ir: handle TGSI_OPCODE_ISSG

2012-01-11 Thread Christoph Bumiller
Module: Mesa
Branch: master
Commit: b424bf69dfd78c64e065b8ba59d9b40a8f4fecd6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b424bf69dfd78c64e065b8ba59d9b40a8f4fecd6

Author: Christoph Bumiller 
Date:   Wed Jan 11 20:25:06 2012 +0100

nv50/ir: handle TGSI_OPCODE_ISSG

---

 .../drivers/nv50/codegen/nv50_ir_from_tgsi.cpp |   11 ---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp 
b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp
index 7f4c7f2..a1c8f84 100644
--- a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp
+++ b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp
@@ -385,6 +385,7 @@ nv50_ir::DataType Instruction::inferSrcType() const
case TGSI_OPCODE_ISGE:
case TGSI_OPCODE_ISHR:
case TGSI_OPCODE_ISLT:
+   case TGSI_OPCODE_ISSG:
case TGSI_OPCODE_SAD: // not sure about SAD, but no one has a float version
case TGSI_OPCODE_MOD:
case TGSI_OPCODE_UARL:
@@ -1892,14 +1893,18 @@ Converter::handleInstruction(const struct 
tgsi_full_instruction *insn)
  }
   }
   break;
+   case TGSI_OPCODE_ISSG:
case TGSI_OPCODE_SSG:
   FOR_EACH_DST_ENABLED_CHANNEL(0, c, tgsi) {
  src0 = fetchSrc(0, c);
  val0 = getScratch();
  val1 = getScratch();
- mkCmp(OP_SET, CC_GT, TYPE_F32, val0, src0, zero);
- mkCmp(OP_SET, CC_LT, TYPE_F32, val1, src0, zero);
- mkOp2(OP_SUB, TYPE_F32, dst0[c], val0, val1);
+ mkCmp(OP_SET, CC_GT, srcTy, val0, src0, zero);
+ mkCmp(OP_SET, CC_LT, srcTy, val1, src0, zero);
+ if (srcTy == TYPE_F32)
+mkOp2(OP_SUB, TYPE_F32, dst0[c], val0, val1);
+ else
+mkOp2(OP_SUB, TYPE_S32, dst0[c], val1, val0);
   }
   break;
case TGSI_OPCODE_UCMP:

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


Mesa (master): nv50,nvc0: zero out program struct on program_destroy

2012-01-11 Thread Christoph Bumiller
Module: Mesa
Branch: master
Commit: f6b994b3058d1c6cd7c28eef522c08df3d83bea7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f6b994b3058d1c6cd7c28eef522c08df3d83bea7

Author: Christoph Bumiller 
Date:   Wed Jan 11 18:50:15 2012 +0100

nv50,nvc0: zero out program struct on program_destroy

Prevent any state from carrying over to a new translation in cases
where we assume that data is still zero from initial calloc (these
would require us to do individual zeroing before translation which
would be more code).

---

 src/gallium/drivers/nv50/nv50_program.c |8 +++-
 src/gallium/drivers/nvc0/nvc0_program.c |8 ++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_program.c 
b/src/gallium/drivers/nv50/nv50_program.c
index c8b708c..c141a91 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -677,6 +677,9 @@ out:
 void
 nv50_program_destroy(struct nv50_context *nv50, struct nv50_program *p)
 {
+   const struct pipe_shader_state pipe = p->pipe;
+   const ubyte type = p->type;
+
if (p->res)
   nouveau_resource_free(&p->res);
 
@@ -686,5 +689,8 @@ nv50_program_destroy(struct nv50_context *nv50, struct 
nv50_program *p)
if (p->fixups)
   FREE(p->fixups);
 
-   p->translated = FALSE;
+   memset(p, 0, sizeof(*p));
+
+   p->pipe = pipe;
+   p->type = type;
 }
diff --git a/src/gallium/drivers/nvc0/nvc0_program.c 
b/src/gallium/drivers/nvc0/nvc0_program.c
index 42cd21d..813008c 100644
--- a/src/gallium/drivers/nvc0/nvc0_program.c
+++ b/src/gallium/drivers/nvc0/nvc0_program.c
@@ -711,6 +711,9 @@ nvc0_program_library_upload(struct nvc0_context *nvc0)
 void
 nvc0_program_destroy(struct nvc0_context *nvc0, struct nvc0_program *prog)
 {
+   const struct pipe_shader_state pipe = prog->pipe;
+   const ubyte type = prog->type;
+
if (prog->res)
   nouveau_resource_free(&prog->res);
 
@@ -726,7 +729,8 @@ nvc0_program_destroy(struct nvc0_context *nvc0, struct 
nvc0_program *prog)
   FREE(prog->tfb);
}
 
-   memset(prog->hdr, 0, sizeof(prog->hdr));
+   memset(prog, 0, sizeof(*prog));
 
-   prog->translated = FALSE;
+   prog->pipe = pipe;
+   prog->type = type;
 }

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


Mesa (master): nv50/ir: handle TGSI_TEXTURE_SHADOWCUBE

2012-01-11 Thread Christoph Bumiller
Module: Mesa
Branch: master
Commit: 9d503992d7309a49df0b0a4887b999e2d6b291c0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d503992d7309a49df0b0a4887b999e2d6b291c0

Author: Christoph Bumiller 
Date:   Wed Jan 11 20:18:56 2012 +0100

nv50/ir: handle TGSI_TEXTURE_SHADOWCUBE

---

 .../drivers/nv50/codegen/nv50_ir_from_tgsi.cpp |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp 
b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp
index 8b36895..7f4c7f2 100644
--- a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp
+++ b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp
@@ -345,6 +345,7 @@ static nv50_ir::TexTarget translateTexture(uint tex)
NV50_IR_TEX_TARG_CASE(SHADOW2D, 2D_SHADOW);
NV50_IR_TEX_TARG_CASE(SHADOW1D_ARRAY, 1D_ARRAY_SHADOW);
NV50_IR_TEX_TARG_CASE(SHADOW2D_ARRAY, 2D_ARRAY_SHADOW);
+   NV50_IR_TEX_TARG_CASE(SHADOWCUBE, CUBE_SHADOW);
NV50_IR_TEX_TARG_CASE(SHADOWRECT, RECT_SHADOW);
 
case TGSI_TEXTURE_UNKNOWN:

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


Mesa (master): wayland-drm: Drop the non-premul formats, use format codes from drm_fourcc.h

2012-01-11 Thread Kristian Høgsberg
Module: Mesa
Branch: master
Commit: 58dc1b28d1ef4d1931c52b079d304f2e1546329d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=58dc1b28d1ef4d1931c52b079d304f2e1546329d

Author: Kristian Høgsberg 
Date:   Wed Jan 11 14:23:24 2012 -0500

wayland-drm: Drop the non-premul formats, use format codes from drm_fourcc.h

---

 src/egl/drivers/dri2/egl_dri2.c|   10 +--
 src/egl/drivers/dri2/platform_wayland.c|   31 --
 .../wayland/wayland-drm/protocol/wayland-drm.xml   |   64 +++-
 src/egl/wayland/wayland-drm/wayland-drm.c  |   11 ++--
 .../egl/common/native_wayland_drm_bufmgr_helper.c  |5 +-
 .../state_trackers/egl/wayland/native_drm.c|   16 ++---
 .../state_trackers/egl/wayland/native_shm.c|9 +--
 .../state_trackers/egl/wayland/native_wayland.c|   13 +---
 .../state_trackers/egl/wayland/native_wayland.h|5 +-
 9 files changed, 97 insertions(+), 67 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 5fff7e1..80b2e38 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -1094,11 +1094,10 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, 
_EGLContext *ctx,
attrs.Height = buffer->height;
 
switch (wayland_drm_buffer_get_format(buffer)) {
-   case WL_DRM_FORMAT_ARGB32:
-   case WL_DRM_FORMAT_PREMULTIPLIED_ARGB32:
+   case WL_DRM_FORMAT_ARGB:
   format = __DRI_IMAGE_FORMAT_ARGB;
   break;
-   case WL_DRM_FORMAT_XRGB32:
+   case WL_DRM_FORMAT_XRGB:
   format = __DRI_IMAGE_FORMAT_XRGB;
   break;
default:
@@ -1273,11 +1272,10 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name,
int dri_format;
 
switch (format) {
-   case WL_DRM_FORMAT_ARGB32:
-   case WL_DRM_FORMAT_PREMULTIPLIED_ARGB32:
+   case WL_DRM_FORMAT_ARGB:
   dri_format =__DRI_IMAGE_FORMAT_ARGB;
   break;
-   case WL_DRM_FORMAT_XRGB32:
+   case WL_DRM_FORMAT_XRGB:
   dri_format = __DRI_IMAGE_FORMAT_XRGB;
   break;
default:
diff --git a/src/egl/drivers/dri2/platform_wayland.c 
b/src/egl/drivers/dri2/platform_wayland.c
index 16c613f..b2981a0 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -41,9 +41,8 @@
 #include "wayland-drm-client-protocol.h"
 
 enum wl_drm_format_flags {
-   HAS_ARGB32 = 1,
-   HAS_PREMUL_ARGB32 = 2,
-   HAS_XRGB32 = 4
+   HAS_ARGB = 1,
+   HAS_XRGB = 2
 };
 
 static void
@@ -108,11 +107,9 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay *disp, 
EGLint type,
dri2_surf->block_swap_buffers = EGL_FALSE;
 
if (conf->AlphaSize == 0)
-  dri2_surf->format = WL_DRM_FORMAT_XRGB32;
-   else if (dri2_surf->base.VGAlphaFormat == EGL_VG_ALPHA_FORMAT_PRE)
-  dri2_surf->format = WL_DRM_FORMAT_PREMULTIPLIED_ARGB32;
+  dri2_surf->format = WL_DRM_FORMAT_XRGB;
else
-  dri2_surf->format = WL_DRM_FORMAT_ARGB32;
+  dri2_surf->format = WL_DRM_FORMAT_ARGB;
 
switch (type) {
case EGL_WINDOW_BIT:
@@ -671,7 +668,7 @@ dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext 
*ctx,
   wl_egl_pixmap->width,
   wl_egl_pixmap->height,
   dri2_buf->dri_buffer->pitch,
-  WL_DRM_FORMAT_PREMULTIPLIED_ARGB32);
+  WL_DRM_FORMAT_ARGB);
 
wl_attr_list[1] = wl_egl_pixmap->width;
wl_attr_list[3] = wl_egl_pixmap->height;
@@ -768,14 +765,11 @@ drm_handle_format(void *data, struct wl_drm *drm, 
uint32_t format)
struct dri2_egl_display *dri2_dpy = data;
 
switch (format) {
-   case WL_DRM_FORMAT_ARGB32:
-  dri2_dpy->formats |= HAS_ARGB32;
+   case WL_DRM_FORMAT_ARGB:
+  dri2_dpy->formats |= HAS_ARGB;
   break;
-   case WL_DRM_FORMAT_PREMULTIPLIED_ARGB32:
-  dri2_dpy->formats |= HAS_PREMUL_ARGB32;
-  break;
-   case WL_DRM_FORMAT_XRGB32:
-  dri2_dpy->formats |= HAS_XRGB32;
+   case WL_DRM_FORMAT_XRGB:
+  dri2_dpy->formats |= HAS_XRGB;
   break;
}
 }
@@ -871,14 +865,11 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay 
*disp)
   goto cleanup_driver;
 
types = EGL_WINDOW_BIT | EGL_PIXMAP_BIT;
-   if (dri2_dpy->formats & HAS_PREMUL_ARGB32)
-  types |= EGL_VG_ALPHA_FORMAT_PRE_BIT;
-
for (i = 0; dri2_dpy->driver_configs[i]; i++) {
   config = dri2_dpy->driver_configs[i];
-  if (dri2_dpy->formats & HAS_XRGB32)
+  if (dri2_dpy->formats & HAS_XRGB)
 dri2_add_config(disp, config, i + 1, 0, types, NULL, rgb_masks);
-  if (dri2_dpy->formats & (HAS_ARGB32 | HAS_PREMUL_ARGB32))
+  if (dri2_dpy->formats & HAS_ARGB)
 dri2_add_config(disp, config, i + 1, 0, types, NULL, argb_masks);
}
 
diff --git a/src/egl/wayland/wayland-drm/protocol/wayland-drm.xml 
b/src/egl/wayland/wayland-drm/protocol/wayland-drm.xml
index f63bebd..89fd8f0 100644
--- a/src/egl/way

Mesa (master): draw: Store the new pre_clip_pos member as well.

2012-01-11 Thread Jose Fonseca
Module: Mesa
Branch: master
Commit: 1306644a67ad90c39c55f76e9b4734d943b6b5cc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1306644a67ad90c39c55f76e9b4734d943b6b5cc

Author: José Fonseca 
Date:   Wed Jan 11 18:10:43 2012 +

draw: Store the new pre_clip_pos member as well.

Again, not much testing nor peer review, but should be better than what's
now.

---

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

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index 50c7e25..e71c802 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -885,7 +885,8 @@ convert_to_aos(struct gallivm_state *gallivm,
 static void
 store_clip(struct gallivm_state *gallivm,
LLVMValueRef io_ptr,   
-   LLVMValueRef (*outputs)[NUM_CHANNELS])
+   LLVMValueRef (*outputs)[NUM_CHANNELS],
+   boolean pre_clip_pos)
 {
LLVMBuilderRef builder = gallivm->builder;
LLVMValueRef out[4];
@@ -914,10 +915,18 @@ store_clip(struct gallivm_state *gallivm,
io2_ptr = LLVMBuildGEP(builder, io_ptr, &ind2, 1, "");
io3_ptr = LLVMBuildGEP(builder, io_ptr, &ind3, 1, "");
 
-   clip_ptr0 = draw_jit_header_clip(gallivm, io0_ptr);
-   clip_ptr1 = draw_jit_header_clip(gallivm, io1_ptr);
-   clip_ptr2 = draw_jit_header_clip(gallivm, io2_ptr);
-   clip_ptr3 = draw_jit_header_clip(gallivm, io3_ptr);
+   /* FIXME: this needs updating for clip vertex support */
+   if (!pre_clip_pos) {
+  clip_ptr0 = draw_jit_header_clip(gallivm, io0_ptr);
+  clip_ptr1 = draw_jit_header_clip(gallivm, io1_ptr);
+  clip_ptr2 = draw_jit_header_clip(gallivm, io2_ptr);
+  clip_ptr3 = draw_jit_header_clip(gallivm, io3_ptr);
+   } else {
+  clip_ptr0 = draw_jit_header_pre_clip_pos(gallivm, io0_ptr);
+  clip_ptr1 = draw_jit_header_pre_clip_pos(gallivm, io1_ptr);
+  clip_ptr2 = draw_jit_header_pre_clip_pos(gallivm, io2_ptr);
+  clip_ptr3 = draw_jit_header_pre_clip_pos(gallivm, io3_ptr);
+   }
 
for (i = 0; i<4; i++) {
   clip0_ptr = LLVMBuildGEP(builder, clip_ptr0, indices, 2, ""); /* x0 */
@@ -1361,7 +1370,8 @@ draw_llvm_generate(struct draw_llvm *llvm, struct 
draw_llvm_variant *variant,
   variant->key.clamp_vertex_color);
 
   /* store original positions in clip before further manipulation */
-  store_clip(gallivm, io, outputs);
+  store_clip(gallivm, io, outputs, 0);
+  store_clip(gallivm, io, outputs, 1);
 
   /* do cliptest */
   if (enable_cliptest) {

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


Mesa (master): egl_dri2: Put the _eglError call in the case switch case

2012-01-11 Thread Kristian Høgsberg
Module: Mesa
Branch: master
Commit: 513d1feee46d05b71094c60ee09fa263867f25b7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=513d1feee46d05b71094c60ee09fa263867f25b7

Author: Kristian Høgsberg 
Date:   Wed Jan 11 12:36:37 2012 -0500

egl_dri2: Put the _eglError call in the case switch case

Log an error in case we get an unknown format, not in case for XRGB32.
I botched the edit of Roberts patch.

---

 src/egl/drivers/dri2/egl_dri2.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index a7ebf59..5fff7e1 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -1099,11 +1099,11 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, 
_EGLContext *ctx,
   format = __DRI_IMAGE_FORMAT_ARGB;
   break;
case WL_DRM_FORMAT_XRGB32:
-  _eglError(EGL_BAD_PARAMETER,
-   "dri2_create_image_khr: unsupported wl_buffer format");
   format = __DRI_IMAGE_FORMAT_XRGB;
   break;
default:
+  _eglError(EGL_BAD_PARAMETER,
+   "dri2_create_image_khr: unsupported wl_buffer format");
   return NULL;
}
 

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


Mesa (master): st/mesa: rename translate_texture_target, and make translate_opcode static.

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 3f80b69b5f2093ffc624bb901ce34f0e289bc25d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3f80b69b5f2093ffc624bb901ce34f0e289bc25d

Author: Dave Airlie 
Date:   Wed Jan 11 17:32:40 2012 +

st/mesa: rename translate_texture_target, and make translate_opcode static.

As suggested by Brian.

Signed-off-by: Dave Airlie 

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |2 +-
 src/mesa/state_tracker/st_mesa_to_tgsi.c   |6 +++---
 src/mesa/state_tracker/st_mesa_to_tgsi.h   |5 +
 3 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index a947e18..555f88b 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -4182,7 +4182,7 @@ compile_tgsi_instruction(struct st_translate *t,
   ureg_tex_insn(ureg,
 inst->op,
 dst, num_dst, 
-translate_texture_target(inst->tex_target, 
inst->tex_shadow),
+st_translate_texture_target(inst->tex_target, 
inst->tex_shadow),
 texoffsets, inst->tex_offset_num_offset,
 src, num_src);
   return;
diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c 
b/src/mesa/state_tracker/st_mesa_to_tgsi.c
index e467ffd..0764234 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -269,7 +269,7 @@ src_register( struct st_translate *t,
  * Map mesa texture target to TGSI texture target.
  */
 unsigned
-translate_texture_target( GLuint textarget,
+st_translate_texture_target( GLuint textarget,
   GLboolean shadow )
 {
if (shadow) {
@@ -516,7 +516,7 @@ static void emit_ddy( struct st_translate *t,
 
 
 
-unsigned
+static unsigned
 translate_opcode( unsigned op )
 {
switch( op ) {
@@ -708,7 +708,7 @@ compile_instruction(
   ureg_tex_insn( ureg,
  translate_opcode( inst->Opcode ),
  dst, num_dst, 
- translate_texture_target( inst->TexSrcTarget,
+ st_translate_texture_target( inst->TexSrcTarget,
inst->TexShadow ),
  NULL, 0,
  src, num_src );
diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.h 
b/src/mesa/state_tracker/st_mesa_to_tgsi.h
index 0dbdf5f..7563c80 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.h
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.h
@@ -65,10 +65,7 @@ void
 st_free_tokens(const struct tgsi_token *tokens);
 
 unsigned
-translate_opcode(unsigned op);
-
-unsigned
-translate_texture_target(GLuint textarget, GLboolean shadow);
+st_translate_texture_target(GLuint textarget, GLboolean shadow);
 
 
 #if defined __cplusplus

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


Mesa (master): softpipe: route correct coordinates for shadow cube sampling .

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: fffca9046c96e3411493c39ebb1855012620495c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fffca9046c96e3411493c39ebb1855012620495c

Author: Dave Airlie 
Date:   Thu Jan  5 16:16:24 2012 +

softpipe: route correct coordinates for shadow cube sampling.

This fixes the shadow cube map sampling on softpipe.

Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/softpipe/sp_tex_sample.c |3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c 
b/src/gallium/drivers/softpipe/sp_tex_sample.c
index f552b5e..bd0546e 100644
--- a/src/gallium/drivers/softpipe/sp_tex_sample.c
+++ b/src/gallium/drivers/softpipe/sp_tex_sample.c
@@ -2118,7 +2118,8 @@ sample_compare(struct tgsi_sampler *tgsi_sampler,
 * RGBA channels.  We look at the red channel here.
 */
 
-   if (samp->view->texture->target == PIPE_TEXTURE_2D_ARRAY) {
+   if (samp->view->texture->target == PIPE_TEXTURE_2D_ARRAY ||
+   samp->view->texture->target == PIPE_TEXTURE_CUBE) {
   pc0 = CLAMP(c0[0], 0.0F, 1.0F);
   pc1 = CLAMP(c0[1], 0.0F, 1.0F);
   pc2 = CLAMP(c0[2], 0.0F, 1.0F);

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


Mesa (master): glsl_to_tgsi: add support for shadow cube map sampling.

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 2f275466f78b7268e4f7ae8890eafd4243a2b8b0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2f275466f78b7268e4f7ae8890eafd4243a2b8b0

Author: Dave Airlie 
Date:   Wed Jan 11 13:23:38 2012 +

glsl_to_tgsi: add support for shadow cube map sampling.

This along with the TGSI support lets the piglit sampler-cube-shadow
test pass on softpipe.

Signed-off-by: Dave Airlie 

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |5 +++--
 src/mesa/state_tracker/st_mesa_to_tgsi.c   |1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index cb44e2b..a947e18 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -2646,8 +2646,9 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
   ir->shadow_comparitor->accept(this);
 
   /* XXX This will need to be updated for cubemap array samplers. */
-  if (sampler_type->sampler_dimensionality == GLSL_SAMPLER_DIM_2D &&
-  sampler_type->sampler_array) {
+  if ((sampler_type->sampler_dimensionality == GLSL_SAMPLER_DIM_2D &&
+  sampler_type->sampler_array) ||
+ sampler_type->sampler_dimensionality == GLSL_SAMPLER_DIM_CUBE) {
  coord_dst.writemask = WRITEMASK_W;
   } else {
  coord_dst.writemask = WRITEMASK_Z;
diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c 
b/src/mesa/state_tracker/st_mesa_to_tgsi.c
index ac61534..e467ffd 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -279,6 +279,7 @@ translate_texture_target( GLuint textarget,
   case TEXTURE_RECT_INDEX: return TGSI_TEXTURE_SHADOWRECT;
   case TEXTURE_1D_ARRAY_INDEX: return TGSI_TEXTURE_SHADOW1D_ARRAY;
   case TEXTURE_2D_ARRAY_INDEX: return TGSI_TEXTURE_SHADOW2D_ARRAY;
+  case TEXTURE_CUBE_INDEX: return TGSI_TEXTURE_SHADOWCUBE;
   default: break;
   }
}

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


Mesa (master): tgsi: add TGSI_TEXTURE_SHADOWCUBEMAP

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 0ec30805a4aad945515957e980374f65fbd3b66e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0ec30805a4aad945515957e980374f65fbd3b66e

Author: Dave Airlie 
Date:   Wed Jan 11 13:22:22 2012 +

tgsi: add TGSI_TEXTURE_SHADOWCUBEMAP

This adds support for shadow cubemap texture sampling instructions.

This is required for GL 3.0.

Signed-off-by: Dave Airlie 

---

 src/gallium/auxiliary/tgsi/tgsi_exec.c |2 ++
 src/gallium/auxiliary/tgsi/tgsi_strings.c  |1 +
 src/gallium/auxiliary/tgsi/tgsi_util.c |1 +
 src/gallium/include/pipe/p_shader_tokens.h |3 ++-
 4 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c 
b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index 72b1dca..c0bd2d0 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -1865,6 +1865,7 @@ exec_tex(struct tgsi_exec_machine *mach,
   &r[0], &r[1], &r[2], &r[3]);  /* outputs */
   break;
case TGSI_TEXTURE_SHADOW2D_ARRAY:
+   case TGSI_TEXTURE_SHADOWCUBE:
   FETCH(&r[0], 0, CHAN_X);
   FETCH(&r[1], 0, CHAN_Y);
   FETCH(&r[2], 0, CHAN_Z);
@@ -2182,6 +2183,7 @@ exec_sample(struct tgsi_exec_machine *mach,
   break;
 
case TGSI_TEXTURE_SHADOW2D_ARRAY:
+   case TGSI_TEXTURE_SHADOWCUBE:
   FETCH(&r[0], 0, CHAN_X);
   FETCH(&r[1], 0, CHAN_Y);
   FETCH(&r[2], 0, CHAN_Z);
diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.c 
b/src/gallium/auxiliary/tgsi/tgsi_strings.c
index de9152d..520452c 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_strings.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_strings.c
@@ -90,6 +90,7 @@ const char *tgsi_texture_names[TGSI_TEXTURE_COUNT] =
"2DARRAY",
"SHADOW1DARRAY",
"SHADOW2DARRAY",
+   "SHADOWCUBE"
 };
 
 const char *tgsi_property_names[TGSI_PROPERTY_COUNT] =
diff --git a/src/gallium/auxiliary/tgsi/tgsi_util.c 
b/src/gallium/auxiliary/tgsi/tgsi_util.c
index 9f6997d..36dc10d 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_util.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_util.c
@@ -284,6 +284,7 @@ tgsi_util_get_inst_usage_mask(const struct 
tgsi_full_instruction *inst,
 read_mask = TGSI_WRITEMASK_XYZ;
 break;
  case TGSI_TEXTURE_SHADOW2D_ARRAY:
+ case TGSI_TEXTURE_SHADOWCUBE:
 read_mask = TGSI_WRITEMASK_XYZW;
 break;
  default:
diff --git a/src/gallium/include/pipe/p_shader_tokens.h 
b/src/gallium/include/pipe/p_shader_tokens.h
index a131630..df2dd5e 100644
--- a/src/gallium/include/pipe/p_shader_tokens.h
+++ b/src/gallium/include/pipe/p_shader_tokens.h
@@ -454,7 +454,8 @@ struct tgsi_instruction_label
 #define TGSI_TEXTURE_2D_ARRAY   10
 #define TGSI_TEXTURE_SHADOW1D_ARRAY 11
 #define TGSI_TEXTURE_SHADOW2D_ARRAY 12
-#define TGSI_TEXTURE_COUNT  13
+#define TGSI_TEXTURE_SHADOWCUBE 13
+#define TGSI_TEXTURE_COUNT  14
 
 struct tgsi_instruction_texture
 {

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


Mesa (master): llvmpipe: Update for TGSI_INTERPOLATE_COLOR.

2012-01-11 Thread Jose Fonseca
Module: Mesa
Branch: master
Commit: ec4d691474bcf84bb69161cda25494962a08172c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ec4d691474bcf84bb69161cda25494962a08172c

Author: José Fonseca 
Date:   Wed Jan 11 17:14:26 2012 +

llvmpipe: Update for TGSI_INTERPOLATE_COLOR.

Not thoroughly tested nor reviewed. But should at least prevent the
assertion failure.

---

 src/gallium/drivers/llvmpipe/lp_state_fs.c |   10 +++---
 1 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c 
b/src/gallium/drivers/llvmpipe/lp_state_fs.c
index 53e35ef..c7bab82 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
@@ -1025,19 +1025,15 @@ llvmpipe_create_fs_state(struct pipe_context *pipe,
   case TGSI_INTERPOLATE_PERSPECTIVE:
 shader->inputs[i].interp = LP_INTERP_PERSPECTIVE;
 break;
+  case TGSI_INTERPOLATE_COLOR:
+shader->inputs[i].interp = LP_INTERP_COLOR;
+break;
   default:
 assert(0);
 break;
   }
 
   switch (shader->info.base.input_semantic_name[i]) {
-  case TGSI_SEMANTIC_COLOR:
- /* Colors may be either linearly or constant interpolated in
- * the fragment shader, but that information isn't available
- * here.  Mark color inputs and fix them up later.
-  */
-shader->inputs[i].interp = LP_INTERP_COLOR;
- break;
   case TGSI_SEMANTIC_FACE:
 shader->inputs[i].interp = LP_INTERP_FACING;
 break;

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


Mesa (master): egl_dri2/wayland: handle creating xrgb8888 images

2012-01-11 Thread Kristian Høgsberg
Module: Mesa
Branch: master
Commit: 670f182a1f0401f34b1fb7ead50644589737f0d2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=670f182a1f0401f34b1fb7ead50644589737f0d2

Author: Robert Bragg 
Date:   Tue Jan 10 22:16:26 2012 +

egl_dri2/wayland: handle creating xrgb images

When creating an EGLImage from a struct wl_buffer * this ensures
that we create an XRGB image if the wayland buffer doesn't have an
alpha channel. To determine if a wl_buffer has a valid alpha channel
this patch adds an internal wayland_drm_buffer_has_alpha() function.

It's important to get the internal format for an EGLImage right so that
if a GL texture is later created from the image then the GL driver will
know if it should sample the alpha from the texture or flatten it to
a constant of 1.0.

This avoids needing fragment program workarounds in wayland compositors
to manually ignore the alpha component of textures created from wayland
buffers.

krh: Edited to use wl_buffer_get_format() instead of wl_buffer_has_alpha().

Reviewed-by: Kristian Høgsberg 

---

 src/egl/drivers/dri2/egl_dri2.c   |  125 -
 src/egl/wayland/wayland-drm/wayland-drm.c |8 ++
 src/egl/wayland/wayland-drm/wayland-drm.h |3 +
 3 files changed, 80 insertions(+), 56 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 47de978..a7ebf59 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -993,40 +993,17 @@ dri2_create_image_khr_renderbuffer(_EGLDisplay *disp, 
_EGLContext *ctx,
 }
 
 static _EGLImage *
-dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx,
- EGLClientBuffer buffer, const EGLint 
*attr_list)
+dri2_create_image_drm_name(_EGLDisplay *disp, _EGLContext *ctx,
+  EGLint name,
+   const _EGLImageAttribs *attrs,
+   EGLint format,
+   EGLint pitch)
 {
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
struct dri2_egl_image *dri2_img;
-   EGLint format, name, pitch, err;
-   _EGLImageAttribs attrs;
 
(void) ctx;
 
-   name = (EGLint) (uintptr_t) buffer;
-
-   err = _eglParseImageAttribList(&attrs, disp, attr_list);
-   if (err != EGL_SUCCESS)
-  return NULL;
-
-   if (attrs.Width <= 0 || attrs.Height <= 0 ||
-   attrs.DRMBufferStrideMESA <= 0) {
-  _eglError(EGL_BAD_PARAMETER,
-   "bad width, height or stride");
-  return NULL;
-   }
-
-   switch (attrs.DRMBufferFormatMESA) {
-   case EGL_DRM_BUFFER_FORMAT_ARGB32_MESA:
-  format = __DRI_IMAGE_FORMAT_ARGB;
-  pitch = attrs.DRMBufferStrideMESA;
-  break;
-   default:
-  _eglError(EGL_BAD_PARAMETER,
-   "dri2_create_image_khr: unsupported pixmap depth");
-  return NULL;
-   }
-
dri2_img = malloc(sizeof *dri2_img);
if (!dri2_img) {
   _eglError(EGL_BAD_ALLOC, "dri2_create_image_mesa_drm");
@@ -1040,8 +1017,8 @@ dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, 
_EGLContext *ctx,
 
dri2_img->dri_image =
   dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen,
-  attrs.Width,
-  attrs.Height,
+  attrs->Width,
+  attrs->Height,
   format,
   name,
   pitch,
@@ -1055,48 +1032,84 @@ dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, 
_EGLContext *ctx,
return &dri2_img->base;
 }
 
-#ifdef HAVE_WAYLAND_PLATFORM
 static _EGLImage *
-dri2_reference_drm_image(_EGLDisplay *disp, _EGLContext *ctx,
-__DRIimage *dri_image, EGLint width, EGLint height)
+dri2_create_image_mesa_drm_buffer(_EGLDisplay *disp, _EGLContext *ctx,
+ EGLClientBuffer buffer, const EGLint 
*attr_list)
 {
-   struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
-   EGLint attr_list[] = {
-   EGL_WIDTH,  0,
-   EGL_HEIGHT, 0,
-   EGL_DRM_BUFFER_STRIDE_MESA, 0,
-   EGL_DRM_BUFFER_FORMAT_MESA, 
EGL_DRM_BUFFER_FORMAT_ARGB32_MESA,
-   EGL_NONE
-   };
-   EGLint name, stride;
-   
-   dri2_dpy->image->queryImage(dri_image, __DRI_IMAGE_ATTRIB_NAME, &name);
-   dri2_dpy->image->queryImage(dri_image, __DRI_IMAGE_ATTRIB_STRIDE, &stride);
+   EGLint format, name, pitch, err;
+   _EGLImageAttribs attrs;
+
+   name = (EGLint) (uintptr_t) buffer;
+
+   err = _eglParseImageAttribList(&attrs, disp, attr_list);
+   if (err != EGL_SUCCESS)
+  return NULL;
 
-   attr_list[1] = width;
-   attr_list[3] = height;
-   attr_list[5] = stride / 4;
+   if (attrs.Width <= 0 || attrs.Height <= 0 ||
+   attrs.DRMBufferStrideMESA <= 0) {
+  _eglErr

Mesa (master): glx: Suppress unused variable warning for cmdlen

2012-01-11 Thread Paul Berry
Module: Mesa
Branch: master
Commit: 765ed3a6a9317607311bac1dcb0edee13ebcee16
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=765ed3a6a9317607311bac1dcb0edee13ebcee16

Author: Paul Berry 
Date:   Mon Jan  9 11:24:17 2012 -0800

glx: Suppress unused variable warning for cmdlen

No functional change.  In the function
__indirect_glAreTexturesResident(), the variable cmdlen is only used
if USE_XCB is not defined.  This patch avoids a compile warning in the
event that USE_XCB is defined.

v2: just move cmdlen declaration inside the #else part.

Reviewed-by: Ian Romanick 
Reviewed-by: Kenneth Graunke 

---

 src/glx/single2.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/glx/single2.c b/src/glx/single2.c
index 66281fa..259c4fe 100644
--- a/src/glx/single2.c
+++ b/src/glx/single2.c
@@ -887,7 +887,6 @@ __indirect_glAreTexturesResident(GLsizei n, const GLuint * 
textures,
struct glx_context *const gc = __glXGetCurrentContext();
Display *const dpy = gc->currentDpy;
GLboolean retval = (GLboolean) 0;
-   const GLuint cmdlen = 4 + __GLX_PAD((n * 4));
if (__builtin_expect((n >= 0) && (dpy != NULL), 1)) {
 #ifdef USE_XCB
   xcb_connection_t *c = XGetXCBConnection(dpy);
@@ -903,6 +902,7 @@ __indirect_glAreTexturesResident(GLsizei n, const GLuint * 
textures,
   retval = reply->ret_val;
   free(reply);
 #else
+  const GLuint cmdlen = 4 + __GLX_PAD((n * 4));
   GLubyte const *pc =
  __glXSetupSingleRequest(gc, X_GLsop_AreTexturesResident, cmdlen);
   (void) memcpy((void *) (pc + 0), (void *) (&n), 4);

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


Mesa (master): mesa: Move transform feedback error check to reduce array overflow risk.

2012-01-11 Thread Paul Berry
Module: Mesa
Branch: master
Commit: d3150ebc8c1833322daf24b2cd47e31a5b2f8a1f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3150ebc8c1833322daf24b2cd47e31a5b2f8a1f

Author: Paul Berry 
Date:   Mon Jan  9 11:25:14 2012 -0800

mesa: Move transform feedback error check to reduce array overflow risk.

Previous to this patch, we didn't do the limit check for
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS until the end of the
store_tfeedback_info() function, *after* storing all of the transform
feedback info in the gl_transform_feedback_info::Outputs array.  This
meant that the limit check wouldn't prevent us from overflowing the
array and corrupting memory.

This patch moves the limit check to the top of tfeedback_decl::store()
so that there is no risk of overflowing the array.  It also adds
assertions to verify that the checks for
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS and
MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS are sufficient to avoid
array overflow.

Note: strictly speaking this patch isn't necessary, since the maximum
possible number of varyings is MAX_VARYING (16), whereas the size of
the Outputs array is MAX_PROGRAM_OUTPUTS (64), so it's impossible to
have enough varyings to overflow the array.  However it seems prudent
to do the limit check before the array access in case these limits
change in the future.

Reviewed-by: Ian Romanick 

---

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

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 39a9c46..0d85aee 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -1388,7 +1388,7 @@ public:
static bool is_same(const tfeedback_decl &x, const tfeedback_decl &y);
bool assign_location(struct gl_context *ctx, struct gl_shader_program *prog,
 ir_variable *output_var);
-   bool store(struct gl_shader_program *prog,
+   bool store(struct gl_context *ctx, struct gl_shader_program *prog,
   struct gl_transform_feedback_info *info, unsigned buffer,
  unsigned varying) const;
 
@@ -1631,7 +1631,7 @@ tfeedback_decl::assign_location(struct gl_context *ctx,
  * is returned.
  */
 bool
-tfeedback_decl::store(struct gl_shader_program *prog,
+tfeedback_decl::store(struct gl_context *ctx, struct gl_shader_program *prog,
   struct gl_transform_feedback_info *info,
   unsigned buffer, unsigned varying) const
 {
@@ -1647,6 +1647,35 @@ tfeedback_decl::store(struct gl_shader_program *prog,
this->orig_name);
   return false;
}
+
+   /* From GL_EXT_transform_feedback:
+*   A program will fail to link if:
+*
+* * the total number of components to capture is greater than
+*   the constant MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT
+*   and the buffer mode is INTERLEAVED_ATTRIBS_EXT.
+*/
+   if (prog->TransformFeedback.BufferMode == GL_INTERLEAVED_ATTRIBS &&
+   info->BufferStride[buffer] + this->num_components() >
+   ctx->Const.MaxTransformFeedbackInterleavedComponents) {
+  linker_error(prog, "The MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS "
+   "limit has been exceeded.");
+  return false;
+   }
+
+   /* Verify that the checks on MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* and MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS are sufficient to prevent
+* overflow of info->Outputs[].  In worst case we generate one entry in
+* Outputs[] per component so a conservative check is to verify that the
+* size of the array is greater than or equal to both
+* MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS and
+* MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS.
+*/
+   assert(Elements(info->Outputs) >=
+  ctx->Const.MaxTransformFeedbackInterleavedComponents);
+   assert(Elements(info->Outputs) >=
+  ctx->Const.MaxTransformFeedbackSeparateComponents);
+
unsigned translated_size = this->size;
if (this->is_clip_distance_mesa)
   translated_size = (translated_size + 3) / 4;
@@ -1943,7 +1972,6 @@ store_tfeedback_info(struct gl_context *ctx, struct 
gl_shader_program *prog,
  unsigned num_tfeedback_decls,
  tfeedback_decl *tfeedback_decls)
 {
-   unsigned total_tfeedback_components = 0;
bool separate_attribs_mode =
   prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS;
 
@@ -1962,25 +1990,9 @@ store_tfeedback_info(struct gl_context *ctx, struct 
gl_shader_program *prog,
 
for (unsigned i = 0; i < num_tfeedback_decls; ++i) {
   unsigned buffer = separate_attribs_mode ? i : 0;
-  if (!tfeedback_decls[i].store(prog, &prog->LinkedTransformFeedback,
+  if (!tfeedback_decls[i].store(ctx, prog, &prog->LinkedTransformFeedback,
 buffer, i))
  return false;
-  total_tfeedback_components += tfeedback_decls[i].num_components();
-   

Mesa (master): mesa: Fix transform feedback of unsubscripted gl_ClipDistance array.

2012-01-11 Thread Paul Berry
Module: Mesa
Branch: master
Commit: 642e5b413e0890b2070ba78fde42db381eaf02e5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=642e5b413e0890b2070ba78fde42db381eaf02e5

Author: Paul Berry 
Date:   Wed Jan  4 13:57:52 2012 -0800

mesa: Fix transform feedback of unsubscripted gl_ClipDistance array.

On drivers that set gl_shader_compiler_options::LowerClipDistance (for
example i965), we need to handle transform feedback of gl_ClipDistance
specially, to account for the fact that the hardware represents it as
an array of vec4's rather than an array of floats.

The previous way this was accounted for (translating the request for
gl_ClipDistance[n] to a request for a component of
gl_ClipDistanceMESA[n/4]) doesn't work when performing transform
feedback on the whole unsubscripted array, because we need to keep
track of the size of the gl_ClipDistance array prior to the lowering
pass.  So I replaced it with a boolean is_clip_distance_mesa, which
switches on the special logic that is needed to handle the lowered
version of gl_ClipDistance.

Fixes Piglit tests "EXT_transform_feedback/builtin-varyings
gl_ClipDistance[{1,2,3,5,6,7}]-no-subscript".

Reviewed-by: Eric Anholt 

---

 src/glsl/linker.cpp|   89 ++--
 src/mesa/main/mtypes.h |2 +
 2 files changed, 58 insertions(+), 33 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index f32c217..39a9c46 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -246,7 +246,8 @@ count_attribute_slots(const glsl_type *t)
 /**
  * Verify that a vertex shader executable meets all semantic requirements.
  *
- * Also sets prog->Vert.UsesClipDistance as a side effect.
+ * Also sets prog->Vert.UsesClipDistance and prog->Vert.ClipDistanceArraySize
+ * as a side effect.
  *
  * \param shader  Vertex shader executable to be verified
  */
@@ -264,6 +265,8 @@ validate_vertex_shader_executable(struct gl_shader_program 
*prog,
   return false;
}
 
+   prog->Vert.ClipDistanceArraySize = 0;
+
if (prog->Version >= 130) {
   /* From section 7.1 (Vertex Shader Special Variables) of the
* GLSL 1.30 spec:
@@ -282,6 +285,10 @@ validate_vertex_shader_executable(struct gl_shader_program 
*prog,
  return false;
   }
   prog->Vert.UsesClipDistance = clip_distance.variable_found();
+  ir_variable *clip_distance_var =
+ shader->symbols->get_variable("gl_ClipDistance");
+  if (clip_distance_var)
+ prog->Vert.ClipDistanceArraySize = clip_distance_var->type->length;
}
 
return true;
@@ -1399,7 +1406,10 @@ public:
 */
bool matches_var(ir_variable *var) const
{
-  return strcmp(var->name, this->var_name) == 0;
+  if (this->is_clip_distance_mesa)
+ return strcmp(var->name, "gl_ClipDistanceMESA") == 0;
+  else
+ return strcmp(var->name, this->var_name) == 0;
}
 
/**
@@ -1408,10 +1418,10 @@ public:
 */
unsigned num_components() const
{
-  if (this->single_component == -1)
- return this->vector_elements * this->matrix_columns * this->size;
+  if (this->is_clip_distance_mesa)
+ return this->size;
   else
- return 1;
+ return this->vector_elements * this->matrix_columns * this->size;
}
 
 private:
@@ -1437,11 +1447,10 @@ private:
unsigned array_subscript;
 
/**
-* Which component to extract from the vertex shader output location that
-* the linker assigned to this variable.  -1 if all components should be
-* extracted.
+* True if the variable is gl_ClipDistance and the driver lowers
+* gl_ClipDistance to gl_ClipDistanceMESA.
 */
-   int single_component;
+   bool is_clip_distance_mesa;
 
/**
 * The vertex shader output location that the linker assigned for this
@@ -1487,7 +1496,7 @@ tfeedback_decl::init(struct gl_context *ctx, struct 
gl_shader_program *prog,
 
this->location = -1;
this->orig_name = input;
-   this->single_component = -1;
+   this->is_clip_distance_mesa = false;
 
const char *bracket = strrchr(input, '[');
 
@@ -1503,17 +1512,13 @@ tfeedback_decl::init(struct gl_context *ctx, struct 
gl_shader_program *prog,
   this->is_subscripted = false;
}
 
-   /* For drivers that lower gl_ClipDistance to gl_ClipDistanceMESA, we need
-* to convert a request for gl_ClipDistance[n] into a request for a
-* component of gl_ClipDistanceMESA[n/4].
+   /* For drivers that lower gl_ClipDistance to gl_ClipDistanceMESA, this
+* class must behave specially to account for the fact that gl_ClipDistance
+* is converted from a float[8] to a vec4[2].
 */
if (ctx->ShaderCompilerOptions[MESA_SHADER_VERTEX].LowerClipDistance &&
strcmp(this->var_name, "gl_ClipDistance") == 0) {
-  this->var_name = "gl_ClipDistanceMESA";
-  if (this->is_subscripted) {
- this->single_component = this->array_subscript % 4;
- this->array_subscript /= 4;
-  }
+  this->i

Mesa (master): mesa: Fix computation of transform feedback num_components.

2012-01-11 Thread Paul Berry
Module: Mesa
Branch: master
Commit: be4e9f7a0ccb7aa0edef5e5b589bdbbfd4eab3cb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=be4e9f7a0ccb7aa0edef5e5b589bdbbfd4eab3cb

Author: Paul Berry 
Date:   Wed Jan  4 12:21:55 2012 -0800

mesa: Fix computation of transform feedback num_components.

The function tfeedback_decl::num_components() was not correctly
accounting for transform feedback of whole arrays and gl_ClipDistance.
The bug was hard to notice in tests, because it only affected the
checks for MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS and
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS.

This patch fixes the computation, and adds an assertion to verify
num_components() even when MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
and MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS are not exceeded.

The assertion requires keeping track of components_so_far in
tfeedback_decl::store(); this will be useful in a future patch to fix
non-multiple-of-4-sized gl_ClipDistance.

Reviewed-by: Eric Anholt 

---

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

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index e8472d4..f32c217 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -1408,7 +1408,10 @@ public:
 */
unsigned num_components() const
{
-  return this->vector_elements * this->matrix_columns;
+  if (this->single_component == -1)
+ return this->vector_elements * this->matrix_columns * this->size;
+  else
+ return 1;
}
 
 private:
@@ -1631,6 +1634,7 @@ tfeedback_decl::store(struct gl_shader_program *prog,
this->orig_name);
   return false;
}
+   unsigned components_so_far = 0;
for (unsigned index = 0; index < this->size; ++index) {
   for (unsigned v = 0; v < this->matrix_columns; ++v) {
  unsigned num_components =
@@ -1644,8 +1648,10 @@ tfeedback_decl::store(struct gl_shader_program *prog,
 this->single_component >= 0 ? this->single_component : 0;
  ++info->NumOutputs;
  info->BufferStride[buffer] += num_components;
+ components_so_far += num_components;
   }
}
+   assert(components_so_far == this->num_components());
 
info->Varyings[varying].Name = ralloc_strdup(prog, this->orig_name);
info->Varyings[varying].Type = this->type;

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


Mesa (master): st_extensions: fixup GLSL 1.30 related enables (v3)

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: c62e02000d11e29e70a1000d32cb08d9a450485f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c62e02000d11e29e70a1000d32cb08d9a450485f

Author: Dave Airlie 
Date:   Thu Jan  5 14:35:54 2012 +

st_extensions: fixup GLSL 1.30 related enables (v3)

This just fixes up the enables for native integers and EXT_texture_integer
support in st/mesa.

It also set the MaxClipPlanes to 8.

We should consider exposing caps for MCP vs MCD, but since core
mesa doesn't care yet maybe we can wait for now.

v2: use 32-bit formats as per Marek's mail.

v3: add calim's fix for INT_DIV_TO_MUL_RCP disabling.

Signed-off-by: Dave Airlie 

---

 src/mesa/state_tracker/st_extensions.c |   31 ++-
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |   11 +++--
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/src/mesa/state_tracker/st_extensions.c 
b/src/mesa/state_tracker/st_extensions.c
index a9d4054..49c8747 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -263,12 +263,6 @@ void st_init_extensions(struct st_context *st)
ctx->Const.GLSLVersion = 120;
_mesa_override_glsl_version(st->ctx);
 
-   /* Extensions that only depend on the GLSL version:
-*/
-   if (ctx->Const.GLSLVersion >= 130) {
-  ctx->Extensions.ARB_conservative_depth = GL_TRUE;
-   }
-
/*
 * Extensions that are supported by all Gallium drivers:
 */
@@ -587,6 +581,23 @@ void st_init_extensions(struct st_context *st)
 #endif
}
 
+   if (screen->get_shader_param(screen, PIPE_SHADER_VERTEX,
+PIPE_SHADER_CAP_INTEGERS) &&
+   screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT,
+PIPE_SHADER_CAP_INTEGERS)) {
+  ctx->Const.NativeIntegers = GL_TRUE;
+   }
+
+   if (ctx->Const.NativeIntegers)
+  ctx->Const.GLSLVersion = 130;
+
+   /* Extensions that only depend on the GLSL version:
+*/
+   if (ctx->Const.GLSLVersion >= 130) {
+  ctx->Extensions.ARB_conservative_depth = GL_TRUE;
+  ctx->Const.MaxClipPlanes = 8;
+   }
+
ctx->Extensions.NV_primitive_restart = GL_TRUE;
if (!screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART)) {
   st->sw_primitive_restart = GL_TRUE;
@@ -703,4 +714,12 @@ void st_init_extensions(struct st_context *st)
  ctx->Extensions.ARB_transform_feedback2 = GL_TRUE;
   }
}
+
+   if (ctx->Const.NativeIntegers &&
+   screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_UINT, 
PIPE_TEXTURE_2D, 0,
+   PIPE_BIND_SAMPLER_VIEW | 
PIPE_BIND_RENDER_TARGET) &&
+   screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_SINT, 
PIPE_TEXTURE_2D, 0,
+   PIPE_BIND_SAMPLER_VIEW | 
PIPE_BIND_RENDER_TARGET))
+  ctx->Extensions.EXT_texture_integer = GL_TRUE;
+
 }
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index e450d13..cb44e2b 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -5010,13 +5010,18 @@ st_link_shader(struct gl_context *ctx, struct 
gl_shader_program *prog)
   num_clip_distances[i] = get_clip_distance_size(ir);
 
   do {
+ unsigned what_to_lower = MOD_TO_FRACT | DIV_TO_MUL_RCP |
+EXP_TO_EXP2 | LOG_TO_LOG2;
+ if (options->EmitNoPow)
+what_to_lower |= POW_TO_EXP2;
+ if (!ctx->Const.NativeIntegers)
+what_to_lower |= INT_DIV_TO_MUL_RCP;
+
  progress = false;
 
  /* Lowering */
  do_mat_op_to_vec(ir);
- lower_instructions(ir, (MOD_TO_FRACT | DIV_TO_MUL_RCP | EXP_TO_EXP2
-| LOG_TO_LOG2 | INT_DIV_TO_MUL_RCP
-| ((options->EmitNoPow) ? POW_TO_EXP2 : 0)));
+ lower_instructions(ir, what_to_lower);
 
  progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, 
options->EmitNoCont, options->EmitNoLoops) || progress;
 

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


Mesa (master): st_glsl_to_tgsi: use ISSG and fixup IABS

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: cc94f0541c7729bca95f21b879c2071722ca3017
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cc94f0541c7729bca95f21b879c2071722ca3017

Author: Dave Airlie 
Date:   Mon Jan  9 11:50:14 2012 +

st_glsl_to_tgsi: use ISSG and fixup IABS

It doesn't look like the GLSL compiler will produce sign op
for an unsigned anyways (seems insane anyways).

Signed-off-by: Dave Airlie 

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |8 
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 3b8e2fe..e450d13 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -664,6 +664,9 @@ glsl_to_tgsi_visitor::get_opcode(ir_instruction *ir, 
unsigned op,
   case3(SLT, ISLT, USLT);
   
   case2iu(ISHR, USHR);
+
+  case2fi(SSG, ISSG);
+  case3(ABS, IABS, IABS);
   
   default: break;
}
@@ -1410,10 +1413,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
   }
   break;
case ir_unop_abs:
-  if (result_dst.type == GLSL_TYPE_INT || result_dst.type == 
GLSL_TYPE_UINT)
- emit(ir, TGSI_OPCODE_IABS, result_dst, op[0]);
-  else
- emit(ir, TGSI_OPCODE_ABS, result_dst, op[0]);
+  emit(ir, TGSI_OPCODE_ABS, result_dst, op[0]);
   break;
case ir_unop_sign:
   emit(ir, TGSI_OPCODE_SSG, result_dst, op[0]);

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


Mesa (master): tgsi: add ISSG support

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: b6cbc28533a3fd68dbfe694c0774735233df8758
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b6cbc28533a3fd68dbfe694c0774735233df8758

Author: Dave Airlie 
Date:   Mon Jan  9 11:49:34 2012 +

tgsi: add ISSG support

This adds integer version of SSG that GLSL 1.30 can produce.

Signed-off-by: Dave Airlie 
Reviewed-by: Brian Paul 

---

 src/gallium/auxiliary/tgsi/tgsi_exec.c |   14 ++
 src/gallium/auxiliary/tgsi/tgsi_info.c |1 +
 src/gallium/include/pipe/p_shader_tokens.h |3 ++-
 3 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c 
b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index 3046656..72b1dca 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -375,6 +375,16 @@ micro_sgn(union tgsi_exec_channel *dst,
 }
 
 static void
+micro_isgn(union tgsi_exec_channel *dst,
+  const union tgsi_exec_channel *src)
+{
+   dst->i[0] = src->i[0] < 0 ? -1 : src->i[0] > 0 ? 1 : 0;
+   dst->i[1] = src->i[1] < 0 ? -1 : src->i[1] > 0 ? 1 : 0;
+   dst->i[2] = src->i[2] < 0 ? -1 : src->i[2] > 0 ? 1 : 0;
+   dst->i[3] = src->i[3] < 0 ? -1 : src->i[3] > 0 ? 1 : 0;
+}
+
+static void
 micro_sgt(union tgsi_exec_channel *dst,
   const union tgsi_exec_channel *src0,
   const union tgsi_exec_channel *src1)
@@ -4207,6 +4217,10 @@ exec_instruction(
   exec_vector_unary(mach, inst, micro_iabs, TGSI_EXEC_DATA_INT, 
TGSI_EXEC_DATA_INT);
   break;
 
+   case TGSI_OPCODE_ISSG:
+  exec_vector_unary(mach, inst, micro_isgn, TGSI_EXEC_DATA_INT, 
TGSI_EXEC_DATA_INT);
+  break;
+
default:
   assert( 0 );
}
diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c 
b/src/gallium/auxiliary/tgsi/tgsi_info.c
index c9acdb9..5b26d8f 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_info.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_info.c
@@ -193,6 +193,7 @@ static const struct tgsi_opcode_info 
opcode_info[TGSI_OPCODE_LAST] =
{ 1, 1, 0, 0, 0, 0, "UARL", TGSI_OPCODE_UARL },
{ 1, 3, 0, 0, 0, 0, "UCMP", TGSI_OPCODE_UCMP },
{ 1, 1, 0, 0, 0, 0, "IABS", TGSI_OPCODE_IABS },
+   { 1, 1, 0, 0, 0, 0, "ISSG", TGSI_OPCODE_ISSG },
 };
 
 const struct tgsi_opcode_info *
diff --git a/src/gallium/include/pipe/p_shader_tokens.h 
b/src/gallium/include/pipe/p_shader_tokens.h
index cb1e698..a131630 100644
--- a/src/gallium/include/pipe/p_shader_tokens.h
+++ b/src/gallium/include/pipe/p_shader_tokens.h
@@ -379,8 +379,9 @@ struct tgsi_property_data {
 #define TGSI_OPCODE_UARL157
 #define TGSI_OPCODE_UCMP158
 #define TGSI_OPCODE_IABS159
+#define TGSI_OPCODE_ISSG160
 
-#define TGSI_OPCODE_LAST160
+#define TGSI_OPCODE_LAST161
 
 #define TGSI_SAT_NONE0  /* do not saturate */
 #define TGSI_SAT_ZERO_ONE1  /* clamp to [0,1] */

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


Mesa (master): softpipe: enable clamping control

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 0fe2b397bbee346f72f48f364a78459e5a54c534
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0fe2b397bbee346f72f48f364a78459e5a54c534

Author: Dave Airlie 
Date:   Thu Jan  5 15:36:43 2012 +

softpipe: enable clamping control

This enables fragment clamping in softpipe, it passes more
tests than it did previously with no regressions, There are still
a couple of failures in the SNORM types to investigate.

Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/softpipe/sp_quad_blend.c |9 ++---
 src/gallium/drivers/softpipe/sp_screen.c |2 ++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_quad_blend.c 
b/src/gallium/drivers/softpipe/sp_quad_blend.c
index 7180fa1..d546b14 100644
--- a/src/gallium/drivers/softpipe/sp_quad_blend.c
+++ b/src/gallium/drivers/softpipe/sp_quad_blend.c
@@ -894,7 +894,7 @@ blend_fallback(struct quad_stage *qs,
  /* If fixed-point dest color buffer, need to clamp the incoming
   * fragment colors now.
   */
- if (clamp) {
+ if (clamp || softpipe->rasterizer->clamp_fragment_color) {
 clamp_colors(quadColor);
  }
 
@@ -982,7 +982,7 @@ blend_single_add_src_alpha_inv_src_alpha(struct quad_stage 
*qs,
   /* If fixed-point dest color buffer, need to clamp the incoming
* fragment colors now.
*/
-  if (bqs->clamp[0]) {
+  if (bqs->clamp[0] || qs->softpipe->rasterizer->clamp_fragment_color) {
  clamp_colors(quadColor);
   }
 
@@ -1055,7 +1055,7 @@ blend_single_add_one_one(struct quad_stage *qs,
   /* If fixed-point dest color buffer, need to clamp the incoming
* fragment colors now.
*/
-  if (bqs->clamp[0]) {
+  if (bqs->clamp[0] || qs->softpipe->rasterizer->clamp_fragment_color) {
  clamp_colors(quadColor);
   }
 
@@ -,6 +,9 @@ single_output_color(struct quad_stage *qs,
   const int itx = (quad->input.x0 & (TILE_SIZE-1));
   const int ity = (quad->input.y0 & (TILE_SIZE-1));
 
+  if (qs->softpipe->rasterizer->clamp_fragment_color)
+ clamp_colors(quadColor);
+
   rebase_colors(bqs->base_format[0], quadColor);
 
   for (j = 0; j < QUAD_SIZE; j++) {
diff --git a/src/gallium/drivers/softpipe/sp_screen.c 
b/src/gallium/drivers/softpipe/sp_screen.c
index a9d70f9..37aa585 100644
--- a/src/gallium/drivers/softpipe/sp_screen.c
+++ b/src/gallium/drivers/softpipe/sp_screen.c
@@ -128,6 +128,8 @@ softpipe_get_param(struct pipe_screen *screen, enum 
pipe_cap param)
   return 7;
case PIPE_CAP_CONDITIONAL_RENDER:
   return 1;
+   case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
+  return 1;
default:
   return 0;
}

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


Mesa (master): softpipe: fix texel fetch swizzles

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: e809b7a6787e40f974883104606550fb3d53ba47
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e809b7a6787e40f974883104606550fb3d53ba47

Author: Dave Airlie 
Date:   Fri Jan  6 16:28:32 2012 +

softpipe: fix texel fetch swizzles

This fixes a number of texelFetch swizzle tests, and consoldiates
the swizzle handling in a new function.

Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/softpipe/sp_tex_sample.c |   69 --
 1 files changed, 43 insertions(+), 26 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c 
b/src/gallium/drivers/softpipe/sp_tex_sample.c
index 8123d7b..f552b5e 100644
--- a/src/gallium/drivers/softpipe/sp_tex_sample.c
+++ b/src/gallium/drivers/softpipe/sp_tex_sample.c
@@ -2286,87 +2286,94 @@ sample_cube(struct tgsi_sampler *tgsi_sampler,
samp->compare(tgsi_sampler, , , NULL, c0, control, rgba);
 }
 
-
-static void
-sample_swizzle(struct tgsi_sampler *tgsi_sampler,
-   const float s[QUAD_SIZE],
-   const float t[QUAD_SIZE],
-   const float p[QUAD_SIZE],
-   const float c0[QUAD_SIZE],
-   enum tgsi_sampler_control control,
-   float rgba[NUM_CHANNELS][QUAD_SIZE])
+static void do_swizzling(const struct sp_sampler_variant *samp,
+ float in[NUM_CHANNELS][QUAD_SIZE],
+ float out[NUM_CHANNELS][QUAD_SIZE])
 {
-   struct sp_sampler_variant *samp = sp_sampler_variant(tgsi_sampler);
-   float rgba_temp[NUM_CHANNELS][QUAD_SIZE];
+   int j;
const unsigned swizzle_r = samp->key.bits.swizzle_r;
const unsigned swizzle_g = samp->key.bits.swizzle_g;
const unsigned swizzle_b = samp->key.bits.swizzle_b;
const unsigned swizzle_a = samp->key.bits.swizzle_a;
-   unsigned j;
-
-   samp->sample_target(tgsi_sampler, s, t, p, c0, control, rgba_temp);
 
switch (swizzle_r) {
case PIPE_SWIZZLE_ZERO:
   for (j = 0; j < 4; j++)
- rgba[0][j] = 0.0f;
+ out[0][j] = 0.0f;
   break;
case PIPE_SWIZZLE_ONE:
   for (j = 0; j < 4; j++)
- rgba[0][j] = 1.0f;
+ out[0][j] = 1.0f;
   break;
default:
   assert(swizzle_r < 4);
   for (j = 0; j < 4; j++)
- rgba[0][j] = rgba_temp[swizzle_r][j];
+ out[0][j] = in[swizzle_r][j];
}
 
switch (swizzle_g) {
case PIPE_SWIZZLE_ZERO:
   for (j = 0; j < 4; j++)
- rgba[1][j] = 0.0f;
+ out[1][j] = 0.0f;
   break;
case PIPE_SWIZZLE_ONE:
   for (j = 0; j < 4; j++)
- rgba[1][j] = 1.0f;
+ out[1][j] = 1.0f;
   break;
default:
   assert(swizzle_g < 4);
   for (j = 0; j < 4; j++)
- rgba[1][j] = rgba_temp[swizzle_g][j];
+ out[1][j] = in[swizzle_g][j];
}
 
switch (swizzle_b) {
case PIPE_SWIZZLE_ZERO:
   for (j = 0; j < 4; j++)
- rgba[2][j] = 0.0f;
+ out[2][j] = 0.0f;
   break;
case PIPE_SWIZZLE_ONE:
   for (j = 0; j < 4; j++)
- rgba[2][j] = 1.0f;
+ out[2][j] = 1.0f;
   break;
default:
   assert(swizzle_b < 4);
   for (j = 0; j < 4; j++)
- rgba[2][j] = rgba_temp[swizzle_b][j];
+ out[2][j] = in[swizzle_b][j];
}
 
switch (swizzle_a) {
case PIPE_SWIZZLE_ZERO:
   for (j = 0; j < 4; j++)
- rgba[3][j] = 0.0f;
+ out[3][j] = 0.0f;
   break;
case PIPE_SWIZZLE_ONE:
   for (j = 0; j < 4; j++)
- rgba[3][j] = 1.0f;
+ out[3][j] = 1.0f;
   break;
default:
   assert(swizzle_a < 4);
   for (j = 0; j < 4; j++)
- rgba[3][j] = rgba_temp[swizzle_a][j];
+ out[3][j] = in[swizzle_a][j];
}
 }
 
+static void
+sample_swizzle(struct tgsi_sampler *tgsi_sampler,
+   const float s[QUAD_SIZE],
+   const float t[QUAD_SIZE],
+   const float p[QUAD_SIZE],
+   const float c0[QUAD_SIZE],
+   enum tgsi_sampler_control control,
+   float rgba[NUM_CHANNELS][QUAD_SIZE])
+{
+   struct sp_sampler_variant *samp = sp_sampler_variant(tgsi_sampler);
+   float rgba_temp[NUM_CHANNELS][QUAD_SIZE];
+
+   samp->sample_target(tgsi_sampler, s, t, p, c0, control, rgba_temp);
+
+   do_swizzling(samp, rgba_temp, rgba);
+}
+
 
 static wrap_nearest_func
 get_nearest_unorm_wrap(unsigned mode)
@@ -2638,6 +2645,10 @@ sample_get_texels(struct tgsi_sampler *tgsi_sampler,
const struct pipe_resource *texture = samp->view->texture;
int j, c;
const float *tx;
+   bool need_swizzle = (samp->key.bits.swizzle_r != PIPE_SWIZZLE_RED ||
+samp->key.bits.swizzle_g != PIPE_SWIZZLE_GREEN ||
+samp->key.bits.swizzle_b != PIPE_SWIZZLE_BLUE ||
+samp->key.bits.swizzle_a != PIPE_SWIZZLE_ALPHA);
 
addr.value = 0;
/* TODO write a better test for LOD */
@@ -2696,6 +2707,12 @@ sample_get_texels(struct tgsi_sampler *tgsi_sampler,
   asse

Mesa (master): i915g: Fix bugs in the shader optimizer.

2012-01-11 Thread Stephane Marchesin
Module: Mesa
Branch: master
Commit: 3235435e801122fb6d28c0bcc232ddaeb6b9c568
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3235435e801122fb6d28c0bcc232ddaeb6b9c568

Author: Stéphane Marchesin 
Date:   Wed Jan 11 02:24:34 2012 -0800

i915g: Fix bugs in the shader optimizer.

---

 src/gallium/drivers/i915/i915_fpc_optimize.c |  126 --
 1 files changed, 80 insertions(+), 46 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_fpc_optimize.c 
b/src/gallium/drivers/i915/i915_fpc_optimize.c
index d9b4c46..b09f18b 100644
--- a/src/gallium/drivers/i915/i915_fpc_optimize.c
+++ b/src/gallium/drivers/i915/i915_fpc_optimize.c
@@ -66,6 +66,8 @@ static boolean has_destination(unsigned opcode)
 {
return (opcode != TGSI_OPCODE_NOP &&
opcode != TGSI_OPCODE_KIL &&
+   opcode != TGSI_OPCODE_KILP &&
+   opcode != TGSI_OPCODE_END &&
opcode != TGSI_OPCODE_RET);
 }
 
@@ -130,6 +132,50 @@ static void set_neutral_element_swizzle(struct 
i915_full_src_register* r,
   r->Register.SwizzleW = TGSI_SWIZZLE_W;
 }
 
+static void copy_src_reg(struct i915_src_register* o, const struct 
tgsi_src_register* i)
+{
+   o->File  = i->File;
+   o->Indirect  = i->Indirect;
+   o->Dimension = i->Dimension;
+   o->Index = i->Index;
+   o->SwizzleX  = i->SwizzleX;
+   o->SwizzleY  = i->SwizzleY;
+   o->SwizzleZ  = i->SwizzleZ;
+   o->SwizzleW  = i->SwizzleW;
+   o->Absolute  = i->Absolute;
+   o->Negate= i->Negate;
+}
+
+static void copy_dst_reg(struct i915_dst_register* o, const struct 
tgsi_dst_register* i)
+{
+   o->File  = i->File;
+   o->WriteMask = i->WriteMask;
+   o->Indirect  = i->Indirect;
+   o->Dimension = i->Dimension;
+   o->Index = i->Index;
+}
+
+static void copy_instruction(struct i915_full_instruction* o, const struct 
tgsi_full_instruction* i)
+{
+   memcpy(&o->Instruction, &i->Instruction, sizeof(o->Instruction));
+   memcpy(&o->Texture, &i->Texture, sizeof(o->Texture));
+
+   copy_dst_reg(&o->Dst[0].Register, &i->Dst[0].Register);
+
+   copy_src_reg(&o->Src[0].Register, &i->Src[0].Register);
+   copy_src_reg(&o->Src[1].Register, &i->Src[1].Register);
+   copy_src_reg(&o->Src[2].Register, &i->Src[2].Register);
+}
+
+static void copy_token(union i915_full_token* o, union tgsi_full_token* i)
+{
+   if (i->Token.Type != TGSI_TOKEN_TYPE_INSTRUCTION)
+  memcpy(o, i, sizeof(*o));
+   else
+  copy_instruction(&o->FullInstruction, &i->FullInstruction);
+
+}
+
 /*
  * Optimize away things like:
  *MUL OUT[0].xyz, TEMP[1], TEMP[2]
@@ -147,6 +193,7 @@ static void i915_fpc_optimize_mov_after_alu(union 
i915_full_token* current, unio
 next->FullInstruction.Instruction.Opcode == TGSI_OPCODE_MOV &&
 same_dst_reg(&next->FullInstruction.Dst[0], 
¤t->FullInstruction.Dst[0]) &&
 same_src_reg(&next->FullInstruction.Src[0], 
¤t->FullInstruction.Src[1]) &&
+!same_src_dst_reg(&next->FullInstruction.Src[0], 
¤t->FullInstruction.Dst[0]) &&
 is_unswizzled(¤t->FullInstruction.Src[0], 
current->FullInstruction.Dst[0].Register.WriteMask) &&
 is_unswizzled(¤t->FullInstruction.Src[1], 
current->FullInstruction.Dst[0].Register.WriteMask) &&
 is_unswizzled(&next->FullInstruction.Src[0], 
next->FullInstruction.Dst[0].Register.WriteMask) )
@@ -170,6 +217,7 @@ static void i915_fpc_optimize_mov_after_alu(union 
i915_full_token* current, unio
 next->FullInstruction.Instruction.Opcode == TGSI_OPCODE_MOV &&
 same_dst_reg(&next->FullInstruction.Dst[0], 
¤t->FullInstruction.Dst[0]) &&
 same_src_reg(&next->FullInstruction.Src[0], 
¤t->FullInstruction.Src[0]) &&
+!same_src_dst_reg(&next->FullInstruction.Src[0], 
¤t->FullInstruction.Dst[0]) &&
 is_unswizzled(¤t->FullInstruction.Src[0], 
current->FullInstruction.Dst[0].Register.WriteMask) &&
 is_unswizzled(¤t->FullInstruction.Src[1], 
current->FullInstruction.Dst[0].Register.WriteMask) &&
 is_unswizzled(&next->FullInstruction.Src[0], 
next->FullInstruction.Dst[0].Register.WriteMask) )
@@ -189,12 +237,36 @@ static void i915_fpc_optimize_mov_after_alu(union 
i915_full_token* current, unio
 
 /*
  * Optimize away things like:
+ *MOV TEMP[0].xyz TEMP[0].xyzx
+ * into:
+ *NOP
+ */
+static boolean i915_fpc_useless_mov(union tgsi_full_token* tgsi_current)
+{
+   union i915_full_token current;
+   copy_token(¤t , tgsi_current);
+   if ( current.Token.Type == TGSI_TOKEN_TYPE_INSTRUCTION  &&
+current.FullInstruction.Instruction.Opcode == TGSI_OPCODE_MOV &&
+has_destination(current.FullInstruction.Instruction.Opcode) &&
+current.FullInstruction.Instruction.Saturate == TGSI_SAT_NONE &&
+current.FullInstruction.Src[0].Register.Absolute == 0 &&
+current.FullInstruction.Src[0].Register.Negate == 0 &&
+is_unswizzled(¤t.FullInstruction.Src[0], 
current.FullInstruction.Dst[0].Register.WriteMask) &&
+same_src_dst_reg(¤t.FullInstruction.Src[0], 
¤t.FullI

Mesa (master): softpipe: fix llvm build

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 5840ec2d41d09895bec7074a90521978fb933695
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5840ec2d41d09895bec7074a90521978fb933695

Author: Dave Airlie 
Date:   Wed Jan 11 10:16:56 2012 +

softpipe: fix llvm build

Thanks to Wubbbi on #dri-devel for pointing it out.

Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/softpipe/sp_context.c |2 +-
 src/gallium/drivers/softpipe/sp_screen.c  |2 +-
 src/gallium/drivers/softpipe/sp_screen.h  |2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_context.c 
b/src/gallium/drivers/softpipe/sp_context.c
index abe0507..1fb0a79 100644
--- a/src/gallium/drivers/softpipe/sp_context.c
+++ b/src/gallium/drivers/softpipe/sp_context.c
@@ -305,7 +305,7 @@ softpipe_create_context( struct pipe_screen *screen,
/*
 * Create drawing context and plug our rendering stage into it.
 */
-   if (sp_screen->using_llvm)
+   if (sp_screen->use_llvm)
   softpipe->draw = draw_create(&softpipe->pipe);
else
   softpipe->draw = draw_create_no_llvm(&softpipe->pipe);
diff --git a/src/gallium/drivers/softpipe/sp_screen.c 
b/src/gallium/drivers/softpipe/sp_screen.c
index 35521b6..a9d70f9 100644
--- a/src/gallium/drivers/softpipe/sp_screen.c
+++ b/src/gallium/drivers/softpipe/sp_screen.c
@@ -334,7 +334,7 @@ softpipe_create_screen(struct sw_winsys *winsys)
screen->base.context_create = softpipe_create_context;
screen->base.flush_frontbuffer = softpipe_flush_frontbuffer;
 
-   screen->using_llvm = debug_get_option_use_llvm();
+   screen->use_llvm = debug_get_option_use_llvm();
 
util_format_s3tc_init();
 
diff --git a/src/gallium/drivers/softpipe/sp_screen.h 
b/src/gallium/drivers/softpipe/sp_screen.h
index 2cac816..007feec 100644
--- a/src/gallium/drivers/softpipe/sp_screen.h
+++ b/src/gallium/drivers/softpipe/sp_screen.h
@@ -46,7 +46,7 @@ struct softpipe_screen {
 * this.
 */
unsigned timestamp;
-   boolean using_llvm;
+   boolean use_llvm;
 };
 
 static INLINE struct softpipe_screen *

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


Mesa (master): draw: clipdistance support (v2)

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 1865f341d8f45b389061fc08d2da90b7aa8a6099
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1865f341d8f45b389061fc08d2da90b7aa8a6099

Author: Dave Airlie 
Date:   Fri Jan  6 12:23:00 2012 +

draw: clipdistance support (v2)

Add support for using the clipdistance instead of clip plane.

Passes all piglit clipdistance tests.

v2: fixup some comments from Brian in review.

Signed-off-by: Dave Airlie 

---

 src/gallium/auxiliary/draw/draw_cliptest_tmp.h |   30 +++--
 src/gallium/auxiliary/draw/draw_context.c  |6 +++
 src/gallium/auxiliary/draw/draw_pipe_clip.c|   42 ++-
 src/gallium/auxiliary/draw/draw_private.h  |5 ++-
 src/gallium/auxiliary/draw/draw_pt_post_vs.c   |4 +-
 src/gallium/auxiliary/draw/draw_vs.c   |7 
 src/gallium/auxiliary/draw/draw_vs.h   |2 +-
 7 files changed, 79 insertions(+), 17 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_cliptest_tmp.h 
b/src/gallium/auxiliary/draw/draw_cliptest_tmp.h
index 7dba49b..bff266b 100644
--- a/src/gallium/auxiliary/draw/draw_cliptest_tmp.h
+++ b/src/gallium/auxiliary/draw/draw_cliptest_tmp.h
@@ -36,12 +36,19 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs,
/* const */ float (*plane)[4] = pvs->draw->plane;
const unsigned pos = draw_current_shader_position_output(pvs->draw);
const unsigned cv = draw_current_shader_clipvertex_output(pvs->draw);
+   unsigned cd[2];
const unsigned ef = pvs->draw->vs.edgeflag_output;
const unsigned ucp_enable = pvs->draw->rasterizer->clip_plane_enable;
const unsigned flags = (FLAGS);
unsigned need_pipeline = 0;
unsigned j;
unsigned i;
+   bool have_cd = false;
+   cd[0] = draw_current_shader_clipdistance_output(pvs->draw, 0);
+   cd[1] = draw_current_shader_clipdistance_output(pvs->draw, 1);
+  
+   if (cd[0] != pos || cd[1] != pos)
+ have_cd = true;
 
for (j = 0; j < info->count; j++) {
   float *position = out->data[pos];
@@ -89,14 +96,31 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs,
 
  if (flags & DO_CLIP_USER) {
 unsigned ucp_mask = ucp_enable;
-
+int num_written_clipdistance = 
pvs->draw->vs.vertex_shader->info.num_written_clipdistance;
 while (ucp_mask) {
unsigned plane_idx = ffs(ucp_mask)-1;
ucp_mask &= ~(1 << plane_idx);
plane_idx += 6;
 
-   if (dot4(clipvertex, plane[plane_idx]) < 0) {
-  mask |= 1 << plane_idx;
+   /*
+* for user clipping check if we have a clip distance output
+* and the shader has written to it, otherwise use clipvertex
+* to decide when the plane is clipping.
+*/
+   if (have_cd && num_written_clipdistance) {
+  float clipdist;
+  i = plane_idx - 6;
+  out->have_clipdist = 1;
+  /* first four clip distance in first vector etc. */
+  if (i < 4)
+ clipdist = out->data[cd[0]][i];
+  else
+ clipdist = out->data[cd[1]][i-4];
+  if (clipdist < 0)
+ mask |= 1 << plane_idx;
+   } else {
+  if (dot4(clipvertex, plane[plane_idx]) < 0)
+ mask |= 1 << plane_idx;
}
 }
  }
diff --git a/src/gallium/auxiliary/draw/draw_context.c 
b/src/gallium/auxiliary/draw/draw_context.c
index 6d7075e..7e554dc 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -701,6 +701,12 @@ draw_current_shader_clipvertex_output(const struct 
draw_context *draw)
return draw->vs.clipvertex_output;
 }
 
+uint
+draw_current_shader_clipdistance_output(const struct draw_context *draw, int 
index)
+{
+   return draw->vs.clipdistance_output[index];
+}
+
 /**
  * Return a pointer/handle for a driver/CSO rasterizer object which
  * disabled culling, stippling, unfilled tris, etc.
diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c 
b/src/gallium/auxiliary/draw/draw_pipe_clip.c
index fbc8f67..f701972 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_clip.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c
@@ -119,13 +119,17 @@ static void interp( const struct clip_stage *clip,
const unsigned nr_attrs = draw_current_shader_outputs(clip->stage.draw);
const unsigned pos_attr = 
draw_current_shader_position_output(clip->stage.draw);
const unsigned clip_attr = 
draw_current_shader_clipvertex_output(clip->stage.draw);
+   unsigned clip_dist[2];
unsigned j;
 
+   clip_dist[0] = draw_current_shader_clipdistance_output(clip->stage.draw, 0);
+   clip_dist[1] = draw_current_shader_clipdistance_output(clip->stage.draw, 1);
+
/* Vertex header.
 */
dst->clipmask = 0;
dst->edgeflag = 0;/* will get o

Mesa (master): tgsi_scan: add support to count number of output clip distances

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: f7e3e46f72fffe4b83cd3f922173ff28e9ab9c7c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f7e3e46f72fffe4b83cd3f922173ff28e9ab9c7c

Author: Dave Airlie 
Date:   Fri Jan  6 12:21:54 2012 +

tgsi_scan: add support to count number of output clip distances

Just add support to the scanner to count the number of clip distances.

Signed-off-by: Dave Airlie 

---

 src/gallium/auxiliary/tgsi/tgsi_scan.c |4 
 src/gallium/auxiliary/tgsi/tgsi_scan.h |1 +
 2 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c 
b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index 97d74e4..e4e9c03 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -191,6 +191,10 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
   info->output_semantic_index[reg] = 
(ubyte)fulldecl->Semantic.Index;
   info->num_outputs++;
 
+  if (procType == TGSI_PROCESSOR_VERTEX &&
+  fulldecl->Semantic.Name == TGSI_SEMANTIC_CLIPDIST) {
+ info->num_written_clipdistance += 
util_bitcount(fulldecl->Declaration.UsageMask);
+  }
   /* extra info for special outputs */
   if (procType == TGSI_PROCESSOR_FRAGMENT &&
   fulldecl->Semantic.Name == TGSI_SEMANTIC_POSITION)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h 
b/src/gallium/auxiliary/tgsi/tgsi_scan.h
index 482c106..235e6a3 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
@@ -75,6 +75,7 @@ struct tgsi_shader_info
boolean pixel_center_integer;
boolean color0_writes_all_cbufs;
 
+   unsigned num_written_clipdistance;
/**
 * Bitmask indicating which register files are accessed with
 * indirect addressing.  The bits are (1 << TGSI_FILE_x), etc.

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


Mesa (master): draw/softpipe: add clip vertex support. (v2)

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 40c5987ed84f9f0b8bb1f707bb13c1aafc39330a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=40c5987ed84f9f0b8bb1f707bb13c1aafc39330a

Author: Dave Airlie 
Date:   Wed Jan  4 11:52:30 2012 +

draw/softpipe: add clip vertex support. (v2)

softpipe always clipped using the position vector, however for unclipped
vertices it stored the position in window coordinates, however when position
and clipping are separated, we need to store the clip-space position and
the clip-space vertex clip, so we can interpolate both separately.

This means we have to take the clip space position and store it to use later.

This allows softpipe to pass all the clip-vertex piglit tests.

v2: fix llvm draw regression, the structure being passed into llvm needed
updating, remove some hardcoded ints that should have been enums while there.

Signed-off-by: Dave Airlie 

---

 src/gallium/auxiliary/draw/draw_cliptest_tmp.h |   17 -
 src/gallium/auxiliary/draw/draw_context.c  |   10 ++
 src/gallium/auxiliary/draw/draw_llvm.c |   12 
 src/gallium/auxiliary/draw/draw_llvm.h |   10 +++---
 src/gallium/auxiliary/draw/draw_pipe_clip.c|9 ++---
 src/gallium/auxiliary/draw/draw_private.h  |4 +++-
 src/gallium/auxiliary/draw/draw_pt_fetch.c |4 ++--
 src/gallium/auxiliary/draw/draw_vs.c   |9 +
 src/gallium/auxiliary/draw/draw_vs.h   |1 +
 9 files changed, 58 insertions(+), 18 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_cliptest_tmp.h 
b/src/gallium/auxiliary/draw/draw_cliptest_tmp.h
index 9e6827c..7dba49b 100644
--- a/src/gallium/auxiliary/draw/draw_cliptest_tmp.h
+++ b/src/gallium/auxiliary/draw/draw_cliptest_tmp.h
@@ -35,11 +35,13 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs,
const float *trans = pvs->draw->viewport.translate;
/* const */ float (*plane)[4] = pvs->draw->plane;
const unsigned pos = draw_current_shader_position_output(pvs->draw);
+   const unsigned cv = draw_current_shader_clipvertex_output(pvs->draw);
const unsigned ef = pvs->draw->vs.edgeflag_output;
const unsigned ucp_enable = pvs->draw->rasterizer->clip_plane_enable;
const unsigned flags = (FLAGS);
unsigned need_pipeline = 0;
unsigned j;
+   unsigned i;
 
for (j = 0; j < info->count; j++) {
   float *position = out->data[pos];
@@ -49,10 +51,15 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs,
 
   if (flags & (DO_CLIP_XY | DO_CLIP_XY_GUARD_BAND |
DO_CLIP_FULL_Z | DO_CLIP_HALF_Z | DO_CLIP_USER)) {
- out->clip[0] = position[0];
- out->clip[1] = position[1];
- out->clip[2] = position[2];
- out->clip[3] = position[3];
+ float *clipvertex = position;
+
+ if ((flags & DO_CLIP_USER) && cv != pos)
+clipvertex = out->data[cv];
+
+ for (i = 0; i < 4; i++) {
+out->clip[i] = clipvertex[i];
+out->pre_clip_pos[i] = position[i];
+ }
 
  /* Do the hardwired planes first:
   */
@@ -88,7 +95,7 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs,
ucp_mask &= ~(1 << plane_idx);
plane_idx += 6;
 
-   if (dot4(position, plane[plane_idx]) < 0) {
+   if (dot4(clipvertex, plane[plane_idx]) < 0) {
   mask |= 1 << plane_idx;
}
 }
diff --git a/src/gallium/auxiliary/draw/draw_context.c 
b/src/gallium/auxiliary/draw/draw_context.c
index 10a20f7..6d7075e 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -692,6 +692,16 @@ draw_current_shader_position_output(const struct 
draw_context *draw)
 
 
 /**
+ * Return the index of the shader output which will contain the
+ * vertex position.
+ */
+uint
+draw_current_shader_clipvertex_output(const struct draw_context *draw)
+{
+   return draw->vs.clipvertex_output;
+}
+
+/**
  * Return a pointer/handle for a driver/CSO rasterizer object which
  * disabled culling, stippling, unfilled tris, etc.
  * This is used by some pipeline stages (such as wide_point, aa_line
diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
b/src/gallium/auxiliary/draw/draw_llvm.c
index cf97e82..50c7e25 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -268,15 +268,16 @@ static LLVMTypeRef
 create_jit_vertex_header(struct gallivm_state *gallivm, int data_elems)
 {
LLVMTargetDataRef target = gallivm->target;
-   LLVMTypeRef elem_types[3];
+   LLVMTypeRef elem_types[4];
LLVMTypeRef vertex_header;
char struct_name[24];
 
util_snprintf(struct_name, 23, "vertex_header%d", data_elems);
 
-   elem_types[0]  = LLVMIntTypeInContext(gallivm->context, 32);
-   elem_types[1]  = LLVMArrayType(LLVMFloatTypeInContext(gallivm->context), 4);
-   elem_types[2]  = LLVMArrayType(elem_types[1], data_elems);
+  

Mesa (master): tgsi/softpipe: add VertexID support.

2012-01-11 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 34a78b7ef6b0edf217acf221eab4b63542be5552
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=34a78b7ef6b0edf217acf221eab4b63542be5552

Author: Dave Airlie 
Date:   Thu Jan  5 16:59:24 2012 +

tgsi/softpipe: add VertexID support.

This required changing the system value semantics, so we stored
a system value per vertex, instance id is the only other system
value we currently support, so I span it across the channels.

This passes the 3 vertexid-* piglit tests + lots of instanceid tests.

Signed-off-by: Dave Airlie 

---

 src/gallium/auxiliary/draw/draw_vs_exec.c |9 -
 src/gallium/auxiliary/tgsi/tgsi_exec.c|   14 ++
 src/gallium/auxiliary/tgsi/tgsi_exec.h|2 +-
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_vs_exec.c 
b/src/gallium/auxiliary/draw/draw_vs_exec.c
index 3f89881..bfe7aea 100644
--- a/src/gallium/auxiliary/draw/draw_vs_exec.c
+++ b/src/gallium/auxiliary/draw/draw_vs_exec.c
@@ -103,7 +103,8 @@ vs_exec_run_linear( struct draw_vertex_shader *shader,
if (shader->info.uses_instanceid) {
   unsigned i = machine->SysSemanticToIndex[TGSI_SEMANTIC_INSTANCEID];
   assert(i < Elements(machine->SystemValue));
-  machine->SystemValue[i][0] = shader->draw->instance_id;
+  for (j = 0; j < QUAD_SIZE; j++)
+ machine->SystemValue[i].i[j] = shader->draw->instance_id;
}
 
for (i = 0; i < count; i += MAX_TGSI_VERTICES) {
@@ -123,6 +124,12 @@ vs_exec_run_linear( struct draw_vertex_shader *shader,
  }
 #endif
 
+ if (shader->info.uses_vertexid) {
+unsigned vid = machine->SysSemanticToIndex[TGSI_SEMANTIC_VERTEXID];
+assert(vid < Elements(machine->SystemValue));
+machine->SystemValue[vid].i[j] = i + j;
+ }
+
  for (slot = 0; slot < shader->info.num_inputs; slot++) {
 #if 0
 assert(!util_is_inf_or_nan(input[slot][0]));
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c 
b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index 52d4ff4..3046656 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -1037,6 +1037,7 @@ micro_sub(union tgsi_exec_channel *dst,
 
 static void
 fetch_src_file_channel(const struct tgsi_exec_machine *mach,
+   const uint chan_index,
const uint file,
const uint swizzle,
const union tgsi_exec_channel *index,
@@ -1097,7 +1098,7 @@ fetch_src_file_channel(const struct tgsi_exec_machine 
*mach,
* gl_FragCoord, for example, in a sys value register.
*/
   for (i = 0; i < QUAD_SIZE; i++) {
- chan->f[i] = mach->SystemValue[index->i[i]][0];
+ chan->u[i] = mach->SystemValue[index->i[i]].u[i];
   }
   break;
 
@@ -1221,6 +1222,7 @@ fetch_source(const struct tgsi_exec_machine *mach,
   /* get current value of address register[swizzle] */
   swizzle = tgsi_util_get_src_register_swizzle( ®->Indirect, CHAN_X );
   fetch_src_file_channel(mach,
+ chan_index,
  reg->Indirect.File,
  swizzle,
  &index2,
@@ -1280,6 +1282,7 @@ fetch_source(const struct tgsi_exec_machine *mach,
 
  swizzle = tgsi_util_get_src_register_swizzle( ®->DimIndirect, 
CHAN_X );
  fetch_src_file_channel(mach,
+chan_index,
 reg->DimIndirect.File,
 swizzle,
 &index2,
@@ -1314,6 +1317,7 @@ fetch_source(const struct tgsi_exec_machine *mach,
 
swizzle = tgsi_util_get_full_src_register_swizzle( reg, chan_index );
fetch_src_file_channel(mach,
+  chan_index,
   reg->Register.File,
   swizzle,
   &index,
@@ -1384,6 +1388,7 @@ store_dest(struct tgsi_exec_machine *mach,
 
   /* fetch values from the address/indirection register */
   fetch_src_file_channel(mach,
+ chan_index,
  reg->Indirect.File,
  swizzle,
  &index,
@@ -1433,6 +1438,7 @@ store_dest(struct tgsi_exec_machine *mach,
 
  swizzle = tgsi_util_get_src_register_swizzle( ®->DimIndirect, 
CHAN_X );
  fetch_src_file_channel(mach,
+chan_index,
 reg->DimIndirect.File,
 swizzle,
 &index2,
@@ -1995,11 +2001,11 @@ exec_txf(struct tgsi_exec_machine *mach,
if (inst->Texture.NumOffsets == 1) {
   union tgsi_exec_channel index;
   index.i[0] = index.i[1] = index.i[2] = index.i[3] = 
inst->TexOffsets[0].Index;
-  fetch_src_file_channel(mach, inst->TexOffsets[