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

mesa: Changes to 'ubuntu'



 Makefile                                                   |    2 
 configure.ac                                               |    6 
 debian/changelog                                           | 1756 ------------
 debian/control                                             |   52 
 debian/libgl1-mesa-dri.install.linux.in                    |    1 
 debian/libxatracker-dev.install.in                         |    5 
 debian/libxatracker1.install.in                            |    1 
 debian/libxatracker1.symbols                               |   31 
 debian/rules                                               |    3 
 src/gallium/drivers/nv50/codegen/nv50_ir.cpp               |    1 
 src/gallium/drivers/nv50/codegen/nv50_ir_driver.h          |    2 
 src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp     |   21 
 src/gallium/drivers/nvc0/codegen/nv50_ir_lowering_nvc0.cpp |    5 
 src/gallium/drivers/nvc0/nvc0_3d.xml.h                     |    5 
 src/gallium/drivers/nvc0/nvc0_context.h                    |    3 
 src/gallium/drivers/nvc0/nvc0_program.c                    |    8 
 src/gallium/drivers/nvc0/nvc0_program.h                    |    3 
 src/gallium/drivers/nvc0/nvc0_push.c                       |   74 
 src/gallium/drivers/nvc0/nvc0_screen.c                     |   24 
 src/gallium/drivers/nvc0/nvc0_vbo.c                        |    3 
 src/gallium/drivers/r300/compiler/radeon_pair_regalloc.c   |    2 
 src/gallium/drivers/r600/eg_asm.c                          |   17 
 src/gallium/drivers/r600/eg_sq.h                           |   49 
 src/gallium/drivers/r600/evergreen_hw_context.c            |    8 
 src/gallium/drivers/r600/evergreen_state.c                 |   35 
 src/gallium/drivers/r600/evergreend.h                      |   17 
 src/gallium/drivers/r600/r600_asm.c                        |  324 +-
 src/gallium/drivers/r600/r600_asm.h                        |   13 
 src/gallium/drivers/r600/r600_hw_context.c                 |   21 
 src/gallium/drivers/r600/r600_pipe.c                       |    2 
 src/gallium/drivers/r600/r600_pipe.h                       |    7 
 src/gallium/drivers/r600/r600_shader.c                     |  421 ++-
 src/gallium/drivers/r600/r600_shader.h                     |    7 
 src/gallium/drivers/r600/r600_sq.h                         |    7 
 src/gallium/drivers/r600/r600_state.c                      |   45 
 src/gallium/drivers/r600/r600_state_common.c               |   30 
 src/gallium/drivers/r600/r600_texture.c                    |    8 
 src/gallium/drivers/r600/r600d.h                           |    4 
 src/gallium/state_trackers/egl/wayland/native_shm.c        |    7 
 src/gbm/main/gbm.c                                         |  104 
 src/gbm/main/gbm.h                                         |   45 
 src/gbm/main/gbmint.h                                      |   15 
 src/glsl/glsl_types.cpp                                    |    4 
 src/glsl/link_uniforms.cpp                                 |    2 
 src/glsl/linker.cpp                                        |   66 
 src/glsl/s_expression.cpp                                  |   36 
 src/mesa/drivers/common/driverfuncs.c                      |    2 
 src/mesa/drivers/common/meta.c                             |    5 
 src/mesa/drivers/dri/common/depthtmp.h                     |  218 -
 src/mesa/drivers/dri/common/spantmp2.h                     |  777 -----
 src/mesa/drivers/dri/common/spantmp_common.h               |   78 
 src/mesa/drivers/dri/common/stenciltmp.h                   |  186 -
 src/mesa/drivers/dri/i915/i830_vtbl.c                      |    6 
 src/mesa/drivers/dri/i915/i915_tex_layout.c                |    4 
 src/mesa/drivers/dri/i915/i915_vtbl.c                      |    6 
 src/mesa/drivers/dri/i965/brw_context.c                    |   10 
 src/mesa/drivers/dri/i965/brw_context.h                    |    1 
 src/mesa/drivers/dri/i965/brw_disasm.c                     |   21 
 src/mesa/drivers/dri/i965/brw_eu.h                         |   11 
 src/mesa/drivers/dri/i965/brw_eu_emit.c                    |   31 
 src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp          |    2 
 src/mesa/drivers/dri/i965/brw_misc_state.c                 |   39 
 src/mesa/drivers/dri/i965/brw_shader.cpp                   |    2 
 src/mesa/drivers/dri/i965/brw_state_cache.c                |    2 
 src/mesa/drivers/dri/i965/brw_tex_layout.c                 |    6 
 src/mesa/drivers/dri/i965/brw_vec4_emit.cpp                |   25 
 src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp        |    2 
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp             |    9 
 src/mesa/drivers/dri/i965/brw_vs.c                         |    2 
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c           |   20 
 src/mesa/drivers/dri/i965/gen6_cc.c                        |   36 
 src/mesa/drivers/dri/i965/gen6_hiz.c                       |   11 
 src/mesa/drivers/dri/i965/gen7_misc_state.c                |    8 
 src/mesa/drivers/dri/i965/gen7_viewport_state.c            |    2 
 src/mesa/drivers/dri/i965/gen7_wm_surface_state.c          |   21 
 src/mesa/drivers/dri/intel/intel_blit.c                    |    2 
 src/mesa/drivers/dri/intel/intel_buffer_objects.c          |    2 
 src/mesa/drivers/dri/intel/intel_context.c                 |   20 
 src/mesa/drivers/dri/intel/intel_context.h                 |    1 
 src/mesa/drivers/dri/intel/intel_extensions.c              |    8 
 src/mesa/drivers/dri/intel/intel_fbo.c                     |   92 
 src/mesa/drivers/dri/intel/intel_fbo.h                     |   12 
 src/mesa/drivers/dri/intel/intel_mipmap_tree.c             |   17 
 src/mesa/drivers/dri/intel/intel_pixel_copy.c              |   14 
 src/mesa/drivers/dri/intel/intel_screen.c                  |   18 
 src/mesa/drivers/dri/intel/intel_span.c                    |  211 -
 src/mesa/drivers/dri/intel/intel_span.h                    |    6 
 src/mesa/drivers/dri/intel/intel_tex_copy.c                |    8 
 src/mesa/drivers/dri/intel/intel_tex_validate.c            |    6 
 src/mesa/drivers/dri/nouveau/nouveau_bufferobj.c           |    2 
 src/mesa/drivers/dri/nouveau/nouveau_driver.c              |    2 
 src/mesa/drivers/dri/nouveau/nouveau_fbo.c                 |    5 
 src/mesa/drivers/dri/nouveau/nouveau_span.c                |  102 
 src/mesa/drivers/dri/nouveau/nouveau_texture.c             |   41 
 src/mesa/drivers/dri/r200/r200_state.c                     |    4 
 src/mesa/drivers/dri/r200/r200_state_init.c                |    2 
 src/mesa/drivers/dri/r200/r200_texstate.c                  |    7 
 src/mesa/drivers/dri/radeon/radeon_buffer_objects.c        |    2 
 src/mesa/drivers/dri/radeon/radeon_common.c                |    4 
 src/mesa/drivers/dri/radeon/radeon_common.h                |    2 
 src/mesa/drivers/dri/radeon/radeon_common_context.c        |   10 
 src/mesa/drivers/dri/radeon/radeon_common_context.h        |    3 
 src/mesa/drivers/dri/radeon/radeon_fbo.c                   |  152 -
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c           |    8 
 src/mesa/drivers/dri/radeon/radeon_pixel_read.c            |    8 
 src/mesa/drivers/dri/radeon/radeon_screen.c                |   14 
 src/mesa/drivers/dri/radeon/radeon_span.c                  |  163 -
 src/mesa/drivers/dri/radeon/radeon_state_init.c            |    6 
 src/mesa/drivers/dri/radeon/radeon_tex_copy.c              |    6 
 src/mesa/drivers/dri/radeon/radeon_texstate.c              |    7 
 src/mesa/drivers/dri/radeon/radeon_texture.c               |   12 
 src/mesa/drivers/dri/swrast/Makefile                       |    3 
 src/mesa/drivers/dri/swrast/swrast.c                       |  104 
 src/mesa/drivers/dri/swrast/swrast_priv.h                  |   21 
 src/mesa/drivers/dri/swrast/swrast_span.c                  |  347 --
 src/mesa/drivers/dri/swrast/swrast_spantemp.h              |  223 -
 src/mesa/drivers/osmesa/osmesa.c                           |  552 ---
 src/mesa/drivers/windows/gdi/wmesa.c                       |    1 
 src/mesa/drivers/x11/Makefile                              |    1 
 src/mesa/drivers/x11/xm_api.c                              |   25 
 src/mesa/drivers/x11/xm_buffer.c                           |   35 
 src/mesa/drivers/x11/xm_dd.c                               |   30 
 src/mesa/drivers/x11/xm_line.c                             |    4 
 src/mesa/drivers/x11/xm_span.c                             | 1810 -------------
 src/mesa/drivers/x11/xm_tri.c                              |    4 
 src/mesa/drivers/x11/xmesaP.h                              |    8 
 src/mesa/main/arrayobj.c                                   |   16 
 src/mesa/main/attrib.c                                     |   55 
 src/mesa/main/bufferobj.c                                  |   44 
 src/mesa/main/bufferobj.h                                  |    3 
 src/mesa/main/dd.h                                         |   48 
 src/mesa/main/fbobject.c                                   |   13 
 src/mesa/main/image.c                                      |   12 
 src/mesa/main/mtypes.h                                     |  118 
 src/mesa/main/pack.c                                       |  112 
 src/mesa/main/pack_tmp.h                                   |  115 
 src/mesa/main/renderbuffer.c                               |   30 
 src/mesa/main/shaderobj.c                                  |    2 
 src/mesa/main/state.c                                      |    9 
 src/mesa/main/texcompress.c                                |    2 
 src/mesa/main/texcompress_etc.c                            |    2 
 src/mesa/main/texcompress_fxt1.c                           |    4 
 src/mesa/main/texcompress_rgtc.c                           |   24 
 src/mesa/main/texcompress_s3tc.c                           |    8 
 src/mesa/main/texformat.c                                  |   14 
 src/mesa/main/texgetimage.c                                |  133 
 src/mesa/main/teximage.c                                   |   39 
 src/mesa/main/teximage.h                                   |    9 
 src/mesa/main/texstore.c                                   |    4 
 src/mesa/main/varray.c                                     |    4 
 src/mesa/main/version.c                                    |    6 
 src/mesa/main/version.h                                    |    2 
 src/mesa/program/register_allocate.c                       |   10 
 src/mesa/program/register_allocate.h                       |    2 
 src/mesa/state_tracker/st_atom_framebuffer.c               |    2 
 src/mesa/state_tracker/st_cb_bufferobjects.c               |    2 
 src/mesa/state_tracker/st_cb_eglimage.c                    |    1 
 src/mesa/state_tracker/st_cb_fbo.c                         |   22 
 src/mesa/state_tracker/st_format.c                         |  100 
 src/mesa/state_tracker/st_format.h                         |    3 
 src/mesa/state_tracker/st_manager.c                        |    6 
 src/mesa/swrast/s_blend.c                                  |    1 
 src/mesa/swrast/s_context.c                                |    8 
 src/mesa/swrast/s_context.h                                |   47 
 src/mesa/swrast/s_copypix.c                                |   55 
 src/mesa/swrast/s_depth.c                                  |   30 
 src/mesa/swrast/s_drawpix.c                                |   16 
 src/mesa/swrast/s_logic.c                                  |    1 
 src/mesa/swrast/s_masking.c                                |    1 
 src/mesa/swrast/s_renderbuffer.c                           | 1241 +-------
 src/mesa/swrast/s_span.c                                   |  291 +-
 src/mesa/swrast/s_span.h                                   |   16 
 src/mesa/swrast/s_spantemp.h                               |  149 -
 src/mesa/swrast/s_stencil.c                                |   13 
 src/mesa/swrast/s_texfetch.c                               |  369 --
 src/mesa/swrast/s_texfetch.h                               |    3 
 src/mesa/swrast/s_texfetch_tmp.h                           |  997 -------
 src/mesa/swrast/s_texfilter.c                              |    4 
 src/mesa/swrast/s_texrender.c                              |  407 --
 src/mesa/swrast/s_texture.c                                |   57 
 src/mesa/swrast/s_triangle.c                               |   14 
 src/mesa/tnl/t_vb_program.c                                |   10 
 182 files changed, 3068 insertions(+), 10630 deletions(-)

New commits:
commit 8307db43cdb334037bb244ba0cdbfd113c917a0b
Author: Timo Aaltonen <tjaalton@ubuntu.com>
Date:   Sat Jan 28 10:45:58 2012 +0200

    bump the upstream version

diff --git a/debian/changelog b/debian/changelog
index 979aed1..b84924f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-mesa (8.0~rc1-1) UNRELEASED; urgency=low
+mesa (8.0~rc2-1) UNRELEASED; urgency=low
 
   [ Cyril Brulebois ]
   * New upstream snapshot.

commit 0dddf4c575c7d8398727b80b6475b01e9f2e0b22
Author: Ian Romanick <ian.d.romanick@intel.com>
Date:   Fri Jan 27 17:45:49 2012 -0800

    mesa: Bump version number to 8.0-rc2
    
    Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>

diff --git a/Makefile b/Makefile
index 64e3a7cd..c1f7158 100644
--- a/Makefile
+++ b/Makefile
@@ -184,7 +184,7 @@ ultrix-gcc:
 
 # Rules for making release tarballs
 
-PACKAGE_VERSION=8.0-rc1
+PACKAGE_VERSION=8.0-rc2
 PACKAGE_DIR = Mesa-$(PACKAGE_VERSION)
 PACKAGE_NAME = MesaLib-$(PACKAGE_VERSION)
 
diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
index c1f4e8e..12844b1 100644
--- a/src/mesa/main/version.h
+++ b/src/mesa/main/version.h
@@ -35,7 +35,7 @@ struct gl_context;
 #define MESA_MAJOR 8
 #define MESA_MINOR 0
 #define MESA_PATCH 0
-#define MESA_VERSION_STRING "8.0-rc1"
+#define MESA_VERSION_STRING "8.0-rc2"
 
 /* To make version comparison easy */
 #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

commit 4aa158d09aab294845d33027dc1ef42056dec90a
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Thu Jan 26 05:38:28 2012 -0800

    i965/vs: Use the sampler for VS pull constant loading on Ivybridge.
    
    Substantially increases performance in GLBenchmark PRO:
    - 320x240   => 3.28x
    - 1920x1080 => 1.47x
    - 2560x1440 => 1.27x
    
    The LD message ignores the sampler unit index and SAMPLER_STATE pointer,
    instead relying on hard-wired default state.  Thus, there's no need to
    worry about running out of sampler units or providing SAMPLER_STATE;
    this small patch should be all that's required.
    
    NOTE: This is a candidate for release branches.
          (It requires the preceding commit to compile.)
    
    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Eric Anholt <eric@anholt.net>
    (cherry picked from commit 259b65e2e7938de4aab323033cfe2b33369ddb07)

diff --git a/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp b/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp
index dbe4dd0..917c927 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp
@@ -647,6 +647,23 @@ vec4_visitor::generate_pull_constant_load(vec4_instruction *inst,
 					  struct brw_reg dst,
 					  struct brw_reg index)
 {
+   if (intel->gen == 7) {
+      gen6_resolve_implied_move(p, &index, inst->base_mrf);
+      brw_instruction *insn = brw_next_insn(p, BRW_OPCODE_SEND);
+      brw_set_dest(p, insn, dst);
+      brw_set_src0(p, insn, index);
+      brw_set_sampler_message(p, insn,
+                              SURF_INDEX_VERT_CONST_BUFFER,
+                              0, /* LD message ignores sampler unit */
+                              GEN5_SAMPLER_MESSAGE_SAMPLE_LD,
+                              1, /* rlen */
+                              1, /* mlen */
+                              false, /* no header */
+                              BRW_SAMPLER_SIMD_MODE_SIMD4X2,
+                              0);
+      return;
+   }
+
    struct brw_reg header = brw_vec8_grf(0, 0);
 
    gen6_resolve_implied_move(p, &header, inst->base_mrf);

commit 38b76cf8319168c3628cc18c6231e9a081a2481b
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Thu Jan 26 05:33:19 2012 -0800

    i965: Expose brw_set_sampler_message for use outside brw_eu_emit.c.
    
    brw_SAMPLE is full of complex workarounds for original Broadwater
    hardware, and I'd rather avoid all that for my next Ivybridge patch.
    
    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Eric Anholt <eric@anholt.net>
    (cherry picked from commit 5f4575d42fdaaf671d4b3cdcf2c733ad9d35d339)

diff --git a/src/mesa/drivers/dri/i965/brw_eu.h b/src/mesa/drivers/dri/i965/brw_eu.h
index d967d93..f660222 100644
--- a/src/mesa/drivers/dri/i965/brw_eu.h
+++ b/src/mesa/drivers/dri/i965/brw_eu.h
@@ -887,6 +887,17 @@ ROUND(RNDE)
 
 /* Helpers for SEND instruction:
  */
+void brw_set_sampler_message(struct brw_compile *p,
+                             struct brw_instruction *insn,
+                             GLuint binding_table_index,
+                             GLuint sampler,
+                             GLuint msg_type,
+                             GLuint response_length,
+                             GLuint msg_length,
+                             GLuint header_present,
+                             GLuint simd_mode,
+                             GLuint return_format);
+
 void brw_set_dp_read_message(struct brw_compile *p,
 			     struct brw_instruction *insn,
 			     GLuint binding_table_index,
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
index d8ea06f..9929739 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
@@ -653,16 +653,17 @@ brw_set_dp_read_message(struct brw_compile *p,
    }
 }
 
-static void brw_set_sampler_message(struct brw_compile *p,
-                                    struct brw_instruction *insn,
-                                    GLuint binding_table_index,
-                                    GLuint sampler,
-                                    GLuint msg_type,
-                                    GLuint response_length,
-                                    GLuint msg_length,
-                                    GLuint header_present,
-                                    GLuint simd_mode,
-				    GLuint return_format)
+void
+brw_set_sampler_message(struct brw_compile *p,
+                        struct brw_instruction *insn,
+                        GLuint binding_table_index,
+                        GLuint sampler,
+                        GLuint msg_type,
+                        GLuint response_length,
+                        GLuint msg_length,
+                        GLuint header_present,
+                        GLuint simd_mode,
+                        GLuint return_format)
 {
    struct brw_context *brw = p->brw;
    struct intel_context *intel = &brw->intel;

commit 73ff415b596ea0449bd79b2a076987678fcefebd
Author: Paul Berry <stereotype441@gmail.com>
Date:   Mon Jan 9 15:36:27 2012 -0800

    i965: Set pitch of pull constant buffers to 16.
    
    We always access pull constant buffers using the message types "OWord
    Block Read" or "OWord Dual Block Read".  According to the Sandy Bridge
    PRM, Vol 4 Part 1, pages 214 and 218, when using these messages:
    
        "the surface pitch is ignored, the surface is treated as a
        1-dimensional surface.  An element size (pitch) of 16 bytes is
        used to determine the size of the buffer for out-of-bounds
        checking if using the surface state model."
    
    Previously we were setting the pitch for pull constant buffers to the
    size of the whole constant buffer--this made no sense and would have
    led to incorrect behavior if it were not for the fact that the pitch
    is ignored.
    
    For clarity, this patch sets the pitch for pull constant buffers to 16
    bytes, consistent with the hardware's behavior.
    
    v2: Clarify the meaning of the ignored values by writing them as (16 - 1).
    
    Reviewed-by: Eric Anholt <eric@anholt.net>
    Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
    (cherry picked from commit fcd5af4a916b4ba7860ba27eb47404934bde0d08)

diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index 62214d1..7fd83ea 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -703,7 +703,7 @@ brw_create_constant_surface(struct brw_context *brw,
 	      ((w >> 7) & 0x1fff) << BRW_SURFACE_HEIGHT_SHIFT);
 
    surf[3] = (((w >> 20) & 0x7f) << BRW_SURFACE_DEPTH_SHIFT |
-	      (width * 16 - 1) << BRW_SURFACE_PITCH_SHIFT);
+	      (16 - 1) << BRW_SURFACE_PITCH_SHIFT); /* ignored */
 
    surf[4] = 0;
    surf[5] = 0;
diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
index adc3a45..d429adc 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
@@ -157,7 +157,7 @@ gen7_create_constant_surface(struct brw_context *brw,
    surf->ss2.width = w & 0x7f;            /* bits 6:0 of size or width */
    surf->ss2.height = (w >> 7) & 0x1fff;  /* bits 19:7 of size or width */
    surf->ss3.depth = (w >> 20) & 0x7f;    /* bits 26:20 of size or width */
-   surf->ss3.pitch = (width * 16) - 1; /* ignored?? */
+   surf->ss3.pitch = (16 - 1); /* ignored */
    gen7_set_surface_tiling(surf, I915_TILING_NONE); /* tiling now allowed */
 
    /* Emit relocation to surface contents.  Section 5.1.1 of the gen4

commit 58e0c4f87272bfae09f522c8a1cfce112a04a3b2
Author: Ian Romanick <ian.d.romanick@intel.com>
Date:   Fri Jan 20 17:23:02 2012 -0800

    mesa: Don't resurrect deleted ARB VAOs in glPopClientAttrib
    
    When ARB VAOs are used, glPopClientAttrib does not resurrect a deleted
    VAO or VBO.  This difference between the two spec is, unfortunately,
    not very well spelled out in the specs.
    
    Fixes oglc vao(advanced.pushPop.deleteVAO) and
    vao(advanced.pushPop.deleteVBO) tests.
    
    NOTE: This is a candidate for release branches.
    
    Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
    Reviewed-by: Brian Paul <brianp@vmware.com>
    (cherry picked from commit 34c353ce463960afdf64fa2be1f155b8b7f6c70c)

diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
index 1cd1fc4..01e7945 100644
--- a/src/mesa/main/attrib.c
+++ b/src/mesa/main/attrib.c
@@ -58,6 +58,8 @@
 #include "viewport.h"
 #include "mtypes.h"
 #include "main/dispatch.h"
+#include "hash.h"
+#include <stdbool.h>
 
 
 /**
@@ -1337,7 +1339,8 @@ copy_array_object(struct gl_context *ctx,
 static void
 copy_array_attrib(struct gl_context *ctx,
                   struct gl_array_attrib *dest,
-                  struct gl_array_attrib *src)
+                  struct gl_array_attrib *src,
+                  bool vbo_deleted)
 {
    /* skip ArrayObj */
    /* skip DefaultArrayObj, Objects */
@@ -1349,7 +1352,8 @@ copy_array_attrib(struct gl_context *ctx,
    /* skip NewState */
    /* skip RebindArrays */
 
-   copy_array_object(ctx, dest->ArrayObj, src->ArrayObj);
+   if (!vbo_deleted)
+      copy_array_object(ctx, dest->ArrayObj, src->ArrayObj);
 
    /* skip ArrayBufferObj */
    /* skip ElementArrayBufferObj */
@@ -1367,7 +1371,7 @@ save_array_attrib(struct gl_context *ctx,
     * Needs to match value in the object hash. */
    dest->ArrayObj->Name = src->ArrayObj->Name;
    /* And copy all of the rest. */
-   copy_array_attrib(ctx, dest, src);
+   copy_array_attrib(ctx, dest, src, false);
 
    /* Just reference them here */
    _mesa_reference_buffer_object(ctx, &dest->ArrayBufferObj,
@@ -1384,17 +1388,44 @@ restore_array_attrib(struct gl_context *ctx,
                      struct gl_array_attrib *dest,
                      struct gl_array_attrib *src)
 {
-   /* Restore or recreate the array object by its name ... */
-   _mesa_BindVertexArrayAPPLE(src->ArrayObj->Name);
+   /* The ARB_vertex_array_object spec says:
+    *
+    *     "BindVertexArray fails and an INVALID_OPERATION error is generated
+    *     if array is not a name returned from a previous call to
+    *     GenVertexArrays, or if such a name has since been deleted with
+    *     DeleteVertexArrays."
+    *
+    * Therefore popping a deleted VAO cannot magically recreate it.
+    *
+    * The semantics of objects created using APPLE_vertex_array_objects behave
+    * differently.  These objects expect to be recreated by pop.  Alas.
+    */
+   const bool arb_vao = (src->ArrayObj->Name != 0
+			 && src->ArrayObj->ARBsemantics);
+
+   if (arb_vao && !_mesa_IsVertexArrayAPPLE(src->ArrayObj->Name))
+      return;
 
-   /* ... and restore its content */
-   copy_array_attrib(ctx, dest, src);
+   _mesa_BindVertexArrayAPPLE(src->ArrayObj->Name);
 
    /* Restore or recreate the buffer objects by the names ... */
-   _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB,
-                       src->ArrayBufferObj->Name);
-   _mesa_BindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB,
-                       src->ArrayObj->ElementArrayBufferObj->Name);
+   if (!arb_vao
+       || src->ArrayBufferObj->Name == 0
+       || _mesa_IsBufferARB(src->ArrayBufferObj->Name)) {
+      /* ... and restore its content */
+      copy_array_attrib(ctx, dest, src, false);
+
+      _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB,
+			  src->ArrayBufferObj->Name);
+   } else {
+      copy_array_attrib(ctx, dest, src, true);
+   }
+
+   if (!arb_vao
+       || src->ArrayObj->ElementArrayBufferObj->Name == 0
+       || _mesa_IsBufferARB(src->ArrayObj->ElementArrayBufferObj->Name))
+      _mesa_BindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB,
+			  src->ArrayObj->ElementArrayBufferObj->Name);
 
    /* Better safe than sorry?! */
    dest->RebindArrays = GL_TRUE;

commit eea63b7621740ad020b9a2448f9c2f809f4827f3
Author: Ian Romanick <ian.d.romanick@intel.com>
Date:   Mon Jan 23 14:22:38 2012 -0800

    mesa: Rename gl_array_object::VBOonly to ::ARBsemantics
    
    There are more differences between Apple and ARB than just requiring
    that all arrays be stored in VBOs.  Additional uses will be added in
    following commits.
    
    Also, set the flag at Bind time instead of Gen time.  The ARB_vao spec
    specifies that behavior.
    
    NOTE: This is a candidate for release branches.
    
    Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
    Reviewed-by: Brian Paul <brianp@vmware.com>
    (cherry picked from commit 09639901530da7df7347428512c2bee86af1ef8e)

diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index 4b3e07b..de1391f 100644
--- a/src/mesa/main/arrayobj.c
+++ b/src/mesa/main/arrayobj.c
@@ -359,6 +359,14 @@ bind_vertex_array(struct gl_context *ctx, GLuint id, GLboolean genRequired)
             _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindVertexArrayAPPLE");
             return;
          }
+
+         /* The "Interactions with APPLE_vertex_array_object" section of the
+          * GL_ARB_vertex_array_object spec says:
+          *
+          *     "The first bind call, either BindVertexArray or
+          *     BindVertexArrayAPPLE, determines the semantic of the object."
+          */
+         newObj->ARBsemantics = genRequired;
          save_array_object(ctx, newObj);
       }
    }
@@ -455,8 +463,7 @@ _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids)
  * \param vboOnly Will arrays have to reside in VBOs?
  */
 static void 
-gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays,
-                  GLboolean vboOnly)
+gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays)
 {
    GLuint first;
    GLint i;
@@ -483,7 +490,6 @@ gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays,
          _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenVertexArraysAPPLE");
          return;
       }
-      obj->VBOonly = vboOnly;
       save_array_object(ctx, obj);
       arrays[i] = first + i;
    }
@@ -498,7 +504,7 @@ void GLAPIENTRY
 _mesa_GenVertexArrays(GLsizei n, GLuint *arrays)
 {
    GET_CURRENT_CONTEXT(ctx);
-   gen_vertex_arrays(ctx, n, arrays, GL_TRUE);
+   gen_vertex_arrays(ctx, n, arrays);
 }
 
 
@@ -510,7 +516,7 @@ void GLAPIENTRY
 _mesa_GenVertexArraysAPPLE(GLsizei n, GLuint *arrays)
 {
    GET_CURRENT_CONTEXT(ctx);
-   gen_vertex_arrays(ctx, n, arrays, GL_FALSE);
+   gen_vertex_arrays(ctx, n, arrays);
 }
 
 
diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
index 1c1ee5d..1cd1fc4 100644
--- a/src/mesa/main/attrib.c
+++ b/src/mesa/main/attrib.c
@@ -1320,7 +1320,7 @@ copy_array_object(struct gl_context *ctx,
    /* skip RefCount */
 
    /* In theory must be the same anyway, but on recreate make sure it matches */
-   dest->VBOonly = src->VBOonly;
+   dest->ARBsemantics = src->ARBsemantics;
 
    for (i = 0; i < Elements(src->VertexAttrib); i++)
       _mesa_copy_client_array(ctx, &dest->VertexAttrib[i], &src->VertexAttrib[i]);
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 30c5475..1d37008 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1610,7 +1610,22 @@ struct gl_array_object
 
    GLint RefCount;
    _glthread_Mutex Mutex;
-   GLboolean VBOonly;  /**< require all arrays to live in VBOs? */
+
+   /**
+    * Does the VAO use ARB semantics or Apple semantics?
+    *
+    * There are several ways in which ARB_vertex_array_object and
+    * APPLE_vertex_array_object VAOs have differing semantics.  At the very
+    * least,
+    *
+    *     - ARB VAOs require that all array data be sourced from vertex buffer
+    *       objects, but Apple VAOs do not.
+    *
+    *     - ARB VAOs require that names come from GenVertexArrays.
+    *
+    * This flag notes which behavior governs this VAO.
+    */
+   GLboolean ARBsemantics;
 
    /** Vertex attribute arrays */
    struct gl_client_array VertexAttrib[VERT_ATTRIB_MAX];
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 9078d11..77c1d7d 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -194,7 +194,7 @@ update_array(struct gl_context *ctx,
       return;
    }
 
-   if (ctx->Array.ArrayObj->VBOonly &&
+   if (ctx->Array.ArrayObj->ARBsemantics &&
        !_mesa_is_bufferobj(ctx->Array.ArrayBufferObj)) {
       /* GL_ARB_vertex_array_object requires that all arrays reside in VBOs.
        * Generate GL_INVALID_OPERATION if that's not true.

commit 85a52bf7b5f5f0317d15a51f94f294fc5e72d936
Author: Ian Romanick <ian.d.romanick@intel.com>
Date:   Thu Jan 19 17:29:37 2012 -0800

    swrast: Use fixed-function processing instead _TexEnvProgram for DrawPixels
    
    This is a hack to work around drivers such as i965 that:
    
        - Set _MaintainTexEnvProgram to generate GLSL IR for
          fixed-function fragment processing.
        - Don't call _mesa_ir_link_shader to generate Mesa IR from the
          GLSL IR.
        - May use swrast to handle glDrawPixels.
    
    Since _mesa_ir_link_shader is never called, there is no Mesa IR to
    execute.  Instead do regular fixed-function processing.
    
    Even on platforms that don't need this, the software fixed-function
    code is much faster than the software shader code.
    
    NOTE: This is a candidate for the 8.0 branch.
    
    Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
    Reviewed-by: Brian Paul <brianp@vmware.com>
    Reviewed-by: Eric Anholt <eric@anholt.net>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44749
    (cherry picked from commit 9be3be3c6654da18466626c2d45ff4d06b5fb953)

diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index 8ecc3f9..7ab60b1 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -52,6 +52,7 @@
 #include "s_stencil.h"
 #include "s_texcombine.h"
 
+#include <stdbool.h>
 
 /**
  * Set default fragment attributes for the span using the
@@ -970,7 +971,25 @@ convert_color_type(SWspan *span, GLenum newType, GLuint output)
 static inline void
 shade_texture_span(struct gl_context *ctx, SWspan *span)
 {
-   if (ctx->FragmentProgram._Current ||
+   /* This is a hack to work around drivers such as i965 that:
+    *
+    *     - Set _MaintainTexEnvProgram to generate GLSL IR for
+    *       fixed-function fragment processing.
+    *     - Don't call _mesa_ir_link_shader to generate Mesa IR from
+    *       the GLSL IR.
+    *     - May use swrast to handle glDrawPixels.
+    *
+    * Since _mesa_ir_link_shader is never called, there is no Mesa IR
+    * to execute.  Instead do regular fixed-function processing.
+    *
+    * It is also worth noting that the software fixed-function path is
+    * much faster than the software shader path.
+    */
+   const bool use_fragment_program =
+      ctx->FragmentProgram._Current
+      && ctx->FragmentProgram._Current != ctx->FragmentProgram._TexEnvProgram;
+
+   if (use_fragment_program ||
        ctx->ATIFragmentShader._Enabled) {
       /* programmable shading */
       if (span->primitive == GL_BITMAP && span->array->ChanType != GL_FLOAT) {
@@ -999,7 +1018,7 @@ shade_texture_span(struct gl_context *ctx, SWspan *span)
          interpolate_wpos(ctx, span);
 
       /* Run fragment program/shader now */
-      if (ctx->FragmentProgram._Current) {
+      if (use_fragment_program) {
          _swrast_exec_fragment_program(ctx, span);
       }
       else {

commit 05b7f13af191e6fdf640e97017b073684550159b
Author: Ian Romanick <ian.d.romanick@intel.com>
Date:   Thu Jan 19 17:23:51 2012 -0800

    mesa: Make sure _TexEnvProgram points at the current ff fragment program
    
    At least one place, the _mesa_need_secondary_color function in
    state.h, uses this to make decisions.  The next patch in this series
    will add another dependency.  Ideally, this field would go away and be
    replace by a flag or something.
    
    NOTE: This is a candidate for the 8.0 branch.
    
    Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
    Reviewed-by: Brian Paul <brianp@vmware.com>
    Reviewed-by: Eric Anholt <eric@anholt.net>
    (cherry picked from commit 34db7a8c1e775aaefad7952133e087f1c1a569f6)

diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index b910543..c59eff7 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -259,6 +259,8 @@ update_program(struct gl_context *ctx)
       _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._Current,
 			       (struct gl_fragment_program *)
 			       fsProg->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program);
+      _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._TexEnvProgram,
+			       NULL);
    }
    else if (ctx->FragmentProgram._Enabled) {
       /* Use user-defined fragment program */
@@ -267,6 +269,8 @@ update_program(struct gl_context *ctx)
 				     NULL);
       _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._Current,
                                ctx->FragmentProgram.Current);
+      _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._TexEnvProgram,
+			       NULL);
    }
    else if (ctx->FragmentProgram._MaintainTexEnvProgram) {
       /* Use fragment program generated from fixed-function state */
@@ -278,10 +282,15 @@ update_program(struct gl_context *ctx)
       _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._Current,
 			       (struct gl_fragment_program *)
                                f->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program);
+      _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._TexEnvProgram,
+			       (struct gl_fragment_program *)
+                               f->_LinkedShaders[MESA_SHADER_FRAGMENT]->Program);
    }
    else {
       /* No fragment program */
       _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._Current, NULL);
+      _mesa_reference_fragprog(ctx, &ctx->FragmentProgram._TexEnvProgram,
+			       NULL);
    }
 
    if (gsProg && gsProg->LinkStatus

commit 93d5799e8bf8bb67d985d59cccf1063dedd3cedd
Author: Brian Paul <brianp@vmware.com>
Date:   Tue Jan 24 13:32:13 2012 -0700

    swrast: fix uninitialized variable warning
    (cherry picked from commit ba151a333be7a23266b23ee6f65669bb19221546)

diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index 819fe4b..8ecc3f9 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -1084,7 +1084,7 @@ _swrast_put_row(struct gl_context *ctx, struct gl_renderbuffer *rb,
       /* We can't pass a 'mask' array to the _mesa_pack_rgba_row() functions
        * so look for runs where mask=1...
        */
-      runLen = 0;
+      runLen = runStart = 0;
       for (i = 0; i < count; i++) {
          if (mask[i]) {
             if (runLen == 0)

commit 4f8b00d8effc9b1494e644cb3e15d8519083a8cf
Author: Brian Paul <brianp@vmware.com>
Date:   Tue Jan 24 13:29:05 2012 -0700

    swrast: make rowStride variable signed in put_z32_values()
    
    As with commit aed5c8299fe47b8e1728f8140d069bc89d3fa947
    (cherry picked from commit cf386f0a2ba3efcfd6ddbfcbebaf98a9bfa7a29f)

diff --git a/src/mesa/swrast/s_depth.c b/src/mesa/swrast/s_depth.c
index 1336407..c903882 100644
--- a/src/mesa/swrast/s_depth.c
+++ b/src/mesa/swrast/s_depth.c
@@ -253,7 +253,7 @@ put_z32_values(struct gl_context *ctx, struct gl_renderbuffer *rb,
    GLuint i;
 
    if (rb->Format == MESA_FORMAT_Z32) {
-      const GLuint rowStride = srb->RowStride;
+      const GLint rowStride = srb->RowStride;
       for (i = 0; i < count; i++) {
          if (mask[i] && x[i] >= 0 && y[i] >= 0 && x[i] < w && y[i] < h) {
             GLuint *dst = (GLuint *) (map + y[i] * rowStride + x[i] * 4);

commit b5a5a1c6153d9a6ef16f60b391fe0181305d9c96
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 18 17:47:32 2012 -0700

    intel: use swrast code to map/unmap renderbuffers for swrast rendering
    (cherry picked from commit 89bb19adb08caaefc01e613e9bbfbdd1f366ddab)

diff --git a/src/mesa/drivers/dri/intel/intel_span.c b/src/mesa/drivers/dri/intel/intel_span.c
index 2090e51..3645720 100644
--- a/src/mesa/drivers/dri/intel/intel_span.c
+++ b/src/mesa/drivers/dri/intel/intel_span.c
@@ -110,77 +110,6 @@ intel_offset_S8(uint32_t stride, uint32_t x, uint32_t y)
    return u;
 }
 
-static void
-intel_renderbuffer_map(struct intel_context *intel, struct gl_renderbuffer *rb)
-{
-   struct gl_context *ctx = &intel->ctx;
-   struct intel_renderbuffer *irb = intel_renderbuffer(rb);
-   GLubyte *map;
-   int stride;
-
-   if (!irb)
-      return;
-
-   if (irb->Base.Map) {
-      /* Renderbuffer is already mapped. This usually happens when a single
-       * buffer is attached to the framebuffer's depth and stencil attachment
-       * points.
-       */
-      return;
-   }
-
-   ctx->Driver.MapRenderbuffer(ctx, rb, 0, 0, rb->Width, rb->Height,
-			       GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
-			       &map, &stride);
-   irb->Base.Map = map;
-   irb->Base.RowStride = stride;
-}
-
-static void
-intel_renderbuffer_unmap(struct intel_context *intel,
-			 struct gl_renderbuffer *rb)
-{
-   struct gl_context *ctx = &intel->ctx;
-   struct intel_renderbuffer *irb = intel_renderbuffer(rb);
-
-   if (!irb)
-      return;
-
-   if (!irb->Base.Map) {
-      /* Renderbuffer is already unmapped. This usually happens when a single
-       * buffer is attached to the framebuffer's depth and stencil attachment
-       * points.
-       */
-      return;
-   }
-
-   ctx->Driver.UnmapRenderbuffer(ctx, rb);
-
-   irb->Base.Map = NULL;
-   irb->Base.RowStride = 0;
-}
-
-static void
-intel_framebuffer_map(struct intel_context *intel, struct gl_framebuffer *fb)
-{
-   int i;
-
-   for (i = 0; i < BUFFER_COUNT; i++) {
-      intel_renderbuffer_map(intel, fb->Attachment[i].Renderbuffer);
-   }
-
-   intel_check_front_buffer_rendering(intel);
-}
-
-static void
-intel_framebuffer_unmap(struct intel_context *intel, struct gl_framebuffer *fb)
-{
-   int i;
-
-   for (i = 0; i < BUFFER_COUNT; i++) {
-      intel_renderbuffer_unmap(intel, fb->Attachment[i].Renderbuffer);
-   }
-}
 
 /**
  * Resolve all buffers that will be mapped by intelSpanRenderStart().
@@ -236,10 +165,7 @@ intel_span_map_buffers(struct intel_context *intel)
 			   GL_MAP_READ_BIT | GL_MAP_WRITE_BIT);
    }
 
-   intel_framebuffer_map(intel, ctx->DrawBuffer);
-   if (ctx->ReadBuffer != ctx->DrawBuffer) {
-      intel_framebuffer_map(intel, ctx->ReadBuffer);
-   }
+   _swrast_map_renderbuffers(ctx);
 }
 
 /**
@@ -279,10 +205,7 @@ intelSpanRenderFinish(struct gl_context * ctx)
       }
    }
 
-   intel_framebuffer_unmap(intel, ctx->DrawBuffer);
-   if (ctx->ReadBuffer != ctx->DrawBuffer) {
-      intel_framebuffer_unmap(intel, ctx->ReadBuffer);
-   }
+   _swrast_unmap_renderbuffers(ctx);
 }
 
 

commit 4d72e190c0c6b6d5988ca523018e31075e2fd832
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Jan 18 17:39:33 2012 -0700

    mesa: update comments, fix whitespace in dd.h
    (cherry picked from commit 4baf90353dee771e553c552674616b93aedeaecf)

diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 0641e3b..9631113 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -398,18 +398,16 @@ struct dd_function_table {
                                    GLenum format,
                                    GLsizei imageSize, const GLvoid *data);
 
-
    /**
     * Called by glGetCompressedTexImage.
     */
    void (*GetCompressedTexImage)(struct gl_context *ctx,
                                  struct gl_texture_image *texImage,
                                  GLvoid *data);
-
    /*@}*/
 
    /**
-    * \name Texture object functions
+    * \name Texture object / image functions
     */
    /*@{*/
 
@@ -420,24 +418,20 @@ struct dd_function_table {
                         struct gl_texture_object *tObj );
 
    /**
-    * Called to allocate a new texture object.
-    * A new gl_texture_object should be returned.  The driver should
-    * attach to it any device-specific info it needs.
+    * Called to allocate a new texture object.  Drivers will usually
+    * allocate/return a subclass of gl_texture_object.
     */
-   struct gl_texture_object * (*NewTextureObject)( struct gl_context *ctx, GLuint name,
-                                                   GLenum target );
+   struct gl_texture_object * (*NewTextureObject)(struct gl_context *ctx,
+                                                  GLuint name, GLenum target);
    /**
-    * Called when a texture object is about to be deallocated.  
-    *
-    * Driver should delete the gl_texture_object object and anything
-    * hanging off of it.
+    * Called to delete/free a texture object.  Drivers should free the


Reply to: