Mesa (master): i965: Refactor Sandybridge implied move handling.

2011-03-29 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 9a21bc640188e4078075b9f8e6701853a4f0bbe4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a21bc640188e4078075b9f8e6701853a4f0bbe4

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Wed Mar 16 14:09:17 2011 -0700

i965: Refactor Sandybridge implied move handling.

This was open-coded in three different places, and more are necessary.
Extract this into a function so it can be reused.

Unfortunately, not all variations were the same: in particular, one set
compression control and checked that the source register was not
ARF_NULL.  This seemed like a good idea, so all cases now do so.

---

 src/mesa/drivers/dri/i965/brw_eu_emit.c |   68 ++
 1 files changed, 32 insertions(+), 36 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c 
b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index 21ce92c..b663594 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -52,6 +52,35 @@ static void guess_execution_size(struct brw_compile *p,
 }
 
 
+/**
+ * Prior to Sandybridge, the SEND instruction accepted non-MRF source
+ * registers, implicitly moving the operand to a message register.
+ *
+ * On Sandybridge, this is no longer the case.  This function performs the
+ * explicit move; it should be called before emitting a SEND instruction.
+ */
+static void
+gen6_resolve_implied_move(struct brw_compile *p,
+ struct brw_reg *src,
+ GLuint msg_reg_nr)
+{
+   struct intel_context *intel = p-brw-intel;
+   if (intel-gen != 6)
+  return;
+
+   if (src-file == BRW_ARCHITECTURE_REGISTER_FILE  src-nr == BRW_ARF_NULL)
+  return;
+
+   brw_push_insn_state(p);
+   brw_set_mask_control(p, BRW_MASK_DISABLE);
+   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
+   brw_MOV(p, retype(brw_message_reg(msg_reg_nr), BRW_REGISTER_TYPE_UD),
+  retype(*src, BRW_REGISTER_TYPE_UD));
+   brw_pop_insn_state(p);
+   *src = brw_message_reg(msg_reg_nr);
+}
+
+
 static void brw_set_dest(struct brw_compile *p,
 struct brw_instruction *insn,
 struct brw_reg dest)
@@ -1966,20 +1995,7 @@ void brw_SAMPLE(struct brw_compile *p,
{
   struct brw_instruction *insn;

-  /* Sandybridge doesn't have the implied move for SENDs,
-   * and the first message register index comes from src0.
-   */
-  if (intel-gen = 6) {
-if (src0.file != BRW_ARCHITECTURE_REGISTER_FILE ||
-src0.nr != BRW_ARF_NULL) {
-   brw_push_insn_state(p);
-   brw_set_mask_control( p, BRW_MASK_DISABLE );
-   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-   brw_MOV(p, retype(brw_message_reg(msg_reg_nr), src0.type), src0);
-   brw_pop_insn_state(p);
-}
-src0 = brw_message_reg(msg_reg_nr);
-  }
+  gen6_resolve_implied_move(p, src0, msg_reg_nr);
 
   insn = next_insn(p, BRW_OPCODE_SEND);
   insn-header.predicate_control = 0; /* XXX */
@@ -2034,17 +2050,7 @@ void brw_urb_WRITE(struct brw_compile *p,
struct intel_context *intel = p-brw-intel;
struct brw_instruction *insn;
 
-   /* Sandybridge doesn't have the implied move for SENDs,
-* and the first message register index comes from src0.
-*/
-   if (intel-gen = 6) {
-  brw_push_insn_state(p);
-  brw_set_mask_control( p, BRW_MASK_DISABLE );
-  brw_MOV(p, retype(brw_message_reg(msg_reg_nr), BRW_REGISTER_TYPE_UD),
- retype(src0, BRW_REGISTER_TYPE_UD));
-  brw_pop_insn_state(p);
-  src0 = brw_message_reg(msg_reg_nr);
-   }
+   gen6_resolve_implied_move(p, src0, msg_reg_nr);
 
insn = next_insn(p, BRW_OPCODE_SEND);
 
@@ -2154,17 +2160,7 @@ void brw_ff_sync(struct brw_compile *p,
struct intel_context *intel = p-brw-intel;
struct brw_instruction *insn;
 
-   /* Sandybridge doesn't have the implied move for SENDs,
-* and the first message register index comes from src0.
-*/
-   if (intel-gen = 6) {
-  brw_push_insn_state(p);
-  brw_set_mask_control( p, BRW_MASK_DISABLE );
-  brw_MOV(p, retype(brw_message_reg(msg_reg_nr), BRW_REGISTER_TYPE_UD),
- retype(src0, BRW_REGISTER_TYPE_UD));
-  brw_pop_insn_state(p);
-  src0 = brw_message_reg(msg_reg_nr);
-   }
+   gen6_resolve_implied_move(p, src0, msg_reg_nr);
 
insn = next_insn(p, BRW_OPCODE_SEND);
brw_set_dest(p, insn, dest);

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


Mesa (master): i965: Resolve implied moves in brw_dp_READ_4_vs_relative.

2011-03-29 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 9d60a7ce08a67eb8b79c60f829d090ba4a37ed7e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d60a7ce08a67eb8b79c60f829d090ba4a37ed7e

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Tue Mar 29 05:49:40 2011 -0700

i965: Resolve implied moves in brw_dp_READ_4_vs_relative.

Fixes piglit test glsl-vs-arrays-3 on Sandybridge, as well as garbage
rendering in 3DMarkMobileES 2.0's Taiji demo and GLBenchmark 2.0's
Egypt and PRO demos.

NOTE: This a candidate for stable release branches.  It depends on
commit 9a21bc640188e4078075b9f8e6701853a4f0bbe4.

---

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

diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c 
b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index b663594..32ee37f 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -1800,6 +1800,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
   GLuint bind_table_index)
 {
struct intel_context *intel = p-brw-intel;
+   struct brw_reg src = brw_vec8_grf(0, 0);
int msg_type;
 
/* Setup MRF[1] with offset into const buffer */
@@ -1816,6 +1817,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
   addr_reg, brw_imm_d(offset));
brw_pop_insn_state(p);
 
+   gen6_resolve_implied_move(p, src, 0);
struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
 
insn-header.predicate_control = BRW_PREDICATE_NONE;
@@ -1824,7 +1826,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
insn-header.mask_control = BRW_MASK_DISABLE;
 
brw_set_dest(p, insn, dest);
-   brw_set_src0(insn, brw_vec8_grf(0, 0));
+   brw_set_src0(insn, src);
 
if (intel-gen == 6)
   msg_type = GEN6_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ;

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


Mesa (master): gallium: implement clamping controls (ARB_color_buffer_float )

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 47e3896dfd89a26abbe4ca2469c2480f3982b204
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=47e3896dfd89a26abbe4ca2469c2480f3982b204

Author: Luca Barbieri l...@luca-barbieri.com
Date:   Wed Feb 16 00:14:49 2011 +0100

gallium: implement clamping controls (ARB_color_buffer_float)

BTW this changes the gallium interface.
Some rather cosmetic changes by Marek.

Squashed commit of the following:

commit 513b37d484f0318311e84bb86ed4c93cdff71f13
Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Aug 26 18:17:54 2010 +0200

mesa/st: respect fragment clamping in st_DrawPixels

commit 546a31e42cad459d7a7a10ebf77fc5ffcf89e9b8
Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Aug 26 18:17:28 2010 +0200

mesa/st: support fragment and vertex color clamping

commit c406514a1fbee6891da4cf9ac3eebe4e4407ec13
Author: Luca Barbieri l...@luca-barbieri.com
Date:   Tue Aug 24 21:56:37 2010 +0200

mesa/st: expose ARB_color_buffer_float if unclamping is supported

commit d0c5ea11b6f75f3da2f4ca989115f150ebc7cf8d
Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Aug 26 17:53:41 2010 +0200

mesa/st: use unclamped colors

This assumes that Gallium is to be interpreted as given drivers the
responsibility to clamp these colors if necessary.

commit aef5c3c6be6edd076e955e37c80905bc447f8a82
Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Aug 26 18:12:34 2010 +0200

mesa, mesa/st: handle read color clamping properly

We set IMAGE_CLAMP_BIT in the caller based on _ClampReadColor, where
the operation mandates it. (see the removed XXX comment. -Marek)

TODO: did I get the set of operations mandating it right?

commit 76bdfcfe3ff4145a1818e6cb6e227b730a5f12d8
Author: Luca Barbieri l...@luca-barbieri.com
Date:   Thu Aug 26 18:18:25 2010 +0200

gallium: add color clamping to the interface

---

 src/gallium/docs/source/cso/rasterizer.rst  |   24 
 src/gallium/include/pipe/p_defines.h|2 ++
 src/gallium/include/pipe/p_state.h  |2 ++
 src/mesa/state_tracker/st_atom_blend.c  |2 +-
 src/mesa/state_tracker/st_atom_depth.c  |2 +-
 src/mesa/state_tracker/st_atom_rasterizer.c |8 +++-
 src/mesa/state_tracker/st_cb_clear.c|4 ++--
 src/mesa/state_tracker/st_cb_drawpixels.c   |1 +
 src/mesa/state_tracker/st_cb_readpixels.c   |7 +--
 src/mesa/state_tracker/st_extensions.c  |7 +++
 10 files changed, 52 insertions(+), 7 deletions(-)

diff --git a/src/gallium/docs/source/cso/rasterizer.rst 
b/src/gallium/docs/source/cso/rasterizer.rst
index d547055..e10c16e 100644
--- a/src/gallium/docs/source/cso/rasterizer.rst
+++ b/src/gallium/docs/source/cso/rasterizer.rst
@@ -7,6 +7,30 @@ The rasterizer state controls the rendering of points, lines 
and triangles.
 Attributes include polygon culling state, line width, line stipple,
 multisample state, scissoring and flat/smooth shading.
 
+Linkage
+
+clamp_vertex_color
+^^
+
+If set, TGSI_SEMANTIC_COLOR registers are clamped to the [0, 1] range after
+the execution of the vertex shader, before being passed to the geometry
+shader or fragment shader.
+
+OpenGL: glClampColor(GL_CLAMP_VERTEX_COLOR) in GL 3.0 or 
GL_ARB_color_buffer_float
+
+D3D11: seems always disabled
+
+clamp_fragment_color
+
+
+Controls whether TGSI_SEMANTIC_COLOR outputs of the fragment shader
+are clamped to [0, 1].
+
+OpenGL: glClampColor(GL_CLAMP_FRAGMENT_COLOR) in GL 3.0 or 
ARB_color_buffer_float
+
+D3D11: seems always disabled
+
+
 Shading
 ---
 
diff --git a/src/gallium/include/pipe/p_defines.h 
b/src/gallium/include/pipe/p_defines.h
index bac3300..4f6daa8 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -463,6 +463,8 @@ enum pipe_cap {
PIPE_CAP_SHADER_STENCIL_EXPORT,
PIPE_CAP_TGSI_INSTANCEID,
PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR,
+   PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL,
+   PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL
 };
 
 /* Shader caps not specific to any single stage */
diff --git a/src/gallium/include/pipe/p_state.h 
b/src/gallium/include/pipe/p_state.h
index cf6c5b5..f6ad456 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -81,6 +81,8 @@ struct pipe_rasterizer_state
 {
unsigned flatshade:1;
unsigned light_twoside:1;
+   unsigned clamp_vertex_color:1;
+   unsigned clamp_fragment_color:1;
unsigned front_ccw:1;
unsigned cull_face:2;  /** PIPE_FACE_x */
unsigned fill_front:2; /** PIPE_POLYGON_MODE_x */
diff --git a/src/mesa/state_tracker/st_atom_blend.c 
b/src/mesa/state_tracker/st_atom_blend.c
index fb1c7a4..d1844e1 100644
--- a/src/mesa/state_tracker/st_atom_blend.c
+++ b/src/mesa/state_tracker/st_atom_blend.c
@@ -286,7 +286,7 @@ update_blend( struct st_context *st )
 
{
   struct pipe_blend_color bc;
-  COPY_4FV(bc.color, 

Mesa (master): mesa: initial EXT_texture_snorm support

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 0be369975fdfa79bcb702d0c13aa0a221055f61b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0be369975fdfa79bcb702d0c13aa0a221055f61b

Author: Marek Olšák mar...@gmail.com
Date:   Fri Mar 18 13:44:51 2011 +0100

mesa: initial EXT_texture_snorm support

The component ordering of some formats has been been reversed to match
Gallium types.

---

 src/mesa/main/extensions.c |3 +-
 src/mesa/main/fbobject.c   |   38 -
 src/mesa/main/formats.c|  100 
 src/mesa/main/formats.h|   15 +-
 src/mesa/main/image.c  |   28 +++-
 src/mesa/main/macros.h |3 +-
 src/mesa/main/mtypes.h |2 +-
 src/mesa/main/texformat.c  |   49 ++---
 src/mesa/main/teximage.c   |   31 +-
 src/mesa/main/version.c|1 +
 10 files changed, 233 insertions(+), 37 deletions(-)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 7844b50..285e08d 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -203,6 +203,7 @@ static const struct extension extension_table[] = {
{ GL_EXT_texture, o(EXT_texture), 
GL, 1996 },
{ GL_EXT_texture_rectangle,   o(NV_texture_rectangle),
GL, 2004 },
{ GL_EXT_texture_shared_exponent, 
o(EXT_texture_shared_exponent), GL, 2004 },
+   { GL_EXT_texture_snorm,   o(EXT_texture_snorm),   
GL, 2009 },
{ GL_EXT_texture_sRGB,o(EXT_texture_sRGB),
GL, 2004 },
{ GL_EXT_texture_sRGB_decode, o(EXT_texture_sRGB_decode), 
   GL,  2006 },
{ GL_EXT_texture_swizzle, o(EXT_texture_swizzle), 
GL, 2008 },
@@ -274,7 +275,7 @@ static const struct extension extension_table[] = {
{ GL_MESA_pack_invert,o(MESA_pack_invert),
GL, 2002 },
{ GL_MESA_resize_buffers, o(MESA_resize_buffers), 
GL, 1999 },
{ GL_MESA_texture_array,  o(MESA_texture_array),  
GL, 2007 },
-   { GL_MESA_texture_signed_rgba,
o(MESA_texture_signed_rgba),GL, 2009 },
+   { GL_MESA_texture_signed_rgba,o(EXT_texture_snorm),   
GL, 2009 },
{ GL_MESA_window_pos, o(ARB_window_pos),  
GL, 2000 },
{ GL_MESAX_texture_float, o(ARB_texture_float),   
GL, 2009 },
{ GL_MESA_ycbcr_texture,  o(MESA_ycbcr_texture),  
GL, 2002 },
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index cc13103..4eab3e1 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1081,7 +1081,6 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum 
internalFormat)
case GL_RGB10_A2:
case GL_RGBA12:
case GL_RGBA16:
-   case GL_RGBA16_SNORM:
case GL_SRGB8_ALPHA8_EXT:
   return GL_RGBA;
case GL_STENCIL_INDEX:
@@ -1109,6 +1108,43 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum 
internalFormat)
case GL_RG8:
case GL_RG16:
   return ctx-Extensions.ARB_texture_rg ? GL_RG : 0;
+   /* signed normalized texture formats */
+   case GL_RED_SNORM:
+   case GL_R8_SNORM:
+   case GL_R16_SNORM:
+  return ctx-Extensions.EXT_texture_snorm ? GL_RED : 0;
+   case GL_RG_SNORM:
+   case GL_RG8_SNORM:
+   case GL_RG16_SNORM:
+  return ctx-Extensions.EXT_texture_snorm ? GL_RG : 0;
+   case GL_RGB_SNORM:
+   case GL_RGB8_SNORM:
+   case GL_RGB16_SNORM:
+  return ctx-Extensions.EXT_texture_snorm ? GL_RGB : 0;
+   case GL_RGBA_SNORM:
+   case GL_RGBA8_SNORM:
+   case GL_RGBA16_SNORM:
+  return ctx-Extensions.EXT_texture_snorm ? GL_RGBA : 0;
+   case GL_ALPHA_SNORM:
+   case GL_ALPHA8_SNORM:
+   case GL_ALPHA16_SNORM:
+  return ctx-Extensions.EXT_texture_snorm 
+ ctx-Extensions.ARB_framebuffer_object ? GL_ALPHA : 0;
+   case GL_LUMINANCE_SNORM:
+   case GL_LUMINANCE8_SNORM:
+   case GL_LUMINANCE16_SNORM:
+  return ctx-Extensions.EXT_texture_snorm 
+ ctx-Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0;
+   case GL_LUMINANCE_ALPHA_SNORM:
+   case GL_LUMINANCE8_ALPHA8_SNORM:
+   case GL_LUMINANCE16_ALPHA16_SNORM:
+  return ctx-Extensions.EXT_texture_snorm 
+ ctx-Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0;
+   case GL_INTENSITY_SNORM:
+   case GL_INTENSITY8_SNORM:
+   case GL_INTENSITY16_SNORM:
+  return ctx-Extensions.EXT_texture_snorm 
+ 

Mesa (master): mesa: implement texstore and texfetch hooks for signed normalized formats

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: daa5242f9eafaf61f9f492f1e798de8701e6f498
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=daa5242f9eafaf61f9f492f1e798de8701e6f498

Author: Marek Olšák mar...@gmail.com
Date:   Sun Mar 13 14:48:09 2011 +0100

mesa: implement texstore and texfetch hooks for signed normalized formats

The snorm texstore functions were all broken.

swrast support done except for mipmap generation, but I leave it disabled.

---

 src/mesa/main/texfetch.c |   86 ++--
 src/mesa/main/texfetch_tmp.h |  227 +++---
 src/mesa/main/texstore.c |  319 ++---
 3 files changed, 514 insertions(+), 118 deletions(-)

diff --git a/src/mesa/main/texfetch.c b/src/mesa/main/texfetch.c
index 988a7e0..b2181af 100644
--- a/src/mesa/main/texfetch.c
+++ b/src/mesa/main/texfetch.c
@@ -696,11 +696,11 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
   store_texel_signed_r8
},
{
-  MESA_FORMAT_SIGNED_RG88,
-  fetch_texel_1d_signed_rg88,
-  fetch_texel_2d_signed_rg88,
-  fetch_texel_3d_signed_rg88,
-  store_texel_signed_rg88
+  MESA_FORMAT_SIGNED_RG88_REV,
+  fetch_texel_1d_signed_rg88_rev,
+  fetch_texel_2d_signed_rg88_rev,
+  fetch_texel_3d_signed_rg88_rev,
+  store_texel_signed_rg88_rev
},
{
   MESA_FORMAT_SIGNED_RGBX,
@@ -724,18 +724,18 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
   store_texel_signed_rgba_rev
},
{
-  MESA_FORMAT_SIGNED_R_16,
-  fetch_texel_1d_signed_r_16,
-  fetch_texel_2d_signed_r_16,
-  fetch_texel_3d_signed_r_16,
-  store_texel_signed_r_16
+  MESA_FORMAT_SIGNED_R16,
+  fetch_texel_1d_signed_r16,
+  fetch_texel_2d_signed_r16,
+  fetch_texel_3d_signed_r16,
+  store_texel_signed_r16
},
{
-  MESA_FORMAT_SIGNED_RG_16,
-  fetch_texel_1d_signed_rg_16,
-  fetch_texel_2d_signed_rg_16,
-  fetch_texel_3d_signed_rg_16,
-  store_texel_signed_rg_16
+  MESA_FORMAT_SIGNED_GR1616,
+  fetch_texel_1d_signed_rg1616,
+  fetch_texel_2d_signed_rg1616,
+  fetch_texel_3d_signed_rg1616,
+  store_texel_signed_rg1616
},
{
   MESA_FORMAT_SIGNED_RGB_16,
@@ -814,6 +814,62 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
   NULL,
   NULL
},
+   {
+  MESA_FORMAT_SIGNED_A8,
+  fetch_texel_1d_signed_a8,
+  fetch_texel_2d_signed_a8,
+  fetch_texel_3d_signed_a8,
+  store_texel_signed_a8
+   },
+   {
+  MESA_FORMAT_SIGNED_L8,
+  fetch_texel_1d_signed_l8,
+  fetch_texel_2d_signed_l8,
+  fetch_texel_3d_signed_l8,
+  store_texel_signed_l8
+   },
+   {
+  MESA_FORMAT_SIGNED_AL88,
+  fetch_texel_1d_signed_al88,
+  fetch_texel_2d_signed_al88,
+  fetch_texel_3d_signed_al88,
+  store_texel_signed_al88
+   },
+   {
+  MESA_FORMAT_SIGNED_I8,
+  fetch_texel_1d_signed_i8,
+  fetch_texel_2d_signed_i8,
+  fetch_texel_3d_signed_i8,
+  store_texel_signed_i8
+   },
+   {
+  MESA_FORMAT_SIGNED_A16,
+  fetch_texel_1d_signed_a16,
+  fetch_texel_2d_signed_a16,
+  fetch_texel_3d_signed_a16,
+  store_texel_signed_a16
+   },
+   {
+  MESA_FORMAT_SIGNED_L16,
+  fetch_texel_1d_signed_l16,
+  fetch_texel_2d_signed_l16,
+  fetch_texel_3d_signed_l16,
+  store_texel_signed_l16
+   },
+   {
+  MESA_FORMAT_SIGNED_AL1616,
+  fetch_texel_1d_signed_al1616,
+  fetch_texel_2d_signed_al1616,
+  fetch_texel_3d_signed_al1616,
+  store_texel_signed_al1616
+   },
+   {
+  MESA_FORMAT_SIGNED_I16,
+  fetch_texel_1d_signed_i16,
+  fetch_texel_2d_signed_i16,
+  fetch_texel_3d_signed_i16,
+  store_texel_signed_i16
+   },
 };
 
 
diff --git a/src/mesa/main/texfetch_tmp.h b/src/mesa/main/texfetch_tmp.h
index 36dede5..f1f6a01 100644
--- a/src/mesa/main/texfetch_tmp.h
+++ b/src/mesa/main/texfetch_tmp.h
@@ -1673,25 +1673,117 @@ static void store_texel_signed_r8(struct 
gl_texture_image *texImage,
 #endif
 
 
-/* MESA_FORMAT_SIGNED_RG88 ***/
+/* MESA_FORMAT_SIGNED_A8 ***/
 
-static void FETCH(signed_rg88)( const struct gl_texture_image *texImage,
-GLint i, GLint j, GLint k, GLfloat *texel )
+static void FETCH(signed_a8)( const struct gl_texture_image *texImage,
+  GLint i, GLint j, GLint k, GLfloat *texel )
+{
+   const GLbyte s = *TEXEL_ADDR(GLbyte, texImage, i, j, k, 1);
+   texel[RCOMP] = 0.0F;
+   texel[GCOMP] = 0.0F;
+   texel[BCOMP] = 0.0F;
+   texel[ACOMP] = BYTE_TO_FLOAT_TEX( s );
+}
+
+#if DIM == 3
+static void store_texel_signed_a8(struct gl_texture_image *texImage,
+  GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLbyte *rgba = (const GLbyte *) texel;
+   GLbyte *dst = TEXEL_ADDR(GLbyte, texImage, i, j, k, 1);
+   *dst = rgba[ACOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_SIGNED_L8 

Mesa (master): gallium: add EXT_texture_snorm support

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 2af1da15468d06d3ce9d89bcc706276ecc66f761
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2af1da15468d06d3ce9d89bcc706276ecc66f761

Author: Marek Olšák mar...@gmail.com
Date:   Mon Mar 14 10:04:36 2011 +0100

gallium: add EXT_texture_snorm support

---

 src/gallium/auxiliary/util/u_format.csv |8 +
 src/gallium/include/pipe/p_format.h |9 ++
 src/mesa/state_tracker/st_extensions.c  |6 +
 src/mesa/state_tracker/st_format.c  |  232 ++-
 4 files changed, 253 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_format.csv 
b/src/gallium/auxiliary/util/u_format.csv
index 6f5cc61..771bd49 100644
--- a/src/gallium/auxiliary/util/u_format.csv
+++ b/src/gallium/auxiliary/util/u_format.csv
@@ -88,6 +88,14 @@ PIPE_FORMAT_L16_UNORM , plain, 1, 1, un16, , 
, , xxx1, r
 PIPE_FORMAT_A16_UNORM , plain, 1, 1, un16, , , , 000x, 
rgb
 PIPE_FORMAT_I16_UNORM , plain, 1, 1, un16, , , , , 
rgb
 PIPE_FORMAT_L16A16_UNORM  , plain, 1, 1, un16, un16, , , xxxy, 
rgb
+PIPE_FORMAT_A8_SNORM  , plain, 1, 1, sn8 , , , , 000x, 
rgb
+PIPE_FORMAT_L8_SNORM  , plain, 1, 1, sn8 , , , , xxx1, 
rgb
+PIPE_FORMAT_L8A8_SNORM, plain, 1, 1, sn8 , sn8 , , , xxxy, 
rgb
+PIPE_FORMAT_I8_SNORM  , plain, 1, 1, sn8 , , , , , 
rgb
+PIPE_FORMAT_A16_SNORM , plain, 1, 1, sn16, , , , 000x, 
rgb
+PIPE_FORMAT_L16_SNORM , plain, 1, 1, sn16, , , , xxx1, 
rgb
+PIPE_FORMAT_L16A16_SNORM  , plain, 1, 1, sn16, sn16, , , xxxy, 
rgb
+PIPE_FORMAT_I16_SNORM , plain, 1, 1, sn16, , , , , 
rgb
 
 # SRGB formats
 PIPE_FORMAT_L8_SRGB   , plain, 1, 1, un8 , , , , xxx1, 
srgb 
diff --git a/src/gallium/include/pipe/p_format.h 
b/src/gallium/include/pipe/p_format.h
index d53af59..3ea9a39 100644
--- a/src/gallium/include/pipe/p_format.h
+++ b/src/gallium/include/pipe/p_format.h
@@ -211,6 +211,15 @@ enum pipe_format {
PIPE_FORMAT_LATC2_UNORM = 145,
PIPE_FORMAT_LATC2_SNORM = 146,
 
+   PIPE_FORMAT_A8_SNORM= 147,
+   PIPE_FORMAT_L8_SNORM= 148,
+   PIPE_FORMAT_L8A8_SNORM  = 149,
+   PIPE_FORMAT_I8_SNORM= 150,
+   PIPE_FORMAT_A16_SNORM   = 151,
+   PIPE_FORMAT_L16_SNORM   = 152,
+   PIPE_FORMAT_L16A16_SNORM= 153,
+   PIPE_FORMAT_I16_SNORM   = 154,
+
PIPE_FORMAT_COUNT
 };
 
diff --git a/src/mesa/state_tracker/st_extensions.c 
b/src/mesa/state_tracker/st_extensions.c
index 89bb030..ba1a0af 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -453,6 +453,12 @@ void st_init_extensions(struct st_context *st)
   ctx-Extensions.ATI_texture_compression_3dc = GL_TRUE;
}
 
+   if (screen-is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM,
+   PIPE_TEXTURE_2D, 0,
+   PIPE_BIND_SAMPLER_VIEW)) {
+  ctx-Extensions.EXT_texture_snorm = GL_TRUE;
+   }
+
/* ycbcr support */
if (screen-is_format_supported(screen, PIPE_FORMAT_UYVY, 
PIPE_TEXTURE_2D, 0,
diff --git a/src/mesa/state_tracker/st_format.c 
b/src/mesa/state_tracker/st_format.c
index 03655ee..957a06c 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -259,6 +259,39 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat)
case MESA_FORMAT_SIGNED_LA_LATC2:
   return PIPE_FORMAT_LATC2_SNORM;
 
+   /* signed normalized formats */
+   case MESA_FORMAT_SIGNED_R8:
+  return PIPE_FORMAT_R8_SNORM;
+   case MESA_FORMAT_SIGNED_RG88_REV:
+  return PIPE_FORMAT_R8G8_SNORM;
+   case MESA_FORMAT_SIGNED_RGBA_REV:
+  return PIPE_FORMAT_R8G8B8A8_SNORM;
+
+   case MESA_FORMAT_SIGNED_A8:
+  return PIPE_FORMAT_A8_SNORM;
+   case MESA_FORMAT_SIGNED_L8:
+  return PIPE_FORMAT_L8_SNORM;
+   case MESA_FORMAT_SIGNED_AL88:
+  return PIPE_FORMAT_L8A8_SNORM;
+   case MESA_FORMAT_SIGNED_I8:
+  return PIPE_FORMAT_I8_SNORM;
+
+   case MESA_FORMAT_SIGNED_R16:
+  return PIPE_FORMAT_R16_SNORM;
+   case MESA_FORMAT_SIGNED_GR1616:
+  return PIPE_FORMAT_R16G16_SNORM;
+   case MESA_FORMAT_SIGNED_RGBA_16:
+  return PIPE_FORMAT_R16G16B16A16_SNORM;
+
+   case MESA_FORMAT_SIGNED_A16:
+  return PIPE_FORMAT_A16_SNORM;
+   case MESA_FORMAT_SIGNED_L16:
+  return PIPE_FORMAT_L16_SNORM;
+   case MESA_FORMAT_SIGNED_AL1616:
+  return PIPE_FORMAT_L16A16_SNORM;
+   case MESA_FORMAT_SIGNED_I16:
+  return PIPE_FORMAT_I16_SNORM;
+
default:
   assert(0);
   return PIPE_FORMAT_NONE;
@@ -318,8 +351,6 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
 
case 

Mesa (master): mesa: clamp texture border color if ARB_texture_float is unsupported

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: e28fe8fe5d05c87a065f8e72adef8b5077da2c73
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e28fe8fe5d05c87a065f8e72adef8b5077da2c73

Author: Marek Olšák mar...@gmail.com
Date:   Sat Mar 26 13:06:22 2011 +0100

mesa: clamp texture border color if ARB_texture_float is unsupported

ARB_texture_float disables clamping of the texture border color,
ARB_color_buffer_float only modifies clamping of the glGet query.

---

 src/mesa/main/texparam.c |   16 
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
index adb6bce..34b6add 100644
--- a/src/mesa/main/texparam.c
+++ b/src/mesa/main/texparam.c
@@ -534,10 +534,18 @@ set_tex_parameterf(struct gl_context *ctx,
 
case GL_TEXTURE_BORDER_COLOR:
   flush(ctx);
-  texObj-BorderColor.f[RCOMP] = params[0];
-  texObj-BorderColor.f[GCOMP] = params[1];
-  texObj-BorderColor.f[BCOMP] = params[2];
-  texObj-BorderColor.f[ACOMP] = params[3];
+  /* ARB_texture_float disables clamping */
+  if (ctx-Extensions.ARB_texture_float) {
+ texObj-BorderColor.f[RCOMP] = params[0];
+ texObj-BorderColor.f[GCOMP] = params[1];
+ texObj-BorderColor.f[BCOMP] = params[2];
+ texObj-BorderColor.f[ACOMP] = params[3];
+  } else {
+ texObj-BorderColor.f[RCOMP] = CLAMP(params[0], 0.0F, 1.0F);
+ texObj-BorderColor.f[GCOMP] = CLAMP(params[1], 0.0F, 1.0F);
+ texObj-BorderColor.f[BCOMP] = CLAMP(params[2], 0.0F, 1.0F);
+ texObj-BorderColor.f[ACOMP] = CLAMP(params[3], 0.0F, 1.0F);
+  }
   return GL_TRUE;
 
default:

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


Mesa (master): st/mesa: choose an appropriate texture format for DrawPixels

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: b518f4d0ea72dc3872f351250034aa9155756dd3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b518f4d0ea72dc3872f351250034aa9155756dd3

Author: Marek Olšák mar...@gmail.com
Date:   Tue Mar 15 15:00:02 2011 +0100

st/mesa: choose an appropriate texture format for DrawPixels

---

 src/mesa/state_tracker/st_cb_drawpixels.c |   52 +++--
 1 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c 
b/src/mesa/state_tracker/st_cb_drawpixels.c
index dc53e27..1707f82 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -296,7 +296,7 @@ base_format(GLenum format)
  * of the given format and type.
  */
 static GLenum
-internal_format(GLenum format, GLenum type)
+internal_format(struct gl_context *ctx, GLenum format, GLenum type)
 {
switch (format) {
case GL_DEPTH_COMPONENT:
@@ -326,7 +326,53 @@ internal_format(GLenum format, GLenum type)
  }
   }
   else {
- return GL_RGBA;
+ switch (type) {
+ case GL_UNSIGNED_BYTE:
+ case GL_UNSIGNED_INT_8_8_8_8:
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
+ default:
+return GL_RGBA8;
+
+ case GL_UNSIGNED_BYTE_3_3_2:
+ case GL_UNSIGNED_BYTE_2_3_3_REV:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+return GL_RGBA4;
+
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_SHORT_5_6_5_REV:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+return GL_RGB5_A1;
+
+ case GL_UNSIGNED_INT_10_10_10_2:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+return GL_RGB10_A2;
+
+ case GL_UNSIGNED_SHORT:
+ case GL_UNSIGNED_INT:
+return GL_RGBA16;
+
+ case GL_BYTE:
+return
+   ctx-Extensions.EXT_texture_snorm ? GL_RGBA8_SNORM : GL_RGBA8;
+
+ case GL_SHORT:
+ case GL_INT:
+return
+   ctx-Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16;
+
+ case GL_HALF_FLOAT_ARB:
+return
+   ctx-Extensions.ARB_texture_float ? GL_RGBA16F :
+   ctx-Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16;
+
+ case GL_FLOAT:
+ case GL_DOUBLE:
+return
+   ctx-Extensions.ARB_texture_float ? GL_RGBA32F :
+   ctx-Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16;
+ }
   }
}
 }
@@ -369,7 +415,7 @@ make_texture(struct st_context *st,
GLenum baseFormat, intFormat;
 
baseFormat = base_format(format);
-   intFormat = internal_format(format, type);
+   intFormat = internal_format(ctx, format, type);
 
mformat = st_ChooseTextureFormat_renderable(ctx, intFormat,
format, type, GL_FALSE);

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


Mesa (master): gallium: remove PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 8d4ec87d7f987b3852dafa6802815bb9a3ec7ad4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8d4ec87d7f987b3852dafa6802815bb9a3ec7ad4

Author: Marek Olšák mar...@gmail.com
Date:   Sat Mar 26 13:19:23 2011 +0100

gallium: remove PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL

The vertex color clamp control is a property of an API,
a lot like gl_rasterization_rules.

The state should be set according to the API being implemented, for example:
   OpenGL Compatibility: enabled by default
   OpenGL Core: disabled by default
   D3D11: always disabled

This patch also changes the way ARB_color_buffer_float is advertised.
If no SNORM or FLOAT render target is supported, fragment color clamping
is not required.

---

 src/gallium/include/pipe/p_defines.h   |1 -
 src/mesa/state_tracker/st_extensions.c |   30 ++
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/src/gallium/include/pipe/p_defines.h 
b/src/gallium/include/pipe/p_defines.h
index 4f6daa8..1c1a8f2 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -463,7 +463,6 @@ enum pipe_cap {
PIPE_CAP_SHADER_STENCIL_EXPORT,
PIPE_CAP_TGSI_INSTANCEID,
PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR,
-   PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL,
PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL
 };
 
diff --git a/src/mesa/state_tracker/st_extensions.c 
b/src/mesa/state_tracker/st_extensions.c
index ba1a0af..e327790 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -514,12 +514,34 @@ void st_init_extensions(struct st_context *st)
   ctx-Extensions.ARB_depth_clamp = GL_TRUE;
}
 
-   /* this extension does not actually require support of floating point
-* render targets, just clamping controls
+   /* This extension does not actually require support of floating point
+* render targets, just clamping controls.
+* Advertise this extension if either fragment color clamping is supported
+* or no render targets having color values outside of the range [0, 1]
+* are supported, in which case the fragment color clamping has no effect
+* on rendering.
 */
-   if(screen-get_param(screen, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL) 
-  screen-get_param(screen, PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL))
+   if (screen-get_param(screen, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL) ||
+   (!screen-is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM,
+ PIPE_TEXTURE_2D, 0,
+ PIPE_BIND_RENDER_TARGET) 
+!screen-is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_SNORM,
+ PIPE_TEXTURE_2D, 0,
+ PIPE_BIND_RENDER_TARGET) 
+!screen-is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT,
+ PIPE_TEXTURE_2D, 0,
+ PIPE_BIND_RENDER_TARGET) 
+!screen-is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FLOAT,
+ PIPE_TEXTURE_2D, 0,
+ PIPE_BIND_RENDER_TARGET) 
+!screen-is_format_supported(screen, PIPE_FORMAT_R11G11B10_FLOAT,
+ PIPE_TEXTURE_2D, 0,
+ PIPE_BIND_RENDER_TARGET) 
+!screen-is_format_supported(screen, PIPE_FORMAT_R9G9B9E5_FLOAT,
+ PIPE_TEXTURE_2D, 0,
+ PIPE_BIND_RENDER_TARGET))) {
   ctx-Extensions.ARB_color_buffer_float = GL_TRUE;
+   }
 
if (screen-get_param(screen, PIPE_CAP_SHADER_STENCIL_EXPORT)) {
   ctx-Extensions.ARB_shader_stencil_export = GL_TRUE;

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


Mesa (master): docs: update GL3 status

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 8cbdfe1de4a5793d2d43dca81dd8996419b7aeed
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8cbdfe1de4a5793d2d43dca81dd8996419b7aeed

Author: Marek Olšák mar...@gmail.com
Date:   Tue Mar 29 13:03:26 2011 +0200

docs: update GL3 status

---

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

diff --git a/docs/GL3.txt b/docs/GL3.txt
index ca265af..c704699 100644
--- a/docs/GL3.txt
+++ b/docs/GL3.txt
@@ -15,7 +15,7 @@ GL 3.0:
 GLSL changes (GL_EXT_gpu_shader4, etc)not started
 Conditional rendering (GL_NV_conditional_render)  DONE (swrast  softpipe)
 Map buffer subranges (GL_ARB_map_buffer_range)DONE
-Clamping controls (GL_ARB_color_buffer_float) BRANCH ~mareko/mesa 
floating2
+Clamping controls (GL_ARB_color_buffer_float) DONE
 Float textures, renderbuffers (GL_ARB_texture_float)  BRANCH ~mareko/mesa 
floating2
 GL_EXT_packed_float   not started
 GL_EXT_texture_shared_exponentnot started
@@ -53,7 +53,7 @@ Primitive restart (GL_NV_primitive_restart)   DONE 
(gallium)
 Texture buffer objs (GL_ARB_texture_buffer_object)not started
 Rectangular textures (GL_ARB_texture_rectangle)   DONE
 Uniform buffer objs (GL_ARB_uniform_buffer_object)not started
-Signed normalized textures (GL_EXT_texture_snorm) ~50% done
+Signed normalized textures (GL_EXT_texture_snorm) DONE (gallium)
 
 
 GL 3.2:

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


Mesa (master): i915: Detect allocation failure of batch buffer

2011-03-29 Thread Chris Wilson
Module: Mesa
Branch: master
Commit: b094dff50a05e56f5415d31daa5e4542f321c858
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b094dff50a05e56f5415d31daa5e4542f321c858

Author: Chris Wilson ch...@chris-wilson.co.uk
Date:   Thu Mar 10 18:01:32 2011 +

i915: Detect allocation failure of batch buffer

Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk

---

 src/mesa/drivers/dri/i915/i915_vtbl.c |4 
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/i915/i915_vtbl.c 
b/src/mesa/drivers/dri/i915/i915_vtbl.c
index 921183b..942ebec 100644
--- a/src/mesa/drivers/dri/i915/i915_vtbl.c
+++ b/src/mesa/drivers/dri/i915/i915_vtbl.c
@@ -307,6 +307,10 @@ i915_emit_state(struct intel_context *intel)
   false);
count = 0;
  again:
+   if (intel-batch.bo == NULL) {
+  _mesa_error(ctx, GL_OUT_OF_MEMORY, i915 emit state);
+  assert(0);
+   }
aper_count = 0;
dirty = get_dirty(state);
 

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


Mesa (master): i965: Avoid name clash of loop counter and member

2011-03-29 Thread Chris Wilson
Module: Mesa
Branch: master
Commit: 252eaa765e69a70036ec33a7e1e0ffeac1aab2ff
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=252eaa765e69a70036ec33a7e1e0ffeac1aab2ff

Author: Chris Wilson ch...@chris-wilson.co.uk
Date:   Tue Mar 29 15:39:01 2011 +0100

i965: Avoid name clash of loop counter and member

src/mesa/drivers/dri/i965/brw_fs.cpp:565 warning: name lookup of ‘c’ changed

Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |   10 +-
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
b/src/mesa/drivers/dri/i965/brw_fs.cpp
index b2336b7..bdf0523 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -547,16 +547,16 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
 * handed us defined values in only the constant offset
 * field of the setup reg.
 */
-   for (unsigned int c = 0; c  type-vector_elements; c++) {
-  struct brw_reg interp = interp_reg(location, c);
+   for (unsigned int k = 0; k  type-vector_elements; k++) {
+  struct brw_reg interp = interp_reg(location, k);
   interp = suboffset(interp, 3);
   emit(FS_OPCODE_CINTERP, attr, fs_reg(interp));
   attr.reg_offset++;
}
 } else {
/* Perspective interpolation case. */
-   for (unsigned int c = 0; c  type-vector_elements; c++) {
-  struct brw_reg interp = interp_reg(location, c);
+   for (unsigned int k = 0; k  type-vector_elements; k++) {
+  struct brw_reg interp = interp_reg(location, k);
   emit(FS_OPCODE_LINTERP, attr,
this-delta_x, this-delta_y, fs_reg(interp));
   attr.reg_offset++;
@@ -564,7 +564,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
 
if (intel-gen  6  !(is_gl_Color  c-key.linear_color)) {
   attr.reg_offset -= type-vector_elements;
-  for (unsigned int c = 0; c  type-vector_elements; c++) {
+  for (unsigned int k = 0; k  type-vector_elements; k++) {
  emit(BRW_OPCODE_MUL, attr, attr, this-pixel_w);
  attr.reg_offset++;
   }

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


Mesa (master): intel: Protect intel_clear_with_blit from failed buffer allocations

2011-03-29 Thread Chris Wilson
Module: Mesa
Branch: master
Commit: 7bae1c3d85344b7229e0124d1f54376392682430
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7bae1c3d85344b7229e0124d1f54376392682430

Author: Chris Wilson ch...@chris-wilson.co.uk
Date:   Tue Mar 29 15:40:21 2011 +0100

intel: Protect intel_clear_with_blit from failed buffer allocations

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=34419
Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk

---

 src/mesa/drivers/dri/intel/intel_blit.c |   21 +++--
 1 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_blit.c 
b/src/mesa/drivers/dri/intel/intel_blit.c
index e1ab7f1..d6a648c 100644
--- a/src/mesa/drivers/dri/intel/intel_blit.c
+++ b/src/mesa/drivers/dri/intel/intel_blit.c
@@ -239,12 +239,12 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield 
mask)
if (cw == 0 || ch == 0)
   return 0;
 
-   GLuint buf;
all = (cw == fb-Width  ch == fb-Height);
 
/* Loop over all renderbuffers */
-   for (buf = 0; buf  BUFFER_COUNT  mask; buf++) {
-  const GLbitfield bufBit = 1  buf;
+   mask = (1  BUFFER_COUNT) - 1;
+   while (mask) {
+  GLuint buf = _mesa_ffs(mask) - 1;
   struct intel_renderbuffer *irb;
   drm_intel_bo *write_buffer;
   int x1, y1, x2, y2;
@@ -253,11 +253,15 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield 
mask)
   int pitch, cpp;
   drm_intel_bo *aper_array[2];
 
-  if (!(mask  bufBit))
-continue;
+  mask = ~(1  buf);
 
-  /* OK, clear this renderbuffer */
   irb = intel_get_renderbuffer(fb, buf);
+  if (irb == NULL || irb-region == NULL || irb-region-buffer == NULL) {
+ fail_mask |= 1  buf;
+ continue;
+  }
+
+  /* OK, clear this renderbuffer */
   write_buffer = intel_region_buffer(intel, irb-region,
 all ? INTEL_WRITE_FULL :
 INTEL_WRITE_PART);
@@ -333,8 +337,7 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
clear[3], clear[3]);
break;
 default:
-   fail_mask |= bufBit;
-   mask = ~bufBit;
+   fail_mask |= 1  buf;
continue;
 }
   }
@@ -367,8 +370,6 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
 
   if (buf == BUFFER_DEPTH || buf == BUFFER_STENCIL)
 mask = ~(BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL);
-  else
-mask = ~bufBit;/* turn off bit, for faster loop exit */
}
 
return fail_mask;

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


Mesa (master): intel: fix build

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 7d41857566d900aee3319f06c272049e6211acc1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d41857566d900aee3319f06c272049e6211acc1

Author: Marek Olšák mar...@gmail.com
Date:   Tue Mar 29 18:01:44 2011 +0200

intel: fix build

broken with e5c6a92a12b5cd7db205d72039f58d302b0be9d5
(mesa: implement clamping controls (ARB_color_buffer_float))

---

 src/mesa/drivers/dri/i915/i915_fragprog.c |2 +-
 src/mesa/drivers/dri/i965/brw_program.c   |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i915/i915_fragprog.c 
b/src/mesa/drivers/dri/i915/i915_fragprog.c
index 89de2a8..7286e2b 100644
--- a/src/mesa/drivers/dri/i915/i915_fragprog.c
+++ b/src/mesa/drivers/dri/i915/i915_fragprog.c
@@ -1291,7 +1291,7 @@ i915ProgramStringNotify(struct gl_context * ctx,
*/
   if (p-FragProg.FogOption) {
  /* add extra instructions to do fog, then turn off FogOption field */
- _mesa_append_fog_code(ctx, p-FragProg, TRUE);
+ _mesa_append_fog_code(ctx, p-FragProg, GL_TRUE);
  p-FragProg.FogOption = GL_NONE;
   }
}
diff --git a/src/mesa/drivers/dri/i965/brw_program.c 
b/src/mesa/drivers/dri/i965/brw_program.c
index 2132b82..b5ec55b 100644
--- a/src/mesa/drivers/dri/i965/brw_program.c
+++ b/src/mesa/drivers/dri/i965/brw_program.c
@@ -135,7 +135,7 @@ static GLboolean brwProgramStringNotify( struct gl_context 
*ctx,
   struct gl_shader_program *shader_program;
 
   if (fprog-FogOption) {
- _mesa_append_fog_code(ctx, fprog, TRUE);
+ _mesa_append_fog_code(ctx, fprog, GL_TRUE);
  fprog-FogOption = GL_NONE;
   }
 

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


Mesa (master): r300g: add support for all render targets with one and two channels

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 0420ae3d9069ff5cbe067bdd5c6075d9292dbe66
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0420ae3d9069ff5cbe067bdd5c6075d9292dbe66

Author: Marek Olšák mar...@gmail.com
Date:   Tue Mar 29 16:35:13 2011 +0200

r300g: add support for all render targets with one and two channels

The hardware should be set according to this table:

FORMAT - R300 COLORFORMAT
-
X16- UV88
X16Y16 - ARGB
X32- ARGB
X32Y32 - ARGB16161616

US_OUT_FMT must contain the real format.

I wasn't able to make B3G3R2 and L4A4 work, but those aren't important.

---

 src/gallium/drivers/r300/r300_texture.c |  160 +--
 1 files changed, 130 insertions(+), 30 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_texture.c 
b/src/gallium/drivers/r300/r300_texture.c
index 57e0c61..6214380 100644
--- a/src/gallium/drivers/r300/r300_texture.c
+++ b/src/gallium/drivers/r300/r300_texture.c
@@ -404,6 +404,19 @@ static uint32_t r300_translate_colorformat(enum 
pipe_format format)
 case PIPE_FORMAT_L8A8_SNORM:
 case PIPE_FORMAT_R8G8_UNORM:
 case PIPE_FORMAT_R8G8_SNORM:
+/* These formats work fine with UV88 if US_OUT_FMT is set correctly. */
+case PIPE_FORMAT_A16_UNORM:
+case PIPE_FORMAT_A16_SNORM:
+/*case PIPE_FORMAT_A16_FLOAT:*/
+case PIPE_FORMAT_L16_UNORM:
+case PIPE_FORMAT_L16_SNORM:
+/*case PIPE_FORMAT_L16_FLOAT:*/
+case PIPE_FORMAT_I16_UNORM:
+case PIPE_FORMAT_I16_SNORM:
+/*case PIPE_FORMAT_I16_FLOAT:*/
+case PIPE_FORMAT_R16_UNORM:
+case PIPE_FORMAT_R16_SNORM:
+case PIPE_FORMAT_R16_FLOAT:
 return R300_COLOR_FORMAT_UV88;
 
 case PIPE_FORMAT_B5G6R5_UNORM:
@@ -434,19 +447,33 @@ static uint32_t r300_translate_colorformat(enum 
pipe_format format)
 /*case PIPE_FORMAT_X8B8G8R8_SNORM:*/
 case PIPE_FORMAT_R8G8B8X8_UNORM:
 /*case PIPE_FORMAT_R8G8B8X8_SNORM:*/
-case PIPE_FORMAT_R8SG8SB8UX8U_NORM:
+/* These formats work fine with ARGB if US_OUT_FMT is set
+ * correctly. */
+case PIPE_FORMAT_R16G16_UNORM:
+case PIPE_FORMAT_R16G16_SNORM:
+case PIPE_FORMAT_R16G16_FLOAT:
+case PIPE_FORMAT_L16A16_UNORM:
+case PIPE_FORMAT_L16A16_SNORM:
+/*case PIPE_FORMAT_L16A16_FLOAT:
+case PIPE_FORMAT_A32_FLOAT:
+case PIPE_FORMAT_L32_FLOAT:
+case PIPE_FORMAT_I32_FLOAT:*/
+case PIPE_FORMAT_R32_FLOAT:
 return R300_COLOR_FORMAT_ARGB;
 
 case PIPE_FORMAT_R10G10B10A2_UNORM:
 case PIPE_FORMAT_R10G10B10X2_SNORM:
 case PIPE_FORMAT_B10G10R10A2_UNORM:
-case PIPE_FORMAT_R10SG10SB10SA2U_NORM:
 return R500_COLOR_FORMAT_ARGB2101010;  /* R5xx-only? */
 
 /* 64-bit buffers. */
 case PIPE_FORMAT_R16G16B16A16_UNORM:
 case PIPE_FORMAT_R16G16B16A16_SNORM:
 case PIPE_FORMAT_R16G16B16A16_FLOAT:
+/* These formats work fine with ARGB16161616 if US_OUT_FMT is set
+ * correctly. */
+case PIPE_FORMAT_R32G32_FLOAT:
+/*case PIPE_FORMAT_L32A32_FLOAT:*/
 return R300_COLOR_FORMAT_ARGB16161616;
 
 /* 128-bit buffers. */
@@ -489,12 +516,7 @@ static uint32_t r300_translate_out_fmt(enum pipe_format 
format)
 uint32_t modifier = 0;
 unsigned i;
 const struct util_format_description *desc;
-static const uint32_t sign_bit[4] = {
-R300_OUT_SIGN(0x4),
-R300_OUT_SIGN(0x2),
-R300_OUT_SIGN(0x1),
-R300_OUT_SIGN(0x8),
-};
+boolean uniform_sign;
 
 desc = util_format_description(format);
 
@@ -509,34 +531,82 @@ static uint32_t r300_translate_out_fmt(enum pipe_format 
format)
 return ~0; /* Unsupported/unknown. */
 
 /* Specifies how the shader output is written to the fog unit. */
-if (desc-channel[i].type == UTIL_FORMAT_TYPE_FLOAT) {
-if (desc-channel[i].size == 32) {
-modifier |= R300_US_OUT_FMT_C4_32_FP;
-} else {
-modifier |= R300_US_OUT_FMT_C4_16_FP;
+switch (desc-channel[i].type) {
+case UTIL_FORMAT_TYPE_FLOAT:
+switch (desc-channel[i].size) {
+case 32:
+switch (desc-nr_channels) {
+case 1:
+modifier |= R300_US_OUT_FMT_C_32_FP;
+break;
+case 2:
+modifier |= R300_US_OUT_FMT_C2_32_FP;
+break;
+case 4:
+modifier |= R300_US_OUT_FMT_C4_32_FP;
+break;
+}
+break;
+
+case 16:
+switch (desc-nr_channels) {
+case 1:
+modifier |= R300_US_OUT_FMT_C_16_FP;
+break;
+case 2:
+modifier |= R300_US_OUT_FMT_C2_16_FP;
+break;
+case 4:
+modifier |= R300_US_OUT_FMT_C4_16_FP;
+  

Mesa (master): glsl: Calcluate Mesa state slots in front-end instead of back-end

2011-03-29 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: 89d81ab16c05818b290ed735c1343d3abde449bf
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=89d81ab16c05818b290ed735c1343d3abde449bf

Author: Ian Romanick ian.d.roman...@intel.com
Date:   Tue Jan 25 10:41:20 2011 -0800

glsl: Calcluate Mesa state slots in front-end instead of back-end

This should be the last bit of infrastructure changes before
generating GLSL IR for assembly shaders.

This commit leaves some odd code formatting in ir_to_mesa and brw_fs.
This was done to minimize whitespace changes / reindentation in some
loops.  The following commit will restore formatting sanity.

Reviewed-by: Eric Anholt e...@anholt.net
Reviewed-by: Chad Versace chad.vers...@intel.com

---

 src/glsl/ir.h|   26 
 src/glsl/ir_clone.cpp|   12 +++
 src/glsl/ir_variable.cpp |   46 ++--
 src/glsl/linker.cpp  |   13 
 src/mesa/drivers/dri/i965/brw_fs.cpp |   37 ---
 src/mesa/program/ir_to_mesa.cpp  |   56 ++---
 6 files changed, 117 insertions(+), 73 deletions(-)

diff --git a/src/glsl/ir.h b/src/glsl/ir.h
index 39d4ebc..a419843 100644
--- a/src/glsl/ir.h
+++ b/src/glsl/ir.h
@@ -253,6 +253,16 @@ enum ir_depth_layout {
 const char*
 depth_layout_string(ir_depth_layout layout);
 
+/**
+ * Description of built-in state associated with a uniform
+ *
+ * \sa ir_variable::state_slots
+ */
+struct ir_state_slot {
+   int tokens[5];
+   int swizzle;
+};
+
 class ir_variable : public ir_instruction {
 public:
ir_variable(const struct glsl_type *, const char *, ir_variable_mode);
@@ -386,6 +396,22 @@ public:
int location;
 
/**
+* Built-in state that backs this uniform
+*
+* Once set at variable creation, \c state_slots must remain invariant.
+* This is because, ideally, this array would be shared by all clones of
+* this variable in the IR tree.  In other words, we'd really like for it
+* to be a fly-weight.
+*
+* If the variable is not a uniform, \c num_state_slots will be zero and
+* \c state_slots will be \c NULL.
+*/
+   /*@{*/
+   unsigned num_state_slots;/** Number of state slots used */
+   ir_state_slot *state_slots;  /** State descriptors. */
+   /*@}*/
+
+   /**
 * Emit a warning if this variable is accessed.
 */
const char *warn_extension;
diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp
index 2c0574d..069bb85 100644
--- a/src/glsl/ir_clone.cpp
+++ b/src/glsl/ir_clone.cpp
@@ -53,6 +53,18 @@ ir_variable::clone(void *mem_ctx, struct hash_table *ht) 
const
var-origin_upper_left = this-origin_upper_left;
var-pixel_center_integer = this-pixel_center_integer;
var-explicit_location = this-explicit_location;
+
+   var-num_state_slots = this-num_state_slots;
+   if (this-state_slots) {
+  /* FINISHME: This really wants to use something like talloc_reference, 
but
+   * FINISHME: ralloc doesn't have any similar function.
+   */
+  var-state_slots = ralloc_array(var, ir_state_slot,
+ this-num_state_slots);
+  memcpy(var-state_slots, this-state_slots,
+sizeof(this-state_slots[0]) * var-num_state_slots);
+   }
+
if (this-explicit_location)
   var-location = this-location;
 
diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp
index c271525..f357717 100644
--- a/src/glsl/ir_variable.cpp
+++ b/src/glsl/ir_variable.cpp
@@ -327,7 +327,43 @@ static ir_variable *
 add_uniform(exec_list *instructions, glsl_symbol_table *symtab,
const char *name, const glsl_type *type)
 {
-   return add_variable(instructions, symtab, name, type, ir_var_uniform, -1);
+   ir_variable *const uni =
+  add_variable(instructions, symtab, name, type, ir_var_uniform, -1);
+
+   unsigned i;
+   for (i = 0; _mesa_builtin_uniform_desc[i].name != NULL; i++) {
+  if (strcmp(_mesa_builtin_uniform_desc[i].name, name) == 0) {
+break;
+  }
+   }
+
+   assert(_mesa_builtin_uniform_desc[i].name != NULL);
+   const struct gl_builtin_uniform_desc* const statevar =
+  _mesa_builtin_uniform_desc[i];
+
+   const unsigned array_count = type-is_array() ? type-length : 1;
+   uni-num_state_slots = array_count * statevar-num_elements;
+
+   ir_state_slot *slots =
+  ralloc_array(uni, ir_state_slot, uni-num_state_slots);
+
+   uni-state_slots = slots;
+
+   for (unsigned a = 0; a  array_count; a++) {
+  for (unsigned j = 0; j  statevar-num_elements; j++) {
+struct gl_builtin_uniform_element *element = statevar-elements[j];
+
+memcpy(slots-tokens, element-tokens, sizeof(element-tokens));
+if (type-is_array()) {
+   slots-tokens[1] = a;
+}
+
+slots-swizzle = element-swizzle;
+slots++;
+  }
+   }
+
+   return uni;
 }
 
 static void
@@ -341,8 +377,12 @@ add_builtin_variable(exec_list *instructions, 

Mesa (master): glsl: Move _mesa_builtin_uniform_desc from uniforms. c to ir_variable.cpp

2011-03-29 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: 92e412e788931ad464125113a64eec8a8223cda3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=92e412e788931ad464125113a64eec8a8223cda3

Author: Ian Romanick ian.d.roman...@intel.com
Date:   Mon Jan 24 16:55:50 2011 -0800

glsl: Move _mesa_builtin_uniform_desc from uniforms.c to ir_variable.cpp

This array is going to be used in the main compiler soon.  Leaving
them uniforms.c caused problems for building the stand-alone compiler.

Reviewed-by: Eric Anholt e...@anholt.net
Reviewed-by: Chad Versace chad.vers...@intel.com

---

 src/glsl/ir_variable.cpp |  253 ++
 src/mesa/main/uniforms.c |  248 -
 2 files changed, 253 insertions(+), 248 deletions(-)

diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp
index 68d9ab2..c271525 100644
--- a/src/glsl/ir_variable.cpp
+++ b/src/glsl/ir_variable.cpp
@@ -25,6 +25,10 @@
 #include glsl_parser_extras.h
 #include glsl_symbol_table.h
 #include builtin_variables.h
+#include main/uniforms.h
+#include program/prog_parameter.h
+#include program/prog_statevars.h
+#include program/prog_instruction.h
 
 static void generate_ARB_draw_buffers_variables(exec_list *,
struct _mesa_glsl_parse_state *,
@@ -35,6 +39,255 @@ generate_ARB_draw_instanced_variables(exec_list *,
   struct _mesa_glsl_parse_state *,
   bool, _mesa_glsl_parser_targets);
 
+static struct gl_builtin_uniform_element gl_DepthRange_elements[] = {
+   {near, {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_},
+   {far, {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_},
+   {diff, {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_},
+};
+
+static struct gl_builtin_uniform_element gl_ClipPlane_elements[] = {
+   {NULL, {STATE_CLIPPLANE, 0, 0}, SWIZZLE_XYZW}
+};
+
+static struct gl_builtin_uniform_element gl_Point_elements[] = {
+   {size, {STATE_POINT_SIZE}, SWIZZLE_},
+   {sizeMin, {STATE_POINT_SIZE}, SWIZZLE_},
+   {sizeMax, {STATE_POINT_SIZE}, SWIZZLE_},
+   {fadeThresholdSize, {STATE_POINT_SIZE}, SWIZZLE_},
+   {distanceConstantAttenuation, {STATE_POINT_ATTENUATION}, SWIZZLE_},
+   {distanceLinearAttenuation, {STATE_POINT_ATTENUATION}, SWIZZLE_},
+   {distanceQuadraticAttenuation, {STATE_POINT_ATTENUATION}, SWIZZLE_},
+};
+
+static struct gl_builtin_uniform_element gl_FrontMaterial_elements[] = {
+   {emission, {STATE_MATERIAL, 0, STATE_EMISSION}, SWIZZLE_XYZW},
+   {ambient, {STATE_MATERIAL, 0, STATE_AMBIENT}, SWIZZLE_XYZW},
+   {diffuse, {STATE_MATERIAL, 0, STATE_DIFFUSE}, SWIZZLE_XYZW},
+   {specular, {STATE_MATERIAL, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
+   {shininess, {STATE_MATERIAL, 0, STATE_SHININESS}, SWIZZLE_},
+};
+
+static struct gl_builtin_uniform_element gl_BackMaterial_elements[] = {
+   {emission, {STATE_MATERIAL, 1, STATE_EMISSION}, SWIZZLE_XYZW},
+   {ambient, {STATE_MATERIAL, 1, STATE_AMBIENT}, SWIZZLE_XYZW},
+   {diffuse, {STATE_MATERIAL, 1, STATE_DIFFUSE}, SWIZZLE_XYZW},
+   {specular, {STATE_MATERIAL, 1, STATE_SPECULAR}, SWIZZLE_XYZW},
+   {shininess, {STATE_MATERIAL, 1, STATE_SHININESS}, SWIZZLE_},
+};
+
+static struct gl_builtin_uniform_element gl_LightSource_elements[] = {
+   {ambient, {STATE_LIGHT, 0, STATE_AMBIENT}, SWIZZLE_XYZW},
+   {diffuse, {STATE_LIGHT, 0, STATE_DIFFUSE}, SWIZZLE_XYZW},
+   {specular, {STATE_LIGHT, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
+   {position, {STATE_LIGHT, 0, STATE_POSITION}, SWIZZLE_XYZW},
+   {halfVector, {STATE_LIGHT, 0, STATE_HALF_VECTOR}, SWIZZLE_XYZW},
+   {spotDirection, {STATE_LIGHT, 0, STATE_SPOT_DIRECTION},
+MAKE_SWIZZLE4(SWIZZLE_X,
+ SWIZZLE_Y,
+ SWIZZLE_Z,
+ SWIZZLE_Z)},
+   {spotCosCutoff, {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_},
+   {spotCutoff, {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_},
+   {spotExponent, {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_},
+   {constantAttenuation, {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_},
+   {linearAttenuation, {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_},
+   {quadraticAttenuation, {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_},
+};
+
+static struct gl_builtin_uniform_element gl_LightModel_elements[] = {
+   {ambient, {STATE_LIGHTMODEL_AMBIENT, 0}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_FrontLightModelProduct_elements[] 
= {
+   {sceneColor, {STATE_LIGHTMODEL_SCENECOLOR, 0}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_BackLightModelProduct_elements[] = 
{
+   {sceneColor, {STATE_LIGHTMODEL_SCENECOLOR, 1}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_FrontLightProduct_elements[] = {
+   {ambient, {STATE_LIGHTPROD, 0, 0, STATE_AMBIENT}, SWIZZLE_XYZW},
+   {diffuse, {STATE_LIGHTPROD, 0, 0, STATE_DIFFUSE}, SWIZZLE_XYZW},
+   {specular, {STATE_LIGHTPROD, 0, 0, STATE_SPECULAR}, SWIZZLE_XYZW},

Mesa (master): mesa: Fix ugly indentation left from previous commit

2011-03-29 Thread Ian Romanick
Module: Mesa
Branch: master
Commit: a99e80d795f7c6aec0e73369a31d1728577b9727
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a99e80d795f7c6aec0e73369a31d1728577b9727

Author: Ian Romanick ian.d.roman...@intel.com
Date:   Thu Mar 24 18:31:05 2011 -0700

mesa: Fix ugly indentation left from previous commit

Reviewed-by: Eric Anholt e...@anholt.net
Reviewed-by: Chad Versace chad.vers...@intel.com

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |   48 -
 src/mesa/program/ir_to_mesa.cpp  |   31 ++---
 2 files changed, 38 insertions(+), 41 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp 
b/src/mesa/drivers/dri/i965/brw_fs.cpp
index cf05fb4..bea6b18 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -402,31 +402,29 @@ fs_visitor::setup_builtin_uniform_values(ir_variable *ir)
const ir_state_slot *const slots = ir-state_slots;
assert(ir-state_slots != NULL);
 
-   {
-  for (unsigned int i = 0; i  ir-num_state_slots; i++) {
-/* This state reference has already been setup by ir_to_mesa,
- * but we'll get the same index back here.
- */
-int index = _mesa_add_state_reference(this-fp-Base.Parameters,
-  (gl_state_index 
*)slots[i].tokens);
+   for (unsigned int i = 0; i  ir-num_state_slots; i++) {
+  /* This state reference has already been setup by ir_to_mesa, but we'll
+   * get the same index back here.
+   */
+  int index = _mesa_add_state_reference(this-fp-Base.Parameters,
+   (gl_state_index *)slots[i].tokens);
 
-/* Add each of the unique swizzles of the element as a
- * parameter.  This'll end up matching the expected layout of
- * the array/matrix/structure we're trying to fill in.
- */
-int last_swiz = -1;
-for (unsigned int j = 0; j  4; j++) {
-   int swiz = GET_SWZ(slots[i].swizzle, j);
-   if (swiz == last_swiz)
-  break;
-   last_swiz = swiz;
+  /* Add each of the unique swizzles of the element as a parameter.
+   * This'll end up matching the expected layout of the
+   * array/matrix/structure we're trying to fill in.
+   */
+  int last_swiz = -1;
+  for (unsigned int j = 0; j  4; j++) {
+int swiz = GET_SWZ(slots[i].swizzle, j);
+if (swiz == last_swiz)
+   break;
+last_swiz = swiz;
 
-   c-prog_data.param_convert[c-prog_data.nr_params] =
-  PARAM_NO_CONVERT;
-   this-param_index[c-prog_data.nr_params] = index;
-   this-param_offset[c-prog_data.nr_params] = swiz;
-   c-prog_data.nr_params++;
-}
+c-prog_data.param_convert[c-prog_data.nr_params] =
+   PARAM_NO_CONVERT;
+this-param_index[c-prog_data.nr_params] = index;
+this-param_offset[c-prog_data.nr_params] = swiz;
+c-prog_data.nr_params++;
   }
}
 }
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 4cca2b7..bf2513d 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -795,26 +795,25 @@ ir_to_mesa_visitor::visit(ir_variable *ir)
   }
 
 
-  {
-for (unsigned int i = 0; i  ir-num_state_slots; i++) {
-   int index = _mesa_add_state_reference(this-prog-Parameters,
- (gl_state_index 
*)slots[i].tokens);
-
-   if (storage-file == PROGRAM_STATE_VAR) {
-  if (storage-index == -1) {
- storage-index = index;
-  } else {
- assert(index == storage-index + (int)i);
-  }
+  for (unsigned int i = 0; i  ir-num_state_slots; i++) {
+int index = _mesa_add_state_reference(this-prog-Parameters,
+  (gl_state_index 
*)slots[i].tokens);
+
+if (storage-file == PROGRAM_STATE_VAR) {
+   if (storage-index == -1) {
+  storage-index = index;
} else {
-  ir_to_mesa_src_reg src(PROGRAM_STATE_VAR, index, NULL);
-  src.swizzle = slots[i].swizzle;
-  ir_to_mesa_emit_op1(ir, OPCODE_MOV, dst, src);
-  /* even a float takes up a whole vec4 reg in a struct/array. */
-  dst.index++;
+  assert(index == storage-index + (int)i);
}
+} else {
+   ir_to_mesa_src_reg src(PROGRAM_STATE_VAR, index, NULL);
+   src.swizzle = slots[i].swizzle;
+   ir_to_mesa_emit_op1(ir, OPCODE_MOV, dst, src);
+   /* even a float takes up a whole vec4 reg in a struct/array. */
+   dst.index++;
 }
   }
+
   if (storage-file == PROGRAM_TEMPORARY 
  dst.index != storage-index + ir-num_state_slots) {
 fail_link(this-shader_program,


Mesa (master): r600g: implement the pipe_screen fence functions

2011-03-29 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: 948e1eb8e9c166ad5b74abc630d0760768ce78c9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=948e1eb8e9c166ad5b74abc630d0760768ce78c9

Author: Fredrik Höglund fred...@kde.org
Date:   Tue Mar 29 19:43:59 2011 +0200

r600g: implement the pipe_screen fence functions

v2: Allocate the fences from a single shared buffer object.
v3: Allocate the r600_fence structs in blocks of 16.
Spin a few times before calling sched_yield in r600_fence_finish().

---

 src/gallium/drivers/r600/r600.h   |2 +
 src/gallium/drivers/r600/r600_pipe.c  |  145 +
 src/gallium/drivers/r600/r600_pipe.h  |   27 +
 src/gallium/winsys/r600/drm/r600_hw_context.c |   23 
 4 files changed, 197 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index 0b7d6f7..75b8b50 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -288,6 +288,8 @@ void r600_context_queries_suspend(struct r600_context *ctx);
 void r600_context_queries_resume(struct r600_context *ctx);
 void r600_query_predication(struct r600_context *ctx, struct r600_query 
*query, int operation,
int flag_wait);
+void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence,
+ unsigned offset, unsigned value);
 
 int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon);
 void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw 
*draw);
diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 0e28bda..c5fc2ba 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -37,6 +37,7 @@
 #include util/u_memory.h
 #include util/u_inlines.h
 #include util/u_upload_mgr.h
+#include os/os_time.h
 #include pipebuffer/pb_buffer.h
 #include r600.h
 #include r600d.h
@@ -48,15 +49,82 @@
 /*
  * pipe_context
  */
+static struct r600_fence *r600_create_fence(struct r600_pipe_context *ctx)
+{
+   struct r600_fence *fence = NULL;
+
+   if (!ctx-fences.bo) {
+   /* Create the shared buffer object */
+   ctx-fences.bo = r600_bo(ctx-radeon, 4096, 0, 0, 0);
+   if (!ctx-fences.bo) {
+   R600_ERR(r600: failed to create bo for fence 
objects\n);
+   return NULL;
+   }
+   ctx-fences.data = r600_bo_map(ctx-radeon, ctx-fences.bo, 
PB_USAGE_UNSYNCHRONIZED, NULL);
+   }
+
+   if (!LIST_IS_EMPTY(ctx-fences.pool)) {
+   struct r600_fence *entry;
+
+   /* Try to find a freed fence that has been signalled */
+   LIST_FOR_EACH_ENTRY(entry, ctx-fences.pool, head) {
+   if (ctx-fences.data[entry-index] != 0) {
+   LIST_DELINIT(entry-head);
+   fence = entry;
+   break;
+   }
+   }
+   }
+
+   if (!fence) {
+   /* Allocate a new fence */
+   struct r600_fence_block *block;
+   unsigned index;
+
+   if ((ctx-fences.next_index + 1) = 1024) {
+   R600_ERR(r600: too many concurrent fences\n);
+   return NULL;
+   }
+
+   index = ctx-fences.next_index++;
+
+   if (!(index % FENCE_BLOCK_SIZE)) {
+   /* Allocate a new block */
+   block = CALLOC_STRUCT(r600_fence_block);
+   if (block == NULL)
+   return NULL;
+
+   LIST_ADD(block-head, ctx-fences.blocks);
+   } else {
+   block = LIST_ENTRY(struct r600_fence_block, 
ctx-fences.blocks.next, head);
+   }
+
+   fence = block-fences[index % FENCE_BLOCK_SIZE];
+   fence-ctx = ctx;
+   fence-index = index;
+   }
+
+   pipe_reference_init(fence-reference, 1);
+
+   ctx-fences.data[fence-index] = 0;
+   r600_context_emit_fence(ctx-ctx, ctx-fences.bo, fence-index, 1);
+   return fence;
+}
+
 static void r600_flush(struct pipe_context *ctx,
struct pipe_fence_handle **fence)
 {
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+   struct r600_fence **rfence = (struct r600_fence**)fence;
+
 #if 0
static int dc = 0;
char dname[256];
 #endif
 
+   if (rfence)
+   *rfence = r600_create_fence(rctx);
+
if (!rctx-ctx.pm4_cdwords)
return;
 
@@ -112,6 +180,18 @@ static void r600_destroy_context(struct pipe_context 
*context)
u_vbuf_mgr_destroy(rctx-vbuf_mgr);
util_slab_destroy(rctx-pool_transfers);
 
+   if (rctx-fences.bo) {
+   struct r600_fence_block *entry, *tmp;
+

Mesa (master): r600g: implement texture barrier

2011-03-29 Thread Jerome Glisse
Module: Mesa
Branch: master
Commit: d04ab396a54d29948363c3353efa5aaa888076a3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d04ab396a54d29948363c3353efa5aaa888076a3

Author: Fredrik Höglund fred...@kde.org
Date:   Tue Mar 29 19:52:03 2011 +0200

r600g: implement texture barrier

---

 src/gallium/drivers/r600/evergreen_state.c|1 +
 src/gallium/drivers/r600/r600.h   |1 +
 src/gallium/drivers/r600/r600_pipe.h  |2 ++
 src/gallium/drivers/r600/r600_state.c |8 
 src/gallium/winsys/r600/drm/r600_hw_context.c |   17 +
 5 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 7743266..8f93eb8 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -920,6 +920,7 @@ void evergreen_init_state_functions(struct 
r600_pipe_context *rctx)
rctx-context.set_viewport_state = evergreen_set_viewport_state;
rctx-context.sampler_view_destroy = r600_sampler_view_destroy;
rctx-context.redefine_user_buffer = u_default_redefine_user_buffer;
+   rctx-context.texture_barrier = r600_texture_barrier;
 }
 
 void evergreen_init_config(struct r600_pipe_context *rctx)
diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index 75b8b50..4256a7e 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -290,6 +290,7 @@ void r600_query_predication(struct r600_context *ctx, 
struct r600_query *query,
int flag_wait);
 void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence,
  unsigned offset, unsigned value);
+void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags);
 
 int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon);
 void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw 
*draw);
diff --git a/src/gallium/drivers/r600/r600_pipe.h 
b/src/gallium/drivers/r600/r600_pipe.h
index 88aff0e..5b26d1f 100644
--- a/src/gallium/drivers/r600/r600_pipe.h
+++ b/src/gallium/drivers/r600/r600_pipe.h
@@ -298,6 +298,8 @@ void r600_set_constant_buffer(struct pipe_context *ctx, 
uint shader, uint index,
  struct pipe_resource *buffer);
 void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info 
*info);
 
+void r600_texture_barrier(struct pipe_context *ctx);
+
 /*
  * common helpers
  */
diff --git a/src/gallium/drivers/r600/r600_state.c 
b/src/gallium/drivers/r600/r600_state.c
index d3adf03..e202056 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -934,6 +934,13 @@ static void r600_set_framebuffer_state(struct pipe_context 
*ctx,
}
 }
 
+void r600_texture_barrier(struct pipe_context *ctx)
+{
+   struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+   r600_context_flush_all(rctx-ctx, S_0085F0_TC_ACTION_ENA(1));
+}
+
 void r600_init_state_functions(struct r600_pipe_context *rctx)
 {
rctx-context.create_blend_state = r600_create_blend_state;
@@ -974,6 +981,7 @@ void r600_init_state_functions(struct r600_pipe_context 
*rctx)
rctx-context.set_viewport_state = r600_set_viewport_state;
rctx-context.sampler_view_destroy = r600_sampler_view_destroy;
rctx-context.redefine_user_buffer = u_default_redefine_user_buffer;
+   rctx-context.texture_barrier = r600_texture_barrier;
 }
 
 void r600_init_config(struct r600_pipe_context *rctx)
diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c 
b/src/gallium/winsys/r600/drm/r600_hw_context.c
index 48bce81..7f8da12 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -771,6 +771,23 @@ static void rv6xx_context_surface_base_update(struct 
r600_context *ctx,
}
 }
 
+/* Flushes all surfaces */
+void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags)
+{
+   unsigned ndwords = 5;
+
+   if ((ctx-pm4_dirty_cdwords + ndwords + ctx-pm4_cdwords)  
ctx-pm4_ndwords) {
+   /* need to flush */
+   r600_context_flush(ctx);
+   }
+
+   ctx-pm4[ctx-pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, 
ctx-predicate_drawing);
+   ctx-pm4[ctx-pm4_cdwords++] = flush_flags; /* CP_COHER_CNTL */
+   ctx-pm4[ctx-pm4_cdwords++] = 0x;  /* CP_COHER_SIZE */
+   ctx-pm4[ctx-pm4_cdwords++] = 0;   /* CP_COHER_BASE */
+   ctx-pm4[ctx-pm4_cdwords++] = 0x000A;  /* POLL_INTERVAL */
+}
+
 void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
unsigned flush_mask, struct r600_bo *rbo)
 {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org

Mesa (master): nv50,nvc0: implement colour clamping controls

2011-03-29 Thread Christoph Bumiller
Module: Mesa
Branch: master
Commit: 8f060df60d1f5ad63a341e39f2ec5a0c3c452cf5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f060df60d1f5ad63a341e39f2ec5a0c3c452cf5

Author: Christoph Bumiller e0425...@student.tuwien.ac.at
Date:   Tue Mar 29 23:09:02 2011 +0200

nv50,nvc0: implement colour clamping controls

---

 src/gallium/drivers/nv50/nv50_3d.xml.h |2 +-
 src/gallium/drivers/nv50/nv50_context.h|4 ++-
 src/gallium/drivers/nv50/nv50_program.c|2 +-
 src/gallium/drivers/nv50/nv50_screen.c |2 +
 src/gallium/drivers/nv50/nv50_shader_state.c   |   41 +++-
 src/gallium/drivers/nv50/nv50_state.c  |3 ++
 src/gallium/drivers/nv50/nv50_state_validate.c |2 +-
 src/gallium/drivers/nv50/nv50_stateobj.h   |2 +-
 src/gallium/drivers/nvc0/nvc0_screen.c |4 +-
 src/gallium/drivers/nvc0/nvc0_shader_state.c   |2 -
 src/gallium/drivers/nvc0/nvc0_state.c  |4 ++
 src/gallium/drivers/nvc0/nvc0_stateobj.h   |2 +-
 12 files changed, 59 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_3d.xml.h 
b/src/gallium/drivers/nv50/nv50_3d.xml.h
index 9bb3211..92b97dd 100644
--- a/src/gallium/drivers/nv50/nv50_3d.xml.h
+++ b/src/gallium/drivers/nv50/nv50_3d.xml.h
@@ -1673,7 +1673,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
SOFTWARE.
 #define NV50_3D_MAP_SEMANTIC_0_BFC0_ID__SHIFT  8
 #define NV50_3D_MAP_SEMANTIC_0_COLR_NR__MASK   0x00ff
 #define NV50_3D_MAP_SEMANTIC_0_COLR_NR__SHIFT  16
-#define NV50_3D_MAP_SEMANTIC_0_CLMP_EN 0xff00
+#define NV50_3D_MAP_SEMANTIC_0_CLMP_EN 0x0100
 
 #define NV50_3D_MAP_SEMANTIC_1 0x1908
 #define NV50_3D_MAP_SEMANTIC_1_CLIP_START__MASK
0x00ff
diff --git a/src/gallium/drivers/nv50/nv50_context.h 
b/src/gallium/drivers/nv50/nv50_context.h
index 46e6c22..f480f04 100644
--- a/src/gallium/drivers/nv50/nv50_context.h
+++ b/src/gallium/drivers/nv50/nv50_context.h
@@ -80,6 +80,8 @@ struct nv50_context {
   uint32_t instance_elts; /* bitmask of per-instance elements */
   uint32_t instance_base;
   uint32_t interpolant_ctrl;
+  uint32_t semantic_color;
+  uint32_t semantic_psize;
   int32_t index_bias;
   boolean prim_restart;
   boolean point_sprite;
@@ -183,7 +185,7 @@ void nv50_fragprog_validate(struct nv50_context *);
 void nv50_fp_linkage_validate(struct nv50_context *);
 void nv50_gp_linkage_validate(struct nv50_context *);
 void nv50_constbufs_validate(struct nv50_context *);
-void nv50_sprite_coords_validate(struct nv50_context *);
+void nv50_validate_derived_rs(struct nv50_context *);
 
 /* nv50_state.c */
 extern void nv50_init_state_functions(struct nv50_context *);
diff --git a/src/gallium/drivers/nv50/nv50_program.c 
b/src/gallium/drivers/nv50/nv50_program.c
index a63f9d8..37025a6 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -486,7 +486,7 @@ nv50_fragprog_prepare(struct nv50_translation_info *ti)
   ++nintp;
}
 
-   p-fp.colors = (1  24) | 4; /* CLAMP, FFC0_ID = 4 */
+   p-fp.colors = 4  NV50_3D_MAP_SEMANTIC_0_FFC0_ID__SHIFT; /* after HPOS */
 
for (i = 0; i  p-in_nr; ++i) {
   int j = p-in[i].id;
diff --git a/src/gallium/drivers/nv50/nv50_screen.c 
b/src/gallium/drivers/nv50/nv50_screen.c
index 7690c80..9978d1e 100644
--- a/src/gallium/drivers/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nv50/nv50_screen.c
@@ -108,6 +108,8 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
   return 1;
case PIPE_CAP_MAX_RENDER_TARGETS:
   return 8;
+   case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
+  return 1;
case PIPE_CAP_TIMER_QUERY:
case PIPE_CAP_OCCLUSION_QUERY:
   return 1;
diff --git a/src/gallium/drivers/nv50/nv50_shader_state.c 
b/src/gallium/drivers/nv50/nv50_shader_state.c
index bea9c09..82c346c 100644
--- a/src/gallium/drivers/nv50/nv50_shader_state.c
+++ b/src/gallium/drivers/nv50/nv50_shader_state.c
@@ -226,7 +226,7 @@ nv50_gmtyprog_validate(struct nv50_context *nv50)
OUT_RING  (chan, gp-code_base);
 }
 
-void
+static void
 nv50_sprite_coords_validate(struct nv50_context *nv50)
 {
struct nouveau_channel *chan = nv50-screen-base.channel;
@@ -282,6 +282,39 @@ nv50_sprite_coords_validate(struct nv50_context *nv50)
OUT_RINGp (chan, pntc, 8);
 }
 
+/* Validate state derived from shaders and the rasterizer cso. */
+void
+nv50_validate_derived_rs(struct nv50_context *nv50)
+{
+   struct nouveau_channel *chan = nv50-screen-base.channel;
+   uint32_t color, psize;
+
+   nv50_sprite_coords_validate(nv50);
+
+   if (nv50-dirty  NV50_NEW_FRAGPROG)
+  return;
+   psize = nv50-state.semantic_psize  ~NV50_3D_MAP_SEMANTIC_3_PTSZ_EN__MASK;
+   color = nv50-state.semantic_color  ~NV50_3D_MAP_SEMANTIC_0_CLMP_EN;

Mesa (7.10): st/mesa: Validate state before doing blits.

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: 7.10
Commit: 7fcaf9ae80f82e37b82cfca367428730ebf097d5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7fcaf9ae80f82e37b82cfca367428730ebf097d5

Author: Henri Verbeet hverb...@gmail.com
Date:   Wed Mar 23 21:58:06 2011 +0100

st/mesa: Validate state before doing blits.

Specifically, this ensures things like the front buffer actually exist. This
fixes piglt fbo/fbo-sys-blit and fd.o bug 35483.

Signed-off-by: Henri Verbeet hverb...@gmail.com
(cherry picked from commit 5d7c27f5ec2f30c264dc2d53c4980970b3a13ee5)

---

 src/mesa/state_tracker/st_cb_blit.c |3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_blit.c 
b/src/mesa/state_tracker/st_cb_blit.c
index 06cee52..d9eb806 100644
--- a/src/mesa/state_tracker/st_cb_blit.c
+++ b/src/mesa/state_tracker/st_cb_blit.c
@@ -38,6 +38,7 @@
 #include st_texture.h
 #include st_cb_blit.h
 #include st_cb_fbo.h
+#include st_atom.h
 
 #include util/u_blit.h
 #include util/u_inlines.h
@@ -75,6 +76,8 @@ st_BlitFramebuffer(struct gl_context *ctx,
struct gl_framebuffer *readFB = ctx-ReadBuffer;
struct gl_framebuffer *drawFB = ctx-DrawBuffer;
 
+   st_validate_state(st);
+
if (!_mesa_clip_blit(ctx, srcX0, srcY0, srcX1, srcY1,
 dstX0, dstY0, dstX1, dstY1)) {
   return; /* nothing to draw/blit */

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


Mesa (master): intel: Add IS_GT2 macro for recognizing Sandybridge GT2 systems.

2011-03-29 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: ee8d182426d4ecda7b9f5089d19d36f7de2a4dfe
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ee8d182426d4ecda7b9f5089d19d36f7de2a4dfe

Author: Kenneth Graunke kenn...@whitecape.org
Date:   Tue Mar 29 17:03:22 2011 -0700

intel: Add IS_GT2 macro for recognizing Sandybridge GT2 systems.

Also, refactor IS_GEN6 to use the IS_GT1 and IS_GT2 macros.

---

 src/mesa/drivers/dri/intel/intel_chipset.h |   15 +++
 1 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_chipset.h 
b/src/mesa/drivers/dri/intel/intel_chipset.h
index 4ff9140..a3f40ef 100644
--- a/src/mesa/drivers/dri/intel/intel_chipset.h
+++ b/src/mesa/drivers/dri/intel/intel_chipset.h
@@ -125,18 +125,17 @@
 /* Compat macro for intel_decode.c */
 #define IS_IRONLAKE(devid) IS_GEN5(devid)
 
-#define IS_GEN6(devid) (devid == PCI_CHIP_SANDYBRIDGE_GT1 || \
-devid == PCI_CHIP_SANDYBRIDGE_GT2 || \
-devid == PCI_CHIP_SANDYBRIDGE_GT2_PLUS || \
-devid == PCI_CHIP_SANDYBRIDGE_M_GT1 || \
-devid == PCI_CHIP_SANDYBRIDGE_M_GT2 || \
-devid == PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS || \
-devid == PCI_CHIP_SANDYBRIDGE_S)
-
 #define IS_GT1(devid)  (devid == PCI_CHIP_SANDYBRIDGE_GT1 || \
 devid == PCI_CHIP_SANDYBRIDGE_M_GT1 || \
 devid == PCI_CHIP_SANDYBRIDGE_S)
 
+#define IS_GT2(devid)  (devid == PCI_CHIP_SANDYBRIDGE_GT2 || \
+devid == PCI_CHIP_SANDYBRIDGE_GT2_PLUS || \
+devid == PCI_CHIP_SANDYBRIDGE_M_GT2 || \
+devid == PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS)
+
+#define IS_GEN6(devid) (IS_GT1(devid) || IS_GT2(devid))
+
 #define IS_965(devid)  (IS_GEN4(devid) || \
 IS_G4X(devid) || \
 IS_GEN5(devid) || \

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


Mesa (7.9): u_blitter: remove invalid assertion

2011-03-29 Thread Marek Olšák
Module: Mesa
Branch: 7.9
Commit: e3dcb53e6e7f27cd34ef109cc1120b60461d6e42
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e3dcb53e6e7f27cd34ef109cc1120b60461d6e42

Author: Marek Olšák mar...@gmail.com
Date:   Wed Mar 30 02:19:32 2011 +0200

u_blitter: remove invalid assertion

---

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

diff --git a/src/gallium/auxiliary/util/u_blitter.c 
b/src/gallium/auxiliary/util/u_blitter.c
index 7a16187..485d3c9 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -741,8 +741,6 @@ void util_blitter_copy_region(struct blitter_context 
*blitter,
if (dst == src) {
   assert(!is_overlap(srcx, srcx + width, srcy, srcy + height,
  dstx, dstx + width, dsty, dsty + height));
-   } else {
-  assert(dst-format == src-format);
}
assert(src-target  PIPE_MAX_TEXTURE_TYPES);
 

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


Mesa (7.10): st/dri: Fix surfaceless gl using contexts with previous bound surfaces

2011-03-29 Thread Jakob Bornecrantz
Module: Mesa
Branch: 7.10
Commit: 71b06c63ce4a5f58ceb72725d8320bc735997241
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=71b06c63ce4a5f58ceb72725d8320bc735997241

Author: Benjamin Franzke benjaminfran...@googlemail.com
Date:   Wed Feb  9 20:42:50 2011 +0100

st/dri: Fix surfaceless gl using contexts with previous bound surfaces

ctx-dPriv might be != NULL then draw which is NULL is accessed:

struct dri_drawable *draw = dri_drawable(driDrawPriv);
[..]
if (ctx-dPriv != driDrawPriv) {
  ctx-dPriv = driDrawPriv;
  draw-texture_stamp = driDrawPriv-lastStamp - 1;
}

Cherry-picked from 0acb31be171f01aec8b38ceaddf47b7da6dae2a0

Signed-off-by: Jakob Bornecrantz wallbra...@gmail.com

---

 .../state_trackers/dri/common/dri_context.c|8 ++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/dri/common/dri_context.c 
b/src/gallium/state_trackers/dri/common/dri_context.c
index aef1892..fc68ee1 100644
--- a/src/gallium/state_trackers/dri/common/dri_context.c
+++ b/src/gallium/state_trackers/dri/common/dri_context.c
@@ -175,6 +175,11 @@ dri_make_current(__DRIcontext * cPriv,
 
++ctx-bind_count;
 
+   if (!driDrawPriv  !driReadPriv)
+  return ctx-stapi-make_current(ctx-stapi, ctx-st, NULL, NULL);
+   else if (!driDrawPriv || !driReadPriv)
+  return GL_FALSE;
+
draw-context = ctx;
if (ctx-dPriv != driDrawPriv) {
   ctx-dPriv = driDrawPriv;
@@ -186,8 +191,7 @@ dri_make_current(__DRIcontext * cPriv,
   read-texture_stamp = driReadPriv-lastStamp - 1;
}
 
-   ctx-stapi-make_current(ctx-stapi, ctx-st,
- (draw) ? draw-base : NULL, (read) ? read-base : NULL);
+   ctx-stapi-make_current(ctx-stapi, ctx-st, draw-base, read-base);
 
return GL_TRUE;
 }

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