Mesa (master): i915g: Implement sRGB textures

2012-06-27 Thread Stephane Marchesin
Module: Mesa
Branch: master
Commit: 45fc069600ddbfe07a0a0cd5280161a8c7c55dd0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=45fc069600ddbfe07a0a0cd5280161a8c7c55dd0

Author: Stéphane Marchesin marc...@chromium.org
Date:   Mon Jun 25 19:45:56 2012 -0700

i915g: Implement sRGB textures

Since we don't have them in hw we emulate them in the shader. Although not
recommended by the spec it is legit.

As a side effect we also get GL 2.1. I think this is as far as we can take
the i915.

---

 src/gallium/drivers/i915/i915_context.h   |2 +
 src/gallium/drivers/i915/i915_screen.c|5 +-
 src/gallium/drivers/i915/i915_state_emit.c|  128 +++--
 src/gallium/drivers/i915/i915_state_sampler.c |3 +
 src/gallium/drivers/i915/i915_state_static.c  |2 +-
 5 files changed, 128 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/i915/i915_context.h 
b/src/gallium/drivers/i915/i915_context.h
index b019c9f..16b0c57 100644
--- a/src/gallium/drivers/i915/i915_context.h
+++ b/src/gallium/drivers/i915/i915_context.h
@@ -155,6 +155,8 @@ struct i915_state
unsigned sampler[I915_TEX_UNITS][3];
unsigned sampler_enable_flags;
unsigned sampler_enable_nr;
+   boolean sampler_srgb[I915_TEX_UNITS];
+   int srgb_const_offset;
 
/* texture image buffers */
unsigned texbuffer[I915_TEX_UNITS][2];
diff --git a/src/gallium/drivers/i915/i915_screen.c 
b/src/gallium/drivers/i915/i915_screen.c
index 9f29339..ff35203 100644
--- a/src/gallium/drivers/i915/i915_screen.c
+++ b/src/gallium/drivers/i915/i915_screen.c
@@ -110,7 +110,9 @@ i915_get_shader_param(struct pipe_screen *screen, unsigned 
shader, enum pipe_sha
 return PIPE_MAX_VERTEX_SAMPLERS;
  else
 return 0;
-  default:
+  case PIPE_SHADER_CAP_INTEGERS:
+ return 1;
+   default:
  return draw_get_shader_param(shader, cap);
   }
case PIPE_SHADER_FRAGMENT:
@@ -290,6 +292,7 @@ i915_is_format_supported(struct pipe_screen *screen,
 {
static const enum pipe_format tex_supported[] = {
   PIPE_FORMAT_B8G8R8A8_UNORM,
+  PIPE_FORMAT_B8G8R8A8_SRGB,
   PIPE_FORMAT_B8G8R8X8_UNORM,
   PIPE_FORMAT_R8G8B8A8_UNORM,
   PIPE_FORMAT_R8G8B8X8_UNORM,
diff --git a/src/gallium/drivers/i915/i915_state_emit.c 
b/src/gallium/drivers/i915/i915_state_emit.c
index 8ab8fb8..ac99979 100644
--- a/src/gallium/drivers/i915/i915_state_emit.c
+++ b/src/gallium/drivers/i915/i915_state_emit.c
@@ -30,6 +30,7 @@
 #include i915_context.h
 #include i915_batch.h
 #include i915_debug.h
+#include i915_fpc.h
 #include i915_resource.h
 
 #include pipe/p_context.h
@@ -313,11 +314,42 @@ emit_sampler(struct i915_context *i915)
}
 }
 
+static boolean is_tex_instruction(uint32_t* instruction)
+{
+   uint32_t op = instruction[0] 0xFF00;
+   return ( (op == T0_TEXLD) ||
+(op == T0_TEXLDP) ||
+(op == T0_TEXLDB));
+}
+
+static uint32_t tex_sampler(uint32_t* instruction)
+{
+   return ( instruction[0]  T0_SAMPLER_NR_MASK);
+}
+
+static uint additional_constants(struct i915_context *i915)
+{
+   int i;
+
+   for (i = 0 ; i  i915-fs-program_len; i+=3) {
+  if ( is_tex_instruction(i915-fs-program + i)) {
+   int sampler = tex_sampler(i915-fs-program + i);
+   assert(sampler  I915_TEX_UNITS);
+   if ( i915-current.sampler_srgb[sampler] )
+  return 1;
+  }
+   }
+   return 0;
+}
+
 static void
 validate_constants(struct i915_context *i915, unsigned *batch_space)
 {
-   *batch_space = i915-fs-num_constants ?
+   int nr = i915-fs-num_constants ?
   2 + 4*i915-fs-num_constants : 0;
+
+   nr += 4*additional_constants(i915);
+   *batch_space = nr;
 }
 
 static void
@@ -326,8 +358,11 @@ emit_constants(struct i915_context *i915)
/* Collate the user-defined constants with the fragment shader's
 * immediates according to the constant_flags[] array.
 */
-   const uint nr = i915-fs-num_constants;
+   const uint nr = i915-fs-num_constants + additional_constants(i915);
+
+   assert(nr  I915_MAX_CONSTANT);
if (nr) {
+  const float srgb_constants[4] = {1.0/1.055, 0.055/1.055, 2.4, 0.0822};
   uint i;
 
   OUT_BATCH( _3DSTATE_PIXEL_SHADER_CONSTANTS | (nr * 4) );
@@ -340,9 +375,16 @@ emit_constants(struct i915_context *i915)
 c = (uint *) 
i915_buffer(i915-constants[PIPE_SHADER_FRAGMENT])-data;
 c += 4 * i;
  }
- else {
+ else if (i  i915-fs-num_constants) {
 /* emit program constant */
 c = (uint *) i915-fs-constants[i];
+ } else {
+/* emit constants for sRGB */
+
+/* save const position in context for use in shader emit */
+i915-current.srgb_const_offset = i;
+
+c = (uint *) srgb_constants;
  }
 #if 0 /* debug */
  {
@@ -363,18 +405,74 @@ emit_constants(struct i915_context *i915)
 static void
 validate_program(struct i915_context *i915, 

Mesa (master): gallivm: Added a generic lp_build_print_value which prints a LLVMValueRef.

2012-06-27 Thread Jose Fonseca
Module: Mesa
Branch: master
Commit: 789436f1e07a68b632937d9f2101efc5e68f7499
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=789436f1e07a68b632937d9f2101efc5e68f7499

Author: James Benton jben...@vmware.com
Date:   Tue Jun 26 15:00:14 2012 +0100

gallivm: Added a generic lp_build_print_value which prints a LLVMValueRef.

Updated lp_build_printf to share common code.
Removed specific lp_build_print_vecX.

Reviewed-by: José Fonseca jfons...@vmware.com
Reviewed-by: Brian Paul bri...@vmware.com

---

 src/gallium/auxiliary/gallivm/lp_bld_printf.c |  221 +
 src/gallium/auxiliary/gallivm/lp_bld_printf.h |   13 +-
 2 files changed, 117 insertions(+), 117 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_printf.c 
b/src/gallium/auxiliary/gallivm/lp_bld_printf.c
index 5e359ce..16ef25a 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_printf.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_printf.c
@@ -34,151 +34,158 @@
 #include lp_bld_init.h
 #include lp_bld_const.h
 #include lp_bld_printf.h
+#include lp_bld_type.h
 
 
-static int
-lp_get_printf_arg_count(const char *fmt)
-{
-   int count =0;
-   const char *p = fmt;
-   int c;
-
-   while ((c = *p++)) {
-  if (c != '%')
- continue;
-  switch (*p) {
- case '\0':
-   continue;
- case '%':
-   p++;
-   continue;
-case '.':
-   if (p[1] == '*'  p[2] == 's') {
-  count += 2;
-  p += 3;
-   continue;
-   }
-   /* fallthrough */
-default:
-   count ++;
-  }
-   }
-   return count;
-}
-
 /**
- * lp_build_printf.
- *
- * Build printf call in LLVM IR. The output goes to stdout.
- * The additional variable arguments need to have type
- * LLVMValueRef.
+ * Generates LLVM IR to call debug_printf.
  */
-LLVMValueRef
-lp_build_printf(struct gallivm_state *gallivm, const char *fmt, ...)
+static LLVMValueRef
+lp_build_print_args(struct gallivm_state* gallivm,
+int argcount,
+LLVMValueRef* args)
 {
-   va_list arglist;
-   int i = 0;
-   int argcount = lp_get_printf_arg_count(fmt);
LLVMBuilderRef builder = gallivm-builder;
LLVMContextRef context = gallivm-context;
-   LLVMValueRef params[50];
-   LLVMValueRef fmtarg = lp_build_const_string(gallivm, fmt);
-   LLVMTypeRef printf_type;
LLVMValueRef func_printf;
+   LLVMTypeRef printf_type;
+   int i;
 
-   assert(Elements(params) = argcount + 1);
-
-   printf_type = LLVMFunctionType(LLVMIntTypeInContext(context, 32), NULL, 0, 
1);
-
-   func_printf = lp_build_const_int_pointer(gallivm, 
func_to_pointer((func_pointer)debug_printf));
-
-   func_printf = LLVMBuildBitCast(gallivm-builder, func_printf,
-  LLVMPointerType(printf_type, 0),
-  debug_printf);
+   assert(args);
+   assert(argcount  0);
+   assert(LLVMTypeOf(args[0]) == 
LLVMPointerType(LLVMInt8TypeInContext(context), 0));
 
-   params[0] = fmtarg;
+   /* Cast any float arguments to doubles as printf expects */
+   for (i = 1; i  argcount; i++) {
+  LLVMTypeRef type = LLVMTypeOf(args[i]);
 
-   va_start(arglist, fmt);
-   for (i = 1; i = argcount; i++) {
-  LLVMValueRef val = va_arg(arglist, LLVMValueRef);
-  LLVMTypeRef type = LLVMTypeOf(val);
-  /* printf wants doubles, so lets convert so that
-   * we can actually print them */
   if (LLVMGetTypeKind(type) == LLVMFloatTypeKind)
- val = LLVMBuildFPExt(builder, val, LLVMDoubleTypeInContext(context), 
);
-  params[i] = val;
+ args[i] = LLVMBuildFPExt(builder, args[i], 
LLVMDoubleTypeInContext(context), );
}
-   va_end(arglist);
 
-   return LLVMBuildCall(builder, func_printf, params, argcount + 1, );
-}
+   printf_type = LLVMFunctionType(LLVMInt32TypeInContext(context), NULL, 0, 1);
+   func_printf = lp_build_const_int_pointer(gallivm, 
func_to_pointer((func_pointer)debug_printf));
+   func_printf = LLVMBuildBitCast(builder, func_printf, 
LLVMPointerType(printf_type, 0), debug_printf);
 
+   return LLVMBuildCall(builder, func_printf, args, argcount, );
+}
 
 
 /**
- * Print a float[4] vector.
+ * Print a LLVM value of any type
  */
 LLVMValueRef
-lp_build_print_vec4(struct gallivm_state *gallivm,
-const char *msg, LLVMValueRef vec)
+lp_build_print_value(struct gallivm_state *gallivm,
+ const char *msg,
+ LLVMValueRef value)
 {
LLVMBuilderRef builder = gallivm-builder;
-   char format[1000];
-   LLVMValueRef x, y, z, w;
+   LLVMTypeKind type_kind;
+   LLVMTypeRef type_ref;
+   LLVMValueRef params[2 + LP_MAX_VECTOR_LENGTH];
+   char type_fmt[4] =  %x;
+   char format[2 + 3 * LP_MAX_VECTOR_LENGTH + 2] = %s;
+   unsigned length;
+   unsigned i;
+
+   type_ref = LLVMTypeOf(value);
+   type_kind = LLVMGetTypeKind(type_ref);
+
+   if (type_kind == LLVMVectorTypeKind) {
+  length = LLVMGetVectorSize(type_ref);
+
+  

Mesa (master): gallium/util: Fix parsing of options with underscore.

2012-06-27 Thread Jose Fonseca
Module: Mesa
Branch: master
Commit: d1c5ea9207c5ce036fda123430c40364ab8de5af
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d1c5ea9207c5ce036fda123430c40364ab8de5af

Author: José Fonseca jfons...@vmware.com
Date:   Wed Jun 27 11:15:53 2012 +0100

gallium/util: Fix parsing of options with underscore.

For example

  GALLIVM_DEBUG=no_brilinear

which was being parsed as two options, no and brilinear.

---

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

diff --git a/src/gallium/auxiliary/util/u_debug.c 
b/src/gallium/auxiliary/util/u_debug.c
index 0a350ca..bf98f22 100644
--- a/src/gallium/auxiliary/util/u_debug.c
+++ b/src/gallium/auxiliary/util/u_debug.c
@@ -204,7 +204,7 @@ static boolean str_has_option(const char *str, const char 
*name)
* we compare 'start' up to 'str-1' with 'name'. */
 
   while (1) {
- if (!*str || !isalnum(*str)) {
+ if (!*str || !(isalnum(*str) || *str == '_')) {
 if (str-start == name_len 
 !memcmp(start, name, name_len)) {
return TRUE;

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


Mesa (master): mesa: re-order, update comments on lighting-related structs

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: b114ff3783c1aff636c4293eccfc9e04b802d3bf
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b114ff3783c1aff636c4293eccfc9e04b802d3bf

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 14:47:19 2012 -0600

mesa: re-order, update comments on lighting-related structs

---

 src/mesa/main/mtypes.h |   50 
 1 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index f18b81e..8572b5f 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -630,6 +630,26 @@ struct gl_config
 
 
 /**
+ * Material state.
+ */
+struct gl_material
+{
+   GLfloat Attrib[MAT_ATTRIB_MAX][4];
+};
+
+
+/**
+ * Light state flags.
+ */
+/*@{*/
+#define LIGHT_SPOT 0x1
+#define LIGHT_LOCAL_VIEWER 0x2
+#define LIGHT_POSITIONAL   0x4
+#define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER)
+/*@}*/
+
+
+/**
  * Light source state.
  */
 struct gl_light
@@ -654,7 +674,7 @@ struct gl_light
 * \name Derived fields
 */
/*@{*/
-   GLbitfield _Flags;  /** State */
+   GLbitfield _Flags;  /** Mask of LIGHT_x bits defined above */
 
GLfloat _Position[4];   /** position in eye/obj coordinates */
GLfloat _VP_inf_norm[3];/** Norm direction to infinite light */
@@ -683,15 +703,6 @@ struct gl_lightmodel
 
 
 /**
- * Material state.
- */
-struct gl_material
-{
-   GLfloat Attrib[MAT_ATTRIB_MAX][4];
-};
-
-
-/**
  * Accumulation buffer attribute group (GL_ACCUM_BUFFER_BIT)
  */
 struct gl_accum_attrib
@@ -912,16 +923,6 @@ struct gl_hint_attrib
GLenum FragmentShaderDerivative; /** GL_ARB_fragment_shader */
 };
 
-/**
- * Light state flags.
- */
-/*@{*/
-#define LIGHT_SPOT 0x1
-#define LIGHT_LOCAL_VIEWER 0x2
-#define LIGHT_POSITIONAL   0x4
-#define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER)
-/*@}*/
-
 
 /**
  * Lighting attribute group (GL_LIGHT_BIT).
@@ -932,11 +933,10 @@ struct gl_light_attrib
struct gl_lightmodel Model; /** Lighting model */
 
/**
-* Must flush FLUSH_VERTICES before referencing:
+* Front and back material values.
+* Note: must call FLUSH_VERTICES() before using.
 */
-   /*@{*/
-   struct gl_material Material;/** Includes front  back values */
-   /*@}*/
+   struct gl_material Material;
 
GLboolean Enabled;  /** Lighting enabled flag */
GLenum ShadeModel;  /** GL_FLAT or GL_SMOOTH */
@@ -945,7 +945,7 @@ struct gl_light_attrib
GLenum ColorMaterialMode;   /** GL_AMBIENT, GL_DIFFUSE, etc */
GLbitfield ColorMaterialBitmask;/** bitmask formed from Face and Mode 
*/
GLboolean ColorMaterialEnabled;
-   GLenum ClampVertexColor;
+   GLenum ClampVertexColor; /** GL_TRUE, GL_FALSE, GL_FIXED_ONLY 
*/
GLboolean _ClampVertexColor;
 
struct gl_light EnabledList; /** List sentinel */

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


Mesa (master): mesa: rename ColorMaterialBitmask to _ColorMaterialBitmask

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 4cb3579e52fed48d623698610e31d05ac8c8946f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4cb3579e52fed48d623698610e31d05ac8c8946f

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 14:47:19 2012 -0600

mesa: rename ColorMaterialBitmask to _ColorMaterialBitmask

Since it's a derived field.

---

 src/mesa/drivers/dri/nouveau/nv10_state_tnl.c |4 ++--
 src/mesa/drivers/dri/nouveau/nv20_state_tnl.c |4 ++--
 src/mesa/drivers/dri/r200/r200_state.c|4 ++--
 src/mesa/drivers/dri/radeon/radeon_state.c|8 
 src/mesa/main/ffvertex_prog.c |2 +-
 src/mesa/main/light.c |   10 +-
 src/mesa/main/mtypes.h|2 +-
 src/mesa/tnl/t_vb_light.c |4 ++--
 src/mesa/vbo/vbo_exec_api.c   |2 +-
 src/mesa/x86/gen_matypes.c|2 +-
 10 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c 
b/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
index a239f88..06155fe 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tnl.c
@@ -57,7 +57,7 @@ void
 nv10_emit_color_material(struct gl_context *ctx, int emit)
 {
struct nouveau_pushbuf *push = context_push(ctx);
-   unsigned mask = get_material_bitmask(ctx-Light.ColorMaterialBitmask);
+   unsigned mask = get_material_bitmask(ctx-Light._ColorMaterialBitmask);
 
BEGIN_NV04(push, NV10_3D(COLOR_MATERIAL), 1);
PUSH_DATA (push, ctx-Light.ColorMaterialEnabled ? mask : 0);
@@ -313,7 +313,7 @@ nv10_emit_light_source(struct gl_context *ctx, int emit)
 
 #define USE_COLOR_MATERIAL(attr)   \
(ctx-Light.ColorMaterialEnabled  \
-ctx-Light.ColorMaterialBitmask  (1  MAT_ATTRIB_FRONT_##attr))
+ctx-Light._ColorMaterialBitmask  (1  MAT_ATTRIB_FRONT_##attr))
 
 void
 nv10_emit_material_ambient(struct gl_context *ctx, int emit)
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c 
b/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
index 181f3fe..1d3d83d 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_tnl.c
@@ -89,7 +89,7 @@ void
 nv20_emit_color_material(struct gl_context *ctx, int emit)
 {
struct nouveau_pushbuf *push = context_push(ctx);
-   unsigned mask = get_material_bitmask(ctx-Light.ColorMaterialBitmask);
+   unsigned mask = get_material_bitmask(ctx-Light._ColorMaterialBitmask);
 
BEGIN_NV04(push, NV20_3D(COLOR_MATERIAL), 1);
PUSH_DATA (push, ctx-Light.ColorMaterialEnabled ? mask : 0);
@@ -229,7 +229,7 @@ nv20_emit_light_source(struct gl_context *ctx, int emit)
 
 #define USE_COLOR_MATERIAL(attr, side) \
(ctx-Light.ColorMaterialEnabled  \
-ctx-Light.ColorMaterialBitmask  (1  MAT_ATTRIB_##attr(side)))
+ctx-Light._ColorMaterialBitmask  (1  MAT_ATTRIB_##attr(side)))
 
 void
 nv20_emit_material_ambient(struct gl_context *ctx, int emit)
diff --git a/src/mesa/drivers/dri/r200/r200_state.c 
b/src/mesa/drivers/dri/r200/r200_state.c
index 0f7b564..1c33517 100644
--- a/src/mesa/drivers/dri/r200/r200_state.c
+++ b/src/mesa/drivers/dri/r200/r200_state.c
@@ -897,7 +897,7 @@ static void r200ColorMaterial( struct gl_context *ctx, 
GLenum face, GLenum mode
   (0xf  R200_BACK_SPECULAR_SOURCE_SHIFT));
 
if (ctx-Light.ColorMaterialEnabled) {
-  GLuint mask = ctx-Light.ColorMaterialBitmask;
+  GLuint mask = ctx-Light._ColorMaterialBitmask;
 
   if (mask  MAT_BIT_FRONT_EMISSION) {
 light_model_ctl1 |= (R200_LM1_SOURCE_VERTEX_COLOR_0 
@@ -995,7 +995,7 @@ void r200UpdateMaterial( struct gl_context *ctx )
 
/* Might be possible and faster to update everything unconditionally? */
if (ctx-Light.ColorMaterialEnabled)
-  mask = ~ctx-Light.ColorMaterialBitmask;
+  mask = ~ctx-Light._ColorMaterialBitmask;
 
if (R200_DEBUG  RADEON_STATE)
   fprintf(stderr, %s\n, __FUNCTION__);
diff --git a/src/mesa/drivers/dri/radeon/radeon_state.c 
b/src/mesa/drivers/dri/radeon/radeon_state.c
index 6e2bb5b..d930e76 100644
--- a/src/mesa/drivers/dri/radeon/radeon_state.c
+++ b/src/mesa/drivers/dri/radeon/radeon_state.c
@@ -707,8 +707,8 @@ static void check_twoside_fallback( struct gl_context *ctx )
 
if (ctx-Light.Enabled  ctx-Light.Model.TwoSide) {
   if (ctx-Light.ColorMaterialEnabled 
- (ctx-Light.ColorMaterialBitmask  BACK_MATERIAL_BITS) !=
- ((ctx-Light.ColorMaterialBitmask  FRONT_MATERIAL_BITS)1))
+ (ctx-Light._ColorMaterialBitmask  BACK_MATERIAL_BITS) !=
+ ((ctx-Light._ColorMaterialBitmask  FRONT_MATERIAL_BITS)1))
 fallback = GL_TRUE;
   else {
 for (i = MAT_ATTRIB_FRONT_AMBIENT; i  MAT_ATTRIB_FRONT_INDEXES; 

Mesa (master): mesa: move TEXGEN defines closer to gl_texgen struct

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 86ccd9aaacc5358984faa11c3b94281f0b1a85f9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=86ccd9aaacc5358984faa11c3b94281f0b1a85f9

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 14:47:19 2012 -0600

mesa: move TEXGEN defines closer to gl_texgen struct

---

 src/mesa/main/mtypes.h |   80 
 1 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index f9cec24..d37c1f3 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1181,46 +1181,6 @@ typedef enum
 
 
 /**
- * TexGenEnabled flags.
- */
-/*@{*/
-#define S_BIT 1
-#define T_BIT 2
-#define R_BIT 4
-#define Q_BIT 8
-#define STR_BITS (S_BIT | T_BIT | R_BIT)
-/*@}*/
-
-
-/**
- * Bit flag versions of the corresponding GL_ constants.
- */
-/*@{*/
-#define TEXGEN_SPHERE_MAP0x1
-#define TEXGEN_OBJ_LINEAR0x2
-#define TEXGEN_EYE_LINEAR0x4
-#define TEXGEN_REFLECTION_MAP_NV 0x8
-#define TEXGEN_NORMAL_MAP_NV 0x10
-
-#define TEXGEN_NEED_NORMALS  (TEXGEN_SPHERE_MAP| \
- TEXGEN_REFLECTION_MAP_NV | \
- TEXGEN_NORMAL_MAP_NV)
-#define TEXGEN_NEED_EYE_COORD(TEXGEN_SPHERE_MAP| \
- TEXGEN_REFLECTION_MAP_NV | \
- TEXGEN_NORMAL_MAP_NV | \
- TEXGEN_EYE_LINEAR)
-/*@}*/
-
-
-
-/** Tex-gen enabled for texture unit? */
-#define ENABLE_TEXGEN(unit) (1  (unit))
-
-/** Non-identity texture matrix for texture unit? */
-#define ENABLE_TEXMAT(unit) (1  (unit))
-
-
-/**
  * Texture image state.  Drivers will typically create a subclass of this
  * with extra fields for memory buffers, etc.
  */
@@ -1367,6 +1327,46 @@ struct gl_tex_env_combine_state
 
 
 /**
+ * TexGenEnabled flags.
+ */
+/*@{*/
+#define S_BIT 1
+#define T_BIT 2
+#define R_BIT 4
+#define Q_BIT 8
+#define STR_BITS (S_BIT | T_BIT | R_BIT)
+/*@}*/
+
+
+/**
+ * Bit flag versions of the corresponding GL_ constants.
+ */
+/*@{*/
+#define TEXGEN_SPHERE_MAP0x1
+#define TEXGEN_OBJ_LINEAR0x2
+#define TEXGEN_EYE_LINEAR0x4
+#define TEXGEN_REFLECTION_MAP_NV 0x8
+#define TEXGEN_NORMAL_MAP_NV 0x10
+
+#define TEXGEN_NEED_NORMALS  (TEXGEN_SPHERE_MAP| \
+ TEXGEN_REFLECTION_MAP_NV | \
+ TEXGEN_NORMAL_MAP_NV)
+#define TEXGEN_NEED_EYE_COORD(TEXGEN_SPHERE_MAP| \
+ TEXGEN_REFLECTION_MAP_NV | \
+ TEXGEN_NORMAL_MAP_NV | \
+ TEXGEN_EYE_LINEAR)
+/*@}*/
+
+
+
+/** Tex-gen enabled for texture unit? */
+#define ENABLE_TEXGEN(unit) (1  (unit))
+
+/** Non-identity texture matrix for texture unit? */
+#define ENABLE_TEXMAT(unit) (1  (unit))
+
+
+/**
  * Texture coord generation state.
  */
 struct gl_texgen

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


Mesa (master): mesa: look up enum name for glEnable/Disable errors

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: dcf1dafa9ec93f9300ecffe5bddfd2b131bc218f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dcf1dafa9ec93f9300ecffe5bddfd2b131bc218f

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 14:47:19 2012 -0600

mesa: look up enum name for glEnable/Disable errors

---

 src/mesa/main/enable.c |   11 ++-
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
index d0b4625..c811f2a 100644
--- a/src/mesa/main/enable.c
+++ b/src/mesa/main/enable.c
@@ -161,8 +161,8 @@ client_state(struct gl_context *ctx, GLenum cap, GLboolean 
state)
return;
 
 invalid_enum_error:
-   _mesa_error(ctx, GL_INVALID_ENUM, gl%sClientState(0x%x),
-   state ? Enable : Disable, cap);
+   _mesa_error(ctx, GL_INVALID_ENUM, gl%sClientState(%s),
+   state ? Enable : Disable, _mesa_lookup_enum_by_nr(cap));
 }
 
 
@@ -937,8 +937,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, 
GLboolean state)
return;
 
 invalid_enum_error:
-   _mesa_error(ctx, GL_INVALID_ENUM, gl%s(0x%x),
-   state ? Enable : Disable, cap);
+   _mesa_error(ctx, GL_INVALID_ENUM, gl%s(%s),
+   state ? Enable : Disable, _mesa_lookup_enum_by_nr(cap));
 }
 
 
@@ -1441,6 +1441,7 @@ _mesa_IsEnabled( GLenum cap )
return GL_FALSE;
 
 invalid_enum_error:
-   _mesa_error(ctx, GL_INVALID_ENUM, glIsEnabled(0x%x), (int) cap);
+   _mesa_error(ctx, GL_INVALID_ENUM, glIsEnabled(%s),
+   _mesa_lookup_enum_by_nr(cap));
return GL_FALSE;
 }

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


Mesa (master): mesa: make _mesa_reference_array_object() an inline function

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 8459f4a63aec97847b0e3957ffb82beff94035fa
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8459f4a63aec97847b0e3957ffb82beff94035fa

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 14:47:19 2012 -0600

mesa: make _mesa_reference_array_object() an inline function

As we do for texture objects, buffer objects, etc.

---

 src/mesa/main/arrayobj.c |   11 ++-
 src/mesa/main/arrayobj.h |   12 +++-
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index 4c50066..3439ab6 100644
--- a/src/mesa/main/arrayobj.c
+++ b/src/mesa/main/arrayobj.c
@@ -123,14 +123,15 @@ _mesa_delete_array_object( struct gl_context *ctx, struct 
gl_array_object *obj )
 
 /**
  * Set ptr to arrayObj w/ reference counting.
+ * Note: this should only be called from the _mesa_reference_array_object()
+ * inline function.
  */
 void
-_mesa_reference_array_object(struct gl_context *ctx,
- struct gl_array_object **ptr,
- struct gl_array_object *arrayObj)
+_mesa_reference_array_object_(struct gl_context *ctx,
+  struct gl_array_object **ptr,
+  struct gl_array_object *arrayObj)
 {
-   if (*ptr == arrayObj)
-  return;
+   assert(*ptr != arrayObj);
 
if (*ptr) {
   /* Unreference the old array object */
diff --git a/src/mesa/main/arrayobj.h b/src/mesa/main/arrayobj.h
index 717c791..e5270fa 100644
--- a/src/mesa/main/arrayobj.h
+++ b/src/mesa/main/arrayobj.h
@@ -52,9 +52,19 @@ extern void
 _mesa_delete_array_object( struct gl_context *ctx, struct gl_array_object *obj 
);
 
 extern void
+_mesa_reference_array_object_(struct gl_context *ctx,
+  struct gl_array_object **ptr,
+  struct gl_array_object *arrayObj);
+
+static inline void
 _mesa_reference_array_object(struct gl_context *ctx,
  struct gl_array_object **ptr,
- struct gl_array_object *arrayObj);
+ struct gl_array_object *arrayObj)
+{
+   if (*ptr != arrayObj)
+  _mesa_reference_array_object_(ctx, ptr, arrayObj);
+}
+
 
 extern void
 _mesa_initialize_array_object( struct gl_context *ctx,

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


Mesa (master): mesa: update glxext.h to version 33

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 52dd8961eb02a1a76a8ba658fb8ef2777fee569c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=52dd8961eb02a1a76a8ba658fb8ef2777fee569c

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 14:47:19 2012 -0600

mesa: update glxext.h to version 33

---

 include/GL/glxext.h |   18 +-
 1 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/include/GL/glxext.h b/include/GL/glxext.h
index 3c47dc3..e640ff7 100644
--- a/include/GL/glxext.h
+++ b/include/GL/glxext.h
@@ -6,7 +6,7 @@ extern C {
 #endif
 
 /*
-** Copyright (c) 2007-2010 The Khronos Group Inc.
+** Copyright (c) 2007-2012 The Khronos Group Inc.
 ** 
 ** Permission is hereby granted, free of charge, to any person obtaining a
 ** copy of this software and/or associated documentation files (the
@@ -48,9 +48,9 @@ extern C {
 /*/
 
 /* Header file version number, required by OpenGL ABI for Linux */
-/* glxext.h last updated 2010/08/06 */
+/* glxext.h last updated 2012/02/29 */
 /* Current version at http://www.opengl.org/registry/ */
-#define GLX_GLXEXT_VERSION 32
+#define GLX_GLXEXT_VERSION 33
 
 #ifndef GLX_VERSION_1_3
 #define GLX_WINDOW_BIT 0x0001
@@ -440,6 +440,10 @@ extern C {
 #define GLX_CONTEXT_ES2_PROFILE_BIT_EXT0x0004
 #endif
 
+#ifndef GLX_EXT_swap_control_tear
+#define GLX_LATE_SWAPS_TEAR_EXT0x20F3
+#endif
+
 
 /*/
 
@@ -964,9 +968,9 @@ typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) 
(Display *dpy, GLXVideoC
 #ifndef GLX_EXT_swap_control
 #define GLX_EXT_swap_control 1
 #ifdef GLX_GLXEXT_PROTOTYPES
-extern int glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int 
interval);
+extern void glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int 
interval);
 #endif /* GLX_GLXEXT_PROTOTYPES */
-typedef int ( * PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable 
drawable, int interval);
+typedef void ( * PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable 
drawable, int interval);
 #endif
 
 #ifndef GLX_NV_copy_image
@@ -985,6 +989,10 @@ typedef void ( * PFNGLXCOPYIMAGESUBDATANVPROC) (Display 
*dpy, GLXContext srcCtx,
 #define GLX_NV_multisample_coverage 1
 #endif
 
+#ifndef GLX_EXT_swap_control_tear
+#define GLX_EXT_swap_control_tear 1
+#endif
+
 
 #ifdef __cplusplus
 }

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


Mesa (master): mesa: update glext.h to version 81

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 51b0a0b33ca16599a5972c3e77607284a1b7fb9b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=51b0a0b33ca16599a5972c3e77607284a1b7fb9b

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 14:47:19 2012 -0600

mesa: update glext.h to version 81

---

 include/GL/glext.h |  411 ++--
 1 files changed, 368 insertions(+), 43 deletions(-)

diff --git a/include/GL/glext.h b/include/GL/glext.h
index 113241e..8fce0f6 100644
--- a/include/GL/glext.h
+++ b/include/GL/glext.h
@@ -6,7 +6,7 @@ extern C {
 #endif
 
 /*
-** Copyright (c) 2007-2011 The Khronos Group Inc.
+** Copyright (c) 2007-2012 The Khronos Group Inc.
 ** 
 ** Permission is hereby granted, free of charge, to any person obtaining a
 ** copy of this software and/or associated documentation files (the
@@ -29,9 +29,9 @@ extern C {
 */
 
 /* Header file version number, required by OpenGL ABI for Linux */
-/* glext.h last updated $Date: 2011-08-08 00:34:29 -0700 (Mon, 08 Aug 2011) $ 
*/
+/* glext.h last updated $Date: 2012-04-26 00:59:42 -0700 (Thu, 26 Apr 2012) $ 
*/
 /* Current version at http://www.opengl.org/registry/ */
-#define GL_GLEXT_VERSION 72
+#define GL_GLEXT_VERSION 81
 /* Function declaration macros - to move into glplatform.h */
 
 #if defined(_WIN32)  !defined(APIENTRY)  !defined(__CYGWIN__)  
!defined(__SCITECH_SNAP__)
@@ -516,8 +516,6 @@ extern C {
 #define GL_MINOR_VERSION  0x821C
 #define GL_NUM_EXTENSIONS 0x821D
 #define GL_CONTEXT_FLAGS  0x821E
-#define GL_DEPTH_BUFFER   0x8223
-#define GL_STENCIL_BUFFER 0x8224
 #define GL_COMPRESSED_RED 0x8225
 #define GL_COMPRESSED_RG  0x8226
 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001
@@ -1021,6 +1019,7 @@ extern C {
 /* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */
 /* reuse GL_MAX_VARYING_VECTORS */
 /* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */
+/* reuse GL_RGB565 */
 /* Reuse tokens from ARB_get_program_binary */
 /* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */
 /* reuse GL_PROGRAM_BINARY_LENGTH */
@@ -1884,8 +1883,10 @@ extern C {
 #endif
 
 #ifndef GL_ARB_copy_buffer
-#define GL_COPY_READ_BUFFER   0x8F36
-#define GL_COPY_WRITE_BUFFER  0x8F37
+#define GL_COPY_READ_BUFFER_BINDING   0x8F36
+#define GL_COPY_READ_BUFFER   GL_COPY_READ_BUFFER_BINDING
+#define GL_COPY_WRITE_BUFFER_BINDING  0x8F37
+#define GL_COPY_WRITE_BUFFER  GL_COPY_WRITE_BUFFER_BINDING
 #endif
 
 #ifndef GL_ARB_shader_texture_lod
@@ -2133,8 +2134,10 @@ extern C {
 
 #ifndef GL_ARB_transform_feedback2
 #define GL_TRANSFORM_FEEDBACK 0x8E22
-#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23
-#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_PAUSED  0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED GL_TRANSFORM_FEEDBACK_PAUSED
+#define GL_TRANSFORM_FEEDBACK_ACTIVE  0x8E24
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE GL_TRANSFORM_FEEDBACK_ACTIVE
 #define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
 #endif
 
@@ -2158,6 +2161,7 @@ extern C {
 #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
 #define GL_MAX_VARYING_VECTORS0x8DFC
 #define GL_MAX_FRAGMENT_UNIFORM_VECTORS   0x8DFD
+#define GL_RGB565 0x8D62
 #endif
 
 #ifndef GL_ARB_get_program_binary
@@ -5313,6 +5317,167 @@ extern C {
 #define GL_SCALED_RESOLVE_NICEST_EXT  0x90BB
 #endif
 
+#ifndef GL_NV_path_rendering
+#define GL_PATH_FORMAT_SVG_NV 0x9070
+#define GL_PATH_FORMAT_PS_NV  0x9071
+#define GL_STANDARD_FONT_NAME_NV  0x9072
+#define GL_SYSTEM_FONT_NAME_NV0x9073
+#define GL_FILE_NAME_NV   0x9074
+#define GL_PATH_STROKE_WIDTH_NV   0x9075
+#define GL_PATH_END_CAPS_NV   0x9076
+#define GL_PATH_INITIAL_END_CAP_NV0x9077
+#define GL_PATH_TERMINAL_END_CAP_NV   0x9078
+#define GL_PATH_JOIN_STYLE_NV 0x9079
+#define GL_PATH_MITER_LIMIT_NV0x907A
+#define GL_PATH_DASH_CAPS_NV  0x907B
+#define GL_PATH_INITIAL_DASH_CAP_NV   0x907C
+#define GL_PATH_TERMINAL_DASH_CAP_NV  0x907D
+#define GL_PATH_DASH_OFFSET_NV0x907E
+#define GL_PATH_CLIENT_LENGTH_NV  0x907F
+#define GL_PATH_FILL_MODE_NV  0x9080
+#define GL_PATH_FILL_MASK_NV  0x9081
+#define GL_PATH_FILL_COVER_MODE_NV0x9082
+#define GL_PATH_STROKE_COVER_MODE_NV  0x9083
+#define GL_PATH_STROKE_MASK_NV0x9084
+#define GL_PATH_SAMPLE_QUALITY_NV 0x9085
+#define GL_PATH_STROKE_BOUND_NV   0x9086
+#define GL_PATH_STROKE_OVERSAMPLE_COUNT_NV 0x9087
+#define GL_COUNT_UP_NV0x9088
+#define GL_COUNT_DOWN_NV  0x9089
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV0x908A
+#define GL_CONVEX_HULL_NV 0x908B
+#define GL_MULTI_HULLS_NV 0x908C

Mesa (master): gallium: minor whitespace, comment changes

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 81e2a238bcdaeb71d5a35b5d9e1c425cca8672bc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=81e2a238bcdaeb71d5a35b5d9e1c425cca8672bc

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 14:47:19 2012 -0600

gallium: minor whitespace, comment changes

---

 src/gallium/include/pipe/p_screen.h |4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/src/gallium/include/pipe/p_screen.h 
b/src/gallium/include/pipe/p_screen.h
index b4a7f01..164e54d 100644
--- a/src/gallium/include/pipe/p_screen.h
+++ b/src/gallium/include/pipe/p_screen.h
@@ -50,9 +50,8 @@ extern C {
 #endif
 
 
-/** Opaque type */
+/** Opaque types */
 struct winsys_handle;
-/** Opaque type */
 struct pipe_fence_handle;
 struct pipe_resource;
 struct pipe_surface;
@@ -67,7 +66,6 @@ struct pipe_transfer;
 struct pipe_screen {
void (*destroy)( struct pipe_screen * );
 
-
const char *(*get_name)( struct pipe_screen * );
 
const char *(*get_vendor)( struct pipe_screen * );

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


Mesa (master): softpipe: fix numFragsEmitted debug code

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 098aa5f9abcda3fff1a40666cc8f150f046d8867
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=098aa5f9abcda3fff1a40666cc8f150f046d8867

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 14:47:19 2012 -0600

softpipe: fix numFragsEmitted debug code

---

 src/gallium/drivers/softpipe/sp_setup.c |7 +++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_setup.c 
b/src/gallium/drivers/softpipe/sp_setup.c
index 6b15c87..8cb4fc1 100644
--- a/src/gallium/drivers/softpipe/sp_setup.c
+++ b/src/gallium/drivers/softpipe/sp_setup.c
@@ -163,6 +163,10 @@ clip_emit_quad(struct setup_context *setup, struct 
quad_header *quad)
if (quad-inout.mask) {
   struct softpipe_context *sp = setup-softpipe;
 
+#if DEBUG_FRAGS
+  setup-numFragsEmitted += util_bitcount(quad-inout.mask);
+#endif
+
   sp-quad.first-run( sp-quad.first, quad, 1 );
}
 }
@@ -234,6 +238,9 @@ flush_spans(struct setup_context *setup)
setup-quad[q].inout.mask = quadmask;
setup-quad_ptrs[q] = setup-quad[q];
q++;
+#if DEBUG_FRAGS
+   setup-numFragsEmitted += util_bitcount(quadmask);
+#endif
 }
 mask0 = 2;
 mask1 = 2;

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


Mesa (master): docs/helpwanted: add some useful todo lists

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: d9d84068e76bf1f6dcf578e39636d3100e6348a0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d9d84068e76bf1f6dcf578e39636d3100e6348a0

Author: Andreas Boll andreas.boll@gmail.com
Date:   Tue Jun 26 20:47:05 2012 +0200

docs/helpwanted: add some useful todo lists

Signed-off-by: Brian Paul bri...@vmware.com

---

 docs/helpwanted.html |   13 +
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/docs/helpwanted.html b/docs/helpwanted.html
index cfa057e..6d6058e 100644
--- a/docs/helpwanted.html
+++ b/docs/helpwanted.html
@@ -46,6 +46,19 @@ the latest Mesa code and run tests (such as piglit) then 
report issues to
 the mailing list.
 /ol
 
+p
+You can find some further To-do lists here:
+/p
+ul
+  lia href=http://cgit.freedesktop.org/mesa/mesa/tree/docs/GL3.txt;
+target=_parentbGL3.txt/b/a/li
+  lia 
href=http://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/docs/llvm-todo.txt;
+target=_parentbLLVMpipe - todo/b/a/li
+  lia href=http://dri.freedesktop.org/wiki/MissingFunctionality;
+target=_parentbMissingFunctionality/b/a/li
+  lia href=http://dri.freedesktop.org/wiki/R300ToDo;
+target=_parentbR300ToDo/b/a/li
+/ul
 
 p
 If you want to do something new in Mesa, first join the Mesa developer's

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


Mesa (master): glsl: be more careful about counting varying vars in the linker

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 8fb1e4a4628caee9e80dcbc47f8f9c772db09419
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8fb1e4a4628caee9e80dcbc47f8f9c772db09419

Author: Brian Paul bri...@vmware.com
Date:   Tue Jun 26 13:06:47 2012 -0600

glsl: be more careful about counting varying vars in the linker

Previously, we were counting gl_FrontFacing, gl_FragCoord and gl_PointCoord
against the limit of varying variables.  This prevented some valid shaders
from linking.

The other potential solution to this is to have the driver advertise
more varying vars or set the GLSLSkipStrictMaxVaryingLimitCheck flag.
But the above-mentioned variables aren't conventional varying attributes
so it doesn't seem right to count them.

Reviewed-by: Eric Anholt e...@anholt.net

---

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

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index bdab499..3109447 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -1859,6 +1859,32 @@ assign_varying_location(ir_variable *input_var, 
ir_variable *output_var,
 
 
 /**
+ * Is the given variable a varying variable to be counted against the
+ * limit in ctx-Const.MaxVarying?
+ * This includes variables such as texcoords, colors and generic
+ * varyings, but excludes variables such as gl_FrontFacing and gl_FragCoord.
+ */
+static bool
+is_varying_var(GLenum shaderType, const ir_variable *var)
+{
+   /* Only fragment shaders will take a varying variable as an input */
+   if (shaderType == GL_FRAGMENT_SHADER 
+   var-mode == ir_var_in 
+   var-explicit_location) {
+  switch (var-location) {
+  case FRAG_ATTRIB_WPOS:
+  case FRAG_ATTRIB_FACE:
+  case FRAG_ATTRIB_PNTC:
+ return false;
+  default:
+ return true;
+  }
+   }
+   return false;
+}
+
+
+/**
  * Assign locations for all variables that are produced in one pipeline stage
  * (the producer) and consumed in the next stage (the consumer).
  *
@@ -1966,7 +1992,7 @@ assign_varying_locations(struct gl_context *ctx,
  * value is written by the previous stage.
  */
 var-mode = ir_var_auto;
- } else {
+ } else if (is_varying_var(consumer-Type, var)) {
 /* The packing rules are used for vertex shader inputs are also
  * used for fragment shader inputs.
  */

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


Mesa (master): i965: enable ARB_instanced_arrays extension

2012-06-27 Thread Jordan Justen
Module: Mesa
Branch: master
Commit: 3588098ed85bbd6bacac5a8dd3774569f1314783
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3588098ed85bbd6bacac5a8dd3774569f1314783

Author: Jordan Justen jordan.l.jus...@intel.com
Date:   Sun May 27 10:48:47 2012 -0700

i965: enable ARB_instanced_arrays extension

Set the step_rate value when drawing to implement
ARB_instanced_arrays for gen = 4.

Signed-off-by: Jordan Justen jordan.l.jus...@intel.com
Reviewed-by: Eric Anholt e...@anholt.net

---

 docs/GL3.txt  |2 +-
 src/mesa/drivers/dri/i965/brw_context.h   |4 ++
 src/mesa/drivers/dri/i965/brw_draw.c  |1 +
 src/mesa/drivers/dri/i965/brw_draw_upload.c   |   43 +
 src/mesa/drivers/dri/intel/intel_extensions.c |1 +
 5 files changed, 43 insertions(+), 8 deletions(-)

diff --git a/docs/GL3.txt b/docs/GL3.txt
index 91ede50..36d2472 100644
--- a/docs/GL3.txt
+++ b/docs/GL3.txt
@@ -81,7 +81,7 @@ GL_ARB_shader_bit_encodingDONE
 GL_ARB_texture_rgb10_a2ui DONE (r600)
 GL_ARB_texture_swizzleDONE (same as EXT 
version) (i965, r300, r600, swrast)
 GL_ARB_timer_query~60% done (the EXT 
variant)
-GL_ARB_instanced_arrays   DONE (r300, r600)
+GL_ARB_instanced_arrays   DONE (i965, r300, r600)
 GL_ARB_vertex_type_2_10_10_10_rev DONE (r600)
 
 
diff --git a/src/mesa/drivers/dri/i965/brw_context.h 
b/src/mesa/drivers/dri/i965/brw_context.h
index 69659c4..2c9f5ad 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -676,6 +676,7 @@ struct brw_vertex_buffer {
uint32_t offset;
/** Byte stride between elements in the uploaded array */
GLuint stride;
+   GLuint step_rate;
 };
 struct brw_vertex_element {
const struct gl_client_array *glarray;
@@ -738,6 +739,7 @@ struct brw_context
  uint32_t handle;
  uint32_t offset;
  uint32_t stride;
+ uint32_t step_rate;
   } current_buffers[VERT_ATTRIB_MAX];
 
   struct brw_vertex_element *enabled[VERT_ATTRIB_MAX];
@@ -1046,6 +1048,8 @@ struct brw_context
   bool in_progress;
   bool enable_cut_index;
} prim_restart;
+
+   uint32_t num_instances;
 };
 
 
diff --git a/src/mesa/drivers/dri/i965/brw_draw.c 
b/src/mesa/drivers/dri/i965/brw_draw.c
index 16ce994..1069a63 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -466,6 +466,7 @@ static bool brw_try_draw_prims( struct gl_context *ctx,
   intel_batchbuffer_require_space(intel, estimated_max_prim_size, false);
   intel_batchbuffer_save_state(intel);
 
+  brw-num_instances = prim-num_instances;
   if (intel-gen  6)
 brw_set_prim(brw, prim[i]);
   else
diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c 
b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index cf77837..82dd81d 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -361,6 +361,7 @@ static void brw_prepare_vertices(struct brw_context *brw)
unsigned int min_index = brw-vb.min_index;
unsigned int max_index = brw-vb.max_index;
int delta, i, j;
+   GLboolean can_merge_uploads = GL_TRUE;
 
struct brw_vertex_element *upload[VERT_ATTRIB_MAX];
GLuint nr_uploads = 0;
@@ -403,6 +404,7 @@ static void brw_prepare_vertices(struct brw_context *brw)
const struct gl_client_array *other = brw-vb.enabled[k]-glarray;
if (glarray-BufferObj == other-BufferObj 
glarray-StrideB == other-StrideB 
+   glarray-InstanceDivisor == other-InstanceDivisor 
(uintptr_t)(glarray-Ptr - other-Ptr)  glarray-StrideB)
{
   input-buffer = brw-vb.enabled[k]-buffer;
@@ -420,6 +422,7 @@ static void brw_prepare_vertices(struct brw_context *brw)
drm_intel_bo_reference(buffer-bo);
buffer-offset += (uintptr_t)glarray-Ptr;
buffer-stride = glarray-StrideB;
+   buffer-step_rate = glarray-InstanceDivisor;
 
input-buffer = j++;
input-offset = 0;
@@ -465,8 +468,13 @@ static void brw_prepare_vertices(struct brw_context *brw)
 }
 
 upload[nr_uploads++] = input;
+
 total_size = ALIGN(total_size, type_size);
 total_size += input-element_size;
+
+ if (glarray-InstanceDivisor != 0) {
+can_merge_uploads = GL_FALSE;
+ }
   }
}
 
@@ -504,7 +512,7 @@ static void brw_prepare_vertices(struct brw_context *brw)
 
 nr_uploads = 0;
   }
-  else if (total_size  2048) {
+  else if ((total_size  2048)  can_merge_uploads) {
 /* Upload non-interleaved arrays into a single interleaved array */
 struct brw_vertex_buffer *buffer;
 int 

Mesa (auto-cherry-for-8.0): st/mesa: don't do srgb- linear conversion in decompress_with_blit

2012-06-27 Thread Jakob Bornecrantz
Module: Mesa
Branch: auto-cherry-for-8.0
Commit: 87de3e42c1e357018d2808f91c8306e680783654
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=87de3e42c1e357018d2808f91c8306e680783654

Author: Marek Olšák mar...@gmail.com
Date:   Fri Jun 15 05:13:02 2012 +0200

st/mesa: don't do srgb-linear conversion in decompress_with_blit

This fixes piglit/getteximage-formats on r600g.

NOTE: This is a candidate for stable branches.

Reviewed-by: Brian Paul bri...@vmware.com
(cherry picked from commit 5e7e7d96b341e937d3b795e94ac4a863c357f724)

---

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

diff --git a/src/mesa/state_tracker/st_cb_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index f5bf018..a8e0240 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -639,6 +639,7 @@ decompress_with_blit(struct gl_context * ctx,
 
   u_sampler_view_default_template(sv_temp, stObj-pt, stObj-pt-format);
 
+  sv_temp.format = util_format_linear(sv_temp.format);
   sv_temp.u.tex.first_level =
   sv_temp.u.tex.last_level = texImage-Level;
 

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


Mesa (master): glapi: add const qualifier to glShaderSourceARB() parameter

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 827bdee7d1ec29ce07f35780f7d2262f2fa0acf4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=827bdee7d1ec29ce07f35780f7d2262f2fa0acf4

Author: Brian Paul bri...@vmware.com
Date:   Wed Jun 27 10:23:54 2012 -0600

glapi: add const qualifier to glShaderSourceARB() parameter

Fixes the es2 build with gcc.

Note: in glext.h the prototypes for glShaderSource() and glShaderSourceARB()
disagree:  only the former has the extra const qualifier.

Reviewed-by: José Fonseca jfons...@vmware.com

---

 src/mapi/glapi/gen/gl_API.xml |2 +-
 src/mesa/main/APIspec.xml |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index af05135..2140a40 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -5363,7 +5363,7 @@
 function name=ShaderSource alias=ShaderSourceARB
 param name=shader type=GLuint/
 param name=count type=GLsizei/
-param name=string type=const GLchar **/
+param name=string type=const GLchar * const */
 param name=length type=const GLint */
 glx ignore=true/
 /function
diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml
index 64e666e..f870cf7 100644
--- a/src/mesa/main/APIspec.xml
+++ b/src/mesa/main/APIspec.xml
@@ -2946,7 +2946,7 @@
return type=void/
param name=shader type=GLuint/
param name=count type=GLsizei/
-   param name=string type=const GLchar **/
+   param name=string type=const GLchar * const */
param name=length type=const int */
/proto
 /template

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


Mesa (master): mesa: more const qualifiers to match the latest glext.h

2012-06-27 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 9881bf6e69b52efc1eb57a4027d9a8817ef8cbcb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9881bf6e69b52efc1eb57a4027d9a8817ef8cbcb

Author: Brian Paul bri...@vmware.com
Date:   Wed Jun 27 10:52:55 2012 -0600

mesa: more const qualifiers to match the latest glext.h

For some reason regular gcc on Linux didn't catch these but the mingw
compiler did (generated errors, not warnings).

v2: include the changes in src/mapi/ too

---

 src/mapi/glapi/gen/ARB_debug_output.xml|2 +-
 .../glapi/gen/ARB_draw_elements_base_vertex.xml|2 +-
 src/mapi/glapi/gen/ARB_uniform_buffer_object.xml   |2 +-
 src/mapi/glapi/gen/GL3x.xml|2 +-
 src/mapi/glapi/gen/gl_API.xml  |2 +-
 src/mesa/main/dd.h |2 +-
 src/mesa/main/errors.c |4 ++--
 src/mesa/vbo/vbo_exec_array.c  |5 +++--
 src/mesa/vbo/vbo_noop.c|2 +-
 src/mesa/vbo/vbo_save_api.c|4 ++--
 10 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/mapi/glapi/gen/ARB_debug_output.xml 
b/src/mapi/glapi/gen/ARB_debug_output.xml
index f2877a4..11f268d 100644
--- a/src/mapi/glapi/gen/ARB_debug_output.xml
+++ b/src/mapi/glapi/gen/ARB_debug_output.xml
@@ -72,7 +72,7 @@
 
 function name=DebugMessageCallbackARB offset=assign
 param name=callback type=GLDEBUGPROCARB/
-param name=userParam type=GLvoid */
+param name=userParam type=const GLvoid */
 /function
 
 function name=GetDebugMessageLogARB offset=assign
diff --git a/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml 
b/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
index a697ea5..851f1fa 100644
--- a/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
+++ b/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
@@ -30,7 +30,7 @@
 param name=mode type=GLenum/
 param name=count type=const GLsizei */
 param name=type type=GLenum/
-param name=indices type=const GLvoid **/
+param name=indices type=const GLvoid * const */
 param name=primcount type=GLsizei/
 param name=basevertex type=const GLint */
 /function
diff --git a/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml 
b/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml
index cbcd339..80541a8 100644
--- a/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml
+++ b/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml
@@ -42,7 +42,7 @@
 function name=GetUniformIndices offset=assign
 param name=program type=GLuint /
 param name=uniformCount type=GLsizei /
-param name=uniformNames type=const GLchar ** /
+param name=uniformNames type=const GLchar * const * /
 param name=uniformIndices type=GLuint * /
 /function
 
diff --git a/src/mapi/glapi/gen/GL3x.xml b/src/mapi/glapi/gen/GL3x.xml
index f3d782c..d287ac2 100644
--- a/src/mapi/glapi/gen/GL3x.xml
+++ b/src/mapi/glapi/gen/GL3x.xml
@@ -231,7 +231,7 @@
   function name=TransformFeedbackVaryings 
alias=TransformFeedbackVaryingsEXT
 param name=program type=GLuint/
 param name=count type=GLsizei/
-param name=varyings type=const GLchar* */
+param name=varyings type=const GLchar * const */
 param name=bufferMode type=GLenum/
   /function
 
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index 2140a40..af74c90 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -4677,7 +4677,7 @@
 param name=mode type=GLenum/
 param name=count type=const GLsizei */
 param name=type type=GLenum/
-param name=indices type=const GLvoid **/
+param name=indices type=const GLvoid * const */
 param name=primcount type=GLsizei/
 /function
 
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 5bcf36b..687a38f 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -1024,7 +1024,7 @@ typedef struct {
void (GLAPIENTRYP MultiDrawElementsBaseVertex)( GLenum mode,
   const GLsizei *count,
   GLenum type,
-  const GLvoid **indices,
+  const GLvoid * const 
*indices,
   GLsizei primcount,
   const GLint *basevertex);
void (GLAPIENTRYP DrawArraysInstanced)(GLenum mode, GLint first,
diff --git a/src/mesa/main/errors.c b/src/mesa/main/errors.c
index ef78a0b..8b96319 100644
--- a/src/mesa/main/errors.c
+++ b/src/mesa/main/errors.c
@@ -718,11 +718,11 @@ _mesa_DebugMessageControlARB(GLenum source, GLenum type, 
GLenum severity,
 }
 
 static void GLAPIENTRY
-_mesa_DebugMessageCallbackARB(GLDEBUGPROCARB callback, GLvoid *userParam)

Mesa (master): nv50/ir: make colorful ir dump output optional

2012-06-27 Thread Marcin Ślusarz
Module: Mesa
Branch: master
Commit: 96259b51285469a229c3740c2b467d4455ed0c8d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=96259b51285469a229c3740c2b467d4455ed0c8d

Author: Marcin Slusarz marcin.slus...@gmail.com
Date:   Tue Jun 26 15:02:55 2012 +0200

nv50/ir: make colorful ir dump output optional

---

 src/gallium/drivers/nv50/codegen/nv50_ir_print.cpp |   22 +++
 1 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_print.cpp 
b/src/gallium/drivers/nv50/codegen/nv50_ir_print.cpp
index 9d92b7b..daa0ec6 100644
--- a/src/gallium/drivers/nv50/codegen/nv50_ir_print.cpp
+++ b/src/gallium/drivers/nv50/codegen/nv50_ir_print.cpp
@@ -37,9 +37,8 @@ enum TextStyle
TXT_INSN
 };
 
-static const char *colour[8] =
+static const char *_colour[8] =
 {
-#if 1
\x1b[00m,
\x1b[34m,
\x1b[35m,
@@ -48,11 +47,23 @@ static const char *colour[8] =
\x1b[33m,
\x1b[37m,
\x1b[32m
-#else
-   , , , , , , , 
-#endif
 };
 
+static const char *_nocolour[8] =
+{
+  , , , , , , , 
+};
+
+static const char **colour;
+
+static void init_colours()
+{
+   if (getenv(NV50_PROG_DEBUG_NO_COLORS) != NULL)
+  colour = _nocolour;
+   else
+  colour = _colour;
+}
+
 static const char *OpClassStr[OPCLASS_OTHER + 1] =
 {
MOVE,
@@ -620,6 +631,7 @@ void
 Program::print()
 {
PrintPass pass;
+   init_colours();
pass.run(this, true, false);
 }
 

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


Mesa (master): nv50: streamline screen_create error handling

2012-06-27 Thread Marcin Ślusarz
Module: Mesa
Branch: master
Commit: 0fceaee4fd8f745e71cbc4e1d24520ac7e11c2cd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0fceaee4fd8f745e71cbc4e1d24520ac7e11c2cd

Author: Marcin Slusarz marcin.slus...@gmail.com
Date:   Tue Jun 26 16:22:43 2012 +0200

nv50: streamline screen_create error handling

Remove macro which changes control flow (it's evil).
Make all fail paths print (correct) error message.

---

 src/gallium/drivers/nv50/nv50_screen.c |   84 +--
 1 files changed, 46 insertions(+), 38 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_screen.c 
b/src/gallium/drivers/nv50/nv50_screen.c
index 6c3f69f..873946f 100644
--- a/src/gallium/drivers/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nv50/nv50_screen.c
@@ -310,7 +310,7 @@ nv50_screen_fence_update(struct pipe_screen *pscreen)
return nv50_screen(pscreen)-fence.map[0];
 }
 
-static int
+static void
 nv50_screen_init_hwctx(struct nv50_screen *screen, unsigned tls_space)
 {
struct nouveau_pushbuf *push = screen-base.pushbuf;
@@ -506,17 +506,8 @@ nv50_screen_init_hwctx(struct nv50_screen *screen, 
unsigned tls_space)
PUSH_DATA (push, 1);
 
PUSH_KICK (push);
-
-   return 0;
 }
 
-#define FAIL_SCREEN_INIT(str, err)\
-   do {   \
-  NOUVEAU_ERR(str, err);  \
-  nv50_screen_destroy(pscreen);   \
-  return NULL;\
-   } while(0)
-
 struct pipe_screen *
 nv50_screen_create(struct nouveau_device *dev)
 {
@@ -534,8 +525,10 @@ nv50_screen_create(struct nouveau_device *dev)
pscreen = screen-base.base;
 
ret = nouveau_screen_init(screen-base, dev);
-   if (ret)
-  FAIL_SCREEN_INIT(nouveau_screen_init failed: %d\n, ret);
+   if (ret) {
+  NOUVEAU_ERR(nouveau_screen_init failed: %d\n, ret);
+  goto fail;
+   }
 
/* TODO: Prevent FIFO prefetch before transfer of index buffers and
 *  admit them to VRAM.
@@ -563,8 +556,11 @@ nv50_screen_create(struct nouveau_device *dev)
 
ret = nouveau_bo_new(dev, NOUVEAU_BO_GART | NOUVEAU_BO_MAP, 0, 4096,
 NULL, screen-fence.bo);
-   if (ret)
+   if (ret) {
+  NOUVEAU_ERR(Failed to allocate fence bo: %d\n, ret);
   goto fail;
+   }
+
nouveau_bo_map(screen-fence.bo, 0, NULL);
screen-fence.map = screen-fence.bo-map;
screen-base.fence.emit = nv50_screen_fence_emit;
@@ -573,20 +569,24 @@ nv50_screen_create(struct nouveau_device *dev)
ret = nouveau_object_new(chan, 0xbeef0301, NOUVEAU_NOTIFIER_CLASS,
 (struct nv04_notify){ .length = 32 },
 sizeof(struct nv04_notify), screen-sync);
-   if (ret)
-  FAIL_SCREEN_INIT(Error allocating notifier: %d\n, ret);
-
+   if (ret) {
+  NOUVEAU_ERR(Failed to allocate notifier: %d\n, ret);
+  goto fail;
+   }
 
ret = nouveau_object_new(chan, 0xbeef5039, NV50_M2MF_CLASS,
 NULL, 0, screen-m2mf);
-   if (ret)
-  FAIL_SCREEN_INIT(Error allocating PGRAPH context for M2MF: %d\n, ret);
-
+   if (ret) {
+  NOUVEAU_ERR(Failed to allocate PGRAPH context for M2MF: %d\n, ret);
+  goto fail;
+   }
 
ret = nouveau_object_new(chan, 0xbeef502d, NV50_2D_CLASS,
 NULL, 0, screen-eng2d);
-   if (ret)
-  FAIL_SCREEN_INIT(Error allocating PGRAPH context for 2D: %d\n, ret);
+   if (ret) {
+  NOUVEAU_ERR(Failed to allocate PGRAPH context for 2D: %d\n, ret);
+  goto fail;
+   }
 
switch (dev-chipset  0xf0) {
case 0x50:
@@ -612,21 +612,24 @@ nv50_screen_create(struct nouveau_device *dev)
   }
   break;
default:
-  FAIL_SCREEN_INIT(Not a known NV50 chipset: NV%02x\n, dev-chipset);
-  break;
+  NOUVEAU_ERR(Not a known NV50 chipset: NV%02x\n, dev-chipset);
+  goto fail;
}
screen-base.class_3d = tesla_class;
 
ret = nouveau_object_new(chan, 0xbeef5097, tesla_class,
 NULL, 0, screen-tesla);
-   if (ret)
-  FAIL_SCREEN_INIT(Error allocating PGRAPH context for 3D: %d\n, ret);
-
+   if (ret) {
+  NOUVEAU_ERR(Failed to allocate PGRAPH context for 3D: %d\n, ret);
+  goto fail;
+   }
 
ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM, 1  16,
 3  NV50_CODE_BO_SIZE_LOG2, NULL, screen-code);
-   if (ret)
+   if (ret) {
+  NOUVEAU_ERR(Failed to allocate code bo: %d\n, ret);
   goto fail;
+   }
 
nouveau_heap_init(screen-vp_code_heap, 0, 1  NV50_CODE_BO_SIZE_LOG2);
nouveau_heap_init(screen-gp_code_heap, 0, 1  NV50_CODE_BO_SIZE_LOG2);
@@ -641,8 +644,10 @@ nv50_screen_create(struct nouveau_device *dev)
 
ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM, 1  16, stack_size, NULL,
 screen-stack_bo);
-   if (ret)
-  FAIL_SCREEN_INIT(Failed to allocate stack bo: %d\n, ret);
+   if (ret) {
+  NOUVEAU_ERR(Failed to allocate stack bo: %d\n, ret);
+  goto 

Mesa (master): nv50: dynamically allocate space for shader local storage

2012-06-27 Thread Marcin Ślusarz
Module: Mesa
Branch: master
Commit: 1906d2b46b21a8e7496409e0639d8463ad86dcfe
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1906d2b46b21a8e7496409e0639d8463ad86dcfe

Author: Marcin Slusarz marcin.slus...@gmail.com
Date:   Wed Jun 27 14:45:17 2012 +0200

nv50: dynamically allocate space for shader local storage

Fixes 21 piglit tests:
spec/glsl-1.10/execution/variable-indexing/
fs-temp-array-mat4-index-col-row-wr
vs-temp-array-mat4-index-col-row-wr
vs-temp-array-mat4-index-row-wr

spec/glsl-1.20/execution/variable-indexing/
fs-temp-array-mat3-index-col-row-rd
fs-temp-array-mat3-index-row-rd
fs-temp-array-mat4-col-row-wr
fs-temp-array-mat4-index-col-row-rd
fs-temp-array-mat4-index-col-row-wr
fs-temp-array-mat4-index-row-rd
fs-temp-array-mat4-index-row-wr
vs-temp-array-mat3-index-col-row-rd
vs-temp-array-mat3-index-col-row-wr
vs-temp-array-mat3-index-row-rd
vs-temp-array-mat3-index-row-wr
vs-temp-array-mat4-col-row-wr
vs-temp-array-mat4-index-col-row-rd
vs-temp-array-mat4-index-col-row-wr
vs-temp-array-mat4-index-col-wr
vs-temp-array-mat4-index-row-rd
vs-temp-array-mat4-index-row-wr
vs-temp-array-mat4-index-wr

... and prevents a lot of GPU lockups

---

 src/gallium/drivers/nv50/nv50_context.h  |1 +
 src/gallium/drivers/nv50/nv50_program.c  |7 ++
 src/gallium/drivers/nv50/nv50_program.h  |4 +-
 src/gallium/drivers/nv50/nv50_screen.c   |  107 +-
 src/gallium/drivers/nv50/nv50_screen.h   |7 ++-
 src/gallium/drivers/nv50/nv50_shader_state.c |7 +-
 6 files changed, 108 insertions(+), 25 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_context.h 
b/src/gallium/drivers/nv50/nv50_context.h
index 5da0473..818c3bb 100644
--- a/src/gallium/drivers/nv50/nv50_context.h
+++ b/src/gallium/drivers/nv50/nv50_context.h
@@ -97,6 +97,7 @@ struct nv50_context {
   boolean flushed;
   boolean rasterizer_discard;
   uint8_t tls_required;
+  boolean new_tls_space;
   uint8_t num_vtxbufs;
   uint8_t num_vtxelts;
   uint8_t num_textures[3];
diff --git a/src/gallium/drivers/nv50/nv50_program.c 
b/src/gallium/drivers/nv50/nv50_program.c
index 9c5a080..72d14a6 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -350,6 +350,7 @@ nv50_program_translate(struct nv50_program *prog, uint16_t 
chipset)
prog-code_size = info-bin.codeSize;
prog-fixups = info-bin.relocData;
prog-max_gpr = MAX2(4, (info-bin.maxGPR  1) + 1);
+   prog-tls_space = info-bin.tlsSpace;
 
if (prog-type == PIPE_SHADER_FRAGMENT) {
   if (info-prop.fp.writesDepth) {
@@ -399,6 +400,12 @@ nv50_program_upload_code(struct nv50_context *nv50, struct 
nv50_program *prog)
}
prog-code_base = prog-mem-start;
 
+   ret = nv50_tls_realloc(nv50-screen, prog-tls_space);
+   if (ret  0)
+  return FALSE;
+   if (ret  0)
+  nv50-state.new_tls_space = TRUE;
+
if (prog-fixups)
   nv50_ir_relocate_code(prog-fixups, prog-code, prog-code_base, 0, 0);
 
diff --git a/src/gallium/drivers/nv50/nv50_program.h 
b/src/gallium/drivers/nv50/nv50_program.h
index f56268b..24eaebf 100644
--- a/src/gallium/drivers/nv50/nv50_program.h
+++ b/src/gallium/drivers/nv50/nv50_program.h
@@ -28,8 +28,6 @@ struct nv50_context;
 #include pipe/p_state.h
 #include pipe/p_shader_tokens.h
 
-#define NV50_CAP_MAX_PROGRAM_TEMPS 64
-
 struct nv50_varying {
uint8_t id; /* tgsi index */
uint8_t hw; /* hw index, nv50 wants flat FP inputs last */
@@ -56,7 +54,6 @@ struct nv50_program {
 
ubyte type;
boolean translated;
-   boolean uses_lmem;
 
uint32_t *code;
unsigned code_size;
@@ -64,6 +61,7 @@ struct nv50_program {
uint32_t *immd;
unsigned immd_size;
unsigned parm_size; /* size limit of uniform buffer */
+   uint32_t tls_space; /* required local memory per thread */
 
ubyte max_gpr; /* REG_ALLOC_TEMP */
ubyte max_out; /* REG_ALLOC_RESULT or FP_RESULT_COUNT */
diff --git a/src/gallium/drivers/nv50/nv50_screen.c 
b/src/gallium/drivers/nv50/nv50_screen.c
index 873946f..8c30c96 100644
--- a/src/gallium/drivers/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nv50/nv50_screen.c
@@ -28,11 +28,21 @@
 #include nv50_screen.h
 
 #include nouveau/nv_object.xml.h
+#include errno.h
 
 #ifndef NOUVEAU_GETPARAM_GRAPH_UNITS
 # define NOUVEAU_GETPARAM_GRAPH_UNITS 13
 #endif
 
+/* affected by LOCAL_WARPS_LOG_ALLOC / LOCAL_WARPS_NO_CLAMP */
+#define LOCAL_WARPS_ALLOC 32
+/* affected by STACK_WARPS_LOG_ALLOC / STACK_WARPS_NO_CLAMP */
+#define STACK_WARPS_ALLOC 32
+
+#define THREADS_IN_WARP 32
+
+#define ONE_TEMP_SIZE (4/*vector*/ * sizeof(float))
+
 static boolean
 nv50_screen_is_format_supported(struct pipe_screen *pscreen,
 enum pipe_format format,
@@ -209,7 +219,7 @@ nv50_screen_get_shader_param(struct pipe_screen *pscreen, 
unsigned shader,
case PIPE_SHADER_CAP_MAX_PREDS:
   return 0;
case PIPE_SHADER_CAP_MAX_TEMPS:
-  return