[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mesa: Changes to 'upstream-experimental'



 Makefile                                                |    9 -
 configure.ac                                            |    9 -
 docs/MESA_copy_sub_buffer.spec                          |   12 +
 docs/relnotes-7.3.html                                  |    4 
 src/glx/x11/drisw_glx.c                                 |    6 
 src/glx/x11/glx_pbuffer.c                               |    4 
 src/glx/x11/glxcurrent.c                                |    5 
 src/mesa/drivers/dri/i965/brw_context.c                 |    3 
 src/mesa/drivers/dri/i965/brw_program.c                 |    6 
 src/mesa/drivers/dri/i965/brw_sf.c                      |   11 -
 src/mesa/drivers/dri/i965/brw_sf_state.c                |    2 
 src/mesa/drivers/dri/i965/brw_wm_fp.c                   |   52 ------
 src/mesa/drivers/dri/i965/brw_wm_glsl.c                 |   18 +-
 src/mesa/drivers/dri/i965/brw_wm_sampler_state.c        |    2 
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c        |   22 +-
 src/mesa/drivers/dri/intel/intel_context.c              |    2 
 src/mesa/drivers/dri/intel/intel_depthstencil.c         |   13 +
 src/mesa/drivers/dri/intel/intel_fbo.c                  |   15 +
 src/mesa/drivers/dri/intel/intel_pixel_bitmap.c         |   20 ++
 src/mesa/drivers/dri/intel/intel_pixel_draw.c           |   12 +
 src/mesa/drivers/dri/intel/intel_span.c                 |    4 
 src/mesa/drivers/dri/intel/intel_tex_format.c           |   10 +
 src/mesa/drivers/dri/mach64/mach64_context.h            |    6 
 src/mesa/drivers/dri/r300/r300_state.c                  |    7 
 src/mesa/drivers/dri/r300/radeon_program_pair.c         |    5 
 src/mesa/drivers/windows/gdi/wgl.c                      |    3 
 src/mesa/glapi/glthread.h                               |    4 
 src/mesa/main/glheader.h                                |    3 
 src/mesa/main/light.c                                   |    3 
 src/mesa/main/mtypes.h                                  |   13 +
 src/mesa/main/version.h                                 |    2 
 src/mesa/math/m_matrix.h                                |   12 +
 src/mesa/shader/arbprogparse.c                          |   31 +++-
 src/mesa/shader/prog_instruction.c                      |   11 -
 src/mesa/shader/slang/library/slang_pp_directives.syn   |   20 ++
 src/mesa/shader/slang/library/slang_pp_directives_syn.h |   11 +
 src/mesa/shader/slang/library/slang_shader.syn          |   13 -
 src/mesa/shader/slang/library/slang_shader_syn.h        |    4 
 src/mesa/shader/slang/slang_codegen.c                   |   48 +++++-
 src/mesa/shader/slang/slang_codegen.h                   |    1 
 src/mesa/shader/slang/slang_compile.c                   |   34 +---
 src/mesa/shader/slang/slang_emit.c                      |   43 +++--
 src/mesa/shader/slang/slang_emit.h                      |    4 
 src/mesa/shader/slang/slang_ir.c                        |   22 ++
 src/mesa/shader/slang/slang_ir.h                        |   13 +
 src/mesa/shader/slang/slang_link.c                      |   10 -
 src/mesa/shader/slang/slang_preprocess.c                |   89 +++++++++++
 src/mesa/shader/slang/slang_preprocess.h                |    7 
 src/mesa/shader/slang/slang_typeinfo.c                  |    2 
 windows/VC8/mesa/mesa/mesa.vcproj                       |  123 +++++++++++++++-
 windows/VC8/progs/glut/glut.vcproj                      |    9 +
 51 files changed, 593 insertions(+), 201 deletions(-)

New commits:
commit 8f8435637d5915cbb217340e831728bf10333c78
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 17:01:35 2009 -0700

    mesa: bump version to 7.3-rc2

diff --git a/Makefile b/Makefile
index 5197e49..55d2e39 100644
--- a/Makefile
+++ b/Makefile
@@ -174,10 +174,10 @@ ultrix-gcc:
 
 # Rules for making release tarballs
 
-DIRECTORY = Mesa-7.3-rc1
-LIB_NAME = MesaLib-7.3-rc1
-DEMO_NAME = MesaDemos-7.3-rc1
-GLUT_NAME = MesaGLUT-7.3-rc1
+DIRECTORY = Mesa-7.3-rc2
+LIB_NAME = MesaLib-7.3-rc2
+DEMO_NAME = MesaDemos-7.3-rc2
+GLUT_NAME = MesaGLUT-7.3-rc2
 
 MAIN_FILES = \
 	$(DIRECTORY)/Makefile*						\
diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
index 83aefe6..24495d6 100644
--- a/src/mesa/main/version.h
+++ b/src/mesa/main/version.h
@@ -31,7 +31,7 @@
 #define MESA_MAJOR 7
 #define MESA_MINOR 3
 #define MESA_PATCH 0
-#define MESA_VERSION_STRING "7.3-rc1"
+#define MESA_VERSION_STRING "7.3-rc2"
 
 /* To make version comparison easy */
 #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

commit 7d08091767c9713e153922385b02047c73ab70e2
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 12:35:43 2009 -0700

    glsl: fix comment

diff --git a/src/mesa/shader/slang/slang_typeinfo.c b/src/mesa/shader/slang/slang_typeinfo.c
index a5bcde4..1ef43f5 100644
--- a/src/mesa/shader/slang/slang_typeinfo.c
+++ b/src/mesa/shader/slang/slang_typeinfo.c
@@ -23,7 +23,7 @@
  */
 
 /**
- * \file slang_assemble_typeinfo.c
+ * \file slang_typeinfo.c
  * slang type info
  * \author Michal Krol
  */

commit b5f32e1d5a1780292b10ba51fa2c7d05e77a7346
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 12:33:06 2009 -0700

    glsl: minor clean-up for rect sampler test

diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index 51eb4c9..11340d2 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -4239,6 +4239,21 @@ _slang_gen_operation(slang_assemble_ctx * A, slang_operation *oper)
 
 
 /**
+ * Check if the given type specifier is a rectangular texture sampler.
+ */
+static GLboolean
+is_rect_sampler_spec(const slang_type_specifier *spec)
+{
+   while (spec->_array) {
+      spec = spec->_array;
+   }
+   return spec->type == SLANG_SPEC_SAMPLER2DRECT ||
+          spec->type == SLANG_SPEC_SAMPLER2DRECTSHADOW;
+}
+
+
+
+/**
  * Called by compiler when a global variable has been parsed/compiled.
  * Here we examine the variable's type to determine what kind of register
  * storage will be used.
@@ -4282,14 +4297,12 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
       }
 #if FEATURE_es2_glsl /* XXX should use FEATURE_texture_rect */
       /* disallow rect samplers */
-      if ((var->type.specifier._array && 
-           (var->type.specifier._array->type == SLANG_SPEC_SAMPLER2DRECT ||
-            var->type.specifier._array->type == SLANG_SPEC_SAMPLER2DRECTSHADOW)) ||
-          (var->type.specifier.type == SLANG_SPEC_SAMPLER2DRECT ||
-           var->type.specifier.type == SLANG_SPEC_SAMPLER2DRECTSHADOW)) {
+      if (is_rect_sampler_spec(&var->type.specifier)) {
          slang_info_log_error(A->log, "invalid sampler type for '%s'", varName);
          return GL_FALSE;
       }
+#else
+      (void) is_rect_sampler_spec; /* silence warning */
 #endif
       {
          GLint sampNum = _mesa_add_sampler(prog->Parameters, varName, datatype);

commit 0dffd223491765fe572d606c2b10855cb568db7a
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 16:48:54 2009 -0700

    r300: work-around FRAG_BIT_FOGC warning/error
    
    See bug 17929.
    
    Fog doesn't actually work, but the often complained about warning is
    silenced.

diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c
index 6a5c363..a63dbac 100644
--- a/src/mesa/drivers/dri/r300/r300_state.c
+++ b/src/mesa/drivers/dri/r300/r300_state.c
@@ -1675,6 +1675,13 @@ static void r300SetupRSUnit(GLcontext * ctx)
 		rs_col_count += count;
 	}
 
+	if (InputsRead & FRAG_BIT_FOGC) {
+		/* XXX FIX THIS
+		 * Just turn off the bit for now.
+		 * Need to do something similar to the color/texcoord inputs.
+		 */
+		InputsRead &= ~FRAG_BIT_FOGC;
+	}
 
 	for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
 		int swiz;
diff --git a/src/mesa/drivers/dri/r300/radeon_program_pair.c b/src/mesa/drivers/dri/r300/radeon_program_pair.c
index 5ad50d2..58bc0d5 100644
--- a/src/mesa/drivers/dri/r300/radeon_program_pair.c
+++ b/src/mesa/drivers/dri/r300/radeon_program_pair.c
@@ -473,6 +473,11 @@ static void allocate_input_registers(struct pair_state *s)
 		alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_COL1, hwindex++);
 	InputsRead &= ~FRAG_BIT_COL1;
 
+	/* Fog coordinate */
+	if (InputsRead & FRAG_BIT_FOGC)
+		alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_FOGC, hwindex++);
+	InputsRead &= ~FRAG_BIT_FOGC;
+
 	/* Anything else */
 	if (InputsRead)
 		error("Don't know how to handle inputs 0x%x\n", InputsRead);

commit 947d1c5b2a70c0eafa4c408b47607574a2908468
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 16:42:19 2009 -0700

    i965: asst. fixes, work-arounds for FBOs and render to texture
    
    OpenGL allows mixing and matching depth and stencil renderbuffers in
    framebuffer objects while the hardware really only supports interleaved
    depth/stencil buffers.  This makes for some tricky buffer management.
    
    An extra wrinkle is the situation where the user allocates a 16bpp depth
    texture or renderbuffer then tries to render to it along with a stencil
    buffer.  We'd have to promote the 16bpp Z values to 24-bit Z values and
    mix in the stencil values to setup the depth/stencil renderbuffer.
    
    There's no support for that now, so always allocate 32bpp depth textures/
    renderbuffers for now.

diff --git a/src/mesa/drivers/dri/intel/intel_depthstencil.c b/src/mesa/drivers/dri/intel/intel_depthstencil.c
index f43b9ae..354b3bf 100644
--- a/src/mesa/drivers/dri/intel/intel_depthstencil.c
+++ b/src/mesa/drivers/dri/intel/intel_depthstencil.c
@@ -110,7 +110,10 @@ intel_unpair_depth_stencil(GLcontext *ctx, struct intel_renderbuffer *irb)
 	 ASSERT(stencilIrb->PairedDepth == rb->Name);
 	 intel_renderbuffer_map(intel, rb);
 	 intel_renderbuffer_map(intel, stencilRb);
+#if 0
+         /* disable for now */
 	 _mesa_extract_stencil(ctx, rb, stencilRb);
+#endif
 	 intel_renderbuffer_unmap(intel, stencilRb);
 	 intel_renderbuffer_unmap(intel, rb);
          stencilIrb->PairedDepth = 0;
@@ -132,7 +135,10 @@ intel_unpair_depth_stencil(GLcontext *ctx, struct intel_renderbuffer *irb)
 	 ASSERT(depthIrb->PairedStencil == rb->Name);
 	 intel_renderbuffer_map(intel, rb);
 	 intel_renderbuffer_map(intel, depthRb);
+#if 0
+         /* disable for now */
 	 _mesa_extract_stencil(ctx, depthRb, rb);
+#endif
 	 intel_renderbuffer_unmap(intel, depthRb);
 	 intel_renderbuffer_unmap(intel, rb);
          depthIrb->PairedStencil = 0;
diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
index 93fc845..54f2fa5 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -248,11 +248,18 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
       cpp = 4;
       break;
    case GL_DEPTH_COMPONENT16:
+#if 0
       rb->_ActualFormat = GL_DEPTH_COMPONENT16;
       rb->DataType = GL_UNSIGNED_SHORT;
       rb->DepthBits = 16;
       cpp = 2;
       break;
+#else
+      /* fall-through.
+       * 16bpp depth renderbuffer can't be paired with a stencil buffer so
+       * always used combined depth/stencil format.
+       */
+#endif
    case GL_DEPTH_COMPONENT:
    case GL_DEPTH_COMPONENT24:
    case GL_DEPTH_COMPONENT32:
diff --git a/src/mesa/drivers/dri/intel/intel_tex_format.c b/src/mesa/drivers/dri/intel/intel_tex_format.c
index 2be060d..5e418ac 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_format.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_format.c
@@ -134,8 +134,14 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
    case GL_DEPTH_COMPONENT16:
    case GL_DEPTH_COMPONENT24:
    case GL_DEPTH_COMPONENT32:
+#if 0
       return &_mesa_texformat_z16;
-
+#else
+      /* fall-through.
+       * 16bpp depth texture can't be paired with a stencil buffer so
+       * always used combined depth/stencil format.
+       */
+#endif
    case GL_DEPTH_STENCIL_EXT:
    case GL_DEPTH24_STENCIL8_EXT:
       return &_mesa_texformat_s8_z24;
@@ -158,7 +164,7 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
-     return &_mesa_texformat_srgb_dxt1;
+      return &_mesa_texformat_srgb_dxt1;
 #endif
 
    default:

commit c7f43543af8a0bf95750eb6d332fdede07d104ea
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 16:28:55 2009 -0700

    i965: fix incorrect renderbuffer DataType assignment

diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
index 7453b96..93fc845 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -529,20 +529,25 @@ intel_update_wrapper(GLcontext *ctx, struct intel_renderbuffer *irb,
    if (texImage->TexFormat == &_mesa_texformat_argb8888) {
       irb->Base._ActualFormat = GL_RGBA8;
       irb->Base._BaseFormat = GL_RGBA;
+      irb->Base.DataType = GL_UNSIGNED_BYTE;
       DBG("Render to RGBA8 texture OK\n");
    }
    else if (texImage->TexFormat == &_mesa_texformat_rgb565) {
       irb->Base._ActualFormat = GL_RGB5;
       irb->Base._BaseFormat = GL_RGB;
+      irb->Base.DataType = GL_UNSIGNED_SHORT;
       DBG("Render to RGB5 texture OK\n");
    }
    else if (texImage->TexFormat == &_mesa_texformat_z16) {
       irb->Base._ActualFormat = GL_DEPTH_COMPONENT16;
       irb->Base._BaseFormat = GL_DEPTH_COMPONENT;
+      irb->Base.DataType = GL_UNSIGNED_SHORT;
       DBG("Render to DEPTH16 texture OK\n");
-   } else if (texImage->TexFormat == &_mesa_texformat_s8_z24) {
+   }
+   else if (texImage->TexFormat == &_mesa_texformat_s8_z24) {
       irb->Base._ActualFormat = GL_DEPTH24_STENCIL8_EXT;
       irb->Base._BaseFormat = GL_DEPTH_STENCIL_EXT;
+      irb->Base.DataType = GL_UNSIGNED_INT_24_8_EXT;
       DBG("Render to DEPTH_STENCIL texture OK\n");
    }
    else {
@@ -554,7 +559,6 @@ intel_update_wrapper(GLcontext *ctx, struct intel_renderbuffer *irb,
    irb->Base.InternalFormat = irb->Base._ActualFormat;
    irb->Base.Width = texImage->Width;
    irb->Base.Height = texImage->Height;
-   irb->Base.DataType = GL_UNSIGNED_BYTE;       /* FBO XXX fix */
    irb->Base.RedBits = texImage->TexFormat->RedBits;
    irb->Base.GreenBits = texImage->TexFormat->GreenBits;
    irb->Base.BlueBits = texImage->TexFormat->BlueBits;

commit 5912cdff3e1f2296b1f5753a008b225bdac4559a
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 16:26:41 2009 -0700

    i965: fix some FBO depth/stencil assertions

diff --git a/src/mesa/drivers/dri/intel/intel_depthstencil.c b/src/mesa/drivers/dri/intel/intel_depthstencil.c
index c2b4d77..f43b9ae 100644
--- a/src/mesa/drivers/dri/intel/intel_depthstencil.c
+++ b/src/mesa/drivers/dri/intel/intel_depthstencil.c
@@ -177,8 +177,11 @@ intel_validate_paired_depth_stencil(GLcontext * ctx,
       }
       else {
          /* Separate depth/stencil buffers, need to interleave now */
-         ASSERT(depthRb->Base._BaseFormat == GL_DEPTH_COMPONENT);
-         ASSERT(stencilRb->Base._BaseFormat == GL_STENCIL_INDEX);
+         ASSERT(depthRb->Base._BaseFormat == GL_DEPTH_COMPONENT ||
+                depthRb->Base._BaseFormat == GL_DEPTH_STENCIL);
+         ASSERT(stencilRb->Base._BaseFormat == GL_STENCIL_INDEX ||
+                stencilRb->Base._BaseFormat == GL_DEPTH_STENCIL);
+
          /* may need to interleave depth/stencil now */
          if (depthRb->PairedStencil == stencilRb->Base.Name) {
             /* OK, the depth and stencil buffers are already interleaved */

commit 03188b09e071ace9d9e21ccc56c01e90c0fa8639
Author: Ian Romanick <ian.d.romanick@intel.com>
Date:   Wed Jan 14 12:46:06 2009 -0800

    intel: SW fallback maps texture images, not texture coordinates

diff --git a/src/mesa/drivers/dri/intel/intel_span.c b/src/mesa/drivers/dri/intel/intel_span.c
index 8f4e681..d931504 100644
--- a/src/mesa/drivers/dri/intel/intel_span.c
+++ b/src/mesa/drivers/dri/intel/intel_span.c
@@ -633,7 +633,7 @@ intelSpanRenderStart(GLcontext * ctx)
    intelFlush(&intel->ctx);
    LOCK_HARDWARE(intel);
 
-   for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
+   for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
       if (ctx->Texture.Unit[i]._ReallyEnabled) {
          struct gl_texture_object *texObj = ctx->Texture.Unit[i]._Current;
          intel_tex_map_images(intel, intel_texture_object(texObj));
@@ -655,7 +655,7 @@ intelSpanRenderFinish(GLcontext * ctx)
 
    _swrast_flush(ctx);
 
-   for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
+   for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
       if (ctx->Texture.Unit[i]._ReallyEnabled) {
          struct gl_texture_object *texObj = ctx->Texture.Unit[i]._Current;
          intel_tex_unmap_images(intel, intel_texture_object(texObj));

commit fae9604727c048834a7d5a90f8a652c86cff057a
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 12:16:00 2009 -0700

    glsl: propagate pragma info down into compiler from preprocessor

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 3eca8a8..2014745 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2094,6 +2094,13 @@ struct gl_query_state
 };
 
 
+/** Set by #pragma directives */
+struct gl_sl_pragmas
+{
+   GLboolean Optimize;  /**< defaults on */
+   GLboolean Debug;     /**< defaults off */
+};
+
 
 /**
  * A GLSL vertex or fragment shader object.
@@ -2104,12 +2111,12 @@ struct gl_shader
    GLuint Name;  /**< AKA the handle */
    GLint RefCount;  /**< Reference count */
    GLboolean DeletePending;
-
-   const GLchar *Source;  /**< Source code string */
    GLboolean CompileStatus;
+   GLboolean Main;  /**< shader defines main() */
+   const GLchar *Source;  /**< Source code string */
    struct gl_program *Program;  /**< Post-compile assembly code */
    GLchar *InfoLog;
-   GLboolean Main;  /**< shader defines main() */
+   struct gl_sl_pragmas Pragmas;
 };
 
 
diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index 2112604..51eb4c9 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -4493,7 +4493,7 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
       n = _slang_gen_var_decl(A, var, var->initializer);
 
       /* emit GPU instructions */
-      success = _slang_emit_code(n, A->vartable, A->program, GL_FALSE, A->log);
+      success = _slang_emit_code(n, A->vartable, A->program, A->pragmas, GL_FALSE, A->log);
 
       _slang_free_ir_tree(n);
    }
@@ -4603,7 +4603,7 @@ _slang_codegen_function(slang_assemble_ctx * A, slang_function * fun)
 #endif
 
    /* Emit program instructions */
-   success = _slang_emit_code(n, A->vartable, A->program, GL_TRUE, A->log);
+   success = _slang_emit_code(n, A->vartable, A->program, A->pragmas, GL_TRUE, A->log);
    _slang_free_ir_tree(n);
 
    /* free codegen context */
diff --git a/src/mesa/shader/slang/slang_codegen.h b/src/mesa/shader/slang/slang_codegen.h
index 9489033..f2daa03 100644
--- a/src/mesa/shader/slang/slang_codegen.h
+++ b/src/mesa/shader/slang/slang_codegen.h
@@ -36,6 +36,7 @@ typedef struct slang_assemble_ctx_
    slang_atom_pool *atoms;
    slang_name_space space;
    struct gl_program *program;
+   struct gl_sl_pragmas *pragmas;
    slang_var_table *vartable;
    slang_info_log *log;
    struct slang_label_ *curFuncEndLabel;
diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c
index ec27fc6..04fa2e0 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -144,6 +144,7 @@ typedef struct slang_output_ctx_
    slang_function_scope *funs;
    slang_struct_scope *structs;
    struct gl_program *program;
+   struct gl_sl_pragmas *pragmas;
    slang_var_table *vartable;
    GLuint default_precision[TYPE_SPECIFIER_COUNT];
    GLboolean allow_precision;
@@ -2059,6 +2060,7 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O,
       A.space.structs = O->structs;
       A.space.vars = O->vars;
       A.program = O->program;
+      A.pragmas = O->pragmas;
       A.vartable = O->vartable;
       A.log = C->L;
       A.curFuncEndLabel = NULL;
@@ -2349,6 +2351,7 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit,
    o.structs = &unit->structs;
    o.vars = &unit->vars;
    o.program = shader ? shader->Program : NULL;
+   o.pragmas = shader ? &shader->Pragmas : NULL;
    o.vartable = _slang_new_var_table(maxRegs);
    _slang_push_var_table(o.vartable);
 
@@ -2417,6 +2420,7 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit,
       A.space.structs = o.structs;
       A.space.vars = o.vars;
       A.program = o.program;
+      A.pragmas = &shader->Pragmas;
       A.vartable = o.vartable;
       A.log = C->L;
 
@@ -2475,7 +2479,8 @@ compile_with_grammar(grammar id, const char *source, slang_code_unit * unit,
                      slang_unit_type type, slang_info_log * infolog,
                      slang_code_unit * builtin,
                      struct gl_shader *shader,
-                     const struct gl_extensions *extensions)
+                     const struct gl_extensions *extensions,
+                     struct gl_sl_pragmas *pragmas)
 {
    byte *prod;
    GLuint size, start, version;
@@ -2504,7 +2509,7 @@ compile_with_grammar(grammar id, const char *source, slang_code_unit * unit,
    /* Now preprocess the source string. */
    slang_string_init(&preprocessed);
    if (!_slang_preprocess_directives(&preprocessed, &source[start],
-                                     infolog, extensions)) {
+                                     infolog, extensions, pragmas)) {
       slang_string_free(&preprocessed);
       slang_info_log_error(infolog, "failed to preprocess the source.");
       return GL_FALSE;
@@ -2578,7 +2583,8 @@ static GLboolean
 compile_object(grammar * id, const char *source, slang_code_object * object,
                slang_unit_type type, slang_info_log * infolog,
                struct gl_shader *shader,
-               const struct gl_extensions *extensions)
+               const struct gl_extensions *extensions,
+               struct gl_sl_pragmas *pragmas)
 {
    slang_code_unit *builtins = NULL;
    GLuint base_version = 110;
@@ -2677,7 +2683,7 @@ compile_object(grammar * id, const char *source, slang_code_object * object,
 
    /* compile the actual shader - pass-in built-in library for external shader */
    return compile_with_grammar(*id, source, &object->unit, type, infolog,
-                               builtins, shader, extensions);
+                               builtins, shader, extensions, pragmas);
 }
 
 
@@ -2701,7 +2707,7 @@ compile_shader(GLcontext *ctx, slang_code_object * object,
    _slang_code_object_ctr(object);
 
    success = compile_object(&id, shader->Source, object, type, infolog, shader,
-                            &ctx->Extensions);
+                            &ctx->Extensions, &shader->Pragmas);
    if (id != 0)
       grammar_destroy(id);
    if (!success)
diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c
index 414d3e6..6b744d7 100644
--- a/src/mesa/shader/slang/slang_emit.c
+++ b/src/mesa/shader/slang/slang_emit.c
@@ -2377,10 +2377,20 @@ _slang_resolve_subroutines(slang_emit_info *emitInfo)
 
 
 
-
+/**
+ * Convert the IR tree into GPU instructions.
+ * \param n  root of IR tree
+ * \param vt  variable table
+ * \param prog  program to put GPU instructions into
+ * \param pragmas  controls codegen options
+ * \param withEnd  if true, emit END opcode at end
+ * \param log  log for emitting errors/warnings/info
+ */
 GLboolean
 _slang_emit_code(slang_ir_node *n, slang_var_table *vt,
-                 struct gl_program *prog, GLboolean withEnd,
+                 struct gl_program *prog,
+                 const struct gl_sl_pragmas *pragmas,
+                 GLboolean withEnd,
                  slang_info_log *log)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2397,7 +2407,7 @@ _slang_emit_code(slang_ir_node *n, slang_var_table *vt,
 
    emitInfo.EmitHighLevelInstructions = ctx->Shader.EmitHighLevelInstructions;
    emitInfo.EmitCondCodes = ctx->Shader.EmitCondCodes;
-   emitInfo.EmitComments = ctx->Shader.EmitComments;
+   emitInfo.EmitComments = ctx->Shader.EmitComments || pragmas->Debug;
    emitInfo.EmitBeginEndSub = GL_TRUE;
 
    if (!emitInfo.EmitCondCodes) {
diff --git a/src/mesa/shader/slang/slang_emit.h b/src/mesa/shader/slang/slang_emit.h
index 59fb2fa..8ff52bf 100644
--- a/src/mesa/shader/slang/slang_emit.h
+++ b/src/mesa/shader/slang/slang_emit.h
@@ -46,7 +46,9 @@ _slang_var_swizzle(GLint size, GLint comp);
 
 extern GLboolean
 _slang_emit_code(slang_ir_node *n, slang_var_table *vartable,
-                 struct gl_program *prog, GLboolean withEnd,
+                 struct gl_program *prog,
+                 const struct gl_sl_pragmas *pragmas,
+                 GLboolean withEnd,
                  slang_info_log *log);
 
 
diff --git a/src/mesa/shader/slang/slang_preprocess.c b/src/mesa/shader/slang/slang_preprocess.c
index 244a091..cd79c8b 100644
--- a/src/mesa/shader/slang/slang_preprocess.c
+++ b/src/mesa/shader/slang/slang_preprocess.c
@@ -531,17 +531,53 @@ pp_ext_set(pp_ext *self, const char *name, GLboolean enable)
 }
 
 
+static void
+pp_pragmas_init(struct gl_sl_pragmas *pragmas)
+{
+   pragmas->Optimize = GL_TRUE;
+   pragmas->Debug = GL_FALSE;
+}
+
+
 /**
  * Called in response to #pragma.  For example, "#pragma debug(on)" would
  * call this function as pp_pragma("debug", "on").
- * At this time, pragmas are silently ignored.
+ * \return GL_TRUE if pragma is valid, GL_FALSE if invalid
  */
-static void
-pp_pragma(const char *pragma, const char *param)
+static GLboolean
+pp_pragma(struct gl_sl_pragmas *pragmas, const char *pragma, const char *param)
 {
 #if 0
    printf("#pragma %s %s\n", pragma, param);
 #endif
+   if (_mesa_strcmp(pragma, "optimize") == 0) {
+      if (!param)
+         return GL_FALSE; /* missing required param */
+      if (_mesa_strcmp(param, "on") == 0) {
+         pragmas->Optimize = GL_TRUE;
+      }
+      else if (_mesa_strcmp(param, "off") == 0) {
+         pragmas->Optimize = GL_FALSE;
+      }
+      else {
+         return GL_FALSE; /* invalid param */
+      }
+   }
+   else if (_mesa_strcmp(pragma, "debug") == 0) {
+      if (!param)
+         return GL_FALSE; /* missing required param */
+      if (_mesa_strcmp(param, "on") == 0) {
+         pragmas->Debug = GL_TRUE;
+      }
+      else if (_mesa_strcmp(param, "off") == 0) {
+         pragmas->Debug = GL_FALSE;
+      }
+      else {
+         return GL_FALSE; /* invalid param */
+      }
+   }
+   /* all other pragmas are silently ignored */
+   return GL_TRUE;
 }
 
 
@@ -887,7 +923,8 @@ static GLboolean
 preprocess_source (slang_string *output, const char *source,
                    grammar pid, grammar eid,
                    slang_info_log *elog,
-                   const struct gl_extensions *extensions)
+                   const struct gl_extensions *extensions,
+                   struct gl_sl_pragmas *pragmas)
 {
    static const char *predefined[] = {
       "__FILE__",
@@ -909,6 +946,7 @@ preprocess_source (slang_string *output, const char *source,
    }
 
    pp_state_init (&state, elog, extensions);
+   pp_pragmas_init (pragmas);
 
    /* add the predefined symbols to the symbol table */
    for (i = 0; predefined[i]; i++) {
@@ -1197,7 +1235,7 @@ preprocess_source (slang_string *output, const char *source,
                else {
                   param = NULL;
                }
-               pp_pragma(pragma, param);
+               pp_pragma(pragmas, pragma, param);
             }
             break;
 
@@ -1265,7 +1303,8 @@ GLboolean
 _slang_preprocess_directives(slang_string *output,
                              const char *input,
                              slang_info_log *elog,
-                             const struct gl_extensions *extensions)
+                             const struct gl_extensions *extensions,
+                             struct gl_sl_pragmas *pragmas)
 {
    grammar pid, eid;
    GLboolean success;
@@ -1281,7 +1320,7 @@ _slang_preprocess_directives(slang_string *output,
       grammar_destroy (pid);
       return GL_FALSE;
    }
-   success = preprocess_source (output, input, pid, eid, elog, extensions);
+   success = preprocess_source (output, input, pid, eid, elog, extensions, pragmas);
    grammar_destroy (eid);
    grammar_destroy (pid);
    return success;
diff --git a/src/mesa/shader/slang/slang_preprocess.h b/src/mesa/shader/slang/slang_preprocess.h
index dd996a6..f344820 100644
--- a/src/mesa/shader/slang/slang_preprocess.h
+++ b/src/mesa/shader/slang/slang_preprocess.h
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.5.3
  *
- * Copyright (C) 2005-2007  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2005-2008  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2009 VMware, Inc.   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -35,6 +35,7 @@ _slang_preprocess_version (const char *, GLuint *, GLuint *, slang_info_log *);
 extern GLboolean
 _slang_preprocess_directives(slang_string *output, const char *input,
                              slang_info_log *,
-                             const struct gl_extensions *extensions);
+                             const struct gl_extensions *extensions,
+                             struct gl_sl_pragmas *pragmas);
 
 #endif /* SLANG_PREPROCESS_H */

commit aac4a0509e6a5d8e3c8f8179519bcd21364ae18e
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 12:07:25 2009 -0700

    windows: remove reference to swizzle.c file

diff --git a/windows/VC8/mesa/mesa/mesa.vcproj b/windows/VC8/mesa/mesa/mesa.vcproj
index 88cc2fc..13029af 100644
--- a/windows/VC8/mesa/mesa/mesa.vcproj
+++ b/windows/VC8/mesa/mesa/mesa.vcproj
@@ -887,10 +887,6 @@
 				>
 			</File>
 			<File
-				RelativePath="..\..\..\..\src\mesa\main\swizzle.c"
-				>
-			</File>
-			<File
 				RelativePath="..\..\..\..\src\mesa\tnl\t_context.c"
 				>
 			</File>

commit b5f89e5f17bdf718d1f1f29e7a10dee3809c9f29
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 11:58:45 2009 -0700

    glsl: simplify IR storage for samplers
    
    Don't overload the Size field with the texture target, to avoid confusion.

diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index b046cc2..2112604 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -4293,7 +4293,7 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
 #endif
       {
          GLint sampNum = _mesa_add_sampler(prog->Parameters, varName, datatype);
-         store = _slang_new_ir_storage(PROGRAM_SAMPLER, sampNum, texIndex);
+         store = _slang_new_ir_storage_sampler(sampNum, texIndex, totalSize);
 
          /* If we have a sampler array, then we need to allocate the 
 	  * additional samplers to ensure we don't allocate them elsewhere.
diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c
index 08b7d51..414d3e6 100644
--- a/src/mesa/shader/slang/slang_emit.c
+++ b/src/mesa/shader/slang/slang_emit.c
@@ -1300,14 +1300,10 @@ emit_tex(slang_emit_info *emitInfo, slang_ir_node *n)
                            NULL,
                            NULL);
 
-   /* Store->Index is the sampler index */
+   /* Store->Index is the uniform/sampler index */
    assert(n->Children[0]->Store->Index >= 0);
-   /* Store->Size is the texture target */
-   assert(n->Children[0]->Store->Size >= TEXTURE_1D_INDEX);
-   assert(n->Children[0]->Store->Size <= TEXTURE_RECT_INDEX);
-
-   inst->TexSrcTarget = n->Children[0]->Store->Size;
-   inst->TexSrcUnit = n->Children[0]->Store->Index; /* i.e. uniform's index */
+   inst->TexSrcUnit = n->Children[0]->Store->Index;
+   inst->TexSrcTarget = n->Children[0]->Store->TexTarget;
 
    /* mark the sampler as being used */
    _mesa_use_uniform(emitInfo->prog->Parameters,
diff --git a/src/mesa/shader/slang/slang_ir.c b/src/mesa/shader/slang/slang_ir.c
index c33c80d..e4c6e0e 100644
--- a/src/mesa/shader/slang/slang_ir.c
+++ b/src/mesa/shader/slang/slang_ir.c
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  7.1
  *
  * Copyright (C) 2005-2008  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2009  VMware, Inc.   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -216,6 +216,26 @@ _slang_new_ir_storage_indirect(enum register_file file,
 }
 
 
+/**
+ * Allocate IR storage for a texture sampler.
+ * \param sampNum  the sampler number/index
+ * \param texTarget  one of TEXTURE_x_INDEX values
+ * \param size  number of samplers (in case of sampler array)
+ */
+slang_ir_storage *
+_slang_new_ir_storage_sampler(GLint sampNum, GLuint texTarget, GLint size)
+{
+   slang_ir_storage *st;
+   assert(texTarget < NUM_TEXTURE_TARGETS);
+   st = _slang_new_ir_storage(PROGRAM_SAMPLER, sampNum, size);
+   if (st) {
+      st->TexTarget = texTarget;
+   }
+   return st;
+}
+
+
+
 /* XXX temporary function */
 void
 _slang_copy_ir_storage(slang_ir_storage *dst, const slang_ir_storage *src)
diff --git a/src/mesa/shader/slang/slang_ir.h b/src/mesa/shader/slang/slang_ir.h
index a258e92..644269d 100644
--- a/src/mesa/shader/slang/slang_ir.h
+++ b/src/mesa/shader/slang/slang_ir.h
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.5.3
  *
- * Copyright (C) 2005-2007  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2005-2008  Brian Paul   All Rights Reserved.
+ * Copyright (C) 2009  VMware, Inc.   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -168,8 +168,8 @@ typedef enum
 struct slang_ir_storage_
 {
    enum register_file File;  /**< PROGRAM_TEMPORARY, PROGRAM_INPUT, etc */
-   GLint Index;  /**< -1 means unallocated */
-   GLint Size;  /**< number of floats */
+   GLint Index;    /**< -1 means unallocated */
+   GLint Size;     /**< number of floats or ints */
    GLuint Swizzle; /**< Swizzle AND writemask info */
    GLint RefCount; /**< Used during IR tree delete */
 
@@ -179,6 +179,7 @@ struct slang_ir_storage_
    enum register_file IndirectFile;
    GLint IndirectIndex;
    GLuint IndirectSwizzle;
+   GLuint TexTarget;  /**< If File==PROGRAM_SAMPLER, one of TEXTURE_x_INDEX */
 
    /** If Parent is non-null, Index is relative to parent.
     * The other fields are ignored.
@@ -254,6 +255,10 @@ _slang_new_ir_storage_indirect(enum register_file file,
                                GLint indirectIndex,
                                GLuint indirectSwizzle);
 
+extern slang_ir_storage *
+_slang_new_ir_storage_sampler(GLint sampNum, GLuint texTarget, GLint size);
+
+
 extern void
 _slang_copy_ir_storage(slang_ir_storage *dst, const slang_ir_storage *src);
 

commit c12d24b513a67648c30bf892964f887fad71e103
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 14 11:50:32 2009 -0700

    mesa: fix incorrect transformation of GL_SPOT_DIRECTION
    
    This was changed between GL 1.0 and 1.1.  Mesa still had the 1.0 behaviour.

diff --git a/docs/relnotes-7.3.html b/docs/relnotes-7.3.html
index 69f335f..d46a509 100644
--- a/docs/relnotes-7.3.html
+++ b/docs/relnotes-7.3.html
@@ -46,6 +46,7 @@ tbd
 <li>Fix for wglCreateLayerContext() in WGL/Windows driver
 <li>Build fixes for OpenBSD and gcc 2.95
 <li>GLSL preprocessor handles #pragma now
+<li>Fix incorrect transformation of GL_SPOT_DIRECTION
 </ul>
 
 <h2>Changes</h2>
diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c
index 10ee088..ce50224 100644
--- a/src/mesa/main/light.c
+++ b/src/mesa/main/light.c
@@ -208,7 +208,8 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
       if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) {
 	 _math_matrix_analyse(ctx->ModelviewMatrixStack.Top);
       }
-      TRANSFORM_NORMAL(temp, params, ctx->ModelviewMatrixStack.Top->inv);
+      TRANSFORM_DIRECTION(temp, params, ctx->ModelviewMatrixStack.Top->m);
+      NORMALIZE_3FV(temp);
       params = temp;
       break;
    case GL_SPOT_EXPONENT:
diff --git a/src/mesa/math/m_matrix.h b/src/mesa/math/m_matrix.h
index e8303f3..a8d9000 100644
--- a/src/mesa/math/m_matrix.h
+++ b/src/mesa/math/m_matrix.h
@@ -189,6 +189,18 @@ do {								\
 } while (0)
 
 
+/**
+ * Transform a direction by a matrix.
+ */
+#define TRANSFORM_DIRECTION( TO, DIR, MAT )			\
+do {								\
+   TO[0] = DIR[0] * MAT[0] + DIR[1] * MAT[4] + DIR[2] * MAT[8];	\
+   TO[1] = DIR[0] * MAT[1] + DIR[1] * MAT[5] + DIR[2] * MAT[9];	\
+   TO[2] = DIR[0] * MAT[2] + DIR[1] * MAT[6] + DIR[2] * MAT[10];\
+} while (0)
+
+
+
 /*@}*/
 
 

commit 2549c26a8b1eec21bdd8f45d3b3dd06e17ac82ae
Author: Ian Romanick <ian.d.romanick@intel.com>
Date:   Wed Jan 14 10:05:40 2009 -0800

    Treat image units and coordinate units differently.
    
    Previously MaxTextureUnits was used to validate both texture image
    units and texture coordinate units in fragment programs.  Instead, use
    MaxTextureCoordUnits for texture coordinate units and
    MaxTextureImageUnits for texture image units.
    
    Fixes bugzilla #19468.
    
    Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
    Reviewed-by: Brian Paul <brianp@vmware.com>

diff --git a/src/mesa/shader/arbprogparse.c b/src/mesa/shader/arbprogparse.c
index 39988b5..a3a75c3 100644
--- a/src/mesa/shader/arbprogparse.c
+++ b/src/mesa/shader/arbprogparse.c
@@ -963,6 +963,8 @@ parse_output_color_num (GLcontext * ctx, const GLubyte ** inst,
 
 
 /**
+ * Validate the index of a texture coordinate
+ *
  * \param coord The texture unit index
  * \return 0 on sucess, 1 on error
  */
@@ -972,8 +974,30 @@ parse_texcoord_num (GLcontext * ctx, const GLubyte ** inst,
 {
    GLint i = parse_integer (inst, Program);
 
-   if ((i < 0) || (i >= (int)ctx->Const.MaxTextureUnits)) {
-      program_error(ctx, Program->Position, "Invalid texture unit index");
+   if ((i < 0) || (i >= (int)ctx->Const.MaxTextureCoordUnits)) {
+      program_error(ctx, Program->Position, "Invalid texture coordinate index");
+      return 1;
+   }
+
+   *coord = (GLuint) i;
+   return 0;
+}


Reply to: