i965g: Delete this driver.
authorKai Wasserbäch <kai@dev.carbon-project.org>
Tue, 29 Nov 2011 14:04:58 +0000 (15:04 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Tue, 29 Nov 2011 15:44:09 +0000 (15:44 +0000)
Never completed, and no plans to do so.

Signed-off-by: Kai Wasserbäch <kai@dev.carbon-project.org>
Signed-off-by: José Fonseca <jfonseca@vmware.com>
122 files changed:
configs/default
configs/linux-dri
configs/linux-i965 [deleted file]
configure.ac
src/gallium/SConscript
src/gallium/docs/source/distro.rst
src/gallium/drivers/i965/Makefile [deleted file]
src/gallium/drivers/i965/SConscript [deleted file]
src/gallium/drivers/i965/brw_batchbuffer.c [deleted file]
src/gallium/drivers/i965/brw_batchbuffer.h [deleted file]
src/gallium/drivers/i965/brw_cc.c [deleted file]
src/gallium/drivers/i965/brw_clip.c [deleted file]
src/gallium/drivers/i965/brw_clip.h [deleted file]
src/gallium/drivers/i965/brw_clip_line.c [deleted file]
src/gallium/drivers/i965/brw_clip_point.c [deleted file]
src/gallium/drivers/i965/brw_clip_state.c [deleted file]
src/gallium/drivers/i965/brw_clip_tri.c [deleted file]
src/gallium/drivers/i965/brw_clip_unfilled.c [deleted file]
src/gallium/drivers/i965/brw_clip_util.c [deleted file]
src/gallium/drivers/i965/brw_context.c [deleted file]
src/gallium/drivers/i965/brw_context.h [deleted file]
src/gallium/drivers/i965/brw_curbe.c [deleted file]
src/gallium/drivers/i965/brw_debug.h [deleted file]
src/gallium/drivers/i965/brw_defines.h [deleted file]
src/gallium/drivers/i965/brw_disasm.c [deleted file]
src/gallium/drivers/i965/brw_disasm.h [deleted file]
src/gallium/drivers/i965/brw_draw.c [deleted file]
src/gallium/drivers/i965/brw_draw.h [deleted file]
src/gallium/drivers/i965/brw_draw_upload.c [deleted file]
src/gallium/drivers/i965/brw_eu.c [deleted file]
src/gallium/drivers/i965/brw_eu.h [deleted file]
src/gallium/drivers/i965/brw_eu_debug.c [deleted file]
src/gallium/drivers/i965/brw_eu_emit.c [deleted file]
src/gallium/drivers/i965/brw_eu_util.c [deleted file]
src/gallium/drivers/i965/brw_gs.c [deleted file]
src/gallium/drivers/i965/brw_gs.h [deleted file]
src/gallium/drivers/i965/brw_gs_emit.c [deleted file]
src/gallium/drivers/i965/brw_gs_state.c [deleted file]
src/gallium/drivers/i965/brw_misc_state.c [deleted file]
src/gallium/drivers/i965/brw_pipe_blend.c [deleted file]
src/gallium/drivers/i965/brw_pipe_clear.c [deleted file]
src/gallium/drivers/i965/brw_pipe_depth.c [deleted file]
src/gallium/drivers/i965/brw_pipe_fb.c [deleted file]
src/gallium/drivers/i965/brw_pipe_flush.c [deleted file]
src/gallium/drivers/i965/brw_pipe_misc.c [deleted file]
src/gallium/drivers/i965/brw_pipe_query.c [deleted file]
src/gallium/drivers/i965/brw_pipe_rast.c [deleted file]
src/gallium/drivers/i965/brw_pipe_rast.h [deleted file]
src/gallium/drivers/i965/brw_pipe_sampler.c [deleted file]
src/gallium/drivers/i965/brw_pipe_shader.c [deleted file]
src/gallium/drivers/i965/brw_pipe_surface.c [deleted file]
src/gallium/drivers/i965/brw_pipe_vertex.c [deleted file]
src/gallium/drivers/i965/brw_public.h [deleted file]
src/gallium/drivers/i965/brw_reg.h [deleted file]
src/gallium/drivers/i965/brw_resource.c [deleted file]
src/gallium/drivers/i965/brw_resource.h [deleted file]
src/gallium/drivers/i965/brw_resource_buffer.c [deleted file]
src/gallium/drivers/i965/brw_resource_texture.c [deleted file]
src/gallium/drivers/i965/brw_resource_texture_layout.c [deleted file]
src/gallium/drivers/i965/brw_screen.c [deleted file]
src/gallium/drivers/i965/brw_screen.h [deleted file]
src/gallium/drivers/i965/brw_sf.c [deleted file]
src/gallium/drivers/i965/brw_sf.h [deleted file]
src/gallium/drivers/i965/brw_sf_emit.c [deleted file]
src/gallium/drivers/i965/brw_sf_state.c [deleted file]
src/gallium/drivers/i965/brw_state.h [deleted file]
src/gallium/drivers/i965/brw_state_batch.c [deleted file]
src/gallium/drivers/i965/brw_state_cache.c [deleted file]
src/gallium/drivers/i965/brw_state_debug.c [deleted file]
src/gallium/drivers/i965/brw_state_upload.c [deleted file]
src/gallium/drivers/i965/brw_structs.h [deleted file]
src/gallium/drivers/i965/brw_structs_dump.c [deleted file]
src/gallium/drivers/i965/brw_structs_dump.h [deleted file]
src/gallium/drivers/i965/brw_structs_dump.py [deleted file]
src/gallium/drivers/i965/brw_swtnl.c [deleted file]
src/gallium/drivers/i965/brw_types.h [deleted file]
src/gallium/drivers/i965/brw_urb.c [deleted file]
src/gallium/drivers/i965/brw_util.h [deleted file]
src/gallium/drivers/i965/brw_vs.c [deleted file]
src/gallium/drivers/i965/brw_vs.h [deleted file]
src/gallium/drivers/i965/brw_vs_emit.c [deleted file]
src/gallium/drivers/i965/brw_vs_state.c [deleted file]
src/gallium/drivers/i965/brw_vs_surface_state.c [deleted file]
src/gallium/drivers/i965/brw_winsys.h [deleted file]
src/gallium/drivers/i965/brw_winsys_debug.c [deleted file]
src/gallium/drivers/i965/brw_wm.c [deleted file]
src/gallium/drivers/i965/brw_wm.h [deleted file]
src/gallium/drivers/i965/brw_wm_constant_buffer.c [deleted file]
src/gallium/drivers/i965/brw_wm_debug.c [deleted file]
src/gallium/drivers/i965/brw_wm_emit.c [deleted file]
src/gallium/drivers/i965/brw_wm_fp.c [deleted file]
src/gallium/drivers/i965/brw_wm_glsl.c [deleted file]
src/gallium/drivers/i965/brw_wm_iz.c [deleted file]
src/gallium/drivers/i965/brw_wm_pass0.c [deleted file]
src/gallium/drivers/i965/brw_wm_pass1.c [deleted file]
src/gallium/drivers/i965/brw_wm_pass2.c [deleted file]
src/gallium/drivers/i965/brw_wm_sampler_state.c [deleted file]
src/gallium/drivers/i965/brw_wm_state.c [deleted file]
src/gallium/drivers/i965/brw_wm_surface_state.c [deleted file]
src/gallium/drivers/i965/intel_decode.c [deleted file]
src/gallium/drivers/i965/intel_decode.h [deleted file]
src/gallium/drivers/i965/intel_structs.h [deleted file]
src/gallium/targets/dri-i965/Makefile [deleted file]
src/gallium/targets/dri-i965/SConscript [deleted file]
src/gallium/targets/dri-i965/target.c [deleted file]
src/gallium/targets/egl-static/Makefile
src/gallium/targets/egl-static/SConscript
src/gallium/targets/egl-static/egl_pipe.c
src/gallium/targets/gbm/Makefile
src/gallium/targets/gbm/pipe_i965.c [deleted file]
src/gallium/targets/xorg-i965/Makefile [deleted file]
src/gallium/targets/xorg-i965/intel_target.c [deleted file]
src/gallium/targets/xorg-i965/intel_xorg.c [deleted file]
src/gallium/winsys/SConscript
src/gallium/winsys/i965/drm/Makefile [deleted file]
src/gallium/winsys/i965/drm/SConscript [deleted file]
src/gallium/winsys/i965/drm/i965_drm_buffer.c [deleted file]
src/gallium/winsys/i965/drm/i965_drm_public.h [deleted file]
src/gallium/winsys/i965/drm/i965_drm_winsys.c [deleted file]
src/gallium/winsys/i965/drm/i965_drm_winsys.h [deleted file]
src/gallium/winsys/i965/xlib/Makefile [deleted file]
src/gallium/winsys/i965/xlib/xlib_i965.c [deleted file]

index 2b1bf9bef3d75c6f8661bb48b3b98347adde4ecd..48fbbf366e093bb555f324df3f5315aa99000eac 100644 (file)
@@ -119,7 +119,7 @@ GBM_BACKEND_DIRS = dri
 # Gallium directories and 
 GALLIUM_DIRS = auxiliary drivers state_trackers
 GALLIUM_AUXILIARIES = $(TOP)/src/gallium/auxiliary/libgallium.a
-GALLIUM_DRIVERS_DIRS = softpipe trace rbug noop identity galahad i915 i965 svga r300 nvfx nv50 failover
+GALLIUM_DRIVERS_DIRS = softpipe trace rbug noop identity galahad i915 svga r300 nvfx nv50 failover
 GALLIUM_DRIVERS = $(foreach DIR,$(GALLIUM_DRIVERS_DIRS),$(TOP)/src/gallium/drivers/$(DIR)/lib$(DIR).a)
 GALLIUM_WINSYS_DIRS = sw sw/xlib
 GALLIUM_TARGET_DIRS = libgl-xlib
index 44c0c3d1d9b3517e26d1d3a6aa15b2089884a00b..6990c3a7a80d82742b5c410e7e1a35a668714d6a 100644 (file)
@@ -58,7 +58,7 @@ SRC_DIRS := glx egl $(SRC_DIRS)
 EGL_DRIVERS_DIRS = glx
 
 DRIVER_DIRS = dri
-GALLIUM_WINSYS_DIRS = sw sw/xlib drm/vmware drm/intel drm/i965 svga/drm
+GALLIUM_WINSYS_DIRS = sw sw/xlib drm/vmware drm/intel svga/drm
 GALLIUM_TARGET_DIRS = dri-vmwgfx
 GALLIUM_STATE_TRACKERS_DIRS = egl dri
 
diff --git a/configs/linux-i965 b/configs/linux-i965
deleted file mode 100644 (file)
index 7656a2a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# Configuration for standalone mode i965 debug
-
-include $(TOP)/configs/linux-debug
-
-CONFIG_NAME = linux-i965
-
-GALLIUM_DRIVER_DIRS = i965
-GALLIUM_WINSYS_DIRS = drm/i965/xlib
-GALLIUM_TARGET_DIRS =
index 39d4e0f552e6d262a6d2db2ea6bc821ec76e9af6..748df90abf4a29a2ceabf0722716fc09e8ec980a 100644 (file)
@@ -1844,14 +1844,6 @@ if test "x$with_gallium_drivers" != x; then
             GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS i915/sw"
             gallium_check_st "i915/drm" "dri-i915" "xorg-i915"
             ;;
-        xi965)
-            PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
-            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i965 softpipe"
-            if test "x$MESA_LLVM" = x1; then
-                GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
-            fi
-            gallium_check_st "i965/drm" "dri-i965" "xorg-i965"
-            ;;
         xr300)
             gallium_require_llvm "Gallium R300"
             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r300"
@@ -2019,12 +2011,6 @@ if echo "$SRC_DIRS" | grep 'gallium' >/dev/null 2>&1; then
     echo "        Winsys dirs:     $GALLIUM_WINSYS_DIRS"
     echo "        Driver dirs:     $GALLIUM_DRIVERS_DIRS"
     echo "        Trackers dirs:   $GALLIUM_STATE_TRACKERS_DIRS"
-   if echo "$GALLIUM_DRIVERS_DIRS" | grep i965 > /dev/null 2>&1; then
-      echo
-      echo "        WARNING: enabling i965 gallium driver"
-      echo "        the i965g driver is currently utterly broken, only for adventurous developers"
-      echo
-   fi
 else
     echo "        Gallium:         no"
 fi
index d9fd48425a03c8855e84362cc6807e60ecde8008..f65bc2daac32e34dbf7698c344765ec194bd5ef0 100644 (file)
@@ -25,7 +25,6 @@ if not env['msvc']:
     # These drivers do not build on MSVC compilers
     SConscript([
         'drivers/i915/SConscript', 
-        'drivers/i965/SConscript',
         'drivers/r300/SConscript',
     ])
 
@@ -112,7 +111,6 @@ if not env['embedded']:
         if env['drm_intel']:
             SConscript([
                 'targets/dri-i915/SConscript',
-                'targets/dri-i965/SConscript',
             ])
         if env['drm_radeon']:
             SConscript([
@@ -123,7 +121,6 @@ if not env['embedded']:
     if env['xorg'] and env['drm']:
         SConscript([
             #'targets/xorg-i915/SConscript',
-            #'targets/xorg-i965/SConscript',
             #'targets/xorg-nouveau/SConscript',
             #'targets/xorg-radeon/SConscript',
         ])
index 08c8eab890a15cb93c089665eae4cf506d5a9b4f..c69ab23a97dfc6115104edf2cc5ada28fdbcc21d 100644 (file)
@@ -23,11 +23,6 @@ Intel i915
 
 Driver for Intel i915 and i945 chipsets.
 
-Intel i965
-^^^^^^^^^^
-
-Highly experimental driver for Intel i965 chipsets.
-
 Identity
 ^^^^^^^^
 
diff --git a/src/gallium/drivers/i965/Makefile b/src/gallium/drivers/i965/Makefile
deleted file mode 100644 (file)
index a0331f8..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-TOP = ../../../..
-include $(TOP)/configs/current
-
-LIBNAME = i965
-
-C_SOURCES = \
-       brw_cc.c \
-       brw_clip.c \
-       brw_clip_line.c \
-       brw_clip_point.c \
-       brw_clip_state.c \
-       brw_clip_tri.c \
-       brw_clip_unfilled.c \
-       brw_clip_util.c \
-       brw_context.c \
-       brw_curbe.c \
-       brw_disasm.c \
-       brw_draw.c \
-       brw_draw_upload.c \
-       brw_eu.c \
-       brw_eu_debug.c \
-       brw_eu_emit.c \
-       brw_eu_util.c \
-       brw_gs.c \
-       brw_gs_emit.c \
-       brw_gs_state.c \
-       brw_misc_state.c \
-       brw_pipe_blend.c \
-       brw_pipe_depth.c \
-       brw_pipe_fb.c \
-       brw_pipe_query.c \
-       brw_pipe_shader.c \
-       brw_pipe_flush.c \
-       brw_pipe_misc.c \
-       brw_pipe_sampler.c \
-        brw_pipe_surface.c \
-       brw_pipe_vertex.c \
-       brw_pipe_clear.c \
-       brw_pipe_rast.c \
-       brw_resource.c \
-       brw_sf.c \
-       brw_sf_emit.c \
-       brw_sf_state.c \
-       brw_state_batch.c \
-       brw_state_debug.c \
-       brw_state_cache.c \
-       brw_state_upload.c \
-       brw_structs_dump.c \
-       brw_swtnl.c \
-       brw_urb.c \
-       brw_vs.c \
-       brw_vs_emit.c \
-       brw_vs_state.c \
-       brw_vs_surface_state.c \
-       brw_wm.c \
-       brw_wm_debug.c \
-       brw_wm_emit.c \
-       brw_wm_fp.c \
-       brw_wm_iz.c \
-       brw_wm_pass0.c \
-       brw_wm_pass1.c \
-       brw_wm_pass2.c \
-       brw_wm_sampler_state.c \
-       brw_wm_state.c \
-       brw_wm_surface_state.c \
-       brw_screen.c \
-       brw_resource_buffer.c \
-       brw_resource_texture.c \
-       brw_resource_texture_layout.c \
-       brw_batchbuffer.c \
-       brw_winsys_debug.c \
-       intel_decode.c
-
-include ../../Makefile.template
diff --git a/src/gallium/drivers/i965/SConscript b/src/gallium/drivers/i965/SConscript
deleted file mode 100644 (file)
index 3ef6c88..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-Import('*')
-
-env = env.Clone()
-
-i965 = env.ConvenienceLibrary(
-       target = 'i965',
-       source = [
-               'brw_batchbuffer.c',
-               'brw_cc.c',
-               'brw_clip.c',
-               'brw_clip_line.c',
-               'brw_clip_point.c',
-               'brw_clip_state.c',
-               'brw_clip_tri.c',
-               'brw_clip_unfilled.c',
-               'brw_clip_util.c',
-               'brw_context.c',
-               'brw_curbe.c',
-               'brw_disasm.c',
-               'brw_draw.c',
-               'brw_draw_upload.c',
-               'brw_eu.c',
-               'brw_eu_debug.c',
-               'brw_eu_emit.c',
-               'brw_eu_util.c',
-               'brw_gs.c',
-               'brw_gs_emit.c',
-               'brw_gs_state.c',
-               'brw_misc_state.c',
-               'brw_pipe_blend.c',
-               'brw_pipe_clear.c',
-               'brw_pipe_depth.c',
-               'brw_pipe_fb.c',
-               'brw_pipe_flush.c',
-               'brw_pipe_misc.c',
-               'brw_pipe_query.c',
-               'brw_pipe_rast.c',
-               'brw_pipe_sampler.c',
-                'brw_pipe_surface.c',
-                'brw_pipe_surface.c',
-               'brw_pipe_shader.c',
-               'brw_pipe_vertex.c',
-               'brw_resource.c',
-               'brw_resource_buffer.c',
-               'brw_resource_texture.c',
-               'brw_resource_texture_layout.c',
-               'brw_screen.c',
-               'brw_structs_dump.c',
-               'brw_sf.c',
-               'brw_sf_emit.c',
-               'brw_sf_state.c',
-               'brw_state_batch.c',
-               'brw_state_cache.c',
-               'brw_state_debug.c',
-               'brw_state_upload.c',
-               'brw_swtnl.c',
-               'brw_urb.c',
-               'brw_vs.c',
-               'brw_vs_emit.c',
-               'brw_vs_state.c',
-               'brw_vs_surface_state.c',
-               'brw_winsys_debug.c',
-               'brw_wm.c',
-#              'brw_wm_constant_buffer.c',
-               'brw_wm_debug.c',
-               'brw_wm_emit.c',
-               'brw_wm_fp.c',
-#              'brw_wm_glsl.c',
-               'brw_wm_iz.c',
-               'brw_wm_pass0.c',
-               'brw_wm_pass1.c',
-               'brw_wm_pass2.c',
-               'brw_wm_sampler_state.c',
-               'brw_wm_state.c',
-               'brw_wm_surface_state.c',
-               'intel_decode.c',
-       ])
-
-Export('i965')
diff --git a/src/gallium/drivers/i965/brw_batchbuffer.c b/src/gallium/drivers/i965/brw_batchbuffer.c
deleted file mode 100644 (file)
index 3c93579..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2006 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-#include "util/u_memory.h"
-
-#include "brw_batchbuffer.h"
-#include "brw_reg.h"
-#include "brw_winsys.h"
-#include "brw_debug.h"
-#include "brw_structs.h"
-
-#define ALWAYS_EMIT_MI_FLUSH 1
-
-enum pipe_error
-brw_batchbuffer_reset(struct brw_batchbuffer *batch)
-{
-   enum pipe_error ret;
-
-   ret = batch->sws->bo_alloc( batch->sws,
-                               BRW_BUFFER_TYPE_BATCH,
-                               BRW_BATCH_SIZE, 4096,
-                               &batch->buf );
-   if (ret)
-      return ret;
-
-   batch->size = BRW_BATCH_SIZE;
-
-   /* With map_range semantics, the winsys can decide whether to
-    * inject a malloc'ed bounce buffer instead of mapping directly.
-    */
-   batch->map = batch->sws->bo_map(batch->buf,
-                                   BRW_DATA_BATCH_BUFFER,
-                                   0, batch->size,
-                                   GL_TRUE,
-                                   GL_TRUE,
-                                   GL_TRUE);
-
-   batch->ptr = batch->map;
-   return PIPE_OK;
-}
-
-struct brw_batchbuffer *
-brw_batchbuffer_alloc(struct brw_winsys_screen *sws)
-{
-   struct brw_batchbuffer *batch = CALLOC_STRUCT(brw_batchbuffer);
-
-   batch->sws = sws;
-   brw_batchbuffer_reset(batch);
-
-   return batch;
-}
-
-void
-brw_batchbuffer_free(struct brw_batchbuffer *batch)
-{
-   if (batch->map) {
-      batch->sws->bo_unmap(batch->buf);
-      batch->map = NULL;
-   }
-
-   bo_reference(&batch->buf, NULL);
-   FREE(batch);
-}
-
-
-void
-_brw_batchbuffer_flush(struct brw_batchbuffer *batch, 
-                      const char *file,
-                      int line)
-{
-   GLuint used = batch->ptr - batch->map;
-
-   if (used == 0)
-      return;
-
-   /* Post-swap throttling done by the state tracker.
-    */
-
-   if (BRW_DEBUG & DEBUG_BATCH)
-      debug_printf("%s:%d: Batchbuffer flush with %db used\n", 
-                  file, line, used);
-
-   if (ALWAYS_EMIT_MI_FLUSH) {
-      *(GLuint *) (batch->ptr) = MI_FLUSH | BRW_FLUSH_STATE_CACHE;
-      batch->ptr += 4;
-      used = batch->ptr - batch->map;
-   }
-
-   /* Round batchbuffer usage to 2 DWORDs. 
-    */
-   if ((used & 4) == 0) {
-      *(GLuint *) (batch->ptr) = 0; /* noop */
-      batch->ptr += 4;
-      used = batch->ptr - batch->map;
-   }
-
-   /* Mark the end of the buffer. 
-    */
-   *(GLuint *) (batch->ptr) = MI_BATCH_BUFFER_END;
-   batch->ptr += 4;
-   used = batch->ptr - batch->map;
-
-   batch->sws->bo_flush_range(batch->buf, 0, used);
-   batch->sws->bo_unmap(batch->buf);
-   batch->map = NULL;
-   batch->ptr = NULL;
-      
-   batch->sws->bo_exec(batch->buf, used );
-
-   if (BRW_DEBUG & DEBUG_SYNC) {
-      /* Abuse map/unmap to achieve wait-for-fence.
-       *
-       * XXX: hide this inside the winsys and export a fence
-       * interface.
-       */
-      debug_printf("waiting for idle\n");
-      batch->sws->bo_wait_idle(batch->buf);
-   }
-
-   /* Reset the buffer:
-    */
-   brw_batchbuffer_reset(batch);
-}
-
-
-/* The OUT_RELOC() macro ends up here, generating a relocation within
- * the batch buffer.
- */
-enum pipe_error
-brw_batchbuffer_emit_reloc(struct brw_batchbuffer *batch,
-                          struct brw_winsys_buffer *buffer,
-                          enum brw_buffer_usage usage,
-                          uint32_t delta)
-{
-   int ret;
-
-   if (batch->ptr - batch->map > batch->buf->size) {
-      debug_printf("bad relocation ptr %p map %p offset %li size %i\n",
-                  batch->ptr, batch->map, (long) (batch->ptr - batch->map), batch->buf->size);
-
-      return PIPE_ERROR_OUT_OF_MEMORY;
-   }
-
-   ret = batch->sws->bo_emit_reloc(batch->buf,
-                                  usage,
-                                  delta, 
-                                  batch->ptr - batch->map,
-                                  buffer);
-   if (ret != 0)
-      return ret;
-
-   /* bo_emit_reloc was resposible for writing a zero into the
-    * batchbuffer if necessary.  Just need to update our pointer.
-    */
-   batch->ptr += 4;
-
-   return 0;
-}
-
-enum pipe_error
-brw_batchbuffer_data(struct brw_batchbuffer *batch,
-                       const void *data, GLuint bytes,
-                      enum cliprect_mode cliprect_mode)
-{
-   enum pipe_error ret;
-
-   assert((bytes & 3) == 0);
-
-   ret = brw_batchbuffer_require_space(batch, bytes);
-   if (ret)
-      return ret;
-
-   memcpy(batch->ptr, data, bytes);
-   batch->ptr += bytes;
-   return 0;
-}
diff --git a/src/gallium/drivers/i965/brw_batchbuffer.h b/src/gallium/drivers/i965/brw_batchbuffer.h
deleted file mode 100644 (file)
index 6ecb918..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-#ifndef BRW_BATCHBUFFER_H
-#define BRW_BATCHBUFFER_H
-
-#include "util/u_debug.h"
-
-#include "brw_types.h"
-#include "brw_winsys.h"
-#include "brw_reg.h"
-
-#define BATCH_SZ 16384
-#define BATCH_RESERVED 16
-
-/* All ignored:
- */
-enum cliprect_mode {
-   IGNORE_CLIPRECTS,
-   LOOP_CLIPRECTS,
-   NO_LOOP_CLIPRECTS,
-   REFERENCES_CLIPRECTS
-};
-
-
-
-
-struct brw_batchbuffer {
-
-   struct brw_winsys_screen *sws;
-   struct brw_winsys_buffer *buf;
-
-   /**
-    * Values exported to speed up the writing the batchbuffer,
-    * instead of having to go trough a accesor function for
-    * each dword written.
-    */
-   /*{@*/
-   uint8_t *map;
-   uint8_t *ptr;
-   size_t size;
-   struct {
-      uint8_t *end_ptr;
-   } emit;
-
-
-   size_t relocs;
-   size_t max_relocs;
-   /*@}*/
-};
-
-struct brw_batchbuffer *brw_batchbuffer_alloc( struct brw_winsys_screen *sws );
-
-
-void brw_batchbuffer_free(struct brw_batchbuffer *batch);
-
-void _brw_batchbuffer_flush(struct brw_batchbuffer *batch,
-                             const char *file, int line);
-
-
-enum pipe_error
-brw_batchbuffer_reset(struct brw_batchbuffer *batch);
-
-
-/* Unlike bmBufferData, this currently requires the buffer be mapped.
- * Consider it a convenience function wrapping multple
- * intel_buffer_dword() calls.
- */
-enum pipe_error brw_batchbuffer_data(struct brw_batchbuffer *batch,
-                            const void *data, GLuint bytes,
-                           enum cliprect_mode cliprect_mode);
-
-
-enum pipe_error brw_batchbuffer_emit_reloc(struct brw_batchbuffer *batch,
-                              struct brw_winsys_buffer *buffer,
-                              enum brw_buffer_usage usage,
-                              uint32_t offset);
-
-/* Inline functions - might actually be better off with these
- * non-inlined.  Certainly better off switching all command packets to
- * be passed as structs rather than dwords, but that's a little bit of
- * work...
- */
-static INLINE GLint
-brw_batchbuffer_space(struct brw_batchbuffer *batch)
-{
-   return (batch->size - BATCH_RESERVED) - (batch->ptr - batch->map);
-}
-
-
-static INLINE void
-brw_batchbuffer_emit_dword(struct brw_batchbuffer *batch, GLuint dword)
-{
-   assert(batch->map);
-   assert(brw_batchbuffer_space(batch) >= 4);
-   *(GLuint *) (batch->ptr) = dword;
-   batch->ptr += 4;
-}
-
-static INLINE enum pipe_error
-brw_batchbuffer_require_space(struct brw_batchbuffer *batch,
-                                GLuint sz)
-{
-   assert(sz < batch->size - 8);
-   if (brw_batchbuffer_space(batch) < sz) {
-      assert(0);
-      return PIPE_ERROR_OUT_OF_MEMORY;
-   }
-#ifdef DEBUG
-   batch->emit.end_ptr = batch->ptr + sz;
-#endif
-   return 0;
-}
-
-/* Here are the crusty old macros, to be removed:
- */
-#define BEGIN_BATCH(n, cliprect_mode) do {                             \
-      brw_batchbuffer_require_space(brw->batch, (n)*4);                        \
-   } while (0)
-
-#define OUT_BATCH(d) brw_batchbuffer_emit_dword(brw->batch, d)
-
-#define OUT_RELOC(buf, usage, delta) do {                              \
-      assert((unsigned) (delta) < buf->size);                          \
-      brw_batchbuffer_emit_reloc(brw->batch, buf,                      \
-                                usage, delta);                         \
-   } while (0)
-
-#ifdef DEBUG
-#define ADVANCE_BATCH() do {                                           \
-      unsigned int _n = brw->batch->ptr - brw->batch->emit.end_ptr;    \
-      if (_n != 0) {                                                   \
-        debug_printf("%s: %d too many bytes emitted to batch\n",       \
-                     __FUNCTION__, _n);                                \
-        abort();                                                       \
-      }                                                                        \
-      brw->batch->emit.end_ptr = NULL;                                 \
-   } while(0)
-#else
-#define ADVANCE_BATCH()
-#endif
-
-static INLINE void
-brw_batchbuffer_emit_mi_flush(struct brw_batchbuffer *batch)
-{
-   brw_batchbuffer_require_space(batch, 4);
-   brw_batchbuffer_emit_dword(batch, MI_FLUSH);
-}
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_cc.c b/src/gallium/drivers/i965/brw_cc.c
deleted file mode 100644 (file)
index cc8e380..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-
-#include "brw_context.h"
-#include "brw_state.h"
-
-
-static enum pipe_error prepare_cc_vp( struct brw_context *brw )
-{
-   return brw_cache_data( &brw->cache, 
-                         BRW_CC_VP,
-                         &brw->curr.ccv,
-                         NULL, 0,
-                         &brw->cc.reloc[CC_RELOC_VP].bo );
-}
-
-const struct brw_tracked_state brw_cc_vp = {
-   .dirty = {
-      .mesa = PIPE_NEW_VIEWPORT,
-      .brw = BRW_NEW_CONTEXT,
-      .cache = 0
-   },
-   .prepare = prepare_cc_vp
-};
-
-
-/* A long-winded way to OR two unsigned integers together:
- */
-static INLINE struct brw_cc3
-combine_cc3( struct brw_cc3 a, struct brw_cc3 b )
-{
-   union { struct brw_cc3 cc3; unsigned i; } ca, cb;
-   ca.cc3 = a;
-   cb.cc3 = b;
-   ca.i |= cb.i;
-   return ca.cc3;
-}
-
-static INLINE struct brw_cc1
-combine_cc1( struct brw_cc1 a, struct brw_cc1 b )
-{
-   union { struct brw_cc1 cc1; unsigned i; } ca, cb;
-   ca.cc1 = a;
-   cb.cc1 = b;
-   ca.i |= cb.i;
-   return ca.cc1;
-}
-
-static INLINE struct brw_cc2
-combine_cc2( struct brw_cc2 a, struct brw_cc2 b )
-{
-   union { struct brw_cc2 cc2; unsigned i; } ca, cb;
-   ca.cc2 = a;
-   cb.cc2 = b;
-   ca.i |= cb.i;
-   return ca.cc2;
-}
-
-static int prepare_cc_unit( struct brw_context *brw )
-{
-   brw->cc.cc.cc0 = brw->curr.zstencil->cc0;
-   brw->cc.cc.cc1 = combine_cc1( brw->curr.zstencil->cc1, brw->curr.cc1_stencil_ref );
-   brw->cc.cc.cc2 = combine_cc2( brw->curr.zstencil->cc2, brw->curr.blend->cc2 );
-   brw->cc.cc.cc3 = combine_cc3( brw->curr.zstencil->cc3, brw->curr.blend->cc3 );
-
-   brw->cc.cc.cc5 = brw->curr.blend->cc5;
-   brw->cc.cc.cc6 = brw->curr.blend->cc6;
-   brw->cc.cc.cc7 = brw->curr.zstencil->cc7;
-
-   return brw_cache_data_sz(&brw->cache, BRW_CC_UNIT,
-                           &brw->cc.cc, sizeof(brw->cc.cc),
-                           brw->cc.reloc, 1,
-                           &brw->cc.state_bo);
-}
-
-const struct brw_tracked_state brw_cc_unit = {
-   .dirty = {
-      .mesa = PIPE_NEW_DEPTH_STENCIL_ALPHA | PIPE_NEW_BLEND,
-      .brw = 0,
-      .cache = CACHE_NEW_CC_VP
-   },
-   .prepare = prepare_cc_unit,
-};
-
-
-void brw_hw_cc_init( struct brw_context *brw )
-{
-   make_reloc(&brw->cc.reloc[0],
-              BRW_USAGE_STATE,
-              0,
-              offsetof(struct brw_cc_unit_state, cc4),
-              NULL);
-}
-
-
-void brw_hw_cc_cleanup( struct brw_context *brw )
-{
-   bo_reference(&brw->cc.state_bo, NULL);
-   bo_reference(&brw->cc.reloc[0].bo, NULL);
-}
diff --git a/src/gallium/drivers/i965/brw_clip.c b/src/gallium/drivers/i965/brw_clip.c
deleted file mode 100644 (file)
index 66b13ea..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "pipe/p_state.h"
-
-#include "util/u_math.h"
-
-#include "brw_screen.h"
-#include "brw_batchbuffer.h"
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_eu.h"
-#include "brw_state.h"
-#include "brw_pipe_rast.h"
-#include "brw_clip.h"
-
-
-#define FRONT_UNFILLED_BIT  0x1
-#define BACK_UNFILLED_BIT   0x2
-
-
-static enum pipe_error
-compile_clip_prog( struct brw_context *brw,
-                   struct brw_clip_prog_key *key,
-                   struct brw_winsys_buffer **bo_out )
-{
-   enum pipe_error ret;
-   struct brw_clip_compile c;
-   const GLuint *program;
-   GLuint program_size;
-   GLuint delta;
-
-   memset(&c, 0, sizeof(c));
-   
-   /* Begin the compilation:
-    */
-   brw_init_compile(brw, &c.func);
-
-   c.func.single_program_flow = 1;
-
-   c.key = *key;
-
-   /* Need to locate the two positions present in vertex + header.
-    * These are currently hardcoded:
-    */
-   c.header_position_offset = ATTR_SIZE;
-
-   if (brw->gen == 5)
-       delta = 3 * REG_SIZE;
-   else
-       delta = REG_SIZE;
-
-   c.offset_hpos = delta + c.key.output_hpos * ATTR_SIZE;
-
-   if (c.key.output_color0 != BRW_OUTPUT_NOT_PRESENT)
-      c.offset_color0 = delta + c.key.output_color0 * ATTR_SIZE;
-
-   if (c.key.output_color1 != BRW_OUTPUT_NOT_PRESENT)
-      c.offset_color1 = delta + c.key.output_color1 * ATTR_SIZE;
-
-   if (c.key.output_bfc0 != BRW_OUTPUT_NOT_PRESENT)
-      c.offset_bfc0 = delta + c.key.output_bfc0 * ATTR_SIZE;
-
-   if (c.key.output_bfc1 != BRW_OUTPUT_NOT_PRESENT)
-      c.offset_bfc1 = delta + c.key.output_bfc1 * ATTR_SIZE;
-
-   if (c.key.output_edgeflag != BRW_OUTPUT_NOT_PRESENT)
-      c.offset_edgeflag = delta + c.key.output_edgeflag * ATTR_SIZE;
-   
-   if (brw->gen == 5)
-       c.nr_regs = (c.key.nr_attrs + 1) / 2 + 3;  /* are vertices packed, or reg-aligned? */
-   else
-       c.nr_regs = (c.key.nr_attrs + 1) / 2 + 1;  /* are vertices packed, or reg-aligned? */
-
-   c.nr_bytes = c.nr_regs * REG_SIZE;
-
-   c.prog_data.clip_mode = c.key.clip_mode; /* XXX */
-
-   /* For some reason the thread is spawned with only 4 channels
-    * unmasked.  
-    */
-   brw_set_mask_control(&c.func, BRW_MASK_DISABLE);
-
-
-   /* Would ideally have the option of producing a program which could
-    * do all three:
-    */
-   switch (key->primitive) {
-   case PIPE_PRIM_TRIANGLES: 
-      if (key->do_unfilled)
-        brw_emit_unfilled_clip( &c );
-      else
-        brw_emit_tri_clip( &c );
-      break;
-   case PIPE_PRIM_LINES:
-      brw_emit_line_clip( &c );
-      break;
-   case PIPE_PRIM_POINTS:
-      brw_emit_point_clip( &c );
-      break;
-   default:
-      assert(0);
-      return PIPE_ERROR_BAD_INPUT;
-   }
-
-        
-
-   /* get the program
-    */
-   ret = brw_get_program(&c.func, &program, &program_size);
-   if (ret)
-      return ret;
-
-   /* Upload
-    */
-   ret = brw_upload_cache( &brw->cache,
-                           BRW_CLIP_PROG,
-                           &c.key, sizeof(c.key),
-                           NULL, 0,
-                           program, program_size,
-                           &c.prog_data,
-                           &brw->clip.prog_data,
-                           bo_out );
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-/* Calculate interpolants for triangle and line rasterization.
- */
-static enum pipe_error
-upload_clip_prog(struct brw_context *brw)
-{
-   const struct brw_vertex_shader *vs = brw->curr.vertex_shader;
-   struct brw_clip_prog_key key;
-   enum pipe_error ret;
-
-   /* Populate the key, starting from the almost-complete version from
-    * the rast state. 
-    */
-
-   /* PIPE_NEW_RAST */
-   key = brw->curr.rast->clip_key;
-   
-   /* BRW_NEW_REDUCED_PRIMITIVE */
-   key.primitive = brw->reduced_primitive;
-
-   /* XXX: if edgeflag is moved to a proper TGSI vs output, can remove
-    * dependency on CACHE_NEW_VS_PROG
-    */
-   /* CACHE_NEW_VS_PROG */
-   key.nr_attrs        = brw->vs.prog_data->nr_outputs;
-
-   /* PIPE_NEW_VS */
-   key.output_hpos     = vs->output_hpos;
-   key.output_color0   = vs->output_color0;
-   key.output_color1   = vs->output_color1;
-   key.output_bfc0     = vs->output_bfc0;
-   key.output_bfc1     = vs->output_bfc1;
-   key.output_edgeflag = vs->output_edgeflag;
-
-   /* PIPE_NEW_CLIP */
-   key.nr_userclip = brw->curr.ucp.nr;
-
-   /* Already cached?
-    */
-   if (brw_search_cache(&brw->cache, BRW_CLIP_PROG,
-                        &key, sizeof(key),
-                        NULL, 0,
-                        &brw->clip.prog_data,
-                        &brw->clip.prog_bo))
-      return PIPE_OK;
-
-   /* Compile new program:
-    */
-   ret = compile_clip_prog( brw, &key, &brw->clip.prog_bo );
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-const struct brw_tracked_state brw_clip_prog = {
-   .dirty = {
-      .mesa  = (PIPE_NEW_RAST | 
-               PIPE_NEW_CLIP),
-      .brw   = (BRW_NEW_REDUCED_PRIMITIVE),
-      .cache = CACHE_NEW_VS_PROG
-   },
-   .prepare = upload_clip_prog
-};
diff --git a/src/gallium/drivers/i965/brw_clip.h b/src/gallium/drivers/i965/brw_clip.h
deleted file mode 100644 (file)
index f123b73..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#ifndef BRW_CLIP_H
-#define BRW_CLIP_H
-
-#include "pipe/p_state.h"
-#include "brw_reg.h"
-#include "brw_eu.h"
-
-#define MAX_VERTS (3+6+6)      
-
-/* Note that if unfilled primitives are being emitted, we have to fix
- * up polygon offset and flatshading at this point:
- */
-struct brw_clip_prog_key {
-   GLuint nr_attrs:6;
-   GLuint primitive:4;
-   GLuint nr_userclip:3;
-   GLuint do_flat_shading:1;
-   GLuint do_unfilled:1;
-   GLuint fill_cw:2;           /* includes cull information */
-   GLuint fill_ccw:2;          /* includes cull information */
-   GLuint offset_cw:1;
-   GLuint offset_ccw:1;
-   GLuint copy_bfc_cw:1;
-   GLuint copy_bfc_ccw:1;
-   GLuint clip_mode:3;
-   GLuint output_hpos:6;        /* not always zero? */
-
-   GLuint output_color0:6;
-   GLuint output_color1:6;
-   GLuint output_bfc0:6;
-   GLuint output_bfc1:6;
-   GLuint output_edgeflag:6;
-   GLuint pad1:2;
-   
-   GLfloat offset_factor;
-   GLfloat offset_units;
-};
-
-struct brw_clip_prog_data {
-   GLuint curb_read_length;    /* user planes? */
-   GLuint clip_mode;
-   GLuint urb_read_length;
-   GLuint total_grf;
-};
-
-#define CLIP_LINE   0
-#define CLIP_POINT  1
-#define CLIP_FILL   2
-#define CLIP_CULL   3
-
-
-#define PRIM_MASK  (0x1f)
-
-struct brw_clip_compile {
-   struct brw_compile func;
-   struct brw_clip_prog_key key;
-   struct brw_clip_prog_data prog_data;
-   
-   struct {
-      struct brw_reg R0;
-      struct brw_reg vertex[MAX_VERTS];
-
-      struct brw_reg t;
-      struct brw_reg t0, t1;
-      struct brw_reg dp0, dp1;
-
-      struct brw_reg dpPrev;
-      struct brw_reg dp;
-      struct brw_reg loopcount;
-      struct brw_reg nr_verts;
-      struct brw_reg planemask;
-
-      struct brw_reg inlist;
-      struct brw_reg outlist;
-      struct brw_reg freelist;
-
-      struct brw_reg dir;
-      struct brw_reg tmp0, tmp1;
-      struct brw_reg offset;
-      
-      struct brw_reg fixed_planes;
-      struct brw_reg plane_equation;
-       
-      struct brw_reg ff_sync;
-   } reg;
-
-   /* 3 different ways of expressing vertex size, including
-    * key.nr_attrs.
-    */
-   GLuint nr_regs;
-   GLuint nr_bytes;
-
-   GLuint first_tmp;
-   GLuint last_tmp;
-
-   GLboolean need_direction;
-
-   GLuint last_mrf;
-
-   GLuint header_position_offset;
-
-   GLuint nr_color_attrs;
-   GLuint offset_color0;
-   GLuint offset_color1;
-   GLuint offset_bfc0;
-   GLuint offset_bfc1;
-
-   GLuint offset_hpos;
-   GLuint offset_edgeflag;
-};
-
-#define ATTR_SIZE  (4*4)
-
-/* Points are only culled, so no need for a clip routine, however it
- * works out easier to have a dummy one.
- */
-void brw_emit_unfilled_clip( struct brw_clip_compile *c );
-void brw_emit_tri_clip( struct brw_clip_compile *c );
-void brw_emit_line_clip( struct brw_clip_compile *c );
-void brw_emit_point_clip( struct brw_clip_compile *c );
-
-/* brw_clip_tri.c, for use by the unfilled clip routine:
- */
-void brw_clip_tri_init_vertices( struct brw_clip_compile *c );
-void brw_clip_tri_flat_shade( struct brw_clip_compile *c );
-void brw_clip_tri( struct brw_clip_compile *c );
-void brw_clip_tri_emit_polygon( struct brw_clip_compile *c );
-void brw_clip_tri_alloc_regs( struct brw_clip_compile *c, 
-                             GLuint nr_verts );
-
-
-/* Utils:
- */
-
-void brw_clip_interp_vertex( struct brw_clip_compile *c,
-                            struct brw_indirect dest_ptr,
-                            struct brw_indirect v0_ptr, /* from */
-                            struct brw_indirect v1_ptr, /* to */
-                            struct brw_reg t0,
-                            GLboolean force_edgeflag );
-
-void brw_clip_init_planes( struct brw_clip_compile *c );
-
-void brw_clip_emit_vue(struct brw_clip_compile *c, 
-                      struct brw_indirect vert,
-                      GLboolean allocate,
-                      GLboolean eot,
-                      GLuint header);
-
-void brw_clip_kill_thread(struct brw_clip_compile *c);
-
-struct brw_reg brw_clip_plane_stride( struct brw_clip_compile *c );
-struct brw_reg brw_clip_plane0_address( struct brw_clip_compile *c );
-
-void brw_clip_copy_colors( struct brw_clip_compile *c,
-                          GLuint to, GLuint from );
-
-void brw_clip_init_clipmask( struct brw_clip_compile *c );
-
-struct brw_reg get_tmp( struct brw_clip_compile *c );
-
-void brw_clip_project_position(struct brw_clip_compile *c,
-             struct brw_reg pos );
-void brw_clip_ff_sync(struct brw_clip_compile *c);
-void brw_clip_init_ff_sync(struct brw_clip_compile *c);
-#endif
diff --git a/src/gallium/drivers/i965/brw_clip_line.c b/src/gallium/drivers/i965/brw_clip_line.c
deleted file mode 100644 (file)
index 4ed7362..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "util/u_debug.h"
-
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_eu.h"
-#include "brw_clip.h"
-
-
-
-
-static void brw_clip_line_alloc_regs( struct brw_clip_compile *c )
-{
-   GLuint i = 0,j;
-   struct brw_context *brw = c->func.brw;
-   /* Register usage is static, precompute here:
-    */
-   c->reg.R0 = retype(brw_vec8_grf(i, 0), BRW_REGISTER_TYPE_UD); i++;
-
-   if (c->key.nr_userclip) {
-      c->reg.fixed_planes = brw_vec4_grf(i, 0);
-      i += (6 + c->key.nr_userclip + 1) / 2;
-
-      c->prog_data.curb_read_length = (6 + c->key.nr_userclip + 1) / 2;
-   }
-   else
-      c->prog_data.curb_read_length = 0;
-
-
-   /* Payload vertices plus space for more generated vertices:
-    */
-   for (j = 0; j < 4; j++) {
-      c->reg.vertex[j] = brw_vec4_grf(i, 0);
-      i += c->nr_regs;
-   }
-
-   c->reg.t           = brw_vec1_grf(i, 0);
-   c->reg.t0          = brw_vec1_grf(i, 1);
-   c->reg.t1          = brw_vec1_grf(i, 2);
-   c->reg.planemask   = retype(brw_vec1_grf(i, 3), BRW_REGISTER_TYPE_UD);
-   c->reg.plane_equation = brw_vec4_grf(i, 4);
-   i++;
-
-   c->reg.dp0         = brw_vec1_grf(i, 0); /* fixme - dp4 will clobber r.1,2,3 */
-   c->reg.dp1         = brw_vec1_grf(i, 4);
-   i++;
-
-   if (!c->key.nr_userclip) {
-      c->reg.fixed_planes = brw_vec8_grf(i, 0); 
-      i++;
-   }
-
-   if (brw->needs_ff_sync) {
-      c->reg.ff_sync = retype(brw_vec1_grf(i, 0), BRW_REGISTER_TYPE_UD);
-      i++;
-   }
-
-   c->first_tmp = i;
-   c->last_tmp = i;
-
-   c->prog_data.urb_read_length = c->nr_regs; /* ? */
-   c->prog_data.total_grf = i;
-}
-
-
-
-/* Line clipping, more or less following the following algorithm:
- *
- *  for (p=0;p<MAX_PLANES;p++) {
- *     if (clipmask & (1 << p)) {
- *        GLfloat dp0 = DOTPROD( vtx0, plane[p] );
- *        GLfloat dp1 = DOTPROD( vtx1, plane[p] );
- *
- *        if (IS_NEGATIVE(dp1)) {
- *           GLfloat t = dp1 / (dp1 - dp0);
- *           if (t > t1) t1 = t;
- *        } else {
- *           GLfloat t = dp0 / (dp0 - dp1);
- *           if (t > t0) t0 = t;
- *        }
- *  
- *        if (t0 + t1 >= 1.0)
- *           return;
- *     }
- *  }
- *
- *  interp( ctx, newvtx0, vtx0, vtx1, t0 );
- *  interp( ctx, newvtx1, vtx1, vtx0, t1 );
- *
- */
-static void clip_and_emit_line( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_context *brw = p->brw;
-   struct brw_indirect vtx0     = brw_indirect(0, 0);
-   struct brw_indirect vtx1      = brw_indirect(1, 0);
-   struct brw_indirect newvtx0   = brw_indirect(2, 0);
-   struct brw_indirect newvtx1   = brw_indirect(3, 0);
-   struct brw_indirect plane_ptr = brw_indirect(4, 0);
-   struct brw_instruction *plane_loop;
-   struct brw_instruction *plane_active;
-   struct brw_instruction *is_negative;
-   struct brw_instruction *is_neg2 = NULL;
-   struct brw_instruction *not_culled;
-   struct brw_reg v1_null_ud = retype(vec1(brw_null_reg()), BRW_REGISTER_TYPE_UD);
-
-   brw_MOV(p, get_addr_reg(vtx0),      brw_address(c->reg.vertex[0]));
-   brw_MOV(p, get_addr_reg(vtx1),      brw_address(c->reg.vertex[1]));
-   brw_MOV(p, get_addr_reg(newvtx0),   brw_address(c->reg.vertex[2]));
-   brw_MOV(p, get_addr_reg(newvtx1),   brw_address(c->reg.vertex[3]));
-   brw_MOV(p, get_addr_reg(plane_ptr), brw_clip_plane0_address(c));
-
-   /* Note: init t0, t1 together: 
-    */
-   brw_MOV(p, vec2(c->reg.t0), brw_imm_f(0));
-
-   brw_clip_init_planes(c);
-   brw_clip_init_clipmask(c);
-
-   /* -ve rhw workaround */
-   if (brw->has_negative_rhw_bug) {
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-      brw_AND(p, brw_null_reg(), get_element_ud(c->reg.R0, 2),
-              brw_imm_ud(1<<20));
-      brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud(0x3f));
-   }
-
-   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-   plane_loop = brw_DO(p, BRW_EXECUTE_1);
-   {
-      /* if (planemask & 1)
-       */
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-      brw_AND(p, v1_null_ud, c->reg.planemask, brw_imm_ud(1));
-      
-      plane_active = brw_IF(p, BRW_EXECUTE_1);
-      {
-        if (c->key.nr_userclip)
-           brw_MOV(p, c->reg.plane_equation, deref_4f(plane_ptr, 0));
-        else
-           brw_MOV(p, c->reg.plane_equation, deref_4b(plane_ptr, 0));
-
-        /* dp = DP4(vtx->position, plane) 
-         */
-        brw_DP4(p, vec4(c->reg.dp0), deref_4f(vtx0, c->offset_hpos), c->reg.plane_equation);
-
-        /* if (IS_NEGATIVE(dp1)) 
-         */
-        brw_set_conditionalmod(p, BRW_CONDITIONAL_L);
-        brw_DP4(p, vec4(c->reg.dp1), deref_4f(vtx1, c->offset_hpos), c->reg.plane_equation);
-        is_negative = brw_IF(p, BRW_EXECUTE_1);
-        {
-             /*
-              * Both can be negative on GM965/G965 due to RHW workaround
-              * if so, this object should be rejected.
-              */
-            if (brw->has_negative_rhw_bug) {
-                 brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_LE, c->reg.dp0, brw_imm_f(0.0));
-                 is_neg2 = brw_IF(p, BRW_EXECUTE_1);
-                 {
-                     brw_clip_kill_thread(c);
-                 }
-                 brw_ENDIF(p, is_neg2);
-             }
-
-             brw_ADD(p, c->reg.t, c->reg.dp1, negate(c->reg.dp0));
-             brw_math_invert(p, c->reg.t, c->reg.t);
-             brw_MUL(p, c->reg.t, c->reg.t, c->reg.dp1);
-
-             brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_G, c->reg.t, c->reg.t1 );
-             brw_MOV(p, c->reg.t1, c->reg.t);
-             brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-        } 
-        is_negative = brw_ELSE(p, is_negative);
-        {
-             /* Coming back in.  We know that both cannot be negative
-              * because the line would have been culled in that case.
-              */
-
-             /* If both are positive, do nothing */
-             /* Only on GM965/G965 */
-            if (brw->has_negative_rhw_bug) {
-                 brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_L, c->reg.dp0, brw_imm_f(0.0));
-                 is_neg2 = brw_IF(p, BRW_EXECUTE_1);
-             }
-
-             {
-                 brw_ADD(p, c->reg.t, c->reg.dp0, negate(c->reg.dp1));
-                 brw_math_invert(p, c->reg.t, c->reg.t);
-                 brw_MUL(p, c->reg.t, c->reg.t, c->reg.dp0);
-
-                 brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_G, c->reg.t, c->reg.t0 );
-                 brw_MOV(p, c->reg.t0, c->reg.t);
-                 brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-             }
-
-            if (brw->has_negative_rhw_bug) {
-                 brw_ENDIF(p, is_neg2);
-             }
-         }
-        brw_ENDIF(p, is_negative);      
-      }
-      brw_ENDIF(p, plane_active);
-      
-      /* plane_ptr++;
-       */
-      brw_ADD(p, get_addr_reg(plane_ptr), get_addr_reg(plane_ptr), brw_clip_plane_stride(c));
-
-      /* while (planemask>>=1) != 0
-       */
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-      brw_SHR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud(1));
-   }
-   brw_WHILE(p, plane_loop);
-
-   brw_ADD(p, c->reg.t, c->reg.t0, c->reg.t1);
-   brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_L, c->reg.t, brw_imm_f(1.0));
-   not_culled = brw_IF(p, BRW_EXECUTE_1);
-   {
-      brw_clip_interp_vertex(c, newvtx0, vtx0, vtx1, c->reg.t0, FALSE);
-      brw_clip_interp_vertex(c, newvtx1, vtx1, vtx0, c->reg.t1, FALSE);
-
-      brw_clip_emit_vue(c, newvtx0, 1, 0, (_3DPRIM_LINESTRIP << 2) | R02_PRIM_START);
-      brw_clip_emit_vue(c, newvtx1, 0, 1, (_3DPRIM_LINESTRIP << 2) | R02_PRIM_END); 
-   }
-   brw_ENDIF(p, not_culled);
-   brw_clip_kill_thread(c);
-}
-
-
-
-void brw_emit_line_clip( struct brw_clip_compile *c )
-{
-   brw_clip_line_alloc_regs(c);
-   brw_clip_init_ff_sync(c);
-
-   if (c->key.do_flat_shading)
-      brw_clip_copy_colors(c, 0, 1);
-                
-   clip_and_emit_line(c);
-}
diff --git a/src/gallium/drivers/i965/brw_clip_point.c b/src/gallium/drivers/i965/brw_clip_point.c
deleted file mode 100644 (file)
index 124156c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "brw_defines.h"
-#include "brw_eu.h"
-#include "brw_clip.h"
-
-
-/* Point clipping, nothing to do?
- */
-void brw_emit_point_clip( struct brw_clip_compile *c )
-{
-   /* Send an empty message to kill the thread:
-    */
-   brw_clip_tri_alloc_regs(c, 0);
-   brw_clip_init_ff_sync(c);
-
-   brw_clip_kill_thread(c);
-}
diff --git a/src/gallium/drivers/i965/brw_clip_state.c b/src/gallium/drivers/i965/brw_clip_state.c
deleted file mode 100644 (file)
index f56edf3..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "util/u_math.h"
-
-#include "brw_context.h"
-#include "brw_clip.h"
-#include "brw_state.h"
-#include "brw_defines.h"
-#include "brw_debug.h"
-
-struct brw_clip_unit_key {
-   unsigned int total_grf;
-   unsigned int urb_entry_read_length;
-   unsigned int curb_entry_read_length;
-   unsigned int clip_mode;
-
-   unsigned int curbe_offset;
-
-   unsigned int nr_urb_entries, urb_size;
-
-   GLboolean depth_clamp;
-};
-
-static void
-clip_unit_populate_key(struct brw_context *brw, struct brw_clip_unit_key *key)
-{
-   memset(key, 0, sizeof(*key));
-
-   /* CACHE_NEW_CLIP_PROG */
-   key->total_grf = brw->clip.prog_data->total_grf;
-   key->urb_entry_read_length = brw->clip.prog_data->urb_read_length;
-   key->curb_entry_read_length = brw->clip.prog_data->curb_read_length;
-   key->clip_mode = brw->clip.prog_data->clip_mode;
-
-   /* BRW_NEW_CURBE_OFFSETS */
-   key->curbe_offset = brw->curbe.clip_start;
-
-   /* BRW_NEW_URB_FENCE */
-   key->nr_urb_entries = brw->urb.nr_clip_entries;
-   key->urb_size = brw->urb.vsize;
-
-   /*  */
-   key->depth_clamp = 0; /* XXX: add this to gallium: ctx->Transform.DepthClamp; */
-}
-
-static enum pipe_error
-clip_unit_create_from_key(struct brw_context *brw,
-                          struct brw_clip_unit_key *key,
-                          struct brw_winsys_reloc *reloc,
-                          struct brw_winsys_buffer **bo_out)
-{
-   struct brw_clip_unit_state clip;
-   enum pipe_error ret;
-
-   memset(&clip, 0, sizeof(clip));
-
-   clip.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
-   /* reloc */
-   clip.thread0.kernel_start_pointer = 0;
-
-   clip.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
-   clip.thread1.single_program_flow = 1;
-
-   clip.thread3.urb_entry_read_length = key->urb_entry_read_length;
-   clip.thread3.const_urb_entry_read_length = key->curb_entry_read_length;
-   clip.thread3.const_urb_entry_read_offset = key->curbe_offset * 2;
-   clip.thread3.dispatch_grf_start_reg = 1;
-   clip.thread3.urb_entry_read_offset = 0;
-
-   clip.thread4.nr_urb_entries = key->nr_urb_entries;
-   clip.thread4.urb_entry_allocation_size = key->urb_size - 1;
-   /* If we have enough clip URB entries to run two threads, do so.
-    */
-   if (key->nr_urb_entries >= 10) {
-      /* Half of the URB entries go to each thread, and it has to be an
-       * even number.
-       */
-      assert(key->nr_urb_entries % 2 == 0);
-      
-      /* Although up to 16 concurrent Clip threads are allowed on IGDNG, 
-       * only 2 threads can output VUEs at a time.
-       */
-      if (brw->gen == 5)
-         clip.thread4.max_threads = 16 - 1;        
-      else
-         clip.thread4.max_threads = 2 - 1;
-   } else {
-      assert(key->nr_urb_entries >= 5);
-      clip.thread4.max_threads = 1 - 1;
-   }
-
-   if (BRW_DEBUG & DEBUG_SINGLE_THREAD)
-      clip.thread4.max_threads = 0;
-
-   if (BRW_DEBUG & DEBUG_STATS)
-      clip.thread4.stats_enable = 1;
-
-   clip.clip5.userclip_enable_flags = 0x7f;
-   clip.clip5.userclip_must_clip = 1;
-   clip.clip5.guard_band_enable = 0;
-   if (!key->depth_clamp)
-      clip.clip5.viewport_z_clip_enable = 1;
-   clip.clip5.viewport_xy_clip_enable = 1;
-   clip.clip5.vertex_position_space = BRW_CLIP_NDCSPACE;
-   clip.clip5.api_mode = BRW_CLIP_API_OGL;
-   clip.clip5.clip_mode = key->clip_mode;
-
-   if (brw->is_g4x)
-      clip.clip5.negative_w_clip_test = 1;
-
-   clip.clip6.clipper_viewport_state_ptr = 0;
-   clip.viewport_xmin = -1;
-   clip.viewport_xmax = 1;
-   clip.viewport_ymin = -1;
-   clip.viewport_ymax = 1;
-
-   ret = brw_upload_cache(&brw->cache, BRW_CLIP_UNIT,
-                          key, sizeof(*key),
-                          reloc, 1,
-                          &clip, sizeof(clip),
-                          NULL, NULL,
-                          bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-static int upload_clip_unit( struct brw_context *brw )
-{
-   struct brw_clip_unit_key key;
-   struct brw_winsys_reloc reloc[1];
-   unsigned grf_reg_count;
-   enum pipe_error ret;
-
-   clip_unit_populate_key(brw, &key);
-
-   grf_reg_count = align(key.total_grf, 16) / 16 - 1;
-
-   /* clip program relocation
-    *
-    * XXX: these reloc structs are long lived and only need to be
-    * updated when the bound BO changes.  Hopefully the stuff mixed in
-    * in the delta's is non-orthogonal.
-    */
-   assert(brw->clip.prog_bo);
-   make_reloc(&reloc[0],
-              BRW_USAGE_STATE,
-              grf_reg_count << 1,
-              offsetof(struct brw_clip_unit_state, thread0),
-              brw->clip.prog_bo);
-
-
-   if (brw_search_cache(&brw->cache, BRW_CLIP_UNIT,
-                        &key, sizeof(key),
-                        reloc, 1,
-                        NULL,
-                        &brw->clip.state_bo))
-      return PIPE_OK;
-      
-   /* Create new:
-    */
-   ret = clip_unit_create_from_key(brw, &key, 
-                                   reloc,
-                                   &brw->clip.state_bo);
-   if (ret)
-      return ret;
-   
-   return PIPE_OK;
-}
-
-const struct brw_tracked_state brw_clip_unit = {
-   .dirty = {
-      .mesa  = 0,
-      .brw   = (BRW_NEW_CURBE_OFFSETS |
-               BRW_NEW_URB_FENCE),
-      .cache = CACHE_NEW_CLIP_PROG
-   },
-   .prepare = upload_clip_unit,
-};
diff --git a/src/gallium/drivers/i965/brw_clip_tri.c b/src/gallium/drivers/i965/brw_clip_tri.c
deleted file mode 100644 (file)
index 7d400e6..0000000
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_eu.h"
-#include "brw_clip.h"
-
-static void release_tmps( struct brw_clip_compile *c )
-{
-   c->last_tmp = c->first_tmp;
-}
-
-
-void brw_clip_tri_alloc_regs( struct brw_clip_compile *c, 
-                             GLuint nr_verts )
-{
-   GLuint i = 0,j;
-   struct brw_context *brw = c->func.brw;
-
-   /* Register usage is static, precompute here:
-    */
-   c->reg.R0 = retype(brw_vec8_grf(i, 0), BRW_REGISTER_TYPE_UD); i++;
-
-   if (c->key.nr_userclip) {
-      c->reg.fixed_planes = brw_vec4_grf(i, 0);
-      i += (6 + c->key.nr_userclip + 1) / 2;
-
-      c->prog_data.curb_read_length = (6 + c->key.nr_userclip + 1) / 2;
-   }
-   else
-      c->prog_data.curb_read_length = 0;
-
-
-   /* Payload vertices plus space for more generated vertices:
-    */
-   for (j = 0; j < nr_verts; j++) {
-      c->reg.vertex[j] = brw_vec4_grf(i, 0);
-      i += c->nr_regs;
-   }
-
-   if (c->key.nr_attrs & 1) {
-      for (j = 0; j < 3; j++) {
-        GLuint delta = c->key.nr_attrs*16 + 32;
-
-         if (brw->gen == 5)
-             delta = c->key.nr_attrs * 16 + 32 * 3;
-
-        brw_MOV(&c->func, byte_offset(c->reg.vertex[j], delta), brw_imm_f(0));
-      }
-   }
-
-   c->reg.t          = brw_vec1_grf(i, 0);
-   c->reg.loopcount  = retype(brw_vec1_grf(i, 1), BRW_REGISTER_TYPE_D);
-   c->reg.nr_verts   = retype(brw_vec1_grf(i, 2), BRW_REGISTER_TYPE_UD);
-   c->reg.planemask  = retype(brw_vec1_grf(i, 3), BRW_REGISTER_TYPE_UD);
-   c->reg.plane_equation = brw_vec4_grf(i, 4);
-   i++;
-
-   c->reg.dpPrev     = brw_vec1_grf(i, 0); /* fixme - dp4 will clobber r.1,2,3 */
-   c->reg.dp         = brw_vec1_grf(i, 4);
-   i++;
-
-   c->reg.inlist     = brw_uw16_reg(BRW_GENERAL_REGISTER_FILE, i, 0);
-   i++;
-
-   c->reg.outlist    = brw_uw16_reg(BRW_GENERAL_REGISTER_FILE, i, 0);
-   i++;
-
-   c->reg.freelist   = brw_uw16_reg(BRW_GENERAL_REGISTER_FILE, i, 0);
-   i++;
-
-   if (!c->key.nr_userclip) {
-      c->reg.fixed_planes = brw_vec8_grf(i, 0); 
-      i++;
-   }
-
-   if (c->key.do_unfilled) {
-      c->reg.dir     = brw_vec4_grf(i, 0);
-      c->reg.offset  = brw_vec4_grf(i, 4);
-      i++;
-      c->reg.tmp0    = brw_vec4_grf(i, 0);
-      c->reg.tmp1    = brw_vec4_grf(i, 4);
-      i++;
-   }
-
-   if (brw->needs_ff_sync) {
-      c->reg.ff_sync = retype(brw_vec1_grf(i, 0), BRW_REGISTER_TYPE_UD);
-      i++;
-   }
-
-   c->first_tmp = i;
-   c->last_tmp = i;
-
-   c->prog_data.urb_read_length = c->nr_regs; /* ? */
-   c->prog_data.total_grf = i;
-}
-
-
-
-void brw_clip_tri_init_vertices( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg tmp0 = c->reg.loopcount; /* handy temporary */
-   struct brw_instruction *is_rev;
-
-   /* Initial list of indices for incoming vertexes:
-    */
-   brw_AND(p, tmp0, get_element_ud(c->reg.R0, 2), brw_imm_ud(PRIM_MASK)); 
-   brw_CMP(p, 
-          vec1(brw_null_reg()), 
-          BRW_CONDITIONAL_EQ, 
-          tmp0,
-          brw_imm_ud(_3DPRIM_TRISTRIP_REVERSE));
-
-   /* XXX: Is there an easier way to do this?  Need to reverse every
-    * second tristrip element:  Can ignore sometimes?
-    */
-   is_rev = brw_IF(p, BRW_EXECUTE_1);
-   {   
-      brw_MOV(p, get_element(c->reg.inlist, 0),  brw_address(c->reg.vertex[1]) );
-      brw_MOV(p, get_element(c->reg.inlist, 1),  brw_address(c->reg.vertex[0]) );
-      if (c->need_direction)
-        brw_MOV(p, c->reg.dir, brw_imm_f(-1));
-   }
-   is_rev = brw_ELSE(p, is_rev);
-   {
-      brw_MOV(p, get_element(c->reg.inlist, 0),  brw_address(c->reg.vertex[0]) );
-      brw_MOV(p, get_element(c->reg.inlist, 1),  brw_address(c->reg.vertex[1]) );
-      if (c->need_direction)
-        brw_MOV(p, c->reg.dir, brw_imm_f(1));
-   }
-   brw_ENDIF(p, is_rev);
-
-   brw_MOV(p, get_element(c->reg.inlist, 2),  brw_address(c->reg.vertex[2]) );
-   brw_MOV(p, brw_vec8_grf(c->reg.outlist.nr, 0), brw_imm_f(0));
-   brw_MOV(p, c->reg.nr_verts, brw_imm_ud(3));
-}
-
-
-
-void brw_clip_tri_flat_shade( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *is_poly;
-   struct brw_reg tmp0 = c->reg.loopcount; /* handy temporary */
-
-   brw_AND(p, tmp0, get_element_ud(c->reg.R0, 2), brw_imm_ud(PRIM_MASK)); 
-   brw_CMP(p, 
-          vec1(brw_null_reg()), 
-          BRW_CONDITIONAL_EQ, 
-          tmp0,
-          brw_imm_ud(_3DPRIM_POLYGON));
-
-   is_poly = brw_IF(p, BRW_EXECUTE_1);
-   {   
-      brw_clip_copy_colors(c, 1, 0);
-      brw_clip_copy_colors(c, 2, 0);
-   }
-   is_poly = brw_ELSE(p, is_poly);
-   {
-      brw_clip_copy_colors(c, 0, 2);
-      brw_clip_copy_colors(c, 1, 2);
-   }
-   brw_ENDIF(p, is_poly);
-}
-
-
-
-/* Use mesa's clipping algorithms, translated to GEN4 assembly.
- */
-void brw_clip_tri( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_indirect vtx = brw_indirect(0, 0);
-   struct brw_indirect vtxPrev = brw_indirect(1, 0);
-   struct brw_indirect vtxOut = brw_indirect(2, 0);
-   struct brw_indirect plane_ptr = brw_indirect(3, 0);
-   struct brw_indirect inlist_ptr = brw_indirect(4, 0);
-   struct brw_indirect outlist_ptr = brw_indirect(5, 0);
-   struct brw_indirect freelist_ptr = brw_indirect(6, 0);
-   struct brw_instruction *plane_loop;
-   struct brw_instruction *plane_active;
-   struct brw_instruction *vertex_loop;
-   struct brw_instruction *next_test;
-   struct brw_instruction *prev_test;
-   
-   brw_MOV(p, get_addr_reg(vtxPrev),     brw_address(c->reg.vertex[2]) );
-   brw_MOV(p, get_addr_reg(plane_ptr),   brw_clip_plane0_address(c));
-   brw_MOV(p, get_addr_reg(inlist_ptr),  brw_address(c->reg.inlist));
-   brw_MOV(p, get_addr_reg(outlist_ptr), brw_address(c->reg.outlist));
-
-   brw_MOV(p, get_addr_reg(freelist_ptr), brw_address(c->reg.vertex[3]) );
-
-   plane_loop = brw_DO(p, BRW_EXECUTE_1);
-   {
-      /* if (planemask & 1)
-       */
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-      brw_AND(p, vec1(brw_null_reg()), c->reg.planemask, brw_imm_ud(1));
-      
-      plane_active = brw_IF(p, BRW_EXECUTE_1);
-      {
-        /* vtxOut = freelist_ptr++ 
-         */
-        brw_MOV(p, get_addr_reg(vtxOut),       get_addr_reg(freelist_ptr) );
-        brw_ADD(p, get_addr_reg(freelist_ptr), get_addr_reg(freelist_ptr), brw_imm_uw(c->nr_regs * REG_SIZE));
-
-        if (c->key.nr_userclip)
-           brw_MOV(p, c->reg.plane_equation, deref_4f(plane_ptr, 0));
-        else
-           brw_MOV(p, c->reg.plane_equation, deref_4b(plane_ptr, 0));
-           
-        brw_MOV(p, c->reg.loopcount, c->reg.nr_verts);
-        brw_MOV(p, c->reg.nr_verts, brw_imm_ud(0));
-
-        vertex_loop = brw_DO(p, BRW_EXECUTE_1);
-        {
-           /* vtx = *input_ptr;
-            */
-           brw_MOV(p, get_addr_reg(vtx), deref_1uw(inlist_ptr, 0));
-
-           /* IS_NEGATIVE(prev) */
-           brw_set_conditionalmod(p, BRW_CONDITIONAL_L);
-           brw_DP4(p, vec4(c->reg.dpPrev), deref_4f(vtxPrev, c->offset_hpos), c->reg.plane_equation);
-           prev_test = brw_IF(p, BRW_EXECUTE_1);
-           {
-              /* IS_POSITIVE(next)
-               */
-              brw_set_conditionalmod(p, BRW_CONDITIONAL_GE);
-              brw_DP4(p, vec4(c->reg.dp), deref_4f(vtx, c->offset_hpos), c->reg.plane_equation);
-              next_test = brw_IF(p, BRW_EXECUTE_1);
-              {
-
-                 /* Coming back in.
-                  */
-                 brw_ADD(p, c->reg.t, c->reg.dpPrev, negate(c->reg.dp));
-                 brw_math_invert(p, c->reg.t, c->reg.t);
-                 brw_MUL(p, c->reg.t, c->reg.t, c->reg.dpPrev);
-
-                 /* If (vtxOut == 0) vtxOut = vtxPrev
-                  */
-                 brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_EQ, get_addr_reg(vtxOut), brw_imm_uw(0) );
-                 brw_MOV(p, get_addr_reg(vtxOut), get_addr_reg(vtxPrev) );
-                 brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-                 brw_clip_interp_vertex(c, vtxOut, vtxPrev, vtx, c->reg.t, GL_FALSE);
-
-                 /* *outlist_ptr++ = vtxOut;
-                  * nr_verts++; 
-                  * vtxOut = 0;
-                  */
-                 brw_MOV(p, deref_1uw(outlist_ptr, 0), get_addr_reg(vtxOut));
-                 brw_ADD(p, get_addr_reg(outlist_ptr), get_addr_reg(outlist_ptr), brw_imm_uw(sizeof(short)));
-                 brw_ADD(p, c->reg.nr_verts, c->reg.nr_verts, brw_imm_ud(1));
-                 brw_MOV(p, get_addr_reg(vtxOut), brw_imm_uw(0) );
-              }
-              brw_ENDIF(p, next_test);
-              
-           }
-           prev_test = brw_ELSE(p, prev_test);
-           {
-              /* *outlist_ptr++ = vtxPrev;
-               * nr_verts++;
-               */
-              brw_MOV(p, deref_1uw(outlist_ptr, 0), get_addr_reg(vtxPrev));
-              brw_ADD(p, get_addr_reg(outlist_ptr), get_addr_reg(outlist_ptr), brw_imm_uw(sizeof(short)));
-              brw_ADD(p, c->reg.nr_verts, c->reg.nr_verts, brw_imm_ud(1));
-
-              /* IS_NEGATIVE(next)
-               */
-              brw_set_conditionalmod(p, BRW_CONDITIONAL_L);
-              brw_DP4(p, vec4(c->reg.dp), deref_4f(vtx, c->offset_hpos), c->reg.plane_equation);
-              next_test = brw_IF(p, BRW_EXECUTE_1);
-              {
-                 /* Going out of bounds.  Avoid division by zero as we
-                  * know dp != dpPrev from DIFFERENT_SIGNS, above.
-                  */
-                 brw_ADD(p, c->reg.t, c->reg.dp, negate(c->reg.dpPrev));
-                 brw_math_invert(p, c->reg.t, c->reg.t);
-                 brw_MUL(p, c->reg.t, c->reg.t, c->reg.dp);
-
-                 /* If (vtxOut == 0) vtxOut = vtx
-                  */
-                 brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_EQ, get_addr_reg(vtxOut), brw_imm_uw(0) );
-                 brw_MOV(p, get_addr_reg(vtxOut), get_addr_reg(vtx) );
-                 brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-                 brw_clip_interp_vertex(c, vtxOut, vtx, vtxPrev, c->reg.t, GL_TRUE);             
-
-                 /* *outlist_ptr++ = vtxOut;
-                  * nr_verts++; 
-                  * vtxOut = 0;
-                  */
-                 brw_MOV(p, deref_1uw(outlist_ptr, 0), get_addr_reg(vtxOut));
-                 brw_ADD(p, get_addr_reg(outlist_ptr), get_addr_reg(outlist_ptr), brw_imm_uw(sizeof(short)));
-                 brw_ADD(p, c->reg.nr_verts, c->reg.nr_verts, brw_imm_ud(1));
-                 brw_MOV(p, get_addr_reg(vtxOut), brw_imm_uw(0) );
-              }               
-              brw_ENDIF(p, next_test);
-           }
-           brw_ENDIF(p, prev_test);
-           
-           /* vtxPrev = vtx;
-            * inlist_ptr++;
-            */
-           brw_MOV(p, get_addr_reg(vtxPrev), get_addr_reg(vtx));
-           brw_ADD(p, get_addr_reg(inlist_ptr), get_addr_reg(inlist_ptr), brw_imm_uw(sizeof(short)));
-
-           /* while (--loopcount != 0)
-            */
-           brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-           brw_ADD(p, c->reg.loopcount, c->reg.loopcount, brw_imm_d(-1));
-        } 
-        brw_WHILE(p, vertex_loop);
-
-        /* vtxPrev = *(outlist_ptr-1)  OR: outlist[nr_verts-1]
-         * inlist = outlist
-         * inlist_ptr = &inlist[0]
-         * outlist_ptr = &outlist[0]
-         */
-        brw_ADD(p, get_addr_reg(outlist_ptr), get_addr_reg(outlist_ptr), brw_imm_w(-2));
-        brw_MOV(p, get_addr_reg(vtxPrev), deref_1uw(outlist_ptr, 0));
-        brw_MOV(p, brw_vec8_grf(c->reg.inlist.nr, 0), brw_vec8_grf(c->reg.outlist.nr, 0));
-        brw_MOV(p, get_addr_reg(inlist_ptr), brw_address(c->reg.inlist));
-        brw_MOV(p, get_addr_reg(outlist_ptr), brw_address(c->reg.outlist));
-      }
-      brw_ENDIF(p, plane_active);
-      
-      /* plane_ptr++;
-       */
-      brw_ADD(p, get_addr_reg(plane_ptr), get_addr_reg(plane_ptr), brw_clip_plane_stride(c));
-
-      /* nr_verts >= 3 
-       */
-      brw_CMP(p,
-             vec1(brw_null_reg()),
-             BRW_CONDITIONAL_GE,
-             c->reg.nr_verts,
-             brw_imm_ud(3));
-   
-      /* && (planemask>>=1) != 0
-       */
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-      brw_SHR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud(1));
-   }
-   brw_WHILE(p, plane_loop);
-}
-
-
-
-void brw_clip_tri_emit_polygon(struct brw_clip_compile *c)
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *loop, *if_insn;
-
-   /* for (loopcount = nr_verts-2; loopcount > 0; loopcount--)
-    */
-   brw_set_conditionalmod(p, BRW_CONDITIONAL_G);
-   brw_ADD(p,
-          c->reg.loopcount,
-          c->reg.nr_verts,
-          brw_imm_d(-2));
-
-   if_insn = brw_IF(p, BRW_EXECUTE_1);
-   {
-      struct brw_indirect v0 = brw_indirect(0, 0);
-      struct brw_indirect vptr = brw_indirect(1, 0);
-
-      brw_MOV(p, get_addr_reg(vptr), brw_address(c->reg.inlist));
-      brw_MOV(p, get_addr_reg(v0), deref_1uw(vptr, 0));
-
-      brw_clip_emit_vue(c, v0, 1, 0, ((_3DPRIM_TRIFAN << 2) | R02_PRIM_START));
-      
-      brw_ADD(p, get_addr_reg(vptr), get_addr_reg(vptr), brw_imm_uw(2));
-      brw_MOV(p, get_addr_reg(v0), deref_1uw(vptr, 0));
-
-      loop = brw_DO(p, BRW_EXECUTE_1);
-      {
-        brw_clip_emit_vue(c, v0, 1, 0, (_3DPRIM_TRIFAN << 2));
-  
-        brw_ADD(p, get_addr_reg(vptr), get_addr_reg(vptr), brw_imm_uw(2));
-        brw_MOV(p, get_addr_reg(v0), deref_1uw(vptr, 0));
-
-        brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-        brw_ADD(p, c->reg.loopcount, c->reg.loopcount, brw_imm_d(-1));
-      }
-      brw_WHILE(p, loop);
-
-      brw_clip_emit_vue(c, v0, 0, 1, ((_3DPRIM_TRIFAN << 2) | R02_PRIM_END));
-   }
-   brw_ENDIF(p, if_insn);
-}
-
-static void do_clip_tri( struct brw_clip_compile *c )
-{
-   brw_clip_init_planes(c);
-
-   brw_clip_tri(c);
-}
-
-
-static void maybe_do_clip_tri( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *do_clip;
-
-   brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_NZ, c->reg.planemask, brw_imm_ud(0));
-   do_clip = brw_IF(p, BRW_EXECUTE_1);
-   {
-      do_clip_tri(c);
-   }
-   brw_ENDIF(p, do_clip);
-}
-
-static void brw_clip_test( struct brw_clip_compile *c )
-{
-    struct brw_reg t = retype(get_tmp(c), BRW_REGISTER_TYPE_UD);
-    struct brw_reg t1 = retype(get_tmp(c), BRW_REGISTER_TYPE_UD);
-    struct brw_reg t2 = retype(get_tmp(c), BRW_REGISTER_TYPE_UD);
-    struct brw_reg t3 = retype(get_tmp(c), BRW_REGISTER_TYPE_UD);
-
-    struct brw_reg v0 = get_tmp(c);
-    struct brw_reg v1 = get_tmp(c);
-    struct brw_reg v2 = get_tmp(c);
-
-    struct brw_indirect vt0 = brw_indirect(0, 0);
-    struct brw_indirect vt1 = brw_indirect(1, 0);
-    struct brw_indirect vt2 = brw_indirect(2, 0);
-
-    struct brw_compile *p = &c->func;
-    struct brw_instruction *is_outside;
-    struct brw_reg tmp0 = c->reg.loopcount; /* handy temporary */
-
-    brw_MOV(p, get_addr_reg(vt0), brw_address(c->reg.vertex[0]));
-    brw_MOV(p, get_addr_reg(vt1), brw_address(c->reg.vertex[1]));
-    brw_MOV(p, get_addr_reg(vt2), brw_address(c->reg.vertex[2]));
-    brw_MOV(p, v0, deref_4f(vt0, c->offset_hpos));
-    brw_MOV(p, v1, deref_4f(vt1, c->offset_hpos));
-    brw_MOV(p, v2, deref_4f(vt2, c->offset_hpos));
-    brw_AND(p, c->reg.planemask, c->reg.planemask, brw_imm_ud(~0x3f));
-
-    /* test nearz, xmin, ymin plane */
-    /* clip.xyz < -clip.w */
-    brw_CMP(p, t1, BRW_CONDITIONAL_L, v0, negate(get_element(v0, 3))); 
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    brw_CMP(p, t2, BRW_CONDITIONAL_L, v1, negate(get_element(v1, 3))); 
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    brw_CMP(p, t3, BRW_CONDITIONAL_L, v2, negate(get_element(v2, 3))); 
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-    /* All vertices are outside of a plane, rejected */
-    brw_AND(p, t, t1, t2);
-    brw_AND(p, t, t, t3);
-    brw_OR(p, tmp0, get_element(t, 0), get_element(t, 1));
-    brw_OR(p, tmp0, tmp0, get_element(t, 2));
-    brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-    brw_AND(p, brw_null_reg(), tmp0, brw_imm_ud(0x1));
-    is_outside = brw_IF(p, BRW_EXECUTE_1);
-    {
-        brw_clip_kill_thread(c);
-    }
-    brw_ENDIF(p, is_outside);
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-    /* some vertices are inside a plane, some are outside,need to clip */
-    brw_XOR(p, t, t1, t2);
-    brw_XOR(p, t1, t2, t3);
-    brw_OR(p, t, t, t1);
-    brw_AND(p, t, t, brw_imm_ud(0x1));
-    brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ,
-            get_element(t, 0), brw_imm_ud(0));
-    brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<5)));
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ,
-            get_element(t, 1), brw_imm_ud(0));
-    brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<3)));
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ,
-            get_element(t, 2), brw_imm_ud(0));
-    brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<1)));
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-    /* test farz, xmax, ymax plane */
-    /* clip.xyz > clip.w */
-    brw_CMP(p, t1, BRW_CONDITIONAL_G, v0, get_element(v0, 3)); 
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    brw_CMP(p, t2, BRW_CONDITIONAL_G, v1, get_element(v1, 3)); 
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    brw_CMP(p, t3, BRW_CONDITIONAL_G, v2, get_element(v2, 3)); 
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-    /* All vertices are outside of a plane, rejected */
-    brw_AND(p, t, t1, t2);
-    brw_AND(p, t, t, t3);
-    brw_OR(p, tmp0, get_element(t, 0), get_element(t, 1));
-    brw_OR(p, tmp0, tmp0, get_element(t, 2));
-    brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-    brw_AND(p, brw_null_reg(), tmp0, brw_imm_ud(0x1));
-    is_outside = brw_IF(p, BRW_EXECUTE_1);
-    {
-        brw_clip_kill_thread(c);
-    }
-    brw_ENDIF(p, is_outside);
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-    /* some vertices are inside a plane, some are outside,need to clip */
-    brw_XOR(p, t, t1, t2);
-    brw_XOR(p, t1, t2, t3);
-    brw_OR(p, t, t, t1);
-    brw_AND(p, t, t, brw_imm_ud(0x1));
-    brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ,
-            get_element(t, 0), brw_imm_ud(0));
-    brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<4)));
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ,
-            get_element(t, 1), brw_imm_ud(0));
-    brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<2)));
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ,
-            get_element(t, 2), brw_imm_ud(0));
-    brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<0)));
-    brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-    release_tmps(c);
-}
-
-
-void brw_emit_tri_clip( struct brw_clip_compile *c )
-{
-   struct brw_instruction *neg_rhw;
-   struct brw_compile *p = &c->func;
-   brw_clip_tri_alloc_regs(c, 3 + c->key.nr_userclip + 6);
-   brw_clip_tri_init_vertices(c);
-   brw_clip_init_clipmask(c);
-   brw_clip_init_ff_sync(c);
-
-   /* if -ve rhw workaround bit is set, 
-      do cliptest */
-   if (p->brw->has_negative_rhw_bug) {
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-      brw_AND(p, brw_null_reg(), get_element_ud(c->reg.R0, 2), 
-              brw_imm_ud(1<<20));
-      neg_rhw = brw_IF(p, BRW_EXECUTE_1); 
-      {
-         brw_clip_test(c);
-      }
-      brw_ENDIF(p, neg_rhw);
-   }
-   /* Can't push into do_clip_tri because with polygon (or quad)
-    * flatshading, need to apply the flatshade here because we don't
-    * respect the PV when converting to trifan for emit:
-    */
-   if (c->key.do_flat_shading) 
-      brw_clip_tri_flat_shade(c); 
-      
-   if ((c->key.clip_mode == BRW_CLIPMODE_NORMAL) ||
-       (c->key.clip_mode == BRW_CLIPMODE_KERNEL_CLIP))
-      do_clip_tri(c);
-   else 
-      maybe_do_clip_tri(c);
-
-   brw_clip_tri_emit_polygon(c);
-
-   /* Send an empty message to kill the thread:
-    */
-   brw_clip_kill_thread(c);
-}
diff --git a/src/gallium/drivers/i965/brw_clip_unfilled.c b/src/gallium/drivers/i965/brw_clip_unfilled.c
deleted file mode 100644 (file)
index aec835b..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "brw_defines.h"
-#include "brw_eu.h"
-#include "brw_util.h"
-#include "brw_clip.h"
-
-
-
-/* This is performed against the original triangles, so no indirection
- * required:
-BZZZT!
- */
-static void compute_tri_direction( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg e = c->reg.tmp0;
-   struct brw_reg f = c->reg.tmp1;
-   struct brw_reg v0 = byte_offset(c->reg.vertex[0], c->offset_hpos); 
-   struct brw_reg v1 = byte_offset(c->reg.vertex[1], c->offset_hpos); 
-   struct brw_reg v2 = byte_offset(c->reg.vertex[2], c->offset_hpos); 
-
-
-   struct brw_reg v0n = get_tmp(c);
-   struct brw_reg v1n = get_tmp(c);
-   struct brw_reg v2n = get_tmp(c);
-
-   /* Convert to NDC.
-    * NOTE: We can't modify the original vertex coordinates,
-    * as it may impact further operations.
-    * So, we have to keep normalized coordinates in temp registers.
-    *
-    * TBD-KC
-    * Try to optimize unnecessary MOV's.
-    */
-   brw_MOV(p, v0n, v0);
-   brw_MOV(p, v1n, v1);
-   brw_MOV(p, v2n, v2);
-
-   brw_clip_project_position(c, v0n);
-   brw_clip_project_position(c, v1n);
-   brw_clip_project_position(c, v2n);
-
-   /* Calculate the vectors of two edges of the triangle:
-    */
-   brw_ADD(p, e, v0n, negate(v2n)); 
-   brw_ADD(p, f, v1n, negate(v2n)); 
-
-   /* Take their crossproduct:
-    */
-   brw_set_access_mode(p, BRW_ALIGN_16);
-   brw_MUL(p, vec4(brw_null_reg()), brw_swizzle(e, 1,2,0,3),  brw_swizzle(f,2,0,1,3));
-   brw_MAC(p, vec4(e),  negate(brw_swizzle(e, 2,0,1,3)), brw_swizzle(f,1,2,0,3));
-   brw_set_access_mode(p, BRW_ALIGN_1);
-
-   brw_MUL(p, c->reg.dir, c->reg.dir, vec4(e));
-}
-
-
-static void cull_direction( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *ccw;
-   GLuint conditional;
-
-   assert (!(c->key.fill_ccw == CLIP_CULL &&
-            c->key.fill_cw == CLIP_CULL));
-
-   if (c->key.fill_ccw == CLIP_CULL)
-      conditional = BRW_CONDITIONAL_GE;
-   else
-      conditional = BRW_CONDITIONAL_L;
-
-   brw_CMP(p,
-          vec1(brw_null_reg()),
-          conditional,
-          get_element(c->reg.dir, 2),
-          brw_imm_f(0));
-   
-   ccw = brw_IF(p, BRW_EXECUTE_1);
-   {
-      brw_clip_kill_thread(c);
-   }
-   brw_ENDIF(p, ccw);
-}
-
-
-
-static void copy_bfc( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *ccw;
-   GLuint conditional;
-
-   /* Do we have any colors to copy? 
-    */
-   if ((c->offset_color0 == 0 || c->offset_bfc0 == 0) &&
-       (c->offset_color1 == 0 || c->offset_bfc1 == 0))
-      return;
-
-   /* In some wierd degnerate cases we can end up testing the
-    * direction twice, once for culling and once for bfc copying.  Oh
-    * well, that's what you get for setting wierd GL state.
-    */
-   if (c->key.copy_bfc_ccw)
-      conditional = BRW_CONDITIONAL_GE;
-   else
-      conditional = BRW_CONDITIONAL_L;
-
-   brw_CMP(p,
-          vec1(brw_null_reg()),
-          conditional,
-          get_element(c->reg.dir, 2),
-          brw_imm_f(0));
-   
-   ccw = brw_IF(p, BRW_EXECUTE_1);
-   {
-      GLuint i;
-
-      for (i = 0; i < 3; i++) {
-        if (c->offset_color0 && c->offset_bfc0)
-           brw_MOV(p, 
-                   byte_offset(c->reg.vertex[i], c->offset_color0),
-                   byte_offset(c->reg.vertex[i], c->offset_bfc0));
-
-        if (c->offset_color1 && c->offset_bfc1)
-           brw_MOV(p, 
-                   byte_offset(c->reg.vertex[i], c->offset_color0),
-                   byte_offset(c->reg.vertex[i], c->offset_bfc0));
-      }
-   }
-   brw_ENDIF(p, ccw);
-}
-
-
-
-
-/*
-  GLfloat iz   = 1.0 / dir.z;
-  GLfloat ac   = dir.x * iz;
-  GLfloat bc   = dir.y * iz;
-  offset = ctx->Polygon.OffsetUnits * DEPTH_SCALE;
-  offset += MAX2( abs(ac), abs(bc) ) * ctx->Polygon.OffsetFactor;
-  offset *= MRD;
-*/
-static void compute_offset( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg off = c->reg.offset;
-   struct brw_reg dir = c->reg.dir;
-   
-   brw_math_invert(p, get_element(off, 2), get_element(dir, 2));
-   brw_MUL(p, vec2(off), dir, get_element(off, 2));
-
-   brw_CMP(p, 
-          vec1(brw_null_reg()), 
-          BRW_CONDITIONAL_GE,
-          brw_abs(get_element(off, 0)), 
-          brw_abs(get_element(off, 1)));
-
-   brw_SEL(p, vec1(off), brw_abs(get_element(off, 0)), brw_abs(get_element(off, 1)));
-   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-   brw_MUL(p, vec1(off), off, brw_imm_f(c->key.offset_factor));
-   brw_ADD(p, vec1(off), off, brw_imm_f(c->key.offset_units));
-}
-
-
-static void merge_edgeflags( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *is_poly;
-   struct brw_reg tmp0 = get_element_ud(c->reg.tmp0, 0);
-
-   brw_AND(p, tmp0, get_element_ud(c->reg.R0, 2), brw_imm_ud(PRIM_MASK)); 
-   brw_CMP(p, 
-          vec1(brw_null_reg()), 
-          BRW_CONDITIONAL_EQ, 
-          tmp0,
-          brw_imm_ud(_3DPRIM_POLYGON));
-
-   /* Get away with using reg.vertex because we know that this is not
-    * a _3DPRIM_TRISTRIP_REVERSE:
-    */
-   is_poly = brw_IF(p, BRW_EXECUTE_1);
-   {   
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_EQ);
-      brw_AND(p, vec1(brw_null_reg()), get_element_ud(c->reg.R0, 2), brw_imm_ud(1<<8));
-      brw_MOV(p, byte_offset(c->reg.vertex[0], c->offset_edgeflag), brw_imm_f(0));
-      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_EQ);
-      brw_AND(p, vec1(brw_null_reg()), get_element_ud(c->reg.R0, 2), brw_imm_ud(1<<9));
-      brw_MOV(p, byte_offset(c->reg.vertex[2], c->offset_edgeflag), brw_imm_f(0));
-      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-   }
-   brw_ENDIF(p, is_poly);
-}
-
-
-
-static void apply_one_offset( struct brw_clip_compile *c,
-                         struct brw_indirect vert )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg z = deref_1f(vert, c->header_position_offset +
-                              2 * type_sz(BRW_REGISTER_TYPE_F));
-
-   brw_ADD(p, z, z, vec1(c->reg.offset));
-}
-
-
-
-/***********************************************************************
- * Output clipped polygon as an unfilled primitive:
- */
-static void emit_lines(struct brw_clip_compile *c,
-                      GLboolean do_offset)
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *loop;
-   struct brw_instruction *draw_edge;
-   struct brw_indirect v0 = brw_indirect(0, 0);
-   struct brw_indirect v1 = brw_indirect(1, 0);
-   struct brw_indirect v0ptr = brw_indirect(2, 0);
-   struct brw_indirect v1ptr = brw_indirect(3, 0);
-
-   /* Need a seperate loop for offset:
-    */
-   if (do_offset) {
-      brw_MOV(p, c->reg.loopcount, c->reg.nr_verts);
-      brw_MOV(p, get_addr_reg(v0ptr), brw_address(c->reg.inlist));
-
-      loop = brw_DO(p, BRW_EXECUTE_1);
-      {
-        brw_MOV(p, get_addr_reg(v0), deref_1uw(v0ptr, 0));
-        brw_ADD(p, get_addr_reg(v0ptr), get_addr_reg(v0ptr), brw_imm_uw(2));
-           
-        apply_one_offset(c, v0);
-           
-        brw_set_conditionalmod(p, BRW_CONDITIONAL_G);
-        brw_ADD(p, c->reg.loopcount, c->reg.loopcount, brw_imm_d(-1));
-      }
-      brw_WHILE(p, loop);
-   }
-
-   /* v1ptr = &inlist[nr_verts]
-    * *v1ptr = v0
-    */
-   brw_MOV(p, c->reg.loopcount, c->reg.nr_verts);
-   brw_MOV(p, get_addr_reg(v0ptr), brw_address(c->reg.inlist));
-   brw_ADD(p, get_addr_reg(v1ptr), get_addr_reg(v0ptr), retype(c->reg.nr_verts, BRW_REGISTER_TYPE_UW));
-   brw_ADD(p, get_addr_reg(v1ptr), get_addr_reg(v1ptr), retype(c->reg.nr_verts, BRW_REGISTER_TYPE_UW));
-   brw_MOV(p, deref_1uw(v1ptr, 0), deref_1uw(v0ptr, 0));
-
-   loop = brw_DO(p, BRW_EXECUTE_1);
-   {
-      brw_MOV(p, get_addr_reg(v0), deref_1uw(v0ptr, 0));
-      brw_MOV(p, get_addr_reg(v1), deref_1uw(v0ptr, 2));
-      brw_ADD(p, get_addr_reg(v0ptr), get_addr_reg(v0ptr), brw_imm_uw(2));
-
-      /* draw edge if edgeflag != 0 */
-      brw_CMP(p, 
-             vec1(brw_null_reg()), BRW_CONDITIONAL_NZ, 
-             deref_1f(v0, c->offset_edgeflag),
-             brw_imm_f(0));
-      draw_edge = brw_IF(p, BRW_EXECUTE_1);
-      {
-        brw_clip_emit_vue(c, v0, 1, 0, (_3DPRIM_LINESTRIP << 2) | R02_PRIM_START);
-        brw_clip_emit_vue(c, v1, 1, 0, (_3DPRIM_LINESTRIP << 2) | R02_PRIM_END);
-      }
-      brw_ENDIF(p, draw_edge);
-
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-      brw_ADD(p, c->reg.loopcount, c->reg.loopcount, brw_imm_d(-1));
-   }
-   brw_WHILE(p, loop);
-}
-
-
-
-static void emit_points(struct brw_clip_compile *c,
-                       GLboolean do_offset )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *loop;
-   struct brw_instruction *draw_point;
-
-   struct brw_indirect v0 = brw_indirect(0, 0);
-   struct brw_indirect v0ptr = brw_indirect(2, 0);
-
-   brw_MOV(p, c->reg.loopcount, c->reg.nr_verts);
-   brw_MOV(p, get_addr_reg(v0ptr), brw_address(c->reg.inlist));
-
-   loop = brw_DO(p, BRW_EXECUTE_1);
-   {
-      brw_MOV(p, get_addr_reg(v0), deref_1uw(v0ptr, 0));
-      brw_ADD(p, get_addr_reg(v0ptr), get_addr_reg(v0ptr), brw_imm_uw(2));
-
-      /* draw if edgeflag != 0 
-       */
-      brw_CMP(p, 
-             vec1(brw_null_reg()), BRW_CONDITIONAL_NZ, 
-             deref_1f(v0, c->offset_edgeflag),
-             brw_imm_f(0));
-      draw_point = brw_IF(p, BRW_EXECUTE_1);
-      {
-        if (do_offset)
-           apply_one_offset(c, v0);
-
-        brw_clip_emit_vue(c, v0, 1, 0, (_3DPRIM_POINTLIST << 2) | R02_PRIM_START | R02_PRIM_END);
-      }
-      brw_ENDIF(p, draw_point);
-
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-      brw_ADD(p, c->reg.loopcount, c->reg.loopcount, brw_imm_d(-1));
-   }
-   brw_WHILE(p, loop);
-}
-
-
-
-
-
-
-
-static void emit_primitives( struct brw_clip_compile *c,
-                            GLuint mode, 
-                            GLboolean do_offset )
-{
-   switch (mode) {
-   case CLIP_FILL:
-      brw_clip_tri_emit_polygon(c);
-      break;
-
-   case CLIP_LINE:
-      emit_lines(c, do_offset);
-      break;
-
-   case CLIP_POINT:
-      emit_points(c, do_offset);
-      break;
-
-   case CLIP_CULL:
-      assert(0);
-      break;
-   }
-} 
-
-
-
-static void emit_unfilled_primitives( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *ccw;
-
-   /* Direction culling has already been done.
-    */
-   if (c->key.fill_ccw != c->key.fill_cw &&
-       c->key.fill_ccw != CLIP_CULL &&
-       c->key.fill_cw != CLIP_CULL)
-   {
-      brw_CMP(p,
-             vec1(brw_null_reg()),
-             BRW_CONDITIONAL_GE,
-             get_element(c->reg.dir, 2),
-             brw_imm_f(0));
-   
-      ccw = brw_IF(p, BRW_EXECUTE_1);
-      {
-        emit_primitives(c, c->key.fill_ccw, c->key.offset_ccw);
-      }
-      ccw = brw_ELSE(p, ccw);
-      {
-        emit_primitives(c, c->key.fill_cw, c->key.offset_cw);
-      }
-      brw_ENDIF(p, ccw);
-   }
-   else if (c->key.fill_cw != CLIP_CULL) {
-      emit_primitives(c, c->key.fill_cw, c->key.offset_cw);
-   }
-   else if (c->key.fill_ccw != CLIP_CULL) { 
-      emit_primitives(c, c->key.fill_ccw, c->key.offset_ccw);
-   }
-}
-
-
-
-
-static void check_nr_verts( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *if_insn;
-
-   brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_L, c->reg.nr_verts, brw_imm_d(3));      
-   if_insn = brw_IF(p, BRW_EXECUTE_1);
-   {
-      brw_clip_kill_thread(c);
-   }
-   brw_ENDIF(p, if_insn);
-}
-
-
-void brw_emit_unfilled_clip( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *do_clip;
-   
-
-   c->need_direction = ((c->key.offset_ccw || c->key.offset_cw) ||
-                       (c->key.fill_ccw != c->key.fill_cw) ||
-                       c->key.fill_ccw == CLIP_CULL ||
-                       c->key.fill_cw == CLIP_CULL ||
-                       c->key.copy_bfc_cw ||
-                       c->key.copy_bfc_ccw);
-
-   brw_clip_tri_alloc_regs(c, 3 + c->key.nr_userclip + 6);
-   brw_clip_tri_init_vertices(c);
-   brw_clip_init_ff_sync(c);
-
-   assert(c->offset_edgeflag);
-
-   if (c->key.fill_ccw == CLIP_CULL &&
-       c->key.fill_cw == CLIP_CULL) {
-      brw_clip_kill_thread(c);
-      return;
-   }
-
-   merge_edgeflags(c);
-
-   /* Need to use the inlist indirection here: 
-    */
-   if (c->need_direction) 
-      compute_tri_direction(c);
-   
-   if (c->key.fill_ccw == CLIP_CULL ||
-       c->key.fill_cw == CLIP_CULL)
-      cull_direction(c);
-
-   if (c->key.offset_ccw ||
-       c->key.offset_cw)
-      compute_offset(c);
-
-   if (c->key.copy_bfc_ccw ||
-       c->key.copy_bfc_cw)
-      copy_bfc(c);
-
-   /* Need to do this whether we clip or not:
-    */
-   if (c->key.do_flat_shading)
-      brw_clip_tri_flat_shade(c);
-   
-   brw_clip_init_clipmask(c);
-   brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_NZ, c->reg.planemask, brw_imm_ud(0));
-   do_clip = brw_IF(p, BRW_EXECUTE_1);
-   {
-      brw_clip_init_planes(c);
-      brw_clip_tri(c);
-      check_nr_verts(c);
-   }
-   brw_ENDIF(p, do_clip);
-   
-   emit_unfilled_primitives(c);
-   brw_clip_kill_thread(c);
-}
-
-
-
diff --git a/src/gallium/drivers/i965/brw_clip_util.c b/src/gallium/drivers/i965/brw_clip_util.c
deleted file mode 100644 (file)
index 5713f25..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_eu.h"
-#include "brw_clip.h"
-
-
-
-
-struct brw_reg get_tmp( struct brw_clip_compile *c )
-{
-   struct brw_reg tmp = brw_vec4_grf(c->last_tmp, 0);
-
-   if (++c->last_tmp > c->prog_data.total_grf)
-      c->prog_data.total_grf = c->last_tmp;
-
-   return tmp;
-}
-
-static void release_tmp( struct brw_clip_compile *c, struct brw_reg tmp )
-{
-   if (tmp.nr == c->last_tmp-1)
-      c->last_tmp--;
-}
-
-
-static struct brw_reg make_plane_ud(GLuint x, GLuint y, GLuint z, GLuint w)
-{
-   return brw_imm_ud((w<<24) | (z<<16) | (y<<8) | x);
-}
-
-
-void brw_clip_init_planes( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-
-   if (!c->key.nr_userclip) {
-      brw_MOV(p, get_element_ud(c->reg.fixed_planes, 0), make_plane_ud( 0,    0, 0xff, 1));
-      brw_MOV(p, get_element_ud(c->reg.fixed_planes, 1), make_plane_ud( 0,    0,    1, 1));
-      brw_MOV(p, get_element_ud(c->reg.fixed_planes, 2), make_plane_ud( 0, 0xff,    0, 1));
-      brw_MOV(p, get_element_ud(c->reg.fixed_planes, 3), make_plane_ud( 0,    1,    0, 1));
-      brw_MOV(p, get_element_ud(c->reg.fixed_planes, 4), make_plane_ud(0xff,  0,    0, 1));
-      brw_MOV(p, get_element_ud(c->reg.fixed_planes, 5), make_plane_ud( 1,    0,    0, 1));
-   }
-}
-
-
-
-#define W 3
-
-/* Project 'pos' to screen space (or back again), overwrite with results:
- */
-void brw_clip_project_position(struct brw_clip_compile *c, struct brw_reg pos )
-{
-   struct brw_compile *p = &c->func;
-
-   /* calc rhw 
-    */
-   brw_math_invert(p, get_element(pos, W), get_element(pos, W));
-
-   /* value.xyz *= value.rhw
-    */
-   brw_set_access_mode(p, BRW_ALIGN_16);
-   brw_MUL(p, brw_writemask(pos, BRW_WRITEMASK_XYZ), pos, brw_swizzle1(pos, W));
-   brw_set_access_mode(p, BRW_ALIGN_1);
-}
-
-
-static void brw_clip_project_vertex( struct brw_clip_compile *c, 
-                                    struct brw_indirect vert_addr )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg tmp = get_tmp(c);
-
-   /* Fixup position.  Extract from the original vertex and re-project
-    * to screen space:
-    */
-   brw_MOV(p, tmp, deref_4f(vert_addr, c->offset_hpos));
-   brw_clip_project_position(c, tmp);
-   brw_MOV(p, deref_4f(vert_addr, c->header_position_offset), tmp);
-        
-   release_tmp(c, tmp);
-}
-
-
-
-
-/* Interpolate between two vertices and put the result into a0.0.  
- * Increment a0.0 accordingly.
- */
-void brw_clip_interp_vertex( struct brw_clip_compile *c,
-                            struct brw_indirect dest_ptr,
-                            struct brw_indirect v0_ptr, /* from */
-                            struct brw_indirect v1_ptr, /* to */
-                            struct brw_reg t0,
-                            GLboolean force_edgeflag)
-{
-   struct brw_compile *p = &c->func;
-   struct brw_context *brw = p->brw;
-   struct brw_reg tmp = get_tmp(c);
-   GLuint i;
-
-   /* Just copy the vertex header:
-    */
-   /*
-    * After CLIP stage, only first 256 bits of the VUE are read
-    * back on IGDNG, so needn't change it
-    */
-   brw_copy_indirect_to_indirect(p, dest_ptr, v0_ptr, 1);
-      
-   /* Iterate over each attribute (could be done in pairs?)
-    */
-   for (i = 0; i < c->key.nr_attrs; i++) {
-      GLuint delta = i*16 + 32;
-
-      if (brw->gen == 5)
-          delta = i * 16 + 32 * 3;
-
-      if (delta == c->offset_edgeflag) {
-        if (force_edgeflag) 
-           brw_MOV(p, deref_4f(dest_ptr, delta), brw_imm_f(1));
-        else
-           brw_MOV(p, deref_4f(dest_ptr, delta), deref_4f(v0_ptr, delta));
-      }
-      else {
-        /* Interpolate: 
-         *
-         *        New = attr0 + t*attr1 - t*attr0
-         */
-        brw_MUL(p, 
-                vec4(brw_null_reg()),
-                deref_4f(v1_ptr, delta),
-                t0);
-
-        brw_MAC(p, 
-                tmp,         
-                negate(deref_4f(v0_ptr, delta)),
-                t0); 
-             
-        brw_ADD(p,
-                deref_4f(dest_ptr, delta), 
-                deref_4f(v0_ptr, delta),
-                tmp);
-      }
-   }
-
-   if (i & 1) {
-      GLuint delta = i*16 + 32;
-
-      if (brw->gen == 5)
-          delta = i * 16 + 32 * 3;
-
-      brw_MOV(p, deref_4f(dest_ptr, delta), brw_imm_f(0));
-   }
-
-   release_tmp(c, tmp);
-
-   /* Recreate the projected (NDC) coordinate in the new vertex
-    * header:
-    */
-   brw_clip_project_vertex(c, dest_ptr );
-}
-
-
-
-
-#define MAX_MRF 16
-
-void brw_clip_emit_vue(struct brw_clip_compile *c, 
-                      struct brw_indirect vert,
-                      GLboolean allocate,
-                      GLboolean eot,
-                      GLuint header)
-{
-   struct brw_compile *p = &c->func;
-   GLuint start = c->last_mrf;
-
-   brw_clip_ff_sync(c);
-
-   assert(!(allocate && eot));
-   
-   /* Cycle through mrf regs - probably futile as we have to wait for
-    * the allocation response anyway.  Also, the order this function
-    * is invoked doesn't correspond to the order the instructions will
-    * be executed, so it won't have any effect in many cases.
-    */
-#if 0
-   if (start + c->nr_regs + 1 >= MAX_MRF)
-      start = 0;
-
-   c->last_mrf = start + c->nr_regs + 1;
-#endif
-       
-   /* Copy the vertex from vertn into m1..mN+1:
-    */
-   brw_copy_from_indirect(p, brw_message_reg(start+1), vert, c->nr_regs);
-
-   /* Overwrite PrimType and PrimStart in the message header, for
-    * each vertex in turn:
-    */
-   brw_MOV(p, get_element_ud(c->reg.R0, 2), brw_imm_ud(header));
-
-
-   /* Send each vertex as a seperate write to the urb.  This
-    * is different to the concept in brw_sf_emit.c, where
-    * subsequent writes are used to build up a single urb
-    * entry.  Each of these writes instantiates a seperate
-    * urb entry - (I think... what about 'allocate'?)
-    */
-   brw_urb_WRITE(p, 
-                allocate ? c->reg.R0 : retype(brw_null_reg(), BRW_REGISTER_TYPE_UD),
-                start,
-                c->reg.R0,
-                allocate,
-                1,             /* used */
-                c->nr_regs + 1, /* msg length */
-                allocate ? 1 : 0, /* response_length */ 
-                eot,           /* eot */
-                1,             /* writes_complete */
-                0,             /* urb offset */
-                BRW_URB_SWIZZLE_NONE);
-}
-
-
-
-void brw_clip_kill_thread(struct brw_clip_compile *c)
-{
-   struct brw_compile *p = &c->func;
-
-   brw_clip_ff_sync(c);
-   /* Send an empty message to kill the thread and release any
-    * allocated urb entry:
-    */
-   brw_urb_WRITE(p, 
-                retype(brw_null_reg(), BRW_REGISTER_TYPE_UD),
-                0,
-                c->reg.R0,
-                0,             /* allocate */
-                0,             /* used */
-                1,             /* msg len */
-                0,             /* response len */
-                1,             /* eot */
-                1,             /* writes complete */
-                0,
-                BRW_URB_SWIZZLE_NONE);
-}
-
-
-
-
-struct brw_reg brw_clip_plane0_address( struct brw_clip_compile *c )
-{
-   return brw_address(c->reg.fixed_planes);
-}
-
-
-struct brw_reg brw_clip_plane_stride( struct brw_clip_compile *c )
-{
-   if (c->key.nr_userclip) {
-      return brw_imm_uw(16);
-   }
-   else {
-      return brw_imm_uw(4);
-   }
-}
-
-
-/* If flatshading, distribute color from provoking vertex prior to
- * clipping.
- */
-void brw_clip_copy_colors( struct brw_clip_compile *c,
-                          GLuint to, GLuint from )
-{
-   struct brw_compile *p = &c->func;
-
-   if (c->offset_color0)
-      brw_MOV(p, 
-             byte_offset(c->reg.vertex[to], c->offset_color0),
-             byte_offset(c->reg.vertex[from], c->offset_color0));
-
-   if (c->offset_color1)
-      brw_MOV(p, 
-             byte_offset(c->reg.vertex[to], c->offset_color1),
-             byte_offset(c->reg.vertex[from], c->offset_color1));
-
-   if (c->offset_bfc0)
-      brw_MOV(p, 
-             byte_offset(c->reg.vertex[to], c->offset_bfc0),
-             byte_offset(c->reg.vertex[from], c->offset_bfc0));
-
-   if (c->offset_bfc1)
-      brw_MOV(p, 
-             byte_offset(c->reg.vertex[to], c->offset_bfc1),
-             byte_offset(c->reg.vertex[from], c->offset_bfc1));
-}
-
-
-
-void brw_clip_init_clipmask( struct brw_clip_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg incoming = get_element_ud(c->reg.R0, 2);
-   
-   /* Shift so that lowest outcode bit is rightmost: 
-    */
-   brw_SHR(p, c->reg.planemask, incoming, brw_imm_ud(26));
-
-   if (c->key.nr_userclip) {
-      struct brw_reg tmp = retype(vec1(get_tmp(c)), BRW_REGISTER_TYPE_UD);
-
-      /* Rearrange userclip outcodes so that they come directly after
-       * the fixed plane bits.
-       */
-      brw_AND(p, tmp, incoming, brw_imm_ud(0x3f<<14));
-      brw_SHR(p, tmp, tmp, brw_imm_ud(8));
-      brw_OR(p, c->reg.planemask, c->reg.planemask, tmp);
-      
-      release_tmp(c, tmp);
-   }
-}
-
-void brw_clip_ff_sync(struct brw_clip_compile *c)
-{
-    struct brw_context *brw = c->func.brw;
-    if (brw->needs_ff_sync) {
-        struct brw_compile *p = &c->func;
-        struct brw_instruction *need_ff_sync;
-
-        brw_set_conditionalmod(p, BRW_CONDITIONAL_Z);
-        brw_AND(p, brw_null_reg(), c->reg.ff_sync, brw_imm_ud(0x1));
-        need_ff_sync = brw_IF(p, BRW_EXECUTE_1);
-        {
-            brw_OR(p, c->reg.ff_sync, c->reg.ff_sync, brw_imm_ud(0x1));
-            brw_ff_sync(p, 
-                    c->reg.R0,
-                    0,
-                    c->reg.R0,
-                    1, 
-                    1,         /* used */
-                    1,         /* msg length */
-                    1,         /* response length */
-                    0,         /* eot */
-                    1,         /* write compelete */
-                    0,         /* urb offset */
-                    BRW_URB_SWIZZLE_NONE);
-        }
-        brw_ENDIF(p, need_ff_sync);
-        brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    }
-}
-
-void brw_clip_init_ff_sync(struct brw_clip_compile *c)
-{
-    struct brw_context *brw = c->func.brw;
-    if (brw->needs_ff_sync) {
-       struct brw_compile *p = &c->func;
-        
-        brw_MOV(p, c->reg.ff_sync, brw_imm_ud(0));
-    }
-}
diff --git a/src/gallium/drivers/i965/brw_context.c b/src/gallium/drivers/i965/brw_context.c
deleted file mode 100644 (file)
index 41a468a..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-
-#include "pipe/p_context.h"
-#include "util/u_inlines.h"
-#include "util/u_simple_list.h"
-
-#include "brw_context.h"
-#include "brw_draw.h"
-#include "brw_state.h"
-#include "brw_batchbuffer.h"
-#include "brw_winsys.h"
-#include "brw_resource.h"
-#include "brw_screen.h"
-
-
-static void brw_destroy_context( struct pipe_context *pipe )
-{
-   struct brw_context *brw = brw_context(pipe);
-   int i;
-
-   brw_context_flush( brw );
-   brw_batchbuffer_free( brw->batch );
-   brw_destroy_state(brw);
-
-   brw_draw_cleanup( brw );
-
-   brw_pipe_blend_cleanup( brw );
-   brw_pipe_depth_stencil_cleanup( brw );
-   brw_pipe_framebuffer_cleanup( brw );
-   brw_pipe_flush_cleanup( brw );
-   brw_pipe_misc_cleanup( brw );
-   brw_pipe_query_cleanup( brw );
-   brw_pipe_rast_cleanup( brw );
-   brw_pipe_sampler_cleanup( brw );
-   brw_pipe_shader_cleanup( brw );
-   brw_pipe_vertex_cleanup( brw );
-   brw_pipe_clear_cleanup( brw );
-
-   brw_hw_cc_cleanup( brw );
-
-
-   FREE(brw->wm.compile_data);
-
-   for (i = 0; i < brw->curr.fb.nr_cbufs; i++)
-      pipe_surface_reference(&brw->curr.fb.cbufs[i], NULL);
-   brw->curr.fb.nr_cbufs = 0;
-   pipe_surface_reference(&brw->curr.fb.zsbuf, NULL);
-
-   bo_reference(&brw->curbe.curbe_bo, NULL);
-   bo_reference(&brw->vs.prog_bo, NULL);
-   bo_reference(&brw->vs.state_bo, NULL);
-   bo_reference(&brw->vs.bind_bo, NULL);
-   bo_reference(&brw->gs.prog_bo, NULL);
-   bo_reference(&brw->gs.state_bo, NULL);
-   bo_reference(&brw->clip.prog_bo, NULL);
-   bo_reference(&brw->clip.state_bo, NULL);
-   bo_reference(&brw->clip.vp_bo, NULL);
-   bo_reference(&brw->sf.prog_bo, NULL);
-   bo_reference(&brw->sf.state_bo, NULL);
-   bo_reference(&brw->sf.vp_bo, NULL);
-
-   for (i = 0; i < Elements(brw->wm.sdc_bo); i++)
-      bo_reference(&brw->wm.sdc_bo[i], NULL);
-
-   bo_reference(&brw->wm.bind_bo, NULL);
-
-   for (i = 0; i < Elements(brw->wm.surf_bo); i++)
-      bo_reference(&brw->wm.surf_bo[i], NULL);
-
-   bo_reference(&brw->wm.sampler_bo, NULL);
-   bo_reference(&brw->wm.prog_bo, NULL);
-   bo_reference(&brw->wm.state_bo, NULL);
-}
-
-
-struct pipe_context *brw_create_context(struct pipe_screen *screen,
-                                       void *priv)
-{
-   struct brw_context *brw = (struct brw_context *) CALLOC_STRUCT(brw_context);
-   struct brw_screen *brs = brw_screen(screen);
-   if (!brw) {
-      debug_printf("%s: failed to alloc context\n", __FUNCTION__);
-      return NULL;
-   }
-
-   brw->base.screen = screen;
-   brw->base.priv = priv;
-   brw->base.destroy = brw_destroy_context;
-   brw->sws = brw_screen(screen)->sws;
-   brw->is_g4x = brs->is_g4x;
-   brw->needs_ff_sync = brs->needs_ff_sync;
-   brw->has_negative_rhw_bug = brs->has_negative_rhw_bug;
-   brw->gen = brs->gen;
-
-   brw_init_resource_functions( brw );
-   brw_pipe_blend_init( brw );
-   brw_pipe_depth_stencil_init( brw );
-   brw_pipe_framebuffer_init( brw );
-   brw_pipe_flush_init( brw );
-   brw_pipe_misc_init( brw );
-   brw_pipe_query_init( brw );
-   brw_pipe_rast_init( brw );
-   brw_pipe_sampler_init( brw );
-   brw_pipe_shader_init( brw );
-   brw_pipe_vertex_init( brw );
-   brw_pipe_clear_init( brw );
-   brw_pipe_surface_init( brw );
-
-   brw_hw_cc_init( brw );
-
-   brw_init_state( brw );
-   brw_draw_init( brw );
-
-   brw->state.dirty.mesa = ~0;
-   brw->state.dirty.brw = ~0;
-
-   brw->flags.always_emit_state = 0;
-
-   make_empty_list(&brw->query.active_head);
-
-   brw->batch = brw_batchbuffer_alloc( brw->sws );
-   if (brw->batch == NULL)
-      goto fail;
-
-   return &brw->base;
-
-fail:
-   if (brw->batch)
-      brw_batchbuffer_free( brw->batch );
-   return NULL;
-}
-
diff --git a/src/gallium/drivers/i965/brw_context.h b/src/gallium/drivers/i965/brw_context.h
deleted file mode 100644 (file)
index 45fc26d..0000000
+++ /dev/null
@@ -1,865 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-
-#ifndef BRWCONTEXT_INC
-#define BRWCONTEXT_INC
-
-#include "brw_structs.h"
-#include "brw_winsys.h"
-#include "brw_reg.h"
-#include "pipe/p_state.h"
-#include "pipe/p_context.h"
-#include "tgsi/tgsi_scan.h"
-
-
-/* Glossary:
- *
- * URB - uniform resource buffer.  A mid-sized buffer which is
- * partitioned between the fixed function units and used for passing
- * values (vertices, primitives, constants) between them.
- *
- * CURBE - constant URB entry.  An urb region (entry) used to hold
- * constant values which the fixed function units can be instructed to
- * preload into the GRF when spawning a thread.
- *
- * VUE - vertex URB entry.  An urb entry holding a vertex and usually
- * a vertex header.  The header contains control information and
- * things like primitive type, Begin/end flags and clip codes.  
- *
- * PUE - primitive URB entry.  An urb entry produced by the setup (SF)
- * unit holding rasterization and interpolation parameters.
- *
- * GRF - general register file.  One of several register files
- * addressable by programmed threads.  The inputs (r0, payload, curbe,
- * urb) of the thread are preloaded to this area before the thread is
- * spawned.  The registers are individually 8 dwords wide and suitable
- * for general usage.  Registers holding thread input values are not
- * special and may be overwritten.
- *
- * MRF - message register file.  Threads communicate (and terminate)
- * by sending messages.  Message parameters are placed in contiguous
- * MRF registers.  All program output is via these messages.  URB
- * entries are populated by sending a message to the shared URB
- * function containing the new data, together with a control word,
- * often an unmodified copy of R0.
- *
- * R0 - GRF register 0.  Typically holds control information used when
- * sending messages to other threads.
- *
- * EU or GEN4 EU: The name of the programmable subsystem of the
- * i965 hardware.  Threads are executed by the EU, the registers
- * described above are part of the EU architecture.
- *
- * Fixed function units:
- *
- * CS - Command streamer.  Notional first unit, little software
- * interaction.  Holds the URB entries used for constant data, ie the
- * CURBEs.
- *
- * VF/VS - Vertex Fetch / Vertex Shader.  The fixed function part of
- * this unit is responsible for pulling vertices out of vertex buffers
- * in vram and injecting them into the processing pipe as VUEs.  If
- * enabled, it first passes them to a VS thread which is a good place
- * for the driver to implement any active vertex shader.
- *
- * GS - Geometry Shader.  This corresponds to a new DX10 concept.  If
- * enabled, incoming strips etc are passed to GS threads in individual
- * line/triangle/point units.  The GS thread may perform arbitary
- * computation and emit whatever primtives with whatever vertices it
- * chooses.  This makes GS an excellent place to implement GL's
- * unfilled polygon modes, though of course it is capable of much
- * more.  Additionally, GS is used to translate away primitives not
- * handled by latter units, including Quads and Lineloops.
- *
- * CS - Clipper.  Mesa's clipping algorithms are imported to run on
- * this unit.  The fixed function part performs cliptesting against
- * the 6 fixed clipplanes and makes decisions on whether or not the
- * incoming primitive needs to be passed to a thread for clipping.
- * User clip planes are handled via cooperation with the VS thread.
- *
- * SF - Strips Fans or Setup: Triangles are prepared for
- * rasterization.  Interpolation coefficients are calculated.
- * Flatshading and two-side lighting usually performed here.
- *
- * WM - Windower.  Interpolation of vertex attributes performed here.
- * Fragment shader implemented here.  SIMD aspects of EU taken full
- * advantage of, as pixels are processed in blocks of 16.
- *
- * CC - Color Calculator.  No EU threads associated with this unit.
- * Handles blending and (presumably) depth and stencil testing.
- */
-
-#define BRW_MAX_CURBE                    (32*16)
-
-
-/* Need a value to say a particular vertex shader output isn't
- * present.  Limits us to 63 outputs currently.
- */
-#define BRW_OUTPUT_NOT_PRESENT           ((1<<6)-1)
-
-
-struct brw_context;
-
-struct brw_depth_stencil_state {
-   /* Precalculated hardware state:
-    */
-   struct brw_cc0 cc0;
-   struct brw_cc1 cc1;
-   struct brw_cc2 cc2;
-   struct brw_cc3 cc3;
-   struct brw_cc7 cc7;
-
-   unsigned iz_lookup;
-};
-
-
-struct brw_blend_state {
-   /* Precalculated hardware state:
-    */
-   struct brw_cc2 cc2;
-   struct brw_cc3 cc3;
-   struct brw_cc5 cc5;
-   struct brw_cc6 cc6;
-
-   struct brw_surf_ss0 ss0;
-};
-
-struct brw_rasterizer_state;
-
-struct brw_immediate_data {
-   unsigned nr;
-   float (*data)[4];
-};
-
-struct brw_vertex_shader {
-   const struct tgsi_token *tokens;
-   struct brw_winsys_buffer *const_buffer;    /** Program constant buffer/surface */
-
-   struct tgsi_shader_info info;
-   struct brw_immediate_data immediates;
-
-   GLuint has_flow_control:1;
-   GLuint use_const_buffer:1;
-
-   /* Offsets of special vertex shader outputs required for clipping.
-    */
-   GLuint output_hpos:6;        /* not always zero? */
-   GLuint output_color0:6;
-   GLuint output_color1:6;
-   GLuint output_bfc0:6;
-   GLuint output_bfc1:6;
-   GLuint output_edgeflag:6;
-
-   unsigned id;
-};
-
-struct brw_fs_signature {
-   GLuint nr_inputs;
-   struct {
-      GLuint interp:3;          /* TGSI_INTERPOLATE_x */
-      GLuint semantic:5;        /* TGSI_SEMANTIC_x */
-      GLuint semantic_index:24;
-   } input[PIPE_MAX_SHADER_INPUTS];
-};
-
-#define brw_fs_signature_size(s) (offsetof(struct brw_fs_signature, input) + \
-                                  ((s)->nr_inputs * sizeof (s)->input[0])) 
-
-
-struct brw_fragment_shader {
-   const struct tgsi_token *tokens;
-   struct tgsi_shader_info info;
-
-   struct brw_fs_signature signature;
-   struct brw_immediate_data immediates;
-
-   unsigned iz_lookup;
-   /*unsigned wm_lookup;*/
-   
-   unsigned  uses_depth:1;
-   unsigned  has_flow_control:1;
-
-   unsigned id;
-   struct brw_winsys_buffer *const_buffer;    /** Program constant buffer/surface */
-   GLboolean use_const_buffer;
-};
-
-
-struct brw_sampler {
-   struct brw_ss0 ss0;
-   struct brw_ss1 ss1;
-   float border_color[4];
-   struct brw_ss3 ss3;
-};
-
-
-
-#define PIPE_NEW_DEPTH_STENCIL_ALPHA    0x1
-#define PIPE_NEW_RAST                   0x2
-#define PIPE_NEW_BLEND                  0x4
-#define PIPE_NEW_VIEWPORT               0x8
-#define PIPE_NEW_SAMPLERS               0x10
-#define PIPE_NEW_VERTEX_BUFFER          0x20
-#define PIPE_NEW_VERTEX_ELEMENT         0x40
-#define PIPE_NEW_FRAGMENT_SHADER        0x80
-#define PIPE_NEW_VERTEX_SHADER          0x100
-#define PIPE_NEW_FRAGMENT_CONSTANTS     0x200
-#define PIPE_NEW_VERTEX_CONSTANTS       0x400
-#define PIPE_NEW_CLIP                   0x800
-#define PIPE_NEW_INDEX_BUFFER           0x1000
-#define PIPE_NEW_INDEX_RANGE            0x2000
-#define PIPE_NEW_BLEND_COLOR            0x4000
-#define PIPE_NEW_POLYGON_STIPPLE        0x8000
-#define PIPE_NEW_FRAMEBUFFER_DIMENSIONS 0x10000
-#define PIPE_NEW_DEPTH_BUFFER           0x20000
-#define PIPE_NEW_COLOR_BUFFERS          0x40000
-#define PIPE_NEW_QUERY                  0x80000
-#define PIPE_NEW_SCISSOR                0x100000
-#define PIPE_NEW_BOUND_TEXTURES         0x200000
-#define PIPE_NEW_NR_CBUFS               0x400000
-#define PIPE_NEW_FRAGMENT_SIGNATURE     0x800000
-
-
-
-#define BRW_NEW_URB_FENCE               0x1
-#define BRW_NEW_FRAGMENT_PROGRAM        0x2
-#define BRW_NEW_VERTEX_PROGRAM          0x4
-#define BRW_NEW_INPUT_DIMENSIONS        0x8
-#define BRW_NEW_CURBE_OFFSETS           0x10
-#define BRW_NEW_REDUCED_PRIMITIVE       0x20
-#define BRW_NEW_PRIMITIVE               0x40
-#define BRW_NEW_CONTEXT                 0x80
-#define BRW_NEW_WM_INPUT_DIMENSIONS     0x100
-#define BRW_NEW_PSP                     0x800
-#define BRW_NEW_WM_SURFACES            0x1000
-#define BRW_NEW_xxx                     0x2000 /* was FENCE */
-#define BRW_NEW_INDICES                        0x4000
-
-/**
- * Used for any batch entry with a relocated pointer that will be used
- * by any 3D rendering.  Need to re-emit these fresh in each
- * batchbuffer as the referenced buffers may be relocated in the
- * meantime.
- */
-#define BRW_NEW_BATCH                  0x10000
-#define BRW_NEW_NR_WM_SURFACES         0x40000
-#define BRW_NEW_NR_VS_SURFACES         0x80000
-#define BRW_NEW_INDEX_BUFFER           0x100000
-
-struct brw_state_flags {
-   /** State update flags signalled by mesa internals */
-   GLuint mesa;
-   /**
-    * State update flags signalled as the result of brw_tracked_state updates
-    */
-   GLuint brw;
-   /** State update flags signalled by brw_state_cache.c searches */
-   GLuint cache;
-};
-
-
-
-/* Data about a particular attempt to compile a program.  Note that
- * there can be many of these, each in a different GL state
- * corresponding to a different brw_wm_prog_key struct, with different
- * compiled programs:
- */
-struct brw_wm_prog_data {
-   GLuint curb_read_length;
-   GLuint urb_read_length;
-
-   GLuint first_curbe_grf;
-   GLuint total_grf;
-   GLuint total_scratch;
-
-   GLuint nr_params;       /**< number of float params/constants */
-   GLboolean error;
-
-   /* Pointer to tracked values (only valid once
-    * _mesa_load_state_parameters has been called at runtime).
-    */
-   const GLfloat *param[BRW_MAX_CURBE];
-};
-
-struct brw_sf_prog_data {
-   GLuint urb_read_length;
-   GLuint total_grf;
-
-   /* Each vertex may have upto 12 attributes, 4 components each,
-    * except WPOS which requires only 2.  (11*4 + 2) == 44 ==> 11
-    * rows.
-    *
-    * Actually we use 4 for each, so call it 12 rows.
-    */
-   GLuint urb_entry_size;
-};
-
-
-struct brw_clip_prog_data;
-
-struct brw_gs_prog_data {
-   GLuint urb_read_length;
-   GLuint total_grf;
-};
-
-struct brw_vs_prog_data {
-   GLuint curb_read_length;
-   GLuint urb_read_length;
-   GLuint total_grf;
-
-   GLuint nr_outputs;
-   GLuint nr_inputs;
-
-   GLuint nr_params;       /**< number of TGSI_FILE_CONSTANT's */
-
-   GLboolean writes_psiz;
-
-   /* Used for calculating urb partitions:
-    */
-   GLuint urb_entry_size;
-};
-
-
-/* Size == 0 if output either not written, or always [0,0,0,1]
- */
-struct brw_vs_output_sizes {
-   GLubyte output_size[PIPE_MAX_SHADER_OUTPUTS];
-};
-
-
-/** Number of texture sampler units */
-#define BRW_MAX_TEX_UNIT 16
-
-/** Max number of render targets in a shader */
-#define BRW_MAX_DRAW_BUFFERS 4
-
-/**
- * Size of our surface binding table for the WM.
- * This contains pointers to the drawing surfaces and current texture
- * objects and shader constant buffers (+2).
- */
-#define BRW_WM_MAX_SURF (BRW_MAX_DRAW_BUFFERS + BRW_MAX_TEX_UNIT + 1)
-
-/**
- * Helpers to convert drawing buffers, textures and constant buffers
- * to surface binding table indexes, for WM.
- */
-#define BTI_COLOR_BUF(d)          (d)
-#define BTI_FRAGMENT_CONSTANTS    (BRW_MAX_DRAW_BUFFERS) 
-#define BTI_TEXTURE(t)            (BRW_MAX_DRAW_BUFFERS + 1 + (t))
-
-/**
- * Size of surface binding table for the VS.
- * Only one constant buffer for now.
- */
-#define BRW_VS_MAX_SURF 1
-
-/**
- * Only a VS constant buffer
- */
-#define SURF_INDEX_VERT_CONST_BUFFER 0
-
-
-/* Bit of a hack to align these with the winsys buffer_data_type enum.
- */
-enum brw_cache_id {
-   BRW_CC_VP         = BRW_DATA_GS_CC_VP,
-   BRW_CC_UNIT       = BRW_DATA_GS_CC_UNIT,
-   BRW_WM_PROG       = BRW_DATA_GS_WM_PROG,
-   BRW_SAMPLER_DEFAULT_COLOR    = BRW_DATA_GS_SAMPLER_DEFAULT_COLOR,
-   BRW_SAMPLER       = BRW_DATA_GS_SAMPLER,
-   BRW_WM_UNIT       = BRW_DATA_GS_WM_UNIT,
-   BRW_SF_PROG       = BRW_DATA_GS_SF_PROG,
-   BRW_SF_VP         = BRW_DATA_GS_SF_VP,
-   BRW_SF_UNIT       = BRW_DATA_GS_SF_UNIT,
-   BRW_VS_UNIT       = BRW_DATA_GS_VS_UNIT,
-   BRW_VS_PROG       = BRW_DATA_GS_VS_PROG,
-   BRW_GS_UNIT       = BRW_DATA_GS_GS_UNIT,
-   BRW_GS_PROG       = BRW_DATA_GS_GS_PROG,
-   BRW_CLIP_VP       = BRW_DATA_GS_CLIP_VP,
-   BRW_CLIP_UNIT     = BRW_DATA_GS_CLIP_UNIT,
-   BRW_CLIP_PROG     = BRW_DATA_GS_CLIP_PROG,
-   BRW_SS_SURFACE    = BRW_DATA_SS_SURFACE,
-   BRW_SS_SURF_BIND  = BRW_DATA_SS_SURF_BIND,
-
-   BRW_MAX_CACHE
-};
-
-struct brw_cache_item {
-   /**
-    * Effectively part of the key, cache_id identifies what kind of state
-    * buffer is involved, and also which brw->state.dirty.cache flag should
-    * be set when this cache item is chosen.
-    */
-   enum brw_cache_id cache_id;
-   /** 32-bit hash of the key data */
-   GLuint hash;
-   GLuint key_size;            /* for variable-sized keys */
-   const void *key;
-   struct brw_winsys_reloc *relocs;
-   GLuint nr_relocs;
-
-   struct brw_winsys_buffer *bo;
-   GLuint data_size;
-
-   struct brw_cache_item *next;
-};   
-
-
-
-struct brw_cache {
-   struct brw_context *brw;
-   struct brw_winsys_screen *sws;
-
-   struct brw_cache_item **items;
-   GLuint size, n_items;
-
-   enum brw_buffer_type buffer_type;
-
-   GLuint key_size[BRW_MAX_CACHE];             /* for fixed-size keys */
-   GLuint aux_size[BRW_MAX_CACHE];
-   char *name[BRW_MAX_CACHE];
-   
-
-   /* Record of the last BOs chosen for each cache_id.  Used to set
-    * brw->state.dirty.cache when a new cache item is chosen.
-    */
-   struct brw_winsys_buffer *last_bo[BRW_MAX_CACHE];
-};
-
-
-struct brw_tracked_state {
-   struct brw_state_flags dirty;
-   int (*prepare)( struct brw_context *brw );
-   int (*emit)( struct brw_context *brw );
-};
-
-/* Flags for brw->state.cache.
- */
-#define CACHE_NEW_CC_VP                  (1<<BRW_CC_VP)
-#define CACHE_NEW_CC_UNIT                (1<<BRW_CC_UNIT)
-#define CACHE_NEW_WM_PROG                (1<<BRW_WM_PROG)
-#define CACHE_NEW_SAMPLER_DEFAULT_COLOR  (1<<BRW_SAMPLER_DEFAULT_COLOR)
-#define CACHE_NEW_SAMPLER                (1<<BRW_SAMPLER)
-#define CACHE_NEW_WM_UNIT                (1<<BRW_WM_UNIT)
-#define CACHE_NEW_SF_PROG                (1<<BRW_SF_PROG)
-#define CACHE_NEW_SF_VP                  (1<<BRW_SF_VP)
-#define CACHE_NEW_SF_UNIT                (1<<BRW_SF_UNIT)
-#define CACHE_NEW_VS_UNIT                (1<<BRW_VS_UNIT)
-#define CACHE_NEW_VS_PROG                (1<<BRW_VS_PROG)
-#define CACHE_NEW_GS_UNIT                (1<<BRW_GS_UNIT)
-#define CACHE_NEW_GS_PROG                (1<<BRW_GS_PROG)
-#define CACHE_NEW_CLIP_VP                (1<<BRW_CLIP_VP)
-#define CACHE_NEW_CLIP_UNIT              (1<<BRW_CLIP_UNIT)
-#define CACHE_NEW_CLIP_PROG              (1<<BRW_CLIP_PROG)
-#define CACHE_NEW_SURFACE                (1<<BRW_SS_SURFACE)
-#define CACHE_NEW_SURF_BIND              (1<<BRW_SS_SURF_BIND)
-
-struct brw_cached_batch_item {
-   struct header *header;
-   GLuint sz;
-   struct brw_cached_batch_item *next;
-};
-   
-
-
-/* Protect against a future where VERT_ATTRIB_MAX > 32.  Wouldn't life
- * be easier if C allowed arrays of packed elements?
- */
-#define VS_INPUT_BITMASK_DWORDS  ((PIPE_MAX_SHADER_INPUTS+31)/32)
-
-
-
-
-struct brw_vertex_info {
-   GLuint sizes[VS_INPUT_BITMASK_DWORDS * 2]; /* sizes:2[VERT_ATTRIB_MAX] */
-};
-
-
-struct brw_query_object {
-   /** Doubly linked list of active query objects in the context. */
-   struct brw_query_object *prev, *next;
-
-   /** Last query BO associated with this query. */
-   struct brw_winsys_buffer *bo;
-   /** First index in bo with query data for this object. */
-   int first_index;
-   /** Last index in bo with query data for this object. */
-   int last_index;
-
-   /* Total count of pixels from previous BOs */
-   uint64_t result;
-};
-
-#define CC_RELOC_VP 0
-
-
-/**
- * brw_context is derived from pipe_context
- */
-struct brw_context 
-{
-   struct pipe_context base;
-   int gen;
-   boolean has_negative_rhw_bug;
-   boolean needs_ff_sync;
-   boolean is_g4x;
-
-   int urb_size;
-   int vs_max_threads;
-   int wm_max_threads;
-
-   struct brw_winsys_screen *sws;
-
-   struct brw_batchbuffer *batch;
-
-   GLuint primitive;
-   GLuint reduced_primitive;
-
-   /* Active state from the state tracker: 
-    */
-   struct {
-      struct brw_vertex_shader *vertex_shader;
-      struct brw_fragment_shader *fragment_shader;
-      const struct brw_blend_state *blend;
-      const struct brw_rasterizer_state *rast;
-      const struct brw_depth_stencil_state *zstencil;
-      const struct brw_vertex_element_packet *velems;
-
-      const struct brw_sampler *sampler[PIPE_MAX_SAMPLERS];
-      unsigned num_samplers;
-
-      struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS];
-      struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
-      unsigned num_fragment_sampler_views;
-      unsigned num_vertex_buffers;
-
-      struct pipe_scissor_state scissor;
-      struct pipe_viewport_state viewport;
-      struct pipe_stencil_ref stencil_ref;
-      struct pipe_framebuffer_state fb;
-      struct pipe_clip_state ucp;
-      struct pipe_resource *vertex_constants;
-      struct pipe_resource *fragment_constants;
-
-      struct brw_blend_constant_color bcc;
-      struct brw_cc1 cc1_stencil_ref;
-      struct brw_polygon_stipple bps;
-      struct brw_cc_viewport ccv;
-
-      /**
-       * Index buffer for this draw_prims call.
-       *
-       * Updates are signaled by PIPE_NEW_INDEX_BUFFER.
-       */
-      struct pipe_resource *index_buffer;
-      unsigned index_size;
-      unsigned index_offset;
-
-      /* Updates are signalled by PIPE_NEW_INDEX_RANGE:
-       */
-      unsigned min_index;
-      unsigned max_index;
-
-   } curr;
-
-   struct {
-      struct brw_state_flags dirty;
-
-      /**
-       * List of buffers accumulated in brw_validate_state to receive
-       * dri_bo_check_aperture treatment before exec, so we can know if we
-       * should flush the batch and try again before emitting primitives.
-       *
-       * This can be a fixed number as we only have a limited number of
-       * objects referenced from the batchbuffer in a primitive emit,
-       * consisting of the vertex buffers, pipelined state pointers,
-       * the CURBE, the depth buffer, and a query BO.
-       */
-      struct brw_winsys_buffer *validated_bos[PIPE_MAX_SHADER_INPUTS + 16];
-      int validated_bo_count;
-   } state;
-
-   struct brw_cache cache;  /** non-surface items */
-   struct brw_cache surface_cache;  /* surface items */
-   struct brw_cached_batch_item *cached_batch_items;
-
-   struct {
-      struct u_upload_mgr *upload_vertex;
-      struct u_upload_mgr *upload_index;
-      
-      /* Information on uploaded vertex buffers:
-       */
-      struct {
-        unsigned stride;       /* in bytes between successive vertices */
-        unsigned offset;       /* in bytes, of first vertex in bo */
-        unsigned vertex_count; /* count of valid vertices which may be accessed */
-        struct brw_winsys_buffer *bo;
-      } vb[PIPE_MAX_ATTRIBS];
-
-      unsigned nr_vb;          /* currently the same as curr.num_vertex_buffers */
-   } vb;
-
-   struct {
-      /* Updates to these fields are signaled by BRW_NEW_INDEX_BUFFER. */
-      struct brw_winsys_buffer *bo;
-      unsigned int offset;
-      unsigned int size;
-      /* Offset to index buffer index to use in CMD_3D_PRIM so that we can
-       * avoid re-uploading the IB packet over and over if we're actually
-       * referencing the same index buffer.
-       */
-      unsigned int start_vertex_offset;
-   } ib;
-
-
-   /* BRW_NEW_URB_ALLOCATIONS:
-    */
-   struct {
-      GLuint vsize;            /* vertex size plus header in urb registers */
-      GLuint csize;            /* constant buffer size in urb registers */
-      GLuint sfsize;           /* setup data size in urb registers */
-
-      GLboolean constrained;
-
-      GLuint nr_vs_entries;
-      GLuint nr_gs_entries;
-      GLuint nr_clip_entries;
-      GLuint nr_sf_entries;
-      GLuint nr_cs_entries;
-
-      GLuint vs_start;
-      GLuint gs_start;
-      GLuint clip_start;
-      GLuint sf_start;
-      GLuint cs_start;
-   } urb;
-
-   
-   /* BRW_NEW_CURBE_OFFSETS: 
-    */
-   struct {
-      GLuint wm_start;  /**< pos of first wm const in CURBE buffer */
-      GLuint wm_size;   /**< number of float[4] consts, multiple of 16 */
-      GLuint clip_start;
-      GLuint clip_size;
-      GLuint vs_start;
-      GLuint vs_size;
-      GLuint total_size;
-
-      struct brw_winsys_buffer *curbe_bo;
-      /** Offset within curbe_bo of space for current curbe entry */
-      GLuint curbe_offset;
-      /** Offset within curbe_bo of space for next curbe entry */
-      GLuint curbe_next_offset;
-
-      GLfloat *last_buf;
-      GLuint last_bufsz;
-      /**
-       *  Whether we should create a new bo instead of reusing the old one
-       * (if we just dispatch the batch pointing at the old one.
-       */
-      GLboolean need_new_bo;
-   } curbe;
-
-   struct {
-      struct brw_vs_prog_data *prog_data;
-
-      struct brw_winsys_buffer *prog_bo;
-      struct brw_winsys_buffer *state_bo;
-
-      /** Binding table of pointers to surf_bo entries */
-      struct brw_winsys_buffer *bind_bo;
-      struct brw_winsys_buffer *surf_bo[BRW_VS_MAX_SURF];
-      GLuint nr_surfaces;      
-   } vs;
-
-   struct {
-      struct brw_gs_prog_data *prog_data;
-
-      GLboolean prog_active;
-      struct brw_winsys_buffer *prog_bo;
-      struct brw_winsys_buffer *state_bo;
-   } gs;
-
-   struct {
-      struct brw_clip_prog_data *prog_data;
-
-      struct brw_winsys_buffer *prog_bo;
-      struct brw_winsys_buffer *state_bo;
-      struct brw_winsys_buffer *vp_bo;
-   } clip;
-
-
-   struct {
-      struct brw_sf_prog_data *prog_data;
-
-      struct brw_winsys_buffer *prog_bo;
-      struct brw_winsys_buffer *state_bo;
-      struct brw_winsys_buffer *vp_bo;
-   } sf;
-
-   struct {
-      struct brw_wm_prog_data *prog_data;
-      struct brw_wm_compile *compile_data;
-
-      /** Input sizes, calculated from active vertex program.
-       * One bit per fragment program input attribute.
-       */
-      /*GLbitfield input_size_masks[4];*/
-
-      /** Array of surface default colors (texture border color) */
-      struct brw_winsys_buffer *sdc_bo[BRW_MAX_TEX_UNIT];
-
-      GLuint render_surf;
-      GLuint nr_surfaces;      
-
-      GLuint max_threads;
-      struct brw_winsys_buffer *scratch_bo;
-
-      GLuint sampler_count;
-      struct brw_winsys_buffer *sampler_bo;
-
-      /** Binding table of pointers to surf_bo entries */
-      struct brw_winsys_buffer *bind_bo;
-      struct brw_winsys_buffer *surf_bo[BRW_WM_MAX_SURF];
-
-      struct brw_winsys_buffer *prog_bo;
-      struct brw_winsys_buffer *state_bo;
-   } wm;
-
-
-   struct {
-      struct brw_winsys_buffer *state_bo;
-
-      struct brw_cc_unit_state cc;
-      struct brw_winsys_reloc reloc[1];
-   } cc;
-
-   struct {
-      struct brw_query_object active_head;
-      struct brw_winsys_buffer *bo;
-      int index;
-      GLboolean active;
-      int stats_wm;
-   } query;
-
-   struct {
-      unsigned always_emit_state:1;
-      unsigned always_flush_batch:1;
-      unsigned force_swtnl:1;
-      unsigned no_swtnl:1;
-   } flags;
-
-   /* Used to give every program string a unique id
-    */
-   GLuint program_id;
-};
-
-
-
-/*======================================================================
- * brw_queryobj.c
- */
-void brw_init_query(struct brw_context *brw);
-enum pipe_error brw_prepare_query_begin(struct brw_context *brw);
-void brw_emit_query_begin(struct brw_context *brw);
-void brw_emit_query_end(struct brw_context *brw);
-
-/*======================================================================
- * brw_state_dump.c
- */
-void brw_debug_batch(struct brw_context *intel);
-
-
-/*======================================================================
- * brw_pipe_*.c
- */
-void brw_pipe_blend_init( struct brw_context *brw );
-void brw_pipe_depth_stencil_init( struct brw_context *brw );
-void brw_pipe_framebuffer_init( struct brw_context *brw );
-void brw_pipe_flush_init( struct brw_context *brw );
-void brw_pipe_misc_init( struct brw_context *brw );
-void brw_pipe_query_init( struct brw_context *brw );
-void brw_pipe_rast_init( struct brw_context *brw );
-void brw_pipe_sampler_init( struct brw_context *brw );
-void brw_pipe_shader_init( struct brw_context *brw );
-void brw_pipe_vertex_init( struct brw_context *brw );
-void brw_pipe_clear_init( struct brw_context *brw );
-
-
-void brw_pipe_blend_cleanup( struct brw_context *brw );
-void brw_pipe_depth_stencil_cleanup( struct brw_context *brw );
-void brw_pipe_framebuffer_cleanup( struct brw_context *brw );
-void brw_pipe_flush_cleanup( struct brw_context *brw );
-void brw_pipe_misc_cleanup( struct brw_context *brw );
-void brw_pipe_query_cleanup( struct brw_context *brw );
-void brw_pipe_rast_cleanup( struct brw_context *brw );
-void brw_pipe_sampler_cleanup( struct brw_context *brw );
-void brw_pipe_shader_cleanup( struct brw_context *brw );
-void brw_pipe_vertex_cleanup( struct brw_context *brw );
-void brw_pipe_clear_cleanup( struct brw_context *brw );
-void brw_pipe_surface_init( struct brw_context *brw );
-
-void brw_hw_cc_init( struct brw_context *brw );
-void brw_hw_cc_cleanup( struct brw_context *brw );
-
-
-
-void brw_context_flush( struct brw_context *brw );
-
-
-/* brw_urb.c
- */
-int brw_upload_urb_fence(struct brw_context *brw);
-
-/* brw_curbe.c
- */
-int brw_upload_cs_urb_state(struct brw_context *brw);
-
-/* brw_context.c
- */
-struct pipe_context *brw_create_context(struct pipe_screen *screen,
-                                       void *priv);
-
-/*======================================================================
- * Inline conversion functions.  These are better-typed than the
- * macros used previously:
- */
-static INLINE struct brw_context *
-brw_context( struct pipe_context *ctx )
-{
-   return (struct brw_context *)ctx;
-}
-
-#endif
-
diff --git a/src/gallium/drivers/i965/brw_curbe.c b/src/gallium/drivers/i965/brw_curbe.c
deleted file mode 100644 (file)
index a701de3..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "util/u_memory.h"
-#include "util/u_math.h"
-
-#include "brw_batchbuffer.h"
-#include "brw_context.h"
-#include "brw_defines.h"
-#include "brw_state.h"
-#include "brw_debug.h"
-
-
-/**
- * Partition the CURBE between the various users of constant values:
- * Note that vertex and fragment shaders can now fetch constants out
- * of constant buffers.  We no longer allocatea block of the GRF for
- * constants.  That greatly reduces the demand for space in the CURBE.
- * Some of the comments within are dated...
- */
-static int calculate_curbe_offsets( struct brw_context *brw )
-{
-   /* CACHE_NEW_WM_PROG */
-   const GLuint nr_fp_regs = brw->wm.prog_data->curb_read_length;
-   
-   /* BRW_NEW_VERTEX_PROGRAM */
-   const GLuint nr_vp_regs = brw->vs.prog_data->curb_read_length;
-   GLuint nr_clip_regs = 0;
-   GLuint total_regs;
-
-   /* PIPE_NEW_CLIP */
-   if (brw->curr.ucp.nr) {
-      GLuint nr_planes = 6 + brw->curr.ucp.nr;
-      nr_clip_regs = (nr_planes * 4 + 15) / 16;
-   }
-
-
-   total_regs = nr_fp_regs + nr_vp_regs + nr_clip_regs;
-
-   /* When this is > 32, want to use a true constant buffer to hold
-    * the extra constants.
-    */
-   assert(total_regs <= 32);
-
-   /* Lazy resize:
-    */
-   if (nr_fp_regs > brw->curbe.wm_size ||
-       nr_vp_regs > brw->curbe.vs_size ||
-       nr_clip_regs != brw->curbe.clip_size ||
-       (total_regs < brw->curbe.total_size / 4 &&
-       brw->curbe.total_size > 16)) {
-
-      GLuint reg = 0;
-
-      /* Calculate a new layout: 
-       */
-      reg = 0;
-      brw->curbe.wm_start = reg;
-      brw->curbe.wm_size = nr_fp_regs; reg += nr_fp_regs;
-      brw->curbe.clip_start = reg;
-      brw->curbe.clip_size = nr_clip_regs; reg += nr_clip_regs;
-      brw->curbe.vs_start = reg;
-      brw->curbe.vs_size = nr_vp_regs; reg += nr_vp_regs;
-      brw->curbe.total_size = reg;
-
-      if (BRW_DEBUG & DEBUG_CURBE)
-        debug_printf("curbe wm %d+%d clip %d+%d vs %d+%d\n",
-                     brw->curbe.wm_start,
-                     brw->curbe.wm_size,
-                     brw->curbe.clip_start,
-                     brw->curbe.clip_size,
-                     brw->curbe.vs_start,
-                     brw->curbe.vs_size );
-
-      brw->state.dirty.brw |= BRW_NEW_CURBE_OFFSETS;
-   }
-
-   return 0;
-}
-
-
-const struct brw_tracked_state brw_curbe_offsets = {
-   .dirty = {
-      .mesa = PIPE_NEW_CLIP,
-      .brw  = BRW_NEW_VERTEX_PROGRAM,
-      .cache = CACHE_NEW_WM_PROG
-   },
-   .prepare = calculate_curbe_offsets
-};
-
-
-
-
-/* Define the number of curbes within CS's urb allocation.  Multiple
- * urb entries -> multiple curbes.  These will be used by
- * fixed-function hardware in a double-buffering scheme to avoid a
- * pipeline stall each time the contents of the curbe is changed.
- */
-int brw_upload_cs_urb_state(struct brw_context *brw)
-{
-   struct brw_cs_urb_state cs_urb;
-   memset(&cs_urb, 0, sizeof(cs_urb));
-
-   /* It appears that this is the state packet for the CS unit, ie. the
-    * urb entries detailed here are housed in the CS range from the
-    * URB_FENCE command.
-    */
-   cs_urb.header.opcode = CMD_CS_URB_STATE;
-   cs_urb.header.length = sizeof(cs_urb)/4 - 2;
-
-   /* BRW_NEW_URB_FENCE */
-   cs_urb.bits0.nr_urb_entries = brw->urb.nr_cs_entries;
-   cs_urb.bits0.urb_entry_size = brw->urb.csize - 1;
-
-   assert(brw->urb.nr_cs_entries);
-   BRW_CACHED_BATCH_STRUCT(brw, &cs_urb);
-   return 0;
-}
-
-static GLfloat fixed_plane[6][4] = {
-   { 0,    0,   -1, 1 },
-   { 0,    0,    1, 1 },
-   { 0,   -1,    0, 1 },
-   { 0,    1,    0, 1 },
-   {-1,    0,    0, 1 },
-   { 1,    0,    0, 1 }
-};
-
-/* Upload a new set of constants.  Too much variability to go into the
- * cache mechanism, but maybe would benefit from a comparison against
- * the current uploaded set of constants.
- */
-static enum pipe_error prepare_curbe_buffer(struct brw_context *brw)
-{
-   const GLuint sz = brw->curbe.total_size;
-   const GLuint bufsz = sz * 16 * sizeof(GLfloat);
-   enum pipe_error ret;
-   GLfloat *buf;
-   GLuint i;
-
-   if (sz == 0) {
-      if (brw->curbe.last_buf) {
-        FREE(brw->curbe.last_buf);
-        brw->curbe.last_buf = NULL;
-        brw->curbe.last_bufsz  = 0;
-      }
-      return 0;
-   }
-
-   buf = (GLfloat *) CALLOC(bufsz, 1);
-
-   /* fragment shader constants */
-   if (brw->curbe.wm_size) {
-      const struct brw_fragment_shader *fs = brw->curr.fragment_shader;
-      GLuint offset = brw->curbe.wm_start * 16;
-      GLuint nr_immediate, nr_const;
-
-      nr_immediate = fs->immediates.nr;
-      if (nr_immediate) {
-         memcpy(&buf[offset], 
-                fs->immediates.data,
-                nr_immediate * 4 * sizeof(float));
-
-         offset += nr_immediate * 4;
-      }
-
-      nr_const = fs->info.file_max[TGSI_FILE_CONSTANT] + 1;
-/*      nr_const = brw->wm.prog_data->nr_params; */
-      if (nr_const) {
-        pipe_buffer_read( &brw->base,
-                          brw->curr.fragment_constants,
-                          0,
-                          nr_const * 4 * sizeof(float),
-                          &buf[offset]);
-      }
-   }
-
-
-   /* The clipplanes are actually delivered to both CLIP and VS units.
-    * VS uses them to calculate the outcode bitmasks.
-    */
-   if (brw->curbe.clip_size) {
-      GLuint offset = brw->curbe.clip_start * 16;
-      GLuint j;
-
-      /* If any planes are going this way, send them all this way:
-       */
-      for (i = 0; i < 6; i++) {
-        buf[offset + i * 4 + 0] = fixed_plane[i][0];
-        buf[offset + i * 4 + 1] = fixed_plane[i][1];
-        buf[offset + i * 4 + 2] = fixed_plane[i][2];
-        buf[offset + i * 4 + 3] = fixed_plane[i][3];
-      }
-
-      /* Clip planes:
-       */
-      assert(brw->curr.ucp.nr <= 6);
-      for (j = 0; j < brw->curr.ucp.nr; j++) {
-        buf[offset + i * 4 + 0] = brw->curr.ucp.ucp[j][0];
-        buf[offset + i * 4 + 1] = brw->curr.ucp.ucp[j][1];
-        buf[offset + i * 4 + 2] = brw->curr.ucp.ucp[j][2];
-        buf[offset + i * 4 + 3] = brw->curr.ucp.ucp[j][3];
-        i++;
-      }
-   }
-
-   /* vertex shader constants */
-   if (brw->curbe.vs_size) {
-      GLuint offset = brw->curbe.vs_start * 16;
-      const struct brw_vertex_shader *vs = brw->curr.vertex_shader;
-      GLuint nr_immediate, nr_const;
-
-      nr_immediate = vs->immediates.nr;
-      if (nr_immediate) {
-         memcpy(&buf[offset], 
-                vs->immediates.data,
-                nr_immediate * 4 * sizeof(float));
-
-         offset += nr_immediate * 4;
-      }
-
-      nr_const = vs->info.file_max[TGSI_FILE_CONSTANT] + 1;
-      if (nr_const) {
-         /* XXX: note that constant buffers are currently *already* in
-          * buffer objects.  If we want to keep on putting them into the
-          * curbe, makes sense to treat constbuf's specially with malloc.
-          */
-         
-         /* XXX: what if user's constant buffer is too small?
-          */
-        pipe_buffer_read(&brw->base,
-                         brw->curr.vertex_constants,
-                         0,
-                         nr_const * 4 * sizeof(float),
-                         &buf[offset]);
-      }
-   }
-
-   if (BRW_DEBUG & DEBUG_CURBE) {
-      for (i = 0; i < sz*16; i+=4) 
-        debug_printf("curbe %d.%d: %f %f %f %f\n", i/8, i&4,
-                     buf[i+0], buf[i+1], buf[i+2], buf[i+3]);
-
-      debug_printf("last_buf %p buf %p sz %d/%d cmp %d\n",
-                  (void *)brw->curbe.last_buf, (void *)buf,
-                  bufsz, brw->curbe.last_bufsz,
-                  brw->curbe.last_buf ? memcmp(buf, brw->curbe.last_buf, bufsz) : -1);
-   }
-
-   if (brw->curbe.curbe_bo != NULL &&
-       brw->curbe.last_buf &&
-       bufsz == brw->curbe.last_bufsz &&
-       memcmp(buf, brw->curbe.last_buf, bufsz) == 0) {
-      /* constants have not changed */
-      FREE(buf);
-   } 
-   else {
-      /* constants have changed */
-      FREE(brw->curbe.last_buf);
-
-      brw->curbe.last_buf = buf;
-      brw->curbe.last_bufsz = bufsz;
-
-      if (brw->curbe.curbe_bo != NULL &&
-         (brw->curbe.need_new_bo ||
-          brw->curbe.curbe_next_offset + bufsz > brw->curbe.curbe_bo->size))
-      {
-        bo_reference(&brw->curbe.curbe_bo, NULL);
-      }
-
-      if (brw->curbe.curbe_bo == NULL) {
-        /* Allocate a single page for CURBE entries for this
-         * batchbuffer.  They're generally around 64b.  We will
-         * discard the curbe buffer after the batch is flushed to
-         * avoid synchronous updates.
-         */
-        ret = brw->sws->bo_alloc(brw->sws, 
-                                  BRW_BUFFER_TYPE_CURBE,
-                                  4096, 1 << 6,
-                                  &brw->curbe.curbe_bo);
-         if (ret)
-            return ret;
-
-        brw->curbe.curbe_next_offset = 0;
-      }
-
-      brw->curbe.curbe_offset = brw->curbe.curbe_next_offset;
-      brw->curbe.curbe_next_offset += bufsz;
-      brw->curbe.curbe_next_offset = align(brw->curbe.curbe_next_offset, 64);
-
-      /* Copy data to the buffer:
-       */
-      brw->sws->bo_subdata(brw->curbe.curbe_bo,
-                           BRW_DATA_CONSTANT_BUFFER,
-                          brw->curbe.curbe_offset,
-                          bufsz,
-                          buf,
-                           NULL, 0);
-   }
-
-   brw_add_validated_bo(brw, brw->curbe.curbe_bo);
-
-   /* Because this provokes an action (ie copy the constants into the
-    * URB), it shouldn't be shortcircuited if identical to the
-    * previous time - because eg. the urb destination may have
-    * changed, or the urb contents different to last time.
-    *
-    * Note that the data referred to is actually copied internally,
-    * not just used in place according to passed pointer.
-    *
-    * It appears that the CS unit takes care of using each available
-    * URB entry (Const URB Entry == CURBE) in turn, and issuing
-    * flushes as necessary when doublebuffering of CURBEs isn't
-    * possible.
-    */
-
-   return 0;
-}
-
-static enum pipe_error emit_curbe_buffer(struct brw_context *brw)
-{
-   GLuint sz = brw->curbe.total_size;
-
-   BEGIN_BATCH(2, IGNORE_CLIPRECTS);
-   if (sz == 0) {
-      OUT_BATCH((CMD_CONST_BUFFER << 16) | (2 - 2));
-      OUT_BATCH(0);
-   } else {
-      OUT_BATCH((CMD_CONST_BUFFER << 16) | (1 << 8) | (2 - 2));
-      OUT_RELOC(brw->curbe.curbe_bo,
-               BRW_USAGE_STATE,
-               (sz - 1) + brw->curbe.curbe_offset);
-   }
-   ADVANCE_BATCH();
-   return 0;
-}
-
-const struct brw_tracked_state brw_curbe_buffer = {
-   .dirty = {
-      .mesa = (PIPE_NEW_FRAGMENT_CONSTANTS |
-              PIPE_NEW_VERTEX_CONSTANTS |
-              PIPE_NEW_CLIP),
-      .brw  = (BRW_NEW_FRAGMENT_PROGRAM |
-              BRW_NEW_VERTEX_PROGRAM |
-              BRW_NEW_URB_FENCE | /* Implicit - hardware requires this, not used above */
-              BRW_NEW_PSP | /* Implicit - hardware requires this, not used above */
-              BRW_NEW_CURBE_OFFSETS |
-              BRW_NEW_BATCH),
-      .cache = (CACHE_NEW_WM_PROG) 
-   },
-   .prepare = prepare_curbe_buffer,
-   .emit = emit_curbe_buffer,
-};
-
diff --git a/src/gallium/drivers/i965/brw_debug.h b/src/gallium/drivers/i965/brw_debug.h
deleted file mode 100644 (file)
index ae8e925..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef BRW_DEBUG_H
-#define BRW_DEBUG_H
-
-/* ================================================================
- * Debugging:
- */
-
-#define DEBUG_TEXTURE          0x1
-#define DEBUG_STATE            0x2
-#define DEBUG_IOCTL            0x4
-#define DEBUG_BLIT             0x8
-#define DEBUG_CURBE             0x10
-#define DEBUG_FALLBACKS                0x20
-#define DEBUG_VERBOSE          0x40
-#define DEBUG_BATCH             0x80
-#define DEBUG_PIXEL             0x100
-#define DEBUG_WINSYS            0x200
-#define DEBUG_MIN_URB           0x400
-#define DEBUG_DISASSEM           0x800
-#define DEBUG_unused3           0x1000
-#define DEBUG_SYNC             0x2000
-#define DEBUG_PRIMS            0x4000
-#define DEBUG_VERTS            0x8000
-#define DEBUG_unused4           0x10000
-#define DEBUG_DMA               0x20000
-#define DEBUG_SANITY            0x40000
-#define DEBUG_SLEEP             0x80000
-#define DEBUG_STATS             0x100000
-#define DEBUG_unused5           0x200000
-#define DEBUG_SINGLE_THREAD     0x400000
-#define DEBUG_WM                0x800000
-#define DEBUG_URB               0x1000000
-#define DEBUG_VS                0x2000000
-
-#ifdef DEBUG
-extern int BRW_DEBUG;
-#else
-#define BRW_DEBUG 0
-#endif
-
-
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_defines.h b/src/gallium/drivers/i965/brw_defines.h
deleted file mode 100644 (file)
index 7547eae..0000000
+++ /dev/null
@@ -1,1166 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#ifndef BRW_DEFINES_H
-#define BRW_DEFINES_H
-
-/* 3D state:
- */
-#define _3DOP_3DSTATE_PIPELINED       0x0
-#define _3DOP_3DSTATE_NONPIPELINED    0x1
-#define _3DOP_3DCONTROL               0x2
-#define _3DOP_3DPRIMITIVE             0x3
-
-#define _3DSTATE_PIPELINED_POINTERS       0x00
-#define _3DSTATE_BINDING_TABLE_POINTERS   0x01
-#define _3DSTATE_VERTEX_BUFFERS           0x08
-#define _3DSTATE_VERTEX_ELEMENTS          0x09
-#define _3DSTATE_INDEX_BUFFER             0x0A
-#define _3DSTATE_VF_STATISTICS            0x0B
-#define _3DSTATE_DRAWING_RECTANGLE            0x00
-#define _3DSTATE_CONSTANT_COLOR               0x01
-#define _3DSTATE_SAMPLER_PALETTE_LOAD         0x02
-#define _3DSTATE_CHROMA_KEY                   0x04
-#define _3DSTATE_DEPTH_BUFFER                 0x05
-#define _3DSTATE_POLY_STIPPLE_OFFSET          0x06
-#define _3DSTATE_POLY_STIPPLE_PATTERN         0x07
-#define _3DSTATE_LINE_STIPPLE                 0x08
-#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP    0x09
-#define _3DCONTROL    0x00
-
-#define PIPE_CONTROL_NOWRITE          0x00
-#define PIPE_CONTROL_WRITEIMMEDIATE   0x01
-#define PIPE_CONTROL_WRITEDEPTH       0x02
-#define PIPE_CONTROL_WRITETIMESTAMP   0x03
-
-#define PIPE_CONTROL_GTTWRITE_PROCESS_LOCAL 0x00
-#define PIPE_CONTROL_GTTWRITE_GLOBAL        0x01
-
-#define _3DPRIM_POINTLIST         0x01
-#define _3DPRIM_LINELIST          0x02
-#define _3DPRIM_LINESTRIP         0x03
-#define _3DPRIM_TRILIST           0x04
-#define _3DPRIM_TRISTRIP          0x05
-#define _3DPRIM_TRIFAN            0x06
-#define _3DPRIM_QUADLIST          0x07
-#define _3DPRIM_QUADSTRIP         0x08
-#define _3DPRIM_LINELIST_ADJ      0x09
-#define _3DPRIM_LINESTRIP_ADJ     0x0A
-#define _3DPRIM_TRILIST_ADJ       0x0B
-#define _3DPRIM_TRISTRIP_ADJ      0x0C
-#define _3DPRIM_TRISTRIP_REVERSE  0x0D
-#define _3DPRIM_POLYGON           0x0E
-#define _3DPRIM_RECTLIST          0x0F
-#define _3DPRIM_LINELOOP          0x10
-#define _3DPRIM_POINTLIST_BF      0x11
-#define _3DPRIM_LINESTRIP_CONT    0x12
-#define _3DPRIM_LINESTRIP_BF      0x13
-#define _3DPRIM_LINESTRIP_CONT_BF 0x14
-#define _3DPRIM_TRIFAN_NOSTIPPLE  0x15
-
-#define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL 0
-#define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     1
-
-#define BRW_ANISORATIO_2     0 
-#define BRW_ANISORATIO_4     1 
-#define BRW_ANISORATIO_6     2 
-#define BRW_ANISORATIO_8     3 
-#define BRW_ANISORATIO_10    4 
-#define BRW_ANISORATIO_12    5 
-#define BRW_ANISORATIO_14    6 
-#define BRW_ANISORATIO_16    7
-
-#define BRW_BLENDFACTOR_ONE                 0x1
-#define BRW_BLENDFACTOR_SRC_COLOR           0x2
-#define BRW_BLENDFACTOR_SRC_ALPHA           0x3
-#define BRW_BLENDFACTOR_DST_ALPHA           0x4
-#define BRW_BLENDFACTOR_DST_COLOR           0x5
-#define BRW_BLENDFACTOR_SRC_ALPHA_SATURATE  0x6
-#define BRW_BLENDFACTOR_CONST_COLOR         0x7
-#define BRW_BLENDFACTOR_CONST_ALPHA         0x8
-#define BRW_BLENDFACTOR_SRC1_COLOR          0x9
-#define BRW_BLENDFACTOR_SRC1_ALPHA          0x0A
-#define BRW_BLENDFACTOR_ZERO                0x11
-#define BRW_BLENDFACTOR_INV_SRC_COLOR       0x12
-#define BRW_BLENDFACTOR_INV_SRC_ALPHA       0x13
-#define BRW_BLENDFACTOR_INV_DST_ALPHA       0x14
-#define BRW_BLENDFACTOR_INV_DST_COLOR       0x15
-#define BRW_BLENDFACTOR_INV_CONST_COLOR     0x17
-#define BRW_BLENDFACTOR_INV_CONST_ALPHA     0x18
-#define BRW_BLENDFACTOR_INV_SRC1_COLOR      0x19
-#define BRW_BLENDFACTOR_INV_SRC1_ALPHA      0x1A
-
-#define BRW_BLENDFUNCTION_ADD               0
-#define BRW_BLENDFUNCTION_SUBTRACT          1
-#define BRW_BLENDFUNCTION_REVERSE_SUBTRACT  2
-#define BRW_BLENDFUNCTION_MIN               3
-#define BRW_BLENDFUNCTION_MAX               4
-
-#define BRW_ALPHATEST_FORMAT_UNORM8         0
-#define BRW_ALPHATEST_FORMAT_FLOAT32        1
-
-#define BRW_CHROMAKEY_KILL_ON_ANY_MATCH  0
-#define BRW_CHROMAKEY_REPLACE_BLACK      1
-
-#define BRW_CLIP_API_OGL     0
-#define BRW_CLIP_API_DX      1
-
-#define BRW_CLIPMODE_NORMAL              0
-#define BRW_CLIPMODE_CLIP_ALL            1
-#define BRW_CLIPMODE_CLIP_NON_REJECTED   2
-#define BRW_CLIPMODE_REJECT_ALL          3
-#define BRW_CLIPMODE_ACCEPT_ALL          4
-#define BRW_CLIPMODE_KERNEL_CLIP         5
-
-#define BRW_CLIP_NDCSPACE     0
-#define BRW_CLIP_SCREENSPACE  1
-
-#define BRW_COMPAREFUNCTION_ALWAYS       0
-#define BRW_COMPAREFUNCTION_NEVER        1
-#define BRW_COMPAREFUNCTION_LESS         2
-#define BRW_COMPAREFUNCTION_EQUAL        3
-#define BRW_COMPAREFUNCTION_LEQUAL       4
-#define BRW_COMPAREFUNCTION_GREATER      5
-#define BRW_COMPAREFUNCTION_NOTEQUAL     6
-#define BRW_COMPAREFUNCTION_GEQUAL       7
-
-#define BRW_COVERAGE_PIXELS_HALF     0
-#define BRW_COVERAGE_PIXELS_1        1
-#define BRW_COVERAGE_PIXELS_2        2
-#define BRW_COVERAGE_PIXELS_4        3
-
-#define BRW_CULLMODE_BOTH        0
-#define BRW_CULLMODE_NONE        1
-#define BRW_CULLMODE_FRONT       2
-#define BRW_CULLMODE_BACK        3
-
-#define BRW_DEFAULTCOLOR_R8G8B8A8_UNORM      0
-#define BRW_DEFAULTCOLOR_R32G32B32A32_FLOAT  1
-
-#define BRW_DEPTHFORMAT_D32_FLOAT_S8X24_UINT     0
-#define BRW_DEPTHFORMAT_D32_FLOAT                1
-#define BRW_DEPTHFORMAT_D24_UNORM_S8_UINT        2
-#define BRW_DEPTHFORMAT_D16_UNORM                5
-
-#define BRW_FLOATING_POINT_IEEE_754        0
-#define BRW_FLOATING_POINT_NON_IEEE_754    1
-
-#define BRW_FRONTWINDING_CW      0
-#define BRW_FRONTWINDING_CCW     1
-
-#define BRW_SPRITE_POINT_ENABLE  16
-
-#define BRW_INDEX_BYTE     0
-#define BRW_INDEX_WORD     1
-#define BRW_INDEX_DWORD    2
-
-#define BRW_LOGICOPFUNCTION_CLEAR            0
-#define BRW_LOGICOPFUNCTION_NOR              1
-#define BRW_LOGICOPFUNCTION_AND_INVERTED     2
-#define BRW_LOGICOPFUNCTION_COPY_INVERTED    3
-#define BRW_LOGICOPFUNCTION_AND_REVERSE      4
-#define BRW_LOGICOPFUNCTION_INVERT           5
-#define BRW_LOGICOPFUNCTION_XOR              6
-#define BRW_LOGICOPFUNCTION_NAND             7
-#define BRW_LOGICOPFUNCTION_AND              8
-#define BRW_LOGICOPFUNCTION_EQUIV            9
-#define BRW_LOGICOPFUNCTION_NOOP             10
-#define BRW_LOGICOPFUNCTION_OR_INVERTED      11
-#define BRW_LOGICOPFUNCTION_COPY             12
-#define BRW_LOGICOPFUNCTION_OR_REVERSE       13
-#define BRW_LOGICOPFUNCTION_OR               14
-#define BRW_LOGICOPFUNCTION_SET              15  
-
-#define BRW_MAPFILTER_NEAREST        0x0 
-#define BRW_MAPFILTER_LINEAR         0x1 
-#define BRW_MAPFILTER_ANISOTROPIC    0x2
-
-#define BRW_MIPFILTER_NONE        0   
-#define BRW_MIPFILTER_NEAREST     1   
-#define BRW_MIPFILTER_LINEAR      3
-
-#define BRW_POLYGON_FRONT_FACING     0
-#define BRW_POLYGON_BACK_FACING      1
-
-#define BRW_PREFILTER_ALWAYS     0x0 
-#define BRW_PREFILTER_NEVER      0x1
-#define BRW_PREFILTER_LESS       0x2
-#define BRW_PREFILTER_EQUAL      0x3
-#define BRW_PREFILTER_LEQUAL     0x4
-#define BRW_PREFILTER_GREATER    0x5
-#define BRW_PREFILTER_NOTEQUAL   0x6
-#define BRW_PREFILTER_GEQUAL     0x7
-
-#define BRW_PROVOKING_VERTEX_0    0
-#define BRW_PROVOKING_VERTEX_1    1 
-#define BRW_PROVOKING_VERTEX_2    2
-
-#define BRW_RASTRULE_UPPER_LEFT  0    
-#define BRW_RASTRULE_UPPER_RIGHT 1
-/* These are listed as "Reserved, but not seen as useful"
- * in Intel documentation (page 212, "Point Rasterization Rule",
- * section 7.4 "SF Pipeline State Summary", of document
- * "Intel® 965 Express Chipset Family and Intel® G35 Express
- * Chipset Graphics Controller Programmer's Reference Manual,
- * Volume 2: 3D/Media", Revision 1.0b as of January 2008,
- * available at 
- *     http://intellinuxgraphics.org/documentation.html
- * at the time of this writing).
- *
- * These appear to be supported on at least some
- * i965-family devices, and the BRW_RASTRULE_LOWER_RIGHT
- * is useful when using OpenGL to render to a FBO
- * (which has the pixel coordinate Y orientation inverted
- * with respect to the normal OpenGL pixel coordinate system).
- */
-#define BRW_RASTRULE_LOWER_LEFT  2
-#define BRW_RASTRULE_LOWER_RIGHT 3
-
-#define BRW_RENDERTARGET_CLAMPRANGE_UNORM    0
-#define BRW_RENDERTARGET_CLAMPRANGE_SNORM    1
-#define BRW_RENDERTARGET_CLAMPRANGE_FORMAT   2
-
-#define BRW_STENCILOP_KEEP               0
-#define BRW_STENCILOP_ZERO               1
-#define BRW_STENCILOP_REPLACE            2
-#define BRW_STENCILOP_INCRSAT            3
-#define BRW_STENCILOP_DECRSAT            4
-#define BRW_STENCILOP_INCR               5
-#define BRW_STENCILOP_DECR               6
-#define BRW_STENCILOP_INVERT             7
-
-#define BRW_SURFACE_MIPMAPLAYOUT_BELOW   0
-#define BRW_SURFACE_MIPMAPLAYOUT_RIGHT   1
-
-#define BRW_SURFACEFORMAT_R32G32B32A32_FLOAT             0x000 
-#define BRW_SURFACEFORMAT_R32G32B32A32_SINT              0x001 
-#define BRW_SURFACEFORMAT_R32G32B32A32_UINT              0x002 
-#define BRW_SURFACEFORMAT_R32G32B32A32_UNORM             0x003 
-#define BRW_SURFACEFORMAT_R32G32B32A32_SNORM             0x004 
-#define BRW_SURFACEFORMAT_R64G64_FLOAT                   0x005 
-#define BRW_SURFACEFORMAT_R32G32B32X32_FLOAT             0x006 
-#define BRW_SURFACEFORMAT_R32G32B32A32_SSCALED           0x007
-#define BRW_SURFACEFORMAT_R32G32B32A32_USCALED           0x008
-#define BRW_SURFACEFORMAT_R32G32B32_FLOAT                0x040 
-#define BRW_SURFACEFORMAT_R32G32B32_SINT                 0x041 
-#define BRW_SURFACEFORMAT_R32G32B32_UINT                 0x042 
-#define BRW_SURFACEFORMAT_R32G32B32_UNORM                0x043 
-#define BRW_SURFACEFORMAT_R32G32B32_SNORM                0x044 
-#define BRW_SURFACEFORMAT_R32G32B32_SSCALED              0x045 
-#define BRW_SURFACEFORMAT_R32G32B32_USCALED              0x046 
-#define BRW_SURFACEFORMAT_R16G16B16A16_UNORM             0x080 
-#define BRW_SURFACEFORMAT_R16G16B16A16_SNORM             0x081 
-#define BRW_SURFACEFORMAT_R16G16B16A16_SINT              0x082 
-#define BRW_SURFACEFORMAT_R16G16B16A16_UINT              0x083 
-#define BRW_SURFACEFORMAT_R16G16B16A16_FLOAT             0x084 
-#define BRW_SURFACEFORMAT_R32G32_FLOAT                   0x085 
-#define BRW_SURFACEFORMAT_R32G32_SINT                    0x086 
-#define BRW_SURFACEFORMAT_R32G32_UINT                    0x087 
-#define BRW_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS       0x088 
-#define BRW_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT        0x089 
-#define BRW_SURFACEFORMAT_L32A32_FLOAT                   0x08A 
-#define BRW_SURFACEFORMAT_R32G32_UNORM                   0x08B 
-#define BRW_SURFACEFORMAT_R32G32_SNORM                   0x08C 
-#define BRW_SURFACEFORMAT_R64_FLOAT                      0x08D 
-#define BRW_SURFACEFORMAT_R16G16B16X16_UNORM             0x08E 
-#define BRW_SURFACEFORMAT_R16G16B16X16_FLOAT             0x08F 
-#define BRW_SURFACEFORMAT_A32X32_FLOAT                   0x090 
-#define BRW_SURFACEFORMAT_L32X32_FLOAT                   0x091 
-#define BRW_SURFACEFORMAT_I32X32_FLOAT                   0x092 
-#define BRW_SURFACEFORMAT_R16G16B16A16_SSCALED           0x093
-#define BRW_SURFACEFORMAT_R16G16B16A16_USCALED           0x094
-#define BRW_SURFACEFORMAT_R32G32_SSCALED                 0x095
-#define BRW_SURFACEFORMAT_R32G32_USCALED                 0x096
-#define BRW_SURFACEFORMAT_B8G8R8A8_UNORM                 0x0C0 
-#define BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB            0x0C1 
-#define BRW_SURFACEFORMAT_R10G10B10A2_UNORM              0x0C2 
-#define BRW_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB         0x0C3 
-#define BRW_SURFACEFORMAT_R10G10B10A2_UINT               0x0C4 
-#define BRW_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM       0x0C5 
-#define BRW_SURFACEFORMAT_R8G8B8A8_UNORM                 0x0C7 
-#define BRW_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB            0x0C8 
-#define BRW_SURFACEFORMAT_R8G8B8A8_SNORM                 0x0C9 
-#define BRW_SURFACEFORMAT_R8G8B8A8_SINT                  0x0CA 
-#define BRW_SURFACEFORMAT_R8G8B8A8_UINT                  0x0CB 
-#define BRW_SURFACEFORMAT_R16G16_UNORM                   0x0CC 
-#define BRW_SURFACEFORMAT_R16G16_SNORM                   0x0CD 
-#define BRW_SURFACEFORMAT_R16G16_SINT                    0x0CE 
-#define BRW_SURFACEFORMAT_R16G16_UINT                    0x0CF 
-#define BRW_SURFACEFORMAT_R16G16_FLOAT                   0x0D0 
-#define BRW_SURFACEFORMAT_B10G10R10A2_UNORM              0x0D1 
-#define BRW_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB         0x0D2 
-#define BRW_SURFACEFORMAT_R11G11B10_FLOAT                0x0D3 
-#define BRW_SURFACEFORMAT_R32_SINT                       0x0D6 
-#define BRW_SURFACEFORMAT_R32_UINT                       0x0D7 
-#define BRW_SURFACEFORMAT_R32_FLOAT                      0x0D8 
-#define BRW_SURFACEFORMAT_R24_UNORM_X8_TYPELESS          0x0D9 
-#define BRW_SURFACEFORMAT_X24_TYPELESS_G8_UINT           0x0DA 
-#define BRW_SURFACEFORMAT_L16A16_UNORM                   0x0DF 
-#define BRW_SURFACEFORMAT_I24X8_UNORM                    0x0E0 
-#define BRW_SURFACEFORMAT_L24X8_UNORM                    0x0E1 
-#define BRW_SURFACEFORMAT_A24X8_UNORM                    0x0E2 
-#define BRW_SURFACEFORMAT_I32_FLOAT                      0x0E3 
-#define BRW_SURFACEFORMAT_L32_FLOAT                      0x0E4 
-#define BRW_SURFACEFORMAT_A32_FLOAT                      0x0E5 
-#define BRW_SURFACEFORMAT_B8G8R8X8_UNORM                 0x0E9 
-#define BRW_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB            0x0EA 
-#define BRW_SURFACEFORMAT_R8G8B8X8_UNORM                 0x0EB 
-#define BRW_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB            0x0EC 
-#define BRW_SURFACEFORMAT_R9G9B9E5_SHAREDEXP             0x0ED 
-#define BRW_SURFACEFORMAT_B10G10R10X2_UNORM              0x0EE 
-#define BRW_SURFACEFORMAT_L16A16_FLOAT                   0x0F0 
-#define BRW_SURFACEFORMAT_R32_UNORM                      0x0F1 
-#define BRW_SURFACEFORMAT_R32_SNORM                      0x0F2 
-#define BRW_SURFACEFORMAT_R10G10B10X2_USCALED            0x0F3
-#define BRW_SURFACEFORMAT_R8G8B8A8_SSCALED               0x0F4
-#define BRW_SURFACEFORMAT_R8G8B8A8_USCALED               0x0F5
-#define BRW_SURFACEFORMAT_R16G16_SSCALED                 0x0F6
-#define BRW_SURFACEFORMAT_R16G16_USCALED                 0x0F7
-#define BRW_SURFACEFORMAT_R32_SSCALED                    0x0F8
-#define BRW_SURFACEFORMAT_R32_USCALED                    0x0F9
-#define BRW_SURFACEFORMAT_B5G6R5_UNORM                   0x100 
-#define BRW_SURFACEFORMAT_B5G6R5_UNORM_SRGB              0x101 
-#define BRW_SURFACEFORMAT_B5G5R5A1_UNORM                 0x102 
-#define BRW_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB            0x103 
-#define BRW_SURFACEFORMAT_B4G4R4A4_UNORM                 0x104 
-#define BRW_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB            0x105 
-#define BRW_SURFACEFORMAT_R8G8_UNORM                     0x106 
-#define BRW_SURFACEFORMAT_R8G8_SNORM                     0x107 
-#define BRW_SURFACEFORMAT_R8G8_SINT                      0x108 
-#define BRW_SURFACEFORMAT_R8G8_UINT                      0x109 
-#define BRW_SURFACEFORMAT_R16_UNORM                      0x10A 
-#define BRW_SURFACEFORMAT_R16_SNORM                      0x10B 
-#define BRW_SURFACEFORMAT_R16_SINT                       0x10C 
-#define BRW_SURFACEFORMAT_R16_UINT                       0x10D 
-#define BRW_SURFACEFORMAT_R16_FLOAT                      0x10E 
-#define BRW_SURFACEFORMAT_I16_UNORM                      0x111 
-#define BRW_SURFACEFORMAT_L16_UNORM                      0x112 
-#define BRW_SURFACEFORMAT_A16_UNORM                      0x113 
-#define BRW_SURFACEFORMAT_L8A8_UNORM                     0x114 
-#define BRW_SURFACEFORMAT_I16_FLOAT                      0x115
-#define BRW_SURFACEFORMAT_L16_FLOAT                      0x116
-#define BRW_SURFACEFORMAT_A16_FLOAT                      0x117
-#define BRW_SURFACEFORMAT_L8A8_UNORM_SRGB                0x118
-#define BRW_SURFACEFORMAT_R5G5_SNORM_B6_UNORM            0x119
-#define BRW_SURFACEFORMAT_B5G5R5X1_UNORM                 0x11A
-#define BRW_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB            0x11B
-#define BRW_SURFACEFORMAT_R8G8_SSCALED                   0x11C
-#define BRW_SURFACEFORMAT_R8G8_USCALED                   0x11D
-#define BRW_SURFACEFORMAT_R16_SSCALED                    0x11E
-#define BRW_SURFACEFORMAT_R16_USCALED                    0x11F
-#define BRW_SURFACEFORMAT_R8_UNORM                       0x140 
-#define BRW_SURFACEFORMAT_R8_SNORM                       0x141 
-#define BRW_SURFACEFORMAT_R8_SINT                        0x142 
-#define BRW_SURFACEFORMAT_R8_UINT                        0x143 
-#define BRW_SURFACEFORMAT_A8_UNORM                       0x144 
-#define BRW_SURFACEFORMAT_I8_UNORM                       0x145 
-#define BRW_SURFACEFORMAT_L8_UNORM                       0x146 
-#define BRW_SURFACEFORMAT_P4A4_UNORM                     0x147 
-#define BRW_SURFACEFORMAT_A4P4_UNORM                     0x148
-#define BRW_SURFACEFORMAT_R8_SSCALED                     0x149
-#define BRW_SURFACEFORMAT_R8_USCALED                     0x14A
-#define BRW_SURFACEFORMAT_L8_UNORM_SRGB                  0x14C
-#define BRW_SURFACEFORMAT_R1_UINT                        0x181 
-#define BRW_SURFACEFORMAT_YCRCB_NORMAL                   0x182 
-#define BRW_SURFACEFORMAT_YCRCB_SWAPUVY                  0x183 
-#define BRW_SURFACEFORMAT_BC1_UNORM                      0x186 
-#define BRW_SURFACEFORMAT_BC2_UNORM                      0x187 
-#define BRW_SURFACEFORMAT_BC3_UNORM                      0x188 
-#define BRW_SURFACEFORMAT_BC4_UNORM                      0x189 
-#define BRW_SURFACEFORMAT_BC5_UNORM                      0x18A 
-#define BRW_SURFACEFORMAT_BC1_UNORM_SRGB                 0x18B 
-#define BRW_SURFACEFORMAT_BC2_UNORM_SRGB                 0x18C 
-#define BRW_SURFACEFORMAT_BC3_UNORM_SRGB                 0x18D 
-#define BRW_SURFACEFORMAT_MONO8                          0x18E 
-#define BRW_SURFACEFORMAT_YCRCB_SWAPUV                   0x18F 
-#define BRW_SURFACEFORMAT_YCRCB_SWAPY                    0x190 
-#define BRW_SURFACEFORMAT_DXT1_RGB                       0x191 
-#define BRW_SURFACEFORMAT_FXT1                           0x192 
-#define BRW_SURFACEFORMAT_R8G8B8_UNORM                   0x193 
-#define BRW_SURFACEFORMAT_R8G8B8_SNORM                   0x194 
-#define BRW_SURFACEFORMAT_R8G8B8_SSCALED                 0x195 
-#define BRW_SURFACEFORMAT_R8G8B8_USCALED                 0x196 
-#define BRW_SURFACEFORMAT_R64G64B64A64_FLOAT             0x197 
-#define BRW_SURFACEFORMAT_R64G64B64_FLOAT                0x198 
-#define BRW_SURFACEFORMAT_BC4_SNORM                      0x199 
-#define BRW_SURFACEFORMAT_BC5_SNORM                      0x19A 
-#define BRW_SURFACEFORMAT_R16G16B16_UNORM                0x19C 
-#define BRW_SURFACEFORMAT_R16G16B16_SNORM                0x19D 
-#define BRW_SURFACEFORMAT_R16G16B16_SSCALED              0x19E 
-#define BRW_SURFACEFORMAT_R16G16B16_USCALED              0x19F
-#define BRW_SURFACEFORMAT_INVALID                        0xFFF
-
-#define BRW_SURFACERETURNFORMAT_FLOAT32  0
-#define BRW_SURFACERETURNFORMAT_S1       1
-
-#define BRW_SURFACE_1D      0
-#define BRW_SURFACE_2D      1
-#define BRW_SURFACE_3D      2
-#define BRW_SURFACE_CUBE    3
-#define BRW_SURFACE_BUFFER  4
-#define BRW_SURFACE_NULL    7
-
-#define BRW_TEXCOORDMODE_WRAP            0
-#define BRW_TEXCOORDMODE_MIRROR          1
-#define BRW_TEXCOORDMODE_CLAMP           2
-#define BRW_TEXCOORDMODE_CUBE            3
-#define BRW_TEXCOORDMODE_CLAMP_BORDER    4
-#define BRW_TEXCOORDMODE_MIRROR_ONCE     5
-
-#define BRW_THREAD_PRIORITY_NORMAL   0
-#define BRW_THREAD_PRIORITY_HIGH     1
-
-#define BRW_TILEWALK_XMAJOR                 0
-#define BRW_TILEWALK_YMAJOR                 1
-
-#define BRW_VERTEX_SUBPIXEL_PRECISION_8BITS  0
-#define BRW_VERTEX_SUBPIXEL_PRECISION_4BITS  1
-
-/* Execution Unit (EU) defines
- */
-
-#define BRW_ALIGN_1   0
-#define BRW_ALIGN_16  1
-
-#define BRW_ADDRESS_DIRECT                        0
-#define BRW_ADDRESS_REGISTER_INDIRECT_REGISTER    1
-
-#define BRW_CHANNEL_X     0
-#define BRW_CHANNEL_Y     1
-#define BRW_CHANNEL_Z     2
-#define BRW_CHANNEL_W     3
-
-#define BRW_COMPRESSION_NONE          0
-#define BRW_COMPRESSION_2NDHALF       1
-#define BRW_COMPRESSION_COMPRESSED    2
-
-#define GEN6_COMPRESSION_1Q            0
-#define GEN6_COMPRESSION_2Q            1
-#define GEN6_COMPRESSION_3Q            2
-#define GEN6_COMPRESSION_4Q            3
-#define GEN6_COMPRESSION_1H            0
-#define GEN6_COMPRESSION_2H            2
-
-#define BRW_CONDITIONAL_NONE  0
-#define BRW_CONDITIONAL_Z     1
-#define BRW_CONDITIONAL_NZ    2
-#define BRW_CONDITIONAL_EQ    1        /* Z */
-#define BRW_CONDITIONAL_NEQ   2        /* NZ */
-#define BRW_CONDITIONAL_G     3
-#define BRW_CONDITIONAL_GE    4
-#define BRW_CONDITIONAL_L     5
-#define BRW_CONDITIONAL_LE    6
-#define BRW_CONDITIONAL_R     7
-#define BRW_CONDITIONAL_O     8
-#define BRW_CONDITIONAL_U     9
-
-#define BRW_DEBUG_NONE        0
-#define BRW_DEBUG_BREAKPOINT  1
-
-#define BRW_DEPENDENCY_NORMAL         0
-#define BRW_DEPENDENCY_NOTCLEARED     1
-#define BRW_DEPENDENCY_NOTCHECKED     2
-#define BRW_DEPENDENCY_DISABLE        3
-
-#define BRW_EXECUTE_1     0
-#define BRW_EXECUTE_2     1
-#define BRW_EXECUTE_4     2
-#define BRW_EXECUTE_8     3
-#define BRW_EXECUTE_16    4
-#define BRW_EXECUTE_32    5
-
-#define BRW_HORIZONTAL_STRIDE_0   0
-#define BRW_HORIZONTAL_STRIDE_1   1
-#define BRW_HORIZONTAL_STRIDE_2   2
-#define BRW_HORIZONTAL_STRIDE_4   3
-
-#define BRW_INSTRUCTION_NORMAL    0
-#define BRW_INSTRUCTION_SATURATE  1
-
-#define BRW_MASK_ENABLE   0
-#define BRW_MASK_DISABLE  1
-
-/** @{
- *
- * Gen6 has replaced "mask enable/disable" with WECtrl, which is
- * effectively the same but much simpler to think about.  Now, there
- * are two contributors ANDed together to whether channels are
- * executed: The predication on the instruction, and the channel write
- * enable.
- */
-/**
- * This is the default value.  It means that a channel's write enable is set
- * if the per-channel IP is pointing at this instruction.
- */
-#define BRW_WE_NORMAL          0
-/**
- * This is used like BRW_MASK_DISABLE, and causes all channels to have
- * their write enable set.  Note that predication still contributes to
- * whether the channel actually gets written.
- */
-#define BRW_WE_ALL             1
-/** @} */
-
-#define BRW_OPCODE_MOV        1
-#define BRW_OPCODE_SEL        2
-#define BRW_OPCODE_NOT        4
-#define BRW_OPCODE_AND        5
-#define BRW_OPCODE_OR         6
-#define BRW_OPCODE_XOR        7
-#define BRW_OPCODE_SHR        8
-#define BRW_OPCODE_SHL        9
-#define BRW_OPCODE_RSR        10
-#define BRW_OPCODE_RSL        11
-#define BRW_OPCODE_ASR        12
-#define BRW_OPCODE_CMP        16
-#define BRW_OPCODE_CMPN       17
-#define BRW_OPCODE_JMPI       32
-#define BRW_OPCODE_IF         34
-#define BRW_OPCODE_IFF        35
-#define BRW_OPCODE_ELSE       36
-#define BRW_OPCODE_ENDIF      37
-#define BRW_OPCODE_DO         38
-#define BRW_OPCODE_WHILE      39
-#define BRW_OPCODE_BREAK      40
-#define BRW_OPCODE_CONTINUE   41
-#define BRW_OPCODE_HALT       42
-#define BRW_OPCODE_MSAVE      44
-#define BRW_OPCODE_MRESTORE   45
-#define BRW_OPCODE_PUSH       46
-#define BRW_OPCODE_POP        47
-#define BRW_OPCODE_WAIT       48
-#define BRW_OPCODE_SEND       49
-#define BRW_OPCODE_SENDC      50
-#define BRW_OPCODE_MATH       56
-#define BRW_OPCODE_ADD        64
-#define BRW_OPCODE_MUL        65
-#define BRW_OPCODE_AVG        66
-#define BRW_OPCODE_FRC        67
-#define BRW_OPCODE_RNDU       68
-#define BRW_OPCODE_RNDD       69
-#define BRW_OPCODE_RNDE       70
-#define BRW_OPCODE_RNDZ       71
-#define BRW_OPCODE_MAC        72
-#define BRW_OPCODE_MACH       73
-#define BRW_OPCODE_LZD        74
-#define BRW_OPCODE_SAD2       80
-#define BRW_OPCODE_SADA2      81
-#define BRW_OPCODE_DP4        84
-#define BRW_OPCODE_DPH        85
-#define BRW_OPCODE_DP3        86
-#define BRW_OPCODE_DP2        87
-#define BRW_OPCODE_DPA2       88
-#define BRW_OPCODE_LINE       89
-#define BRW_OPCODE_PLN        90
-#define BRW_OPCODE_NOP        126
-
-#define BRW_PREDICATE_NONE             0
-#define BRW_PREDICATE_NORMAL           1
-#define BRW_PREDICATE_ALIGN1_ANYV             2
-#define BRW_PREDICATE_ALIGN1_ALLV             3
-#define BRW_PREDICATE_ALIGN1_ANY2H            4
-#define BRW_PREDICATE_ALIGN1_ALL2H            5
-#define BRW_PREDICATE_ALIGN1_ANY4H            6
-#define BRW_PREDICATE_ALIGN1_ALL4H            7
-#define BRW_PREDICATE_ALIGN1_ANY8H            8
-#define BRW_PREDICATE_ALIGN1_ALL8H            9
-#define BRW_PREDICATE_ALIGN1_ANY16H           10
-#define BRW_PREDICATE_ALIGN1_ALL16H           11
-#define BRW_PREDICATE_ALIGN16_REPLICATE_X     2
-#define BRW_PREDICATE_ALIGN16_REPLICATE_Y     3
-#define BRW_PREDICATE_ALIGN16_REPLICATE_Z     4
-#define BRW_PREDICATE_ALIGN16_REPLICATE_W     5
-#define BRW_PREDICATE_ALIGN16_ANY4H           6
-#define BRW_PREDICATE_ALIGN16_ALL4H           7
-
-#define BRW_ARCHITECTURE_REGISTER_FILE    0
-#define BRW_GENERAL_REGISTER_FILE         1
-#define BRW_MESSAGE_REGISTER_FILE         2
-#define BRW_IMMEDIATE_VALUE               3
-
-#define BRW_REGISTER_TYPE_UD  0
-#define BRW_REGISTER_TYPE_D   1
-#define BRW_REGISTER_TYPE_UW  2
-#define BRW_REGISTER_TYPE_W   3
-#define BRW_REGISTER_TYPE_UB  4
-#define BRW_REGISTER_TYPE_B   5
-#define BRW_REGISTER_TYPE_VF  5        /* packed float vector, immediates only? */
-#define BRW_REGISTER_TYPE_HF  6
-#define BRW_REGISTER_TYPE_V   6        /* packed int vector, immediates only, uword dest only */
-#define BRW_REGISTER_TYPE_F   7
-
-#define BRW_ARF_NULL                  0x00
-#define BRW_ARF_ADDRESS               0x10
-#define BRW_ARF_ACCUMULATOR           0x20   
-#define BRW_ARF_FLAG                  0x30
-#define BRW_ARF_MASK                  0x40
-#define BRW_ARF_MASK_STACK            0x50
-#define BRW_ARF_MASK_STACK_DEPTH      0x60
-#define BRW_ARF_STATE                 0x70
-#define BRW_ARF_CONTROL               0x80
-#define BRW_ARF_NOTIFICATION_COUNT    0x90
-#define BRW_ARF_IP                    0xA0
-
-#define BRW_MRF_COMPR4                 (1 << 7)
-
-#define BRW_AMASK   0
-#define BRW_IMASK   1
-#define BRW_LMASK   2
-#define BRW_CMASK   3
-
-
-
-#define BRW_THREAD_NORMAL     0
-#define BRW_THREAD_ATOMIC     1
-#define BRW_THREAD_SWITCH     2
-
-#define BRW_VERTICAL_STRIDE_0                 0
-#define BRW_VERTICAL_STRIDE_1                 1
-#define BRW_VERTICAL_STRIDE_2                 2
-#define BRW_VERTICAL_STRIDE_4                 3
-#define BRW_VERTICAL_STRIDE_8                 4
-#define BRW_VERTICAL_STRIDE_16                5
-#define BRW_VERTICAL_STRIDE_32                6
-#define BRW_VERTICAL_STRIDE_64                7
-#define BRW_VERTICAL_STRIDE_128               8
-#define BRW_VERTICAL_STRIDE_256               9
-#define BRW_VERTICAL_STRIDE_ONE_DIMENSIONAL   0xF
-
-#define BRW_WIDTH_1       0
-#define BRW_WIDTH_2       1
-#define BRW_WIDTH_4       2
-#define BRW_WIDTH_8       3
-#define BRW_WIDTH_16      4
-
-#define BRW_STATELESS_BUFFER_BOUNDARY_1K      0
-#define BRW_STATELESS_BUFFER_BOUNDARY_2K      1
-#define BRW_STATELESS_BUFFER_BOUNDARY_4K      2
-#define BRW_STATELESS_BUFFER_BOUNDARY_8K      3
-#define BRW_STATELESS_BUFFER_BOUNDARY_16K     4
-#define BRW_STATELESS_BUFFER_BOUNDARY_32K     5
-#define BRW_STATELESS_BUFFER_BOUNDARY_64K     6
-#define BRW_STATELESS_BUFFER_BOUNDARY_128K    7
-#define BRW_STATELESS_BUFFER_BOUNDARY_256K    8
-#define BRW_STATELESS_BUFFER_BOUNDARY_512K    9
-#define BRW_STATELESS_BUFFER_BOUNDARY_1M      10
-#define BRW_STATELESS_BUFFER_BOUNDARY_2M      11
-
-#define BRW_POLYGON_FACING_FRONT      0
-#define BRW_POLYGON_FACING_BACK       1
-
-#define BRW_MESSAGE_TARGET_NULL               0
-#define BRW_MESSAGE_TARGET_MATH               1 /* reserved on GEN6 */
-#define BRW_MESSAGE_TARGET_SAMPLER            2
-#define BRW_MESSAGE_TARGET_GATEWAY            3
-#define BRW_MESSAGE_TARGET_DATAPORT_READ      4 /* sampler cache on GEN6 */
-#define BRW_MESSAGE_TARGET_DATAPORT_WRITE     5 /* render cache on Gen6 */
-#define BRW_MESSAGE_TARGET_URB                6
-#define BRW_MESSAGE_TARGET_THREAD_SPAWNER     7
-#define BRW_MESSAGE_TARGET_CONST_CACHE       9 /* GEN6 */
-
-#define BRW_SAMPLER_RETURN_FORMAT_FLOAT32     0
-#define BRW_SAMPLER_RETURN_FORMAT_UINT32      2
-#define BRW_SAMPLER_RETURN_FORMAT_SINT32      3
-
-#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE              0
-#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE             0
-#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS        0
-#define BRW_SAMPLER_MESSAGE_SIMD8_KILLPIX             1
-#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD        1
-#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD         1
-#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_GRADIENTS  2
-#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_GRADIENTS    2
-#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_COMPARE    0
-#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE     2
-#define BRW_SAMPLER_MESSAGE_SIMD4X2_RESINFO           2
-#define BRW_SAMPLER_MESSAGE_SIMD8_RESINFO             2
-#define BRW_SAMPLER_MESSAGE_SIMD16_RESINFO            2
-#define BRW_SAMPLER_MESSAGE_SIMD4X2_LD                3
-#define BRW_SAMPLER_MESSAGE_SIMD8_LD                  3
-#define BRW_SAMPLER_MESSAGE_SIMD16_LD                 3
-
-#define BRW_SAMPLER_MESSAGE_SAMPLE_GEN5            0
-#define BRW_SAMPLER_MESSAGE_SAMPLE_BIAS_GEN5       1
-#define BRW_SAMPLER_MESSAGE_SAMPLE_LOD_GEN5        2
-#define BRW_SAMPLER_MESSAGE_SAMPLE_COMPARE_GEN5    3
-#define BRW_SAMPLER_MESSAGE_SAMPLE_DERIVS_GEN5     4
-#define BRW_SAMPLER_MESSAGE_SAMPLE_BIAS_COMPARE_GEN5 5
-#define BRW_SAMPLER_MESSAGE_SAMPLE_LOD_COMPARE_GEN5 6
-
-/* for GEN5 only */
-#define BRW_SAMPLER_SIMD_MODE_SIMD4X2                   0
-#define BRW_SAMPLER_SIMD_MODE_SIMD8                     1
-#define BRW_SAMPLER_SIMD_MODE_SIMD16                    2
-#define BRW_SAMPLER_SIMD_MODE_SIMD32_64                 3
-
-#define BRW_DATAPORT_OWORD_BLOCK_1_OWORDLOW   0
-#define BRW_DATAPORT_OWORD_BLOCK_1_OWORDHIGH  1
-#define BRW_DATAPORT_OWORD_BLOCK_2_OWORDS     2
-#define BRW_DATAPORT_OWORD_BLOCK_4_OWORDS     3
-#define BRW_DATAPORT_OWORD_BLOCK_8_OWORDS     4
-
-#define BRW_DATAPORT_OWORD_DUAL_BLOCK_1OWORD     0
-#define BRW_DATAPORT_OWORD_DUAL_BLOCK_4OWORDS    2
-
-#define BRW_DATAPORT_DWORD_SCATTERED_BLOCK_8DWORDS   2
-#define BRW_DATAPORT_DWORD_SCATTERED_BLOCK_16DWORDS  3
-
-/* This one stays the same across generations. */
-#define BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ          0
-/* GEN4 */
-#define BRW_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ     1
-#define BRW_DATAPORT_READ_MESSAGE_MEDIA_BLOCK_READ          2
-#define BRW_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ      3
-/* G45, GEN5 */
-#define G45_DATAPORT_READ_MESSAGE_RENDER_UNORM_READ        1
-#define G45_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ     2
-#define G45_DATAPORT_READ_MESSAGE_AVC_LOOP_FILTER_READ     3
-#define G45_DATAPORT_READ_MESSAGE_MEDIA_BLOCK_READ          4
-#define G45_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ      6
-/* GEN6 */
-#define GEN6_DATAPORT_READ_MESSAGE_RENDER_UNORM_READ       1
-#define GEN6_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ     2
-#define GEN6_DATAPORT_READ_MESSAGE_MEDIA_BLOCK_READ          4
-#define GEN6_DATAPORT_READ_MESSAGE_OWORD_UNALIGN_BLOCK_READ  5
-#define GEN6_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ      6
-
-#define BRW_DATAPORT_READ_TARGET_DATA_CACHE      0
-#define BRW_DATAPORT_READ_TARGET_RENDER_CACHE    1
-#define BRW_DATAPORT_READ_TARGET_SAMPLER_CACHE   2
-
-#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE                0
-#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE_REPLICATED     1
-#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN01         2
-#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN23         3
-#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD8_SINGLE_SOURCE_SUBSPAN01       4
-
-#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE                0
-#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE           1
-#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_BLOCK_WRITE                2
-#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE            3
-#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE              4
-#define BRW_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE     5
-#define BRW_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE               7
-
-/* GEN6 */
-#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_ATOMIC_WRITE_GEN6             7
-#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE_GEN6              8
-#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE_GEN6         9
-#define BRW_DATAPORT_WRITE_MESSAGE_MEDIA_BLOCK_WRITE_GEN6              10
-#define BRW_DATAPORT_WRITE_MESSAGE_DWORLD_SCATTERED_WRITE_GEN6         11
-#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE_GEN6            12
-#define BRW_DATAPORT_WRITE_MESSAGE_STREAMED_VB_WRITE_GEN6              13
-#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_UNORM_WRITE_GEN6      14
-
-#define BRW_MATH_FUNCTION_INV                              1
-#define BRW_MATH_FUNCTION_LOG                              2
-#define BRW_MATH_FUNCTION_EXP                              3
-#define BRW_MATH_FUNCTION_SQRT                             4
-#define BRW_MATH_FUNCTION_RSQ                              5
-#define BRW_MATH_FUNCTION_SIN                              6 /* was 7 */
-#define BRW_MATH_FUNCTION_COS                              7 /* was 8 */
-#define BRW_MATH_FUNCTION_SINCOS                           8 /* was 6 */
-#define BRW_MATH_FUNCTION_TAN                              9 /* gen4 */
-#define BRW_MATH_FUNCTION_FDIV                             9 /* gen6+ */
-#define BRW_MATH_FUNCTION_POW                              10
-#define BRW_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER   11
-#define BRW_MATH_FUNCTION_INT_DIV_QUOTIENT                 12
-#define BRW_MATH_FUNCTION_INT_DIV_REMAINDER                13
-
-#define BRW_MATH_INTEGER_UNSIGNED     0
-#define BRW_MATH_INTEGER_SIGNED       1
-
-#define BRW_MATH_PRECISION_FULL        0
-#define BRW_MATH_PRECISION_PARTIAL     1
-
-#define BRW_MATH_SATURATE_NONE         0
-#define BRW_MATH_SATURATE_SATURATE     1
-
-#define BRW_MATH_DATA_VECTOR  0
-#define BRW_MATH_DATA_SCALAR  1
-
-#define BRW_URB_OPCODE_WRITE  0
-
-#define BRW_URB_SWIZZLE_NONE          0
-#define BRW_URB_SWIZZLE_INTERLEAVE    1
-#define BRW_URB_SWIZZLE_TRANSPOSE     2
-
-#define BRW_SCRATCH_SPACE_SIZE_1K     0
-#define BRW_SCRATCH_SPACE_SIZE_2K     1
-#define BRW_SCRATCH_SPACE_SIZE_4K     2
-#define BRW_SCRATCH_SPACE_SIZE_8K     3
-#define BRW_SCRATCH_SPACE_SIZE_16K    4
-#define BRW_SCRATCH_SPACE_SIZE_32K    5
-#define BRW_SCRATCH_SPACE_SIZE_64K    6
-#define BRW_SCRATCH_SPACE_SIZE_128K   7
-#define BRW_SCRATCH_SPACE_SIZE_256K   8
-#define BRW_SCRATCH_SPACE_SIZE_512K   9
-#define BRW_SCRATCH_SPACE_SIZE_1M     10
-#define BRW_SCRATCH_SPACE_SIZE_2M     11
-
-
-
-
-#define CMD_URB_FENCE                 0x6000
-#define CMD_CS_URB_STATE              0x6001
-#define CMD_CONST_BUFFER              0x6002
-
-#define CMD_STATE_BASE_ADDRESS        0x6101
-#define CMD_STATE_INSN_POINTER        0x6102
-#define CMD_PIPELINE_SELECT_965       0x6104
-#define CMD_PIPELINE_SELECT_GM45      0x6904
-
-#define CMD_PIPELINED_STATE_POINTERS  0x7800
-#define CMD_BINDING_TABLE_PTRS        0x7801
-# define GEN6_BINDING_TABLE_MODIFY_VS  (1 << 8)
-# define GEN6_BINDING_TABLE_MODIFY_GS  (1 << 9)
-# define GEN6_BINDING_TABLE_MODIFY_PS  (1 << 12)
-
-#define CMD_3D_SAMPLER_STATE_POINTERS                  0x7802 /* SNB+ */
-# define PS_SAMPLER_STATE_CHANGE                               (1 << 12)
-# define GS_SAMPLER_STATE_CHANGE                               (1 << 9)
-# define VS_SAMPLER_STATE_CHANGE                               (1 << 8)
-/* DW1: VS */
-/* DW2: GS */
-/* DW3: PS */
-
-#define CMD_VERTEX_BUFFER             0x7808
-# define BRW_VB0_INDEX_SHIFT           27
-# define GEN6_VB0_INDEX_SHIFT          26
-# define BRW_VB0_ACCESS_VERTEXDATA     (0 << 26)
-# define BRW_VB0_ACCESS_INSTANCEDATA   (1 << 26)
-# define GEN6_VB0_ACCESS_VERTEXDATA    (0 << 20)
-# define GEN6_VB0_ACCESS_INSTANCEDATA  (1 << 20)
-# define BRW_VB0_PITCH_SHIFT           0
-
-#define CMD_VERTEX_ELEMENT            0x7809
-# define BRW_VE0_INDEX_SHIFT           27
-# define GEN6_VE0_INDEX_SHIFT          26
-# define BRW_VE0_FORMAT_SHIFT          16
-# define BRW_VE0_VALID                 (1 << 26)
-# define GEN6_VE0_VALID                        (1 << 25)
-# define BRW_VE0_SRC_OFFSET_SHIFT      0
-# define BRW_VE1_COMPONENT_NOSTORE     0
-# define BRW_VE1_COMPONENT_STORE_SRC   1
-# define BRW_VE1_COMPONENT_STORE_0     2
-# define BRW_VE1_COMPONENT_STORE_1_FLT 3
-# define BRW_VE1_COMPONENT_STORE_1_INT 4
-# define BRW_VE1_COMPONENT_STORE_VID   5
-# define BRW_VE1_COMPONENT_STORE_IID   6
-# define BRW_VE1_COMPONENT_STORE_PID   7
-# define BRW_VE1_COMPONENT_0_SHIFT     28
-# define BRW_VE1_COMPONENT_1_SHIFT     24
-# define BRW_VE1_COMPONENT_2_SHIFT     20
-# define BRW_VE1_COMPONENT_3_SHIFT     16
-# define BRW_VE1_DST_OFFSET_SHIFT      0
-
-#define CMD_INDEX_BUFFER              0x780a
-#define CMD_VF_STATISTICS_965         0x780b
-#define CMD_VF_STATISTICS_GM45        0x680b
-#define CMD_3D_CC_STATE_POINTERS      0x780e /* GEN6+ */
-
-#define CMD_URB                                        0x7805 /* GEN6+ */
-# define GEN6_URB_VS_SIZE_SHIFT                                16
-# define GEN6_URB_VS_ENTRIES_SHIFT                     0
-# define GEN6_URB_GS_ENTRIES_SHIFT                     8
-# define GEN6_URB_GS_SIZE_SHIFT                                0
-
-#define CMD_VIEWPORT_STATE_POINTERS                    0x780d /* GEN6+ */
-# define GEN6_CC_VIEWPORT_MODIFY                       (1 << 12)
-# define GEN6_SF_VIEWPORT_MODIFY                       (1 << 11)
-# define GEN6_CLIP_VIEWPORT_MODIFY                     (1 << 10)
-
-#define CMD_3D_SCISSOR_STATE_POINTERS          0x780f /* GEN6+ */
-
-#define CMD_3D_VS_STATE                      0x7810 /* GEN6+ */
-/* DW2 */
-# define GEN6_VS_SPF_MODE                              (1 << 31)
-# define GEN6_VS_VECTOR_MASK_ENABLE                    (1 << 30)
-# define GEN6_VS_SAMPLER_COUNT_SHIFT                   27
-# define GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT       18
-# define GEN6_VS_FLOATING_POINT_MODE_IEEE_754          (0 << 16)
-# define GEN6_VS_FLOATING_POINT_MODE_ALT               (1 << 16)
-/* DW4 */
-# define GEN6_VS_DISPATCH_START_GRF_SHIFT              20
-# define GEN6_VS_URB_READ_LENGTH_SHIFT                 11
-# define GEN6_VS_URB_ENTRY_READ_OFFSET_SHIFT           4
-/* DW5 */
-# define GEN6_VS_MAX_THREADS_SHIFT                     25
-# define GEN6_VS_STATISTICS_ENABLE                     (1 << 10)
-# define GEN6_VS_CACHE_DISABLE                         (1 << 1)
-# define GEN6_VS_ENABLE                                        (1 << 0)
-
-#define CMD_3D_GS_STATE                      0x7811 /* GEN6+ */
-/* DW2 */
-# define GEN6_GS_SPF_MODE                              (1 << 31)
-# define GEN6_GS_VECTOR_MASK_ENABLE                    (1 << 30)
-# define GEN6_GS_SAMPLER_COUNT_SHIFT                   27
-# define GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT       18
-/* DW4 */
-# define GEN6_GS_URB_READ_LENGTH_SHIFT                 11
-# define GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT           4
-# define GEN6_GS_DISPATCH_START_GRF_SHIFT              0
-/* DW5 */
-# define GEN6_GS_MAX_THREADS_SHIFT                     25
-# define GEN6_GS_STATISTICS_ENABLE                     (1 << 10)
-# define GEN6_GS_SO_STATISTICS_ENABLE                  (1 << 9)
-# define GEN6_GS_RENDERING_ENABLE                      (1 << 8)
-/* DW6 */
-# define GEN6_GS_ENABLE                                        (1 << 15)
-
-#define CMD_3D_CLIP_STATE                    0x7812 /* GEN6+ */
-/* DW1 */
-# define GEN6_CLIP_STATISTICS_ENABLE                   (1 << 10)
-/**
- * Just does cheap culling based on the clip distance.  Bits must be
- * disjoint with USER_CLIP_CLIP_DISTANCE bits.
- */
-# define GEN6_USER_CLIP_CULL_DISTANCES_SHIFT           0
-/* DW2 */
-# define GEN6_CLIP_ENABLE                              (1 << 31)
-# define GEN6_CLIP_API_OGL                             (0 << 30)
-# define GEN6_CLIP_API_D3D                             (1 << 30)
-# define GEN6_CLIP_XY_TEST                             (1 << 28)
-# define GEN6_CLIP_Z_TEST                              (1 << 27)
-# define GEN6_CLIP_GB_TEST                             (1 << 26)
-/** 8-bit field of which user clip distances to clip aganist. */
-# define GEN6_USER_CLIP_CLIP_DISTANCES_SHIFT           16
-# define GEN6_CLIP_MODE_NORMAL                         (0 << 13)
-# define GEN6_CLIP_MODE_REJECT_ALL                     (3 << 13)
-# define GEN6_CLIP_MODE_ACCEPT_ALL                     (4 << 13)
-# define GEN6_CLIP_PERSPECTIVE_DIVIDE_DISABLE          (1 << 9)
-# define GEN6_CLIP_BARYCENTRIC_ENABLE                  (1 << 8)
-# define GEN6_CLIP_TRI_PROVOKE_SHIFT                   4
-# define GEN6_CLIP_LINE_PROVOKE_SHIFT                  2
-# define GEN6_CLIP_TRIFAN_PROVOKE_SHIFT                        0
-/* DW3 */
-# define GEN6_CLIP_MIN_POINT_WIDTH_SHIFT               17
-# define GEN6_CLIP_MAX_POINT_WIDTH_SHIFT               6
-# define GEN6_CLIP_FORCE_ZERO_RTAINDEX                 (1 << 5)
-
-#define CMD_3D_SF_STATE                                0x7813 /* GEN6+ */
-/* DW1 */
-# define GEN6_SF_NUM_OUTPUTS_SHIFT                     22
-# define GEN6_SF_SWIZZLE_ENABLE                                (1 << 21)
-# define GEN6_SF_POINT_SPRITE_LOWERLEFT                        (1 << 20)
-# define GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT           11
-# define GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT           4
-/* DW2 */
-# define GEN6_SF_LEGACY_GLOBAL_DEPTH_BIAS              (1 << 11)
-# define GEN6_SF_STATISTICS_ENABLE                     (1 << 10)
-# define GEN6_SF_GLOBAL_DEPTH_OFFSET_SOLID             (1 << 9)
-# define GEN6_SF_GLOBAL_DEPTH_OFFSET_WIREFRAME         (1 << 8)
-# define GEN6_SF_GLOBAL_DEPTH_OFFSET_POINT             (1 << 7)
-# define GEN6_SF_FRONT_SOLID                           (0 << 5)
-# define GEN6_SF_FRONT_WIREFRAME                       (1 << 5)
-# define GEN6_SF_FRONT_POINT                           (2 << 5)
-# define GEN6_SF_BACK_SOLID                            (0 << 3)
-# define GEN6_SF_BACK_WIREFRAME                                (1 << 3)
-# define GEN6_SF_BACK_POINT                            (2 << 3)
-# define GEN6_SF_VIEWPORT_TRANSFORM_ENABLE             (1 << 1)
-# define GEN6_SF_WINDING_CCW                           (1 << 0)
-/* DW3 */
-# define GEN6_SF_LINE_AA_ENABLE                                (1 << 31)
-# define GEN6_SF_CULL_BOTH                             (0 << 29)
-# define GEN6_SF_CULL_NONE                             (1 << 29)
-# define GEN6_SF_CULL_FRONT                            (2 << 29)
-# define GEN6_SF_CULL_BACK                             (3 << 29)
-# define GEN6_SF_LINE_WIDTH_SHIFT                      18 /* U3.7 */
-# define GEN6_SF_LINE_END_CAP_WIDTH_0_5                        (0 << 16)
-# define GEN6_SF_LINE_END_CAP_WIDTH_1_0                        (1 << 16)
-# define GEN6_SF_LINE_END_CAP_WIDTH_2_0                        (2 << 16)
-# define GEN6_SF_LINE_END_CAP_WIDTH_4_0                        (3 << 16)
-# define GEN6_SF_SCISSOR_ENABLE                                (1 << 11)
-# define GEN6_SF_MSRAST_OFF_PIXEL                      (0 << 8)
-# define GEN6_SF_MSRAST_OFF_PATTERN                    (1 << 8)
-# define GEN6_SF_MSRAST_ON_PIXEL                       (2 << 8)
-# define GEN6_SF_MSRAST_ON_PATTERN                     (3 << 8)
-/* DW4 */
-# define GEN6_SF_TRI_PROVOKE_SHIFT                     29
-# define GEN6_SF_LINE_PROVOKE_SHIFT                    27
-# define GEN6_SF_TRIFAN_PROVOKE_SHIFT                  25
-# define GEN6_SF_LINE_AA_MODE_MANHATTAN                        (0 << 14)
-# define GEN6_SF_LINE_AA_MODE_TRUE                     (1 << 14)
-# define GEN6_SF_VERTEX_SUBPIXEL_8BITS                 (0 << 12)
-# define GEN6_SF_VERTEX_SUBPIXEL_4BITS                 (1 << 12)
-# define GEN6_SF_USE_STATE_POINT_WIDTH                 (1 << 11)
-# define GEN6_SF_POINT_WIDTH_SHIFT                     0 /* U8.3 */
-/* DW5: depth offset constant */
-/* DW6: depth offset scale */
-/* DW7: depth offset clamp */
-/* DW8 */
-# define ATTRIBUTE_1_OVERRIDE_W                                (1 << 31)
-# define ATTRIBUTE_1_OVERRIDE_Z                                (1 << 30)
-# define ATTRIBUTE_1_OVERRIDE_Y                                (1 << 29)
-# define ATTRIBUTE_1_OVERRIDE_X                                (1 << 28)
-# define ATTRIBUTE_1_CONST_SOURCE_SHIFT                        25
-# define ATTRIBUTE_1_SWIZZLE_SHIFT                     22
-# define ATTRIBUTE_1_SOURCE_SHIFT                      16
-# define ATTRIBUTE_0_OVERRIDE_W                                (1 << 15)
-# define ATTRIBUTE_0_OVERRIDE_Z                                (1 << 14)
-# define ATTRIBUTE_0_OVERRIDE_Y                                (1 << 13)
-# define ATTRIBUTE_0_OVERRIDE_X                                (1 << 12)
-# define ATTRIBUTE_0_CONST_SOURCE_SHIFT                        9
-# define ATTRIBUTE_0_SWIZZLE_SHIFT                     6
-# define ATTRIBUTE_0_SOURCE_SHIFT                      0
-
-# define ATTRIBUTE_SWIZZLE_INPUTATTR                    0
-# define ATTRIBUTE_SWIZZLE_INPUTATTR_FACING             1
-# define ATTRIBUTE_SWIZZLE_INPUTATTR_W                  2
-# define ATTRIBUTE_SWIZZLE_INPUTATTR_FACING_W           3
-# define ATTRIBUTE_SWIZZLE_SHIFT                        6
-
-/* DW16: Point sprite texture coordinate enables */
-/* DW17: Constant interpolation enables */
-/* DW18: attr 0-7 wrap shortest enables */
-/* DW19: attr 8-16 wrap shortest enables */
-
-#define CMD_3D_WM_STATE                      0x7814 /* GEN6+ */
-/* DW1: kernel pointer */
-/* DW2 */
-# define GEN6_WM_SPF_MODE                              (1 << 31)
-# define GEN6_WM_VECTOR_MASK_ENABLE                    (1 << 30)
-# define GEN6_WM_SAMPLER_COUNT_SHIFT                   27
-# define GEN6_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT       18
-# define GEN6_WM_FLOATING_POINT_MODE_IEEE_754          (0 << 16)
-# define GEN6_WM_FLOATING_POINT_MODE_ALT               (1 << 16)
-/* DW3: scratch space */
-/* DW4 */
-# define GEN6_WM_STATISTICS_ENABLE                     (1 << 31)
-# define GEN6_WM_DEPTH_CLEAR                           (1 << 30)
-# define GEN6_WM_DEPTH_RESOLVE                         (1 << 28)
-# define GEN6_WM_HIERARCHICAL_DEPTH_RESOLVE            (1 << 27)
-# define GEN6_WM_DISPATCH_START_GRF_SHIFT_0            16
-# define GEN6_WM_DISPATCH_START_GRF_SHIFT_1            8
-# define GEN6_WM_DISPATCH_START_GRF_SHIFT_2            0
-/* DW5 */
-# define GEN6_WM_MAX_THREADS_SHIFT                     25
-# define GEN6_WM_KILL_ENABLE                           (1 << 22)
-# define GEN6_WM_COMPUTED_DEPTH                                (1 << 21)
-# define GEN6_WM_USES_SOURCE_DEPTH                     (1 << 20)
-# define GEN6_WM_DISPATCH_ENABLE                       (1 << 19)
-# define GEN6_WM_LINE_END_CAP_AA_WIDTH_0_5             (0 << 16)
-# define GEN6_WM_LINE_END_CAP_AA_WIDTH_1_0             (1 << 16)
-# define GEN6_WM_LINE_END_CAP_AA_WIDTH_2_0             (2 << 16)
-# define GEN6_WM_LINE_END_CAP_AA_WIDTH_4_0             (3 << 16)
-# define GEN6_WM_LINE_AA_WIDTH_0_5                     (0 << 14)
-# define GEN6_WM_LINE_AA_WIDTH_1_0                     (1 << 14)
-# define GEN6_WM_LINE_AA_WIDTH_2_0                     (2 << 14)
-# define GEN6_WM_LINE_AA_WIDTH_4_0                     (3 << 14)
-# define GEN6_WM_POLYGON_STIPPLE_ENABLE                        (1 << 13)
-# define GEN6_WM_LINE_STIPPLE_ENABLE                   (1 << 11)
-# define GEN6_WM_OMASK_TO_RENDER_TARGET                        (1 << 9)
-# define GEN6_WM_USES_SOURCE_W                         (1 << 8)
-# define GEN6_WM_DUAL_SOURCE_BLEND_ENABLE              (1 << 7)
-# define GEN6_WM_32_DISPATCH_ENABLE                    (1 << 2)
-# define GEN6_WM_16_DISPATCH_ENABLE                    (1 << 1)
-# define GEN6_WM_8_DISPATCH_ENABLE                     (1 << 0)
-/* DW6 */
-# define GEN6_WM_NUM_SF_OUTPUTS_SHIFT                  20
-# define GEN6_WM_POSOFFSET_NONE                                (0 << 18)
-# define GEN6_WM_POSOFFSET_CENTROID                    (2 << 18)
-# define GEN6_WM_POSOFFSET_SAMPLE                      (3 << 18)
-# define GEN6_WM_POSITION_ZW_PIXEL                     (0 << 16)
-# define GEN6_WM_POSITION_ZW_CENTROID                  (2 << 16)
-# define GEN6_WM_POSITION_ZW_SAMPLE                    (3 << 16)
-# define GEN6_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC     (1 << 15)
-# define GEN6_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC   (1 << 14)
-# define GEN6_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC      (1 << 13)
-# define GEN6_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC                (1 << 12)
-# define GEN6_WM_PERSPECTIVE_CENTROID_BARYCENTRIC      (1 << 11)
-# define GEN6_WM_PERSPECTIVE_PIXEL_BARYCENTRIC         (1 << 10)
-# define GEN6_WM_POINT_RASTRULE_UPPER_RIGHT            (1 << 9)
-# define GEN6_WM_MSRAST_OFF_PIXEL                      (0 << 1)
-# define GEN6_WM_MSRAST_OFF_PATTERN                    (1 << 1)
-# define GEN6_WM_MSRAST_ON_PIXEL                       (2 << 1)
-# define GEN6_WM_MSRAST_ON_PATTERN                     (3 << 1)
-# define GEN6_WM_MSDISPMODE_PERPIXEL                   (1 << 0)
-/* DW7: kernel 1 pointer */
-/* DW8: kernel 2 pointer */
-
-#define CMD_3D_CONSTANT_VS_STATE             0x7815 /* GEN6+ */
-#define CMD_3D_CONSTANT_GS_STATE             0x7816 /* GEN6+ */
-#define CMD_3D_CONSTANT_PS_STATE             0x7817 /* GEN6+ */
-# define GEN6_CONSTANT_BUFFER_3_ENABLE                 (1 << 15)
-# define GEN6_CONSTANT_BUFFER_2_ENABLE                 (1 << 14)
-# define GEN6_CONSTANT_BUFFER_1_ENABLE                 (1 << 13)
-# define GEN6_CONSTANT_BUFFER_0_ENABLE                 (1 << 12)
-
-#define CMD_3D_SAMPLE_MASK                     0x7818 /* GEN6+ */
-
-#define CMD_DRAW_RECT                 0x7900
-#define CMD_BLEND_CONSTANT_COLOR      0x7901
-#define CMD_CHROMA_KEY                0x7904
-#define CMD_DEPTH_BUFFER              0x7905
-#define CMD_POLY_STIPPLE_OFFSET       0x7906
-#define CMD_POLY_STIPPLE_PATTERN      0x7907
-#define CMD_LINE_STIPPLE_PATTERN      0x7908
-#define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7909
-#define CMD_AA_LINE_PARAMETERS        0x790a
-
-#define CMD_GS_SVB_INDEX                       0x790b /* CTG+ */
-/* DW1 */
-# define SVB_INDEX_SHIFT                               29
-# define SVB_LOAD_INTERNAL_VERTEX_COUNT                        (1 << 0) /* SNB+ */
-/* DW2: SVB index */
-/* DW3: SVB maximum index */
-
-#define CMD_3D_MULTISAMPLE                     0x790d /* SNB+ */
-/* DW1 */
-# define MS_PIXEL_LOCATION_CENTER                      (0 << 4)
-# define MS_PIXEL_LOCATION_UPPER_LEFT                  (1 << 4)
-# define MS_NUMSAMPLES_1                               (0 << 1)
-# define MS_NUMSAMPLES_4                               (2 << 1)
-# define MS_NUMSAMPLES_8                               (3 << 1)
-
-#define CMD_3D_CLEAR_PARAMS                    0x7910 /* ILK+ */
-# define DEPTH_CLEAR_VALID                             (1 << 15)
-/* DW1: depth clear value */
-
-#define CMD_PIPE_CONTROL              0x7a00
-
-#define CMD_3D_PRIM                   0x7b00
-
-#define CMD_MI_FLUSH                  0x0200
-
-
-/* Various values from the R0 vertex header:
- */
-#define R02_PRIM_END    0x1
-#define R02_PRIM_START  0x2
-
-#define URB_SIZES(brw)                  (brw->gen == 5 ? 1024 : \
-                                         (brw->is_g4x ? 384 : 256))  /* 512 bit units */
-
-
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_disasm.c b/src/gallium/drivers/i965/brw_disasm.c
deleted file mode 100644 (file)
index b093569..0000000
+++ /dev/null
@@ -1,1023 +0,0 @@
-/*
- * Copyright © 2008 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no representations
- * about the suitability of this software for any purpose.  It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdarg.h>
-
-#include "brw_disasm.h"
-#include "brw_structs.h"
-#include "brw_reg.h"
-#include "brw_defines.h"
-
-struct {
-    char    *name;
-    int            nsrc;
-    int            ndst;
-} opcode[128] = {
-    [BRW_OPCODE_MOV] = { .name = "mov", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_FRC] = { .name = "frc", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_RNDU] = { .name = "rndu", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_RNDD] = { .name = "rndd", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_RNDE] = { .name = "rnde", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_RNDZ] = { .name = "rndz", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_NOT] = { .name = "not", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_LZD] = { .name = "lzd", .nsrc = 1, .ndst = 1 },
-
-    [BRW_OPCODE_MUL] = { .name = "mul", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_MAC] = { .name = "mac", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_MACH] = { .name = "mach", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_LINE] = { .name = "line", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_PLN] = { .name = "pln", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_SAD2] = { .name = "sad2", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_SADA2] = { .name = "sada2", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_DP4] = { .name = "dp4", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_DPH] = { .name = "dph", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_DP3] = { .name = "dp3", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_DP2] = { .name = "dp2", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_MATH] = { .name = "math", .nsrc = 2, .ndst = 1 },
-
-    [BRW_OPCODE_AVG] = { .name = "avg", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_ADD] = { .name = "add", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_SEL] = { .name = "sel", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_AND] = { .name = "and", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_OR] = { .name = "or", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_XOR] = { .name = "xor", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_SHR] = { .name = "shr", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_SHL] = { .name = "shl", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_ASR] = { .name = "asr", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_CMP] = { .name = "cmp", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_CMPN] = { .name = "cmpn", .nsrc = 2, .ndst = 1 },
-
-    [BRW_OPCODE_SEND] = { .name = "send", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_SENDC] = { .name = "sendc", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_NOP] = { .name = "nop", .nsrc = 0, .ndst = 0 },
-    [BRW_OPCODE_JMPI] = { .name = "jmpi", .nsrc = 1, .ndst = 0 },
-    [BRW_OPCODE_IF] = { .name = "if", .nsrc = 2, .ndst = 0 },
-    [BRW_OPCODE_IFF] = { .name = "iff", .nsrc = 2, .ndst = 1 },
-    [BRW_OPCODE_WHILE] = { .name = "while", .nsrc = 2, .ndst = 0 },
-    [BRW_OPCODE_ELSE] = { .name = "else", .nsrc = 2, .ndst = 0 },
-    [BRW_OPCODE_BREAK] = { .name = "break", .nsrc = 2, .ndst = 0 },
-    [BRW_OPCODE_CONTINUE] = { .name = "cont", .nsrc = 1, .ndst = 0 },
-    [BRW_OPCODE_HALT] = { .name = "halt", .nsrc = 1, .ndst = 0 },
-    [BRW_OPCODE_MSAVE] = { .name = "msave", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_PUSH] = { .name = "push", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_MRESTORE] = { .name = "mrest", .nsrc = 1, .ndst = 1 },
-    [BRW_OPCODE_POP] = { .name = "pop", .nsrc = 2, .ndst = 0 },
-    [BRW_OPCODE_WAIT] = { .name = "wait", .nsrc = 1, .ndst = 0 },
-    [BRW_OPCODE_DO] = { .name = "do", .nsrc = 0, .ndst = 0 },
-    [BRW_OPCODE_ENDIF] = { .name = "endif", .nsrc = 2, .ndst = 0 },
-};
-
-char *conditional_modifier[16] = {
-    [BRW_CONDITIONAL_NONE] = "",
-    [BRW_CONDITIONAL_Z] = ".e",
-    [BRW_CONDITIONAL_NZ] = ".ne",
-    [BRW_CONDITIONAL_G] = ".g",
-    [BRW_CONDITIONAL_GE] = ".ge",
-    [BRW_CONDITIONAL_L] = ".l",
-    [BRW_CONDITIONAL_LE] = ".le",
-    [BRW_CONDITIONAL_R] = ".r",
-    [BRW_CONDITIONAL_O] = ".o",
-    [BRW_CONDITIONAL_U] = ".u",
-};
-
-char *negate[2] = {
-    [0] = "",
-    [1] = "-",
-};
-
-char *_abs[2] = {
-    [0] = "",
-    [1] = "(abs)",
-};
-
-char *vert_stride[16] = {
-    [0] = "0",
-    [1] = "1",
-    [2] = "2",
-    [3] = "4",
-    [4] = "8",
-    [5] = "16",
-    [6] = "32",
-    [15] = "VxH",
-};
-
-char *width[8] = {
-    [0] = "1",
-    [1] = "2",
-    [2] = "4",
-    [3] = "8",
-    [4] = "16",
-};
-
-char *horiz_stride[4] = {
-    [0] = "0",
-    [1] = "1",
-    [2] = "2",
-    [3] = "4"
-};
-
-char *chan_sel[4] = {
-    [0] = "x",
-    [1] = "y",
-    [2] = "z",
-    [3] = "w",
-};
-
-char *dest_condmod[16] = {
-};
-
-char *debug_ctrl[2] = {
-    [0] = "",
-    [1] = ".breakpoint"
-};
-
-char *saturate[2] = {
-    [0] = "",
-    [1] = ".sat"
-};
-
-char *accwr[2] = {
-    [0] = "",
-    [1] = "AccWrEnable"
-};
-
-char *wectrl[2] = {
-    [0] = "WE_normal",
-    [1] = "WE_all"
-};
-
-char *exec_size[8] = {
-    [0] = "1",
-    [1] = "2",
-    [2] = "4",
-    [3] = "8",
-    [4] = "16",
-    [5] = "32"
-};
-
-char *pred_inv[2] = {
-    [0] = "+",
-    [1] = "-"
-};
-
-char *pred_ctrl_align16[16] = {
-    [1] = "",
-    [2] = ".x",
-    [3] = ".y",
-    [4] = ".z",
-    [5] = ".w",
-    [6] = ".any4h",
-    [7] = ".all4h",
-};
-
-char *pred_ctrl_align1[16] = {
-    [1] = "",
-    [2] = ".anyv",
-    [3] = ".allv",
-    [4] = ".any2h",
-    [5] = ".all2h",
-    [6] = ".any4h",
-    [7] = ".all4h",
-    [8] = ".any8h",
-    [9] = ".all8h",
-    [10] = ".any16h",
-    [11] = ".all16h",
-};
-
-char *thread_ctrl[4] = {
-    [0] = "",
-    [2] = "switch"
-};
-
-char *compr_ctrl[4] = {
-    [0] = "",
-    [1] = "sechalf",
-    [2] = "compr",
-    [3] = "compr4",
-};
-
-char *dep_ctrl[4] = {
-    [0] = "",
-    [1] = "NoDDClr",
-    [2] = "NoDDChk",
-    [3] = "NoDDClr,NoDDChk",
-};
-
-char *mask_ctrl[4] = {
-    [0] = "",
-    [1] = "nomask",
-};
-
-char *access_mode[2] = {
-    [0] = "align1",
-    [1] = "align16",
-};
-
-char *reg_encoding[8] = {
-    [0] = "UD",
-    [1] = "D",
-    [2] = "UW",
-    [3] = "W",
-    [4] = "UB",
-    [5] = "B",
-    [7] = "F"
-};
-
-int reg_type_size[8] = {
-    [0] = 4,
-    [1] = 4,
-    [2] = 2,
-    [3] = 2,
-    [4] = 1,
-    [5] = 1,
-    [7] = 4
-};
-
-char *imm_encoding[8] = {
-    [0] = "UD",
-    [1] = "D",
-    [2] = "UW",
-    [3] = "W",
-    [5] = "VF",
-    [6] = "V",
-    [7] = "F"
-};
-
-char *reg_file[4] = {
-    [0] = "A",
-    [1] = "g",
-    [2] = "m",
-    [3] = "imm",
-};
-
-char *writemask[16] = {
-    [0x0] = ".",
-    [0x1] = ".x",
-    [0x2] = ".y",
-    [0x3] = ".xy",
-    [0x4] = ".z",
-    [0x5] = ".xz",
-    [0x6] = ".yz",
-    [0x7] = ".xyz",
-    [0x8] = ".w",
-    [0x9] = ".xw",
-    [0xa] = ".yw",
-    [0xb] = ".xyw",
-    [0xc] = ".zw",
-    [0xd] = ".xzw",
-    [0xe] = ".yzw",
-    [0xf] = "",
-};
-
-char *end_of_thread[2] = {
-    [0] = "",
-    [1] = "EOT"
-};
-
-char *target_function[16] = {
-    [BRW_MESSAGE_TARGET_NULL] = "null",
-    [BRW_MESSAGE_TARGET_MATH] = "math",
-    [BRW_MESSAGE_TARGET_SAMPLER] = "sampler",
-    [BRW_MESSAGE_TARGET_GATEWAY] = "gateway",
-    [BRW_MESSAGE_TARGET_DATAPORT_READ] = "read",
-    [BRW_MESSAGE_TARGET_DATAPORT_WRITE] = "write",
-    [BRW_MESSAGE_TARGET_URB] = "urb",
-    [BRW_MESSAGE_TARGET_THREAD_SPAWNER] = "thread_spawner"
-};
-
-char *math_function[16] = {
-    [BRW_MATH_FUNCTION_INV] = "inv",
-    [BRW_MATH_FUNCTION_LOG] = "log",
-    [BRW_MATH_FUNCTION_EXP] = "exp",
-    [BRW_MATH_FUNCTION_SQRT] = "sqrt",
-    [BRW_MATH_FUNCTION_RSQ] = "rsq",
-    [BRW_MATH_FUNCTION_SIN] = "sin",
-    [BRW_MATH_FUNCTION_COS] = "cos",
-    [BRW_MATH_FUNCTION_SINCOS] = "sincos",
-    [BRW_MATH_FUNCTION_TAN] = "tan",
-    [BRW_MATH_FUNCTION_POW] = "pow",
-    [BRW_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER] = "intdivmod",
-    [BRW_MATH_FUNCTION_INT_DIV_QUOTIENT] = "intmod",
-    [BRW_MATH_FUNCTION_INT_DIV_REMAINDER] = "intdiv",
-};
-
-char *math_saturate[2] = {
-    [0] = "",
-    [1] = "sat"
-};
-
-char *math_signed[2] = {
-    [0] = "",
-    [1] = "signed"
-};
-
-char *math_scalar[2] = {
-    [0] = "",
-    [1] = "scalar"
-};
-
-char *math_precision[2] = {
-    [0] = "",
-    [1] = "partial_precision"
-};
-
-char *urb_opcode[2] = {
-    [0] = "urb_write",
-    [1] = "ff_sync",
-};
-
-char *urb_swizzle[4] = {
-    [BRW_URB_SWIZZLE_NONE] = "",
-    [BRW_URB_SWIZZLE_INTERLEAVE] = "interleave",
-    [BRW_URB_SWIZZLE_TRANSPOSE] = "transpose",
-};
-
-char *urb_allocate[2] = {
-    [0] = "",
-    [1] = "allocate"
-};
-
-char *urb_used[2] = {
-    [0] = "",
-    [1] = "used"
-};
-
-char *urb_complete[2] = {
-    [0] = "",
-    [1] = "complete"
-};
-
-char *sampler_target_format[4] = {
-    [0] = "F",
-    [2] = "UD",
-    [3] = "D"
-};
-
-
-static int column;
-
-static int string (FILE *file, char *string)
-{
-    fputs (string, file);
-    column += strlen (string);
-    return 0;
-}
-
-static int format (FILE *f, char *format, ...)
-{
-    char    buf[1024];
-    va_list    args;
-    va_start (args, format);
-
-    vsnprintf (buf, sizeof (buf) - 1, format, args);
-    va_end (args);
-    string (f, buf);
-    return 0;
-}
-
-static int newline (FILE *f)
-{
-    putc ('\n', f);
-    column = 0;
-    return 0;
-}
-
-static int pad (FILE *f, int c)
-{
-    do
-       string (f, " ");
-    while (column < c);
-    return 0;
-}
-
-static int control (FILE *file, char *name, char *ctrl[], GLuint id, int *space)
-{
-    if (!ctrl[id]) {
-       fprintf (file, "*** invalid %s value %d ",
-                name, id);
-       return 1;
-    }
-    if (ctrl[id][0])
-    {
-       if (space && *space)
-           string (file, " ");
-       string (file, ctrl[id]);
-       if (space)
-           *space = 1;
-    }
-    return 0;
-}
-
-static int print_opcode (FILE *file, int id)
-{
-    if (!opcode[id].name) {
-       format (file, "*** invalid opcode value %d ", id);
-       return 1;
-    }
-    string (file, opcode[id].name);
-    return 0;
-}
-
-static int reg (FILE *file, GLuint _reg_file, GLuint _reg_nr)
-{
-    int        err = 0;
-
-    /* Clear the Compr4 instruction compression bit. */
-    if (_reg_file == BRW_MESSAGE_REGISTER_FILE)
-       _reg_nr &= ~(1 << 7);
-
-    if (_reg_file == BRW_ARCHITECTURE_REGISTER_FILE) {
-       switch (_reg_nr & 0xf0) {
-       case BRW_ARF_NULL:
-           string (file, "null");
-           return -1;
-       case BRW_ARF_ADDRESS:
-           format (file, "a%d", _reg_nr & 0x0f);
-           break;
-       case BRW_ARF_ACCUMULATOR:
-           format (file, "acc%d", _reg_nr & 0x0f);
-           break;
-       case BRW_ARF_FLAG:
-           format (file, "f%d", _reg_nr & 0x0f);
-           break;
-       case BRW_ARF_MASK:
-           format (file, "mask%d", _reg_nr & 0x0f);
-           break;
-       case BRW_ARF_MASK_STACK:
-           format (file, "msd%d", _reg_nr & 0x0f);
-           break;
-       case BRW_ARF_STATE:
-           format (file, "sr%d", _reg_nr & 0x0f);
-           break;
-       case BRW_ARF_CONTROL:
-           format (file, "cr%d", _reg_nr & 0x0f);
-           break;
-       case BRW_ARF_NOTIFICATION_COUNT:
-           format (file, "n%d", _reg_nr & 0x0f);
-           break;
-       case BRW_ARF_IP:
-           string (file, "ip");
-           return -1;
-           break;
-       default:
-           format (file, "ARF%d", _reg_nr);
-           break;
-       }
-    } else {
-       err  |= control (file, "src reg file", reg_file, _reg_file, NULL);
-       format (file, "%d", _reg_nr);
-    }
-    return err;
-}
-
-static int dest (FILE *file, struct brw_instruction *inst)
-{
-    int        err = 0;
-
-    if (inst->header.access_mode == BRW_ALIGN_1)
-    {
-       if (inst->bits1.da1.dest_address_mode == BRW_ADDRESS_DIRECT)
-       {
-           err |= reg (file, inst->bits1.da1.dest_reg_file, inst->bits1.da1.dest_reg_nr);
-           if (err == -1)
-               return 0;
-           if (inst->bits1.da1.dest_subreg_nr)
-               format (file, ".%d", inst->bits1.da1.dest_subreg_nr /
-                                    reg_type_size[inst->bits1.da1.dest_reg_type]);
-           format (file, "<%d>", inst->bits1.da1.dest_horiz_stride);
-           err |= control (file, "dest reg encoding", reg_encoding, inst->bits1.da1.dest_reg_type, NULL);
-       }
-       else
-       {
-           string (file, "g[a0");
-           if (inst->bits1.ia1.dest_subreg_nr)
-               format (file, ".%d", inst->bits1.ia1.dest_subreg_nr /
-                                       reg_type_size[inst->bits1.ia1.dest_reg_type]);
-           if (inst->bits1.ia1.dest_indirect_offset)
-               format (file, " %d", inst->bits1.ia1.dest_indirect_offset);
-           string (file, "]");
-           format (file, "<%d>", inst->bits1.ia1.dest_horiz_stride);
-           err |= control (file, "dest reg encoding", reg_encoding, inst->bits1.ia1.dest_reg_type, NULL);
-       }
-    }
-    else
-    {
-       if (inst->bits1.da16.dest_address_mode == BRW_ADDRESS_DIRECT)
-       {
-           err |= reg (file, inst->bits1.da16.dest_reg_file, inst->bits1.da16.dest_reg_nr);
-           if (err == -1)
-               return 0;
-           if (inst->bits1.da16.dest_subreg_nr)
-               format (file, ".%d", inst->bits1.da16.dest_subreg_nr /
-                                    reg_type_size[inst->bits1.da16.dest_reg_type]);
-           string (file, "<1>");
-           err |= control (file, "writemask", writemask, inst->bits1.da16.dest_writemask, NULL);
-           err |= control (file, "dest reg encoding", reg_encoding, inst->bits1.da16.dest_reg_type, NULL);
-       }
-       else
-       {
-           err = 1;
-           string (file, "Indirect align16 address mode not supported");
-       }
-    }
-
-    return 0;
-}
-
-static int src_align1_region (FILE *file,
-                             GLuint _vert_stride, GLuint _width, GLuint _horiz_stride)
-{
-    int err = 0;
-    string (file, "<");
-    err |= control (file, "vert stride", vert_stride, _vert_stride, NULL);
-    string (file, ",");
-    err |= control (file, "width", width, _width, NULL);
-    string (file, ",");
-    err |= control (file, "horiz_stride", horiz_stride, _horiz_stride, NULL);
-    string (file, ">");
-    return err;
-}
-
-static int src_da1 (FILE *file, GLuint type, GLuint _reg_file,
-                   GLuint _vert_stride, GLuint _width, GLuint _horiz_stride,
-                   GLuint reg_num, GLuint sub_reg_num, GLuint __abs, GLuint _negate)
-{
-    int err = 0;
-    err |= control (file, "negate", negate, _negate, NULL);
-    err |= control (file, "abs", _abs, __abs, NULL);
-
-    err |= reg (file, _reg_file, reg_num);
-    if (err == -1)
-       return 0;
-    if (sub_reg_num)
-       format (file, ".%d", sub_reg_num / reg_type_size[type]); /* use formal style like spec */
-    src_align1_region (file, _vert_stride, _width, _horiz_stride);
-    err |= control (file, "src reg encoding", reg_encoding, type, NULL);
-    return err;
-}
-
-static int src_ia1 (FILE *file,
-                   GLuint type,
-                   GLuint _reg_file,
-                   GLint _addr_imm,
-                   GLuint _addr_subreg_nr,
-                   GLuint _negate,
-                   GLuint __abs,
-                   GLuint _addr_mode,
-                   GLuint _horiz_stride,
-                   GLuint _width,
-                   GLuint _vert_stride)
-{
-    int err = 0;
-    err |= control (file, "negate", negate, _negate, NULL);
-    err |= control (file, "abs", _abs, __abs, NULL);
-
-    string (file, "g[a0");
-    if (_addr_subreg_nr)
-       format (file, ".%d", _addr_subreg_nr);
-    if (_addr_imm)
-       format (file, " %d", _addr_imm);
-    string (file, "]");
-    src_align1_region (file, _vert_stride, _width, _horiz_stride);
-    err |= control (file, "src reg encoding", reg_encoding, type, NULL);
-    return err;
-}
-
-static int src_da16 (FILE *file,
-                    GLuint _reg_type,
-                    GLuint _reg_file,
-                    GLuint _vert_stride,
-                    GLuint _reg_nr,
-                    GLuint _subreg_nr,
-                    GLuint __abs,
-                    GLuint _negate,
-                    GLuint swz_x,
-                    GLuint swz_y,
-                    GLuint swz_z,
-                    GLuint swz_w)
-{
-    int err = 0;
-    err |= control (file, "negate", negate, _negate, NULL);
-    err |= control (file, "abs", _abs, __abs, NULL);
-
-    err |= reg (file, _reg_file, _reg_nr);
-    if (err == -1)
-       return 0;
-    if (_subreg_nr)
-       /* bit4 for subreg number byte addressing. Make this same meaning as
-          in da1 case, so output looks consistent. */
-       format (file, ".%d", 16 / reg_type_size[_reg_type]);
-    string (file, "<");
-    err |= control (file, "vert stride", vert_stride, _vert_stride, NULL);
-    string (file, ",4,1>");
-    /*
-     * Three kinds of swizzle display:
-     *  identity - nothing printed
-     *  1->all  - print the single channel
-     *  1->1     - print the mapping
-     */
-    if (swz_x == BRW_CHANNEL_X &&
-       swz_y == BRW_CHANNEL_Y &&
-       swz_z == BRW_CHANNEL_Z &&
-       swz_w == BRW_CHANNEL_W)
-    {
-       ;
-    }
-    else if (swz_x == swz_y && swz_x == swz_z && swz_x == swz_w)
-    {
-       string (file, ".");
-       err |= control (file, "channel select", chan_sel, swz_x, NULL);
-    }
-    else
-    {
-       string (file, ".");
-       err |= control (file, "channel select", chan_sel, swz_x, NULL);
-       err |= control (file, "channel select", chan_sel, swz_y, NULL);
-       err |= control (file, "channel select", chan_sel, swz_z, NULL);
-       err |= control (file, "channel select", chan_sel, swz_w, NULL);
-    }
-    err |= control (file, "src da16 reg type", reg_encoding, _reg_type, NULL);
-    return err;
-}
-
-
-static int imm (FILE *file, GLuint type, struct brw_instruction *inst) {
-    switch (type) {
-    case BRW_REGISTER_TYPE_UD:
-       format (file, "0x%08xUD", inst->bits3.ud);
-       break;
-    case BRW_REGISTER_TYPE_D:
-       format (file, "%dD", inst->bits3.d);
-       break;
-    case BRW_REGISTER_TYPE_UW:
-       format (file, "0x%04xUW", (uint16_t) inst->bits3.ud);
-       break;
-    case BRW_REGISTER_TYPE_W:
-       format (file, "%dW", (int16_t) inst->bits3.d);
-       break;
-    case BRW_REGISTER_TYPE_UB:
-       format (file, "0x%02xUB", (int8_t) inst->bits3.ud);
-       break;
-    case BRW_REGISTER_TYPE_VF:
-       format (file, "Vector Float");
-       break;
-    case BRW_REGISTER_TYPE_V:
-       format (file, "0x%08xV", inst->bits3.ud);
-       break;
-    case BRW_REGISTER_TYPE_F:
-       format (file, "%-gF", inst->bits3.f);
-    }
-    return 0;
-}
-
-static int src0 (FILE *file, struct brw_instruction *inst)
-{
-    if (inst->bits1.da1.src0_reg_file == BRW_IMMEDIATE_VALUE)
-       return imm (file, inst->bits1.da1.src0_reg_type,
-                   inst);
-    else if (inst->header.access_mode == BRW_ALIGN_1)
-    {
-       if (inst->bits2.da1.src0_address_mode == BRW_ADDRESS_DIRECT)
-       {
-           return src_da1 (file,
-                           inst->bits1.da1.src0_reg_type,
-                           inst->bits1.da1.src0_reg_file,
-                           inst->bits2.da1.src0_vert_stride,
-                           inst->bits2.da1.src0_width,
-                           inst->bits2.da1.src0_horiz_stride,
-                           inst->bits2.da1.src0_reg_nr,
-                           inst->bits2.da1.src0_subreg_nr,
-                           inst->bits2.da1.src0_abs,
-                           inst->bits2.da1.src0_negate);
-       }
-       else
-       {
-           return src_ia1 (file,
-                           inst->bits1.ia1.src0_reg_type,
-                           inst->bits1.ia1.src0_reg_file,
-                           inst->bits2.ia1.src0_indirect_offset,
-                           inst->bits2.ia1.src0_subreg_nr,
-                           inst->bits2.ia1.src0_negate,
-                           inst->bits2.ia1.src0_abs,
-                           inst->bits2.ia1.src0_address_mode,
-                           inst->bits2.ia1.src0_horiz_stride,
-                           inst->bits2.ia1.src0_width,
-                           inst->bits2.ia1.src0_vert_stride);
-       }
-    }
-    else
-    {
-       if (inst->bits2.da16.src0_address_mode == BRW_ADDRESS_DIRECT)
-       {
-           return src_da16 (file,
-                            inst->bits1.da16.src0_reg_type,
-                            inst->bits1.da16.src0_reg_file,
-                            inst->bits2.da16.src0_vert_stride,
-                            inst->bits2.da16.src0_reg_nr,
-                            inst->bits2.da16.src0_subreg_nr,
-                            inst->bits2.da16.src0_abs,
-                            inst->bits2.da16.src0_negate,
-                            inst->bits2.da16.src0_swz_x,
-                            inst->bits2.da16.src0_swz_y,
-                            inst->bits2.da16.src0_swz_z,
-                            inst->bits2.da16.src0_swz_w);
-       }
-       else
-       {
-           string (file, "Indirect align16 address mode not supported");
-           return 1;
-       }
-    }
-}
-
-static int src1 (FILE *file, struct brw_instruction *inst)
-{
-    if (inst->bits1.da1.src1_reg_file == BRW_IMMEDIATE_VALUE)
-       return imm (file, inst->bits1.da1.src1_reg_type,
-                   inst);
-    else if (inst->header.access_mode == BRW_ALIGN_1)
-    {
-       if (inst->bits3.da1.src1_address_mode == BRW_ADDRESS_DIRECT)
-       {
-           return src_da1 (file,
-                           inst->bits1.da1.src1_reg_type,
-                           inst->bits1.da1.src1_reg_file,
-                           inst->bits3.da1.src1_vert_stride,
-                           inst->bits3.da1.src1_width,
-                           inst->bits3.da1.src1_horiz_stride,
-                           inst->bits3.da1.src1_reg_nr,
-                           inst->bits3.da1.src1_subreg_nr,
-                           inst->bits3.da1.src1_abs,
-                           inst->bits3.da1.src1_negate);
-       }
-       else
-       {
-           return src_ia1 (file,
-                           inst->bits1.ia1.src1_reg_type,
-                           inst->bits1.ia1.src1_reg_file,
-                           inst->bits3.ia1.src1_indirect_offset,
-                           inst->bits3.ia1.src1_subreg_nr,
-                           inst->bits3.ia1.src1_negate,
-                           inst->bits3.ia1.src1_abs,
-                           inst->bits3.ia1.src1_address_mode,
-                           inst->bits3.ia1.src1_horiz_stride,
-                           inst->bits3.ia1.src1_width,
-                           inst->bits3.ia1.src1_vert_stride);
-       }
-    }
-    else
-    {
-       if (inst->bits3.da16.src1_address_mode == BRW_ADDRESS_DIRECT)
-       {
-           return src_da16 (file,
-                            inst->bits1.da16.src1_reg_type,
-                            inst->bits1.da16.src1_reg_file,
-                            inst->bits3.da16.src1_vert_stride,
-                            inst->bits3.da16.src1_reg_nr,
-                            inst->bits3.da16.src1_subreg_nr,
-                            inst->bits3.da16.src1_abs,
-                            inst->bits3.da16.src1_negate,
-                            inst->bits3.da16.src1_swz_x,
-                            inst->bits3.da16.src1_swz_y,
-                            inst->bits3.da16.src1_swz_z,
-                            inst->bits3.da16.src1_swz_w);
-       }
-       else
-       {
-           string (file, "Indirect align16 address mode not supported");
-           return 1;
-       }
-    }
-}
-
-int brw_disasm_insn (FILE *file, struct brw_instruction *inst, int gen)
-{
-    int        err = 0;
-    int space = 0;
-
-    if (inst->header.predicate_control) {
-       string (file, "(");
-       err |= control (file, "predicate inverse", pred_inv, inst->header.predicate_inverse, NULL);
-       string (file, "f0");
-       if (inst->bits2.da1.flag_reg_nr)
-           format (file, ".%d", inst->bits2.da1.flag_reg_nr);
-       if (inst->header.access_mode == BRW_ALIGN_1)
-           err |= control (file, "predicate control align1", pred_ctrl_align1,
-                           inst->header.predicate_control, NULL);
-       else
-           err |= control (file, "predicate control align16", pred_ctrl_align16,
-                           inst->header.predicate_control, NULL);
-       string (file, ") ");
-    }
-
-    err |= print_opcode (file, inst->header.opcode);
-    err |= control (file, "saturate", saturate, inst->header.saturate, NULL);
-    err |= control (file, "debug control", debug_ctrl, inst->header.debug_control, NULL);
-
-    if (inst->header.opcode != BRW_OPCODE_SEND)
-       err |= control (file, "conditional modifier", conditional_modifier,
-                       inst->header.destreg__conditionalmod, NULL);
-
-    if (inst->header.opcode != BRW_OPCODE_NOP) {
-       string (file, "(");
-       err |= control (file, "execution size", exec_size, inst->header.execution_size, NULL);
-       string (file, ")");
-    }
-
-    if (inst->header.opcode == BRW_OPCODE_SEND)
-       format (file, " %d", inst->header.destreg__conditionalmod);
-
-    if (opcode[inst->header.opcode].ndst > 0) {
-       pad (file, 16);
-       err |= dest (file, inst);
-    }
-    if (opcode[inst->header.opcode].nsrc > 0) {
-       pad (file, 32);
-       err |= src0 (file, inst);
-    }
-    if (opcode[inst->header.opcode].nsrc > 1) {
-       pad (file, 48);
-       err |= src1 (file, inst);
-    }
-
-    if (inst->header.opcode == BRW_OPCODE_SEND ||
-        inst->header.opcode == BRW_OPCODE_SENDC) {
-       newline (file);
-       pad (file, 16);
-       space = 0;
-       err |= control (file, "target function", target_function,
-                       inst->bits3.generic.msg_target, &space);
-       switch (inst->bits3.generic.msg_target) {
-       case BRW_MESSAGE_TARGET_MATH:
-           err |= control (file, "math function", math_function,
-                           inst->bits3.math.function, &space);
-           err |= control (file, "math saturate", math_saturate,
-                           inst->bits3.math.saturate, &space);
-           err |= control (file, "math signed", math_signed,
-                           inst->bits3.math.int_type, &space);
-           err |= control (file, "math scalar", math_scalar,
-                           inst->bits3.math.data_type, &space);
-           err |= control (file, "math precision", math_precision,
-                           inst->bits3.math.precision, &space);
-           break;
-       case BRW_MESSAGE_TARGET_SAMPLER:
-           if (gen >= 5) {
-               format (file, " (%d, %d, %d, %d)",
-                       inst->bits3.sampler_gen5.binding_table_index,
-                       inst->bits3.sampler_gen5.sampler,
-                       inst->bits3.sampler_gen5.msg_type,
-                       inst->bits3.sampler_gen5.simd_mode);
-           } else if (0 /* FINISHME: is_g4x */) {
-             format (file, " (%d, %d)",
-                       inst->bits3.sampler_g4x.binding_table_index,
-                       inst->bits3.sampler_g4x.sampler);
-           } else {
-               format (file, " (%d, %d, ",
-                       inst->bits3.sampler.binding_table_index,
-                       inst->bits3.sampler.sampler);
-               err |= control (file, "sampler target format", sampler_target_format,
-                               inst->bits3.sampler.return_format, NULL);
-               string (file, ")");
-           }
-           break;
-       case BRW_MESSAGE_TARGET_DATAPORT_READ:
-           if (gen >= 6) {
-               format (file, " (%d, %d, %d, %d, %d, %d)",
-                       inst->bits3.dp_render_cache.binding_table_index,
-                       inst->bits3.dp_render_cache.msg_control,
-                       inst->bits3.dp_render_cache.msg_type,
-                       inst->bits3.dp_render_cache.send_commit_msg,
-                       inst->bits3.dp_render_cache.msg_length,
-                       inst->bits3.dp_render_cache.response_length);
-           } else if (gen >= 5 /* FINISHME: || is_g4x */) {
-               format (file, " (%d, %d, %d)",
-                       inst->bits3.dp_read_gen5.binding_table_index,
-                       inst->bits3.dp_read_gen5.msg_control,
-                       inst->bits3.dp_read_gen5.msg_type);
-           } else {
-               format (file, " (%d, %d, %d)",
-                       inst->bits3.dp_read.binding_table_index,
-                       inst->bits3.dp_read.msg_control,
-                       inst->bits3.dp_read.msg_type);
-           }
-           break;
-       case BRW_MESSAGE_TARGET_DATAPORT_WRITE:
-           if (gen >= 6) {
-               format (file, " (%d, %d, %d, %d, %d, %d)",
-                       inst->bits3.dp_render_cache.binding_table_index,
-                       inst->bits3.dp_render_cache.msg_control,
-                       inst->bits3.dp_render_cache.msg_type,
-                       inst->bits3.dp_render_cache.send_commit_msg,
-                       inst->bits3.dp_render_cache.msg_length,
-                       inst->bits3.dp_render_cache.response_length);
-           } else {
-               format (file, " (%d, %d, %d, %d)",
-                       inst->bits3.dp_write.binding_table_index,
-                       (inst->bits3.dp_write.pixel_scoreboard_clear << 3) |
-                       inst->bits3.dp_write.msg_control,
-                       inst->bits3.dp_write.msg_type,
-                       inst->bits3.dp_write.send_commit_msg);
-           }
-           break;
-       case BRW_MESSAGE_TARGET_URB:
-           if (gen >= 5) {
-               format (file, " %d", inst->bits3.urb_gen5.offset);
-           } else {
-               format (file, " %d", inst->bits3.urb.offset);
-           }
-           err |= control (file, "urb swizzle", urb_swizzle,
-                           inst->bits3.urb.swizzle_control, &space);
-           err |= control (file, "urb allocate", urb_allocate,
-                           inst->bits3.urb.allocate, &space);
-           err |= control (file, "urb used", urb_used,
-                           inst->bits3.urb.used, &space);
-           err |= control (file, "urb complete", urb_complete,
-                           inst->bits3.urb.complete, &space);
-           if (gen >= 5) {
-               format (file, " mlen %d, rlen %d\n",
-                       inst->bits3.urb_gen5.msg_length,
-                       inst->bits3.urb_gen5.response_length);
-           }
-           break;
-       case BRW_MESSAGE_TARGET_THREAD_SPAWNER:
-           break;
-       default:
-           format (file, "unsupported target %d", inst->bits3.generic.msg_target);
-           break;
-       }
-       if (space)
-           string (file, " ");
-       if (gen >= 5) {
-          format (file, "mlen %d",
-                  inst->bits3.generic_gen5.msg_length);
-          format (file, " rlen %d",
-                  inst->bits3.generic_gen5.response_length);
-       } else {
-           format (file, "mlen %d",
-                   inst->bits3.generic.msg_length);
-           format (file, " rlen %d",
-                   inst->bits3.generic.response_length);
-       }
-    }
-    pad (file, 64);
-    if (inst->header.opcode != BRW_OPCODE_NOP) {
-       string (file, "{");
-       space = 1;
-       err |= control(file, "access mode", access_mode, inst->header.access_mode, &space);
-       err |= control (file, "mask control", mask_ctrl, inst->header.mask_control, &space);
-       err |= control (file, "dependency control", dep_ctrl, inst->header.dependency_control, &space);
-       err |= control (file, "compression control", compr_ctrl, inst->header.compression_control, &space);
-       err |= control (file, "thread control", thread_ctrl, inst->header.thread_control, &space);
-       if (inst->header.opcode == BRW_OPCODE_SEND ||
-            inst->header.opcode == BRW_OPCODE_SENDC)
-           err |= control (file, "end of thread", end_of_thread,
-                           inst->bits3.generic.end_of_thread, &space);
-       if (space)
-           string (file, " ");
-       string (file, "}");
-    }
-    string (file, ";");
-    newline (file);
-    return err;
-}
-
-
-int brw_disasm (FILE *file, 
-                struct brw_instruction *inst,
-                unsigned count, int gen)
-{
-   int i, err;
-
-   for (i = 0; i < count; i++) {
-      err = brw_disasm_insn(stderr, &inst[i], gen);
-      if (err)
-         return err;
-   }
-
-   fprintf(file, "\n");
-   return 0;
-}
-
diff --git a/src/gallium/drivers/i965/brw_disasm.h b/src/gallium/drivers/i965/brw_disasm.h
deleted file mode 100644 (file)
index ce451ed..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright © 2008 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no representations
- * about the suitability of this software for any purpose.  It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-#ifndef BRW_DISASM_H
-#define BRW_DISASM_H
-
-#include <stdio.h>
-
-struct brw_instruction;
-
-int brw_disasm_insn (FILE *file, struct brw_instruction *inst, int gen);
-int brw_disasm (FILE *file, 
-                struct brw_instruction *inst,
-                unsigned count, int gen);
-
-#endif
-
diff --git a/src/gallium/drivers/i965/brw_draw.c b/src/gallium/drivers/i965/brw_draw.c
deleted file mode 100644 (file)
index 3ab9024..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-
-#include "util/u_inlines.h"
-#include "util/u_prim.h"
-#include "util/u_upload_mgr.h"
-
-#include "brw_draw.h"
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_debug.h"
-
-#include "brw_batchbuffer.h"
-
-
-static uint32_t prim_to_hw_prim[PIPE_PRIM_POLYGON+1] = {
-   _3DPRIM_POINTLIST,
-   _3DPRIM_LINELIST,
-   _3DPRIM_LINELOOP,
-   _3DPRIM_LINESTRIP,
-   _3DPRIM_TRILIST,
-   _3DPRIM_TRISTRIP,
-   _3DPRIM_TRIFAN,
-   _3DPRIM_QUADLIST,
-   _3DPRIM_QUADSTRIP,
-   _3DPRIM_POLYGON
-};
-
-
-
-/* When the primitive changes, set a state bit and re-validate.  Not
- * the nicest and would rather deal with this by having all the
- * programs be immune to the active primitive (ie. cope with all
- * possibilities).  That may not be realistic however.
- */
-static int brw_set_prim(struct brw_context *brw, unsigned prim )
-{
-
-   if (BRW_DEBUG & DEBUG_PRIMS)
-      debug_printf("PRIM: %s\n", u_prim_name(prim));
-   
-   if (prim != brw->primitive) {
-      unsigned reduced_prim;
-
-      brw->primitive = prim;
-      brw->state.dirty.brw |= BRW_NEW_PRIMITIVE;
-
-      reduced_prim = u_reduced_prim(prim);
-      if (reduced_prim != brw->reduced_primitive) {
-        brw->reduced_primitive = reduced_prim;
-        brw->state.dirty.brw |= BRW_NEW_REDUCED_PRIMITIVE;
-      }
-   }
-
-   return prim_to_hw_prim[prim];
-}
-
-
-
-static int brw_emit_prim(struct brw_context *brw,
-                        unsigned start,
-                        unsigned count,
-                        boolean indexed,
-                        uint32_t hw_prim)
-{
-   struct brw_3d_primitive prim_packet;
-   int ret;
-
-   if (BRW_DEBUG & DEBUG_PRIMS)
-      debug_printf("%s start %d count %d indexed %d hw_prim %d\n",
-                   __FUNCTION__, start, count, indexed, hw_prim); 
-
-   prim_packet.header.opcode = CMD_3D_PRIM;
-   prim_packet.header.length = sizeof(prim_packet)/4 - 2;
-   prim_packet.header.pad = 0;
-   prim_packet.header.topology = hw_prim;
-   prim_packet.header.indexed = indexed;
-
-   prim_packet.verts_per_instance = count;
-   prim_packet.start_vert_location = start;
-   if (indexed)
-      prim_packet.start_vert_location += brw->ib.start_vertex_offset;
-   prim_packet.instance_count = 1;
-   prim_packet.start_instance_location = 0;
-   prim_packet.base_vert_location = 0; /* prim->basevertex; XXX: add this to gallium */
-
-
-   /* If we're set to always flush, do it before and after the primitive emit.
-    * We want to catch both missed flushes that hurt instruction/state cache
-    * and missed flushes of the render cache as it heads to other parts of
-    * the besides the draw code.
-    */
-   if (0) {
-      BEGIN_BATCH(1, IGNORE_CLIPRECTS);
-      OUT_BATCH((CMD_MI_FLUSH << 16) | BRW_FLUSH_STATE_CACHE);
-      ADVANCE_BATCH();
-   }
-   if (prim_packet.verts_per_instance) {
-      ret = brw_batchbuffer_data( brw->batch, &prim_packet,
-                                 sizeof(prim_packet), LOOP_CLIPRECTS);
-      if (ret)
-        return ret;
-   }
-   if (0) {
-      BEGIN_BATCH(1, IGNORE_CLIPRECTS);
-      OUT_BATCH((CMD_MI_FLUSH << 16) | BRW_FLUSH_STATE_CACHE);
-      ADVANCE_BATCH();
-   }
-
-   return 0;
-}
-
-
-/* May fail if out of video memory for texture or vbo upload, or on
- * fallback conditions.
- */
-static int
-try_draw_range_elements(struct brw_context *brw,
-                       boolean indexed,
-                       unsigned hw_prim, 
-                       unsigned start, unsigned count)
-{
-   int ret;
-
-   ret = brw_validate_state(brw);
-   if (ret)
-      return ret;
-
-   /* Check that we can fit our state in with our existing batchbuffer, or
-    * flush otherwise.
-    */
-   ret = brw->sws->check_aperture_space(brw->sws,
-                                       brw->state.validated_bos,
-                                       brw->state.validated_bo_count);
-   if (ret)
-      return ret;
-
-   ret = brw_upload_state(brw);
-   if (ret)
-      return ret;
-   
-   ret = brw_emit_prim(brw, start, count, indexed, hw_prim);
-   if (ret)
-      return ret;
-
-   if (brw->flags.always_flush_batch)
-      brw_context_flush( brw );
-
-   return 0;
-}
-
-
-static void
-brw_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
-{
-   struct brw_context *brw = brw_context(pipe);
-   int ret;
-   uint32_t hw_prim;
-
-   hw_prim = brw_set_prim(brw, info->mode);
-
-   if (BRW_DEBUG & DEBUG_PRIMS)
-      debug_printf("PRIM: %s start %d count %d index_buffer %p\n",
-                   u_prim_name(info->mode), info->start, info->count,
-                   (void *) brw->curr.index_buffer);
-
-   assert(info->index_bias == 0);
-
-   /* Potentially trigger upload of new index buffer range.
-    * XXX: do we really care?
-    */
-   if (brw->curr.min_index != info->min_index ||
-       brw->curr.max_index != info->max_index) 
-   { 
-      brw->curr.min_index = info->min_index;
-      brw->curr.max_index = info->max_index;
-      brw->state.dirty.mesa |= PIPE_NEW_INDEX_RANGE;
-   }
-
-
-   /* Make a first attempt at drawing:
-    */
-   ret = try_draw_range_elements(brw, info->indexed,
-         hw_prim, info->start, info->count);
-
-   /* Otherwise, flush and retry:
-    */
-   if (ret != 0) {
-      brw_context_flush( brw );
-      ret = try_draw_range_elements(brw, info->indexed,
-            hw_prim, info->start, info->count);
-      assert(ret == 0);
-   }
-}
-
-
-boolean brw_draw_init( struct brw_context *brw )
-{
-   /* Register our drawing function: 
-    */
-   brw->base.draw_vbo = brw_draw_vbo;
-
-   /* Create helpers for uploading data in user buffers:
-    */
-   brw->vb.upload_vertex = u_upload_create( &brw->base,
-                                           128 * 1024,
-                                           64,
-                                           PIPE_BIND_VERTEX_BUFFER );
-   if (brw->vb.upload_vertex == NULL)
-      return FALSE;
-
-   brw->vb.upload_index = u_upload_create( &brw->base,
-                                          32 * 1024,
-                                          64,
-                                          PIPE_BIND_INDEX_BUFFER );
-   if (brw->vb.upload_index == NULL)
-      return FALSE;
-
-   return TRUE;
-}
-
-void brw_draw_cleanup( struct brw_context *brw )
-{
-   u_upload_destroy( brw->vb.upload_vertex );
-   u_upload_destroy( brw->vb.upload_index );
-
-   bo_reference(&brw->ib.bo, NULL);
-}
diff --git a/src/gallium/drivers/i965/brw_draw.h b/src/gallium/drivers/i965/brw_draw.h
deleted file mode 100644 (file)
index 8dc5dbc..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
- /**************************************************************************
- * 
- * Copyright 2005 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-#ifndef BRW_DRAW_H
-#define BRW_DRAW_H
-
-#include "brw_types.h"
-
-struct brw_context;
-
-boolean brw_draw_init( struct brw_context *brw );
-void brw_draw_cleanup( struct brw_context *brw );
-
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_draw_upload.c b/src/gallium/drivers/i965/brw_draw_upload.c
deleted file mode 100644 (file)
index 04ec5c8..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-#include "pipe/p_context.h"
-#include "util/u_inlines.h"
-
-#include "util/u_upload_mgr.h"
-#include "util/u_math.h"
-
-#include "brw_draw.h"
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_screen.h"
-#include "brw_batchbuffer.h"
-#include "brw_debug.h"
-#include "brw_resource.h"
-
-
-
-
-static unsigned get_index_type(int type)
-{
-   switch (type) {
-   case 1: return BRW_INDEX_BYTE;
-   case 2: return BRW_INDEX_WORD;
-   case 4: return BRW_INDEX_DWORD;
-   default: assert(0); return 0;
-   }
-}
-
-
-static int brw_prepare_vertices(struct brw_context *brw)
-{
-   unsigned int min_index = brw->curr.min_index;
-   unsigned int max_index = brw->curr.max_index;
-   GLuint i;
-   int ret;
-
-   if (BRW_DEBUG & DEBUG_VERTS)
-      debug_printf("%s %d..%d\n", __FUNCTION__, min_index, max_index);
-
-
-   for (i = 0; i < brw->curr.num_vertex_buffers; i++) {
-      struct pipe_vertex_buffer *vb = &brw->curr.vertex_buffer[i];
-      struct brw_winsys_buffer *bo;
-      struct pipe_resource *upload_buf = NULL;
-      unsigned offset;
-      
-      if (BRW_DEBUG & DEBUG_VERTS)
-        debug_printf("%s vb[%d] user:%d offset:0x%x sz:0x%x stride:0x%x\n",
-                     __FUNCTION__, i,
-                     brw_buffer_is_user_buffer(vb->buffer),
-                     vb->buffer_offset,
-                     vb->buffer->width0,
-                     vb->stride);
-
-      if (brw_buffer_is_user_buffer(vb->buffer)) {
-
-        /* XXX: simplify this.  Stop the state trackers from generating
-         * zero-stride buffers & have them use additional constants (or
-         * add support for >1 constant buffer) instead.
-         */
-        unsigned size = (vb->stride == 0 ? 
-                         vb->buffer->width0 - vb->buffer_offset :
-                         MAX2(vb->buffer->width0 - vb->buffer_offset,
-                              vb->stride * (max_index + 1 - min_index)));
-        boolean flushed;
-
-        ret = u_upload_buffer( brw->vb.upload_vertex,
-                               0,
-                               vb->buffer_offset + min_index * vb->stride,
-                               size,
-                               vb->buffer,
-                               &offset,
-                               &upload_buf,
-                               &flushed );
-        if (ret)
-           return ret;
-
-        bo = brw_buffer(upload_buf)->bo;
-        
-        assert(offset + size <= bo->size);
-      }
-      else
-      {
-        offset = vb->buffer_offset;
-        bo = brw_buffer(vb->buffer)->bo;
-      }
-
-      assert(offset < bo->size);
-      
-      /* Set up post-upload info about this vertex buffer:
-       */
-      brw->vb.vb[i].offset = offset;
-      brw->vb.vb[i].stride = vb->stride;
-      brw->vb.vb[i].vertex_count = (vb->stride == 0 ?
-                                   1 :
-                                   (bo->size - offset) / vb->stride);
-
-      bo_reference( &brw->vb.vb[i].bo,  bo );
-
-      /* Don't need to retain this reference.  We have a reference on
-       * the underlying winsys buffer:
-       */
-      pipe_resource_reference( &upload_buf, NULL );
-   }
-
-   brw->vb.nr_vb = i;
-   brw_prepare_query_begin(brw);
-
-   for (i = 0; i < brw->vb.nr_vb; i++) {
-      brw_add_validated_bo(brw, brw->vb.vb[i].bo);
-   }
-
-   return 0;
-}
-
-static int brw_emit_vertex_buffers( struct brw_context *brw )
-{
-   int i;
-
-   /* If the VS doesn't read any inputs (calculating vertex position from
-    * a state variable for some reason, for example), just bail.
-    *
-    * The stale VB state stays in place, but they don't do anything unless
-    * a VE loads from them.
-    */
-   if (brw->vb.nr_vb == 0) {
-      if (BRW_DEBUG & DEBUG_VERTS)
-        debug_printf("%s: no active vertex buffers\n", __FUNCTION__);
-
-      return 0;
-   }
-
-   /* Emit VB state packets.
-    */
-   BEGIN_BATCH(1 + brw->vb.nr_vb * 4, IGNORE_CLIPRECTS);
-   OUT_BATCH((CMD_VERTEX_BUFFER << 16) |
-            ((1 + brw->vb.nr_vb * 4) - 2));
-
-   for (i = 0; i < brw->vb.nr_vb; i++) {
-      OUT_BATCH((i << BRW_VB0_INDEX_SHIFT) |
-               BRW_VB0_ACCESS_VERTEXDATA |
-               (brw->vb.vb[i].stride << BRW_VB0_PITCH_SHIFT));
-      OUT_RELOC(brw->vb.vb[i].bo,
-               BRW_USAGE_VERTEX,
-               brw->vb.vb[i].offset);
-      if (brw->gen == 5) {
-        OUT_RELOC(brw->vb.vb[i].bo,
-                  BRW_USAGE_VERTEX,
-                  brw->vb.vb[i].bo->size - 1);
-      } else
-        OUT_BATCH(brw->vb.vb[i].stride ? brw->vb.vb[i].vertex_count : 0);
-      OUT_BATCH(0); /* Instance data step rate */
-   }
-   ADVANCE_BATCH();
-   return 0;
-}
-
-
-
-static int brw_emit_vertex_elements(struct brw_context *brw)
-{
-   const struct brw_vertex_element_packet *brw_velems = brw->curr.velems;
-   unsigned size = brw_velems->header.length + 2;
-
-   /* why is this here */
-   brw_emit_query_begin(brw);
-
-   brw_batchbuffer_data(brw->batch, brw_velems, size * 4, IGNORE_CLIPRECTS);
-
-   return 0;
-}
-
-
-static int brw_emit_vertices( struct brw_context *brw )
-{
-   int ret;
-
-   ret = brw_emit_vertex_buffers( brw );
-   if (ret)
-      return ret;
-
-   /* XXX should separate this? */
-   ret = brw_emit_vertex_elements( brw );
-   if (ret)
-      return ret;
-
-   return 0;
-}
-
-
-const struct brw_tracked_state brw_vertices = {
-   .dirty = {
-      .mesa = (PIPE_NEW_INDEX_RANGE |
-               PIPE_NEW_VERTEX_BUFFER |
-               PIPE_NEW_VERTEX_ELEMENT),
-      .brw = BRW_NEW_BATCH,
-      .cache = 0,
-   },
-   .prepare = brw_prepare_vertices,
-   .emit = brw_emit_vertices,
-};
-
-
-static int brw_prepare_indices(struct brw_context *brw)
-{
-   struct pipe_resource *index_buffer = brw->curr.index_buffer;
-   struct pipe_resource *upload_buf = NULL;
-   struct brw_winsys_buffer *bo = NULL;
-   GLuint offset;
-   GLuint index_size, index_offset;
-   GLuint ib_size;
-   int ret;
-
-   if (index_buffer == NULL)
-      return 0;
-
-   if (BRW_DEBUG & DEBUG_VERTS)
-      debug_printf("%s: index_size:%d index_buffer->size:%d\n",
-                  __FUNCTION__,
-                  brw->curr.index_size,
-                  brw->curr.index_buffer->width0);
-
-   ib_size = index_buffer->width0;
-   index_size = brw->curr.index_size;
-   index_offset = brw->curr.index_offset;
-
-   /* Turn userbuffer into a proper hardware buffer?
-    */
-   if (brw_buffer_is_user_buffer(index_buffer)) {
-      boolean flushed;
-
-      ret = u_upload_buffer( brw->vb.upload_index,
-                             0,
-                            index_offset,
-                            ib_size,
-                            index_buffer,
-                            &offset,
-                            &upload_buf,
-                            &flushed );
-      if (ret)
-        return ret;
-
-      bo = brw_buffer(upload_buf)->bo;
-
-      /* XXX: annotate the userbuffer with the upload information so
-       * that successive calls don't get re-uploaded.
-       */
-   }
-   else {
-      bo = brw_buffer(index_buffer)->bo;
-      ib_size = bo->size;
-      offset = index_offset;
-   }
-
-   /* Use CMD_3D_PRIM's start_vertex_offset to avoid re-uploading the
-    * index buffer state when we're just moving the start index of our
-    * drawing.
-    *
-    * In gallium this will happen in the case where successive draw
-    * calls are made with (distinct?) userbuffers, but the upload_mgr
-    * places the data into a single winsys buffer.
-    * 
-    * This statechange doesn't raise any state flags and is always
-    * just merged into the final draw packet:
-    */
-   if (1) {
-      assert((offset & (index_size - 1)) == 0);
-      brw->ib.start_vertex_offset = offset / index_size;
-   }
-
-   /* These statechanges trigger a new CMD_INDEX_BUFFER packet:
-    */
-   if (brw->ib.bo != bo ||
-       brw->ib.size != ib_size)
-   {
-      bo_reference(&brw->ib.bo, bo);
-      brw->ib.size = ib_size;
-      brw->state.dirty.brw |= BRW_NEW_INDEX_BUFFER;
-   }
-
-   pipe_resource_reference( &upload_buf, NULL );
-   brw_add_validated_bo(brw, brw->ib.bo);
-   return 0;
-}
-
-const struct brw_tracked_state brw_indices = {
-   .dirty = {
-      .mesa = PIPE_NEW_INDEX_BUFFER,
-      .brw = 0,
-      .cache = 0,
-   },
-   .prepare = brw_prepare_indices,
-};
-
-static int brw_emit_index_buffer(struct brw_context *brw)
-{
-   /* Emit the indexbuffer packet:
-    */
-   if (brw->ib.bo)
-   {
-      struct brw_indexbuffer ib;
-
-      memset(&ib, 0, sizeof(ib));
-
-      ib.header.bits.opcode = CMD_INDEX_BUFFER;
-      ib.header.bits.length = sizeof(ib)/4 - 2;
-      ib.header.bits.index_format = get_index_type(brw->ib.size);
-      ib.header.bits.cut_index_enable = 0;
-
-      BEGIN_BATCH(4, IGNORE_CLIPRECTS);
-      OUT_BATCH( ib.header.dword );
-      OUT_RELOC(brw->ib.bo,
-               BRW_USAGE_VERTEX,
-               brw->ib.offset);
-      OUT_RELOC(brw->ib.bo,
-               BRW_USAGE_VERTEX,
-               brw->ib.offset + brw->ib.size - 1);
-      OUT_BATCH( 0 );
-      ADVANCE_BATCH();
-   }
-
-   return 0;
-}
-
-const struct brw_tracked_state brw_index_buffer = {
-   .dirty = {
-      .mesa = 0,
-      .brw = BRW_NEW_BATCH | BRW_NEW_INDEX_BUFFER,
-      .cache = 0,
-   },
-   .emit = brw_emit_index_buffer,
-};
diff --git a/src/gallium/drivers/i965/brw_eu.c b/src/gallium/drivers/i965/brw_eu.c
deleted file mode 100644 (file)
index a8fcb5f..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-  
-#include "util/u_memory.h"
-
-#include "brw_context.h"
-#include "brw_defines.h"
-#include "brw_eu.h"
-
-
-
-/* How does predicate control work when execution_size != 8?  Do I
- * need to test/set for 0xffff when execution_size is 16?
- */
-void brw_set_predicate_control_flag_value( struct brw_compile *p, GLuint value )
-{
-   p->current->header.predicate_control = BRW_PREDICATE_NONE;
-
-   if (value != 0xff) {
-      if (value != p->flag_value) {
-        brw_push_insn_state(p);
-        brw_MOV(p, brw_flag_reg(), brw_imm_uw(value));
-        p->flag_value = value;
-        brw_pop_insn_state(p);
-      }
-
-      p->current->header.predicate_control = BRW_PREDICATE_NORMAL;
-   }   
-}
-
-void brw_set_predicate_control( struct brw_compile *p, GLuint pc )
-{
-   p->current->header.predicate_control = pc;
-}
-
-void brw_set_conditionalmod( struct brw_compile *p, GLuint conditional )
-{
-   p->current->header.destreg__conditionalmod = conditional;
-}
-
-void brw_set_access_mode( struct brw_compile *p, GLuint access_mode )
-{
-   p->current->header.access_mode = access_mode;
-}
-
-void brw_set_compression_control( struct brw_compile *p, GLboolean compression_control )
-{
-   p->current->header.compression_control = compression_control;
-}
-
-void brw_set_mask_control( struct brw_compile *p, GLuint value )
-{
-   p->current->header.mask_control = value;
-}
-
-void brw_set_saturate( struct brw_compile *p, GLuint value )
-{
-   p->current->header.saturate = value;
-}
-
-void brw_push_insn_state( struct brw_compile *p )
-{
-   assert(p->current != &p->stack[BRW_EU_MAX_INSN_STACK-1]);
-   memcpy(p->current+1, p->current, sizeof(struct brw_instruction));
-   p->current++;   
-}
-
-void brw_pop_insn_state( struct brw_compile *p )
-{
-   assert(p->current != p->stack);
-   p->current--;
-}
-
-
-/***********************************************************************
- */
-void brw_init_compile( struct brw_context *brw, struct brw_compile *p )
-{
-   p->brw = brw;
-   p->nr_insn = 0;
-   p->current = p->stack;
-   memset(p->current, 0, sizeof(p->current[0]));
-
-   /* Some defaults?
-    */
-   brw_set_mask_control(p, BRW_MASK_ENABLE); /* what does this do? */
-   brw_set_saturate(p, 0);
-   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-   brw_set_predicate_control_flag_value(p, 0xff); 
-}
-
-
-enum pipe_error brw_get_program( struct brw_compile *p,
-                                 const GLuint **data,
-                                 GLuint *sz )
-{
-   GLuint i;
-
-   for (i = 0; i < 8; i++)
-      brw_NOP(p);
-
-   /* Is the generated program malformed for some reason?
-    */
-   if (p->error)
-      return PIPE_ERROR_BAD_INPUT;
-
-   *sz = p->nr_insn * sizeof(struct brw_instruction);
-   *data = (const GLuint *)p->store;
-   return PIPE_OK;
-}
-
-
-
-/**
- * Subroutine calls require special attention.
- * Mesa instructions may be expanded into multiple hardware instructions
- * so the prog_instruction::BranchTarget field can't be used as an index
- * into the hardware instructions.
- *
- * The BranchTarget field isn't needed, however.  Mesa's GLSL compiler
- * emits CAL and BGNSUB instructions with labels that can be used to map
- * subroutine calls to actual subroutine code blocks.
- *
- * The structures and function here implement patching of CAL instructions
- * so they jump to the right subroutine code...
- */
-
-
-/**
- * For each OPCODE_BGNSUB we create one of these.
- */
-struct brw_eu_label
-{
-   GLuint label;     /**< the label number */
-   GLuint position;  /**< the position of the brw instruction for this label */
-   struct brw_eu_label *next;  /**< next in linked list */
-};
-
-
-/**
- * For each OPCODE_CAL we create one of these.
- */
-struct brw_eu_call
-{
-   GLuint call_inst_pos;  /**< location of the CAL instruction */
-   GLuint label;
-   struct brw_eu_call *next;  /**< next in linked list */
-};
-
-
-/**
- * Called for each OPCODE_BGNSUB.
- */
-void
-brw_save_label(struct brw_compile *c, unsigned l, GLuint position)
-{
-   struct brw_eu_label *label = CALLOC_STRUCT(brw_eu_label);
-   label->label = l;
-   label->position = position;
-   label->next = c->first_label;
-   c->first_label = label;
-}
-
-
-/**
- * Called for each OPCODE_CAL.
- */
-void
-brw_save_call(struct brw_compile *c, GLuint label, GLuint call_pos)
-{
-   struct brw_eu_call *call = CALLOC_STRUCT(brw_eu_call);
-   call->call_inst_pos = call_pos;
-   call->label = label;
-   call->next = c->first_call;
-   c->first_call = call;
-}
-
-
-/**
- * Lookup a label, return label's position/offset.
- */
-static GLuint
-brw_lookup_label(struct brw_compile *c, unsigned l)
-{
-   const struct brw_eu_label *label;
-   for (label = c->first_label; label; label = label->next) {
-      if (l == label->label) {
-         return label->position;
-      }
-   }
-   abort();  /* should never happen */
-   return ~0;
-}
-
-
-/**
- * When we're done generating code, this function is called to resolve
- * subroutine calls.
- */
-void
-brw_resolve_cals(struct brw_compile *c)
-{
-    const struct brw_eu_call *call;
-
-    for (call = c->first_call; call; call = call->next) {
-        const GLuint sub_loc = brw_lookup_label(c, call->label);
-       struct brw_instruction *brw_call_inst = &c->store[call->call_inst_pos];
-       struct brw_instruction *brw_sub_inst = &c->store[sub_loc];
-       GLint offset = brw_sub_inst - brw_call_inst;
-
-       /* patch brw_inst1 to point to brw_inst2 */
-       brw_set_src1(brw_call_inst, brw_imm_d(offset * 16));
-    }
-
-    /* free linked list of calls */
-    {
-        struct brw_eu_call *call, *next;
-        for (call = c->first_call; call; call = next) {
-           next = call->next;
-           FREE(call);
-       }
-       c->first_call = NULL;
-    }
-
-    /* free linked list of labels */
-    {
-        struct brw_eu_label *label, *next;
-       for (label = c->first_label; label; label = next) {
-           next = label->next;
-           FREE(label);
-       }
-       c->first_label = NULL;
-    }
-}
diff --git a/src/gallium/drivers/i965/brw_eu.h b/src/gallium/drivers/i965/brw_eu.h
deleted file mode 100644 (file)
index af509b2..0000000
+++ /dev/null
@@ -1,992 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-   
-
-#ifndef BRW_EU_H
-#define BRW_EU_H
-
-#include "util/u_debug.h"
-#include "pipe/p_defines.h"
-
-#include "brw_structs.h"
-#include "brw_defines.h"
-
-#define BRW_SWIZZLE4(a,b,c,d) (((a)<<0) | ((b)<<2) | ((c)<<4) | ((d)<<6))
-#define BRW_GET_SWZ(swz, idx) (((swz) >> ((idx)*2)) & 0x3)
-
-#define BRW_SWIZZLE_NOOP      BRW_SWIZZLE4(0,1,2,3)
-#define BRW_SWIZZLE_XYZW      BRW_SWIZZLE4(0,1,2,3)
-#define BRW_SWIZZLE_XXXX      BRW_SWIZZLE4(0,0,0,0)
-#define BRW_SWIZZLE_XYXY      BRW_SWIZZLE4(0,1,0,1)
-
-#define BRW_WRITEMASK_NONE     0x00
-#define BRW_WRITEMASK_X        0x01
-#define BRW_WRITEMASK_Y        0x02
-#define BRW_WRITEMASK_XY       0x03
-#define BRW_WRITEMASK_Z        0x04
-#define BRW_WRITEMASK_XZ       0x05
-#define BRW_WRITEMASK_YZ       0x06
-#define BRW_WRITEMASK_XYZ      0x07
-#define BRW_WRITEMASK_W        0x08
-#define BRW_WRITEMASK_XW       0x09
-#define BRW_WRITEMASK_YW       0x0A
-#define BRW_WRITEMASK_XYW      0x0B
-#define BRW_WRITEMASK_ZW       0x0C
-#define BRW_WRITEMASK_XZW      0x0D
-#define BRW_WRITEMASK_YZW      0x0E
-#define BRW_WRITEMASK_XYZW     0x0F
-
-
-#define REG_SIZE (8*4)
-
-
-/* These aren't hardware structs, just something useful for us to pass around:
- *
- * Align1 operation has a lot of control over input ranges.  Used in
- * WM programs to implement shaders decomposed into "channel serial"
- * or "structure of array" form:
- */
-struct brw_reg
-{
-   GLuint type:4;
-   GLuint file:2;
-   GLuint nr:8;
-   GLuint subnr:5;             /* :1 in align16 */
-   GLuint negate:1;            /* source only */
-   GLuint abs:1;               /* source only */
-   GLuint vstride:4;           /* source only */
-   GLuint width:3;             /* src only, align1 only */
-   GLuint hstride:2;                   /* align1 only */
-   GLuint address_mode:1;      /* relative addressing, hopefully! */
-   GLuint pad0:1;
-
-   union {      
-      struct {
-        GLuint swizzle:8;              /* src only, align16 only */
-        GLuint writemask:4;            /* dest only, align16 only */
-        GLint  indirect_offset:10;     /* relative addressing offset */
-        GLuint pad1:10;                /* two dwords total */
-      } bits;
-
-      GLfloat f;
-      GLint   d;
-      GLuint ud;
-   } dw1;      
-};
-
-
-struct brw_indirect {
-   GLuint addr_subnr:4;
-   GLint addr_offset:10;
-   GLuint pad:18;
-};
-
-
-struct brw_eu_label;
-struct brw_eu_call;
-
-
-
-#define BRW_EU_MAX_INSN_STACK 5
-#define BRW_EU_MAX_INSN 10000
-
-struct brw_compile {
-   struct brw_instruction store[BRW_EU_MAX_INSN];
-   GLuint nr_insn;
-
-   /* Allow clients to push/pop instruction state:
-    */
-   struct brw_instruction stack[BRW_EU_MAX_INSN_STACK];
-   struct brw_instruction *current;
-
-   GLuint flag_value;
-   GLboolean single_program_flow;
-   struct brw_context *brw;
-
-   struct brw_eu_label *first_label;  /**< linked list of labels */
-   struct brw_eu_call *first_call;    /**< linked list of CALs */
-
-   boolean error;
-};
-
-
-void
-brw_save_label(struct brw_compile *c, unsigned label, GLuint position);
-
-void
-brw_save_call(struct brw_compile *c, unsigned label, GLuint call_pos);
-
-void
-brw_resolve_cals(struct brw_compile *c);
-
-
-
-static INLINE int type_sz( GLuint type )
-{
-   switch( type ) {
-   case BRW_REGISTER_TYPE_UD:
-   case BRW_REGISTER_TYPE_D:
-   case BRW_REGISTER_TYPE_F:
-      return 4;
-   case BRW_REGISTER_TYPE_HF:
-   case BRW_REGISTER_TYPE_UW:
-   case BRW_REGISTER_TYPE_W:
-      return 2;
-   case BRW_REGISTER_TYPE_UB:
-   case BRW_REGISTER_TYPE_B:
-      return 1;
-   default:
-      return 0;
-   }
-}
-
-/**
- * Construct a brw_reg.
- * \param file  one of the BRW_x_REGISTER_FILE values
- * \param nr  register number/index
- * \param subnr  register sub number
- * \param type  one of BRW_REGISTER_TYPE_x
- * \param vstride  one of BRW_VERTICAL_STRIDE_x
- * \param width  one of BRW_WIDTH_x
- * \param hstride  one of BRW_HORIZONTAL_STRIDE_x
- * \param swizzle  one of BRW_SWIZZLE_x
- * \param writemask  BRW_WRITEMASK_X/Y/Z/W bitfield
- */
-static INLINE struct brw_reg brw_reg( GLuint file,
-                                      GLuint nr,
-                                      GLuint subnr,
-                                      GLuint type,
-                                      GLuint vstride,
-                                      GLuint width,
-                                      GLuint hstride,
-                                      GLuint swizzle,
-                                      GLuint writemask )
-{
-   struct brw_reg reg;
-   if (type == BRW_GENERAL_REGISTER_FILE)
-      assert(nr < BRW_MAX_GRF);
-   else if (type == BRW_MESSAGE_REGISTER_FILE)
-      assert(nr < BRW_MAX_MRF);
-   else if (type == BRW_ARCHITECTURE_REGISTER_FILE)
-      assert(nr <= BRW_ARF_IP);
-
-   reg.type = type;
-   reg.file = file;
-   reg.nr = nr;
-   reg.subnr = subnr * type_sz(type);
-   reg.negate = 0;
-   reg.abs = 0;
-   reg.vstride = vstride;
-   reg.width = width;
-   reg.hstride = hstride;
-   reg.address_mode = BRW_ADDRESS_DIRECT;
-   reg.pad0 = 0;
-
-   /* Could do better: If the reg is r5.3<0;1,0>, we probably want to
-    * set swizzle and writemask to W, as the lower bits of subnr will
-    * be lost when converted to align16.  This is probably too much to
-    * keep track of as you'd want it adjusted by suboffset(), etc.
-    * Perhaps fix up when converting to align16?
-    */
-   reg.dw1.bits.swizzle = swizzle;
-   reg.dw1.bits.writemask = writemask;
-   reg.dw1.bits.indirect_offset = 0;
-   reg.dw1.bits.pad1 = 0;
-   return reg;
-}
-
-/** Construct float[16] register */
-static INLINE struct brw_reg brw_vec16_reg( GLuint file,
-                                             GLuint nr,
-                                             GLuint subnr )
-{
-   return brw_reg(file,
-                 nr,
-                 subnr,
-                 BRW_REGISTER_TYPE_F,
-                 BRW_VERTICAL_STRIDE_16,
-                 BRW_WIDTH_16,
-                 BRW_HORIZONTAL_STRIDE_1,
-                 BRW_SWIZZLE_XYZW,
-                 BRW_WRITEMASK_XYZW);
-}
-
-/** Construct float[8] register */
-static INLINE struct brw_reg brw_vec8_reg( GLuint file,
-                                            GLuint nr,
-                                            GLuint subnr )
-{
-   return brw_reg(file,
-                 nr,
-                 subnr,
-                 BRW_REGISTER_TYPE_F,
-                 BRW_VERTICAL_STRIDE_8,
-                 BRW_WIDTH_8,
-                 BRW_HORIZONTAL_STRIDE_1,
-                 BRW_SWIZZLE_XYZW,
-                 BRW_WRITEMASK_XYZW);
-}
-
-/** Construct float[4] register */
-static INLINE struct brw_reg brw_vec4_reg( GLuint file,
-                                             GLuint nr,
-                                             GLuint subnr )
-{
-   return brw_reg(file,
-                 nr,
-                 subnr,
-                 BRW_REGISTER_TYPE_F,
-                 BRW_VERTICAL_STRIDE_4,
-                 BRW_WIDTH_4,
-                 BRW_HORIZONTAL_STRIDE_1,
-                 BRW_SWIZZLE_XYZW,
-                 BRW_WRITEMASK_XYZW);
-}
-
-/** Construct float[2] register */
-static INLINE struct brw_reg brw_vec2_reg( GLuint file,
-                                             GLuint nr,
-                                             GLuint subnr )
-{
-   return brw_reg(file,
-                 nr,
-                 subnr,
-                 BRW_REGISTER_TYPE_F,
-                 BRW_VERTICAL_STRIDE_2,
-                 BRW_WIDTH_2,
-                 BRW_HORIZONTAL_STRIDE_1,
-                 BRW_SWIZZLE_XYXY,
-                 BRW_WRITEMASK_XY);
-}
-
-/** Construct float[1] register */
-static INLINE struct brw_reg brw_vec1_reg( GLuint file,
-                                            GLuint nr,
-                                            GLuint subnr )
-{
-   return brw_reg(file,
-                 nr,
-                 subnr,
-                 BRW_REGISTER_TYPE_F,
-                 BRW_VERTICAL_STRIDE_0,
-                 BRW_WIDTH_1,
-                 BRW_HORIZONTAL_STRIDE_0,
-                 BRW_SWIZZLE_XXXX,
-                 BRW_WRITEMASK_X);
-}
-
-
-static INLINE struct brw_reg retype( struct brw_reg reg,
-                                      GLuint type )
-{
-   reg.type = type;
-   return reg;
-}
-
-static INLINE struct brw_reg suboffset( struct brw_reg reg,
-                                         GLuint delta )
-{   
-   reg.subnr += delta * type_sz(reg.type);
-   return reg;
-}
-
-
-static INLINE struct brw_reg offset( struct brw_reg reg,
-                                      GLuint delta )
-{
-   reg.nr += delta;
-   return reg;
-}
-
-
-static INLINE struct brw_reg byte_offset( struct brw_reg reg,
-                                           GLuint bytes )
-{
-   GLuint newoffset = reg.nr * REG_SIZE + reg.subnr + bytes;
-   reg.nr = newoffset / REG_SIZE;
-   reg.subnr = newoffset % REG_SIZE;
-   return reg;
-}
-   
-
-/** Construct unsigned word[16] register */
-static INLINE struct brw_reg brw_uw16_reg( GLuint file,
-                                            GLuint nr,
-                                            GLuint subnr )
-{
-   return suboffset(retype(brw_vec16_reg(file, nr, 0), BRW_REGISTER_TYPE_UW), subnr);
-}
-
-/** Construct unsigned word[8] register */
-static INLINE struct brw_reg brw_uw8_reg( GLuint file,
-                                           GLuint nr,
-                                           GLuint subnr )
-{
-   return suboffset(retype(brw_vec8_reg(file, nr, 0), BRW_REGISTER_TYPE_UW), subnr);
-}
-
-/** Construct unsigned word[1] register */
-static INLINE struct brw_reg brw_uw1_reg( GLuint file,
-                                           GLuint nr,
-                                           GLuint subnr )
-{
-   return suboffset(retype(brw_vec1_reg(file, nr, 0), BRW_REGISTER_TYPE_UW), subnr);
-}
-
-static INLINE struct brw_reg brw_imm_reg( GLuint type )
-{
-   return brw_reg( BRW_IMMEDIATE_VALUE,
-                  0,
-                  0,
-                  type,
-                  BRW_VERTICAL_STRIDE_0,
-                  BRW_WIDTH_1,
-                  BRW_HORIZONTAL_STRIDE_0,
-                  0,
-                  0);      
-}
-
-/** Construct float immediate register */
-static INLINE struct brw_reg brw_imm_f( GLfloat f )
-{
-   struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_F);
-   imm.dw1.f = f;
-   return imm;
-}
-
-/** Construct integer immediate register */
-static INLINE struct brw_reg brw_imm_d( GLint d )
-{
-   struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_D);
-   imm.dw1.d = d;
-   return imm;
-}
-
-/** Construct uint immediate register */
-static INLINE struct brw_reg brw_imm_ud( GLuint ud )
-{
-   struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_UD);
-   imm.dw1.ud = ud;
-   return imm;
-}
-
-/** Construct ushort immediate register */
-static INLINE struct brw_reg brw_imm_uw( GLushort uw )
-{
-   struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_UW);
-   imm.dw1.ud = uw | (uw << 16);
-   return imm;
-}
-
-/** Construct short immediate register */
-static INLINE struct brw_reg brw_imm_w( GLshort w )
-{
-   struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_W);
-   imm.dw1.d = w | (w << 16);
-   return imm;
-}
-
-/* brw_imm_b and brw_imm_ub aren't supported by hardware - the type
- * numbers alias with _V and _VF below:
- */
-
-/** Construct vector of eight signed half-byte values */
-static INLINE struct brw_reg brw_imm_v( GLuint v )
-{
-   struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_V);
-   imm.vstride = BRW_VERTICAL_STRIDE_0;
-   imm.width = BRW_WIDTH_8;
-   imm.hstride = BRW_HORIZONTAL_STRIDE_1;
-   imm.dw1.ud = v;
-   return imm;
-}
-
-/** Construct vector of four 8-bit float values */
-static INLINE struct brw_reg brw_imm_vf( GLuint v )
-{
-   struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_VF);
-   imm.vstride = BRW_VERTICAL_STRIDE_0;
-   imm.width = BRW_WIDTH_4;
-   imm.hstride = BRW_HORIZONTAL_STRIDE_1;
-   imm.dw1.ud = v;
-   return imm;
-}
-
-#define VF_ZERO 0x0
-#define VF_ONE  0x30
-#define VF_NEG  (1<<7)
-
-static INLINE struct brw_reg brw_imm_vf4( GLuint v0, 
-                                           GLuint v1, 
-                                           GLuint v2,
-                                           GLuint v3)
-{
-   struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_VF);
-   imm.vstride = BRW_VERTICAL_STRIDE_0;
-   imm.width = BRW_WIDTH_4;
-   imm.hstride = BRW_HORIZONTAL_STRIDE_1;
-   imm.dw1.ud = ((v0 << 0) |
-                (v1 << 8) |
-                (v2 << 16) |
-                (v3 << 24));
-   return imm;
-}
-
-
-static INLINE struct brw_reg brw_address( struct brw_reg reg )
-{
-   return brw_imm_uw(reg.nr * REG_SIZE + reg.subnr);
-}
-
-/** Construct float[1] general-purpose register */
-static INLINE struct brw_reg brw_vec1_grf( GLuint nr, GLuint subnr )
-{
-   return brw_vec1_reg(BRW_GENERAL_REGISTER_FILE, nr, subnr);
-}
-
-/** Construct float[2] general-purpose register */
-static INLINE struct brw_reg brw_vec2_grf( GLuint nr, GLuint subnr )
-{
-   return brw_vec2_reg(BRW_GENERAL_REGISTER_FILE, nr, subnr);
-}
-
-/** Construct float[4] general-purpose register */
-static INLINE struct brw_reg brw_vec4_grf( GLuint nr, GLuint subnr )
-{
-   return brw_vec4_reg(BRW_GENERAL_REGISTER_FILE, nr, subnr);
-}
-
-/** Construct float[8] general-purpose register */
-static INLINE struct brw_reg brw_vec8_grf( GLuint nr, GLuint subnr )
-{
-   return brw_vec8_reg(BRW_GENERAL_REGISTER_FILE, nr, subnr);
-}
-
-
-static INLINE struct brw_reg brw_uw8_grf( GLuint nr, GLuint subnr )
-{
-   return brw_uw8_reg(BRW_GENERAL_REGISTER_FILE, nr, subnr);
-}
-
-static INLINE struct brw_reg brw_uw16_grf( GLuint nr, GLuint subnr )
-{
-   return brw_uw16_reg(BRW_GENERAL_REGISTER_FILE, nr, subnr);
-}
-
-
-/** Construct null register (usually used for setting condition codes) */
-static INLINE struct brw_reg brw_null_reg( void )
-{
-   return brw_vec8_reg(BRW_ARCHITECTURE_REGISTER_FILE, 
-                      BRW_ARF_NULL, 
-                      0);
-}
-
-static INLINE struct brw_reg brw_address_reg( GLuint subnr )
-{
-   return brw_uw1_reg(BRW_ARCHITECTURE_REGISTER_FILE, 
-                     BRW_ARF_ADDRESS, 
-                     subnr);
-}
-
-/* If/else instructions break in align16 mode if writemask & swizzle
- * aren't xyzw.  This goes against the convention for other scalar
- * regs:
- */
-static INLINE struct brw_reg brw_ip_reg( void )
-{
-   return brw_reg(BRW_ARCHITECTURE_REGISTER_FILE, 
-                 BRW_ARF_IP, 
-                 0,
-                 BRW_REGISTER_TYPE_UD,
-                 BRW_VERTICAL_STRIDE_4, /* ? */
-                 BRW_WIDTH_1,
-                 BRW_HORIZONTAL_STRIDE_0,
-                 BRW_SWIZZLE_XYZW, /* NOTE! */
-                 BRW_WRITEMASK_XYZW); /* NOTE! */
-}
-
-static INLINE struct brw_reg brw_acc_reg( void )
-{
-   return brw_vec8_reg(BRW_ARCHITECTURE_REGISTER_FILE, 
-                      BRW_ARF_ACCUMULATOR, 
-                      0);
-}
-
-
-static INLINE struct brw_reg brw_flag_reg( void )
-{
-   return brw_uw1_reg(BRW_ARCHITECTURE_REGISTER_FILE,
-                     BRW_ARF_FLAG,
-                     0);
-}
-
-
-static INLINE struct brw_reg brw_mask_reg( GLuint subnr )
-{
-   return brw_uw1_reg(BRW_ARCHITECTURE_REGISTER_FILE,
-                     BRW_ARF_MASK,
-                     subnr);
-}
-
-static INLINE struct brw_reg brw_message_reg( GLuint nr )
-{
-   assert(nr < BRW_MAX_MRF);
-   return brw_vec8_reg(BRW_MESSAGE_REGISTER_FILE,
-                      nr,
-                      0);
-}
-
-
-
-
-/* This is almost always called with a numeric constant argument, so
- * make things easy to evaluate at compile time:
- */
-static INLINE GLuint cvt( GLuint val )
-{
-   switch (val) {
-   case 0: return 0;
-   case 1: return 1;
-   case 2: return 2;
-   case 4: return 3;
-   case 8: return 4;
-   case 16: return 5;
-   case 32: return 6;
-   }
-   return 0;
-}
-
-static INLINE struct brw_reg stride( struct brw_reg reg,
-                                      GLuint vstride,
-                                      GLuint width,
-                                      GLuint hstride )
-{
-   reg.vstride = cvt(vstride);
-   reg.width = cvt(width) - 1;
-   reg.hstride = cvt(hstride);
-   return reg;
-}
-
-
-static INLINE struct brw_reg vec16( struct brw_reg reg )
-{
-   return stride(reg, 16,16,1);
-}
-
-static INLINE struct brw_reg vec8( struct brw_reg reg )
-{
-   return stride(reg, 8,8,1);
-}
-
-static INLINE struct brw_reg vec4( struct brw_reg reg )
-{
-   return stride(reg, 4,4,1);
-}
-
-static INLINE struct brw_reg vec2( struct brw_reg reg )
-{
-   return stride(reg, 2,2,1);
-}
-
-static INLINE struct brw_reg vec1( struct brw_reg reg )
-{
-   return stride(reg, 0,1,0);
-}
-
-
-static INLINE struct brw_reg get_element( struct brw_reg reg, GLuint elt )
-{
-   return vec1(suboffset(reg, elt));
-}
-
-static INLINE struct brw_reg get_element_ud( struct brw_reg reg, GLuint elt )
-{
-   return vec1(suboffset(retype(reg, BRW_REGISTER_TYPE_UD), elt));
-}
-
-
-static INLINE struct brw_reg brw_swizzle( struct brw_reg reg,
-                                           GLuint x,
-                                           GLuint y, 
-                                           GLuint z,
-                                           GLuint w)
-{
-   reg.dw1.bits.swizzle = BRW_SWIZZLE4(BRW_GET_SWZ(reg.dw1.bits.swizzle, x),
-                                      BRW_GET_SWZ(reg.dw1.bits.swizzle, y),
-                                      BRW_GET_SWZ(reg.dw1.bits.swizzle, z),
-                                      BRW_GET_SWZ(reg.dw1.bits.swizzle, w));
-   return reg;
-}
-
-
-static INLINE struct brw_reg brw_swizzle1( struct brw_reg reg,
-                                            GLuint x )
-{
-   return brw_swizzle(reg, x, x, x, x);
-}
-
-static INLINE struct brw_reg brw_writemask( struct brw_reg reg,
-                                             GLuint mask )
-{
-   reg.dw1.bits.writemask &= mask;
-   return reg;
-}
-
-static INLINE struct brw_reg brw_set_writemask( struct brw_reg reg,
-                                                 GLuint mask )
-{
-   reg.dw1.bits.writemask = mask;
-   return reg;
-}
-
-static INLINE struct brw_reg negate( struct brw_reg reg )
-{
-   reg.negate ^= 1;
-   return reg;
-}
-
-static INLINE struct brw_reg brw_abs( struct brw_reg reg )
-{
-   reg.abs = 1;
-   return reg;
-}
-
-/***********************************************************************
- */
-static INLINE struct brw_reg brw_vec4_indirect( GLuint subnr,
-                                                 GLint offset )
-{
-   struct brw_reg reg =  brw_vec4_grf(0, 0);
-   reg.subnr = subnr;
-   reg.address_mode = BRW_ADDRESS_REGISTER_INDIRECT_REGISTER;
-   reg.dw1.bits.indirect_offset = offset;
-   return reg;
-}
-
-static INLINE struct brw_reg brw_vec1_indirect( GLuint subnr,
-                                                 GLint offset )
-{
-   struct brw_reg reg =  brw_vec1_grf(0, 0);
-   reg.subnr = subnr;
-   reg.address_mode = BRW_ADDRESS_REGISTER_INDIRECT_REGISTER;
-   reg.dw1.bits.indirect_offset = offset;
-   return reg;
-}
-
-static INLINE struct brw_reg deref_4f(struct brw_indirect ptr, GLint offset)
-{
-   return brw_vec4_indirect(ptr.addr_subnr, ptr.addr_offset + offset);
-}
-
-static INLINE struct brw_reg deref_1f(struct brw_indirect ptr, GLint offset)
-{
-   return brw_vec1_indirect(ptr.addr_subnr, ptr.addr_offset + offset);
-}
-
-static INLINE struct brw_reg deref_4b(struct brw_indirect ptr, GLint offset)
-{
-   return retype(deref_4f(ptr, offset), BRW_REGISTER_TYPE_B);
-}
-
-static INLINE struct brw_reg deref_1uw(struct brw_indirect ptr, GLint offset)
-{
-   return retype(deref_1f(ptr, offset), BRW_REGISTER_TYPE_UW);
-}
-
-static INLINE struct brw_reg deref_1d(struct brw_indirect ptr, GLint offset)
-{
-   return retype(deref_1f(ptr, offset), BRW_REGISTER_TYPE_D);
-}
-
-static INLINE struct brw_reg deref_1ud(struct brw_indirect ptr, GLint offset)
-{
-   return retype(deref_1f(ptr, offset), BRW_REGISTER_TYPE_UD);
-}
-
-static INLINE struct brw_reg get_addr_reg(struct brw_indirect ptr)
-{
-   return brw_address_reg(ptr.addr_subnr);
-}
-
-static INLINE struct brw_indirect brw_indirect_offset( struct brw_indirect ptr, GLint offset )
-{
-   ptr.addr_offset += offset;
-   return ptr;
-}
-
-static INLINE struct brw_indirect brw_indirect( GLuint addr_subnr, GLint offset )
-{
-   struct brw_indirect ptr;
-   ptr.addr_subnr = addr_subnr;
-   ptr.addr_offset = offset;
-   ptr.pad = 0;
-   return ptr;
-}
-
-/** Do two brw_regs refer to the same register? */
-static INLINE GLboolean
-brw_same_reg(struct brw_reg r1, struct brw_reg r2)
-{
-   return r1.file == r2.file && r1.nr == r2.nr;
-}
-
-static INLINE struct brw_instruction *current_insn( struct brw_compile *p)
-{
-   return &p->store[p->nr_insn];
-}
-
-void brw_pop_insn_state( struct brw_compile *p );
-void brw_push_insn_state( struct brw_compile *p );
-void brw_set_mask_control( struct brw_compile *p, GLuint value );
-void brw_set_saturate( struct brw_compile *p, GLuint value );
-void brw_set_access_mode( struct brw_compile *p, GLuint access_mode );
-void brw_set_compression_control( struct brw_compile *p, GLboolean control );
-void brw_set_predicate_control_flag_value( struct brw_compile *p, GLuint value );
-void brw_set_predicate_control( struct brw_compile *p, GLuint pc );
-void brw_set_conditionalmod( struct brw_compile *p, GLuint conditional );
-
-void brw_init_compile( struct brw_context *, struct brw_compile *p );
-
-enum pipe_error brw_get_program( struct brw_compile *p, 
-                                 const GLuint **program,
-                                 GLuint *sz );
-
-
-/* Helpers for regular instructions:
- */
-#define ALU1(OP)                                       \
-struct brw_instruction *brw_##OP(struct brw_compile *p,        \
-             struct brw_reg dest,                      \
-             struct brw_reg src0);
-
-#define ALU2(OP)                                       \
-struct brw_instruction *brw_##OP(struct brw_compile *p,        \
-             struct brw_reg dest,                      \
-             struct brw_reg src0,                      \
-             struct brw_reg src1);
-
-ALU1(MOV)
-ALU2(SEL)
-ALU1(NOT)
-ALU2(AND)
-ALU2(OR)
-ALU2(XOR)
-ALU2(SHR)
-ALU2(SHL)
-ALU2(RSR)
-ALU2(RSL)
-ALU2(ASR)
-ALU2(JMPI)
-ALU2(ADD)
-ALU2(MUL)
-ALU1(FRC)
-ALU1(RNDD)
-ALU1(RNDZ)
-ALU2(MAC)
-ALU2(MACH)
-ALU1(LZD)
-ALU2(DP4)
-ALU2(DPH)
-ALU2(DP3)
-ALU2(DP2)
-ALU2(LINE)
-
-#undef ALU1
-#undef ALU2
-
-
-
-/* Helpers for SEND instruction:
- */
-void brw_urb_WRITE(struct brw_compile *p,
-                  struct brw_reg dest,
-                  GLuint msg_reg_nr,
-                  struct brw_reg src0,
-                  GLboolean allocate,
-                  GLboolean used,
-                  GLuint msg_length,
-                  GLuint response_length,
-                  GLboolean eot,
-                  GLboolean writes_complete,
-                  GLuint offset,
-                  GLuint swizzle);
-
-void brw_ff_sync(struct brw_compile *p,
-                  struct brw_reg dest,
-                  GLuint msg_reg_nr,
-                  struct brw_reg src0,
-                  GLboolean allocate,
-                  GLboolean used,
-                  GLuint msg_length,
-                  GLuint response_length,
-                  GLboolean eot,
-                  GLboolean writes_complete,
-                  GLuint offset,
-                  GLuint swizzle);
-
-void brw_fb_WRITE(struct brw_compile *p,
-                  struct brw_reg dest,
-                  GLuint msg_reg_nr,
-                  struct brw_reg src0,
-                  GLuint binding_table_index,
-                  GLuint msg_length,
-                  GLuint response_length,
-                  GLboolean eot);
-
-void brw_SAMPLE(struct brw_compile *p,
-               struct brw_reg dest,
-               GLuint msg_reg_nr,
-               struct brw_reg src0,
-               GLuint binding_table_index,
-               GLuint sampler,
-               GLuint writemask,
-               GLuint msg_type,
-               GLuint response_length,
-               GLuint msg_length,
-               GLboolean eot,
-               GLuint header_present,
-               GLuint simd_mode);
-
-void brw_math_16( struct brw_compile *p,
-                 struct brw_reg dest,
-                 GLuint function,
-                 GLuint saturate,
-                 GLuint msg_reg_nr,
-                 struct brw_reg src,
-                 GLuint precision );
-
-void brw_math( struct brw_compile *p,
-              struct brw_reg dest,
-              GLuint function,
-              GLuint saturate,
-              GLuint msg_reg_nr,
-              struct brw_reg src,
-              GLuint data_type,
-              GLuint precision );
-
-void brw_dp_READ_16( struct brw_compile *p,
-                    struct brw_reg dest,
-                    GLuint scratch_offset );
-
-void brw_dp_READ_4( struct brw_compile *p,
-                    struct brw_reg dest,
-                    GLboolean relAddr,
-                    GLuint location,
-                    GLuint bind_table_index );
-
-void brw_dp_READ_4_vs( struct brw_compile *p,
-                       struct brw_reg dest,
-                       GLuint oword,
-                       GLboolean relAddr,
-                       struct brw_reg addrReg,
-                       GLuint location,
-                       GLuint bind_table_index );
-
-void brw_dp_WRITE_16( struct brw_compile *p,
-                     struct brw_reg src,
-                     GLuint scratch_offset );
-
-/* If/else/endif.  Works by manipulating the execution flags on each
- * channel.
- */
-struct brw_instruction *brw_IF(struct brw_compile *p, 
-                              GLuint execute_size);
-
-struct brw_instruction *brw_ELSE(struct brw_compile *p, 
-                                struct brw_instruction *if_insn);
-
-void brw_ENDIF(struct brw_compile *p, 
-              struct brw_instruction *if_or_else_insn);
-
-
-/* DO/WHILE loops:
- */
-struct brw_instruction *brw_DO(struct brw_compile *p,
-                              GLuint execute_size);
-
-struct brw_instruction *brw_WHILE(struct brw_compile *p, 
-              struct brw_instruction *patch_insn);
-
-struct brw_instruction *brw_BREAK(struct brw_compile *p);
-struct brw_instruction *brw_CONT(struct brw_compile *p);
-/* Forward jumps:
- */
-void brw_land_fwd_jump(struct brw_compile *p, 
-                      struct brw_instruction *jmp_insn);
-
-
-
-void brw_NOP(struct brw_compile *p);
-
-/* Special case: there is never a destination, execution size will be
- * taken from src0:
- */
-void brw_CMP(struct brw_compile *p,
-            struct brw_reg dest,
-            GLuint conditional,
-            struct brw_reg src0,
-            struct brw_reg src1);
-
-void brw_print_reg( struct brw_reg reg );
-
-
-/*********************************************************************** 
- * brw_eu_util.c:
- */
-
-void brw_copy_indirect_to_indirect(struct brw_compile *p,
-                                  struct brw_indirect dst_ptr,
-                                  struct brw_indirect src_ptr,
-                                  GLuint count);
-
-void brw_copy_from_indirect(struct brw_compile *p,
-                           struct brw_reg dst,
-                           struct brw_indirect ptr,
-                           GLuint count);
-
-void brw_copy4(struct brw_compile *p,
-              struct brw_reg dst,
-              struct brw_reg src,
-              GLuint count);
-
-void brw_copy8(struct brw_compile *p,
-              struct brw_reg dst,
-              struct brw_reg src,
-              GLuint count);
-
-void brw_math_invert( struct brw_compile *p, 
-                     struct brw_reg dst,
-                     struct brw_reg src);
-
-void brw_set_src1( struct brw_instruction *insn,
-                          struct brw_reg reg );
-#endif
diff --git a/src/gallium/drivers/i965/brw_eu_debug.c b/src/gallium/drivers/i965/brw_eu_debug.c
deleted file mode 100644 (file)
index 5989f5a..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-#include "util/u_debug.h"
-
-#include "brw_eu.h"
-
-void brw_print_reg( struct brw_reg hwreg )
-{
-   static const char *file[] = {
-      "arf",
-      "grf",
-      "msg",
-      "imm"
-   };
-
-   static const char *type[] = {
-      "ud",
-      "d",
-      "uw",
-      "w",
-      "ub",
-      "vf",
-      "hf",
-      "f"
-   };
-
-   debug_printf("%s%s", 
-               hwreg.abs ? "abs/" : "",
-               hwreg.negate ? "-" : "");
-     
-   if (hwreg.file == BRW_GENERAL_REGISTER_FILE &&
-       hwreg.nr % 2 == 0 &&
-       hwreg.subnr == 0 &&
-       hwreg.vstride == BRW_VERTICAL_STRIDE_8 &&
-       hwreg.width == BRW_WIDTH_8 &&
-       hwreg.hstride == BRW_HORIZONTAL_STRIDE_1 &&
-       hwreg.type == BRW_REGISTER_TYPE_F) {
-      /* vector register */
-      debug_printf("vec%d", hwreg.nr);
-   }
-   else if (hwreg.file == BRW_GENERAL_REGISTER_FILE &&
-           hwreg.vstride == BRW_VERTICAL_STRIDE_0 &&
-           hwreg.width == BRW_WIDTH_1 &&
-           hwreg.hstride == BRW_HORIZONTAL_STRIDE_0 &&
-           hwreg.type == BRW_REGISTER_TYPE_F) {      
-      /* "scalar" register */
-      debug_printf("scl%d.%d", hwreg.nr, hwreg.subnr / 4);
-   }
-   else if (hwreg.file == BRW_IMMEDIATE_VALUE) {
-      debug_printf("imm %f", hwreg.dw1.f);
-   }
-   else {
-      debug_printf("%s%d.%d<%d;%d,%d>:%s", 
-                  file[hwreg.file],
-                  hwreg.nr,
-                  hwreg.subnr / type_sz(hwreg.type),
-                  hwreg.vstride ? (1<<(hwreg.vstride-1)) : 0,
-                  1<<hwreg.width,
-                  hwreg.hstride ? (1<<(hwreg.hstride-1)) : 0,          
-                  type[hwreg.type]);
-   }
-}
-
-
-
diff --git a/src/gallium/drivers/i965/brw_eu_emit.c b/src/gallium/drivers/i965/brw_eu_emit.c
deleted file mode 100644 (file)
index ba1159e..0000000
+++ /dev/null
@@ -1,1433 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-     
-
-#include "brw_context.h"
-#include "brw_defines.h"
-#include "brw_eu.h"
-#include "brw_debug.h"
-#include "brw_disasm.h"
-
-
-
-
-/***********************************************************************
- * Internal helper for constructing instructions
- */
-
-static void guess_execution_size( struct brw_instruction *insn,
-                                 struct brw_reg reg )
-{
-   if (reg.width == BRW_WIDTH_8 && 
-       insn->header.compression_control == BRW_COMPRESSION_COMPRESSED) 
-      insn->header.execution_size = BRW_EXECUTE_16;
-   else
-      insn->header.execution_size = reg.width; /* note - definitions are compatible */
-}
-
-
-static void brw_set_dest( struct brw_instruction *insn,
-                         struct brw_reg dest )
-{
-   if (dest.type != BRW_ARCHITECTURE_REGISTER_FILE)
-      assert(dest.nr < 128);
-
-   insn->bits1.da1.dest_reg_file = dest.file;
-   insn->bits1.da1.dest_reg_type = dest.type;
-   insn->bits1.da1.dest_address_mode = dest.address_mode;
-
-   if (dest.address_mode == BRW_ADDRESS_DIRECT) {   
-      insn->bits1.da1.dest_reg_nr = dest.nr;
-
-      if (insn->header.access_mode == BRW_ALIGN_1) {
-        insn->bits1.da1.dest_subreg_nr = dest.subnr;
-        if (dest.hstride == BRW_HORIZONTAL_STRIDE_0)
-           dest.hstride = BRW_HORIZONTAL_STRIDE_1;
-        insn->bits1.da1.dest_horiz_stride = dest.hstride;
-      }
-      else {
-        insn->bits1.da16.dest_subreg_nr = dest.subnr / 16;
-        insn->bits1.da16.dest_writemask = dest.dw1.bits.writemask;
-      }
-   }
-   else {
-      insn->bits1.ia1.dest_subreg_nr = dest.subnr;
-
-      /* These are different sizes in align1 vs align16:
-       */
-      if (insn->header.access_mode == BRW_ALIGN_1) {
-        insn->bits1.ia1.dest_indirect_offset = dest.dw1.bits.indirect_offset;
-        if (dest.hstride == BRW_HORIZONTAL_STRIDE_0)
-           dest.hstride = BRW_HORIZONTAL_STRIDE_1;
-        insn->bits1.ia1.dest_horiz_stride = dest.hstride;
-      }
-      else {
-        insn->bits1.ia16.dest_indirect_offset = dest.dw1.bits.indirect_offset;
-      }
-   }
-
-   /* NEW: Set the execution size based on dest.width and
-    * insn->compression_control:
-    */
-   guess_execution_size(insn, dest);
-}
-
-static void brw_set_src0( struct brw_instruction *insn,
-                          struct brw_reg reg )
-{
-   assert(reg.file != BRW_MESSAGE_REGISTER_FILE);
-
-   if (reg.type != BRW_ARCHITECTURE_REGISTER_FILE)
-      assert(reg.nr < 128);
-
-   insn->bits1.da1.src0_reg_file = reg.file;
-   insn->bits1.da1.src0_reg_type = reg.type;
-   insn->bits2.da1.src0_abs = reg.abs;
-   insn->bits2.da1.src0_negate = reg.negate;
-   insn->bits2.da1.src0_address_mode = reg.address_mode;
-
-   if (reg.file == BRW_IMMEDIATE_VALUE) {
-      insn->bits3.ud = reg.dw1.ud;
-   
-      /* Required to set some fields in src1 as well:
-       */
-      insn->bits1.da1.src1_reg_file = 0; /* arf */
-      insn->bits1.da1.src1_reg_type = reg.type;
-   }
-   else 
-   {
-      if (reg.address_mode == BRW_ADDRESS_DIRECT) {
-        if (insn->header.access_mode == BRW_ALIGN_1) {
-           insn->bits2.da1.src0_subreg_nr = reg.subnr;
-           insn->bits2.da1.src0_reg_nr = reg.nr;
-        }
-        else {
-           insn->bits2.da16.src0_subreg_nr = reg.subnr / 16;
-           insn->bits2.da16.src0_reg_nr = reg.nr;
-        }
-      }
-      else {
-        insn->bits2.ia1.src0_subreg_nr = reg.subnr;
-
-        if (insn->header.access_mode == BRW_ALIGN_1) {
-           insn->bits2.ia1.src0_indirect_offset = reg.dw1.bits.indirect_offset; 
-        }
-        else {
-           insn->bits2.ia16.src0_subreg_nr = reg.dw1.bits.indirect_offset;
-        }
-      }
-
-      if (insn->header.access_mode == BRW_ALIGN_1) {
-        if (reg.width == BRW_WIDTH_1 && 
-            insn->header.execution_size == BRW_EXECUTE_1) {
-           insn->bits2.da1.src0_horiz_stride = BRW_HORIZONTAL_STRIDE_0;
-           insn->bits2.da1.src0_width = BRW_WIDTH_1;
-           insn->bits2.da1.src0_vert_stride = BRW_VERTICAL_STRIDE_0;
-        }
-        else {
-           insn->bits2.da1.src0_horiz_stride = reg.hstride;
-           insn->bits2.da1.src0_width = reg.width;
-           insn->bits2.da1.src0_vert_stride = reg.vstride;
-        }
-      }
-      else {
-        insn->bits2.da16.src0_swz_x = BRW_GET_SWZ(reg.dw1.bits.swizzle, BRW_CHANNEL_X);
-        insn->bits2.da16.src0_swz_y = BRW_GET_SWZ(reg.dw1.bits.swizzle, BRW_CHANNEL_Y);
-        insn->bits2.da16.src0_swz_z = BRW_GET_SWZ(reg.dw1.bits.swizzle, BRW_CHANNEL_Z);
-        insn->bits2.da16.src0_swz_w = BRW_GET_SWZ(reg.dw1.bits.swizzle, BRW_CHANNEL_W);
-
-        /* This is an oddity of the fact we're using the same
-         * descriptions for registers in align_16 as align_1:
-         */
-        if (reg.vstride == BRW_VERTICAL_STRIDE_8)
-           insn->bits2.da16.src0_vert_stride = BRW_VERTICAL_STRIDE_4;
-        else
-           insn->bits2.da16.src0_vert_stride = reg.vstride;
-      }
-   }
-}
-
-
-void brw_set_src1( struct brw_instruction *insn,
-                   struct brw_reg reg )
-{
-   assert(reg.file != BRW_MESSAGE_REGISTER_FILE);
-
-   assert(reg.nr < 128);
-
-   insn->bits1.da1.src1_reg_file = reg.file;
-   insn->bits1.da1.src1_reg_type = reg.type;
-   insn->bits3.da1.src1_abs = reg.abs;
-   insn->bits3.da1.src1_negate = reg.negate;
-
-   /* Only src1 can be immediate in two-argument instructions.
-    */
-   assert(insn->bits1.da1.src0_reg_file != BRW_IMMEDIATE_VALUE);
-
-   if (reg.file == BRW_IMMEDIATE_VALUE) {
-      insn->bits3.ud = reg.dw1.ud;
-   }
-   else {
-      /* This is a hardware restriction, which may or may not be lifted
-       * in the future:
-       */
-      assert (reg.address_mode == BRW_ADDRESS_DIRECT);
-      /*assert (reg.file == BRW_GENERAL_REGISTER_FILE); */
-
-      if (insn->header.access_mode == BRW_ALIGN_1) {
-        insn->bits3.da1.src1_subreg_nr = reg.subnr;
-        insn->bits3.da1.src1_reg_nr = reg.nr;
-      }
-      else {
-        insn->bits3.da16.src1_subreg_nr = reg.subnr / 16;
-        insn->bits3.da16.src1_reg_nr = reg.nr;
-      }
-
-      if (insn->header.access_mode == BRW_ALIGN_1) {
-        if (reg.width == BRW_WIDTH_1 && 
-            insn->header.execution_size == BRW_EXECUTE_1) {
-           insn->bits3.da1.src1_horiz_stride = BRW_HORIZONTAL_STRIDE_0;
-           insn->bits3.da1.src1_width = BRW_WIDTH_1;
-           insn->bits3.da1.src1_vert_stride = BRW_VERTICAL_STRIDE_0;
-        }
-        else {
-           insn->bits3.da1.src1_horiz_stride = reg.hstride;
-           insn->bits3.da1.src1_width = reg.width;
-           insn->bits3.da1.src1_vert_stride = reg.vstride;
-        }
-      }
-      else {
-        insn->bits3.da16.src1_swz_x = BRW_GET_SWZ(reg.dw1.bits.swizzle, BRW_CHANNEL_X);
-        insn->bits3.da16.src1_swz_y = BRW_GET_SWZ(reg.dw1.bits.swizzle, BRW_CHANNEL_Y);
-        insn->bits3.da16.src1_swz_z = BRW_GET_SWZ(reg.dw1.bits.swizzle, BRW_CHANNEL_Z);
-        insn->bits3.da16.src1_swz_w = BRW_GET_SWZ(reg.dw1.bits.swizzle, BRW_CHANNEL_W);
-
-        /* This is an oddity of the fact we're using the same
-         * descriptions for registers in align_16 as align_1:
-         */
-        if (reg.vstride == BRW_VERTICAL_STRIDE_8)
-           insn->bits3.da16.src1_vert_stride = BRW_VERTICAL_STRIDE_4;
-        else
-           insn->bits3.da16.src1_vert_stride = reg.vstride;
-      }
-   }
-}
-
-
-
-static void brw_set_math_message( struct brw_context *brw,
-                                 struct brw_instruction *insn,
-                                 GLuint msg_length,
-                                 GLuint response_length,
-                                 GLuint function,
-                                 GLuint integer_type,
-                                 GLboolean low_precision,
-                                 GLboolean saturate,
-                                 GLuint dataType )
-{
-   brw_set_src1(insn, brw_imm_d(0));
-
-   if (brw->gen == 5) {
-       insn->bits3.math_gen5.function = function;
-       insn->bits3.math_gen5.int_type = integer_type;
-       insn->bits3.math_gen5.precision = low_precision;
-       insn->bits3.math_gen5.saturate = saturate;
-       insn->bits3.math_gen5.data_type = dataType;
-       insn->bits3.math_gen5.snapshot = 0;
-       insn->bits3.math_gen5.header_present = 0;
-       insn->bits3.math_gen5.response_length = response_length;
-       insn->bits3.math_gen5.msg_length = msg_length;
-       insn->bits3.math_gen5.end_of_thread = 0;
-       insn->bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_MATH;
-       insn->bits2.send_gen5.end_of_thread = 0;
-   } else {
-       insn->bits3.math.function = function;
-       insn->bits3.math.int_type = integer_type;
-       insn->bits3.math.precision = low_precision;
-       insn->bits3.math.saturate = saturate;
-       insn->bits3.math.data_type = dataType;
-       insn->bits3.math.response_length = response_length;
-       insn->bits3.math.msg_length = msg_length;
-       insn->bits3.math.msg_target = BRW_MESSAGE_TARGET_MATH;
-       insn->bits3.math.end_of_thread = 0;
-   }
-}
-
-
-static void brw_set_ff_sync_message( struct brw_context *brw,
-                                struct brw_instruction *insn,
-                                GLboolean allocate,
-                                GLboolean used,
-                                GLuint msg_length,
-                                GLuint response_length,
-                                GLboolean end_of_thread,
-                                GLboolean complete,
-                                GLuint offset,
-                                GLuint swizzle_control )
-{
-       brw_set_src1(insn, brw_imm_d(0));
-
-       insn->bits3.urb_gen5.opcode = 1;
-       insn->bits3.urb_gen5.offset = offset;
-       insn->bits3.urb_gen5.swizzle_control = swizzle_control;
-       insn->bits3.urb_gen5.allocate = allocate;
-       insn->bits3.urb_gen5.used = used;
-       insn->bits3.urb_gen5.complete = complete;
-       insn->bits3.urb_gen5.header_present = 1;
-       insn->bits3.urb_gen5.response_length = response_length;
-       insn->bits3.urb_gen5.msg_length = msg_length;
-       insn->bits3.urb_gen5.end_of_thread = end_of_thread;
-       insn->bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_URB;
-       insn->bits2.send_gen5.end_of_thread = end_of_thread;
-}
-
-static void brw_set_urb_message( struct brw_context *brw,
-                                struct brw_instruction *insn,
-                                GLboolean allocate,
-                                GLboolean used,
-                                GLuint msg_length,
-                                GLuint response_length,
-                                GLboolean end_of_thread,
-                                GLboolean complete,
-                                GLuint offset,
-                                GLuint swizzle_control )
-{
-    brw_set_src1(insn, brw_imm_d(0));
-
-    if (brw->gen == 5) {
-        insn->bits3.urb_gen5.opcode = 0;       /* ? */
-        insn->bits3.urb_gen5.offset = offset;
-        insn->bits3.urb_gen5.swizzle_control = swizzle_control;
-        insn->bits3.urb_gen5.allocate = allocate;
-        insn->bits3.urb_gen5.used = used;      /* ? */
-        insn->bits3.urb_gen5.complete = complete;
-        insn->bits3.urb_gen5.header_present = 1;
-        insn->bits3.urb_gen5.response_length = response_length;
-        insn->bits3.urb_gen5.msg_length = msg_length;
-        insn->bits3.urb_gen5.end_of_thread = end_of_thread;
-        insn->bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_URB;
-        insn->bits2.send_gen5.end_of_thread = end_of_thread;
-    } else {
-        insn->bits3.urb.opcode = 0;    /* ? */
-        insn->bits3.urb.offset = offset;
-        insn->bits3.urb.swizzle_control = swizzle_control;
-        insn->bits3.urb.allocate = allocate;
-        insn->bits3.urb.used = used;   /* ? */
-        insn->bits3.urb.complete = complete;
-        insn->bits3.urb.response_length = response_length;
-        insn->bits3.urb.msg_length = msg_length;
-        insn->bits3.urb.msg_target = BRW_MESSAGE_TARGET_URB;
-        insn->bits3.urb.end_of_thread = end_of_thread;
-    }
-}
-
-static void brw_set_dp_write_message( struct brw_context *brw,
-                                     struct brw_instruction *insn,
-                                     GLuint binding_table_index,
-                                     GLuint msg_control,
-                                     GLuint msg_type,
-                                     GLuint msg_length,
-                                     GLuint pixel_scoreboard_clear,
-                                     GLuint response_length,
-                                     GLuint end_of_thread )
-{
-   brw_set_src1(insn, brw_imm_d(0));
-
-   if (brw->gen == 5) {
-       insn->bits3.dp_write_gen5.binding_table_index = binding_table_index;
-       insn->bits3.dp_write_gen5.msg_control = msg_control;
-       insn->bits3.dp_write_gen5.pixel_scoreboard_clear = pixel_scoreboard_clear;
-       insn->bits3.dp_write_gen5.msg_type = msg_type;
-       insn->bits3.dp_write_gen5.send_commit_msg = 0;
-       insn->bits3.dp_write_gen5.header_present = 1;
-       insn->bits3.dp_write_gen5.response_length = response_length;
-       insn->bits3.dp_write_gen5.msg_length = msg_length;
-       insn->bits3.dp_write_gen5.end_of_thread = end_of_thread;
-       insn->bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_DATAPORT_WRITE;
-       insn->bits2.send_gen5.end_of_thread = end_of_thread;
-   } else {
-       insn->bits3.dp_write.binding_table_index = binding_table_index;
-       insn->bits3.dp_write.msg_control = msg_control;
-       insn->bits3.dp_write.pixel_scoreboard_clear = pixel_scoreboard_clear;
-       insn->bits3.dp_write.msg_type = msg_type;
-       insn->bits3.dp_write.send_commit_msg = 0;
-       insn->bits3.dp_write.response_length = response_length;
-       insn->bits3.dp_write.msg_length = msg_length;
-       insn->bits3.dp_write.msg_target = BRW_MESSAGE_TARGET_DATAPORT_WRITE;
-       insn->bits3.dp_write.end_of_thread = end_of_thread;
-   }
-}
-
-static void brw_set_dp_read_message( struct brw_context *brw,
-                                     struct brw_instruction *insn,
-                                     GLuint binding_table_index,
-                                     GLuint msg_control,
-                                     GLuint msg_type,
-                                     GLuint target_cache,
-                                     GLuint msg_length,
-                                     GLuint response_length,
-                                     GLuint end_of_thread )
-{
-   brw_set_src1(insn, brw_imm_d(0));
-
-   if (brw->gen == 5) {
-       insn->bits3.dp_read_gen5.binding_table_index = binding_table_index;
-       insn->bits3.dp_read_gen5.msg_control = msg_control;
-       insn->bits3.dp_read_gen5.msg_type = msg_type;
-       insn->bits3.dp_read_gen5.target_cache = target_cache;
-       insn->bits3.dp_read_gen5.header_present = 1;
-       insn->bits3.dp_read_gen5.response_length = response_length;
-       insn->bits3.dp_read_gen5.msg_length = msg_length;
-       insn->bits3.dp_read_gen5.pad1 = 0;
-       insn->bits3.dp_read_gen5.end_of_thread = end_of_thread;
-       insn->bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_DATAPORT_READ;
-       insn->bits2.send_gen5.end_of_thread = end_of_thread;
-   } else {
-       insn->bits3.dp_read.binding_table_index = binding_table_index; /*0:7*/
-       insn->bits3.dp_read.msg_control = msg_control;  /*8:11*/
-       insn->bits3.dp_read.msg_type = msg_type;  /*12:13*/
-       insn->bits3.dp_read.target_cache = target_cache;  /*14:15*/
-       insn->bits3.dp_read.response_length = response_length;  /*16:19*/
-       insn->bits3.dp_read.msg_length = msg_length;  /*20:23*/
-       insn->bits3.dp_read.msg_target = BRW_MESSAGE_TARGET_DATAPORT_READ; /*24:27*/
-       insn->bits3.dp_read.pad1 = 0;  /*28:30*/
-       insn->bits3.dp_read.end_of_thread = end_of_thread;  /*31*/
-   }
-}
-
-static void brw_set_sampler_message(struct brw_context *brw,
-                                    struct brw_instruction *insn,
-                                    GLuint binding_table_index,
-                                    GLuint sampler,
-                                    GLuint msg_type,
-                                    GLuint response_length,
-                                    GLuint msg_length,
-                                    GLboolean eot,
-                                    GLuint header_present,
-                                    GLuint simd_mode)
-{
-   assert(eot == 0);
-   brw_set_src1(insn, brw_imm_d(0));
-
-   if (brw->gen == 5) {
-      insn->bits3.sampler_gen5.binding_table_index = binding_table_index;
-      insn->bits3.sampler_gen5.sampler = sampler;
-      insn->bits3.sampler_gen5.msg_type = msg_type;
-      insn->bits3.sampler_gen5.simd_mode = simd_mode;
-      insn->bits3.sampler_gen5.header_present = header_present;
-      insn->bits3.sampler_gen5.response_length = response_length;
-      insn->bits3.sampler_gen5.msg_length = msg_length;
-      insn->bits3.sampler_gen5.end_of_thread = eot;
-      insn->bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_SAMPLER;
-      insn->bits2.send_gen5.end_of_thread = eot;
-   } else if (brw->is_g4x) {
-      insn->bits3.sampler_g4x.binding_table_index = binding_table_index;
-      insn->bits3.sampler_g4x.sampler = sampler;
-      insn->bits3.sampler_g4x.msg_type = msg_type;
-      insn->bits3.sampler_g4x.response_length = response_length;
-      insn->bits3.sampler_g4x.msg_length = msg_length;
-      insn->bits3.sampler_g4x.end_of_thread = eot;
-      insn->bits3.sampler_g4x.msg_target = BRW_MESSAGE_TARGET_SAMPLER;
-   } else {
-      insn->bits3.sampler.binding_table_index = binding_table_index;
-      insn->bits3.sampler.sampler = sampler;
-      insn->bits3.sampler.msg_type = msg_type;
-      insn->bits3.sampler.return_format = BRW_SAMPLER_RETURN_FORMAT_FLOAT32;
-      insn->bits3.sampler.response_length = response_length;
-      insn->bits3.sampler.msg_length = msg_length;
-      insn->bits3.sampler.end_of_thread = eot;
-      insn->bits3.sampler.msg_target = BRW_MESSAGE_TARGET_SAMPLER;
-   }
-}
-
-
-
-static struct brw_instruction *next_insn( struct brw_compile *p, 
-                                         GLuint opcode )
-{
-   struct brw_instruction *insn;
-
-   if (0 && (BRW_DEBUG & DEBUG_DISASSEM))
-   {
-      if (p->nr_insn) 
-         brw_disasm_insn(stderr, &p->store[p->nr_insn-1], p->brw->gen);
-   }
-
-   assert(p->nr_insn + 1 < BRW_EU_MAX_INSN);
-
-   insn = &p->store[p->nr_insn++];
-   memcpy(insn, p->current, sizeof(*insn));
-
-   /* Reset this one-shot flag: 
-    */
-
-   if (p->current->header.destreg__conditionalmod) {
-      p->current->header.destreg__conditionalmod = 0;
-      p->current->header.predicate_control = BRW_PREDICATE_NORMAL;
-   }
-
-   insn->header.opcode = opcode;
-   return insn;
-}
-
-
-static struct brw_instruction *brw_alu1( struct brw_compile *p,
-                                        GLuint opcode,
-                                        struct brw_reg dest,
-                                        struct brw_reg src )
-{
-   struct brw_instruction *insn = next_insn(p, opcode);
-   brw_set_dest(insn, dest);
-   brw_set_src0(insn, src);   
-   return insn;
-}
-
-static struct brw_instruction *brw_alu2(struct brw_compile *p,
-                                       GLuint opcode,
-                                       struct brw_reg dest,
-                                       struct brw_reg src0,
-                                       struct brw_reg src1 )
-{
-   struct brw_instruction *insn = next_insn(p, opcode);   
-   brw_set_dest(insn, dest);
-   brw_set_src0(insn, src0);
-   brw_set_src1(insn, src1);
-   return insn;
-}
-
-
-/***********************************************************************
- * Convenience routines.
- */
-#define ALU1(OP)                                       \
-struct brw_instruction *brw_##OP(struct brw_compile *p,        \
-             struct brw_reg dest,                      \
-             struct brw_reg src0)                      \
-{                                                      \
-   return brw_alu1(p, BRW_OPCODE_##OP, dest, src0);            \
-}
-
-#define ALU2(OP)                                       \
-struct brw_instruction *brw_##OP(struct brw_compile *p,        \
-             struct brw_reg dest,                      \
-             struct brw_reg src0,                      \
-             struct brw_reg src1)                      \
-{                                                      \
-   return brw_alu2(p, BRW_OPCODE_##OP, dest, src0, src1);      \
-}
-
-
-ALU1(MOV)
-ALU2(SEL)
-ALU1(NOT)
-ALU2(AND)
-ALU2(OR)
-ALU2(XOR)
-ALU2(SHR)
-ALU2(SHL)
-ALU2(RSR)
-ALU2(RSL)
-ALU2(ASR)
-ALU2(ADD)
-ALU2(MUL)
-ALU1(FRC)
-ALU1(RNDD)
-ALU1(RNDZ)
-ALU2(MAC)
-ALU2(MACH)
-ALU1(LZD)
-ALU2(DP4)
-ALU2(DPH)
-ALU2(DP3)
-ALU2(DP2)
-ALU2(LINE)
-
-
-
-
-void brw_NOP(struct brw_compile *p)
-{
-   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_NOP);   
-   brw_set_dest(insn, retype(brw_vec4_grf(0,0), BRW_REGISTER_TYPE_UD));
-   brw_set_src0(insn, retype(brw_vec4_grf(0,0), BRW_REGISTER_TYPE_UD));
-   brw_set_src1(insn, brw_imm_ud(0x0));
-}
-
-
-
-
-
-/***********************************************************************
- * Comparisons, if/else/endif
- */
-
-struct brw_instruction *brw_JMPI(struct brw_compile *p, 
-                                 struct brw_reg dest,
-                                 struct brw_reg src0,
-                                 struct brw_reg src1)
-{
-   struct brw_instruction *insn = brw_alu2(p, BRW_OPCODE_JMPI, dest, src0, src1);
-
-   insn->header.execution_size = 1;
-   insn->header.compression_control = BRW_COMPRESSION_NONE;
-   insn->header.mask_control = BRW_MASK_DISABLE;
-
-   p->current->header.predicate_control = BRW_PREDICATE_NONE;
-
-   return insn;
-}
-
-/* EU takes the value from the flag register and pushes it onto some
- * sort of a stack (presumably merging with any flag value already on
- * the stack).  Within an if block, the flags at the top of the stack
- * control execution on each channel of the unit, eg. on each of the
- * 16 pixel values in our wm programs.
- *
- * When the matching 'else' instruction is reached (presumably by
- * countdown of the instruction count patched in by our ELSE/ENDIF
- * functions), the relevent flags are inverted.
- *
- * When the matching 'endif' instruction is reached, the flags are
- * popped off.  If the stack is now empty, normal execution resumes.
- *
- * No attempt is made to deal with stack overflow (14 elements?).
- */
-struct brw_instruction *brw_IF(struct brw_compile *p, GLuint execute_size)
-{
-   struct brw_instruction *insn;
-
-   if (p->single_program_flow) {
-      assert(execute_size == BRW_EXECUTE_1);
-
-      insn = next_insn(p, BRW_OPCODE_ADD);
-      insn->header.predicate_inverse = 1;
-   } else {
-      insn = next_insn(p, BRW_OPCODE_IF);
-   }
-
-   /* Override the defaults for this instruction:
-    */
-   brw_set_dest(insn, brw_ip_reg());
-   brw_set_src0(insn, brw_ip_reg());
-   brw_set_src1(insn, brw_imm_d(0x0));
-
-   insn->header.execution_size = execute_size;
-   insn->header.compression_control = BRW_COMPRESSION_NONE;
-   insn->header.predicate_control = BRW_PREDICATE_NORMAL;
-   insn->header.mask_control = BRW_MASK_ENABLE;
-   if (!p->single_program_flow)
-       insn->header.thread_control = BRW_THREAD_SWITCH;
-
-   p->current->header.predicate_control = BRW_PREDICATE_NONE;
-
-   return insn;
-}
-
-
-struct brw_instruction *brw_ELSE(struct brw_compile *p, 
-                                struct brw_instruction *if_insn)
-{
-   struct brw_instruction *insn;
-   GLuint br = 1;
-
-   if (p->brw->gen == 5)
-      br = 2;
-
-   if (p->single_program_flow) {
-      insn = next_insn(p, BRW_OPCODE_ADD);
-   } else {
-      insn = next_insn(p, BRW_OPCODE_ELSE);
-   }
-
-   brw_set_dest(insn, brw_ip_reg());
-   brw_set_src0(insn, brw_ip_reg());
-   brw_set_src1(insn, brw_imm_d(0x0));
-
-   insn->header.compression_control = BRW_COMPRESSION_NONE;
-   insn->header.execution_size = if_insn->header.execution_size;
-   insn->header.mask_control = BRW_MASK_ENABLE;
-   if (!p->single_program_flow)
-       insn->header.thread_control = BRW_THREAD_SWITCH;
-
-   /* Patch the if instruction to point at this instruction.
-    */
-   if (p->single_program_flow) {
-      assert(if_insn->header.opcode == BRW_OPCODE_ADD);
-
-      if_insn->bits3.ud = (insn - if_insn + 1) * 16;
-   } else {
-      assert(if_insn->header.opcode == BRW_OPCODE_IF);
-
-      if_insn->bits3.if_else.jump_count = br * (insn - if_insn);
-      if_insn->bits3.if_else.pop_count = 0;
-      if_insn->bits3.if_else.pad0 = 0;
-   }
-
-   return insn;
-}
-
-void brw_ENDIF(struct brw_compile *p, 
-              struct brw_instruction *patch_insn)
-{
-   GLuint br = 1;
-
-   if (p->brw->gen == 5)
-      br = 2; 
-   if (p->single_program_flow) {
-      /* In single program flow mode, there's no need to execute an ENDIF,
-       * since we don't need to do any stack operations, and if we're executing
-       * currently, we want to just continue executing.
-       */
-      struct brw_instruction *next = &p->store[p->nr_insn];
-
-      assert(patch_insn->header.opcode == BRW_OPCODE_ADD);
-
-      patch_insn->bits3.ud = (next - patch_insn) * 16;
-   } else {
-      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_ENDIF);
-
-      brw_set_dest(insn, retype(brw_vec4_grf(0,0), BRW_REGISTER_TYPE_UD));
-      brw_set_src0(insn, retype(brw_vec4_grf(0,0), BRW_REGISTER_TYPE_UD));
-      brw_set_src1(insn, brw_imm_d(0x0));
-
-      insn->header.compression_control = BRW_COMPRESSION_NONE;
-      insn->header.execution_size = patch_insn->header.execution_size;
-      insn->header.mask_control = BRW_MASK_ENABLE;
-      insn->header.thread_control = BRW_THREAD_SWITCH;
-
-      assert(patch_insn->bits3.if_else.jump_count == 0);
-
-      /* Patch the if or else instructions to point at this or the next
-       * instruction respectively.
-       */
-      if (patch_insn->header.opcode == BRW_OPCODE_IF) {
-        /* Automagically turn it into an IFF:
-         */
-        patch_insn->header.opcode = BRW_OPCODE_IFF;
-        patch_insn->bits3.if_else.jump_count = br * (insn - patch_insn + 1);
-        patch_insn->bits3.if_else.pop_count = 0;
-        patch_insn->bits3.if_else.pad0 = 0;
-      } else if (patch_insn->header.opcode == BRW_OPCODE_ELSE) {
-        patch_insn->bits3.if_else.jump_count = br * (insn - patch_insn + 1);
-        patch_insn->bits3.if_else.pop_count = 1;
-        patch_insn->bits3.if_else.pad0 = 0;
-      } else {
-        assert(0);
-      }
-
-      /* Also pop item off the stack in the endif instruction:
-       */
-      insn->bits3.if_else.jump_count = 0;
-      insn->bits3.if_else.pop_count = 1;
-      insn->bits3.if_else.pad0 = 0;
-   }
-}
-
-struct brw_instruction *brw_BREAK(struct brw_compile *p)
-{
-   struct brw_instruction *insn;
-   insn = next_insn(p, BRW_OPCODE_BREAK);
-   brw_set_dest(insn, brw_ip_reg());
-   brw_set_src0(insn, brw_ip_reg());
-   brw_set_src1(insn, brw_imm_d(0x0));
-   insn->header.compression_control = BRW_COMPRESSION_NONE;
-   insn->header.execution_size = BRW_EXECUTE_8;
-   /* insn->header.mask_control = BRW_MASK_DISABLE; */
-   insn->bits3.if_else.pad0 = 0;
-   return insn;
-}
-
-struct brw_instruction *brw_CONT(struct brw_compile *p)
-{
-   struct brw_instruction *insn;
-   insn = next_insn(p, BRW_OPCODE_CONTINUE);
-   brw_set_dest(insn, brw_ip_reg());
-   brw_set_src0(insn, brw_ip_reg());
-   brw_set_src1(insn, brw_imm_d(0x0));
-   insn->header.compression_control = BRW_COMPRESSION_NONE;
-   insn->header.execution_size = BRW_EXECUTE_8;
-   /* insn->header.mask_control = BRW_MASK_DISABLE; */
-   insn->bits3.if_else.pad0 = 0;
-   return insn;
-}
-
-/* DO/WHILE loop:
- */
-struct brw_instruction *brw_DO(struct brw_compile *p, GLuint execute_size)
-{
-   if (p->single_program_flow) {
-      return &p->store[p->nr_insn];
-   } else {
-      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_DO);
-
-      /* Override the defaults for this instruction:
-       */
-      brw_set_dest(insn, brw_null_reg());
-      brw_set_src0(insn, brw_null_reg());
-      brw_set_src1(insn, brw_null_reg());
-
-      insn->header.compression_control = BRW_COMPRESSION_NONE;
-      insn->header.execution_size = execute_size;
-      insn->header.predicate_control = BRW_PREDICATE_NONE;
-      /* insn->header.mask_control = BRW_MASK_ENABLE; */
-      /* insn->header.mask_control = BRW_MASK_DISABLE; */
-
-      return insn;
-   }
-}
-
-
-
-struct brw_instruction *brw_WHILE(struct brw_compile *p, 
-                                  struct brw_instruction *do_insn)
-{
-   struct brw_instruction *insn;
-   GLuint br = 1;
-
-   if (p->brw->gen == 5)
-      br = 2;
-
-   if (p->single_program_flow)
-      insn = next_insn(p, BRW_OPCODE_ADD);
-   else
-      insn = next_insn(p, BRW_OPCODE_WHILE);
-
-   brw_set_dest(insn, brw_ip_reg());
-   brw_set_src0(insn, brw_ip_reg());
-   brw_set_src1(insn, brw_imm_d(0x0));
-
-   insn->header.compression_control = BRW_COMPRESSION_NONE;
-
-   if (p->single_program_flow) {
-      insn->header.execution_size = BRW_EXECUTE_1;
-
-      insn->bits3.d = (do_insn - insn) * 16;
-   } else {
-      insn->header.execution_size = do_insn->header.execution_size;
-
-      assert(do_insn->header.opcode == BRW_OPCODE_DO);
-      insn->bits3.if_else.jump_count = br * (do_insn - insn + 1);
-      insn->bits3.if_else.pop_count = 0;
-      insn->bits3.if_else.pad0 = 0;
-   }
-
-/*    insn->header.mask_control = BRW_MASK_ENABLE; */
-
-   /* insn->header.mask_control = BRW_MASK_DISABLE; */
-   p->current->header.predicate_control = BRW_PREDICATE_NONE;   
-   return insn;
-}
-
-
-/* FORWARD JUMPS:
- */
-void brw_land_fwd_jump(struct brw_compile *p, 
-                      struct brw_instruction *jmp_insn)
-{
-   struct brw_instruction *landing = &p->store[p->nr_insn];
-   GLuint jmpi = 1;
-
-   if (p->brw->gen == 5)
-       jmpi = 2;
-
-   assert(jmp_insn->header.opcode == BRW_OPCODE_JMPI);
-   assert(jmp_insn->bits1.da1.src1_reg_file == BRW_IMMEDIATE_VALUE);
-
-   jmp_insn->bits3.ud = jmpi * ((landing - jmp_insn) - 1);
-}
-
-
-
-/* To integrate with the above, it makes sense that the comparison
- * instruction should populate the flag register.  It might be simpler
- * just to use the flag reg for most WM tasks?
- */
-void brw_CMP(struct brw_compile *p,
-            struct brw_reg dest,
-            GLuint conditional,
-            struct brw_reg src0,
-            struct brw_reg src1)
-{
-   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_CMP);
-
-   insn->header.destreg__conditionalmod = conditional;
-   brw_set_dest(insn, dest);
-   brw_set_src0(insn, src0);
-   brw_set_src1(insn, src1);
-
-/*    guess_execution_size(insn, src0); */
-
-
-   /* Make it so that future instructions will use the computed flag
-    * value until brw_set_predicate_control_flag_value() is called
-    * again.  
-    */
-   if (dest.file == BRW_ARCHITECTURE_REGISTER_FILE &&
-       dest.nr == 0) {
-      p->current->header.predicate_control = BRW_PREDICATE_NORMAL;
-      p->flag_value = 0xff;
-   }
-}
-
-
-
-/***********************************************************************
- * Helpers for the various SEND message types:
- */
-
-/** Extended math function, float[8].
- */
-void brw_math( struct brw_compile *p,
-              struct brw_reg dest,
-              GLuint function,
-              GLuint saturate,
-              GLuint msg_reg_nr,
-              struct brw_reg src,
-              GLuint data_type,
-              GLuint precision )
-{
-   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-   GLuint msg_length = (function == BRW_MATH_FUNCTION_POW) ? 2 : 1; 
-   GLuint response_length = (function == BRW_MATH_FUNCTION_SINCOS) ? 2 : 1; 
-
-   /* Example code doesn't set predicate_control for send
-    * instructions.
-    */
-   insn->header.predicate_control = 0; 
-   insn->header.destreg__conditionalmod = msg_reg_nr;
-
-   brw_set_dest(insn, dest);
-   brw_set_src0(insn, src);
-   brw_set_math_message(p->brw,
-                       insn, 
-                       msg_length, response_length, 
-                       function,
-                       BRW_MATH_INTEGER_UNSIGNED,
-                       precision,
-                       saturate,
-                       data_type);
-}
-
-/**
- * Extended math function, float[16].
- * Use 2 send instructions.
- */
-void brw_math_16( struct brw_compile *p,
-                 struct brw_reg dest,
-                 GLuint function,
-                 GLuint saturate,
-                 GLuint msg_reg_nr,
-                 struct brw_reg src,
-                 GLuint precision )
-{
-   struct brw_instruction *insn;
-   GLuint msg_length = (function == BRW_MATH_FUNCTION_POW) ? 2 : 1; 
-   GLuint response_length = (function == BRW_MATH_FUNCTION_SINCOS) ? 2 : 1; 
-
-   /* First instruction:
-    */
-   brw_push_insn_state(p);
-   brw_set_predicate_control_flag_value(p, 0xff);
-   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-
-   insn = next_insn(p, BRW_OPCODE_SEND);
-   insn->header.destreg__conditionalmod = msg_reg_nr;
-
-   brw_set_dest(insn, dest);
-   brw_set_src0(insn, src);
-   brw_set_math_message(p->brw,
-                       insn, 
-                       msg_length, response_length, 
-                       function,
-                       BRW_MATH_INTEGER_UNSIGNED,
-                       precision,
-                       saturate,
-                       BRW_MATH_DATA_VECTOR);
-
-   /* Second instruction:
-    */
-   insn = next_insn(p, BRW_OPCODE_SEND);
-   insn->header.compression_control = BRW_COMPRESSION_2NDHALF;
-   insn->header.destreg__conditionalmod = msg_reg_nr+1;
-
-   brw_set_dest(insn, offset(dest,1));
-   brw_set_src0(insn, src);
-   brw_set_math_message(p->brw, 
-                       insn, 
-                       msg_length, response_length, 
-                       function,
-                       BRW_MATH_INTEGER_UNSIGNED,
-                       precision,
-                       saturate,
-                       BRW_MATH_DATA_VECTOR);
-
-   brw_pop_insn_state(p);
-}
-
-
-/**
- * Write block of 16 dwords/floats to the data port Render Cache scratch buffer.
- * Scratch offset should be a multiple of 64.
- * Used for register spilling.
- */
-void brw_dp_WRITE_16( struct brw_compile *p,
-                     struct brw_reg src,
-                     GLuint scratch_offset )
-{
-   GLuint msg_reg_nr = 1;
-   {
-      brw_push_insn_state(p);
-      brw_set_mask_control(p, BRW_MASK_DISABLE);
-      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-
-      /* set message header global offset field (reg 0, element 2) */
-      brw_MOV(p,
-             retype(brw_vec1_grf(0, 2), BRW_REGISTER_TYPE_D),
-             brw_imm_d(scratch_offset));
-
-      brw_pop_insn_state(p);
-   }
-
-   {
-      GLuint msg_length = 3;
-      struct brw_reg dest = retype(brw_null_reg(), BRW_REGISTER_TYPE_UW);
-      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-   
-      insn->header.predicate_control = 0; /* XXX */
-      insn->header.compression_control = BRW_COMPRESSION_NONE; 
-      insn->header.destreg__conditionalmod = msg_reg_nr;
-  
-      brw_set_dest(insn, dest);
-      brw_set_src0(insn, src);
-
-      brw_set_dp_write_message(p->brw,
-                              insn,
-                              255, /* binding table index (255=stateless) */
-                              BRW_DATAPORT_OWORD_BLOCK_4_OWORDS, /* msg_control */
-                              BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE, /* msg_type */
-                              msg_length,
-                              0, /* pixel scoreboard */
-                              0, /* response_length */
-                              0); /* eot */
-   }
-}
-
-
-/**
- * Read block of 16 dwords/floats from the data port Render Cache scratch buffer.
- * Scratch offset should be a multiple of 64.
- * Used for register spilling.
- */
-void brw_dp_READ_16( struct brw_compile *p,
-                     struct brw_reg dest,
-                     GLuint scratch_offset )
-{
-   GLuint msg_reg_nr = 1;
-   {
-      brw_push_insn_state(p);
-      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-      brw_set_mask_control(p, BRW_MASK_DISABLE);
-
-      /* set message header global offset field (reg 0, element 2) */
-      brw_MOV(p,
-             retype(brw_vec1_grf(0, 2), BRW_REGISTER_TYPE_D),
-             brw_imm_d(scratch_offset));
-
-      brw_pop_insn_state(p);
-   }
-
-   {
-      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-   
-      insn->header.predicate_control = 0; /* XXX */
-      insn->header.compression_control = BRW_COMPRESSION_NONE; 
-      insn->header.destreg__conditionalmod = msg_reg_nr;
-  
-      brw_set_dest(insn, dest);        /* UW? */
-      brw_set_src0(insn, retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW));
-
-      brw_set_dp_read_message(p->brw,
-                             insn,
-                             255, /* binding table index (255=stateless) */
-                             3,  /* msg_control (3 means 4 Owords) */
-                             BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ, /* msg_type */
-                             1, /* target cache (render/scratch) */
-                             1, /* msg_length */
-                             2, /* response_length */
-                             0); /* eot */
-   }
-}
-
-
-/**
- * Read a float[4] vector from the data port Data Cache (const buffer).
- * Location (in buffer) should be a multiple of 16.
- * Used for fetching shader constants.
- * If relAddr is true, we'll do an indirect fetch using the address register.
- */
-void brw_dp_READ_4( struct brw_compile *p,
-                    struct brw_reg dest,
-                    GLboolean relAddr,
-                    GLuint location,
-                    GLuint bind_table_index )
-{
-   /* XXX: relAddr not implemented */
-   GLuint msg_reg_nr = 1;
-   {
-      struct brw_reg b;
-      brw_push_insn_state(p);
-      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-      brw_set_mask_control(p, BRW_MASK_DISABLE);
-
-   /* Setup MRF[1] with location/offset into const buffer */
-      b = brw_message_reg(msg_reg_nr);
-      b = retype(b, BRW_REGISTER_TYPE_UD);
-      /* XXX I think we're setting all the dwords of MRF[1] to 'location'.
-       * when the docs say only dword[2] should be set.  Hmmm.  But it works.
-       */
-      brw_MOV(p, b, brw_imm_ud(location));
-      brw_pop_insn_state(p);
-   }
-
-   {
-      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-   
-      insn->header.predicate_control = BRW_PREDICATE_NONE;
-      insn->header.compression_control = BRW_COMPRESSION_NONE; 
-      insn->header.destreg__conditionalmod = msg_reg_nr;
-      insn->header.mask_control = BRW_MASK_DISABLE;
-  
-      /* cast dest to a uword[8] vector */
-      dest = retype(vec8(dest), BRW_REGISTER_TYPE_UW);
-
-      brw_set_dest(insn, dest);
-      brw_set_src0(insn, brw_null_reg());
-
-      brw_set_dp_read_message(p->brw,
-                             insn,
-                             bind_table_index,
-                             0,  /* msg_control (0 means 1 Oword) */
-                             BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ, /* msg_type */
-                             0, /* source cache = data cache */
-                             1, /* msg_length */
-                             1, /* response_length (1 Oword) */
-                             0); /* eot */
-   }
-}
-
-
-/**
- * Read float[4] constant(s) from VS constant buffer.
- * For relative addressing, two float[4] constants will be read into 'dest'.
- * Otherwise, one float[4] constant will be read into the lower half of 'dest'.
- */
-void brw_dp_READ_4_vs(struct brw_compile *p,
-                      struct brw_reg dest,
-                      GLuint oword,
-                      GLboolean relAddr,
-                      struct brw_reg addrReg,
-                      GLuint location,
-                      GLuint bind_table_index)
-{
-   GLuint msg_reg_nr = 1;
-
-   assert(oword < 2);
-   /*
-   printf("vs const read msg, location %u, msg_reg_nr %d\n",
-          location, msg_reg_nr);
-   */
-
-   /* Setup MRF[1] with location/offset into const buffer */
-   {
-      struct brw_reg b;
-
-      brw_push_insn_state(p);
-      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-      brw_set_mask_control(p, BRW_MASK_DISABLE);
-      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-      /*brw_set_access_mode(p, BRW_ALIGN_16);*/
-
-      /* XXX I think we're setting all the dwords of MRF[1] to 'location'.
-       * when the docs say only dword[2] should be set.  Hmmm.  But it works.
-       */
-      b = brw_message_reg(msg_reg_nr);
-      b = retype(b, BRW_REGISTER_TYPE_UD);
-      /*b = get_element_ud(b, 2);*/
-      if (relAddr) {
-         brw_ADD(p, b, addrReg, brw_imm_ud(location));
-      }
-      else {
-         brw_MOV(p, b, brw_imm_ud(location));
-      }
-
-      brw_pop_insn_state(p);
-   }
-
-   {
-      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-   
-      insn->header.predicate_control = BRW_PREDICATE_NONE;
-      insn->header.compression_control = BRW_COMPRESSION_NONE; 
-      insn->header.destreg__conditionalmod = msg_reg_nr;
-      insn->header.mask_control = BRW_MASK_DISABLE;
-      /*insn->header.access_mode = BRW_ALIGN_16;*/
-  
-      brw_set_dest(insn, dest);
-      brw_set_src0(insn, brw_null_reg());
-
-      brw_set_dp_read_message(p->brw,
-                             insn,
-                             bind_table_index,
-                             oword,  /* 0 = lower Oword, 1 = upper Oword */
-                             BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ, /* msg_type */
-                             0, /* source cache = data cache */
-                             1, /* msg_length */
-                             1, /* response_length (1 Oword) */
-                             0); /* eot */
-   }
-}
-
-
-
-void brw_fb_WRITE(struct brw_compile *p,
-                  struct brw_reg dest,
-                  GLuint msg_reg_nr,
-                  struct brw_reg src0,
-                  GLuint binding_table_index,
-                  GLuint msg_length,
-                  GLuint response_length,
-                  GLboolean eot)
-{
-   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-   
-   insn->header.predicate_control = 0; /* XXX */
-   insn->header.compression_control = BRW_COMPRESSION_NONE; 
-   insn->header.destreg__conditionalmod = msg_reg_nr;
-  
-   brw_set_dest(insn, dest);
-   brw_set_src0(insn, src0);
-   brw_set_dp_write_message(p->brw,
-                           insn,
-                           binding_table_index,
-                           BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE, /* msg_control */
-                           BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE, /* msg_type */
-                           msg_length,
-                           1,  /* pixel scoreboard */
-                           response_length, 
-                           eot);
-}
-
-
-/**
- * Texture sample instruction.
- * Note: the msg_type plus msg_length values determine exactly what kind
- * of sampling operation is performed.  See volume 4, page 161 of docs.
- */
-void brw_SAMPLE(struct brw_compile *p,
-               struct brw_reg dest,
-               GLuint msg_reg_nr,
-               struct brw_reg src0,
-               GLuint binding_table_index,
-               GLuint sampler,
-               GLuint writemask,
-               GLuint msg_type,
-               GLuint response_length,
-               GLuint msg_length,
-               GLboolean eot,
-               GLuint header_present,
-               GLuint simd_mode)
-{
-   GLboolean need_stall = 0;
-   
-   if (writemask == 0) {
-      /*debug_printf("%s: zero writemask??\n", __FUNCTION__); */
-      return;
-   }
-   
-   /* Hardware doesn't do destination dependency checking on send
-    * instructions properly.  Add a workaround which generates the
-    * dependency by other means.  In practice it seems like this bug
-    * only crops up for texture samples, and only where registers are
-    * written by the send and then written again later without being
-    * read in between.  Luckily for us, we already track that
-    * information and use it to modify the writemask for the
-    * instruction, so that is a guide for whether a workaround is
-    * needed.
-    */
-   if (writemask != BRW_WRITEMASK_XYZW) {
-      GLuint dst_offset = 0;
-      GLuint i, newmask = 0, len = 0;
-
-      for (i = 0; i < 4; i++) {
-        if (writemask & (1<<i))
-           break;
-        dst_offset += 2;
-      }
-      for (; i < 4; i++) {
-        if (!(writemask & (1<<i)))
-           break;
-        newmask |= 1<<i;
-        len++;
-      }
-
-      if (newmask != writemask) {
-        need_stall = 1;
-         /* debug_printf("need stall %x %x\n", newmask , writemask); */
-      }
-      else {
-        struct brw_reg m1 = brw_message_reg(msg_reg_nr);
-        
-        newmask = ~newmask & BRW_WRITEMASK_XYZW;
-
-        brw_push_insn_state(p);
-
-        brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-        brw_set_mask_control(p, BRW_MASK_DISABLE);
-
-        brw_MOV(p, m1, brw_vec8_grf(0,0));      
-        brw_MOV(p, get_element_ud(m1, 2), brw_imm_ud(newmask << 12)); 
-
-        brw_pop_insn_state(p);
-
-        src0 = retype(brw_null_reg(), BRW_REGISTER_TYPE_UW); 
-        dest = offset(dest, dst_offset);
-        response_length = len * 2;
-      }
-   }
-
-   {
-      struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-   
-      insn->header.predicate_control = 0; /* XXX */
-      insn->header.compression_control = BRW_COMPRESSION_NONE;
-      insn->header.destreg__conditionalmod = msg_reg_nr;
-
-      brw_set_dest(insn, dest);
-      brw_set_src0(insn, src0);
-      brw_set_sampler_message(p->brw, insn,
-                             binding_table_index,
-                             sampler,
-                             msg_type,
-                             response_length, 
-                             msg_length,
-                             eot,
-                             header_present,
-                             simd_mode);
-   }
-
-   if (need_stall) {
-      struct brw_reg reg = vec8(offset(dest, response_length-1));
-
-      /*  mov (8) r9.0<1>:f    r9.0<8;8,1>:f    { Align1 }
-       */
-      brw_push_insn_state(p);
-      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-      brw_MOV(p, reg, reg);          
-      brw_pop_insn_state(p);
-   }
-
-}
-
-/* All these variables are pretty confusing - we might be better off
- * using bitmasks and macros for this, in the old style.  Or perhaps
- * just having the caller instantiate the fields in dword3 itself.
- */
-void brw_urb_WRITE(struct brw_compile *p,
-                  struct brw_reg dest,
-                  GLuint msg_reg_nr,
-                  struct brw_reg src0,
-                  GLboolean allocate,
-                  GLboolean used,
-                  GLuint msg_length,
-                  GLuint response_length,
-                  GLboolean eot,
-                  GLboolean writes_complete,
-                  GLuint offset,
-                  GLuint swizzle)
-{
-   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-
-   assert(msg_length < BRW_MAX_MRF);
-
-   brw_set_dest(insn, dest);
-   brw_set_src0(insn, src0);
-   brw_set_src1(insn, brw_imm_d(0));
-
-   insn->header.destreg__conditionalmod = msg_reg_nr;
-
-   brw_set_urb_message(p->brw,
-                      insn,
-                      allocate,
-                      used,
-                      msg_length,
-                      response_length, 
-                      eot, 
-                      writes_complete, 
-                      offset,
-                      swizzle);
-}
-
-void brw_ff_sync(struct brw_compile *p,
-                  struct brw_reg dest,
-                  GLuint msg_reg_nr,
-                  struct brw_reg src0,
-                  GLboolean allocate,
-                  GLboolean used,
-                  GLuint msg_length,
-                  GLuint response_length,
-                  GLboolean eot,
-                  GLboolean writes_complete,
-                  GLuint offset,
-                  GLuint swizzle)
-{
-   struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
-
-   assert(msg_length < 16);
-
-   brw_set_dest(insn, dest);
-   brw_set_src0(insn, src0);
-   brw_set_src1(insn, brw_imm_d(0));
-
-   insn->header.destreg__conditionalmod = msg_reg_nr;
-
-   brw_set_ff_sync_message(p->brw,
-                      insn,
-                      allocate,
-                      used,
-                      msg_length,
-                      response_length, 
-                      eot, 
-                      writes_complete, 
-                      offset,
-                      swizzle);
-}
diff --git a/src/gallium/drivers/i965/brw_eu_util.c b/src/gallium/drivers/i965/brw_eu_util.c
deleted file mode 100644 (file)
index 5405cf1..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-      
-
-#include "brw_context.h"
-#include "brw_defines.h"
-#include "brw_eu.h"
-
-
-void brw_math_invert( struct brw_compile *p, 
-                            struct brw_reg dst,
-                            struct brw_reg src)
-{
-   brw_math( p, 
-            dst,
-            BRW_MATH_FUNCTION_INV, 
-            BRW_MATH_SATURATE_NONE,
-            0,
-            src,
-            BRW_MATH_PRECISION_FULL, 
-            BRW_MATH_DATA_VECTOR );
-}
-
-
-
-void brw_copy4(struct brw_compile *p,
-              struct brw_reg dst,
-              struct brw_reg src,
-              GLuint count)
-{
-   GLuint i;
-
-   dst = vec4(dst);
-   src = vec4(src);
-
-   for (i = 0; i < count; i++)
-   {
-      GLuint delta = i*32;
-      brw_MOV(p, byte_offset(dst, delta),    byte_offset(src, delta));
-      brw_MOV(p, byte_offset(dst, delta+16), byte_offset(src, delta+16));
-   }
-}
-
-
-void brw_copy8(struct brw_compile *p,
-              struct brw_reg dst,
-              struct brw_reg src,
-              GLuint count)
-{
-   GLuint i;
-
-   dst = vec8(dst);
-   src = vec8(src);
-
-   for (i = 0; i < count; i++)
-   {
-      GLuint delta = i*32;
-      brw_MOV(p, byte_offset(dst, delta),    byte_offset(src, delta));
-   }
-}
-
-
-void brw_copy_indirect_to_indirect(struct brw_compile *p,
-                                  struct brw_indirect dst_ptr,
-                                  struct brw_indirect src_ptr,
-                                  GLuint count)
-{
-   GLuint i;
-
-   for (i = 0; i < count; i++)
-   {
-      GLuint delta = i*32;
-      brw_MOV(p, deref_4f(dst_ptr, delta),    deref_4f(src_ptr, delta));
-      brw_MOV(p, deref_4f(dst_ptr, delta+16), deref_4f(src_ptr, delta+16));
-   }
-}
-
-
-void brw_copy_from_indirect(struct brw_compile *p,
-                           struct brw_reg dst,
-                           struct brw_indirect ptr,
-                           GLuint count)
-{
-   GLuint i;
-
-   dst = vec4(dst);
-
-   for (i = 0; i < count; i++)
-   {
-      GLuint delta = i*32;
-      brw_MOV(p, byte_offset(dst, delta),    deref_4f(ptr, delta));
-      brw_MOV(p, byte_offset(dst, delta+16), deref_4f(ptr, delta+16));
-   }
-}
-
-
-
-
diff --git a/src/gallium/drivers/i965/brw_gs.c b/src/gallium/drivers/i965/brw_gs.c
deleted file mode 100644 (file)
index 2a8165b..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-      
-#include "brw_batchbuffer.h"
-
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_eu.h"
-#include "brw_state.h"
-#include "brw_gs.h"
-
-
-
-static enum pipe_error compile_gs_prog( struct brw_context *brw,
-                                        struct brw_gs_prog_key *key,
-                                        struct brw_winsys_buffer **bo_out )
-{
-   struct brw_gs_compile c;
-   enum pipe_error ret;
-   const GLuint *program;
-   GLuint program_size;
-
-   memset(&c, 0, sizeof(c));
-   
-   c.key = *key;
-   c.need_ff_sync = brw->gen == 5;
-   /* Need to locate the two positions present in vertex + header.
-    * These are currently hardcoded:
-    */
-   c.nr_attrs = c.key.nr_attrs;
-
-   if (brw->gen == 5)
-      c.nr_regs = (c.nr_attrs + 1) / 2 + 3;  /* are vertices packed, or reg-aligned? */
-   else
-      c.nr_regs = (c.nr_attrs + 1) / 2 + 1;  /* are vertices packed, or reg-aligned? */
-
-   c.nr_bytes = c.nr_regs * REG_SIZE;
-
-   
-   /* Begin the compilation:
-    */
-   brw_init_compile(brw, &c.func);
-
-   c.func.single_program_flow = 1;
-
-   /* For some reason the thread is spawned with only 4 channels
-    * unmasked.  
-    */
-   brw_set_mask_control(&c.func, BRW_MASK_DISABLE);
-
-
-   /* Note that primitives which don't require a GS program have
-    * already been weeded out by this stage:
-    */
-   switch (key->primitive) {
-   case PIPE_PRIM_QUADS:
-      brw_gs_quads( &c ); 
-      break;
-   case PIPE_PRIM_QUAD_STRIP:
-      brw_gs_quad_strip( &c );
-      break;
-   case PIPE_PRIM_LINE_LOOP:
-      brw_gs_lines( &c );
-      break;
-   case PIPE_PRIM_LINES:
-      if (key->hint_gs_always)
-        brw_gs_lines( &c );
-      else {
-        return PIPE_OK;
-      }
-      break;
-   case PIPE_PRIM_TRIANGLES:
-      if (key->hint_gs_always)
-        brw_gs_tris( &c );
-      else {
-        return PIPE_OK;
-      }
-      break;
-   case PIPE_PRIM_POINTS:
-      if (key->hint_gs_always)
-        brw_gs_points( &c );
-      else {
-        return PIPE_OK;
-      }
-      break;
-   default:
-      assert(0);
-      return PIPE_ERROR_BAD_INPUT;
-   }
-
-   /* get the program
-    */
-   ret = brw_get_program(&c.func, &program, &program_size);
-   if (ret)
-      return ret;
-
-   /* Upload
-    */
-   ret = brw_upload_cache( &brw->cache, BRW_GS_PROG,
-                           &c.key, sizeof(c.key),
-                           NULL, 0,
-                           program, program_size,
-                           &c.prog_data,
-                           &brw->gs.prog_data,
-                           bo_out );
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-static const unsigned gs_prim[PIPE_PRIM_MAX] = {  
-   PIPE_PRIM_POINTS,
-   PIPE_PRIM_LINES,
-   PIPE_PRIM_LINE_LOOP,
-   PIPE_PRIM_LINES,
-   PIPE_PRIM_TRIANGLES,
-   PIPE_PRIM_TRIANGLES,
-   PIPE_PRIM_TRIANGLES,
-   PIPE_PRIM_QUADS,
-   PIPE_PRIM_QUAD_STRIP,
-   PIPE_PRIM_TRIANGLES
-};
-
-static void populate_key( struct brw_context *brw,
-                         struct brw_gs_prog_key *key )
-{
-   const struct brw_fs_signature *sig = &brw->curr.fragment_shader->signature;
-
-   memset(key, 0, sizeof(*key));
-
-   /* PIPE_NEW_FRAGMENT_SIGNATURE */
-   key->nr_attrs = sig->nr_inputs + 1;
-
-   /* BRW_NEW_PRIMITIVE */
-   key->primitive = gs_prim[brw->primitive];
-
-   key->hint_gs_always = 0;    /* debug code? */
-
-   key->need_gs_prog = (key->hint_gs_always ||
-                       brw->primitive == PIPE_PRIM_QUADS ||
-                       brw->primitive == PIPE_PRIM_QUAD_STRIP ||
-                       brw->primitive == PIPE_PRIM_LINE_LOOP);
-}
-
-/* Calculate interpolants for triangle and line rasterization.
- */
-static int prepare_gs_prog(struct brw_context *brw)
-{
-   struct brw_gs_prog_key key;
-   enum pipe_error ret;
-
-   /* Populate the key:
-    */
-   populate_key(brw, &key);
-
-   if (brw->gs.prog_active != key.need_gs_prog) {
-      brw->state.dirty.cache |= CACHE_NEW_GS_PROG;
-      brw->gs.prog_active = key.need_gs_prog;
-   }
-
-   if (!brw->gs.prog_active)
-      return PIPE_OK;
-
-   if (brw_search_cache(&brw->cache, BRW_GS_PROG,
-                        &key, sizeof(key),
-                        NULL, 0,
-                        &brw->gs.prog_data,
-                        &brw->gs.prog_bo))
-      return PIPE_OK;
-
-   ret = compile_gs_prog( brw, &key, &brw->gs.prog_bo );
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-const struct brw_tracked_state brw_gs_prog = {
-   .dirty = {
-      .mesa  = PIPE_NEW_FRAGMENT_SIGNATURE,
-      .brw   = BRW_NEW_PRIMITIVE,
-      .cache = 0,
-   },
-   .prepare = prepare_gs_prog
-};
diff --git a/src/gallium/drivers/i965/brw_gs.h b/src/gallium/drivers/i965/brw_gs.h
deleted file mode 100644 (file)
index 6e616dc..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#ifndef BRW_GS_H
-#define BRW_GS_H
-
-
-#include "brw_context.h"
-#include "brw_eu.h"
-
-#define MAX_GS_VERTS (4)            
-
-struct brw_gs_prog_key {
-   GLuint nr_attrs:8;
-   GLuint primitive:4;
-   GLuint hint_gs_always:1;
-   GLuint need_gs_prog:1;
-   GLuint pad:18;
-};
-
-struct brw_gs_compile {
-   struct brw_compile func;
-   struct brw_gs_prog_key key;
-   struct brw_gs_prog_data prog_data;
-   
-   struct {
-      struct brw_reg R0;
-      struct brw_reg vertex[MAX_GS_VERTS];
-   } reg;
-
-   /* 3 different ways of expressing vertex size:
-    */
-   GLuint nr_attrs;
-   GLuint nr_regs;
-   GLuint nr_bytes;
-   GLboolean need_ff_sync;
-};
-
-#define ATTR_SIZE  (4*4)
-
-void brw_gs_quads( struct brw_gs_compile *c );
-void brw_gs_quad_strip( struct brw_gs_compile *c );
-void brw_gs_tris( struct brw_gs_compile *c );
-void brw_gs_lines( struct brw_gs_compile *c );
-void brw_gs_points( struct brw_gs_compile *c );
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_gs_emit.c b/src/gallium/drivers/i965/brw_gs_emit.c
deleted file mode 100644 (file)
index 9b58773..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "brw_batchbuffer.h"
-
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_eu.h"
-#include "brw_gs.h"
-
-static void brw_gs_alloc_regs( struct brw_gs_compile *c,
-                              GLuint nr_verts )
-{
-   GLuint i = 0,j;
-
-   /* Register usage is static, precompute here:
-    */
-   c->reg.R0 = retype(brw_vec8_grf(i, 0), BRW_REGISTER_TYPE_UD); i++;
-
-   /* Payload vertices plus space for more generated vertices:
-    */
-   for (j = 0; j < nr_verts; j++) {
-      c->reg.vertex[j] = brw_vec4_grf(i, 0);
-      i += c->nr_regs;
-   }
-
-   c->prog_data.urb_read_length = c->nr_regs; 
-   c->prog_data.total_grf = i;
-}
-
-
-static void brw_gs_emit_vue(struct brw_gs_compile *c, 
-                           struct brw_reg vert,
-                           GLboolean last,
-                           GLuint header)
-{
-   struct brw_compile *p = &c->func;
-   GLboolean allocate = !last;
-
-   /* Overwrite PrimType and PrimStart in the message header, for
-    * each vertex in turn:
-    */
-   brw_MOV(p, get_element_ud(c->reg.R0, 2), brw_imm_ud(header));
-
-   /* Copy the vertex from vertn into m1..mN+1:
-    */
-   brw_copy8(p, brw_message_reg(1), vert, c->nr_regs);
-
-   /* Send each vertex as a seperate write to the urb.  This is
-    * different to the concept in brw_sf_emit.c, where subsequent
-    * writes are used to build up a single urb entry.  Each of these
-    * writes instantiates a seperate urb entry, and a new one must be
-    * allocated each time.
-    */
-   brw_urb_WRITE(p, 
-                allocate ? c->reg.R0 : retype(brw_null_reg(), BRW_REGISTER_TYPE_UD),
-                0,
-                c->reg.R0,
-                allocate,
-                1,             /* used */
-                c->nr_regs + 1, /* msg length */
-                allocate ? 1 : 0, /* response length */
-                allocate ? 0 : 1, /* eot */
-                1,             /* writes_complete */
-                0,             /* urb offset */
-                BRW_URB_SWIZZLE_NONE);
-}
-
-static void brw_gs_ff_sync(struct brw_gs_compile *c, int num_prim)
-{
-       struct brw_compile *p = &c->func;
-       brw_MOV(p, get_element_ud(c->reg.R0, 1), brw_imm_ud(num_prim));
-       brw_ff_sync(p, 
-                               c->reg.R0,
-                               0,
-                               c->reg.R0,
-                               1,      
-                               1,              /* used */
-                               1,      /* msg length */
-                               1,              /* response length */
-                               0,              /* eot */
-                               1,              /* write compelete */
-                               0,              /* urb offset */
-                               BRW_URB_SWIZZLE_NONE);
-}
-
-
-void brw_gs_quads( struct brw_gs_compile *c )
-{
-   brw_gs_alloc_regs(c, 4);
-   
-   /* Use polygons for correct edgeflag behaviour. Note that vertex 3
-    * is the PV for quads, but vertex 0 for polygons:
-    */
-   if (c->need_ff_sync)
-          brw_gs_ff_sync(c, 1);    
-   brw_gs_emit_vue(c, c->reg.vertex[3], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START));
-   brw_gs_emit_vue(c, c->reg.vertex[0], 0, (_3DPRIM_POLYGON << 2));
-   brw_gs_emit_vue(c, c->reg.vertex[1], 0, (_3DPRIM_POLYGON << 2)); 
-   brw_gs_emit_vue(c, c->reg.vertex[2], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
-}
-
-void brw_gs_quad_strip( struct brw_gs_compile *c )
-{
-   brw_gs_alloc_regs(c, 4);
-   
-   if (c->need_ff_sync)
-          brw_gs_ff_sync(c, 1);      
-   brw_gs_emit_vue(c, c->reg.vertex[2], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START));
-   brw_gs_emit_vue(c, c->reg.vertex[3], 0, (_3DPRIM_POLYGON << 2));
-   brw_gs_emit_vue(c, c->reg.vertex[0], 0, (_3DPRIM_POLYGON << 2)); 
-   brw_gs_emit_vue(c, c->reg.vertex[1], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
-}
-
-void brw_gs_tris( struct brw_gs_compile *c )
-{
-   brw_gs_alloc_regs(c, 3);
-
-   if (c->need_ff_sync)
-          brw_gs_ff_sync(c, 1);      
-   brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_TRILIST << 2) | R02_PRIM_START));
-   brw_gs_emit_vue(c, c->reg.vertex[1], 0, (_3DPRIM_TRILIST << 2));
-   brw_gs_emit_vue(c, c->reg.vertex[2], 1, ((_3DPRIM_TRILIST << 2) | R02_PRIM_END));
-}
-
-void brw_gs_lines( struct brw_gs_compile *c )
-{
-   brw_gs_alloc_regs(c, 2);
-
-   if (c->need_ff_sync)
-          brw_gs_ff_sync(c, 1);      
-   brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_LINESTRIP << 2) | R02_PRIM_START));
-   brw_gs_emit_vue(c, c->reg.vertex[1], 1, ((_3DPRIM_LINESTRIP << 2) | R02_PRIM_END));
-}
-
-void brw_gs_points( struct brw_gs_compile *c )
-{
-   brw_gs_alloc_regs(c, 1);
-
-   if (c->need_ff_sync)
-          brw_gs_ff_sync(c, 1);      
-   brw_gs_emit_vue(c, c->reg.vertex[0], 1, ((_3DPRIM_POINTLIST << 2) | R02_PRIM_START | R02_PRIM_END));
-}
-
-
-
-
-
-
-
-
diff --git a/src/gallium/drivers/i965/brw_gs_state.c b/src/gallium/drivers/i965/brw_gs_state.c
deleted file mode 100644 (file)
index 6e070f6..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-#include "util/u_math.h"
-
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_defines.h"
-#include "brw_debug.h"
-
-struct brw_gs_unit_key {
-   unsigned int total_grf;
-   unsigned int urb_entry_read_length;
-
-   unsigned int curbe_offset;
-
-   unsigned int nr_urb_entries, urb_size;
-   GLboolean prog_active;
-};
-
-static void
-gs_unit_populate_key(struct brw_context *brw, struct brw_gs_unit_key *key)
-{
-   memset(key, 0, sizeof(*key));
-
-   /* CACHE_NEW_GS_PROG */
-   key->prog_active = brw->gs.prog_active;
-   if (key->prog_active) {
-      key->total_grf = brw->gs.prog_data->total_grf;
-      key->urb_entry_read_length = brw->gs.prog_data->urb_read_length;
-   } else {
-      key->total_grf = 1;
-      key->urb_entry_read_length = 1;
-   }
-
-   /* BRW_NEW_CURBE_OFFSETS */
-   key->curbe_offset = brw->curbe.clip_start;
-
-   /* BRW_NEW_URB_FENCE */
-   key->nr_urb_entries = brw->urb.nr_gs_entries;
-   key->urb_size = brw->urb.vsize;
-}
-
-static enum pipe_error
-gs_unit_create_from_key(struct brw_context *brw, 
-                        struct brw_gs_unit_key *key,
-                        struct brw_winsys_reloc *reloc,
-                        unsigned nr_reloc,
-                        struct brw_winsys_buffer **bo_out)
-{
-   struct brw_gs_unit_state gs;
-   enum pipe_error ret;
-
-
-   memset(&gs, 0, sizeof(gs));
-
-   /* reloc */
-   gs.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
-   gs.thread0.kernel_start_pointer = 0;
-
-   gs.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
-   gs.thread1.single_program_flow = 1;
-
-   gs.thread3.dispatch_grf_start_reg = 1;
-   gs.thread3.const_urb_entry_read_offset = 0;
-   gs.thread3.const_urb_entry_read_length = 0;
-   gs.thread3.urb_entry_read_offset = 0;
-   gs.thread3.urb_entry_read_length = key->urb_entry_read_length;
-
-   gs.thread4.nr_urb_entries = key->nr_urb_entries;
-   gs.thread4.urb_entry_allocation_size = key->urb_size - 1;
-
-   if (key->nr_urb_entries >= 8)
-      gs.thread4.max_threads = 1;
-   else
-      gs.thread4.max_threads = 0;
-
-   if (brw->gen == 5)
-      gs.thread4.rendering_enable = 1;
-
-   if (BRW_DEBUG & DEBUG_STATS)
-      gs.thread4.stats_enable = 1;
-
-   ret = brw_upload_cache(&brw->cache, BRW_GS_UNIT,
-                          key, sizeof(*key),
-                          reloc, nr_reloc,
-                          &gs, sizeof(gs),
-                          NULL, NULL,
-                          bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-static enum pipe_error prepare_gs_unit(struct brw_context *brw)
-{
-   struct brw_gs_unit_key key;
-   enum pipe_error ret;
-   struct brw_winsys_reloc reloc[1];
-   unsigned nr_reloc = 0;
-   unsigned grf_reg_count;
-
-   gs_unit_populate_key(brw, &key);
-
-   grf_reg_count = (align(key.total_grf, 16) / 16 - 1);
-
-   /* GS program relocation */
-   if (key.prog_active) {
-      make_reloc(&reloc[nr_reloc++],
-                 BRW_USAGE_STATE,
-                 grf_reg_count << 1,
-                 offsetof(struct brw_gs_unit_state, thread0),
-                 brw->gs.prog_bo);
-   }
-
-   if (brw_search_cache(&brw->cache, BRW_GS_UNIT,
-                        &key, sizeof(key),
-                        reloc, nr_reloc,
-                        NULL,
-                        &brw->gs.state_bo))
-      return PIPE_OK;
-
-   ret = gs_unit_create_from_key(brw, &key,
-                                 reloc, nr_reloc,
-                                 &brw->gs.state_bo);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-const struct brw_tracked_state brw_gs_unit = {
-   .dirty = {
-      .mesa  = 0,
-      .brw   = (BRW_NEW_CURBE_OFFSETS |
-               BRW_NEW_URB_FENCE),
-      .cache = CACHE_NEW_GS_PROG
-   },
-   .prepare = prepare_gs_unit,
-};
diff --git a/src/gallium/drivers/i965/brw_misc_state.c b/src/gallium/drivers/i965/brw_misc_state.c
deleted file mode 100644 (file)
index 7d481a7..0000000
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-
-#include "brw_debug.h"
-#include "brw_batchbuffer.h"
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_defines.h"
-#include "brw_screen.h"
-#include "brw_pipe_rast.h"
-
-
-
-
-
-/***********************************************************************
- * Blend color
- */
-
-static int upload_blend_constant_color(struct brw_context *brw)
-{
-   BRW_CACHED_BATCH_STRUCT(brw, &brw->curr.bcc);
-   return 0;
-}
-
-
-const struct brw_tracked_state brw_blend_constant_color = {
-   .dirty = {
-      .mesa = PIPE_NEW_BLEND_COLOR,
-      .brw = 0,
-      .cache = 0
-   },
-   .emit = upload_blend_constant_color
-};
-
-/***********************************************************************
- * Drawing rectangle - framebuffer dimensions
- */
-static int upload_drawing_rect(struct brw_context *brw)
-{
-   BEGIN_BATCH(4, NO_LOOP_CLIPRECTS);
-   OUT_BATCH(_3DSTATE_DRAWRECT_INFO_I965);
-   OUT_BATCH(0);
-   OUT_BATCH(((brw->curr.fb.width - 1) & 0xffff) |
-           ((brw->curr.fb.height - 1) << 16));
-   OUT_BATCH(0);
-   ADVANCE_BATCH();
-   return 0;
-}
-
-const struct brw_tracked_state brw_drawing_rect = {
-   .dirty = {
-      .mesa = PIPE_NEW_FRAMEBUFFER_DIMENSIONS,
-      .brw = 0,
-      .cache = 0
-   },
-   .emit = upload_drawing_rect
-};
-
-
-/***********************************************************************
- * Binding table pointers
- */
-
-static int prepare_binding_table_pointers(struct brw_context *brw)
-{
-   brw_add_validated_bo(brw, brw->vs.bind_bo);
-   brw_add_validated_bo(brw, brw->wm.bind_bo);
-   return 0;
-}
-
-/**
- * Upload the binding table pointers, which point each stage's array of surface
- * state pointers.
- *
- * The binding table pointers are relative to the surface state base address,
- * which is 0.
- */
-static int upload_binding_table_pointers(struct brw_context *brw)
-{
-   BEGIN_BATCH(6, IGNORE_CLIPRECTS);
-   OUT_BATCH(CMD_BINDING_TABLE_PTRS << 16 | (6 - 2));
-   if (brw->vs.bind_bo != NULL)
-      OUT_RELOC(brw->vs.bind_bo, 
-               BRW_USAGE_SAMPLER,
-               0); /* vs */
-   else
-      OUT_BATCH(0);
-   OUT_BATCH(0); /* gs */
-   OUT_BATCH(0); /* clip */
-   OUT_BATCH(0); /* sf */
-   OUT_RELOC(brw->wm.bind_bo,
-            BRW_USAGE_SAMPLER,
-            0); /* wm/ps */
-   ADVANCE_BATCH();
-   return 0;
-}
-
-const struct brw_tracked_state brw_binding_table_pointers = {
-   .dirty = {
-      .mesa = 0,
-      .brw = BRW_NEW_BATCH,
-      .cache = CACHE_NEW_SURF_BIND,
-   },
-   .prepare = prepare_binding_table_pointers,
-   .emit = upload_binding_table_pointers,
-};
-
-
-/**********************************************************************
- * Upload pointers to the per-stage state.
- *
- * The state pointers in this packet are all relative to the general state
- * base address set by CMD_STATE_BASE_ADDRESS, which is 0.
- */
-static int upload_pipelined_state_pointers(struct brw_context *brw )
-{
-   BEGIN_BATCH(7, IGNORE_CLIPRECTS);
-   OUT_BATCH(CMD_PIPELINED_STATE_POINTERS << 16 | (7 - 2));
-   OUT_RELOC(brw->vs.state_bo, 
-            BRW_USAGE_STATE,
-            0);
-   if (brw->gs.prog_active)
-      OUT_RELOC(brw->gs.state_bo, 
-               BRW_USAGE_STATE,
-               1);
-   else
-      OUT_BATCH(0);
-   OUT_RELOC(brw->clip.state_bo, 
-            BRW_USAGE_STATE,
-            1);
-   OUT_RELOC(brw->sf.state_bo,
-            BRW_USAGE_STATE,
-            0);
-   OUT_RELOC(brw->wm.state_bo,
-            BRW_USAGE_STATE,
-            0);
-   OUT_RELOC(brw->cc.state_bo,
-            BRW_USAGE_STATE,
-            0);
-   ADVANCE_BATCH();
-
-   brw->state.dirty.brw |= BRW_NEW_PSP;
-   return 0;
-}
-
-
-static int prepare_psp_urb_cbs(struct brw_context *brw)
-{
-   brw_add_validated_bo(brw, brw->vs.state_bo);
-   brw_add_validated_bo(brw, brw->gs.state_bo);
-   brw_add_validated_bo(brw, brw->clip.state_bo);
-   brw_add_validated_bo(brw, brw->sf.state_bo);
-   brw_add_validated_bo(brw, brw->wm.state_bo);
-   brw_add_validated_bo(brw, brw->cc.state_bo);
-   return 0;
-}
-
-static int upload_psp_urb_cbs(struct brw_context *brw )
-{
-   int ret;
-   
-   ret = upload_pipelined_state_pointers(brw);
-   if (ret)
-      return ret;
-
-   ret = brw_upload_urb_fence(brw);
-   if (ret)
-      return ret;
-
-   ret = brw_upload_cs_urb_state(brw);
-   if (ret)
-      return ret;
-
-   return 0;
-}
-
-const struct brw_tracked_state brw_psp_urb_cbs = {
-   .dirty = {
-      .mesa = 0,
-      .brw = BRW_NEW_URB_FENCE | BRW_NEW_BATCH,
-      .cache = (CACHE_NEW_VS_UNIT | 
-               CACHE_NEW_GS_UNIT | 
-               CACHE_NEW_GS_PROG | 
-               CACHE_NEW_CLIP_UNIT | 
-               CACHE_NEW_SF_UNIT | 
-               CACHE_NEW_WM_UNIT | 
-               CACHE_NEW_CC_UNIT)
-   },
-   .prepare = prepare_psp_urb_cbs,
-   .emit = upload_psp_urb_cbs,
-};
-
-
-/***********************************************************************
- * Depth buffer 
- */
-
-static int prepare_depthbuffer(struct brw_context *brw)
-{
-   struct pipe_surface *zsbuf = brw->curr.fb.zsbuf;
-
-   if (zsbuf)
-      brw_add_validated_bo(brw, brw_surface(zsbuf)->bo);
-
-   return 0;
-}
-
-static int emit_depthbuffer(struct brw_context *brw)
-{
-   struct pipe_surface *surface = brw->curr.fb.zsbuf;
-   unsigned int len = (brw->is_g4x || brw->gen == 5) ? 6 : 5;
-
-   if (surface == NULL) {
-      BEGIN_BATCH(len, IGNORE_CLIPRECTS);
-      OUT_BATCH(CMD_DEPTH_BUFFER << 16 | (len - 2));
-      OUT_BATCH((BRW_DEPTHFORMAT_D32_FLOAT << 18) |
-               (BRW_SURFACE_NULL << 29));
-      OUT_BATCH(0);
-      OUT_BATCH(0);
-      OUT_BATCH(0);
-
-      if (brw->is_g4x || brw->gen == 5)
-         OUT_BATCH(0);
-
-      ADVANCE_BATCH();
-   } else {
-      struct brw_winsys_buffer *bo;
-      unsigned int format;
-      unsigned int pitch;
-      unsigned int cpp;
-
-      switch (surface->format) {
-      case PIPE_FORMAT_Z16_UNORM:
-        format = BRW_DEPTHFORMAT_D16_UNORM;
-        cpp = 2;
-        break;
-      case PIPE_FORMAT_Z24X8_UNORM:
-      case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-        format = BRW_DEPTHFORMAT_D24_UNORM_S8_UINT;
-        cpp = 4;
-        break;
-      case PIPE_FORMAT_Z32_FLOAT:
-        format = BRW_DEPTHFORMAT_D32_FLOAT;
-        cpp = 4;
-        break;
-      default:
-        assert(0);
-        return PIPE_ERROR_BAD_INPUT;
-      }
-
-      bo = brw_surface(surface)->bo;
-      pitch = brw_surface(surface)->pitch;
-
-      BEGIN_BATCH(len, IGNORE_CLIPRECTS);
-      OUT_BATCH(CMD_DEPTH_BUFFER << 16 | (len - 2));
-      OUT_BATCH(((pitch * cpp) - 1) |
-               (format << 18) |
-               (BRW_TILEWALK_YMAJOR << 26) |
-                /* always linear ?
-               ((surface->layout != PIPE_SURFACE_LAYOUT_LINEAR) << 27) |*/
-               (BRW_SURFACE_2D << 29));
-      OUT_RELOC(bo,
-               BRW_USAGE_DEPTH_BUFFER,
-               brw_surface(surface)->offset);
-      OUT_BATCH((BRW_SURFACE_MIPMAPLAYOUT_BELOW << 1) |
-               ((pitch - 1) << 6) |
-               ((surface->height - 1) << 19));
-      OUT_BATCH(0);
-
-      if (brw->is_g4x || brw->gen == 5)
-         OUT_BATCH(0);
-
-      ADVANCE_BATCH();
-   }
-
-   return 0;
-}
-
-const struct brw_tracked_state brw_depthbuffer = {
-   .dirty = {
-      .mesa = PIPE_NEW_DEPTH_BUFFER,
-      .brw = BRW_NEW_BATCH,
-      .cache = 0,
-   },
-   .prepare = prepare_depthbuffer,
-   .emit = emit_depthbuffer,
-};
-
-
-
-/***********************************************************************
- * Polygon stipple packet
- */
-
-static int upload_polygon_stipple(struct brw_context *brw)
-{
-   BRW_CACHED_BATCH_STRUCT(brw, &brw->curr.bps);
-   return 0;
-}
-
-const struct brw_tracked_state brw_polygon_stipple = {
-   .dirty = {
-      .mesa = PIPE_NEW_POLYGON_STIPPLE,
-      .brw = 0,
-      .cache = 0
-   },
-   .emit = upload_polygon_stipple
-};
-
-
-/***********************************************************************
- * Line stipple packet
- */
-
-static int upload_line_stipple(struct brw_context *brw)
-{
-   const struct brw_line_stipple *bls = &brw->curr.rast->bls;
-   if (bls->header.opcode) {
-      BRW_CACHED_BATCH_STRUCT(brw, bls);
-   }
-   return 0;
-}
-
-const struct brw_tracked_state brw_line_stipple = {
-   .dirty = {
-      .mesa = PIPE_NEW_RAST,
-      .brw = 0,
-      .cache = 0
-   },
-   .emit = upload_line_stipple
-};
-
-
-/***********************************************************************
- * Misc invariant state packets
- */
-
-static int upload_invariant_state( struct brw_context *brw )
-{
-   {
-      /* 0x61040000  Pipeline Select */
-      /*     PipelineSelect            : 0 */
-      struct brw_pipeline_select ps;
-
-      memset(&ps, 0, sizeof(ps));
-      if (brw->is_g4x || brw->gen == 5)
-        ps.header.opcode = CMD_PIPELINE_SELECT_GM45;
-      else
-        ps.header.opcode = CMD_PIPELINE_SELECT_965;
-      ps.header.pipeline_select = 0;
-      BRW_BATCH_STRUCT(brw, &ps);
-   }
-
-   {
-      struct brw_global_depth_offset_clamp gdo;
-      memset(&gdo, 0, sizeof(gdo));
-
-      /* Disable depth offset clamping. 
-       */
-      gdo.header.opcode = CMD_GLOBAL_DEPTH_OFFSET_CLAMP;
-      gdo.header.length = sizeof(gdo)/4 - 2;
-      gdo.depth_offset_clamp = 0.0;
-
-      BRW_BATCH_STRUCT(brw, &gdo);
-   }
-
-
-   /* 0x61020000  State Instruction Pointer */
-   {
-      struct brw_system_instruction_pointer sip;
-      memset(&sip, 0, sizeof(sip));
-
-      sip.header.opcode = CMD_STATE_INSN_POINTER;
-      sip.header.length = 0;
-      sip.bits0.pad = 0;
-      sip.bits0.system_instruction_pointer = 0;
-      BRW_BATCH_STRUCT(brw, &sip);
-   }
-
-   /* VF Statistics */
-   {
-      struct brw_vf_statistics vfs;
-      memset(&vfs, 0, sizeof(vfs));
-
-      if (brw->is_g4x || brw->gen == 5)
-        vfs.opcode = CMD_VF_STATISTICS_GM45;
-      else 
-        vfs.opcode = CMD_VF_STATISTICS_965;
-
-      if (BRW_DEBUG & DEBUG_STATS)
-        vfs.statistics_enable = 1; 
-
-      BRW_BATCH_STRUCT(brw, &vfs);
-   }
-   
-   if (!(brw->gen == 4))
-   {
-      struct brw_aa_line_parameters balp;
-
-      /* use legacy aa line coverage computation */
-      memset(&balp, 0, sizeof(balp));
-      balp.header.opcode = CMD_AA_LINE_PARAMETERS;
-      balp.header.length = sizeof(balp) / 4 - 2;
-   
-      BRW_BATCH_STRUCT(brw, &balp);
-   }
-
-   {
-      struct brw_polygon_stipple_offset bpso;
-      
-      /* This is invariant state in gallium:
-       */
-      memset(&bpso, 0, sizeof(bpso));
-      bpso.header.opcode = CMD_POLY_STIPPLE_OFFSET;
-      bpso.header.length = sizeof(bpso)/4-2;
-      bpso.bits0.y_offset = 0;
-      bpso.bits0.x_offset = 0;
-
-      BRW_BATCH_STRUCT(brw, &bpso);
-   }
-   
-   return 0;
-}
-
-const struct brw_tracked_state brw_invariant_state = {
-   .dirty = {
-      .mesa = 0,
-      .brw = BRW_NEW_CONTEXT,
-      .cache = 0
-   },
-   .emit = upload_invariant_state
-};
-
-
-/***********************************************************************
- * State base address 
- */
-
-/**
- * Define the base addresses which some state is referenced from.
- *
- * This allows us to avoid having to emit relocations in many places for
- * cached state, and instead emit pointers inside of large, mostly-static
- * state pools.  This comes at the expense of memory, and more expensive cache
- * misses.
- */
-static int upload_state_base_address( struct brw_context *brw )
-{
-   /* Output the structure (brw_state_base_address) directly to the
-    * batchbuffer, so we can emit relocations inline.
-    */
-   if (brw->gen == 5) {
-       BEGIN_BATCH(8, IGNORE_CLIPRECTS);
-       OUT_BATCH(CMD_STATE_BASE_ADDRESS << 16 | (8 - 2));
-       OUT_BATCH(1); /* General state base address */
-       OUT_BATCH(1); /* Surface state base address */
-       OUT_BATCH(1); /* Indirect object base address */
-       OUT_BATCH(1); /* Instruction base address */
-       OUT_BATCH(1); /* General state upper bound */
-       OUT_BATCH(1); /* Indirect object upper bound */
-       OUT_BATCH(1); /* Instruction access upper bound */
-       ADVANCE_BATCH();
-   } else {
-       BEGIN_BATCH(6, IGNORE_CLIPRECTS);
-       OUT_BATCH(CMD_STATE_BASE_ADDRESS << 16 | (6 - 2));
-       OUT_BATCH(1); /* General state base address */
-       OUT_BATCH(1); /* Surface state base address */
-       OUT_BATCH(1); /* Indirect object base address */
-       OUT_BATCH(1); /* General state upper bound */
-       OUT_BATCH(1); /* Indirect object upper bound */
-       ADVANCE_BATCH();
-   }
-   return 0;
-}
-
-const struct brw_tracked_state brw_state_base_address = {
-   .dirty = {
-      .mesa = 0,
-      .brw = BRW_NEW_CONTEXT,
-      .cache = 0,
-   },
-   .emit = upload_state_base_address
-};
diff --git a/src/gallium/drivers/i965/brw_pipe_blend.c b/src/gallium/drivers/i965/brw_pipe_blend.c
deleted file mode 100644 (file)
index 21f786f..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-
-#include "util/u_memory.h"
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-
-#include "brw_context.h"
-#include "brw_defines.h"
-#include "brw_debug.h"
-
-static int translate_logicop(unsigned logicop)
-{
-   switch (logicop) {
-   case PIPE_LOGICOP_CLEAR:
-      return BRW_LOGICOPFUNCTION_CLEAR;
-   case PIPE_LOGICOP_AND:
-      return BRW_LOGICOPFUNCTION_AND;
-   case PIPE_LOGICOP_AND_REVERSE:
-      return BRW_LOGICOPFUNCTION_AND_REVERSE;
-   case PIPE_LOGICOP_COPY:
-      return BRW_LOGICOPFUNCTION_COPY;
-   case PIPE_LOGICOP_COPY_INVERTED:
-      return BRW_LOGICOPFUNCTION_COPY_INVERTED;
-   case PIPE_LOGICOP_AND_INVERTED:
-      return BRW_LOGICOPFUNCTION_AND_INVERTED;
-   case PIPE_LOGICOP_NOOP:
-      return BRW_LOGICOPFUNCTION_NOOP;
-   case PIPE_LOGICOP_XOR:
-      return BRW_LOGICOPFUNCTION_XOR;
-   case PIPE_LOGICOP_OR:
-      return BRW_LOGICOPFUNCTION_OR;
-   case PIPE_LOGICOP_OR_INVERTED:
-      return BRW_LOGICOPFUNCTION_OR_INVERTED;
-   case PIPE_LOGICOP_NOR:
-      return BRW_LOGICOPFUNCTION_NOR;
-   case PIPE_LOGICOP_EQUIV:
-      return BRW_LOGICOPFUNCTION_EQUIV;
-   case PIPE_LOGICOP_INVERT:
-      return BRW_LOGICOPFUNCTION_INVERT;
-   case PIPE_LOGICOP_OR_REVERSE:
-      return BRW_LOGICOPFUNCTION_OR_REVERSE;
-   case PIPE_LOGICOP_NAND:
-      return BRW_LOGICOPFUNCTION_NAND;
-   case PIPE_LOGICOP_SET:
-      return BRW_LOGICOPFUNCTION_SET;
-   default:
-      assert(0);
-      return BRW_LOGICOPFUNCTION_SET;
-   }
-}
-
-
-static unsigned translate_blend_equation( unsigned mode )
-{
-   switch (mode) {
-   case PIPE_BLEND_ADD: 
-      return BRW_BLENDFUNCTION_ADD; 
-   case PIPE_BLEND_MIN: 
-      return BRW_BLENDFUNCTION_MIN; 
-   case PIPE_BLEND_MAX: 
-      return BRW_BLENDFUNCTION_MAX; 
-   case PIPE_BLEND_SUBTRACT: 
-      return BRW_BLENDFUNCTION_SUBTRACT; 
-   case PIPE_BLEND_REVERSE_SUBTRACT: 
-      return BRW_BLENDFUNCTION_REVERSE_SUBTRACT; 
-   default: 
-      assert(0);
-      return BRW_BLENDFUNCTION_ADD;
-   }
-}
-
-static unsigned translate_blend_factor( unsigned factor )
-{
-   switch(factor) {
-   case PIPE_BLENDFACTOR_ZERO: 
-      return BRW_BLENDFACTOR_ZERO; 
-   case PIPE_BLENDFACTOR_SRC_ALPHA: 
-      return BRW_BLENDFACTOR_SRC_ALPHA; 
-   case PIPE_BLENDFACTOR_ONE: 
-      return BRW_BLENDFACTOR_ONE; 
-   case PIPE_BLENDFACTOR_SRC_COLOR: 
-      return BRW_BLENDFACTOR_SRC_COLOR; 
-   case PIPE_BLENDFACTOR_INV_SRC_COLOR: 
-      return BRW_BLENDFACTOR_INV_SRC_COLOR; 
-   case PIPE_BLENDFACTOR_DST_COLOR: 
-      return BRW_BLENDFACTOR_DST_COLOR; 
-   case PIPE_BLENDFACTOR_INV_DST_COLOR: 
-      return BRW_BLENDFACTOR_INV_DST_COLOR; 
-   case PIPE_BLENDFACTOR_INV_SRC_ALPHA:
-      return BRW_BLENDFACTOR_INV_SRC_ALPHA; 
-   case PIPE_BLENDFACTOR_DST_ALPHA: 
-      return BRW_BLENDFACTOR_DST_ALPHA; 
-   case PIPE_BLENDFACTOR_INV_DST_ALPHA:
-      return BRW_BLENDFACTOR_INV_DST_ALPHA; 
-   case PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE: 
-      return BRW_BLENDFACTOR_SRC_ALPHA_SATURATE;
-   case PIPE_BLENDFACTOR_CONST_COLOR:
-      return BRW_BLENDFACTOR_CONST_COLOR; 
-   case PIPE_BLENDFACTOR_INV_CONST_COLOR:
-      return BRW_BLENDFACTOR_INV_CONST_COLOR;
-   case PIPE_BLENDFACTOR_CONST_ALPHA:
-      return BRW_BLENDFACTOR_CONST_ALPHA; 
-   case PIPE_BLENDFACTOR_INV_CONST_ALPHA:
-      return BRW_BLENDFACTOR_INV_CONST_ALPHA;
-   default:
-      assert(0);
-      return BRW_BLENDFACTOR_ZERO;
-   }   
-}
-
-static void *brw_create_blend_state( struct pipe_context *pipe,
-                                    const struct pipe_blend_state *templ )
-{
-   struct brw_blend_state *blend = CALLOC_STRUCT(brw_blend_state);
-   if (blend == NULL)
-      return NULL;
-
-   if (templ->logicop_enable) {
-      blend->cc2.logicop_enable = 1;
-      blend->cc5.logicop_func = translate_logicop(templ->logicop_func);
-   } 
-   else if (templ->rt[0].blend_enable) {
-      blend->cc6.dest_blend_factor = translate_blend_factor(templ->rt[0].rgb_dst_factor);
-      blend->cc6.src_blend_factor = translate_blend_factor(templ->rt[0].rgb_src_factor);
-      blend->cc6.blend_function = translate_blend_equation(templ->rt[0].rgb_func);
-
-      blend->cc5.ia_dest_blend_factor = translate_blend_factor(templ->rt[0].alpha_dst_factor);
-      blend->cc5.ia_src_blend_factor = translate_blend_factor(templ->rt[0].alpha_src_factor);
-      blend->cc5.ia_blend_function = translate_blend_equation(templ->rt[0].alpha_func);
-
-      blend->cc3.blend_enable = 1;
-      blend->cc3.ia_blend_enable = 
-        (blend->cc6.dest_blend_factor != blend->cc5.ia_dest_blend_factor ||
-         blend->cc6.src_blend_factor != blend->cc5.ia_src_blend_factor ||
-         blend->cc6.blend_function != blend->cc5.ia_blend_function);
-
-      /* Per-surface blend enables, currently just follow global
-       * state:
-       */
-      blend->ss0.color_blend = 1;
-   }
-
-   blend->cc5.dither_enable = templ->dither;
-
-   if (BRW_DEBUG & DEBUG_STATS)
-      blend->cc5.statistics_enable = 1;
-
-   /* Per-surface color mask -- just follow global state:
-    */
-   blend->ss0.writedisable_red   = (templ->rt[0].colormask & PIPE_MASK_R) ? 0 : 1;
-   blend->ss0.writedisable_green = (templ->rt[0].colormask & PIPE_MASK_G) ? 0 : 1;
-   blend->ss0.writedisable_blue  = (templ->rt[0].colormask & PIPE_MASK_B) ? 0 : 1;
-   blend->ss0.writedisable_alpha = (templ->rt[0].colormask & PIPE_MASK_A) ? 0 : 1;
-
-   return (void *)blend;
-}
-
-static void brw_bind_blend_state(struct pipe_context *pipe,
-                                void *cso)
-{
-   struct brw_context *brw = brw_context(pipe);
-   brw->curr.blend = (const struct brw_blend_state *)cso;
-   brw->state.dirty.mesa |= PIPE_NEW_BLEND;
-}
-
-static void brw_delete_blend_state(struct pipe_context *pipe,
-                                 void *cso)
-{
-   struct brw_context *brw = brw_context(pipe);
-   assert((const void *)cso != (const void *)brw->curr.blend);
-   FREE(cso);
-}
-
-
-static void brw_set_blend_color(struct pipe_context *pipe,
-                               const struct pipe_blend_color *blend_color)
-{
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_blend_constant_color *bcc = &brw->curr.bcc;
-
-   bcc->blend_constant_color[0] = blend_color->color[0];
-   bcc->blend_constant_color[1] = blend_color->color[1];
-   bcc->blend_constant_color[2] = blend_color->color[2];
-   bcc->blend_constant_color[3] = blend_color->color[3];
-
-   brw->state.dirty.mesa |= PIPE_NEW_BLEND_COLOR;
-}
-
-
-void brw_pipe_blend_init( struct brw_context *brw )
-{
-   brw->base.set_blend_color = brw_set_blend_color;
-   brw->base.create_blend_state = brw_create_blend_state;
-   brw->base.bind_blend_state = brw_bind_blend_state;
-   brw->base.delete_blend_state = brw_delete_blend_state;
-
-   {
-      struct brw_blend_constant_color *bcc = &brw->curr.bcc;
-
-      memset(bcc, 0, sizeof(*bcc));      
-      bcc->header.opcode = CMD_BLEND_CONSTANT_COLOR;
-      bcc->header.length = sizeof(*bcc)/4-2;
-   }
-
-}
-
-void brw_pipe_blend_cleanup( struct brw_context *brw )
-{
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_clear.c b/src/gallium/drivers/i965/brw_pipe_clear.c
deleted file mode 100644 (file)
index 759ef4c..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-#include "util/u_pack_color.h"
-#include "util/u_math.h"
-
-#include "pipe/p_state.h"
-
-#include "brw_batchbuffer.h"
-#include "brw_screen.h"
-#include "brw_context.h"
-
-#define MASK16 0xffff
-#define MASK24 0xffffff
-
-
-/**
- * Use blitting to clear the renderbuffers named by 'flags'.
- * Note: we can't use the ctx->DrawBuffer->_ColorDrawBufferIndexes field
- * since that might include software renderbuffers or renderbuffers
- * which we're clearing with triangles.
- */
-static enum pipe_error
-try_clear( struct brw_context *brw,
-           struct brw_surface *surface,
-           unsigned value,
-           unsigned rgba_mask)
-{
-   uint32_t BR13, CMD;
-   int x1 = 0;
-   int y1 = 0;
-   int x2 = surface->base.width;
-   int y2 = surface->base.height;
-   int pitch = surface->pitch;
-   int cpp = surface->cpp;
-
-   if (x2 == 0 || y2 == 0)
-      return 0;
-
-   debug_printf("%s dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n",
-                __FUNCTION__,
-                (void *)surface->bo, pitch * cpp,
-                surface->offset,
-                x1, y1, x2 - x1, y2 - y1);
-
-   BR13 = 0xf0 << 16;
-   CMD = XY_COLOR_BLT_CMD | rgba_mask;
-
-   /* Setup the blit command */
-   if (cpp == 4) {
-      BR13 |= BR13_8888;
-   }
-   else {
-      assert(cpp == 2);
-      BR13 |= BR13_565;
-   }
-
-   /* XXX: nasty hack for clearing depth buffers
-    */
-   if (surface->tiling == BRW_TILING_Y) {
-      x2 = pitch;
-   }
-
-   if (surface->tiling == BRW_TILING_X) {
-      CMD |= XY_DST_TILED;
-      pitch /= 4;
-   }
-
-   BR13 |= (pitch * cpp);
-
-   BEGIN_BATCH(6, 0);
-   OUT_BATCH(CMD);
-   OUT_BATCH(BR13);
-   OUT_BATCH((y1 << 16) | x1);
-   OUT_BATCH((y2 << 16) | x2);
-   OUT_RELOC(surface->bo,
-             BRW_USAGE_BLIT_DEST,
-             surface->offset);
-   OUT_BATCH(value);
-   ADVANCE_BATCH();
-
-   return 0;
-}
-
-
-
-
-static void color_clear(struct brw_context *brw, 
-                        struct brw_surface *bsurface,
-                        const float *rgba )
-{
-   enum pipe_error ret;
-   union util_color value;
-
-   util_pack_color( rgba, bsurface->base.format, &value );
-
-   if (bsurface->cpp == 2)
-      value.ui |= value.ui << 16;
-
-   ret = try_clear( brw, bsurface, value.ui,
-                    XY_BLT_WRITE_RGB | XY_BLT_WRITE_ALPHA );
-
-   if (ret != 0) {
-      brw_context_flush( brw );
-      ret = try_clear( brw, bsurface, value.ui,
-                       XY_BLT_WRITE_RGB | XY_BLT_WRITE_ALPHA );
-      assert( ret == 0 );
-   }
-}
-
-static void zstencil_clear(struct brw_context *brw,
-                           struct brw_surface *bsurface,
-                           unsigned clear_flags,
-                           double depth,
-                           unsigned stencil )
-{
-   enum pipe_error ret;
-   unsigned value;
-   unsigned mask = 0;
-   union fi tmp;
-
-   if (clear_flags & PIPE_CLEAR_DEPTH)
-      mask |= XY_BLT_WRITE_RGB;
-
-   switch (bsurface->base.format) {
-   case PIPE_FORMAT_Z32_FLOAT:
-      tmp.f = (float)depth;
-      value = tmp.ui;
-      break;
-   case PIPE_FORMAT_Z24X8_UNORM:
-   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-      value = ((unsigned)(depth * MASK24) & MASK24);
-      break;
-   case PIPE_FORMAT_Z16_UNORM:
-      value = ((unsigned)(depth * MASK16) & MASK16);
-      break;
-   default:
-      assert(0);
-      return;
-   }
-
-   switch (bsurface->base.format) {
-   case PIPE_FORMAT_Z32_FLOAT:
-      mask |= XY_BLT_WRITE_ALPHA;
-      break;
-   case PIPE_FORMAT_Z24X8_UNORM:
-      value = value | (stencil << 24);
-      mask |= XY_BLT_WRITE_ALPHA;
-      break;
-   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-      value = value | (stencil << 24);
-      if (clear_flags & PIPE_CLEAR_STENCIL)
-         mask |= XY_BLT_WRITE_ALPHA;
-      break;
-   case PIPE_FORMAT_Z16_UNORM:
-      value = value | (value << 16);
-      mask |= XY_BLT_WRITE_ALPHA;
-      break;
-   default:
-      break;
-   }
-
-   ret = try_clear( brw, bsurface, value, mask );
-
-   if (ret != 0) {
-      brw_context_flush( brw );
-      ret = try_clear( brw, bsurface, value, mask );
-      assert( ret == 0 );
-   }
-}
-
-
-
-/**
- * Clear the given surface to the specified value.
- * No masking, no scissor (clear entire buffer).
- */
-static void brw_clear(struct pipe_context *pipe, 
-                      unsigned buffers,
-                      const union pipe_color_union *color,
-                      double depth,
-                      unsigned stencil)
-{
-   struct brw_context *brw = brw_context( pipe );
-   int i;
-
-   if (buffers & PIPE_CLEAR_COLOR) {
-      for (i = 0; i < brw->curr.fb.nr_cbufs; i++) {
-         color_clear( brw, 
-                      brw_surface(brw->curr.fb.cbufs[i]),
-                      color->f );
-      }
-   }
-
-   if (buffers & PIPE_CLEAR_DEPTHSTENCIL) {
-      if (brw->curr.fb.zsbuf) {
-         zstencil_clear( brw,
-                         brw_surface(brw->curr.fb.zsbuf),
-                         buffers & PIPE_CLEAR_DEPTHSTENCIL,
-                         depth, stencil );
-      }
-   }
-}
-
-/* XXX should respect region */
-static void brw_clear_render_target(struct pipe_context *pipe,
-                                    struct pipe_surface *dst,
-                                    const union pipe_color_union *color,
-                                    unsigned dstx, unsigned dsty,
-                                    unsigned width, unsigned height)
-{
-   struct brw_context *brw = brw_context( pipe );
-
-   color_clear( brw,
-                brw_surface(dst),
-                color->f );
-}
-
-/* XXX should respect region */
-static void brw_clear_depth_stencil(struct pipe_context *pipe,
-                                    struct pipe_surface *dst,
-                                    unsigned clear_flags,
-                                    double depth,
-                                    unsigned stencil,
-                                    unsigned dstx, unsigned dsty,
-                                    unsigned width, unsigned height)
-{
-   struct brw_context *brw = brw_context( pipe );
-
-   zstencil_clear( brw,
-                   brw_surface(dst),
-                   clear_flags,
-                   depth, stencil );
-}
-
-void brw_pipe_clear_init( struct brw_context *brw )
-{
-   brw->base.clear = brw_clear;
-   brw->base.clear_render_target = brw_clear_render_target;
-   brw->base.clear_depth_stencil = brw_clear_depth_stencil;
-}
-
-
-void brw_pipe_clear_cleanup( struct brw_context *brw )
-{
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_depth.c b/src/gallium/drivers/i965/brw_pipe_depth.c
deleted file mode 100644 (file)
index 31c2c34..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-
-#include "util/u_math.h"
-#include "util/u_memory.h"
-
-#include "brw_context.h"
-#include "brw_defines.h"
-
-/* XXX: Fixme - include this to get IZ_ defines
- */
-#include "brw_wm.h"
-
-static unsigned brw_translate_compare_func(unsigned func)
-{
-   switch (func) {
-   case PIPE_FUNC_NEVER:
-      return BRW_COMPAREFUNCTION_NEVER;
-   case PIPE_FUNC_LESS:
-      return BRW_COMPAREFUNCTION_LESS;
-   case PIPE_FUNC_LEQUAL:
-      return BRW_COMPAREFUNCTION_LEQUAL;
-   case PIPE_FUNC_GREATER:
-      return BRW_COMPAREFUNCTION_GREATER;
-   case PIPE_FUNC_GEQUAL:
-      return BRW_COMPAREFUNCTION_GEQUAL;
-   case PIPE_FUNC_NOTEQUAL:
-      return BRW_COMPAREFUNCTION_NOTEQUAL;
-   case PIPE_FUNC_EQUAL:
-      return BRW_COMPAREFUNCTION_EQUAL;
-   case PIPE_FUNC_ALWAYS:
-      return BRW_COMPAREFUNCTION_ALWAYS;
-   default:
-      assert(0);
-      return BRW_COMPAREFUNCTION_ALWAYS;
-   }
-}
-
-static unsigned translate_stencil_op(unsigned op)
-{
-   switch (op) {
-   case PIPE_STENCIL_OP_KEEP:
-      return BRW_STENCILOP_KEEP;
-   case PIPE_STENCIL_OP_ZERO:
-      return BRW_STENCILOP_ZERO;
-   case PIPE_STENCIL_OP_REPLACE:
-      return BRW_STENCILOP_REPLACE;
-   case PIPE_STENCIL_OP_INCR:
-      return BRW_STENCILOP_INCRSAT;
-   case PIPE_STENCIL_OP_DECR:
-      return BRW_STENCILOP_DECRSAT;
-   case PIPE_STENCIL_OP_INCR_WRAP:
-      return BRW_STENCILOP_INCR;
-   case PIPE_STENCIL_OP_DECR_WRAP:
-      return BRW_STENCILOP_DECR;
-   case PIPE_STENCIL_OP_INVERT:
-      return BRW_STENCILOP_INVERT;
-   default:
-      assert(0);
-      return BRW_STENCILOP_ZERO;
-   }
-}
-
-static void create_bcc_state( struct brw_depth_stencil_state *zstencil,
-                             const struct pipe_depth_stencil_alpha_state *templ )
-{
-   if (templ->stencil[0].enabled) {
-      zstencil->cc0.stencil_enable = 1;
-      zstencil->cc0.stencil_func =
-        brw_translate_compare_func(templ->stencil[0].func);
-      zstencil->cc0.stencil_fail_op =
-        translate_stencil_op(templ->stencil[0].fail_op);
-      zstencil->cc0.stencil_pass_depth_fail_op =
-        translate_stencil_op(templ->stencil[0].zfail_op);
-      zstencil->cc0.stencil_pass_depth_pass_op =
-        translate_stencil_op(templ->stencil[0].zpass_op);
-      zstencil->cc1.stencil_write_mask = templ->stencil[0].writemask;
-      zstencil->cc1.stencil_test_mask = templ->stencil[0].valuemask;
-
-      if (templ->stencil[1].enabled) {
-        zstencil->cc0.bf_stencil_enable = 1;
-        zstencil->cc0.bf_stencil_func =
-           brw_translate_compare_func(templ->stencil[1].func);
-        zstencil->cc0.bf_stencil_fail_op =
-           translate_stencil_op(templ->stencil[1].fail_op);
-        zstencil->cc0.bf_stencil_pass_depth_fail_op =
-           translate_stencil_op(templ->stencil[1].zfail_op);
-        zstencil->cc0.bf_stencil_pass_depth_pass_op =
-           translate_stencil_op(templ->stencil[1].zpass_op);
-        zstencil->cc2.bf_stencil_write_mask = templ->stencil[1].writemask;
-        zstencil->cc2.bf_stencil_test_mask = templ->stencil[1].valuemask;
-      }
-
-      zstencil->cc0.stencil_write_enable = (zstencil->cc1.stencil_write_mask ||
-                                           zstencil->cc2.bf_stencil_write_mask);
-   }
-
-
-   if (templ->alpha.enabled) {
-      zstencil->cc3.alpha_test = 1;
-      zstencil->cc3.alpha_test_func = brw_translate_compare_func(templ->alpha.func);
-      zstencil->cc3.alpha_test_format = BRW_ALPHATEST_FORMAT_UNORM8;
-      zstencil->cc7.alpha_ref.ub[0] = float_to_ubyte(templ->alpha.ref_value);
-   }
-
-   if (templ->depth.enabled) {
-      zstencil->cc2.depth_test = 1;
-      zstencil->cc2.depth_test_function = brw_translate_compare_func(templ->depth.func);
-      zstencil->cc2.depth_write_enable = templ->depth.writemask;
-   }
-}
-
-static void create_wm_iz_state( struct brw_depth_stencil_state *zstencil )
-{
-   if (zstencil->cc3.alpha_test)
-      zstencil->iz_lookup |= IZ_PS_KILL_ALPHATEST_BIT;
-
-   if (zstencil->cc2.depth_test)
-      zstencil->iz_lookup |= IZ_DEPTH_TEST_ENABLE_BIT;
-
-   if (zstencil->cc2.depth_write_enable)
-      zstencil->iz_lookup |= IZ_DEPTH_WRITE_ENABLE_BIT;
-
-   if (zstencil->cc0.stencil_enable)
-      zstencil->iz_lookup |= IZ_STENCIL_TEST_ENABLE_BIT;
-
-   if (zstencil->cc0.stencil_write_enable)
-      zstencil->iz_lookup |= IZ_STENCIL_WRITE_ENABLE_BIT;
-
-}
-
-
-static void *
-brw_create_depth_stencil_state( struct pipe_context *pipe,
-                               const struct pipe_depth_stencil_alpha_state *templ )
-{
-   struct brw_depth_stencil_state *zstencil = CALLOC_STRUCT(brw_depth_stencil_state);
-
-   create_bcc_state( zstencil, templ );
-   create_wm_iz_state( zstencil );
-
-   return (void *)zstencil;
-}
-
-
-static void brw_bind_depth_stencil_state(struct pipe_context *pipe,
-                                        void *cso)
-{
-   struct brw_context *brw = brw_context(pipe);
-   brw->curr.zstencil = (const struct brw_depth_stencil_state *)cso;
-   brw->state.dirty.mesa |= PIPE_NEW_DEPTH_STENCIL_ALPHA;
-}
-
-static void brw_delete_depth_stencil_state(struct pipe_context *pipe,
-                                          void *cso)
-{
-   struct brw_context *brw = brw_context(pipe);
-   assert((const void *)cso != (const void *)brw->curr.zstencil);
-   FREE(cso);
-}
-
-static void brw_set_stencil_ref(struct pipe_context *pipe,
-                                const struct pipe_stencil_ref *stencil_ref)
-{
-   struct brw_context *brw = brw_context(pipe);
-   brw->curr.cc1_stencil_ref.stencil_ref = stencil_ref->ref_value[0];
-   brw->curr.cc1_stencil_ref.bf_stencil_ref = stencil_ref->ref_value[1];
-
-   brw->state.dirty.mesa |= PIPE_NEW_DEPTH_STENCIL_ALPHA;
-}
-
-static void
-brw_set_sample_mask(struct pipe_context *pipe,
-                    unsigned sample_mask)
-{
-}
-
-void brw_pipe_depth_stencil_init( struct brw_context *brw )
-{
-   brw->base.set_stencil_ref = brw_set_stencil_ref;
-   brw->base.create_depth_stencil_alpha_state = brw_create_depth_stencil_state;
-   brw->base.bind_depth_stencil_alpha_state = brw_bind_depth_stencil_state;
-   brw->base.delete_depth_stencil_alpha_state = brw_delete_depth_stencil_state;
-   brw->base.set_sample_mask = brw_set_sample_mask;
-}
-
-void brw_pipe_depth_stencil_cleanup( struct brw_context *brw )
-{
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_fb.c b/src/gallium/drivers/i965/brw_pipe_fb.c
deleted file mode 100644 (file)
index a90b7c7..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "util/u_math.h"
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-#include "util/u_inlines.h"
-
-#include "brw_context.h"
-
-/**
- * called from intelDrawBuffer()
- */
-static void brw_set_framebuffer_state( struct pipe_context *pipe, 
-                                      const struct pipe_framebuffer_state *fb )
-{
-   struct brw_context *brw = brw_context(pipe);
-   unsigned i;
-
-   /* Dimensions:
-    */
-   if (brw->curr.fb.width != fb->width ||
-       brw->curr.fb.height != fb->height) {
-      brw->curr.fb.width = fb->width;
-      brw->curr.fb.height = fb->height;
-      brw->state.dirty.mesa |= PIPE_NEW_FRAMEBUFFER_DIMENSIONS;
-   }
-   
-   /* Z/Stencil
-    */
-   if (brw->curr.fb.zsbuf != fb->zsbuf) {
-      pipe_surface_reference(&brw->curr.fb.zsbuf, fb->zsbuf);
-      brw->state.dirty.mesa |= PIPE_NEW_DEPTH_BUFFER;
-   }
-
-   /* Color buffers:
-    */
-   for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
-      if (brw->curr.fb.cbufs[i] != fb->cbufs[i]) {
-        brw->state.dirty.mesa |= PIPE_NEW_COLOR_BUFFERS;
-        pipe_surface_reference(&brw->curr.fb.cbufs[i], fb->cbufs[i]);
-      }
-   }
-   
-   if (brw->curr.fb.nr_cbufs != fb->nr_cbufs) {
-      brw->curr.fb.nr_cbufs = MIN2(BRW_MAX_DRAW_BUFFERS, fb->nr_cbufs);
-      brw->state.dirty.mesa |= PIPE_NEW_NR_CBUFS;
-   }
-}
-
-
-static void brw_set_viewport_state( struct pipe_context *pipe,
-                                   const struct pipe_viewport_state *viewport )
-{
-   struct brw_context *brw = brw_context(pipe);
-
-   brw->curr.viewport = *viewport;
-   brw->curr.ccv.min_depth = viewport->scale[2] * -1.0 + viewport->translate[2];
-   brw->curr.ccv.max_depth = viewport->scale[2] *  1.0 + viewport->translate[2];
-
-   if (0)
-      debug_printf("%s depth range %f .. %f\n",
-                   __FUNCTION__,
-                   brw->curr.ccv.min_depth,
-                   brw->curr.ccv.max_depth);
-
-   brw->state.dirty.mesa |= PIPE_NEW_VIEWPORT;
-}
-
-
-void brw_pipe_framebuffer_init( struct brw_context *brw )
-{
-   brw->base.set_framebuffer_state = brw_set_framebuffer_state;
-   brw->base.set_viewport_state = brw_set_viewport_state;
-}
-
-void brw_pipe_framebuffer_cleanup( struct brw_context *brw )
-{
-   struct pipe_framebuffer_state *fb = &brw->curr.fb;
-   int i;
-
-   for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
-      pipe_surface_reference(&fb->cbufs[i], NULL);
-   }
-
-   pipe_surface_reference(&fb->zsbuf, NULL);
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_flush.c b/src/gallium/drivers/i965/brw_pipe_flush.c
deleted file mode 100644 (file)
index 3b4a99b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-
-#include "brw_context.h"
-#include "brw_batchbuffer.h"
-
-#include "util/u_upload_mgr.h"
-
-
-
-
-/* All batchbuffer flushes must go through this function.
- */
-void brw_context_flush( struct brw_context *brw )
-{
-   /*
-    * 
-    */
-   brw_emit_query_end(brw);
-
-   /* Move to the end of the current upload buffer so that we'll force choosing
-    * a new buffer next time.
-    */
-   u_upload_flush( brw->vb.upload_vertex );
-   u_upload_flush( brw->vb.upload_index );
-
-   _brw_batchbuffer_flush( brw->batch, __FILE__, __LINE__ );
-
-   /* Mark all context state as needing to be re-emitted.
-    * This is probably not as severe as on 915, since almost all of our state
-    * is just in referenced buffers.
-    */
-   brw->state.dirty.brw |= BRW_NEW_CONTEXT;
-   brw->state.dirty.mesa |= ~0;
-   brw->state.dirty.brw |= ~0;
-   brw->state.dirty.cache |= ~0;
-
-   brw->curbe.need_new_bo = GL_TRUE;
-}
-
-static void
-brw_flush( struct pipe_context *pipe,
-           struct pipe_fence_handle **fence )
-{
-   brw_context_flush( brw_context( pipe ) );
-   if (fence)
-      *fence = NULL;
-}
-
-void brw_pipe_flush_init( struct brw_context *brw )
-{
-   brw->base.flush = brw_flush;
-}
-
-
-void brw_pipe_flush_cleanup( struct brw_context *brw )
-{
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_misc.c b/src/gallium/drivers/i965/brw_pipe_misc.c
deleted file mode 100644 (file)
index 3035907..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#include "brw_context.h"
-#include "brw_structs.h"
-#include "brw_defines.h"
-
-static void brw_set_polygon_stipple( struct pipe_context *pipe,
-                                    const struct pipe_poly_stipple *stip )
-{
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_polygon_stipple *bps = &brw->curr.bps;
-   GLuint i;
-
-   memset(bps, 0, sizeof *bps);
-   bps->header.opcode = CMD_POLY_STIPPLE_PATTERN;
-   bps->header.length = sizeof *bps/4-2;
-
-   for (i = 0; i < 32; i++)
-      bps->stipple[i] = stip->stipple[i]; /* don't invert */
-
-   brw->state.dirty.mesa |= PIPE_NEW_POLYGON_STIPPLE;
-}
-
-
-static void brw_set_scissor_state( struct pipe_context *pipe,
-                                   const struct pipe_scissor_state *scissor )
-{
-   struct brw_context *brw = brw_context(pipe);
-
-   brw->curr.scissor =  *scissor;
-   brw->state.dirty.mesa |= PIPE_NEW_SCISSOR;
-}
-
-
-static void brw_set_clip_state( struct pipe_context *pipe,
-                                const struct pipe_clip_state *clip )
-{
-   struct brw_context *brw = brw_context(pipe);
-
-   brw->curr.ucp = *clip;
-   brw->state.dirty.mesa |= PIPE_NEW_CLIP;
-}
-
-
-void brw_pipe_misc_init( struct brw_context *brw )
-{
-   brw->base.set_polygon_stipple = brw_set_polygon_stipple;
-   brw->base.set_scissor_state = brw_set_scissor_state;
-   brw->base.set_clip_state = brw_set_clip_state;
-}
-
-
-void brw_pipe_misc_cleanup( struct brw_context *brw )
-{
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_query.c b/src/gallium/drivers/i965/brw_pipe_query.c
deleted file mode 100644 (file)
index 0745254..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright © 2008 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- *    Eric Anholt <eric@anholt.net>
- *
- */
-
-/** @file support for ARB_query_object
- *
- * ARB_query_object is implemented by using the PIPE_CONTROL command to stall
- * execution on the completion of previous depth tests, and write the
- * current PS_DEPTH_COUNT to a buffer object.
- *
- * We use before and after counts when drawing during a query so that
- * we don't pick up other clients' query data in ours.  To reduce overhead,
- * a single BO is used to record the query data for all active queries at
- * once.  This also gives us a simple bound on how much batchbuffer space is
- * required for handling queries, so that we can be sure that we won't
- * have to emit a batchbuffer without getting the ending PS_DEPTH_COUNT.
- */
-#include "util/u_simple_list.h"
-
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_batchbuffer.h"
-#include "brw_reg.h"
-
-/** Waits on the query object's BO and totals the results for this query */
-static boolean
-brw_query_get_result(struct pipe_context *pipe,
-                    struct pipe_query *q,
-                    boolean wait,
-                    void *vresult)
-{
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_query_object *query = (struct brw_query_object *)q;
-   uint64_t *result = (uint64_t*)vresult;
-
-   /* Map and count the pixels from the current query BO */
-   if (query->bo) {
-      int i;
-      uint64_t *map;
-      
-      if (brw->sws->bo_is_busy(query->bo) && !wait)
-        return FALSE;
-      
-      map = bo_map_read(brw->sws, query->bo);
-      if (map == NULL)
-        return FALSE;
-      
-      for (i = query->first_index; i <= query->last_index; i++) {
-        query->result += map[i * 2 + 1] - map[i * 2];
-      }
-
-      brw->sws->bo_unmap(query->bo);
-      bo_reference(&query->bo, NULL);
-   }
-
-   *result = query->result;
-   return TRUE;
-}
-
-static struct pipe_query *
-brw_query_create(struct pipe_context *pipe, unsigned type )
-{
-   struct brw_query_object *query;
-
-   switch (type) {
-   case PIPE_QUERY_OCCLUSION_COUNTER:
-      query = CALLOC_STRUCT( brw_query_object );
-      if (query == NULL)
-        return NULL;
-      return (struct pipe_query *)query;
-      
-   default:
-      return NULL;
-   }
-}
-
-static void
-brw_query_destroy(struct pipe_context *pipe, struct pipe_query *q)
-{
-   struct brw_query_object *query = (struct brw_query_object *)q;
-
-   bo_reference(&query->bo, NULL);
-   FREE(query);
-}
-
-static void
-brw_query_begin(struct pipe_context *pipe, struct pipe_query *q)
-{
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_query_object *query = (struct brw_query_object *)q;
-
-   /* Reset our driver's tracking of query state. */
-   bo_reference(&query->bo, NULL);
-   query->result = 0;
-   query->first_index = -1;
-   query->last_index = -1;
-
-   insert_at_head(&brw->query.active_head, query);
-   brw->query.stats_wm++;
-   brw->state.dirty.mesa |= PIPE_NEW_QUERY;
-}
-
-static void
-brw_query_end(struct pipe_context *pipe, struct pipe_query *q)
-{
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_query_object *query = (struct brw_query_object *)q;
-
-   /* Flush the batchbuffer in case it has writes to our query BO.
-    * Have later queries write to a new query BO so that further rendering
-    * doesn't delay the collection of our results.
-    */
-   if (query->bo) {
-      brw_emit_query_end(brw);
-      brw_context_flush( brw );
-
-      bo_reference(&brw->query.bo, NULL);
-   }
-
-   remove_from_list(query);
-   brw->query.stats_wm--;
-   brw->state.dirty.mesa |= PIPE_NEW_QUERY;
-}
-
-/***********************************************************************
- * Internal functions and callbacks to implement queries 
- */
-
-/** Called to set up the query BO and account for its aperture space */
-enum pipe_error
-brw_prepare_query_begin(struct brw_context *brw)
-{
-   enum pipe_error ret;
-
-   /* Skip if we're not doing any queries. */
-   if (is_empty_list(&brw->query.active_head))
-      return PIPE_OK;
-
-   /* Get a new query BO if we're going to need it. */
-   if (brw->query.bo == NULL ||
-       brw->query.index * 2 + 1 >= 4096 / sizeof(uint64_t)) {
-
-      ret = brw->sws->bo_alloc(brw->sws, BRW_BUFFER_TYPE_QUERY, 4096, 1,
-                               &brw->query.bo);
-      if (ret)
-         return ret;
-
-      brw->query.index = 0;
-   }
-
-   brw_add_validated_bo(brw, brw->query.bo);
-
-   return PIPE_OK;
-}
-
-/** Called just before primitive drawing to get a beginning PS_DEPTH_COUNT. */
-void
-brw_emit_query_begin(struct brw_context *brw)
-{
-   struct brw_query_object *query;
-
-   /* Skip if we're not doing any queries, or we've emitted the start. */
-   if (brw->query.active || is_empty_list(&brw->query.active_head))
-      return;
-
-   BEGIN_BATCH(4, IGNORE_CLIPRECTS);
-   OUT_BATCH(_3DSTATE_PIPE_CONTROL |
-            PIPE_CONTROL_DEPTH_STALL |
-            PIPE_CONTROL_WRITE_DEPTH_COUNT);
-   /* This object could be mapped cacheable, but we don't have an exposed
-    * mechanism to support that.  Since it's going uncached, tell GEM that
-    * we're writing to it.  The usual clflush should be all that's required
-    * to pick up the results.
-    */
-   OUT_RELOC(brw->query.bo,
-            BRW_USAGE_QUERY_RESULT,
-            PIPE_CONTROL_GLOBAL_GTT_WRITE |
-            ((brw->query.index * 2) * sizeof(uint64_t)));
-   OUT_BATCH(0);
-   OUT_BATCH(0);
-   ADVANCE_BATCH();
-
-   foreach(query, &brw->query.active_head) {
-      if (query->bo != brw->query.bo) {
-        uint64_t tmp;
-        
-        /* Propogate the results from this buffer to all of the
-         * active queries, as the bo is going away.
-         */
-        if (query->bo != NULL)
-           brw_query_get_result( &brw->base, 
-                                 (struct pipe_query *)query,
-                                 FALSE,
-                                 &tmp );
-
-        bo_reference( &query->bo, brw->query.bo );
-        query->first_index = brw->query.index;
-      }
-      query->last_index = brw->query.index;
-   }
-   brw->query.active = GL_TRUE;
-}
-
-/** Called at batchbuffer flush to get an ending PS_DEPTH_COUNT */
-void
-brw_emit_query_end(struct brw_context *brw)
-{
-   if (!brw->query.active)
-      return;
-
-   BEGIN_BATCH(4, IGNORE_CLIPRECTS);
-   OUT_BATCH(_3DSTATE_PIPE_CONTROL |
-            PIPE_CONTROL_DEPTH_STALL |
-            PIPE_CONTROL_WRITE_DEPTH_COUNT);
-   OUT_RELOC(brw->query.bo,
-            BRW_USAGE_QUERY_RESULT,
-            PIPE_CONTROL_GLOBAL_GTT_WRITE |
-            ((brw->query.index * 2 + 1) * sizeof(uint64_t)));
-   OUT_BATCH(0);
-   OUT_BATCH(0);
-   ADVANCE_BATCH();
-
-   brw->query.active = GL_FALSE;
-   brw->query.index++;
-}
-
-void brw_pipe_query_init( struct brw_context *brw )
-{
-   brw->base.create_query = brw_query_create;
-   brw->base.destroy_query = brw_query_destroy;
-   brw->base.begin_query = brw_query_begin;
-   brw->base.end_query = brw_query_end;
-   brw->base.get_query_result = brw_query_get_result;
-}
-
-
-void brw_pipe_query_cleanup( struct brw_context *brw )
-{
-   /* Unreference brw->query.bo ??
-    */
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_rast.c b/src/gallium/drivers/i965/brw_pipe_rast.c
deleted file mode 100644 (file)
index c86681d..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-
-#include "util/u_memory.h"
-#include "pipe/p_defines.h"
-#include "brw_context.h"
-#include "brw_defines.h"
-#include "brw_pipe_rast.h"
-#include "brw_wm.h"
-
-
-static unsigned translate_fill( unsigned fill )
-{
-   switch (fill) {
-   case PIPE_POLYGON_MODE_FILL:
-      return CLIP_FILL;
-   case PIPE_POLYGON_MODE_LINE:
-      return CLIP_LINE;
-   case PIPE_POLYGON_MODE_POINT:
-      return CLIP_POINT;
-   default:
-      assert(0);
-      return CLIP_FILL;
-   }
-}
-
-
-/* Calculates the key for triangle-mode clipping.  Non-triangle
- * clipping keys use much less information and are computed on the
- * fly.
- */
-static void
-calculate_clip_key_rast( const struct brw_context *brw,
-                        const struct pipe_rasterizer_state *templ,
-                        const struct brw_rasterizer_state *rast,
-                        struct brw_clip_prog_key *key)
-{
-   memset(key, 0, sizeof *key);
-
-   if (brw->gen == 5)
-       key->clip_mode = BRW_CLIPMODE_KERNEL_CLIP;
-   else
-       key->clip_mode = BRW_CLIPMODE_NORMAL;
-
-   key->do_flat_shading = templ->flatshade;
-
-   if (templ->cull_face == PIPE_FACE_FRONT_AND_BACK) {
-      key->clip_mode = BRW_CLIPMODE_REJECT_ALL;
-      return;
-   }
-
-   key->fill_ccw = CLIP_CULL;
-   key->fill_cw = CLIP_CULL;
-
-   if (!(templ->cull_face & PIPE_FACE_FRONT)) {
-      if (templ->front_ccw)
-         key->fill_ccw = translate_fill(templ->fill_front);
-      else 
-         key->fill_cw = translate_fill(templ->fill_front);
-   }
-
-   if (!(templ->cull_face & PIPE_FACE_BACK)) {
-      if (templ->front_ccw)
-         key->fill_cw = translate_fill(templ->fill_back);
-      else 
-         key->fill_ccw = translate_fill(templ->fill_back);
-   }
-
-   if (key->fill_cw == CLIP_LINE ||
-       key->fill_ccw == CLIP_LINE ||
-       key->fill_cw == CLIP_POINT ||
-       key->fill_ccw == CLIP_POINT) {
-      key->do_unfilled = 1;
-      key->clip_mode = BRW_CLIPMODE_CLIP_NON_REJECTED;
-   }
-
-   switch (key->fill_cw) {
-   case CLIP_POINT:
-      key->offset_cw = templ->offset_point;
-      break;
-   case CLIP_LINE:
-      key->offset_cw = templ->offset_line;
-      break;
-   case CLIP_FILL:
-      key->offset_cw = templ->offset_tri;
-      break;
-   }
-
-   switch (key->fill_ccw) {
-   case CLIP_POINT:
-      key->offset_ccw = templ->offset_point;
-      break;
-   case CLIP_LINE:
-      key->offset_ccw = templ->offset_line;
-      break;
-   case CLIP_FILL:
-      key->offset_ccw = templ->offset_tri;
-      break;
-   }
-
-   if (templ->light_twoside && key->fill_cw != CLIP_CULL) 
-      key->copy_bfc_cw = 1;
-   
-   if (templ->light_twoside && key->fill_ccw != CLIP_CULL) 
-      key->copy_bfc_ccw = 1;
-}
-
-
-static void
-calculate_line_stipple_rast( const struct pipe_rasterizer_state *templ,
-                            struct brw_line_stipple *bls )
-{
-   GLfloat tmp = 1.0f / (templ->line_stipple_factor + 1);
-   GLint tmpi = tmp * (1<<13);
-
-   bls->header.opcode = CMD_LINE_STIPPLE_PATTERN;
-   bls->header.length = sizeof(*bls)/4 - 2;
-   bls->bits0.pattern = templ->line_stipple_pattern;
-   bls->bits1.repeat_count = templ->line_stipple_factor + 1;
-   bls->bits1.inverse_repeat_count = tmpi;
-}
-
-static void *brw_create_rasterizer_state( struct pipe_context *pipe,
-                                         const struct pipe_rasterizer_state *templ )
-{
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_rasterizer_state *rast;
-
-   rast = CALLOC_STRUCT(brw_rasterizer_state);
-   if (rast == NULL)
-      return NULL;
-
-   rast->templ = *templ;
-
-   calculate_clip_key_rast( brw, templ, rast, &rast->clip_key );
-   
-   if (templ->line_stipple_enable)
-      calculate_line_stipple_rast( templ, &rast->bls );
-
-   /* Caclculate lookup value for WM IZ table.
-    */
-   if (templ->line_smooth) {
-      if (templ->fill_front == PIPE_POLYGON_MODE_LINE &&
-         templ->fill_back == PIPE_POLYGON_MODE_LINE) {
-        rast->unfilled_aa_line = AA_ALWAYS;
-      }
-      else if (templ->fill_front == PIPE_POLYGON_MODE_LINE ||
-              templ->fill_back == PIPE_POLYGON_MODE_LINE) {
-        rast->unfilled_aa_line = AA_SOMETIMES;
-      }
-      else {
-        rast->unfilled_aa_line = AA_NEVER;
-      }
-   }
-   else {
-      rast->unfilled_aa_line = AA_NEVER;
-   }
-
-   return (void *)rast;
-}
-
-
-static void brw_bind_rasterizer_state(struct pipe_context *pipe,
-                                void *cso)
-{
-   struct brw_context *brw = brw_context(pipe);
-   brw->curr.rast = (const struct brw_rasterizer_state *)cso;
-   brw->state.dirty.mesa |= PIPE_NEW_RAST;
-}
-
-static void brw_delete_rasterizer_state(struct pipe_context *pipe,
-                                 void *cso)
-{
-   struct brw_context *brw = brw_context(pipe);
-   assert((const void *)cso != (const void *)brw->curr.rast);
-   FREE(cso);
-}
-
-
-
-void brw_pipe_rast_init( struct brw_context *brw )
-{
-   brw->base.create_rasterizer_state = brw_create_rasterizer_state;
-   brw->base.bind_rasterizer_state = brw_bind_rasterizer_state;
-   brw->base.delete_rasterizer_state = brw_delete_rasterizer_state;
-}
-
-void brw_pipe_rast_cleanup( struct brw_context *brw )
-{
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_rast.h b/src/gallium/drivers/i965/brw_pipe_rast.h
deleted file mode 100644 (file)
index 9354f01..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef BRW_PIPE_RAST_H
-#define BRW_PIPE_RAST_H
-
-#include "brw_clip.h"
-
-struct brw_rasterizer_state {
-   struct pipe_rasterizer_state templ; /* for draw module */
-
-   /* Precalculated hardware state:
-    */
-   struct brw_clip_prog_key clip_key;
-   struct brw_line_stipple bls;
-   unsigned unfilled_aa_line;
-};
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_pipe_sampler.c b/src/gallium/drivers/i965/brw_pipe_sampler.c
deleted file mode 100644 (file)
index 3fe753e..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-
-#include "util/u_memory.h"
-#include "util/u_math.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-#include "util/u_inlines.h"
-
-#include "brw_context.h"
-#include "brw_defines.h"
-
-
-
-/* The brw (and related graphics cores) do not support GL_CLAMP.  The
- * Intel drivers for "other operating systems" implement GL_CLAMP as
- * GL_CLAMP_TO_EDGE, so the same is done here.
- */
-static GLuint translate_wrap_mode( unsigned wrap )
-{
-   switch( wrap ) {
-   case PIPE_TEX_WRAP_REPEAT: 
-      return BRW_TEXCOORDMODE_WRAP;
-
-   case PIPE_TEX_WRAP_CLAMP:
-   case PIPE_TEX_WRAP_CLAMP_TO_EDGE:
-      return BRW_TEXCOORDMODE_CLAMP;
-      
-   case PIPE_TEX_WRAP_CLAMP_TO_BORDER:
-      return BRW_TEXCOORDMODE_CLAMP_BORDER;
-
-   case PIPE_TEX_WRAP_MIRROR_REPEAT: 
-      return BRW_TEXCOORDMODE_MIRROR;
-
-   case PIPE_TEX_WRAP_MIRROR_CLAMP: 
-   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE: 
-   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER: 
-      return BRW_TEXCOORDMODE_MIRROR_ONCE;
-
-   default: 
-      return BRW_TEXCOORDMODE_WRAP;
-   }
-}
-
-static GLuint translate_img_filter( unsigned filter )
-{
-   switch (filter) {
-   case PIPE_TEX_FILTER_NEAREST:
-      return BRW_MAPFILTER_NEAREST;
-   case PIPE_TEX_FILTER_LINEAR:
-      return BRW_MAPFILTER_LINEAR;
-   default:
-      assert(0);
-      return BRW_MAPFILTER_NEAREST;
-   }
-}
-
-static GLuint translate_mip_filter( unsigned filter )
-{
-   switch (filter) {
-   case PIPE_TEX_MIPFILTER_NONE: 
-      return BRW_MIPFILTER_NONE;
-   case PIPE_TEX_MIPFILTER_NEAREST:
-      return BRW_MIPFILTER_NEAREST;
-   case PIPE_TEX_MIPFILTER_LINEAR:
-      return BRW_MIPFILTER_LINEAR;
-   default:
-      assert(0);
-      return BRW_MIPFILTER_NONE;
-   }
-}
-
-/* XXX: not sure why there are special translations for the shadow tex
- * compare functions.  In particular ALWAYS is translated to NEVER.
- * Is this a hardware issue?  Does i965 really suffer from this?
- */
-static GLuint translate_shadow_compare_func( unsigned func )
-{
-   switch (func) {
-   case PIPE_FUNC_NEVER: 
-       return BRW_COMPAREFUNCTION_ALWAYS;
-   case PIPE_FUNC_LESS: 
-       return BRW_COMPAREFUNCTION_LEQUAL;
-   case PIPE_FUNC_LEQUAL: 
-       return BRW_COMPAREFUNCTION_LESS;
-   case PIPE_FUNC_GREATER: 
-       return BRW_COMPAREFUNCTION_GEQUAL;
-   case PIPE_FUNC_GEQUAL: 
-      return BRW_COMPAREFUNCTION_GREATER;
-   case PIPE_FUNC_NOTEQUAL: 
-      return BRW_COMPAREFUNCTION_EQUAL;
-   case PIPE_FUNC_EQUAL: 
-      return BRW_COMPAREFUNCTION_NOTEQUAL;
-   case PIPE_FUNC_ALWAYS: 
-       return BRW_COMPAREFUNCTION_NEVER;
-   default:
-      assert(0);
-      return BRW_COMPAREFUNCTION_NEVER;
-   }
-}
-
-
-
-
-static void *
-brw_create_sampler_state( struct pipe_context *pipe,
-                          const struct pipe_sampler_state *template )
-{
-   struct brw_sampler *sampler = CALLOC_STRUCT(brw_sampler);
-
-   sampler->ss0.min_filter = translate_img_filter( template->min_img_filter );
-   sampler->ss0.mag_filter = translate_img_filter( template->mag_img_filter );
-   sampler->ss0.mip_filter = translate_mip_filter( template->min_mip_filter );
-
-
-   /* XXX: anisotropy logic slightly changed: 
-    */
-   if (template->max_anisotropy > 1) {
-      sampler->ss0.min_filter = BRW_MAPFILTER_ANISOTROPIC; 
-      sampler->ss0.mag_filter = BRW_MAPFILTER_ANISOTROPIC;
-
-      sampler->ss3.max_aniso = MIN2((template->max_anisotropy - 2) / 2,
-                                    BRW_ANISORATIO_16);
-   }
-
-   sampler->ss1.r_wrap_mode = translate_wrap_mode(template->wrap_r);
-   sampler->ss1.s_wrap_mode = translate_wrap_mode(template->wrap_s);
-   sampler->ss1.t_wrap_mode = translate_wrap_mode(template->wrap_t);
-
-   /* Set LOD bias: 
-    */
-   sampler->ss0.lod_bias = 
-      util_signed_fixed(CLAMP(template->lod_bias, -16, 15), 6);
-
-
-   sampler->ss0.lod_preclamp = 1; /* OpenGL mode */
-   sampler->ss0.default_color_mode = 0; /* OpenGL/DX10 mode */
-
-   /* Set shadow function: 
-    */
-   if (template->compare_mode == PIPE_TEX_COMPARE_R_TO_TEXTURE) {
-
-      /* Shadowing is "enabled" by emitting a particular sampler
-       * message (sample_c).  So need to recompile WM program when
-       * shadow comparison is enabled on each/any texture unit.
-       */
-      sampler->ss0.shadow_function =
-        translate_shadow_compare_func(template->compare_func);
-   }
-
-   /* Set BaseMipLevel, MaxLOD, MinLOD: 
-    */
-   sampler->ss0.base_level = 
-      util_unsigned_fixed(0, 1);
-
-   sampler->ss1.max_lod = 
-      util_unsigned_fixed(CLAMP(template->max_lod, 0, 13), 6);
-
-   sampler->ss1.min_lod = 
-      util_unsigned_fixed(CLAMP(template->min_lod, 0, 13), 6);
-
-   return (void *)sampler;
-}
-
-static void brw_bind_sampler_state(struct pipe_context *pipe,
-                                   unsigned num, void **sampler)
-{
-   struct brw_context *brw = brw_context(pipe);
-   int i;
-
-   for (i = 0; i < num; i++)
-      brw->curr.sampler[i] = sampler[i];
-
-   for (i = num; i < brw->curr.num_samplers; i++)
-      brw->curr.sampler[i] = NULL;
-
-   brw->curr.num_samplers = num;
-   brw->state.dirty.mesa |= PIPE_NEW_SAMPLERS;
-}
-
-static void brw_delete_sampler_state(struct pipe_context *pipe,
-                                 void *cso)
-{
-   FREE(cso);
-}
-
-static void brw_set_fragment_sampler_views(struct pipe_context *pipe,
-                                           unsigned num,
-                                           struct pipe_sampler_view **views)
-{
-   struct brw_context *brw = brw_context(pipe);
-   int i;
-
-   for (i = 0; i < num; i++)
-      pipe_sampler_view_reference(&brw->curr.fragment_sampler_views[i], views[i]);
-
-   for (i = num; i < brw->curr.num_fragment_sampler_views; i++)
-      pipe_sampler_view_reference(&brw->curr.fragment_sampler_views[i], NULL);
-
-   brw->curr.num_fragment_sampler_views = num;
-   brw->state.dirty.mesa |= PIPE_NEW_BOUND_TEXTURES;
-}
-
-static void brw_set_vertex_sampler_views(struct pipe_context *pipe,
-                                         unsigned num,
-                                         struct pipe_sampler_view **views)
-{
-}
-
-static void brw_bind_vertex_sampler_state(struct pipe_context *pipe,
-                                          unsigned num, void **sampler)
-{
-}
-
-
-static struct pipe_sampler_view *
-brw_create_sampler_view(struct pipe_context *pipe,
-                        struct pipe_resource *texture,
-                        const struct pipe_sampler_view *templ)
-{
-   struct pipe_sampler_view *view = CALLOC_STRUCT(pipe_sampler_view);
-
-   if (view) {
-      *view = *templ;
-      view->reference.count = 1;
-      view->texture = NULL;
-      pipe_resource_reference(&view->texture, texture);
-      view->context = pipe;
-   }
-
-   return view;
-}
-
-
-static void
-brw_sampler_view_destroy(struct pipe_context *pipe,
-                         struct pipe_sampler_view *view)
-{
-   pipe_resource_reference(&view->texture, NULL);
-   FREE(view);
-}
-
-
-void brw_pipe_sampler_init( struct brw_context *brw )
-{
-   brw->base.create_sampler_state = brw_create_sampler_state;
-   brw->base.delete_sampler_state = brw_delete_sampler_state;
-
-   brw->base.set_fragment_sampler_views = brw_set_fragment_sampler_views;
-   brw->base.bind_fragment_sampler_states = brw_bind_sampler_state;
-
-   brw->base.set_vertex_sampler_views = brw_set_vertex_sampler_views;
-   brw->base.bind_vertex_sampler_states = brw_bind_vertex_sampler_state;
-
-   brw->base.create_sampler_view = brw_create_sampler_view;
-   brw->base.sampler_view_destroy = brw_sampler_view_destroy;
-}
-void brw_pipe_sampler_cleanup( struct brw_context *brw )
-{
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_shader.c b/src/gallium/drivers/i965/brw_pipe_shader.c
deleted file mode 100644 (file)
index d9bee96..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "util/u_inlines.h"
-#include "util/u_memory.h"
-  
-#include "tgsi/tgsi_parse.h"
-#include "tgsi/tgsi_scan.h"
-
-#include "brw_context.h"
-#include "brw_wm.h"
-
-
-/**
- * Determine if the given shader uses complex features such as flow
- * conditionals, loops, subroutines.
- */
-static GLboolean has_flow_control(const struct tgsi_shader_info *info)
-{
-    return (info->opcode_count[TGSI_OPCODE_ARL] > 0 ||
-           info->opcode_count[TGSI_OPCODE_IF] > 0 ||
-           info->opcode_count[TGSI_OPCODE_ENDIF] > 0 || /* redundant - IF */
-           info->opcode_count[TGSI_OPCODE_CAL] > 0 ||
-           info->opcode_count[TGSI_OPCODE_BRK] > 0 ||   /* redundant - BGNLOOP */
-           info->opcode_count[TGSI_OPCODE_RET] > 0 ||   /* redundant - CAL */
-           info->opcode_count[TGSI_OPCODE_BGNLOOP] > 0);
-}
-
-
-static void scan_immediates(const struct tgsi_token *tokens,
-                            const struct tgsi_shader_info *info,
-                            struct brw_immediate_data *imm)
-{
-   struct tgsi_parse_context parse;
-   boolean done = FALSE;
-
-   imm->nr = 0;
-   imm->data = MALLOC(info->immediate_count * 4 * sizeof(float));
-
-   tgsi_parse_init( &parse, tokens );
-   while (!tgsi_parse_end_of_tokens( &parse ) && !done) {
-      tgsi_parse_token( &parse );
-
-      switch (parse.FullToken.Token.Type) {
-      case TGSI_TOKEN_TYPE_DECLARATION:
-         break;
-
-      case TGSI_TOKEN_TYPE_IMMEDIATE: {
-        static const float id[4] = {0,0,0,1};
-        const float *value = &parse.FullToken.FullImmediate.u[0].Float;
-        unsigned size = parse.FullToken.FullImmediate.Immediate.NrTokens - 1;
-         unsigned i;
-
-        for (i = 0; i < size; i++)
-           imm->data[imm->nr][i] = value[i];
-
-        for (; i < 4; i++)
-           imm->data[imm->nr][i] = id[i];
-         
-         imm->nr++;
-        break;
-      }
-
-      case TGSI_TOKEN_TYPE_INSTRUCTION:
-        done = 1;
-        break;
-      }
-   }
-}
-
-
-static void brw_bind_fs_state( struct pipe_context *pipe, void *prog )
-{
-   struct brw_fragment_shader *fs = (struct brw_fragment_shader *)prog;
-   struct brw_context *brw = brw_context(pipe);
-   
-   if (brw->curr.fragment_shader == fs)
-      return;
-
-   if (brw->curr.fragment_shader == NULL ||
-       fs == NULL ||
-       memcmp(&brw->curr.fragment_shader->signature, &fs->signature,
-              brw_fs_signature_size(&fs->signature)) != 0) {
-      brw->state.dirty.mesa |= PIPE_NEW_FRAGMENT_SIGNATURE;
-   }
-
-   brw->curr.fragment_shader = fs;
-   brw->state.dirty.mesa |= PIPE_NEW_FRAGMENT_SHADER;
-}
-
-static void brw_bind_vs_state( struct pipe_context *pipe, void *prog )
-{
-   struct brw_context *brw = brw_context(pipe);
-
-   brw->curr.vertex_shader = (struct brw_vertex_shader *)prog;
-   brw->state.dirty.mesa |= PIPE_NEW_VERTEX_SHADER;
-}
-
-
-
-static void *brw_create_fs_state( struct pipe_context *pipe,
-                                 const struct pipe_shader_state *shader )
-{
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_fragment_shader *fs;
-   int i;
-
-   fs = CALLOC_STRUCT(brw_fragment_shader);
-   if (fs == NULL)
-      return NULL;
-
-   /* Duplicate tokens, scan shader
-    */
-   fs->id = brw->program_id++;
-   fs->has_flow_control = has_flow_control(&fs->info);
-
-   fs->tokens = tgsi_dup_tokens(shader->tokens);
-   if (fs->tokens == NULL)
-      goto fail;
-
-   tgsi_scan_shader(fs->tokens, &fs->info);
-   scan_immediates(fs->tokens, &fs->info, &fs->immediates);
-
-   fs->signature.nr_inputs = fs->info.num_inputs;
-   for (i = 0; i < fs->info.num_inputs; i++) {
-      fs->signature.input[i].interp = fs->info.input_interpolate[i];
-      fs->signature.input[i].semantic = fs->info.input_semantic_name[i];
-      fs->signature.input[i].semantic_index = fs->info.input_semantic_index[i];
-   }
-
-   for (i = 0; i < fs->info.num_inputs; i++)
-      if (fs->info.input_semantic_name[i] == TGSI_SEMANTIC_POSITION)
-        fs->uses_depth = 1;
-
-   if (fs->info.uses_kill)
-      fs->iz_lookup |= IZ_PS_KILL_ALPHATEST_BIT;
-
-   if (fs->info.writes_z)
-      fs->iz_lookup |= IZ_PS_COMPUTES_DEPTH_BIT;
-
-   return (void *)fs;
-
-fail:
-   FREE(fs);
-   return NULL;
-}
-
-
-static void *brw_create_vs_state( struct pipe_context *pipe,
-                                 const struct pipe_shader_state *shader )
-{
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_vertex_shader *vs;
-   unsigned i;
-
-   vs = CALLOC_STRUCT(brw_vertex_shader);
-   if (vs == NULL)
-      return NULL;
-
-   /* Duplicate tokens, scan shader
-    */
-   vs->tokens = tgsi_dup_tokens(shader->tokens);
-   if (vs->tokens == NULL)
-      goto fail;
-
-   tgsi_scan_shader(vs->tokens, &vs->info);
-   scan_immediates(vs->tokens, &vs->info, &vs->immediates);
-
-   vs->id = brw->program_id++;
-   vs->has_flow_control = has_flow_control(&vs->info);
-
-   vs->output_hpos = BRW_OUTPUT_NOT_PRESENT;
-   vs->output_color0 = BRW_OUTPUT_NOT_PRESENT;
-   vs->output_color1 = BRW_OUTPUT_NOT_PRESENT;
-   vs->output_bfc0 = BRW_OUTPUT_NOT_PRESENT;
-   vs->output_bfc1 = BRW_OUTPUT_NOT_PRESENT;
-   vs->output_edgeflag = BRW_OUTPUT_NOT_PRESENT;
-
-   for (i = 0; i < vs->info.num_outputs; i++) {
-      int index = vs->info.output_semantic_index[i];
-      switch (vs->info.output_semantic_name[i]) {
-      case TGSI_SEMANTIC_POSITION:
-         vs->output_hpos = i;
-         break;
-      case TGSI_SEMANTIC_COLOR:
-         if (index == 0)
-            vs->output_color0 = i;
-         else
-            vs->output_color1 = i;
-         break;
-      case TGSI_SEMANTIC_BCOLOR:
-         if (index == 0)
-            vs->output_bfc0 = i;
-         else
-            vs->output_bfc1 = i;
-         break;
-      case TGSI_SEMANTIC_EDGEFLAG:
-         vs->output_edgeflag = i;
-         break;
-      }
-   }
-
-   
-   /* Done:
-    */
-   return (void *)vs;
-
-fail:
-   FREE(vs);
-   return NULL;
-}
-
-
-static void brw_delete_fs_state( struct pipe_context *pipe, void *prog )
-{
-   struct brw_fragment_shader *fs = (struct brw_fragment_shader *)prog;
-
-   bo_reference(&fs->const_buffer, NULL);
-   FREE( (void *)fs->tokens );
-   FREE( fs );
-}
-
-
-static void brw_delete_vs_state( struct pipe_context *pipe, void *prog )
-{
-   struct brw_fragment_shader *vs = (struct brw_fragment_shader *)prog;
-
-   /* Delete draw shader
-    */
-   FREE( (void *)vs->tokens );
-   FREE( vs );
-}
-
-
-static void brw_set_constant_buffer(struct pipe_context *pipe,
-                                     uint shader, uint index,
-                                     struct pipe_resource *buf)
-{
-   struct brw_context *brw = brw_context(pipe);
-
-   assert(index == 0);
-
-   if (shader == PIPE_SHADER_FRAGMENT) {
-      pipe_resource_reference( &brw->curr.fragment_constants,
-                             buf );
-
-      brw->state.dirty.mesa |= PIPE_NEW_FRAGMENT_CONSTANTS;
-   }
-   else {
-      pipe_resource_reference( &brw->curr.vertex_constants,
-                             buf );
-
-      brw->state.dirty.mesa |= PIPE_NEW_VERTEX_CONSTANTS;
-   }
-}
-
-
-void brw_pipe_shader_init( struct brw_context *brw )
-{
-   brw->base.set_constant_buffer = brw_set_constant_buffer;
-
-   brw->base.create_vs_state = brw_create_vs_state;
-   brw->base.bind_vs_state = brw_bind_vs_state;
-   brw->base.delete_vs_state = brw_delete_vs_state;
-
-   brw->base.create_fs_state = brw_create_fs_state;
-   brw->base.bind_fs_state = brw_bind_fs_state;
-   brw->base.delete_fs_state = brw_delete_fs_state;
-}
-
-void brw_pipe_shader_cleanup( struct brw_context *brw )
-{
-   pipe_resource_reference( &brw->curr.fragment_constants, NULL );
-   pipe_resource_reference( &brw->curr.vertex_constants, NULL );
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_surface.c b/src/gallium/drivers/i965/brw_pipe_surface.c
deleted file mode 100644 (file)
index 58a6100..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "util/u_memory.h"
-#include "util/u_simple_list.h"
-#include "util/u_math.h"
-
-#include "pipe/p_screen.h"
-#include "brw_screen.h"
-#include "brw_context.h"
-#include "brw_defines.h"
-#include "brw_resource.h"
-#include "brw_winsys.h"
-
-enum {
-   BRW_VIEW_LINEAR,
-   BRW_VIEW_IN_PLACE
-};
-
-
-static boolean need_linear_view( struct brw_screen *brw_screen,
-                                struct brw_texture *brw_texture,
-                                union brw_surface_id id,
-                                unsigned usage )
-{
-#if 0
-   /* XXX: what about IDGNG?
-    */
-   if (!BRW_IS_G4X(brw->brw_screen->pci_id))
-   {
-      struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[i];
-      struct intel_renderbuffer *irb = intel_renderbuffer(rb);
-
-      /* The original gen4 hardware couldn't set up WM surfaces pointing
-       * at an offset within a tile, which can happen when rendering to
-       * anything but the base level of a texture or the +X face/0 depth.
-       * This was fixed with the 4 Series hardware.
-       *
-       * For these original chips, you would have to make the depth and
-       * color destination surfaces include information on the texture
-       * type, LOD, face, and various limits to use them as a destination.
-       *
-       * This is easy in Gallium as surfaces are all backed by
-       * textures, but there's also a nasty requirement that the depth
-       * and the color surfaces all be of the same LOD, which is
-       * harder to get around as we can't look at a surface in
-       * isolation and decide if it's legal.
-       *
-       * Instead, end up being pessimistic and say that for i965,
-       * ... ??
-       */
-      if (brw_tex->tiling != I915_TILING_NONE &&
-         (brw_tex_image_offset(brw_tex, face, level, zslize) & 4095)) {
-        if (BRW_DEBUG & DEBUG_VIEW)
-           debug_printf("%s: need surface view for non-aligned tex image\n",
-                        __FUNCTION__);
-        return GL_TRUE;
-      }
-   }
-#endif
-
-   /* Tiled 3d textures don't have subsets that look like 2d surfaces:
-    */
-   
-   /* Everything else should be fine to render to in-place:
-    */
-   return GL_FALSE;
-}
-
-/* Look at all texture views and figure out if any of them need to be
- * back-copied into the texture for sampling
- */
-void brw_update_texture( struct brw_screen *brw_screen,
-                        struct brw_texture *tex )
-{
-   /* currently nothing to do */
-}
-
-
-/* Create a new surface with linear layout to serve as a render-target
- * where it would be illegal (perhaps due to tiling constraints) to do
- * this in-place.
- * 
- * Currently not implemented, not sure if it's needed.
- */
-static struct brw_surface *create_linear_view( struct brw_screen *brw_screen,
-                                               struct pipe_context *pipe,
-                                              struct brw_texture *tex,
-                                              union brw_surface_id id,
-                                              unsigned usage )
-{
-   return NULL;
-}
-
-
-/* Create a pipe_surface that just points directly into the existing
- * texture's storage.
- */
-static struct brw_surface *create_in_place_view( struct brw_screen *brw_screen,
-                                                 struct pipe_context *pipe,
-                                                 struct brw_texture *tex,
-                                                 union brw_surface_id id,
-                                                 unsigned usage )
-{
-   struct brw_surface *surface;
-
-   surface = CALLOC_STRUCT(brw_surface);
-   if (surface == NULL)
-      return NULL;
-
-   pipe_reference_init(&surface->base.reference, 1);
-
-   /* XXX: ignoring render-to-slice-of-3d-texture
-    */
-   assert(tex->b.b.target != PIPE_TEXTURE_3D || id.bits.layer == 0);
-
-   surface->base.context = pipe;
-   surface->base.format = tex->b.b.format;
-   surface->base.width = u_minify(tex->b.b.width0, id.bits.level);
-   surface->base.height = u_minify(tex->b.b.height0, id.bits.level);
-   surface->base.usage = usage;
-   surface->base.u.tex.first_layer = id.bits.layer;
-   surface->base.u.tex.last_layer = surface->base.u.tex.first_layer;
-   surface->base.u.tex.level = id.bits.level;
-   surface->id = id;
-   surface->offset = tex->image_offset[id.bits.level][id.bits.layer];
-   surface->cpp = tex->cpp;
-   surface->pitch = tex->pitch;
-   surface->tiling = tex->tiling;
-
-   bo_reference( &surface->bo, tex->bo );
-   pipe_resource_reference( &surface->base.texture, &tex->b.b );
-
-   surface->ss.ss0.surface_format = tex->ss.ss0.surface_format;
-   surface->ss.ss0.surface_type = BRW_SURFACE_2D;
-
-   if (tex->tiling == BRW_TILING_NONE) {
-      surface->ss.ss1.base_addr = surface->offset;
-   } else {
-      uint32_t tile_offset = surface->offset % 4096;
-
-      surface->ss.ss1.base_addr = surface->offset - tile_offset;
-
-      if (tex->tiling == BRW_TILING_X) {
-       /* Note that the low bits of these fields are missing, so
-        * there's the possibility of getting in trouble.
-        */
-       surface->ss.ss5.x_offset = (tile_offset % 512) / tex->cpp / 4;
-       surface->ss.ss5.y_offset = tile_offset / 512 / 2;
-      } else {
-       surface->ss.ss5.x_offset = (tile_offset % 128) / tex->cpp / 4;
-           surface->ss.ss5.y_offset = tile_offset / 128 / 2;
-      }
-   }
-
-#if 0
-   if (region_bo != NULL)
-      surface->ss.ss1.base_addr += region_bo->offset; /* reloc */
-#endif
-
-   surface->ss.ss2.width = surface->base.width - 1;
-   surface->ss.ss2.height = surface->base.height - 1;
-   surface->ss.ss3.tiled_surface = tex->ss.ss3.tiled_surface;
-   surface->ss.ss3.tile_walk = tex->ss.ss3.tile_walk;
-   surface->ss.ss3.pitch = tex->ss.ss3.pitch;
-
-   return surface;
-}
-
-/* Get a surface which is view into a texture 
- */
-static struct pipe_surface *brw_create_surface(struct pipe_context *pipe,
-                                               struct pipe_resource *pt,
-                                               const struct pipe_surface *surf_tmpl)
-{
-   struct brw_texture *tex = brw_texture(pt);
-   struct brw_screen *bscreen = brw_screen(pipe->screen);
-   struct brw_surface *surface;
-   union brw_surface_id id;
-   int type;
-
-   assert(surf_tmpl->u.tex.first_layer == surf_tmpl->u.tex.last_layer);
-   id.bits.level = surf_tmpl->u.tex.level;
-   id.bits.layer = surf_tmpl->u.tex.first_layer;
-
-   if (need_linear_view(bscreen, tex, id, surf_tmpl->usage))
-      type = BRW_VIEW_LINEAR;
-   else
-      type = BRW_VIEW_IN_PLACE;
-
-   
-   foreach (surface, &tex->views[type]) {
-      if (id.value == surface->id.value)
-        return &surface->base;
-   }
-
-   switch (type) {
-   case BRW_VIEW_LINEAR:
-      surface = create_linear_view( bscreen, pipe, tex, id, surf_tmpl->usage );
-      break;
-   case BRW_VIEW_IN_PLACE:
-      surface = create_in_place_view( bscreen, pipe, tex, id, surf_tmpl->usage );
-      break;
-   }
-
-   insert_at_head( &tex->views[type], surface );
-   return &surface->base;
-}
-
-
-static void brw_surface_destroy( struct pipe_context *pipe,
-                                 struct pipe_surface *surf )
-{
-   struct brw_surface *surface = brw_surface(surf);
-
-   /* Unreference texture, shared buffer:
-    */
-   remove_from_list(surface);
-   bo_reference(&surface->bo, NULL);
-   pipe_resource_reference( &surface->base.texture, NULL );
-
-   FREE(surface);
-}
-
-
-void brw_pipe_surface_init( struct brw_context *brw )
-{
-   brw->base.create_surface = brw_create_surface;
-   brw->base.surface_destroy = brw_surface_destroy;
-}
diff --git a/src/gallium/drivers/i965/brw_pipe_vertex.c b/src/gallium/drivers/i965/brw_pipe_vertex.c
deleted file mode 100644 (file)
index 570ea23..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-#include "brw_context.h"
-#include "brw_defines.h"
-#include "brw_structs.h"
-
-#include "util/u_memory.h"
-#include "util/u_format.h"
-#include "util/u_transfer.h"
-
-
-static unsigned brw_translate_surface_format( unsigned id )
-{
-   switch (id) {
-   case PIPE_FORMAT_R64_FLOAT:
-      return BRW_SURFACEFORMAT_R64_FLOAT;
-   case PIPE_FORMAT_R64G64_FLOAT:
-      return BRW_SURFACEFORMAT_R64G64_FLOAT;
-   case PIPE_FORMAT_R64G64B64_FLOAT:
-      return BRW_SURFACEFORMAT_R64G64B64_FLOAT;
-   case PIPE_FORMAT_R64G64B64A64_FLOAT:
-      return BRW_SURFACEFORMAT_R64G64B64A64_FLOAT;
-
-   case PIPE_FORMAT_R32_FLOAT:
-      return BRW_SURFACEFORMAT_R32_FLOAT;
-   case PIPE_FORMAT_R32G32_FLOAT:
-      return BRW_SURFACEFORMAT_R32G32_FLOAT;
-   case PIPE_FORMAT_R32G32B32_FLOAT:
-      return BRW_SURFACEFORMAT_R32G32B32_FLOAT;
-   case PIPE_FORMAT_R32G32B32A32_FLOAT:
-      return BRW_SURFACEFORMAT_R32G32B32A32_FLOAT;
-
-   case PIPE_FORMAT_R32_UNORM:
-      return BRW_SURFACEFORMAT_R32_UNORM;
-   case PIPE_FORMAT_R32G32_UNORM:
-      return BRW_SURFACEFORMAT_R32G32_UNORM;
-   case PIPE_FORMAT_R32G32B32_UNORM:
-      return BRW_SURFACEFORMAT_R32G32B32_UNORM;
-   case PIPE_FORMAT_R32G32B32A32_UNORM:
-      return BRW_SURFACEFORMAT_R32G32B32A32_UNORM;
-
-   case PIPE_FORMAT_R32_USCALED:
-      return BRW_SURFACEFORMAT_R32_USCALED;
-   case PIPE_FORMAT_R32G32_USCALED:
-      return BRW_SURFACEFORMAT_R32G32_USCALED;
-   case PIPE_FORMAT_R32G32B32_USCALED:
-      return BRW_SURFACEFORMAT_R32G32B32_USCALED;
-   case PIPE_FORMAT_R32G32B32A32_USCALED:
-      return BRW_SURFACEFORMAT_R32G32B32A32_USCALED;
-
-   case PIPE_FORMAT_R32_SNORM:
-      return BRW_SURFACEFORMAT_R32_SNORM;
-   case PIPE_FORMAT_R32G32_SNORM:
-      return BRW_SURFACEFORMAT_R32G32_SNORM;
-   case PIPE_FORMAT_R32G32B32_SNORM:
-      return BRW_SURFACEFORMAT_R32G32B32_SNORM;
-   case PIPE_FORMAT_R32G32B32A32_SNORM:
-      return BRW_SURFACEFORMAT_R32G32B32A32_SNORM;
-
-   case PIPE_FORMAT_R32_SSCALED:
-      return BRW_SURFACEFORMAT_R32_SSCALED;
-   case PIPE_FORMAT_R32G32_SSCALED:
-      return BRW_SURFACEFORMAT_R32G32_SSCALED;
-   case PIPE_FORMAT_R32G32B32_SSCALED:
-      return BRW_SURFACEFORMAT_R32G32B32_SSCALED;
-   case PIPE_FORMAT_R32G32B32A32_SSCALED:
-      return BRW_SURFACEFORMAT_R32G32B32A32_SSCALED;
-
-   case PIPE_FORMAT_R16_UNORM:
-      return BRW_SURFACEFORMAT_R16_UNORM;
-   case PIPE_FORMAT_R16G16_UNORM:
-      return BRW_SURFACEFORMAT_R16G16_UNORM;
-   case PIPE_FORMAT_R16G16B16_UNORM:
-      return BRW_SURFACEFORMAT_R16G16B16_UNORM;
-   case PIPE_FORMAT_R16G16B16A16_UNORM:
-      return BRW_SURFACEFORMAT_R16G16B16A16_UNORM;
-
-   case PIPE_FORMAT_R16_USCALED:
-      return BRW_SURFACEFORMAT_R16_USCALED;
-   case PIPE_FORMAT_R16G16_USCALED:
-      return BRW_SURFACEFORMAT_R16G16_USCALED;
-   case PIPE_FORMAT_R16G16B16_USCALED:
-      return BRW_SURFACEFORMAT_R16G16B16_USCALED;
-   case PIPE_FORMAT_R16G16B16A16_USCALED:
-      return BRW_SURFACEFORMAT_R16G16B16A16_USCALED;
-
-   case PIPE_FORMAT_R16_SNORM:
-      return BRW_SURFACEFORMAT_R16_SNORM;
-   case PIPE_FORMAT_R16G16_SNORM:
-      return BRW_SURFACEFORMAT_R16G16_SNORM;
-   case PIPE_FORMAT_R16G16B16_SNORM:
-      return BRW_SURFACEFORMAT_R16G16B16_SNORM;
-   case PIPE_FORMAT_R16G16B16A16_SNORM:
-      return BRW_SURFACEFORMAT_R16G16B16A16_SNORM;
-
-   case PIPE_FORMAT_R16_SSCALED:
-      return BRW_SURFACEFORMAT_R16_SSCALED;
-   case PIPE_FORMAT_R16G16_SSCALED:
-      return BRW_SURFACEFORMAT_R16G16_SSCALED;
-   case PIPE_FORMAT_R16G16B16_SSCALED:
-      return BRW_SURFACEFORMAT_R16G16B16_SSCALED;
-   case PIPE_FORMAT_R16G16B16A16_SSCALED:
-      return BRW_SURFACEFORMAT_R16G16B16A16_SSCALED;
-
-   case PIPE_FORMAT_R8_UNORM:
-      return BRW_SURFACEFORMAT_R8_UNORM;
-   case PIPE_FORMAT_R8G8_UNORM:
-      return BRW_SURFACEFORMAT_R8G8_UNORM;
-   case PIPE_FORMAT_R8G8B8_UNORM:
-      return BRW_SURFACEFORMAT_R8G8B8_UNORM;
-   case PIPE_FORMAT_R8G8B8A8_UNORM:
-      return BRW_SURFACEFORMAT_R8G8B8A8_UNORM;
-
-   case PIPE_FORMAT_R8_USCALED:
-      return BRW_SURFACEFORMAT_R8_USCALED;
-   case PIPE_FORMAT_R8G8_USCALED:
-      return BRW_SURFACEFORMAT_R8G8_USCALED;
-   case PIPE_FORMAT_R8G8B8_USCALED:
-      return BRW_SURFACEFORMAT_R8G8B8_USCALED;
-   case PIPE_FORMAT_R8G8B8A8_USCALED:
-      return BRW_SURFACEFORMAT_R8G8B8A8_USCALED;
-
-   case PIPE_FORMAT_R8_SNORM:
-      return BRW_SURFACEFORMAT_R8_SNORM;
-   case PIPE_FORMAT_R8G8_SNORM:
-      return BRW_SURFACEFORMAT_R8G8_SNORM;
-   case PIPE_FORMAT_R8G8B8_SNORM:
-      return BRW_SURFACEFORMAT_R8G8B8_SNORM;
-   case PIPE_FORMAT_R8G8B8A8_SNORM:
-      return BRW_SURFACEFORMAT_R8G8B8A8_SNORM;
-
-   case PIPE_FORMAT_R8_SSCALED:
-      return BRW_SURFACEFORMAT_R8_SSCALED;
-   case PIPE_FORMAT_R8G8_SSCALED:
-      return BRW_SURFACEFORMAT_R8G8_SSCALED;
-   case PIPE_FORMAT_R8G8B8_SSCALED:
-      return BRW_SURFACEFORMAT_R8G8B8_SSCALED;
-   case PIPE_FORMAT_R8G8B8A8_SSCALED:
-      return BRW_SURFACEFORMAT_R8G8B8A8_SSCALED;
-
-   default:
-      assert(0);
-      return 0;
-   }
-}
-
-static void brw_translate_vertex_elements(struct brw_context *brw,
-                                          struct brw_vertex_element_packet *brw_velems,
-                                          const struct pipe_vertex_element *attribs,
-                                          unsigned count)
-{
-   unsigned i;
-
-   /* If the VS doesn't read any inputs (calculating vertex position from
-    * a state variable for some reason, for example), emit a single pad
-    * VERTEX_ELEMENT struct and bail.
-    *
-    * The stale VB state stays in place, but they don't do anything unless
-    * a VE loads from them.
-    */
-   brw_velems->header.opcode = CMD_VERTEX_ELEMENT;
-
-   if (count == 0) {
-      brw_velems->header.length = 1;
-      brw_velems->ve[0].ve0.src_offset = 0;
-      brw_velems->ve[0].ve0.src_format = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT;
-      brw_velems->ve[0].ve0.valid = 1;
-      brw_velems->ve[0].ve0.vertex_buffer_index = 0;
-      brw_velems->ve[0].ve1.dst_offset = 0;
-      brw_velems->ve[0].ve1.vfcomponent0 = BRW_VE1_COMPONENT_STORE_0;
-      brw_velems->ve[0].ve1.vfcomponent1 = BRW_VE1_COMPONENT_STORE_0;
-      brw_velems->ve[0].ve1.vfcomponent2 = BRW_VE1_COMPONENT_STORE_0;
-      brw_velems->ve[0].ve1.vfcomponent3 = BRW_VE1_COMPONENT_STORE_1_FLT;
-      return;
-   }
-
-
-   /* Now emit vertex element (VEP) state packets.
-    *
-    */
-   brw_velems->header.length = (1 + count * 2) - 2;
-   for (i = 0; i < count; i++) {
-      const struct pipe_vertex_element *input = &attribs[i];
-      unsigned nr_components = util_format_get_nr_components(input->src_format);
-
-      uint32_t format = brw_translate_surface_format( input->src_format );
-      uint32_t comp0 = BRW_VE1_COMPONENT_STORE_SRC;
-      uint32_t comp1 = BRW_VE1_COMPONENT_STORE_SRC;
-      uint32_t comp2 = BRW_VE1_COMPONENT_STORE_SRC;
-      uint32_t comp3 = BRW_VE1_COMPONENT_STORE_SRC;
-
-      switch (nr_components) {
-      case 0: comp0 = BRW_VE1_COMPONENT_STORE_0; /* fallthrough */
-      case 1: comp1 = BRW_VE1_COMPONENT_STORE_0; /* fallthrough */
-      case 2: comp2 = BRW_VE1_COMPONENT_STORE_0; /* fallthrough */
-      case 3: comp3 = BRW_VE1_COMPONENT_STORE_1_FLT;
-         break;
-      }
-
-      brw_velems->ve[i].ve0.src_offset = input->src_offset;
-      brw_velems->ve[i].ve0.src_format = format;
-      brw_velems->ve[i].ve0.valid = 1;
-      brw_velems->ve[i].ve0.vertex_buffer_index = input->vertex_buffer_index;
-      brw_velems->ve[i].ve1.vfcomponent0 = comp0;
-      brw_velems->ve[i].ve1.vfcomponent1 = comp1;
-      brw_velems->ve[i].ve1.vfcomponent2 = comp2;
-      brw_velems->ve[i].ve1.vfcomponent3 = comp3;
-
-      if (brw->gen == 5)
-         brw_velems->ve[i].ve1.dst_offset = 0;
-      else
-         brw_velems->ve[i].ve1.dst_offset = i * 4;
-   }
-}
-
-static void* brw_create_vertex_elements_state( struct pipe_context *pipe,
-                                               unsigned count,
-                                               const struct pipe_vertex_element *attribs )
-{
-   /* note: for the brw_swtnl.c code (if ever we need draw fallback) we'd also need
-      to store the original data */
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_vertex_element_packet *velems;
-   assert(count <= BRW_VEP_MAX);
-   velems = (struct brw_vertex_element_packet *) MALLOC(sizeof(struct brw_vertex_element_packet));
-   if (velems) {
-      brw_translate_vertex_elements(brw, velems, attribs, count);
-   }
-   return velems;
-}
-
-static void brw_bind_vertex_elements_state(struct pipe_context *pipe,
-                                           void *velems)
-{
-   struct brw_context *brw = brw_context(pipe);
-   struct brw_vertex_element_packet *brw_velems = (struct brw_vertex_element_packet *) velems;
-
-   brw->curr.velems = brw_velems;
-
-   brw->state.dirty.mesa |= PIPE_NEW_VERTEX_ELEMENT;
-}
-
-static void brw_delete_vertex_elements_state(struct pipe_context *pipe, void *velems)
-{
-   FREE( velems );
-}
-
-
-static void brw_set_vertex_buffers(struct pipe_context *pipe,
-                                   unsigned count,
-                                   const struct pipe_vertex_buffer *buffers)
-{
-   struct brw_context *brw = brw_context(pipe);
-
-   /* Check for no change */
-   if (count == brw->curr.num_vertex_buffers &&
-       memcmp(brw->curr.vertex_buffer,
-              buffers,
-              count * sizeof buffers[0]) == 0)
-      return;
-
-   util_copy_vertex_buffers(brw->curr.vertex_buffer,
-                            &brw->curr.num_vertex_buffers,
-                            buffers, count);
-
-   brw->state.dirty.mesa |= PIPE_NEW_VERTEX_BUFFER;
-}
-
-
-static void brw_set_index_buffer(struct pipe_context *pipe,
-                                 const struct pipe_index_buffer *ib)
-{
-   struct brw_context *brw = brw_context(pipe);
-
-   if (ib) {
-      if (brw->curr.index_buffer == ib->buffer &&
-          brw->curr.index_offset == ib->offset &&
-          brw->curr.index_size == ib->index_size)
-         return;
-
-      pipe_resource_reference(&brw->curr.index_buffer, ib->buffer);
-      brw->curr.index_offset = ib->offset;
-      brw->curr.index_size = ib->index_size;
-   }
-   else {
-      if (!brw->curr.index_buffer &&
-          !brw->curr.index_offset &&
-          !brw->curr.index_size)
-         return;
-
-      pipe_resource_reference(&brw->curr.index_buffer, NULL);
-      brw->curr.index_offset = 0;
-      brw->curr.index_size = 0;
-   }
-
-   brw->state.dirty.mesa |= PIPE_NEW_INDEX_BUFFER;
-}
-
-
-void 
-brw_pipe_vertex_init( struct brw_context *brw )
-{
-   brw->base.set_vertex_buffers = brw_set_vertex_buffers;
-   brw->base.set_index_buffer = brw_set_index_buffer;
-   brw->base.create_vertex_elements_state = brw_create_vertex_elements_state;
-   brw->base.bind_vertex_elements_state = brw_bind_vertex_elements_state;
-   brw->base.delete_vertex_elements_state = brw_delete_vertex_elements_state;
-   brw->base.redefine_user_buffer = u_default_redefine_user_buffer;
-}
-
-
-void 
-brw_pipe_vertex_cleanup( struct brw_context *brw )
-{
-   unsigned i;
-
-   /* Release bound pipe vertex_buffers
-    */
-   for (i = 0; i < brw->curr.num_vertex_buffers; i++) {
-      pipe_resource_reference(&brw->curr.vertex_buffer[i].buffer, NULL);
-   }
-
-   /* Release some other stuff
-    */
-#if 0
-   for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
-      bo_reference(&brw->vb.inputs[i].bo, NULL);
-      brw->vb.inputs[i].bo = NULL;
-   }
-#endif
-}
diff --git a/src/gallium/drivers/i965/brw_public.h b/src/gallium/drivers/i965/brw_public.h
deleted file mode 100644 (file)
index be2cd6b..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#ifndef BRW_PUBLIC_H
-#define BRW_PUBLIC_H
-
-struct brw_winsys_screen;
-struct pipe_screen;
-
-/**
- * Create brw AKA i965 pipe_screen.
- */
-struct pipe_screen * brw_screen_create(struct brw_winsys_screen *bws);
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_reg.h b/src/gallium/drivers/i965/brw_reg.h
deleted file mode 100644 (file)
index 53c7c43..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-#ifndef BRW_REG_H
-#define BRW_REG_H
-
-#define CMD_MI                         (0x0 << 29)
-#define CMD_2D                         (0x2 << 29)
-#define CMD_3D                         (0x3 << 29)
-
-#define MI_NOOP                                (CMD_MI | 0)
-#define MI_BATCH_BUFFER_END            (CMD_MI | 0xA << 23)
-#define MI_FLUSH                       (CMD_MI | (4 << 23))
-
-#define _3DSTATE_DRAWRECT_INFO_I965    (CMD_3D | (3 << 27) | (1 << 24) | 0x2)
-
-/** @{
- *
- * PIPE_CONTROL operation, a combination MI_FLUSH and register write with
- * additional flushing control.
- */
-#define _3DSTATE_PIPE_CONTROL          (CMD_3D | (3 << 27) | (2 << 24) | 2)
-#define PIPE_CONTROL_NO_WRITE          (0 << 14)
-#define PIPE_CONTROL_WRITE_IMMEDIATE   (1 << 14)
-#define PIPE_CONTROL_WRITE_DEPTH_COUNT (2 << 14)
-#define PIPE_CONTROL_WRITE_TIMESTAMP   (3 << 14)
-#define PIPE_CONTROL_DEPTH_STALL       (1 << 13)
-#define PIPE_CONTROL_WRITE_FLUSH       (1 << 12)
-#define PIPE_CONTROL_INSTRUCTION_FLUSH (1 << 11)
-#define PIPE_CONTROL_INTERRUPT_ENABLE  (1 << 8)
-#define PIPE_CONTROL_PPGTT_WRITE       (0 << 2)
-#define PIPE_CONTROL_GLOBAL_GTT_WRITE  (1 << 2)
-
-/** @} */
-
-#define XY_SETUP_BLT_CMD               (CMD_2D | (0x01 << 22) | 6)
-#define XY_COLOR_BLT_CMD               (CMD_2D | (0x50 << 22) | 4)
-#define XY_SRC_COPY_BLT_CMD             (CMD_2D | (0x53 << 22) | 6)
-
-/* BR00 */
-#define XY_BLT_WRITE_ALPHA     (1 << 21)
-#define XY_BLT_WRITE_RGB       (1 << 20)
-#define XY_SRC_TILED           (1 << 15)
-#define XY_DST_TILED           (1 << 11)
-
-/* BR13 */
-#define BR13_565               (0x1 << 24)
-#define BR13_8888              (0x3 << 24)
-
-#define FENCE_LINEAR 0
-#define FENCE_XMAJOR 1
-#define FENCE_YMAJOR 2
-
-
-
-/* PCI IDs
- */
-#define PCI_CHIP_I965_G                        0x29A2
-#define PCI_CHIP_I965_Q                        0x2992
-#define PCI_CHIP_I965_G_1              0x2982
-#define PCI_CHIP_I946_GZ               0x2972
-#define PCI_CHIP_I965_GM                0x2A02
-#define PCI_CHIP_I965_GME               0x2A12
-
-#define PCI_CHIP_GM45_GM                0x2A42
-
-#define PCI_CHIP_IGD_E_G                0x2E02
-#define PCI_CHIP_Q45_G                  0x2E12
-#define PCI_CHIP_G45_G                  0x2E22
-#define PCI_CHIP_G41_G                  0x2E32
-#define PCI_CHIP_B43_G                  0x2E42
-#define PCI_CHIP_B43_G1                 0x2E92
-
-#define PCI_CHIP_ILD_G                  0x0042
-#define PCI_CHIP_ILM_G                  0x0046
-
-#define PCI_CHIP_SANDYBRIDGE_GT1       0x0102  /* Desktop */
-#define PCI_CHIP_SANDYBRIDGE_GT2       0x0112
-#define PCI_CHIP_SANDYBRIDGE_GT2_PLUS  0x0122
-#define PCI_CHIP_SANDYBRIDGE_M_GT1     0x0106  /* Mobile */
-#define PCI_CHIP_SANDYBRIDGE_M_GT2     0x0116
-#define PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS        0x0126
-#define PCI_CHIP_SANDYBRIDGE_S         0x010A  /* Server */
-
-#define IS_G45(devid)           (devid == PCI_CHIP_IGD_E_G || \
-                                 devid == PCI_CHIP_Q45_G || \
-                                 devid == PCI_CHIP_G45_G || \
-                                 devid == PCI_CHIP_G41_G || \
-                                 devid == PCI_CHIP_B43_G || \
-                                 devid == PCI_CHIP_B43_G1)
-#define IS_GM45(devid)          (devid == PCI_CHIP_GM45_GM)
-#define IS_G4X(devid)          (IS_G45(devid) || IS_GM45(devid))
-
-#define IS_GEN4(devid)         (devid == PCI_CHIP_I965_G || \
-                                devid == PCI_CHIP_I965_Q || \
-                                devid == PCI_CHIP_I965_G_1 || \
-                                devid == PCI_CHIP_I965_GM || \
-                                devid == PCI_CHIP_I965_GME || \
-                                devid == PCI_CHIP_I946_GZ || \
-                                IS_G4X(devid))
-
-#define IS_ILD(devid)           (devid == PCI_CHIP_ILD_G)
-#define IS_ILM(devid)           (devid == PCI_CHIP_ILM_G)
-#define IS_GEN5(devid)          (IS_ILD(devid) || IS_ILM(devid))
-
-#define IS_IRONLAKE(devid)     IS_GEN5(devid)
-
-#define IS_GEN6(devid)         (devid == PCI_CHIP_SANDYBRIDGE_GT1 || \
-                                devid == PCI_CHIP_SANDYBRIDGE_GT2 || \
-                                devid == PCI_CHIP_SANDYBRIDGE_GT2_PLUS || \
-                                devid == PCI_CHIP_SANDYBRIDGE_M_GT1 || \
-                                devid == PCI_CHIP_SANDYBRIDGE_M_GT2 || \
-                                devid == PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS || \
-                                devid == PCI_CHIP_SANDYBRIDGE_S)
-
-#define IS_965(devid)          (IS_GEN4(devid) || \
-                                IS_G4X(devid) || \
-                                IS_GEN5(devid) || \
-                                IS_GEN6(devid))
-
-/* XXX: hacks
- */
-#define VERT_RESULT_HPOS 0     /* not always true */
-#define VERT_RESULT_PSIZ 127   /* disabled */
-
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_resource.c b/src/gallium/drivers/i965/brw_resource.c
deleted file mode 100644 (file)
index 3b61ffb..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "util/u_debug.h"
-#include "util/u_surface.h"
-
-#include "brw_resource.h"
-#include "brw_context.h"
-#include "brw_screen.h"
-
-
-static struct pipe_resource *
-brw_resource_create(struct pipe_screen *screen,
-                    const struct pipe_resource *template)
-{
-   if (template->target == PIPE_BUFFER)
-      return brw_buffer_create(screen, template);
-   else
-      return brw_texture_create(screen, template);
-
-}
-
-static struct pipe_resource *
-brw_resource_from_handle(struct pipe_screen * screen,
-                        const struct pipe_resource *template,
-                        struct winsys_handle *whandle)
-{
-   if (template->target == PIPE_BUFFER)
-      return NULL;
-   else
-      return brw_texture_from_handle(screen, template, whandle);
-}
-
-
-void
-brw_init_resource_functions(struct brw_context *brw )
-{
-   brw->base.get_transfer = u_get_transfer_vtbl;
-   brw->base.transfer_map = u_transfer_map_vtbl;
-   brw->base.transfer_flush_region = u_transfer_flush_region_vtbl;
-   brw->base.transfer_unmap = u_transfer_unmap_vtbl;
-   brw->base.transfer_destroy = u_transfer_destroy_vtbl;
-   brw->base.transfer_inline_write = u_transfer_inline_write_vtbl;
-   brw->base.resource_copy_region = util_resource_copy_region;
-}
-
-void
-brw_init_screen_resource_functions(struct brw_screen *is)
-{
-   is->base.resource_create = brw_resource_create;
-   is->base.resource_from_handle = brw_resource_from_handle;
-   is->base.resource_get_handle = u_resource_get_handle_vtbl;
-   is->base.resource_destroy = u_resource_destroy_vtbl;
-   is->base.user_buffer_create = brw_user_buffer_create;
-}
diff --git a/src/gallium/drivers/i965/brw_resource.h b/src/gallium/drivers/i965/brw_resource.h
deleted file mode 100644 (file)
index 78defb3..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-#ifndef BRW_RESOURCE_H
-#define BRW_RESOURCE_H
-
-struct brw_screen;
-
-#include "util/u_transfer.h"
-#include "util/u_debug.h"
-
-#include "brw_screen.h"                /* for brw_surface */
-
-struct brw_context;
-struct brw_screen;
-
-
-struct brw_buffer {
-   struct u_resource b;
-
-   /* One of either bo or user_buffer will be non-null, depending on
-    * whether this is a hardware or user buffer.
-    */
-   struct brw_winsys_buffer *bo;
-   void *user_buffer;
-
-   /* Mapped pointer??
-    */
-   void *ptr;
-};
-
-#define BRW_MAX_TEXTURE_2D_LEVELS 11  /* max 1024x1024 */
-#define BRW_MAX_TEXTURE_3D_LEVELS  8  /* max 128x128x128 */
-
-
-
-struct brw_texture {
-   struct u_resource b;
-   struct brw_winsys_buffer *bo;
-   struct brw_surface_state ss;
-
-   unsigned *image_offset[BRW_MAX_TEXTURE_2D_LEVELS];
-   unsigned nr_images[BRW_MAX_TEXTURE_2D_LEVELS];
-   unsigned level_offset[BRW_MAX_TEXTURE_2D_LEVELS];
-
-   boolean compressed;
-   unsigned brw_target;
-   unsigned pitch;
-   unsigned tiling;
-   unsigned cpp;
-   unsigned total_height;
-
-   struct brw_surface views[2];
-};
-
-
-void brw_init_screen_resource_functions(struct brw_screen *is);
-void brw_init_resource_functions(struct brw_context *brw );
-
-extern struct u_resource_vtbl brw_buffer_vtbl;
-extern struct u_resource_vtbl brw_texture_vtbl;
-
-static INLINE struct brw_texture *brw_texture( struct pipe_resource *resource )
-{
-   struct brw_texture *tex = (struct brw_texture *)resource;
-   assert(tex->b.vtbl == &brw_texture_vtbl);
-   return tex;
-}
-
-static INLINE struct brw_buffer *brw_buffer( struct pipe_resource *resource )
-{
-   struct brw_buffer *tex = (struct brw_buffer *)resource;
-   assert(tex->b.vtbl == &brw_buffer_vtbl);
-   return tex;
-}
-
-struct pipe_resource *
-brw_texture_create(struct pipe_screen *screen,
-                    const struct pipe_resource *template);
-
-struct pipe_resource *
-brw_texture_from_handle(struct pipe_screen * screen,
-                       const struct pipe_resource *template,
-                       struct winsys_handle *whandle);
-
-
-struct pipe_resource *
-brw_user_buffer_create(struct pipe_screen *screen,
-                        void *ptr,
-                        unsigned bytes,
-                       unsigned usage);
-
-struct pipe_resource *
-brw_buffer_create(struct pipe_screen *screen,
-                  const struct pipe_resource *template);
-
-
-/*
-boolean
-brw_is_format_supported( struct pipe_screen *screen,
-                        enum pipe_format format,
-                        enum pipe_texture_target target,
-                        unsigned sample_count,
-                        unsigned tex_usage,
-                        unsigned geom_flags );
-*/
-
-/* Pipe buffer helpers
- */
-static INLINE boolean
-brw_buffer_is_user_buffer( const struct pipe_resource *buf )
-{
-   return ((const struct brw_buffer *)buf)->user_buffer != NULL;
-}
-
-
-/***********************************************************************
- * Internal functions 
- */
-GLboolean brw_texture_layout(struct brw_screen *brw_screen,
-                            struct brw_texture *tex );
-
-void brw_update_texture( struct brw_screen *brw_screen,
-                        struct brw_texture *tex );
-
-
-
-#endif /* BRW_RESOURCE_H */
diff --git a/src/gallium/drivers/i965/brw_resource_buffer.c b/src/gallium/drivers/i965/brw_resource_buffer.c
deleted file mode 100644 (file)
index 32dc54f..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-
-#include "util/u_memory.h"
-#include "util/u_math.h"
-
-#include "pipe/p_state.h"
-#include "pipe/p_defines.h"
-#include "util/u_inlines.h"
-
-#include "brw_resource.h"
-#include "brw_context.h"
-#include "brw_batchbuffer.h"
-#include "brw_winsys.h"
-
-static boolean
-brw_buffer_get_handle(struct pipe_screen *screen,
-                     struct pipe_resource *resource,
-                     struct winsys_handle *handle)
-{
-   return FALSE;
-}
-
-
-static void
-brw_buffer_destroy(struct pipe_screen *screen,
-                   struct pipe_resource *resource)
-{
-   struct brw_buffer *buf = brw_buffer( resource );
-
-   bo_reference(&buf->bo, NULL);
-   FREE(buf);
-}
-
-
-static void *
-brw_buffer_transfer_map( struct pipe_context *pipe,
-                        struct pipe_transfer *transfer)
-{
-   struct brw_screen *bscreen = brw_screen(pipe->screen); 
-   struct brw_winsys_screen *sws = bscreen->sws;
-   struct brw_buffer *buf = brw_buffer(transfer->resource);
-   unsigned offset = transfer->box.x;
-   unsigned length = transfer->box.width;
-   unsigned usage = transfer->usage;
-   uint8_t *map;
-
-   if (buf->user_buffer)
-      map = buf->user_buffer;
-   else
-      map = sws->bo_map( buf->bo, 
-                        BRW_DATA_OTHER,
-                        offset,
-                        length,
-                        (usage & PIPE_TRANSFER_WRITE) ? TRUE : FALSE,
-                        (usage & PIPE_TRANSFER_DISCARD) ? TRUE : FALSE,
-                        (usage & PIPE_TRANSFER_FLUSH_EXPLICIT) ? TRUE : FALSE);
-
-   return map + offset;
-}
-
-
-static void
-brw_buffer_transfer_flush_region( struct pipe_context *pipe,
-                                 struct pipe_transfer *transfer,
-                                 const struct pipe_box *box)
-{
-   struct brw_screen *bscreen = brw_screen(pipe->screen); 
-   struct brw_winsys_screen *sws = bscreen->sws;
-   struct brw_buffer *buf = brw_buffer(transfer->resource);
-   unsigned offset = box->x;
-   unsigned length = box->width;
-
-   if (buf->user_buffer)
-      return;
-
-   sws->bo_flush_range( buf->bo, 
-                        offset,
-                        length );
-}
-
-
-static void
-brw_buffer_transfer_unmap( struct pipe_context *pipe,
-                          struct pipe_transfer *transfer)
-{
-   struct brw_screen *bscreen = brw_screen(pipe->screen); 
-   struct brw_winsys_screen *sws = bscreen->sws;
-   struct brw_buffer *buf = brw_buffer( transfer->resource );
-   
-   if (buf->bo)
-      sws->bo_unmap(buf->bo);
-}
-
-
-struct u_resource_vtbl brw_buffer_vtbl = 
-{
-   brw_buffer_get_handle,           /* get_handle */
-   brw_buffer_destroy,              /* resource_destroy */
-   u_default_get_transfer,          /* get_transfer */
-   u_default_transfer_destroy,      /* transfer_destroy */
-   brw_buffer_transfer_map,         /* transfer_map */
-   brw_buffer_transfer_flush_region,  /* transfer_flush_region */
-   brw_buffer_transfer_unmap,       /* transfer_unmap */
-   u_default_transfer_inline_write   /* transfer_inline_write */
-};
-
-
-struct pipe_resource *
-brw_buffer_create(struct pipe_screen *screen,
-                 const struct pipe_resource *template)
-{
-   struct brw_screen *bscreen = brw_screen(screen);
-   struct brw_winsys_screen *sws = bscreen->sws;
-   struct brw_buffer *buf;
-   unsigned buffer_type;
-   enum pipe_error ret;
-   
-   buf = CALLOC_STRUCT(brw_buffer);
-   if (!buf)
-      return NULL;
-      
-   buf->b.b = *template;
-   buf->b.vtbl = &brw_buffer_vtbl;
-   pipe_reference_init(&buf->b.b.reference, 1);
-   buf->b.b.screen = screen;
-
-   switch (template->bind & (PIPE_BIND_VERTEX_BUFFER |
-                             PIPE_BIND_INDEX_BUFFER |
-                             PIPE_BIND_CONSTANT_BUFFER))
-   {
-   case PIPE_BIND_VERTEX_BUFFER:
-   case PIPE_BIND_INDEX_BUFFER:
-   case (PIPE_BIND_VERTEX_BUFFER|PIPE_BIND_INDEX_BUFFER):
-      buffer_type = BRW_BUFFER_TYPE_VERTEX;
-      break;
-      
-   case PIPE_BIND_CONSTANT_BUFFER:
-      buffer_type = BRW_BUFFER_TYPE_SHADER_CONSTANTS;
-      break;
-
-   default:
-      buffer_type = BRW_BUFFER_TYPE_GENERIC;
-      break;
-   }
-   
-   ret = sws->bo_alloc( sws, buffer_type,
-                        template->width0,
-                       64,     /* alignment */
-                        &buf->bo );
-   if (ret != PIPE_OK)
-      return NULL;
-      
-   return &buf->b.b; 
-}
-
-
-struct pipe_resource *
-brw_user_buffer_create(struct pipe_screen *screen,
-                       void *ptr,
-                       unsigned bytes,
-                      unsigned bind)
-{
-   struct brw_buffer *buf;
-   
-   buf = CALLOC_STRUCT(brw_buffer);
-   if (!buf)
-      return NULL;
-   
-   pipe_reference_init(&buf->b.b.reference, 1);
-   buf->b.vtbl = &brw_buffer_vtbl;
-   buf->b.b.screen = screen;
-   buf->b.b.format = PIPE_FORMAT_R8_UNORM; /* ?? */
-   buf->b.b.usage = PIPE_USAGE_IMMUTABLE;
-   buf->b.b.bind = bind;
-   buf->b.b.width0 = bytes;
-   buf->b.b.height0 = 1;
-   buf->b.b.depth0 = 1;
-   buf->b.b.array_size = 1;
-
-   buf->user_buffer = ptr;
-   
-   return &buf->b.b; 
-}
diff --git a/src/gallium/drivers/i965/brw_resource_texture.c b/src/gallium/drivers/i965/brw_resource_texture.c
deleted file mode 100644 (file)
index 630efcb..0000000
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "util/u_memory.h"
-#include "util/u_simple_list.h"
-#include "util/u_format.h"
-
-#include "brw_screen.h"
-#include "brw_defines.h"
-#include "brw_structs.h"
-#include "brw_winsys.h"
-#include "brw_batchbuffer.h"
-#include "brw_context.h"
-#include "brw_resource.h"
-
-
-/**
- * Subclass of pipe_transfer
- */
-struct brw_transfer
-{
-   struct pipe_transfer base;
-
-   unsigned offset;
-};
-
-static INLINE struct brw_transfer *
-brw_transfer(struct pipe_transfer *transfer)
-{
-   return (struct brw_transfer *)transfer;
-}
-
-
-static GLuint translate_tex_target( unsigned target )
-{
-   switch (target) {
-   case PIPE_TEXTURE_1D: 
-      return BRW_SURFACE_1D;
-
-   case PIPE_TEXTURE_2D: 
-   case PIPE_TEXTURE_RECT:
-      return BRW_SURFACE_2D;
-
-   case PIPE_TEXTURE_3D: 
-      return BRW_SURFACE_3D;
-
-   case PIPE_TEXTURE_CUBE:
-      return BRW_SURFACE_CUBE;
-
-   default: 
-      assert(0); 
-      return BRW_SURFACE_1D;
-   }
-}
-
-
-static GLuint translate_tex_format( enum pipe_format pf )
-{
-   switch( pf ) {
-   case PIPE_FORMAT_L8_UNORM:
-      return BRW_SURFACEFORMAT_L8_UNORM;
-
-   case PIPE_FORMAT_I8_UNORM:
-      return BRW_SURFACEFORMAT_I8_UNORM;
-
-   case PIPE_FORMAT_A8_UNORM:
-      return BRW_SURFACEFORMAT_A8_UNORM; 
-
-   case PIPE_FORMAT_L16_UNORM:
-      return BRW_SURFACEFORMAT_L16_UNORM;
-
-      /* XXX: Add these to gallium
-   case PIPE_FORMAT_I16_UNORM:
-      return BRW_SURFACEFORMAT_I16_UNORM;
-
-   case PIPE_FORMAT_A16_UNORM:
-      return BRW_SURFACEFORMAT_A16_UNORM; 
-      */
-
-   case PIPE_FORMAT_L8A8_UNORM:
-      return BRW_SURFACEFORMAT_L8A8_UNORM;
-
-   case PIPE_FORMAT_B5G6R5_UNORM:
-      return BRW_SURFACEFORMAT_B5G6R5_UNORM;
-
-   case PIPE_FORMAT_B5G5R5A1_UNORM:
-      return BRW_SURFACEFORMAT_B5G5R5A1_UNORM;
-
-   case PIPE_FORMAT_B4G4R4A4_UNORM:
-      return BRW_SURFACEFORMAT_B4G4R4A4_UNORM;
-
-   case PIPE_FORMAT_B8G8R8X8_UNORM:
-      return BRW_SURFACEFORMAT_R8G8B8X8_UNORM;
-
-   case PIPE_FORMAT_B8G8R8A8_UNORM:
-      return BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
-
-   /*
-    * Video formats
-    */
-
-   case PIPE_FORMAT_YUYV:
-      return BRW_SURFACEFORMAT_YCRCB_NORMAL;
-
-   case PIPE_FORMAT_UYVY:
-      return BRW_SURFACEFORMAT_YCRCB_SWAPUVY;
-
-   /*
-    * Compressed formats.
-    */
-      /* XXX: Add FXT to gallium?
-   case PIPE_FORMAT_FXT1_RGBA:
-      return BRW_SURFACEFORMAT_FXT1;
-      */
-
-   case PIPE_FORMAT_DXT1_RGB:
-       return BRW_SURFACEFORMAT_DXT1_RGB;
-
-   case PIPE_FORMAT_DXT1_RGBA:
-       return BRW_SURFACEFORMAT_BC1_UNORM;
-       
-   case PIPE_FORMAT_DXT3_RGBA:
-       return BRW_SURFACEFORMAT_BC2_UNORM;
-       
-   case PIPE_FORMAT_DXT5_RGBA:
-       return BRW_SURFACEFORMAT_BC3_UNORM;
-
-   /*
-    * sRGB formats
-    */
-
-   case PIPE_FORMAT_A8B8G8R8_SRGB:
-      return BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB;
-
-   case PIPE_FORMAT_L8A8_SRGB:
-      return BRW_SURFACEFORMAT_L8A8_UNORM_SRGB;
-
-   case PIPE_FORMAT_L8_SRGB:
-      return BRW_SURFACEFORMAT_L8_UNORM_SRGB;
-
-   case PIPE_FORMAT_DXT1_SRGB:
-      return BRW_SURFACEFORMAT_BC1_UNORM_SRGB;
-
-   /*
-    * Depth formats
-    */
-
-   case PIPE_FORMAT_Z16_UNORM:
-         return BRW_SURFACEFORMAT_I16_UNORM;
-
-   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-   case PIPE_FORMAT_Z24X8_UNORM:
-         return BRW_SURFACEFORMAT_I24X8_UNORM;
-
-   case PIPE_FORMAT_Z32_FLOAT:
-         return BRW_SURFACEFORMAT_I32_FLOAT;
-
-      /* XXX: presumably for bump mapping.  Add this to mesa state
-       * tracker?
-       *
-       * XXX: Add flipped versions of these formats to Gallium.
-       */
-   case PIPE_FORMAT_R8G8_SNORM:
-      return BRW_SURFACEFORMAT_R8G8_SNORM;
-
-   case PIPE_FORMAT_R8G8B8A8_SNORM:
-      return BRW_SURFACEFORMAT_R8G8B8A8_SNORM;
-
-   default:
-      return BRW_SURFACEFORMAT_INVALID;
-   }
-}
-
-
-static boolean
-brw_texture_get_handle(struct pipe_screen *screen,
-                       struct pipe_resource *texture,
-                       struct winsys_handle *whandle)
-{
-   struct brw_screen *bscreen = brw_screen(screen);
-   struct brw_texture *tex = brw_texture(texture);
-   unsigned stride;
-
-   stride = tex->pitch * tex->cpp;
-
-   return bscreen->sws->bo_get_handle(tex->bo, whandle, stride) == PIPE_OK;
-}
-
-
-
-static void brw_texture_destroy(struct pipe_screen *screen,
-                               struct pipe_resource *pt)
-{
-   struct brw_texture *tex = brw_texture(pt);
-   bo_reference(&tex->bo, NULL);
-   FREE(pt);
-}
-
-
-/*
- * Transfer functions
- */
-
-
-static struct pipe_transfer * 
-brw_texture_get_transfer(struct pipe_context *context,
-                         struct pipe_resource *resource,
-                         unsigned level,
-                         unsigned usage,
-                         const struct pipe_box *box)
-{
-   struct brw_texture *tex = brw_texture(resource);
-   struct pipe_transfer *transfer = CALLOC_STRUCT(pipe_transfer);
-   if (transfer == NULL)
-      return NULL;
-
-   transfer->resource = resource;
-   transfer->level = level;
-   transfer->usage = usage;
-   transfer->box = *box;
-   transfer->stride = tex->pitch * tex->cpp;
-   /* FIXME: layer_stride */
-
-   return transfer;
-}
-
-
-static void *
-brw_texture_transfer_map(struct pipe_context *pipe,
-                 struct pipe_transfer *transfer)
-{
-   struct pipe_resource *resource = transfer->resource;
-   struct brw_texture *tex = brw_texture(transfer->resource);
-   struct brw_winsys_screen *sws = brw_screen(pipe->screen)->sws;
-   struct pipe_box *box = &transfer->box;
-   enum pipe_format format = resource->format;
-   unsigned usage = transfer->usage;
-   unsigned offset;
-   char *map;
-
-   if (resource->target != PIPE_TEXTURE_3D &&
-       resource->target != PIPE_TEXTURE_CUBE)
-      assert(box->z == 0);
-   offset = tex->image_offset[transfer->level][box->z];
-
-   map = sws->bo_map(tex->bo, 
-                     BRW_DATA_OTHER,
-                     0,
-                     tex->bo->size,
-                     (usage & PIPE_TRANSFER_WRITE) ? TRUE : FALSE,
-                     (usage & 0) ? TRUE : FALSE,
-                     (usage & 0) ? TRUE : FALSE);
-
-   if (!map)
-      return NULL;
-
-   return map + offset +
-      box->y / util_format_get_blockheight(format) * transfer->stride +
-      box->x / util_format_get_blockwidth(format) * util_format_get_blocksize(format);
-}
-
-static void
-brw_texture_transfer_unmap(struct pipe_context *pipe,
-                   struct pipe_transfer *transfer)
-{
-   struct brw_texture *tex = brw_texture(transfer->resource);
-   struct brw_winsys_screen *sws = brw_screen(pipe->screen)->sws;
-
-   sws->bo_unmap(tex->bo);
-}
-
-
-
-
-
-struct u_resource_vtbl brw_texture_vtbl = 
-{
-   brw_texture_get_handle,           /* get_handle */
-   brw_texture_destroy,              /* resource_destroy */
-   brw_texture_get_transfer,         /* get_transfer */
-   u_default_transfer_destroy,       /* transfer_destroy */
-   brw_texture_transfer_map,         /* transfer_map */
-   u_default_transfer_flush_region,   /* transfer_flush_region */
-   brw_texture_transfer_unmap,       /* transfer_unmap */
-   u_default_transfer_inline_write    /* transfer_inline_write */
-};
-
-
-
-
-
-struct pipe_resource *
-brw_texture_create( struct pipe_screen *screen,
-                   const struct pipe_resource *template )
-{  
-   struct brw_screen *bscreen = brw_screen(screen);
-   struct brw_texture *tex;
-   enum brw_buffer_type buffer_type;
-   enum pipe_error ret;
-   GLuint format;
-   
-   tex = CALLOC_STRUCT(brw_texture);
-   if (tex == NULL)
-      return NULL;
-
-   tex->b.b = *template;
-   tex->b.vtbl = &brw_texture_vtbl;
-   pipe_reference_init(&tex->b.b.reference, 1);
-   tex->b.b.screen = screen;
-
-   /* XXX: compressed textures need special treatment here
-    */
-   tex->cpp = util_format_get_blocksize(tex->b.b.format);
-   tex->compressed = util_format_is_s3tc(tex->b.b.format);
-
-   make_empty_list(&tex->views[0]);
-   make_empty_list(&tex->views[1]);
-
-   /* XXX: No tiling with compressed textures??
-    */
-   if (tex->compressed == 0 &&
-       !bscreen->no_tiling) 
-   {
-      if (bscreen->gen < 5 &&
-         util_format_is_depth_or_stencil(template->format))
-        tex->tiling = BRW_TILING_Y;
-      else
-        tex->tiling = BRW_TILING_X;
-   } 
-   else {
-      tex->tiling = BRW_TILING_NONE;
-   }
-
-
-   if (!brw_texture_layout( bscreen, tex ))
-      goto fail;
-
-   
-   if (template->bind & (PIPE_BIND_SCANOUT |
-                           PIPE_BIND_SHARED)) {
-      buffer_type = BRW_BUFFER_TYPE_SCANOUT;
-   }
-   else {
-      buffer_type = BRW_BUFFER_TYPE_TEXTURE;
-   }
-
-   ret = bscreen->sws->bo_alloc( bscreen->sws,
-                                 buffer_type,
-                                 tex->pitch * tex->total_height * tex->cpp,
-                                 64,
-                                 &tex->bo );
-   if (ret)
-      goto fail;
-
-   tex->ss.ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
-   tex->ss.ss0.surface_type = translate_tex_target(tex->b.b.target);
-
-   format = translate_tex_format(tex->b.b.format);
-   assert(format != BRW_SURFACEFORMAT_INVALID);
-   tex->ss.ss0.surface_format = format;
-
-   /* This is ok for all textures with channel width 8bit or less:
-    */
-/*    tex->ss.ss0.data_return_format = BRW_SURFACERETURNFORMAT_S1; */
-
-
-   /* XXX: what happens when tex->bo->offset changes???
-    */
-   tex->ss.ss1.base_addr = 0; /* reloc */
-   tex->ss.ss2.mip_count = tex->b.b.last_level;
-   tex->ss.ss2.width = tex->b.b.width0 - 1;
-   tex->ss.ss2.height = tex->b.b.height0 - 1;
-
-   switch (tex->tiling) {
-   case BRW_TILING_NONE:
-      tex->ss.ss3.tiled_surface = 0;
-      tex->ss.ss3.tile_walk = 0;
-      break;
-   case BRW_TILING_X:
-      tex->ss.ss3.tiled_surface = 1;
-      tex->ss.ss3.tile_walk = BRW_TILEWALK_XMAJOR;
-      break;
-   case BRW_TILING_Y:
-      tex->ss.ss3.tiled_surface = 1;
-      tex->ss.ss3.tile_walk = BRW_TILEWALK_YMAJOR;
-      break;
-   }
-
-   tex->ss.ss3.pitch = (tex->pitch * tex->cpp) - 1;
-   tex->ss.ss3.depth = tex->b.b.depth0 - 1;
-
-   tex->ss.ss4.min_lod = 0;
-   if (tex->b.b.target == PIPE_TEXTURE_CUBE) {
-      tex->ss.ss0.cube_pos_x = 1;
-      tex->ss.ss0.cube_pos_y = 1;
-      tex->ss.ss0.cube_pos_z = 1;
-      tex->ss.ss0.cube_neg_x = 1;
-      tex->ss.ss0.cube_neg_y = 1;
-      tex->ss.ss0.cube_neg_z = 1;
-   }
-
-   return &tex->b.b;
-
-fail:
-   bo_reference(&tex->bo, NULL);
-   FREE(tex);
-   return NULL;
-}
-
-
-struct pipe_resource * 
-brw_texture_from_handle(struct pipe_screen *screen,
-                        const struct pipe_resource *template,
-                        struct winsys_handle *whandle)
-{
-   struct brw_screen *bscreen = brw_screen(screen);
-   struct brw_texture *tex;
-   struct brw_winsys_buffer *buffer;
-   unsigned tiling;
-   unsigned pitch;
-   GLuint format;
-
-   if ((template->target != PIPE_TEXTURE_2D
-         && template->target != PIPE_TEXTURE_RECT)  ||
-       template->last_level != 0 ||
-       template->depth0 != 1)
-      return NULL;
-
-   if (util_format_is_s3tc(template->format))
-      return NULL;
-
-   tex = CALLOC_STRUCT(brw_texture);
-   if (!tex)
-      return NULL;
-
-   if (bscreen->sws->bo_from_handle(bscreen->sws, whandle, &pitch, &tiling, &buffer) != PIPE_OK)
-      goto fail;
-
-   tex->b.b = *template;
-   tex->b.vtbl = &brw_texture_vtbl;
-   pipe_reference_init(&tex->b.b.reference, 1);
-   tex->b.b.screen = screen;
-
-   /* XXX: cpp vs. blocksize
-    */
-   tex->cpp = util_format_get_blocksize(tex->b.b.format);
-   tex->tiling = tiling;
-
-   make_empty_list(&tex->views[0]);
-   make_empty_list(&tex->views[1]);
-
-   if (!brw_texture_layout(bscreen, tex))
-      goto fail;
-
-   /* XXX Maybe some more checks? */
-   if ((pitch / tex->cpp) < tex->pitch)
-      goto fail;
-
-   tex->pitch = pitch / tex->cpp;
-
-   tex->bo = buffer;
-
-   /* fix this warning */
-#if 0
-   if (tex->size > buffer->size)
-      goto fail;
-#endif
-
-   tex->ss.ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
-   tex->ss.ss0.surface_type = translate_tex_target(tex->b.b.target);
-
-   format = translate_tex_format(tex->b.b.format);
-   assert(format != BRW_SURFACEFORMAT_INVALID);
-   tex->ss.ss0.surface_format = format;
-
-   /* This is ok for all textures with channel width 8bit or less:
-    */
-/*    tex->ss.ss0.data_return_format = BRW_SURFACERETURNFORMAT_S1; */
-
-
-   /* XXX: what happens when tex->bo->offset changes???
-    */
-   tex->ss.ss1.base_addr = 0; /* reloc */
-   tex->ss.ss2.mip_count = tex->b.b.last_level;
-   tex->ss.ss2.width = tex->b.b.width0 - 1;
-   tex->ss.ss2.height = tex->b.b.height0 - 1;
-
-   switch (tex->tiling) {
-   case BRW_TILING_NONE:
-      tex->ss.ss3.tiled_surface = 0;
-      tex->ss.ss3.tile_walk = 0;
-      break;
-   case BRW_TILING_X:
-      tex->ss.ss3.tiled_surface = 1;
-      tex->ss.ss3.tile_walk = BRW_TILEWALK_XMAJOR;
-      break;
-   case BRW_TILING_Y:
-      tex->ss.ss3.tiled_surface = 1;
-      tex->ss.ss3.tile_walk = BRW_TILEWALK_YMAJOR;
-      break;
-   }
-
-   tex->ss.ss3.pitch = (tex->pitch * tex->cpp) - 1;
-   tex->ss.ss3.depth = tex->b.b.depth0 - 1;
-
-   tex->ss.ss4.min_lod = 0;
-
-   return &tex->b.b;
-
-fail:
-   FREE(tex);
-   return NULL;
-}
-
-
-#if 0
-boolean brw_is_format_supported( struct pipe_screen *screen,
-                                enum pipe_format format,
-                                enum pipe_texture_target target,
-                                unsigned sample_count,
-                                unsigned tex_usage,
-                                unsigned geom_flags )
-{
-   return translate_tex_format(format) != BRW_SURFACEFORMAT_INVALID;
-}
-#endif
diff --git a/src/gallium/drivers/i965/brw_resource_texture_layout.c b/src/gallium/drivers/i965/brw_resource_texture_layout.c
deleted file mode 100644 (file)
index afecc77..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
-
-#include "pipe/p_format.h"
-
-#include "util/u_math.h"
-#include "util/u_memory.h"
-
-#include "brw_resource.h"
-#include "brw_debug.h"
-#include "brw_winsys.h"
-
-/* Code to layout images in a mipmap tree for i965.
- */
-
-static int 
-brw_tex_pitch_align (struct brw_texture *tex,
-                    int pitch)
-{
-   if (!tex->compressed) {
-      int pitch_align;
-
-      switch (tex->tiling) {
-      case BRW_TILING_X:
-        pitch_align = 512;
-        break;
-      case BRW_TILING_Y:
-        pitch_align = 128;
-        break;
-      default:
-        /* XXX: Untiled pitch alignment of 64 bytes for now to allow
-         * render-to-texture to work in all cases. This should
-         * probably be replaced at some point by some scheme to only
-         * do this when really necessary, for example standalone
-         * render target views.
-         */
-        pitch_align = 64;
-        break;
-      }
-
-      pitch = align(pitch * tex->cpp, pitch_align);
-      pitch /= tex->cpp;
-   }
-
-   return pitch;
-}
-
-
-static void 
-brw_tex_alignment_unit(enum pipe_format pf, 
-                      GLuint *w, GLuint *h)
-{
-    switch (pf) {
-    case PIPE_FORMAT_DXT1_RGB:
-    case PIPE_FORMAT_DXT1_RGBA:
-    case PIPE_FORMAT_DXT3_RGBA:
-    case PIPE_FORMAT_DXT5_RGBA:
-    case PIPE_FORMAT_DXT1_SRGB:
-    case PIPE_FORMAT_DXT1_SRGBA:
-    case PIPE_FORMAT_DXT3_SRGBA:
-    case PIPE_FORMAT_DXT5_SRGBA:
-        *w = 4;
-        *h = 4;
-        break;
-
-    default:
-        *w = 4;
-        *h = 2;
-        break;
-    }
-}
-
-
-static void 
-brw_tex_set_level_info(struct brw_texture *tex,
-                      GLuint level,
-                      GLuint nr_images,
-                      GLuint x, GLuint y,
-                      GLuint w, GLuint h, GLuint d)
-{
-
-   if (BRW_DEBUG & DEBUG_TEXTURE)
-      debug_printf("%s level %d size: %d,%d,%d offset %d,%d (0x%x)\n", __FUNCTION__,
-                  level, w, h, d, x, y, tex->level_offset[level]);
-
-   assert(tex->image_offset[level] == NULL);
-   assert(nr_images >= 1);
-
-   tex->level_offset[level] = (x + y * tex->pitch) * tex->cpp;
-   tex->nr_images[level] = nr_images;
-
-   tex->image_offset[level] = MALLOC(nr_images * sizeof(GLuint));
-   tex->image_offset[level][0] = 0;
-}
-
-
-static void
-brw_tex_set_image_offset(struct brw_texture *tex,
-                        GLuint level, GLuint img,
-                        GLuint x, GLuint y, 
-                        GLuint offset)
-{
-   assert((x == 0 && y == 0) || img != 0 || level != 0);
-   assert(img < tex->nr_images[level]);
-
-   if (BRW_DEBUG & DEBUG_TEXTURE)
-      debug_printf("%s level %d img %d pos %d,%d image_offset %x\n",
-                  __FUNCTION__, level, img, x, y, 
-                  tex->image_offset[level][img]);
-
-   tex->image_offset[level][img] = (x + y * tex->pitch) * tex->cpp + offset;
-}
-
-
-
-static void brw_layout_2d( struct brw_texture *tex )
-{
-   GLuint align_h = 2, align_w = 4;
-   GLuint level;
-   GLuint x = 0;
-   GLuint y = 0;
-   GLuint width = tex->b.b.width0;
-   GLuint height = tex->b.b.height0;
-
-   tex->pitch = tex->b.b.width0;
-   brw_tex_alignment_unit(tex->b.b.format, &align_w, &align_h);
-
-   if (tex->compressed) {
-       tex->pitch = align(tex->b.b.width0, align_w);
-   }
-
-   /* May need to adjust pitch to accomodate the placement of
-    * the 2nd mipmap.  This occurs when the alignment
-    * constraints of mipmap placement push the right edge of the
-    * 2nd mipmap out past the width of its parent.
-    */
-   if (tex->b.b.last_level > 0) {
-       GLuint mip1_width;
-
-       if (tex->compressed) {
-          mip1_width = (align(u_minify(tex->b.b.width0, 1), align_w) + 
-                        align(u_minify(tex->b.b.width0, 2), align_w));
-       } else {
-          mip1_width = (align(u_minify(tex->b.b.width0, 1), align_w) + 
-                        u_minify(tex->b.b.width0, 2));
-       }
-
-       if (mip1_width > tex->pitch) {
-           tex->pitch = mip1_width;
-       }
-   }
-
-   /* Pitch must be a whole number of dwords, even though we
-    * express it in texels.
-    */
-   tex->pitch = brw_tex_pitch_align (tex, tex->pitch);
-   tex->total_height = 0;
-
-   for ( level = 0 ; level <= tex->b.b.last_level ; level++ ) {
-      GLuint img_height;
-
-      brw_tex_set_level_info(tex, level, 1, x, y, width, height, 1);
-
-      if (tex->compressed)
-        img_height = MAX2(1, height/4);
-      else
-        img_height = align(height, align_h);
-
-
-      /* Because the images are packed better, the final offset
-       * might not be the maximal one:
-       */
-      tex->total_height = MAX2(tex->total_height, y + img_height);
-
-      /* Layout_below: step right after second mipmap.
-       */
-      if (level == 1) {
-        x += align(width, align_w);
-      }
-      else {
-        y += img_height;
-      }
-
-      width  = u_minify(width, 1);
-      height = u_minify(height, 1);
-   }
-}
-
-
-static boolean 
-brw_layout_cubemap_idgng( struct brw_texture *tex )
-{
-   GLuint align_h = 2, align_w = 4;
-   GLuint level;
-   GLuint x = 0;
-   GLuint y = 0;
-   GLuint width = tex->b.b.width0;
-   GLuint height = tex->b.b.height0;
-   GLuint qpitch = 0;
-   GLuint y_pitch = 0;
-
-   tex->pitch = tex->b.b.width0;
-   brw_tex_alignment_unit(tex->b.b.format, &align_w, &align_h);
-   y_pitch = align(height, align_h);
-
-   if (tex->compressed) {
-      tex->pitch = align(tex->b.b.width0, align_w);
-   }
-
-   if (tex->b.b.last_level != 0) {
-      GLuint mip1_width;
-
-      if (tex->compressed) {
-        mip1_width = (align(u_minify(tex->b.b.width0, 1), align_w) +
-                      align(u_minify(tex->b.b.width0, 2), align_w));
-      } else {
-        mip1_width = (align(u_minify(tex->b.b.width0, 1), align_w) +
-                      u_minify(tex->b.b.width0, 2));
-      }
-
-      if (mip1_width > tex->pitch) {
-        tex->pitch = mip1_width;
-      }
-   }
-
-   tex->pitch = brw_tex_pitch_align(tex, tex->pitch);
-
-   if (tex->compressed) {
-      qpitch = ((y_pitch + 
-                align(u_minify(y_pitch, 1), align_h) +
-                11 * align_h) / 4) * tex->pitch * tex->cpp;
-
-      tex->total_height = ((y_pitch + 
-                           align(u_minify(y_pitch, 1), align_h) + 
-                           11 * align_h) / 4) * 6;
-   } else {
-      qpitch = (y_pitch + 
-               align(u_minify(y_pitch, 1), align_h) + 
-               11 * align_h) * tex->pitch * tex->cpp;
-
-      tex->total_height = (y_pitch +
-                          align(u_minify(y_pitch, 1), align_h) +
-                          11 * align_h) * 6;
-   }
-
-   for (level = 0; level <= tex->b.b.last_level; level++) {
-      GLuint img_height;
-      GLuint nr_images = 6;
-      GLuint q = 0;
-
-      brw_tex_set_level_info(tex, level, nr_images, x, y, width, height, 1);
-
-      for (q = 0; q < nr_images; q++)
-        brw_tex_set_image_offset(tex, level, q, x, y, q * qpitch);
-
-      if (tex->compressed)
-        img_height = MAX2(1, height/4);
-      else
-        img_height = align(height, align_h);
-
-      if (level == 1) {
-        x += align(width, align_w);
-      }
-      else {
-        y += img_height;
-      }
-
-      width  = u_minify(width, 1);
-      height = u_minify(height, 1);
-   }
-
-   return TRUE;
-}
-
-
-static boolean
-brw_layout_3d_cube( struct brw_texture *tex )
-{
-   GLuint width  = tex->b.b.width0;
-   GLuint height = tex->b.b.height0;
-   GLuint depth = tex->b.b.depth0;
-   GLuint pack_x_pitch, pack_x_nr;
-   GLuint pack_y_pitch;
-   GLuint level;
-   GLuint align_h = 2;
-   GLuint align_w = 4;
-
-   tex->total_height = 0;
-   brw_tex_alignment_unit(tex->b.b.format, &align_w, &align_h);
-
-   if (tex->compressed) {
-      tex->pitch = align(width, align_w);
-      pack_y_pitch = (height + 3) / 4;
-   } else {
-      tex->pitch = brw_tex_pitch_align(tex, tex->b.b.width0);
-      pack_y_pitch = align(tex->b.b.height0, align_h);
-   }
-
-   pack_x_pitch = width;
-   pack_x_nr = 1;
-
-   for (level = 0 ; level <= tex->b.b.last_level ; level++) {
-      GLuint nr_images = tex->b.b.target == PIPE_TEXTURE_3D ? depth : 6;
-      GLint x = 0;
-      GLint y = 0;
-      GLint q, j;
-
-      brw_tex_set_level_info(tex, level, nr_images,
-                                  0, tex->total_height,
-                                  width, height, depth);
-
-      for (q = 0; q < nr_images;) {
-        for (j = 0; j < pack_x_nr && q < nr_images; j++, q++) {
-           brw_tex_set_image_offset(tex, level, q, x, y, 0);
-           x += pack_x_pitch;
-        }
-
-        x = 0;
-        y += pack_y_pitch;
-      }
-
-
-      tex->total_height += y;
-      width  = u_minify(width, 1);
-      height = u_minify(height, 1);
-      depth  = u_minify(depth, 1);
-
-      if (tex->compressed) {
-        pack_y_pitch = (height + 3) / 4;
-
-        if (pack_x_pitch > align(width, align_w)) {
-           pack_x_pitch = align(width, align_w);
-           pack_x_nr <<= 1;
-        }
-      } else {
-        if (pack_x_pitch > 4) {
-           pack_x_pitch >>= 1;
-           pack_x_nr <<= 1;
-           assert(pack_x_pitch * pack_x_nr <= tex->pitch);
-        }
-
-        if (pack_y_pitch > 2) {
-           pack_y_pitch >>= 1;
-           pack_y_pitch = align(pack_y_pitch, align_h);
-        }
-      }
-   }
-
-   /* The 965's sampler lays cachelines out according to how accesses
-    * in the texture surfaces run, so they may be "vertical" through
-    * memory.  As a result, the docs say in Surface Padding Requirements:
-    * Sampling Engine Surfaces that two extra rows of padding are required.
-    */
-   if (tex->b.b.target == PIPE_TEXTURE_CUBE)
-      tex->total_height += 2;
-
-   return TRUE;
-}
-
-
-
-GLboolean brw_texture_layout(struct brw_screen *brw_screen,
-                            struct brw_texture *tex )
-{
-   switch (tex->b.b.target) {
-   case PIPE_TEXTURE_CUBE:
-      if (brw_screen->gen == 5)
-        brw_layout_cubemap_idgng( tex );
-      else
-        brw_layout_3d_cube( tex );
-      break;
-           
-   case PIPE_TEXTURE_3D:
-      brw_layout_3d_cube( tex );
-      break;
-
-   default:
-      brw_layout_2d( tex );
-      break;
-   }
-
-   if (BRW_DEBUG & DEBUG_TEXTURE)
-      debug_printf("%s: %dx%dx%d - sz 0x%x\n", __FUNCTION__,
-                  tex->pitch,
-                  tex->total_height,
-                  tex->cpp,
-                  tex->pitch * tex->total_height * tex->cpp );
-
-   return GL_TRUE;
-}
diff --git a/src/gallium/drivers/i965/brw_screen.c b/src/gallium/drivers/i965/brw_screen.c
deleted file mode 100644 (file)
index b382e70..0000000
+++ /dev/null
@@ -1,460 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-
-#include "util/u_format.h"
-#include "util/u_inlines.h"
-#include "util/u_memory.h"
-#include "util/u_string.h"
-
-#include "brw_reg.h"
-#include "brw_context.h"
-#include "brw_screen.h"
-#include "brw_winsys.h"
-#include "brw_public.h"
-#include "brw_debug.h"
-#include "brw_resource.h"
-
-#ifdef DEBUG
-static const struct debug_named_value debug_names[] = {
-   { "tex",   DEBUG_TEXTURE, NULL },
-   { "state", DEBUG_STATE, NULL },
-   { "ioctl", DEBUG_IOCTL, NULL },
-   { "blit",  DEBUG_BLIT, NULL },
-   { "curbe", DEBUG_CURBE, NULL },
-   { "fall",  DEBUG_FALLBACKS, NULL },
-   { "verb",  DEBUG_VERBOSE, NULL },
-   { "bat",   DEBUG_BATCH, NULL },
-   { "pix",   DEBUG_PIXEL, NULL },
-   { "wins",  DEBUG_WINSYS, NULL },
-   { "min",   DEBUG_MIN_URB, NULL },
-   { "dis",   DEBUG_DISASSEM, NULL },
-   { "sync",  DEBUG_SYNC, NULL },
-   { "prim",  DEBUG_PRIMS, NULL },
-   { "vert",  DEBUG_VERTS, NULL },
-   { "dma",   DEBUG_DMA, NULL },
-   { "san",   DEBUG_SANITY, NULL },
-   { "sleep", DEBUG_SLEEP, NULL },
-   { "stats", DEBUG_STATS, NULL },
-   { "sing",  DEBUG_SINGLE_THREAD, NULL },
-   { "thre",  DEBUG_SINGLE_THREAD, NULL },
-   { "wm",    DEBUG_WM, NULL },
-   { "urb",   DEBUG_URB, NULL },
-   { "vs",    DEBUG_VS, NULL },
-   DEBUG_NAMED_VALUE_END
-};
-
-static const struct debug_named_value dump_names[] = {
-   { "asm",   DUMP_ASM, NULL },
-   { "state", DUMP_STATE, NULL },
-   { "batch", DUMP_BATCH, NULL },
-   DEBUG_NAMED_VALUE_END
-};
-
-int BRW_DEBUG = 0;
-int BRW_DUMP = 0;
-
-#endif
-
-
-/*
- * Probe functions
- */
-
-
-static const char *
-brw_get_vendor(struct pipe_screen *screen)
-{
-   return "VMware, Inc.";
-}
-
-static const char *
-brw_get_name(struct pipe_screen *screen)
-{
-   static char buffer[128];
-   const char *chipset;
-
-   switch (brw_screen(screen)->pci_id) {
-   case PCI_CHIP_I965_G:
-      chipset = "I965_G";
-      break;
-   case PCI_CHIP_I965_Q:
-      chipset = "I965_Q";
-      break;
-   case PCI_CHIP_I965_G_1:
-      chipset = "I965_G_1";
-      break;
-   case PCI_CHIP_I946_GZ:
-      chipset = "I946_GZ";
-      break;
-   case PCI_CHIP_I965_GM:
-      chipset = "I965_GM";
-      break;
-   case PCI_CHIP_I965_GME:
-      chipset = "I965_GME";
-      break;
-   case PCI_CHIP_GM45_GM:
-      chipset = "GM45_GM";
-      break;
-   case PCI_CHIP_IGD_E_G:
-      chipset = "IGD_E_G";
-      break;
-   case PCI_CHIP_Q45_G:
-      chipset = "Q45_G";
-      break;
-   case PCI_CHIP_G45_G:
-      chipset = "G45_G";
-      break;
-   case PCI_CHIP_G41_G:
-      chipset = "G41_G";
-      break;
-   case PCI_CHIP_B43_G:
-      chipset = "B43_G";
-      break;
-   case PCI_CHIP_ILD_G:
-      chipset = "ILD_G";
-      break;
-   case PCI_CHIP_ILM_G:
-      chipset = "ILM_G";
-      break;
-   default:
-      chipset = "unknown";
-      break;
-   }
-
-   util_snprintf(buffer, sizeof(buffer), "i965 (chipset: %s)", chipset);
-   return buffer;
-}
-
-static int
-brw_get_param(struct pipe_screen *screen, enum pipe_cap param)
-{
-   switch (param) {
-   case PIPE_CAP_MAX_COMBINED_SAMPLERS:
-      return 16; /* XXX correct? */
-   case PIPE_CAP_NPOT_TEXTURES:
-      return 1;
-   case PIPE_CAP_TWO_SIDED_STENCIL:
-      return 1;
-   case PIPE_CAP_ANISOTROPIC_FILTER:
-      return 0;
-   case PIPE_CAP_POINT_SPRITE:
-      return 0;
-   case PIPE_CAP_MAX_RENDER_TARGETS:
-      return 1;
-   case PIPE_CAP_OCCLUSION_QUERY:
-      return 0;
-   case PIPE_CAP_TIMER_QUERY:
-      return 0;
-   case PIPE_CAP_TEXTURE_SHADOW_MAP:
-      return 1;
-   case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
-      return BRW_MAX_TEXTURE_2D_LEVELS;
-   case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
-      return BRW_MAX_TEXTURE_3D_LEVELS;
-   case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
-      return BRW_MAX_TEXTURE_2D_LEVELS;
-   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
-   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
-      return 1;
-   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
-   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
-      return 0;
-   case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
-      /* disable for now */
-      return 0;
-   default:
-      return 0;
-   }
-}
-
-static int
-brw_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_shader_cap param)
-{
-   switch(shader) {
-   case PIPE_SHADER_VERTEX:
-   case PIPE_SHADER_FRAGMENT:
-   case PIPE_SHADER_GEOMETRY:
-      break;
-   default:
-      return 0;
-   }
-
-   /* XXX: these are just shader model 4.0 values, fix this! */
-   switch(param) {
-      case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
-         return 65536;
-      case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:
-         return 65536;
-      case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:
-         return 65536;
-      case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:
-         return 65536;
-      case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
-         return 65536;
-      case PIPE_SHADER_CAP_MAX_INPUTS:
-         return 32;
-      case PIPE_SHADER_CAP_MAX_CONSTS:
-         return 4096;
-      case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
-         return PIPE_MAX_CONSTANT_BUFFERS;
-      case PIPE_SHADER_CAP_MAX_TEMPS:
-         return 4096;
-      case PIPE_SHADER_CAP_MAX_ADDRS:
-         return 0;
-      case PIPE_SHADER_CAP_MAX_PREDS:
-         return 0;
-      case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
-         return 1;
-      case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
-      case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
-      case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
-      case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
-          return 1;
-      case PIPE_SHADER_CAP_SUBROUTINES:
-          return 1;
-      case PIPE_SHADER_CAP_INTEGERS:
-         return 0;
-      case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
-         return 8;
-      default:
-         assert(0);
-         return 0;
-      }
-}
-
-static float
-brw_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
-{
-   switch (param) {
-   case PIPE_CAPF_MAX_LINE_WIDTH:
-      /* fall-through */
-   case PIPE_CAPF_MAX_LINE_WIDTH_AA:
-      return 7.5;
-
-   case PIPE_CAPF_MAX_POINT_WIDTH:
-      /* fall-through */
-   case PIPE_CAPF_MAX_POINT_WIDTH_AA:
-      return 255.0;
-
-   case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
-      return 4.0;
-
-   case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
-      return 16.0;
-
-   default:
-      return 0;
-   }
-}
-
-static boolean
-brw_is_format_supported(struct pipe_screen *screen,
-                         enum pipe_format format,
-                         enum pipe_texture_target target,
-                         unsigned sample_count,
-                         unsigned tex_usage)
-{
-   static const enum pipe_format tex_supported[] = {
-      PIPE_FORMAT_L8_UNORM,
-      PIPE_FORMAT_I8_UNORM,
-      PIPE_FORMAT_A8_UNORM,
-      PIPE_FORMAT_L16_UNORM,
-      /*PIPE_FORMAT_I16_UNORM,*/
-      /*PIPE_FORMAT_A16_UNORM,*/
-      PIPE_FORMAT_L8A8_UNORM,
-      PIPE_FORMAT_B5G6R5_UNORM,
-      PIPE_FORMAT_B5G5R5A1_UNORM,
-      PIPE_FORMAT_B4G4R4A4_UNORM,
-      PIPE_FORMAT_B8G8R8X8_UNORM,
-      PIPE_FORMAT_B8G8R8A8_UNORM,
-      /* video */
-      PIPE_FORMAT_UYVY,
-      PIPE_FORMAT_YUYV,
-      /* compressed */
-      /*PIPE_FORMAT_FXT1_RGBA,*/
-      PIPE_FORMAT_DXT1_RGB,
-      PIPE_FORMAT_DXT1_RGBA,
-      PIPE_FORMAT_DXT3_RGBA,
-      PIPE_FORMAT_DXT5_RGBA,
-      /* sRGB */
-      PIPE_FORMAT_A8B8G8R8_SRGB,
-      PIPE_FORMAT_L8A8_SRGB,
-      PIPE_FORMAT_L8_SRGB,
-      PIPE_FORMAT_DXT1_SRGB,
-      /* depth */
-      PIPE_FORMAT_Z32_FLOAT,
-      PIPE_FORMAT_Z24X8_UNORM,
-      PIPE_FORMAT_Z24_UNORM_S8_UINT,
-      PIPE_FORMAT_Z16_UNORM,
-      /* signed */
-      PIPE_FORMAT_R8G8_SNORM,
-      PIPE_FORMAT_R8G8B8A8_SNORM,
-      PIPE_FORMAT_NONE  /* list terminator */
-   };
-   static const enum pipe_format render_supported[] = {
-      PIPE_FORMAT_B8G8R8X8_UNORM,
-      PIPE_FORMAT_B8G8R8A8_UNORM,
-      PIPE_FORMAT_B5G6R5_UNORM,
-      PIPE_FORMAT_NONE  /* list terminator */
-   };
-   static const enum pipe_format depth_supported[] = {
-      PIPE_FORMAT_Z32_FLOAT,
-      PIPE_FORMAT_Z24X8_UNORM,
-      PIPE_FORMAT_Z24_UNORM_S8_UINT,
-      PIPE_FORMAT_Z16_UNORM,
-      PIPE_FORMAT_NONE  /* list terminator */
-   };
-   const enum pipe_format *list;
-   uint i;
-
-   if (!util_format_is_supported(format, tex_usage))
-      return FALSE;
-
-   if (sample_count > 1)
-      return FALSE;
-
-   if (tex_usage & PIPE_BIND_DEPTH_STENCIL)
-      list = depth_supported;
-   else if (tex_usage & PIPE_BIND_RENDER_TARGET)
-      list = render_supported;
-   else
-      list = tex_supported;
-
-   for (i = 0; list[i] != PIPE_FORMAT_NONE; i++) {
-      if (list[i] == format)
-         return TRUE;
-   }
-
-   return FALSE;
-}
-
-
-/*
- * Fence functions
- */
-
-
-static void
-brw_fence_reference(struct pipe_screen *screen,
-                     struct pipe_fence_handle **ptr,
-                     struct pipe_fence_handle *fence)
-{
-}
-
-static boolean
-brw_fence_signalled(struct pipe_screen *screen,
-                     struct pipe_fence_handle *fence)
-{
-   return TRUE;
-}
-
-static boolean
-brw_fence_finish(struct pipe_screen *screen,
-                 struct pipe_fence_handle *fence,
-                 uint64_t timeout)
-{
-   return TRUE;
-}
-
-
-/*
- * Generic functions
- */
-
-
-static void
-brw_destroy_screen(struct pipe_screen *screen)
-{
-   struct brw_screen *bscreen = brw_screen(screen);
-
-   if (bscreen->sws)
-      bscreen->sws->destroy(bscreen->sws);
-
-   FREE(bscreen);
-}
-
-/**
- * Create a new brw_screen object
- */
-struct pipe_screen *
-brw_screen_create(struct brw_winsys_screen *sws)
-{
-   struct brw_screen *bscreen;
-#ifdef DEBUG
-   BRW_DEBUG = debug_get_flags_option("BRW_DEBUG", debug_names, 0);
-   BRW_DEBUG |= debug_get_flags_option("INTEL_DEBUG", debug_names, 0);
-   BRW_DEBUG |= DEBUG_STATS | DEBUG_MIN_URB | DEBUG_WM;
-
-   BRW_DUMP = debug_get_flags_option("BRW_DUMP", dump_names, 0);
-#endif
-
-   bscreen = CALLOC_STRUCT(brw_screen);
-   if (!bscreen)
-      return NULL;
-
-   bscreen->pci_id = sws->pci_id;
-   if (IS_GEN6(sws->pci_id)) {
-       bscreen->gen = 6;
-       bscreen->needs_ff_sync = TRUE;
-   } else if (IS_GEN5(sws->pci_id)) {
-       bscreen->gen = 5;
-       bscreen->needs_ff_sync = TRUE;
-   } else if (IS_965(sws->pci_id)) {
-       bscreen->gen = 4;
-       if (IS_G4X(sws->pci_id)) {
-          bscreen->is_g4x = true;
-       }
-   } else {
-      debug_printf("%s: unknown pci id 0x%x, cannot create screen\n", 
-                   __FUNCTION__, sws->pci_id);
-      free(bscreen);
-      return NULL;
-   }
-
-   sws->gen = bscreen->gen;
-   bscreen->sws = sws;
-   bscreen->base.winsys = NULL;
-   bscreen->base.destroy = brw_destroy_screen;
-   bscreen->base.get_name = brw_get_name;
-   bscreen->base.get_vendor = brw_get_vendor;
-   bscreen->base.get_param = brw_get_param;
-   bscreen->base.get_shader_param = brw_get_shader_param;
-   bscreen->base.get_paramf = brw_get_paramf;
-   bscreen->base.is_format_supported = brw_is_format_supported;
-   bscreen->base.context_create = brw_create_context;
-   bscreen->base.fence_reference = brw_fence_reference;
-   bscreen->base.fence_signalled = brw_fence_signalled;
-   bscreen->base.fence_finish = brw_fence_finish;
-
-   brw_init_screen_resource_functions(bscreen);
-
-   bscreen->no_tiling = debug_get_option("BRW_NO_TILING", FALSE) != NULL;
-   
-   
-   return &bscreen->base;
-}
diff --git a/src/gallium/drivers/i965/brw_screen.h b/src/gallium/drivers/i965/brw_screen.h
deleted file mode 100644 (file)
index a62e1af..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-#ifndef BRW_SCREEN_H
-#define BRW_SCREEN_H
-
-#include "pipe/p_state.h"
-#include "pipe/p_screen.h"
-
-#include "brw_reg.h"
-#include "brw_structs.h"
-
-struct brw_winsys_screen;
-
-
-/**
- * Subclass of pipe_screen
- */
-struct brw_screen
-{
-   struct pipe_screen base;
-   int gen;
-   boolean has_negative_rhw_bug;
-   boolean needs_ff_sync;
-   boolean is_g4x;
-   int pci_id;
-   struct brw_winsys_screen *sws;
-   boolean no_tiling;
-};
-
-
-
-union brw_surface_id {
-   struct {
-      unsigned level:16;
-      unsigned layer:16;
-   } bits;
-   unsigned value;
-};
-
-
-struct brw_surface
-{
-   struct pipe_surface base;
-
-   union brw_surface_id id;
-   unsigned offset;
-   unsigned cpp;
-   unsigned pitch;
-   unsigned draw_offset;
-   unsigned tiling;
-
-   struct brw_surface_state ss;
-   struct brw_winsys_buffer *bo;
-   struct brw_surface *next, *prev;
-};
-
-
-
-/*
- * Cast wrappers
- */
-static INLINE struct brw_screen *
-brw_screen(struct pipe_screen *pscreen)
-{
-   return (struct brw_screen *) pscreen;
-}
-
-
-static INLINE struct brw_surface *
-brw_surface(struct pipe_surface *surface)
-{
-   return (struct brw_surface *)surface;
-}
-
-unsigned
-brw_surface_pitch( const struct pipe_surface *surface );
-
-
-#endif /* BRW_SCREEN_H */
diff --git a/src/gallium/drivers/i965/brw_sf.c b/src/gallium/drivers/i965/brw_sf.c
deleted file mode 100644 (file)
index 5abf384..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-  
-#include "pipe/p_state.h"
-
-#include "brw_batchbuffer.h"
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_pipe_rast.h"
-#include "brw_eu.h"
-#include "brw_sf.h"
-#include "brw_state.h"
-
-static enum pipe_error compile_sf_prog( struct brw_context *brw,
-                                        struct brw_sf_prog_key *key,
-                                        struct brw_winsys_buffer **bo_out )
-{
-   enum pipe_error ret;
-   struct brw_sf_compile c;
-   const GLuint *program;
-   GLuint program_size;
-
-   memset(&c, 0, sizeof(c));
-
-   /* Begin the compilation:
-    */
-   brw_init_compile(brw, &c.func);
-
-   c.key = *key;
-   c.nr_attrs = c.key.nr_attrs;
-   c.nr_attr_regs = (c.nr_attrs+1)/2;
-   c.nr_setup_attrs = c.key.nr_attrs;
-   c.nr_setup_regs = (c.nr_setup_attrs+1)/2;
-
-   c.prog_data.urb_read_length = c.nr_attr_regs;
-   c.prog_data.urb_entry_size = c.nr_setup_regs * 2;
-
-   /* Special case when there are no attributes to setup.
-    *
-    * XXX: should be able to set nr_setup_attrs to nr_attrs-1 -- but
-    * breaks vp-tris.c
-    */
-   if (c.nr_attrs - 1 == 0) {
-      c.nr_verts = 0;
-      brw_emit_null_setup( &c );
-   }
-   else {
-      /* Which primitive?  Or all three? 
-       */
-      switch (key->primitive) {
-      case SF_TRIANGLES:
-         c.nr_verts = 3;
-         brw_emit_tri_setup( &c, GL_TRUE );
-         break;
-      case SF_LINES:
-         c.nr_verts = 2;
-         brw_emit_line_setup( &c, GL_TRUE );
-         break;
-      case SF_POINTS:
-         c.nr_verts = 1;
-         if (key->do_point_sprite)
-            brw_emit_point_sprite_setup( &c, GL_TRUE );
-         else
-            brw_emit_point_setup( &c, GL_TRUE );
-         break;
-      case SF_UNFILLED_TRIS:
-         c.nr_verts = 3;
-         brw_emit_anyprim_setup( &c );
-         break;
-      default:
-         assert(0);
-         return PIPE_ERROR_BAD_INPUT;
-      }
-   }
-
-   /* get the program
-    */
-   ret = brw_get_program(&c.func, &program, &program_size);
-   if (ret)
-      return ret;
-
-   /* Upload
-    */
-   ret = brw_upload_cache( &brw->cache, BRW_SF_PROG,
-                           &c.key, sizeof(c.key),
-                           NULL, 0,
-                           program, program_size,
-                           &c.prog_data,
-                           &brw->sf.prog_data,
-                           bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-/* Calculate interpolants for triangle and line rasterization.
- */
-static enum pipe_error upload_sf_prog(struct brw_context *brw)
-{
-   const struct brw_fs_signature *sig = &brw->curr.fragment_shader->signature;
-   const struct pipe_rasterizer_state *rast = &brw->curr.rast->templ;
-   struct brw_sf_prog_key key;
-   enum pipe_error ret;
-   unsigned i;
-
-   memset(&key, 0, sizeof(key));
-
-   /* Populate the key, noting state dependencies:
-    */
-
-   /* XXX: Add one to account for the position input.
-    */
-   /* PIPE_NEW_FRAGMENT_SIGNATURE */
-   key.nr_attrs = sig->nr_inputs + 1;
-
-
-   /* XXX: why is position required to be linear?  why do we care
-    * about it at all?
-    */
-   key.linear_attrs = 1;        /* position -- but why? */
-
-   for (i = 0; i < sig->nr_inputs; i++) {
-      switch (sig->input[i].interp) {
-      case TGSI_INTERPOLATE_CONSTANT:
-         break;
-      case TGSI_INTERPOLATE_LINEAR:
-         key.linear_attrs |= 1 << (i+1);
-         break;
-      case TGSI_INTERPOLATE_PERSPECTIVE:
-         key.persp_attrs |= 1 << (i+1);
-         break;
-      }
-   }
-
-   /* BRW_NEW_REDUCED_PRIMITIVE */
-   switch (brw->reduced_primitive) {
-   case PIPE_PRIM_TRIANGLES: 
-      /* PIPE_NEW_RAST
-       */
-      if (rast->fill_front != PIPE_POLYGON_MODE_FILL ||
-         rast->fill_back != PIPE_POLYGON_MODE_FILL)
-        key.primitive = SF_UNFILLED_TRIS;
-      else
-        key.primitive = SF_TRIANGLES;
-      break;
-   case PIPE_PRIM_LINES: 
-      key.primitive = SF_LINES; 
-      break;
-   case PIPE_PRIM_POINTS: 
-      key.primitive = SF_POINTS; 
-      break;
-   }
-
-   key.do_point_sprite = rast->sprite_coord_enable ? 1 : 0;
-   key.sprite_origin_lower_left = (rast->sprite_coord_mode == PIPE_SPRITE_COORD_LOWER_LEFT);
-   key.point_coord_replace_attrs = rast->sprite_coord_enable;
-   key.do_flat_shading = rast->flatshade;
-   key.do_twoside_color = rast->light_twoside;
-
-   if (key.do_twoside_color) {
-      key.frontface_ccw = rast->front_ccw;
-   }
-
-   if (brw_search_cache(&brw->cache, BRW_SF_PROG,
-                        &key, sizeof(key),
-                        NULL, 0,
-                        &brw->sf.prog_data,
-                        &brw->sf.prog_bo))
-      return PIPE_OK;
-
-   ret = compile_sf_prog( brw, &key, &brw->sf.prog_bo );
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-const struct brw_tracked_state brw_sf_prog = {
-   .dirty = {
-      .mesa  = (PIPE_NEW_RAST | PIPE_NEW_FRAGMENT_SIGNATURE),
-      .brw   = (BRW_NEW_REDUCED_PRIMITIVE),
-      .cache = 0
-   },
-   .prepare = upload_sf_prog
-};
-
diff --git a/src/gallium/drivers/i965/brw_sf.h b/src/gallium/drivers/i965/brw_sf.h
deleted file mode 100644 (file)
index a895c7d..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-   
-
-#ifndef BRW_SF_H
-#define BRW_SF_H
-
-
-#include "brw_context.h"
-#include "brw_eu.h"
-
-
-#define SF_POINTS    0
-#define SF_LINES     1
-#define SF_TRIANGLES 2
-#define SF_UNFILLED_TRIS   3
-
-struct brw_sf_prog_key {
-
-   /* Bitmask of linear and perspective interpolated inputs, 0..nr
-    */
-   GLuint persp_attrs:32;
-   GLuint linear_attrs:32;
-   GLuint point_coord_replace_attrs:32;
-
-   GLuint nr_attrs:8;
-   GLuint primitive:2;
-   GLuint do_twoside_color:1;
-   GLuint do_flat_shading:1;
-   GLuint frontface_ccw:1;
-   GLuint do_point_sprite:1;
-   GLuint sprite_origin_lower_left:1;
-   GLuint pad:17;
-
-   GLuint attr_col0:8;
-   GLuint attr_col1:8;
-   GLuint attr_bfc0:8;
-   GLuint attr_bfc1:8;
-};
-
-struct brw_sf_point_tex {
-   GLboolean CoordReplace;     
-};
-
-struct brw_sf_compile {
-   struct brw_compile func;
-   struct brw_sf_prog_key key;
-   struct brw_sf_prog_data prog_data;
-   
-   struct brw_reg pv;
-   struct brw_reg det;
-   struct brw_reg dx0;
-   struct brw_reg dx2;
-   struct brw_reg dy0;
-   struct brw_reg dy2;
-
-   /* z and 1/w passed in seperately:
-    */
-   struct brw_reg z[3];
-   struct brw_reg inv_w[3];
-   
-   /* The vertices:
-    */
-   struct brw_reg vert[3];
-
-    /* Temporaries, allocated after last vertex reg.
-    */
-   struct brw_reg inv_det;
-   struct brw_reg a1_sub_a0;
-   struct brw_reg a2_sub_a0;
-   struct brw_reg tmp;
-
-   struct brw_reg m1Cx;
-   struct brw_reg m2Cy;
-   struct brw_reg m3C0;
-
-   GLuint nr_verts;
-   GLuint nr_attrs;
-   GLuint nr_attr_regs;
-   GLuint nr_setup_attrs;
-   GLuint nr_setup_regs;
-
-   GLuint point_coord_replace_mask;
-};
-
-void brw_emit_null_setup( struct brw_sf_compile *c );
-void brw_emit_tri_setup( struct brw_sf_compile *c, GLboolean allocate );
-void brw_emit_line_setup( struct brw_sf_compile *c, GLboolean allocate );
-void brw_emit_point_setup( struct brw_sf_compile *c, GLboolean allocate );
-void brw_emit_point_sprite_setup( struct brw_sf_compile *c, GLboolean allocate );
-void brw_emit_anyprim_setup( struct brw_sf_compile *c );
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_sf_emit.c b/src/gallium/drivers/i965/brw_sf_emit.c
deleted file mode 100644 (file)
index 901c334..0000000
+++ /dev/null
@@ -1,764 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-   
-
-#include "brw_batchbuffer.h"
-
-#include "brw_defines.h"
-#include "brw_context.h"
-#include "brw_eu.h"
-#include "brw_sf.h"
-
-
-static struct brw_reg get_vert_attr(struct brw_sf_compile *c,
-                                   struct brw_reg vert,
-                                   GLuint attr)
-{
-   GLuint off = attr / 2;
-   GLuint sub = attr % 2;
-
-   return brw_vec4_grf(vert.nr + off, sub * 4);
-}
-
-
-/*********************************************************************** 
- * Twoside lighting
- */
-static void copy_bfc( struct brw_sf_compile *c,
-                     struct brw_reg vert )
-{
-   struct brw_compile *p = &c->func;
-
-   if (c->key.attr_col0 && c->key.attr_bfc0)
-      brw_MOV(p, 
-             get_vert_attr(c, vert, c->key.attr_col0), 
-             get_vert_attr(c, vert, c->key.attr_bfc0));
-
-   if (c->key.attr_col1 && c->key.attr_bfc1)
-      brw_MOV(p, 
-             get_vert_attr(c, vert, c->key.attr_col1), 
-             get_vert_attr(c, vert, c->key.attr_bfc1));
-}
-
-
-static void do_twoside_color( struct brw_sf_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *if_insn;
-   GLuint backface_conditional = c->key.frontface_ccw ? BRW_CONDITIONAL_G : BRW_CONDITIONAL_L;
-
-   /* Already done in clip program:
-    */
-   if (c->key.primitive == SF_UNFILLED_TRIS)
-      return;
-
-   /* XXX: What happens if BFC isn't present?  This could only happen
-    * for user-supplied vertex programs, as t_vp_build.c always does
-    * the right thing.
-    */
-   if (!(c->key.attr_col0 && c->key.attr_bfc0) &&
-       !(c->key.attr_col1 && c->key.attr_bfc1))
-      return;
-   
-   /* Need to use BRW_EXECUTE_4 and also do an 4-wide compare in order
-    * to get all channels active inside the IF.  In the clipping code
-    * we run with NoMask, so it's not an option and we can use
-    * BRW_EXECUTE_1 for all comparisions.
-    */
-   brw_push_insn_state(p);
-   brw_CMP(p, vec4(brw_null_reg()), backface_conditional, c->det, brw_imm_f(0));
-   if_insn = brw_IF(p, BRW_EXECUTE_4); 
-   {
-      switch (c->nr_verts) {
-      case 3: copy_bfc(c, c->vert[2]);
-      case 2: copy_bfc(c, c->vert[1]);
-      case 1: copy_bfc(c, c->vert[0]);
-      }
-   }
-   brw_ENDIF(p, if_insn);
-   brw_pop_insn_state(p);
-}
-
-
-
-/***********************************************************************
- * Flat shading
- */
-
-#define VERT_RESULT_COLOR_BITS ((1<<VERT_RESULT_COL0) | \
-                                 (1<<VERT_RESULT_COL1))
-
-static void copy_colors( struct brw_sf_compile *c,
-                    struct brw_reg dst,
-                    struct brw_reg src)
-{
-   struct brw_compile *p = &c->func;
-
-   if (c->key.attr_col0)
-      brw_MOV(p, 
-             get_vert_attr(c, dst, c->key.attr_col0), 
-             get_vert_attr(c, src, c->key.attr_col0));
-
-   if (c->key.attr_col1)
-      brw_MOV(p, 
-             get_vert_attr(c, dst, c->key.attr_col1), 
-             get_vert_attr(c, src, c->key.attr_col1));
-
-}
-
-
-
-/* Need to use a computed jump to copy flatshaded attributes as the
- * vertices are ordered according to y-coordinate before reaching this
- * point, so the PV could be anywhere.
- */
-static void do_flatshade_triangle( struct brw_sf_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg ip = brw_ip_reg();
-   GLuint jmpi = 1;
-   GLuint nr = 0;
-
-   if (c->key.attr_col0)
-      nr++;
-
-   if (c->key.attr_col1)
-      nr++;
-
-   if (nr == 0)
-      return;
-
-   /* Already done in clip program:
-    */
-   if (c->key.primitive == SF_UNFILLED_TRIS)
-      return;
-
-   if (p->brw->gen == 5)
-       jmpi = 2;
-
-   brw_push_insn_state(p);
-   
-   brw_MUL(p, c->pv, c->pv, brw_imm_d(jmpi*(nr*2+1)));
-   brw_JMPI(p, ip, ip, c->pv);
-
-   copy_colors(c, c->vert[1], c->vert[0]);
-   copy_colors(c, c->vert[2], c->vert[0]);
-   brw_JMPI(p, ip, ip, brw_imm_d(jmpi*(nr*4+1)));
-
-   copy_colors(c, c->vert[0], c->vert[1]);
-   copy_colors(c, c->vert[2], c->vert[1]);
-   brw_JMPI(p, ip, ip, brw_imm_d(jmpi*nr*2));
-
-   copy_colors(c, c->vert[0], c->vert[2]);
-   copy_colors(c, c->vert[1], c->vert[2]);
-
-   brw_pop_insn_state(p);
-}
-       
-
-static void do_flatshade_line( struct brw_sf_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg ip = brw_ip_reg();
-   GLuint jmpi = 1;
-   GLuint nr = 0;
-
-   if (c->key.attr_col0)
-      nr++;
-
-   if (c->key.attr_col1)
-      nr++;
-
-   if (nr == 0)
-      return;
-
-   /* Already done in clip program: 
-    */
-   if (c->key.primitive == SF_UNFILLED_TRIS)
-      return;
-
-   if (p->brw->gen == 5)
-       jmpi = 2;
-
-   brw_push_insn_state(p);
-   
-   brw_MUL(p, c->pv, c->pv, brw_imm_d(jmpi*(nr+1)));
-   brw_JMPI(p, ip, ip, c->pv);
-   copy_colors(c, c->vert[1], c->vert[0]);
-
-   brw_JMPI(p, ip, ip, brw_imm_ud(jmpi*nr));
-   copy_colors(c, c->vert[0], c->vert[1]);
-
-   brw_pop_insn_state(p);
-}
-
-       
-
-/***********************************************************************
- * Triangle setup.
- */
-
-
-static void alloc_regs( struct brw_sf_compile *c )
-{
-   GLuint reg, i;
-
-   /* Values computed by fixed function unit:
-    */
-   c->pv  = retype(brw_vec1_grf(1, 1), BRW_REGISTER_TYPE_D);
-   c->det = brw_vec1_grf(1, 2);
-   c->dx0 = brw_vec1_grf(1, 3);
-   c->dx2 = brw_vec1_grf(1, 4);
-   c->dy0 = brw_vec1_grf(1, 5);
-   c->dy2 = brw_vec1_grf(1, 6);
-
-   /* z and 1/w passed in seperately:
-    */
-   c->z[0]     = brw_vec1_grf(2, 0);
-   c->inv_w[0] = brw_vec1_grf(2, 1);
-   c->z[1]     = brw_vec1_grf(2, 2);
-   c->inv_w[1] = brw_vec1_grf(2, 3);
-   c->z[2]     = brw_vec1_grf(2, 4);
-   c->inv_w[2] = brw_vec1_grf(2, 5);
-   
-   /* The vertices:
-    */
-   reg = 3;
-   for (i = 0; i < c->nr_verts; i++) {
-      c->vert[i] = brw_vec8_grf(reg, 0);
-      reg += c->nr_attr_regs;
-   }
-
-   /* Temporaries, allocated after last vertex reg.
-    */
-   c->inv_det = brw_vec1_grf(reg, 0);  reg++;
-   c->a1_sub_a0 = brw_vec8_grf(reg, 0);  reg++;
-   c->a2_sub_a0 = brw_vec8_grf(reg, 0);  reg++;
-   c->tmp = brw_vec8_grf(reg, 0);  reg++;
-
-   /* Note grf allocation:
-    */
-   c->prog_data.total_grf = reg;
-   
-
-   /* Outputs of this program - interpolation coefficients for
-    * rasterization:
-    */
-   c->m1Cx = brw_vec8_reg(BRW_MESSAGE_REGISTER_FILE, 1, 0);
-   c->m2Cy = brw_vec8_reg(BRW_MESSAGE_REGISTER_FILE, 2, 0);
-   c->m3C0 = brw_vec8_reg(BRW_MESSAGE_REGISTER_FILE, 3, 0);
-}
-
-
-static void copy_z_inv_w( struct brw_sf_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   GLuint i;
-
-   brw_push_insn_state(p);
-       
-   /* Copy both scalars with a single MOV:
-    */
-   for (i = 0; i < c->nr_verts; i++)
-      brw_MOV(p, vec2(suboffset(c->vert[i], 2)), vec2(c->z[i]));
-        
-   brw_pop_insn_state(p);
-}
-
-
-static void invert_det( struct brw_sf_compile *c)
-{
-   /* Looks like we invert all 8 elements just to get 1/det in
-    * position 2 !?!
-    */
-   brw_math(&c->func, 
-           c->inv_det, 
-           BRW_MATH_FUNCTION_INV,
-           BRW_MATH_SATURATE_NONE,
-           0, 
-           c->det,
-           BRW_MATH_DATA_SCALAR,
-           BRW_MATH_PRECISION_FULL);
-
-}
-
-
-/* Two attributes packed into a wide register.  Figure out if either
- * or both of them need linear/perspective interpolation.  Constant
- * regs are left as-is.
- */
-static GLboolean calculate_masks( struct brw_sf_compile *c,
-                                 GLuint reg,
-                                 GLushort *pc,
-                                 GLushort *pc_persp,
-                                 GLushort *pc_linear)
-{
-   GLboolean is_last_attr = (reg == c->nr_setup_regs - 1);
-   GLuint persp_mask = c->key.persp_attrs;
-   GLuint linear_mask = (c->key.persp_attrs | c->key.linear_attrs);
-
-   *pc_persp = 0;
-   *pc_linear = 0;
-   *pc = 0xf;
-      
-   if (persp_mask & (1 << (reg*2))) 
-      *pc_persp = 0xf;
-
-   if (linear_mask & (1 << (reg*2))) 
-      *pc_linear = 0xf;
-
-   /* Maybe only processs one attribute on the final round:
-    */
-   if (reg*2+1 < c->nr_setup_attrs) {
-      *pc |= 0xf0;
-
-      if (persp_mask & (1 << (reg*2+1))) 
-        *pc_persp |= 0xf0;
-
-      if (linear_mask & (1 << (reg*2+1))) 
-        *pc_linear |= 0xf0;
-   }
-
-   return is_last_attr;
-}
-
-
-void brw_emit_null_setup( struct brw_sf_compile *c )
-{
-   struct brw_compile *p = &c->func;
-
-   /* m0 is implicitly copied from r0 in the send instruction:
-    */  
-   brw_urb_WRITE(p, 
-                 brw_null_reg(),
-                 0,
-                 brw_vec8_grf(0, 0), /* r0, will be copied to m0 */
-                 0,    /* allocate */
-                 1,    /* used */
-                 1,    /* msg len */
-                 0,    /* response len */
-                 1,    /* eot */
-                 1,    /* writes complete */
-                 0,    /* offset */
-                 BRW_URB_SWIZZLE_TRANSPOSE); 
-}
-
-void brw_emit_tri_setup( struct brw_sf_compile *c, GLboolean allocate)
-{
-   struct brw_compile *p = &c->func;
-   GLuint i;
-
-   c->nr_verts = 3;
-
-   if (allocate)
-      alloc_regs(c);
-
-   invert_det(c);
-   copy_z_inv_w(c);
-
-   if (c->key.do_twoside_color) 
-      do_twoside_color(c);
-
-   if (c->key.do_flat_shading)
-      do_flatshade_triangle(c);
-      
-   
-   for (i = 0; i < c->nr_setup_regs; i++)
-   {
-      /* Pair of incoming attributes:
-       */
-      struct brw_reg a0 = offset(c->vert[0], i);
-      struct brw_reg a1 = offset(c->vert[1], i);
-      struct brw_reg a2 = offset(c->vert[2], i);
-      GLushort pc, pc_persp, pc_linear;
-      GLboolean last = calculate_masks(c, i, &pc, &pc_persp, &pc_linear);
-
-      if (pc_persp)
-      {
-        brw_set_predicate_control_flag_value(p, pc_persp);
-        brw_MUL(p, a0, a0, c->inv_w[0]);
-        brw_MUL(p, a1, a1, c->inv_w[1]);
-        brw_MUL(p, a2, a2, c->inv_w[2]);
-      }
-      
-      
-      /* Calculate coefficients for interpolated values:
-       */      
-      if (pc_linear)
-      {
-        brw_set_predicate_control_flag_value(p, pc_linear);
-
-        brw_ADD(p, c->a1_sub_a0, a1, negate(a0));
-        brw_ADD(p, c->a2_sub_a0, a2, negate(a0));
-
-        /* calculate dA/dx
-         */
-        brw_MUL(p, brw_null_reg(), c->a1_sub_a0, c->dy2);
-        brw_MAC(p, c->tmp, c->a2_sub_a0, negate(c->dy0));
-        brw_MUL(p, c->m1Cx, c->tmp, c->inv_det);
-               
-        /* calculate dA/dy
-         */
-        brw_MUL(p, brw_null_reg(), c->a2_sub_a0, c->dx0);
-        brw_MAC(p, c->tmp, c->a1_sub_a0, negate(c->dx2));
-        brw_MUL(p, c->m2Cy, c->tmp, c->inv_det);
-      }
-
-      {
-        brw_set_predicate_control_flag_value(p, pc); 
-        /* start point for interpolation
-         */
-        brw_MOV(p, c->m3C0, a0);
-      
-        /* Copy m0..m3 to URB.  m0 is implicitly copied from r0 in
-         * the send instruction:
-         */     
-        brw_urb_WRITE(p, 
-                      brw_null_reg(),
-                      0,
-                      brw_vec8_grf(0, 0), /* r0, will be copied to m0 */
-                      0,       /* allocate */
-                      1,       /* used */
-                      4,       /* msg len */
-                      0,       /* response len */
-                      last,    /* eot */
-                      last,    /* writes complete */
-                      i*4,     /* offset */
-                      BRW_URB_SWIZZLE_TRANSPOSE); /* XXX: Swizzle control "SF to windower" */
-      }
-   }
-}
-
-
-
-void brw_emit_line_setup( struct brw_sf_compile *c, GLboolean allocate)
-{
-   struct brw_compile *p = &c->func;
-   GLuint i;
-
-
-   c->nr_verts = 2;
-
-   if (allocate)
-      alloc_regs(c);
-
-   invert_det(c);
-   copy_z_inv_w(c);
-
-   if (c->key.do_flat_shading)
-      do_flatshade_line(c);
-
-   for (i = 0; i < c->nr_setup_regs; i++)
-   {
-      /* Pair of incoming attributes:
-       */
-      struct brw_reg a0 = offset(c->vert[0], i);
-      struct brw_reg a1 = offset(c->vert[1], i);
-      GLushort pc, pc_persp, pc_linear;
-      GLboolean last = calculate_masks(c, i, &pc, &pc_persp, &pc_linear);
-
-      if (pc_persp)
-      {
-        brw_set_predicate_control_flag_value(p, pc_persp);
-        brw_MUL(p, a0, a0, c->inv_w[0]);
-        brw_MUL(p, a1, a1, c->inv_w[1]);
-      }
-
-      /* Calculate coefficients for position, color:
-       */
-      if (pc_linear) {
-        brw_set_predicate_control_flag_value(p, pc_linear); 
-
-        brw_ADD(p, c->a1_sub_a0, a1, negate(a0));
-
-        brw_MUL(p, c->tmp, c->a1_sub_a0, c->dx0); 
-        brw_MUL(p, c->m1Cx, c->tmp, c->inv_det);
-               
-        brw_MUL(p, c->tmp, c->a1_sub_a0, c->dy0);
-        brw_MUL(p, c->m2Cy, c->tmp, c->inv_det);
-      }
-
-      {
-        brw_set_predicate_control_flag_value(p, pc); 
-
-        /* start point for interpolation
-         */
-        brw_MOV(p, c->m3C0, a0);
-
-        /* Copy m0..m3 to URB. 
-         */
-        brw_urb_WRITE(p, 
-                      brw_null_reg(),
-                      0,
-                      brw_vec8_grf(0, 0),
-                      0,       /* allocate */
-                      1,       /* used */
-                      4,       /* msg len */
-                      0,       /* response len */
-                      last,    /* eot */
-                      last,    /* writes complete */
-                      i*4,     /* urb destination offset */
-                      BRW_URB_SWIZZLE_TRANSPOSE); 
-      }
-   } 
-}
-
-void brw_emit_point_sprite_setup( struct brw_sf_compile *c, GLboolean allocate)
-{
-   struct brw_compile *p = &c->func;
-   GLuint i;
-
-   c->nr_verts = 1;
-
-   if (allocate)
-      alloc_regs(c);
-
-   copy_z_inv_w(c);
-
-   for (i = 0; i < c->nr_setup_regs; i++)
-   {
-      /* XXX: only seems to check point_coord_replace_attrs for every
-       * second attribute?!?
-       */
-      boolean coord_replace = !!(c->key.point_coord_replace_attrs & (1<<(2*i)));
-      struct brw_reg a0 = offset(c->vert[0], i);
-      GLushort pc, pc_persp, pc_linear;
-      GLboolean last = calculate_masks(c, i, &pc, &pc_persp, &pc_linear);
-            
-      if (pc_persp)
-      {                                
-        if (coord_replace) {
-           brw_set_predicate_control_flag_value(p, pc_persp);
-           brw_MUL(p, a0, a0, c->inv_w[0]);
-        }
-      }
-
-      if (coord_replace) {
-        /* Caculate 1.0/PointWidth */
-        brw_math(&c->func,
-                 c->tmp,
-                 BRW_MATH_FUNCTION_INV,
-                 BRW_MATH_SATURATE_NONE,
-                 0,
-                 c->dx0,
-                 BRW_MATH_DATA_SCALAR,
-                 BRW_MATH_PRECISION_FULL);
-
-        if (c->key.sprite_origin_lower_left) {
-           brw_MUL(p, c->m1Cx, c->tmp, c->inv_w[0]);
-           brw_MOV(p, vec1(suboffset(c->m1Cx, 1)), brw_imm_f(0.0));
-           brw_MUL(p, c->m2Cy, c->tmp, negate(c->inv_w[0]));
-           brw_MOV(p, vec1(suboffset(c->m2Cy, 0)), brw_imm_f(0.0));
-        } 
-        else {
-           brw_MUL(p, c->m1Cx, c->tmp, c->inv_w[0]);
-           brw_MOV(p, vec1(suboffset(c->m1Cx, 1)), brw_imm_f(0.0));
-           brw_MUL(p, c->m2Cy, c->tmp, c->inv_w[0]);
-           brw_MOV(p, vec1(suboffset(c->m2Cy, 0)), brw_imm_f(0.0));
-        }
-      } 
-      else {
-        brw_MOV(p, c->m1Cx, brw_imm_ud(0));
-        brw_MOV(p, c->m2Cy, brw_imm_ud(0));
-      }
-
-      {
-        brw_set_predicate_control_flag_value(p, pc); 
-        if (coord_replace) {
-           if (c->key.sprite_origin_lower_left) {
-              brw_MUL(p, c->m3C0, c->inv_w[0], brw_imm_f(1.0));
-              brw_MOV(p, vec1(suboffset(c->m3C0, 0)), brw_imm_f(0.0));
-           }
-           else {
-              brw_MOV(p, c->m3C0, brw_imm_f(0.0));
-           }
-        } 
-        else {
-           brw_MOV(p, c->m3C0, a0); /* constant value */
-        }
-
-        /* Copy m0..m3 to URB. 
-         */
-        brw_urb_WRITE(p, 
-                      brw_null_reg(),
-                      0,
-                      brw_vec8_grf(0, 0),
-                      0,       /* allocate */
-                      1,       /* used */
-                      4,       /* msg len */
-                      0,       /* response len */
-                      last,    /* eot */
-                      last,    /* writes complete */
-                      i*4,     /* urb destination offset */
-                      BRW_URB_SWIZZLE_TRANSPOSE);
-      }
-   }
-}
-
-/* Points setup - several simplifications as all attributes are
- * constant across the face of the point (point sprites excluded!)
- */
-void brw_emit_point_setup( struct brw_sf_compile *c, GLboolean allocate)
-{
-   struct brw_compile *p = &c->func;
-   GLuint i;
-
-   c->nr_verts = 1;
-   
-   if (allocate)
-      alloc_regs(c);
-
-   copy_z_inv_w(c);
-
-   brw_MOV(p, c->m1Cx, brw_imm_ud(0)); /* zero - move out of loop */
-   brw_MOV(p, c->m2Cy, brw_imm_ud(0)); /* zero - move out of loop */
-
-   for (i = 0; i < c->nr_setup_regs; i++)
-   {
-      struct brw_reg a0 = offset(c->vert[0], i);
-      GLushort pc, pc_persp, pc_linear;
-      GLboolean last = calculate_masks(c, i, &pc, &pc_persp, &pc_linear);
-            
-      if (pc_persp)
-      {                                
-        /* This seems odd as the values are all constant, but the
-         * fragment shader will be expecting it:
-         */
-        brw_set_predicate_control_flag_value(p, pc_persp);
-        brw_MUL(p, a0, a0, c->inv_w[0]);
-      }
-
-
-      /* The delta values are always zero, just send the starting
-       * coordinate.  Again, this is to fit in with the interpolation
-       * code in the fragment shader.
-       */
-      {
-        brw_set_predicate_control_flag_value(p, pc); 
-
-        brw_MOV(p, c->m3C0, a0); /* constant value */
-
-        /* Copy m0..m3 to URB. 
-         */
-        brw_urb_WRITE(p, 
-                      brw_null_reg(),
-                      0,
-                      brw_vec8_grf(0, 0),
-                      0,       /* allocate */
-                      1,       /* used */
-                      4,       /* msg len */
-                      0,       /* response len */
-                      last,    /* eot */
-                      last,    /* writes complete */
-                      i*4,     /* urb destination offset */
-                      BRW_URB_SWIZZLE_TRANSPOSE);
-      }
-   }
-}
-
-void brw_emit_anyprim_setup( struct brw_sf_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg ip = brw_ip_reg();
-   struct brw_reg payload_prim = brw_uw1_reg(BRW_GENERAL_REGISTER_FILE, 1, 0);
-   struct brw_reg payload_attr = get_element_ud(brw_vec1_reg(BRW_GENERAL_REGISTER_FILE, 1, 0), 0); 
-   struct brw_reg primmask;
-   struct brw_instruction *jmp;
-   struct brw_reg v1_null_ud = vec1(retype(brw_null_reg(), BRW_REGISTER_TYPE_UD));
-   
-   GLuint saveflag;
-
-   c->nr_verts = 3;
-   alloc_regs(c);
-
-   primmask = retype(get_element(c->tmp, 0), BRW_REGISTER_TYPE_UD);
-
-   brw_MOV(p, primmask, brw_imm_ud(1));
-   brw_SHL(p, primmask, primmask, payload_prim);
-
-   brw_set_conditionalmod(p, BRW_CONDITIONAL_Z);
-   brw_AND(p, v1_null_ud, primmask, brw_imm_ud((1<<_3DPRIM_TRILIST) |
-                                              (1<<_3DPRIM_TRISTRIP) |
-                                              (1<<_3DPRIM_TRIFAN) |
-                                              (1<<_3DPRIM_TRISTRIP_REVERSE) |
-                                              (1<<_3DPRIM_POLYGON) |
-                                              (1<<_3DPRIM_RECTLIST) |
-                                              (1<<_3DPRIM_TRIFAN_NOSTIPPLE)));
-   jmp = brw_JMPI(p, ip, ip, brw_imm_d(0));
-   {
-      saveflag = p->flag_value;
-      brw_push_insn_state(p); 
-      brw_emit_tri_setup( c, GL_FALSE );
-      brw_pop_insn_state(p);
-      p->flag_value = saveflag;
-      /* note - thread killed in subroutine, so must
-       * restore the flag which is changed when building
-       * the subroutine. fix #13240
-       */
-   }
-   brw_land_fwd_jump(p, jmp);
-
-   brw_set_conditionalmod(p, BRW_CONDITIONAL_Z);
-   brw_AND(p, v1_null_ud, primmask, brw_imm_ud((1<<_3DPRIM_LINELIST) |
-                                              (1<<_3DPRIM_LINESTRIP) |
-                                              (1<<_3DPRIM_LINELOOP) |
-                                              (1<<_3DPRIM_LINESTRIP_CONT) |
-                                              (1<<_3DPRIM_LINESTRIP_BF) |
-                                              (1<<_3DPRIM_LINESTRIP_CONT_BF)));
-   jmp = brw_JMPI(p, ip, ip, brw_imm_d(0));
-   {
-      saveflag = p->flag_value;
-      brw_push_insn_state(p); 
-      brw_emit_line_setup( c, GL_FALSE );
-      brw_pop_insn_state(p);
-      p->flag_value = saveflag;
-      /* note - thread killed in subroutine */
-   }
-   brw_land_fwd_jump(p, jmp); 
-
-   brw_set_conditionalmod(p, BRW_CONDITIONAL_Z);
-   brw_AND(p, v1_null_ud, payload_attr, brw_imm_ud(1<<BRW_SPRITE_POINT_ENABLE));
-   jmp = brw_JMPI(p, ip, ip, brw_imm_d(0));
-   {
-      saveflag = p->flag_value;
-      brw_push_insn_state(p); 
-      brw_emit_point_sprite_setup( c, GL_FALSE );
-      brw_pop_insn_state(p);
-      p->flag_value = saveflag;
-   }
-   brw_land_fwd_jump(p, jmp); 
-
-   brw_emit_point_setup( c, GL_FALSE );
-}
-
-
-
-
diff --git a/src/gallium/drivers/i965/brw_sf_state.c b/src/gallium/drivers/i965/brw_sf_state.c
deleted file mode 100644 (file)
index eec0246..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-   
-#include "util/u_math.h"
-
-#include "pipe/p_state.h"
-
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_defines.h"
-#include "brw_debug.h"
-#include "brw_pipe_rast.h"
-
-static enum pipe_error upload_sf_vp(struct brw_context *brw)
-{
-   const struct pipe_viewport_state *vp = &brw->curr.viewport;
-   const struct pipe_scissor_state *scissor = &brw->curr.scissor;
-   struct brw_sf_viewport sfv;
-   enum pipe_error ret;
-
-   memset(&sfv, 0, sizeof(sfv));
-
-   /* PIPE_NEW_VIEWPORT, PIPE_NEW_SCISSOR */
-
-   sfv.viewport.m00 = vp->scale[0];
-   sfv.viewport.m11 = vp->scale[1];
-   sfv.viewport.m22 = vp->scale[2];
-   sfv.viewport.m30 = vp->translate[0];
-   sfv.viewport.m31 = vp->translate[1];
-   sfv.viewport.m32 = vp->translate[2];
-
-   sfv.scissor.xmin = scissor->minx;
-   sfv.scissor.xmax = scissor->maxx - 1; /* ? */
-   sfv.scissor.ymin = scissor->miny;
-   sfv.scissor.ymax = scissor->maxy - 1; /* ? */
-
-   ret = brw_cache_data( &brw->cache, BRW_SF_VP, &sfv, NULL, 0,
-                         &brw->sf.vp_bo );
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-const struct brw_tracked_state brw_sf_vp = {
-   .dirty = {
-      .mesa  = (PIPE_NEW_VIEWPORT | 
-               PIPE_NEW_SCISSOR),
-      .brw   = 0,
-      .cache = 0
-   },
-   .prepare = upload_sf_vp
-};
-
-struct brw_sf_unit_key {
-   unsigned int total_grf;
-   unsigned int urb_entry_read_length;
-   unsigned int nr_urb_entries, urb_size, sfsize;
-   
-   unsigned scissor:1;
-   unsigned line_smooth:1;
-   unsigned point_sprite:1;
-   unsigned point_attenuated:1;
-   unsigned front_ccw:1;
-   unsigned cull_face:2;
-   unsigned flatshade_first:1;
-   unsigned gl_rasterization_rules:1;
-   unsigned line_last_pixel_enable:1;
-   float line_width;
-   float point_size;
-};
-
-static void
-sf_unit_populate_key(struct brw_context *brw, struct brw_sf_unit_key *key)
-{
-   const struct pipe_rasterizer_state *rast = &brw->curr.rast->templ;
-   memset(key, 0, sizeof(*key));
-
-   /* CACHE_NEW_SF_PROG */
-   key->total_grf = brw->sf.prog_data->total_grf;
-   key->urb_entry_read_length = brw->sf.prog_data->urb_read_length;
-
-   /* BRW_NEW_URB_FENCE */
-   key->nr_urb_entries = brw->urb.nr_sf_entries;
-   key->urb_size = brw->urb.vsize;
-   key->sfsize = brw->urb.sfsize;
-
-   /* PIPE_NEW_RAST */
-   key->scissor = rast->scissor;
-   key->front_ccw = rast->front_ccw;
-   key->cull_face = rast->cull_face;
-   key->line_smooth = rast->line_smooth;
-   key->line_width = rast->line_width;
-   key->flatshade_first = rast->flatshade_first;
-   key->line_last_pixel_enable = rast->line_last_pixel;
-   key->gl_rasterization_rules = rast->gl_rasterization_rules;
-
-   key->point_sprite = rast->sprite_coord_enable ? 1 : 0;
-   key->point_attenuated = rast->point_size_per_vertex;
-
-   key->point_size = rast->point_size;
-}
-
-static enum pipe_error
-sf_unit_create_from_key(struct brw_context *brw,
-                        struct brw_sf_unit_key *key,
-                        struct brw_winsys_reloc *reloc,
-                        struct brw_winsys_buffer **bo_out)
-{
-   struct brw_sf_unit_state sf;
-   enum pipe_error ret;
-   int chipset_max_threads;
-   memset(&sf, 0, sizeof(sf));
-
-   sf.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
-   /* reloc */
-   sf.thread0.kernel_start_pointer = 0;
-
-   sf.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
-
-   sf.thread3.dispatch_grf_start_reg = 3;
-
-   if (brw->gen == 5)
-       sf.thread3.urb_entry_read_offset = 3;
-   else
-       sf.thread3.urb_entry_read_offset = 1;
-
-   sf.thread3.urb_entry_read_length = key->urb_entry_read_length;
-
-   sf.thread4.nr_urb_entries = key->nr_urb_entries;
-   sf.thread4.urb_entry_allocation_size = key->sfsize - 1;
-
-   /* Each SF thread produces 1 PUE, and there can be up to 24(Pre-IGDNG) or 
-    * 48(IGDNG) threads 
-    */
-   if (brw->gen == 5)
-      chipset_max_threads = 48;
-   else
-      chipset_max_threads = 24;
-
-   sf.thread4.max_threads = MIN2(chipset_max_threads, key->nr_urb_entries) - 1;
-
-   if (BRW_DEBUG & DEBUG_SINGLE_THREAD)
-      sf.thread4.max_threads = 0;
-
-   if (BRW_DEBUG & DEBUG_STATS)
-      sf.thread4.stats_enable = 1;
-
-   /* CACHE_NEW_SF_VP */
-   /* reloc */
-   sf.sf5.sf_viewport_state_offset = 0;
-
-   sf.sf5.viewport_transform = 1;
-
-   if (key->scissor)
-      sf.sf6.scissor = 1;
-
-   if (key->front_ccw)
-      sf.sf5.front_winding = BRW_FRONTWINDING_CCW;
-   else
-      sf.sf5.front_winding = BRW_FRONTWINDING_CW;
-
-   switch (key->cull_face) {
-   case PIPE_FACE_FRONT:
-      sf.sf6.cull_mode = BRW_CULLMODE_FRONT;
-      break;
-   case PIPE_FACE_BACK:
-      sf.sf6.cull_mode = BRW_CULLMODE_BACK;
-      break;
-   case PIPE_FACE_FRONT_AND_BACK:
-      sf.sf6.cull_mode = BRW_CULLMODE_BOTH;
-      break;
-   case PIPE_FACE_NONE:
-      sf.sf6.cull_mode = BRW_CULLMODE_NONE;
-      break;
-   default:
-      assert(0);
-      sf.sf6.cull_mode = BRW_CULLMODE_NONE;
-      break;
-   }
-
-   /* _NEW_LINE */
-   /* XXX use ctx->Const.Min/MaxLineWidth here */
-   sf.sf6.line_width = CLAMP(key->line_width, 1.0, 5.0) * (1<<1);
-
-   sf.sf6.line_endcap_aa_region_width = 1;
-   if (key->line_smooth)
-      sf.sf6.aa_enable = 1;
-   else if (sf.sf6.line_width <= 0x2)
-       sf.sf6.line_width = 0;
-
-   /* XXX: gl_rasterization_rules?  something else?
-    */
-   sf.sf6.point_rast_rule = BRW_RASTRULE_UPPER_RIGHT;
-   sf.sf6.point_rast_rule = BRW_RASTRULE_LOWER_RIGHT;
-   sf.sf6.point_rast_rule = 1;
-
-   /* XXX clamp max depends on AA vs. non-AA */
-
-   /* _NEW_POINT */
-   sf.sf7.sprite_point = key->point_sprite;
-   sf.sf7.point_size = CLAMP(rint(key->point_size), 1, 255) * (1<<3);
-   sf.sf7.use_point_size_state = !key->point_attenuated;
-   sf.sf7.aa_line_distance_mode = 0;
-
-   /* might be BRW_NEW_PRIMITIVE if we have to adjust pv for polygons:
-    */
-   if (!key->flatshade_first) {
-      sf.sf7.trifan_pv = 2;
-      sf.sf7.linestrip_pv = 1;
-      sf.sf7.tristrip_pv = 2;
-   } else {
-      sf.sf7.trifan_pv = 1;
-      sf.sf7.linestrip_pv = 0;
-      sf.sf7.tristrip_pv = 0;
-   }
-
-   sf.sf7.line_last_pixel_enable = key->line_last_pixel_enable;
-
-   /* Set bias for OpenGL rasterization rules:
-    */
-   if (key->gl_rasterization_rules) {
-      sf.sf6.dest_org_vbias = 0x8;
-      sf.sf6.dest_org_hbias = 0x8;
-   }
-   else {
-      sf.sf6.dest_org_vbias = 0x0;
-      sf.sf6.dest_org_hbias = 0x0;
-   }
-
-   ret = brw_upload_cache(&brw->cache, BRW_SF_UNIT,
-                          key, sizeof(*key),
-                          reloc, 2,
-                          &sf, sizeof(sf),
-                          NULL, NULL,
-                          bo_out);
-   if (ret)
-      return ret;
-
-   
-   return PIPE_OK;
-}
-
-static enum pipe_error upload_sf_unit( struct brw_context *brw )
-{
-   struct brw_sf_unit_key key;
-   struct brw_winsys_reloc reloc[2];
-   unsigned total_grf;
-   unsigned viewport_transform;
-   unsigned front_winding;
-   enum pipe_error ret;
-
-   sf_unit_populate_key(brw, &key);
-   
-   /* XXX: cut this crap and pre calculate the key:
-    */
-   total_grf = (align(key.total_grf, 16) / 16 - 1);
-   viewport_transform = 1;
-   front_winding = (key.front_ccw ?
-                    BRW_FRONTWINDING_CCW :
-                    BRW_FRONTWINDING_CW);
-
-   /* Emit SF program relocation */
-   make_reloc(&reloc[0],
-              BRW_USAGE_STATE,
-              total_grf << 1,
-              offsetof(struct brw_sf_unit_state, thread0),
-              brw->sf.prog_bo);
-
-   /* Emit SF viewport relocation */
-   make_reloc(&reloc[1],
-              BRW_USAGE_STATE,
-              front_winding | (viewport_transform << 1),
-              offsetof(struct brw_sf_unit_state, sf5),
-              brw->sf.vp_bo);
-
-
-   if (brw_search_cache(&brw->cache, BRW_SF_UNIT,
-                        &key, sizeof(key),
-                        reloc, 2,
-                        NULL,
-                        &brw->sf.state_bo))
-      return PIPE_OK;
-
-
-   ret = sf_unit_create_from_key(brw, &key,
-                                 reloc,
-                                 &brw->sf.state_bo);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-const struct brw_tracked_state brw_sf_unit = {
-   .dirty = {
-      .mesa  = (PIPE_NEW_RAST),
-      .brw   = BRW_NEW_URB_FENCE,
-      .cache = (CACHE_NEW_SF_VP |
-               CACHE_NEW_SF_PROG)
-   },
-   .prepare = upload_sf_unit,
-};
diff --git a/src/gallium/drivers/i965/brw_state.h b/src/gallium/drivers/i965/brw_state.h
deleted file mode 100644 (file)
index 380d511..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-    
-
-#ifndef BRW_STATE_H
-#define BRW_STATE_H
-
-#include "pipe/p_defines.h"
-#include "util/u_memory.h"
-
-#include "brw_context.h"
-
-static INLINE void
-brw_add_validated_bo(struct brw_context *brw, struct brw_winsys_buffer *bo)
-{
-   assert(brw->state.validated_bo_count < Elements(brw->state.validated_bos));
-
-   if (bo != NULL) {
-      bo_reference( &brw->state.validated_bos[brw->state.validated_bo_count++],
-                    bo );
-   }
-}
-
-const struct brw_tracked_state brw_blend_constant_color;
-const struct brw_tracked_state brw_cc_unit;
-const struct brw_tracked_state brw_cc_vp;
-const struct brw_tracked_state brw_clip_prog;
-const struct brw_tracked_state brw_clip_unit;
-const struct brw_tracked_state brw_curbe_buffer;
-const struct brw_tracked_state brw_curbe_offsets;
-const struct brw_tracked_state brw_invariant_state;
-const struct brw_tracked_state brw_gs_prog;
-const struct brw_tracked_state brw_gs_unit;
-const struct brw_tracked_state brw_line_stipple;
-const struct brw_tracked_state brw_aa_line_parameters;
-const struct brw_tracked_state brw_pipelined_state_pointers;
-const struct brw_tracked_state brw_binding_table_pointers;
-const struct brw_tracked_state brw_depthbuffer;
-const struct brw_tracked_state brw_polygon_stipple;
-const struct brw_tracked_state brw_program_parameters;
-const struct brw_tracked_state brw_recalculate_urb_fence;
-const struct brw_tracked_state brw_sf_prog;
-const struct brw_tracked_state brw_sf_unit;
-const struct brw_tracked_state brw_sf_vp;
-const struct brw_tracked_state brw_state_base_address;
-const struct brw_tracked_state brw_urb_fence;
-const struct brw_tracked_state brw_vertex_state;
-const struct brw_tracked_state brw_vs_surfaces;
-const struct brw_tracked_state brw_vs_prog;
-const struct brw_tracked_state brw_vs_unit;
-const struct brw_tracked_state brw_wm_input_sizes;
-const struct brw_tracked_state brw_wm_prog;
-const struct brw_tracked_state brw_wm_samplers;
-const struct brw_tracked_state brw_wm_constant_surface;
-const struct brw_tracked_state brw_wm_surfaces;
-const struct brw_tracked_state brw_wm_unit;
-
-const struct brw_tracked_state brw_psp_urb_cbs;
-
-const struct brw_tracked_state brw_pipe_control;
-
-const struct brw_tracked_state brw_drawing_rect;
-const struct brw_tracked_state brw_indices;
-const struct brw_tracked_state brw_vertices;
-const struct brw_tracked_state brw_index_buffer;
-
-
-/***********************************************************************
- * brw_state.c
- */
-int brw_validate_state(struct brw_context *brw);
-int brw_upload_state(struct brw_context *brw);
-void brw_init_state(struct brw_context *brw);
-void brw_destroy_state(struct brw_context *brw);
-
-/***********************************************************************
- * brw_state_cache.c
- */
-enum pipe_error brw_cache_data(struct brw_cache *cache,
-                               enum brw_cache_id cache_id,
-                               const void *data,
-                               struct brw_winsys_reloc *relocs,
-                               GLuint nr_relocs,
-                               struct brw_winsys_buffer **bo_out );
-
-enum pipe_error brw_cache_data_sz(struct brw_cache *cache,
-                                  enum brw_cache_id cache_id,
-                                  const void *data,
-                                  GLuint data_size,
-                                  struct brw_winsys_reloc *relocs,
-                                  GLuint nr_relocs,
-                                  struct brw_winsys_buffer **bo_out);
-
-enum pipe_error brw_upload_cache( struct brw_cache *cache,
-                                  enum brw_cache_id cache_id,
-                                  const void *key,
-                                  GLuint key_sz,
-                                  struct brw_winsys_reloc *relocs,
-                                  GLuint nr_relocs,
-                                  const void *data,
-                                  GLuint data_sz,
-                                  const void *aux,
-                                  void *aux_return ,
-                                  struct brw_winsys_buffer **bo_out);
-
-boolean brw_search_cache( struct brw_cache *cache,
-                          enum brw_cache_id cache_id,
-                          const void *key,
-                          GLuint key_size,
-                          struct brw_winsys_reloc *relocs,
-                          GLuint nr_relocs,
-                          void *aux_return,
-                          struct brw_winsys_buffer **bo_out);
-
-void brw_state_cache_check_size( struct brw_context *brw );
-
-void brw_init_caches( struct brw_context *brw );
-void brw_destroy_caches( struct brw_context *brw );
-void brw_state_cache_bo_delete(struct brw_cache *cache, struct brw_winsys_buffer *bo);
-
-/***********************************************************************
- * brw_state_batch.c
- */
-#define BRW_BATCH_STRUCT(brw, s) brw_batchbuffer_data( brw->batch, (s), sizeof(*(s)), IGNORE_CLIPRECTS)
-#define BRW_CACHED_BATCH_STRUCT(brw, s) brw_cached_batch_struct( brw, (s), sizeof(*(s)) )
-
-GLboolean brw_cached_batch_struct( struct brw_context *brw,
-                                  const void *data,
-                                  GLuint sz );
-void brw_destroy_batch_cache( struct brw_context *brw );
-void brw_clear_batch_cache( struct brw_context *brw );
-
-/***********************************************************************
- * brw_wm_surface_state.c 
- */
-
-/***********************************************************************
- * brw_state_debug.c
- */
-void brw_update_dirty_counts( unsigned mesa,
-                             unsigned brw,
-                             unsigned cache );
-
-
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_state_batch.c b/src/gallium/drivers/i965/brw_state_batch.c
deleted file mode 100644 (file)
index ce5ed0a..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-     
-
-
-#include "brw_state.h"
-#include "brw_batchbuffer.h"
-
-
-
-/* A facility similar to the data caching code above, which aims to
- * prevent identical commands being issued repeatedly.
- */
-GLboolean brw_cached_batch_struct( struct brw_context *brw,
-                                  const void *data,
-                                  GLuint sz )
-{
-   struct brw_cached_batch_item *item = brw->cached_batch_items;
-   struct header *newheader = (struct header *)data;
-
-   if (brw->flags.always_emit_state) {
-      brw_batchbuffer_data(brw->batch, data, sz, IGNORE_CLIPRECTS);
-      return GL_TRUE;
-   }
-
-   while (item) {
-      if (item->header->opcode == newheader->opcode) {
-        if (item->sz == sz && memcmp(item->header, newheader, sz) == 0)
-           return GL_FALSE;
-        if (item->sz != sz) {
-           FREE(item->header);
-           item->header = MALLOC(sz);
-           item->sz = sz;
-        }
-        goto emit;
-      }
-      item = item->next;
-   }
-
-   assert(!item);
-   item = CALLOC_STRUCT(brw_cached_batch_item);
-   item->header = MALLOC(sz);
-   item->sz = sz;
-   item->next = brw->cached_batch_items;
-   brw->cached_batch_items = item;
-
- emit:
-   memcpy(item->header, newheader, sz);
-   brw_batchbuffer_data(brw->batch, data, sz, IGNORE_CLIPRECTS);
-   return GL_TRUE;
-}
-
-void brw_clear_batch_cache( struct brw_context *brw )
-{
-   struct brw_cached_batch_item *item = brw->cached_batch_items;
-
-   while (item) {
-      struct brw_cached_batch_item *next = item->next;
-      FREE((void *)item->header);
-      FREE(item);
-      item = next;
-   }
-
-   brw->cached_batch_items = NULL;
-}
-
-void brw_destroy_batch_cache( struct brw_context *brw )
-{
-   brw_clear_batch_cache(brw);
-}
diff --git a/src/gallium/drivers/i965/brw_state_cache.c b/src/gallium/drivers/i965/brw_state_cache.c
deleted file mode 100644 (file)
index c911f39..0000000
+++ /dev/null
@@ -1,617 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-/** @file brw_state_cache.c
- *
- * This file implements a simple static state cache for 965.  The consumers
- * can query the hash table of state using a cache_id, opaque key data,
- * and list of buffers that will be used in relocations, and receive the
- * corresponding state buffer object of state (plus associated auxiliary
- * data) in return.
- *
- * The inner workings are a simple hash table based on a CRC of the key data.
- * The cache_id and relocation target buffers associated with the state
- * buffer are included as auxiliary key data, but are not part of the hash
- * value (this should be fixed, but will likely be fixed instead by making
- * consumers use structured keys).
- *
- * Replacement is not implemented.  Instead, when the cache gets too big, at
- * a safe point (unlock) we throw out all of the cache data and let it
- * regenerate for the next rendering operation.
- *
- * The reloc structs need to be included as key data, otherwise the
- * non-unique values stuffed in the offset in key data through
- * brw_cache_data() may result in successful probe for state buffers
- * even when the buffer being referenced doesn't match.  The result would be
- * that the same state cache entry is used twice for different buffers,
- * only one of the two buffers referenced gets put into the offset, and the
- * incorrect program is run for the other instance.
- */
-#include "util/u_memory.h"
-
-#include "brw_debug.h"
-#include "brw_state.h"
-
-/* XXX: Fixme - have to include these to get the sizes of the prog_key
- * structs:
- */
-#include "brw_wm.h"
-#include "brw_vs.h"
-#include "brw_clip.h"
-#include "brw_sf.h"
-#include "brw_gs.h"
-
-
-static GLuint
-hash_key(const void *key, GLuint key_size,
-         struct brw_winsys_reloc *relocs, GLuint nr_relocs)
-{
-   GLuint *ikey = (GLuint *)key;
-   GLuint hash = 0, i;
-
-   assert(key_size % 4 == 0);
-
-   /* I'm sure this can be improved on:
-    */
-   for (i = 0; i < key_size/4; i++) {
-      hash ^= ikey[i];
-      hash = (hash << 5) | (hash >> 27);
-   }
-
-   /* Include the BO pointers as key data as well */
-   ikey = (GLuint *)relocs;
-   key_size = nr_relocs * sizeof(struct brw_winsys_reloc);
-   for (i = 0; i < key_size/4; i++) {
-      hash ^= ikey[i];
-      hash = (hash << 5) | (hash >> 27);
-   }
-
-   return hash;
-}
-
-
-/**
- * Marks a new buffer as being chosen for the given cache id.
- */
-static void
-update_cache_last(struct brw_cache *cache, enum brw_cache_id cache_id,
-                 struct brw_winsys_buffer *bo)
-{
-   if (bo == cache->last_bo[cache_id])
-      return; /* no change */
-
-   bo_reference( &cache->last_bo[cache_id],  bo );
-
-   cache->brw->state.dirty.cache |= 1 << cache_id;
-}
-
-
-static struct brw_cache_item *
-search_cache(struct brw_cache *cache, enum brw_cache_id cache_id,
-            GLuint hash, const void *key, GLuint key_size,
-            struct brw_winsys_reloc *relocs, GLuint nr_relocs)
-{
-   struct brw_cache_item *c;
-
-#if 0
-   int bucketcount = 0;
-
-   for (c = cache->items[hash % cache->size]; c; c = c->next)
-      bucketcount++;
-
-   debug_printf("bucket %d/%d = %d/%d items\n", hash % cache->size,
-          cache->size, bucketcount, cache->n_items);
-#endif
-
-   for (c = cache->items[hash % cache->size]; c; c = c->next) {
-      if (c->cache_id == cache_id &&
-         c->hash == hash &&
-         c->key_size == key_size &&
-         memcmp(c->key, key, key_size) == 0 &&
-         c->nr_relocs == nr_relocs &&
-         memcmp(c->relocs, relocs, nr_relocs * sizeof *relocs) == 0)
-        return c;
-   }
-
-   return NULL;
-}
-
-
-static void
-rehash(struct brw_cache *cache)
-{
-   struct brw_cache_item **items;
-   struct brw_cache_item *c, *next;
-   GLuint size, i;
-
-   size = cache->size * 3;
-   items = (struct brw_cache_item**) CALLOC(size, sizeof(*items));
-
-   for (i = 0; i < cache->size; i++)
-      for (c = cache->items[i]; c; c = next) {
-        next = c->next;
-        c->next = items[c->hash % size];
-        items[c->hash % size] = c;
-      }
-
-   FREE(cache->items);
-   cache->items = items;
-   cache->size = size;
-}
-
-
-/**
- * Returns the buffer object matching cache_id and key, or NULL.
- */
-boolean
-brw_search_cache(struct brw_cache *cache,
-                 enum brw_cache_id cache_id,
-                 const void *key,
-                 GLuint key_size,
-                 struct brw_winsys_reloc *relocs, 
-                GLuint nr_relocs,
-                 void *aux_return,
-                 struct brw_winsys_buffer **bo_out)
-{
-   struct brw_cache_item *item;
-   GLuint hash = hash_key(key, key_size, relocs, nr_relocs);
-
-   item = search_cache(cache, cache_id, hash, key, key_size,
-                      relocs, nr_relocs);
-
-   if (item) {
-      if (aux_return)
-         *(void **)aux_return = (void *)((char *)item->key + item->key_size);
-      
-      update_cache_last(cache, cache_id, item->bo);
-      bo_reference(bo_out, item->bo);
-      return TRUE;
-   }
-   
-   return FALSE;      
-}
-
-
-enum pipe_error
-brw_upload_cache( struct brw_cache *cache,
-                 enum brw_cache_id cache_id,
-                 const void *key,
-                 GLuint key_size,
-                 struct brw_winsys_reloc *relocs,
-                 GLuint nr_relocs,
-                 const void *data,
-                 GLuint data_size,
-                 const void *aux,
-                 void *aux_return,
-                  struct brw_winsys_buffer **bo_out)
-{
-   struct brw_cache_item *item;
-   GLuint hash = hash_key(key, key_size, relocs, nr_relocs);
-   GLuint relocs_size = nr_relocs * sizeof relocs[0];
-   GLuint aux_size = cache->aux_size[cache_id];
-   enum pipe_error ret;
-   void *tmp;
-   int i;
-
-   /* Create the buffer object to contain the data.  For now, use a
-    * single buffer type to describe all cached state atoms.  Later,
-    * may want to take advantage of hardware distinctions between
-    * these various entities.
-    */
-   ret = cache->sws->bo_alloc(cache->sws,
-                              cache->buffer_type,
-                              data_size, 1 << 6, 
-                              bo_out);
-   if (ret)
-      return ret;
-
-   item = CALLOC_STRUCT(brw_cache_item);
-
-   /* Set up the memory containing the key, aux_data, and relocs */
-   tmp = MALLOC(key_size + aux_size + relocs_size);
-
-   memcpy(tmp, key, key_size);
-   memcpy((char *)tmp + key_size, aux, cache->aux_size[cache_id]);
-   memcpy((char *)tmp + key_size + aux_size, relocs, relocs_size);
-   for (i = 0; i < nr_relocs; i++) {
-      p_atomic_inc(&relocs[i].bo->reference.count);
-   }
-
-   item->cache_id = cache_id;
-   item->key = tmp;
-   item->hash = hash;
-   item->key_size = key_size;
-   item->relocs = (struct brw_winsys_reloc *)((char *)tmp + key_size + aux_size);
-   item->nr_relocs = nr_relocs;
-   bo_reference( &item->bo, *bo_out );
-   item->data_size = data_size;
-
-   if (cache->n_items > cache->size * 1.5)
-      rehash(cache);
-
-   hash %= cache->size;
-   item->next = cache->items[hash];
-   cache->items[hash] = item;
-   cache->n_items++;
-
-   if (aux_return) {
-      assert(cache->aux_size[cache_id]);
-      *(void **)aux_return = (void *)((char *)item->key + item->key_size);
-   }
-
-   if (BRW_DEBUG & DEBUG_STATE)
-      debug_printf("upload %s: %d bytes to cache id %d\n",
-                  cache->name[cache_id],
-                  data_size, cache_id);
-
-   /* Copy data to the buffer */
-   ret = cache->sws->bo_subdata(item->bo, 
-                                cache_id,
-                                0, data_size, data,
-                                relocs, nr_relocs);
-   if (ret)
-      return ret;
-
-   update_cache_last(cache, cache_id, item->bo);
-
-   return PIPE_OK;
-}
-
-
-/**
- * This doesn't really work with aux data.  Use search/upload instead
- */
-enum pipe_error
-brw_cache_data_sz(struct brw_cache *cache,
-                 enum brw_cache_id cache_id,
-                 const void *data,
-                 GLuint data_size,
-                 struct brw_winsys_reloc *relocs,
-                 GLuint nr_relocs,
-                  struct brw_winsys_buffer **bo_out)
-{
-   struct brw_cache_item *item;
-   GLuint hash = hash_key(data, data_size, relocs, nr_relocs);
-
-   item = search_cache(cache, cache_id, hash, data, data_size,
-                      relocs, nr_relocs);
-   if (item) {
-      update_cache_last(cache, cache_id, item->bo);
-
-      bo_reference(bo_out, item->bo);
-      return PIPE_OK;
-   }
-
-   return brw_upload_cache(cache, cache_id,
-                           data, data_size,
-                           relocs, nr_relocs,
-                           data, data_size,
-                           NULL, NULL,
-                           bo_out);
-}
-
-
-/**
- * Wrapper around brw_cache_data_sz using the cache_id's canonical key size.
- *
- * If nr_relocs is nonzero, brw_search_cache()/brw_upload_cache() would be
- * better to use, as the potentially changing offsets in the data-used-as-key
- * will result in excessive cache misses.
- * 
- * XXX: above is no longer true -- can we remove some code?
- */
-enum pipe_error
-brw_cache_data(struct brw_cache *cache,
-              enum brw_cache_id cache_id,
-              const void *data,
-              struct brw_winsys_reloc *relocs,
-              GLuint nr_relocs,
-               struct brw_winsys_buffer **bo_out)
-{
-   return brw_cache_data_sz(cache, cache_id, data, cache->key_size[cache_id],
-                           relocs, nr_relocs, bo_out);
-}
-
-
-static void
-brw_init_cache_id(struct brw_cache *cache,
-                  const char *name,
-                  enum brw_cache_id id,
-                  GLuint key_size,
-                  GLuint aux_size)
-{
-   cache->name[id] = strdup(name);
-   cache->key_size[id] = key_size;
-   cache->aux_size[id] = aux_size;
-}
-
-
-static void
-brw_init_general_state_cache(struct brw_context *brw)
-{
-   struct brw_cache *cache = &brw->cache;
-
-   cache->brw = brw;
-   cache->sws = brw->sws;
-
-   cache->buffer_type = BRW_BUFFER_TYPE_GENERAL_STATE;
-
-   cache->size = 7;
-   cache->n_items = 0;
-   cache->items = (struct brw_cache_item **)
-      CALLOC(cache->size, sizeof(struct brw_cache_item));
-
-   brw_init_cache_id(cache,
-                    "CC_VP",
-                    BRW_CC_VP,
-                    sizeof(struct brw_cc_viewport),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "CC_UNIT",
-                    BRW_CC_UNIT,
-                    sizeof(struct brw_cc_unit_state),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "WM_PROG",
-                    BRW_WM_PROG,
-                    sizeof(struct brw_wm_prog_key),
-                    sizeof(struct brw_wm_prog_data));
-
-   brw_init_cache_id(cache,
-                    "SAMPLER_DEFAULT_COLOR",
-                    BRW_SAMPLER_DEFAULT_COLOR,
-                    sizeof(struct brw_sampler_default_color),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "SAMPLER",
-                    BRW_SAMPLER,
-                    0,         /* variable key/data size */
-                    0);
-
-   brw_init_cache_id(cache,
-                    "WM_UNIT",
-                    BRW_WM_UNIT,
-                    sizeof(struct brw_wm_unit_state),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "SF_PROG",
-                    BRW_SF_PROG,
-                    sizeof(struct brw_sf_prog_key),
-                    sizeof(struct brw_sf_prog_data));
-
-   brw_init_cache_id(cache,
-                    "SF_VP",
-                    BRW_SF_VP,
-                    sizeof(struct brw_sf_viewport),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "SF_UNIT",
-                    BRW_SF_UNIT,
-                    sizeof(struct brw_sf_unit_state),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "VS_UNIT",
-                    BRW_VS_UNIT,
-                    sizeof(struct brw_vs_unit_state),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "VS_PROG",
-                    BRW_VS_PROG,
-                    sizeof(struct brw_vs_prog_key),
-                    sizeof(struct brw_vs_prog_data));
-
-   brw_init_cache_id(cache,
-                    "CLIP_UNIT",
-                    BRW_CLIP_UNIT,
-                    sizeof(struct brw_clip_unit_state),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "CLIP_PROG",
-                    BRW_CLIP_PROG,
-                    sizeof(struct brw_clip_prog_key),
-                    sizeof(struct brw_clip_prog_data));
-
-   brw_init_cache_id(cache,
-                    "GS_UNIT",
-                    BRW_GS_UNIT,
-                    sizeof(struct brw_gs_unit_state),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "GS_PROG",
-                    BRW_GS_PROG,
-                    sizeof(struct brw_gs_prog_key),
-                    sizeof(struct brw_gs_prog_data));
-}
-
-
-static void
-brw_init_surface_state_cache(struct brw_context *brw)
-{
-   struct brw_cache *cache = &brw->surface_cache;
-
-   cache->brw = brw;
-   cache->sws = brw->sws;
-
-   cache->buffer_type = BRW_BUFFER_TYPE_SURFACE_STATE;
-
-   cache->size = 7;
-   cache->n_items = 0;
-   cache->items = (struct brw_cache_item **)
-      CALLOC(cache->size, sizeof(struct brw_cache_item));
-
-   brw_init_cache_id(cache,
-                    "SS_SURFACE",
-                    BRW_SS_SURFACE,
-                    sizeof(struct brw_surface_state),
-                    0);
-
-   brw_init_cache_id(cache,
-                    "SS_SURF_BIND",
-                    BRW_SS_SURF_BIND,
-                    0,
-                    0);
-}
-
-
-void
-brw_init_caches(struct brw_context *brw)
-{
-   brw_init_general_state_cache(brw);
-   brw_init_surface_state_cache(brw);
-}
-
-
-static void
-brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)
-{
-   struct brw_cache_item *c, *next;
-   GLuint i;
-
-   if (BRW_DEBUG & DEBUG_STATE)
-      debug_printf("%s\n", __FUNCTION__);
-
-   for (i = 0; i < cache->size; i++) {
-      for (c = cache->items[i]; c; c = next) {
-        int j;
-
-        next = c->next;
-
-        for (j = 0; j < c->nr_relocs; j++)
-           bo_reference(&c->relocs[j].bo, NULL);
-
-        bo_reference(&c->bo, NULL);
-        FREE((void *)c->key);
-        FREE(c);
-      }
-      cache->items[i] = NULL;
-   }
-
-   cache->n_items = 0;
-
-   if (brw->curbe.last_buf) {
-      FREE(brw->curbe.last_buf);
-      brw->curbe.last_buf = NULL;
-   }
-
-   brw->state.dirty.mesa |= ~0;
-   brw->state.dirty.brw |= ~0;
-   brw->state.dirty.cache |= ~0;
-}
-
-/* Clear all entries from the cache that point to the given bo.
- *
- * This lets us release memory for reuse earlier for known-dead buffers,
- * at the cost of walking the entire hash table.
- */
-void
-brw_state_cache_bo_delete(struct brw_cache *cache, struct brw_winsys_buffer *bo)
-{
-   struct brw_cache_item **prev;
-   GLuint i;
-
-   if (BRW_DEBUG & DEBUG_STATE)
-      debug_printf("%s\n", __FUNCTION__);
-
-   for (i = 0; i < cache->size; i++) {
-      for (prev = &cache->items[i]; *prev;) {
-        struct brw_cache_item *c = *prev;
-
-        if (cache->sws->bo_references(c->bo, bo)) {
-           int j;
-
-           *prev = c->next;
-
-           for (j = 0; j < c->nr_relocs; j++)
-              bo_reference(&c->relocs[j].bo, NULL);
-
-           bo_reference(&c->bo, NULL);
-
-           FREE((void *)c->key);
-           FREE(c);
-           cache->n_items--;
-        } else {
-           prev = &c->next;
-        }
-      }
-   }
-}
-
-void
-brw_state_cache_check_size(struct brw_context *brw)
-{
-   if (BRW_DEBUG & DEBUG_STATE)
-      debug_printf("%s (n_items=%d)\n", __FUNCTION__, brw->cache.n_items);
-
-   /* un-tuned guess.  We've got around 20 state objects for a total of around
-    * 32k, so 1000 of them is around 1.5MB.
-    */
-   if (brw->cache.n_items > 1000)
-      brw_clear_cache(brw, &brw->cache);
-
-   if (brw->surface_cache.n_items > 1000)
-      brw_clear_cache(brw, &brw->surface_cache);
-}
-
-
-static void
-brw_destroy_cache(struct brw_context *brw, struct brw_cache *cache)
-{
-   GLuint i;
-
-   if (BRW_DEBUG & DEBUG_STATE)
-      debug_printf("%s\n", __FUNCTION__);
-
-   brw_clear_cache(brw, cache);
-   for (i = 0; i < BRW_MAX_CACHE; i++) {
-      bo_reference(&cache->last_bo[i], NULL);
-      FREE(cache->name[i]);
-   }
-   FREE(cache->items);
-   cache->items = NULL;
-   cache->size = 0;
-}
-
-
-void
-brw_destroy_caches(struct brw_context *brw)
-{
-   brw_destroy_cache(brw, &brw->cache);
-   brw_destroy_cache(brw, &brw->surface_cache);
-}
diff --git a/src/gallium/drivers/i965/brw_state_debug.c b/src/gallium/drivers/i965/brw_state_debug.c
deleted file mode 100644 (file)
index 049c278..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
-      
-
-
-#include "brw_context.h"
-#include "brw_state.h"
-
-
-struct dirty_bit_map {
-   uint32_t bit;
-   char *name;
-   uint32_t count;
-};
-
-#define DEFINE_BIT(name) {name, #name, 0}
-
-static struct dirty_bit_map mesa_bits[] = {
-   DEFINE_BIT(PIPE_NEW_DEPTH_STENCIL_ALPHA),
-   DEFINE_BIT(PIPE_NEW_RAST),
-   DEFINE_BIT(PIPE_NEW_BLEND),
-   DEFINE_BIT(PIPE_NEW_VIEWPORT),
-   DEFINE_BIT(PIPE_NEW_SAMPLERS),
-   DEFINE_BIT(PIPE_NEW_VERTEX_BUFFER),
-   DEFINE_BIT(PIPE_NEW_VERTEX_ELEMENT),
-   DEFINE_BIT(PIPE_NEW_FRAGMENT_SHADER),
-   DEFINE_BIT(PIPE_NEW_VERTEX_SHADER),
-   DEFINE_BIT(PIPE_NEW_FRAGMENT_CONSTANTS),
-   DEFINE_BIT(PIPE_NEW_VERTEX_CONSTANTS),
-   DEFINE_BIT(PIPE_NEW_CLIP),
-   DEFINE_BIT(PIPE_NEW_INDEX_BUFFER),
-   DEFINE_BIT(PIPE_NEW_INDEX_RANGE),
-   DEFINE_BIT(PIPE_NEW_BLEND_COLOR),
-   DEFINE_BIT(PIPE_NEW_POLYGON_STIPPLE),
-   DEFINE_BIT(PIPE_NEW_FRAMEBUFFER_DIMENSIONS),
-   DEFINE_BIT(PIPE_NEW_DEPTH_BUFFER),
-   DEFINE_BIT(PIPE_NEW_COLOR_BUFFERS),
-   DEFINE_BIT(PIPE_NEW_QUERY),
-   DEFINE_BIT(PIPE_NEW_SCISSOR),
-   DEFINE_BIT(PIPE_NEW_BOUND_TEXTURES),
-   DEFINE_BIT(PIPE_NEW_NR_CBUFS),
-   {0, 0, 0}
-};
-
-static struct dirty_bit_map brw_bits[] = {
-   DEFINE_BIT(BRW_NEW_URB_FENCE),
-   DEFINE_BIT(BRW_NEW_FRAGMENT_PROGRAM),
-   DEFINE_BIT(BRW_NEW_VERTEX_PROGRAM),
-   DEFINE_BIT(BRW_NEW_INPUT_DIMENSIONS),
-   DEFINE_BIT(BRW_NEW_CURBE_OFFSETS),
-   DEFINE_BIT(BRW_NEW_REDUCED_PRIMITIVE),
-   DEFINE_BIT(BRW_NEW_PRIMITIVE),
-   DEFINE_BIT(BRW_NEW_CONTEXT),
-   DEFINE_BIT(BRW_NEW_WM_INPUT_DIMENSIONS),
-   DEFINE_BIT(BRW_NEW_PSP),
-   DEFINE_BIT(BRW_NEW_WM_SURFACES),
-   DEFINE_BIT(BRW_NEW_xxx),
-   DEFINE_BIT(BRW_NEW_INDICES),
-   {0, 0, 0}
-};
-
-static struct dirty_bit_map cache_bits[] = {
-   DEFINE_BIT(CACHE_NEW_CC_VP),
-   DEFINE_BIT(CACHE_NEW_CC_UNIT),
-   DEFINE_BIT(CACHE_NEW_WM_PROG),
-   DEFINE_BIT(CACHE_NEW_SAMPLER_DEFAULT_COLOR),
-   DEFINE_BIT(CACHE_NEW_SAMPLER),
-   DEFINE_BIT(CACHE_NEW_WM_UNIT),
-   DEFINE_BIT(CACHE_NEW_SF_PROG),
-   DEFINE_BIT(CACHE_NEW_SF_VP),
-   DEFINE_BIT(CACHE_NEW_SF_UNIT),
-   DEFINE_BIT(CACHE_NEW_VS_UNIT),
-   DEFINE_BIT(CACHE_NEW_VS_PROG),
-   DEFINE_BIT(CACHE_NEW_GS_UNIT),
-   DEFINE_BIT(CACHE_NEW_GS_PROG),
-   DEFINE_BIT(CACHE_NEW_CLIP_VP),
-   DEFINE_BIT(CACHE_NEW_CLIP_UNIT),
-   DEFINE_BIT(CACHE_NEW_CLIP_PROG),
-   DEFINE_BIT(CACHE_NEW_SURFACE),
-   DEFINE_BIT(CACHE_NEW_SURF_BIND),
-   {0, 0, 0}
-};
-
-
-static void
-brw_update_dirty_count(struct dirty_bit_map *bit_map, int32_t bits)
-{
-   int i;
-
-   for (i = 0; i < 32; i++) {
-      if (bit_map[i].bit == 0)
-        return;
-
-      if (bit_map[i].bit & bits)
-        bit_map[i].count++;
-   }
-}
-
-static void
-brw_print_dirty_count(struct dirty_bit_map *bit_map, int32_t bits)
-{
-   int i;
-
-   for (i = 0; i < 32; i++) {
-      if (bit_map[i].bit == 0)
-        return;
-
-      debug_printf("0x%08x: %12d (%s)\n",
-             bit_map[i].bit, bit_map[i].count, bit_map[i].name);
-   }
-}
-
-void
-brw_update_dirty_counts( unsigned mesa,
-                        unsigned brw,
-                        unsigned cache )
-{
-   static int dirty_count = 0;
-
-   brw_update_dirty_count(mesa_bits, mesa);
-   brw_update_dirty_count(brw_bits, brw);
-   brw_update_dirty_count(cache_bits, cache);
-      if (dirty_count++ % 1000 == 0) {
-        brw_print_dirty_count(mesa_bits, mesa);
-        brw_print_dirty_count(brw_bits, brw);
-        brw_print_dirty_count(cache_bits, cache);
-        debug_printf("\n");
-      }
-}
diff --git a/src/gallium/drivers/i965/brw_state_upload.c b/src/gallium/drivers/i965/brw_state_upload.c
deleted file mode 100644 (file)
index cdbf270..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-       
-
-
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_batchbuffer.h"
-#include "brw_debug.h"
-
-const struct brw_tracked_state *atoms[] =
-{
-/*   &brw_wm_input_sizes, */
-   &brw_vs_prog,
-   &brw_gs_prog, 
-   &brw_clip_prog, 
-   &brw_sf_prog,
-   &brw_wm_prog,
-
-   /* Once all the programs are done, we know how large urb entry
-    * sizes need to be and can decide if we need to change the urb
-    * layout.
-    */
-   &brw_curbe_offsets,
-   &brw_recalculate_urb_fence,
-
-   &brw_cc_vp,
-   &brw_cc_unit,
-
-   &brw_vs_surfaces,           /* must do before unit */
-   /*&brw_wm_constant_surface,*/       /* must do before wm surfaces/bind bo */
-   &brw_wm_surfaces,           /* must do before samplers and unit */
-   &brw_wm_samplers,
-
-   &brw_wm_unit,
-   &brw_sf_vp,
-   &brw_sf_unit,
-   &brw_vs_unit,               /* always required, enabled or not */
-   &brw_clip_unit,
-   &brw_gs_unit,  
-
-   /* Command packets:
-    */
-   &brw_invariant_state,
-   &brw_state_base_address,
-
-   &brw_binding_table_pointers,
-   &brw_blend_constant_color,
-
-   &brw_depthbuffer,
-   &brw_polygon_stipple,
-   &brw_line_stipple,
-
-   &brw_psp_urb_cbs,
-
-   &brw_drawing_rect,
-   &brw_indices,
-   &brw_index_buffer,
-   &brw_vertices,
-
-   &brw_curbe_buffer
-};
-
-
-void brw_init_state( struct brw_context *brw )
-{
-   brw_init_caches(brw);
-}
-
-
-void brw_destroy_state( struct brw_context *brw )
-{
-   brw_destroy_caches(brw);
-   brw_destroy_batch_cache(brw);
-}
-
-/***********************************************************************
- */
-
-static GLboolean check_state( const struct brw_state_flags *a,
-                             const struct brw_state_flags *b )
-{
-   return ((a->mesa & b->mesa) ||
-          (a->brw & b->brw) ||
-          (a->cache & b->cache));
-}
-
-static void accumulate_state( struct brw_state_flags *a,
-                             const struct brw_state_flags *b )
-{
-   a->mesa |= b->mesa;
-   a->brw |= b->brw;
-   a->cache |= b->cache;
-}
-
-
-static void xor_states( struct brw_state_flags *result,
-                            const struct brw_state_flags *a,
-                             const struct brw_state_flags *b )
-{
-   result->mesa = a->mesa ^ b->mesa;
-   result->brw = a->brw ^ b->brw;
-   result->cache = a->cache ^ b->cache;
-}
-
-static void
-brw_clear_validated_bos(struct brw_context *brw)
-{
-   int i;
-
-   /* Clear the last round of validated bos */
-   for (i = 0; i < brw->state.validated_bo_count; i++) {
-      bo_reference(&brw->state.validated_bos[i], NULL);
-   }
-   brw->state.validated_bo_count = 0;
-}
-
-
-/***********************************************************************
- * Emit all state:
- */
-enum pipe_error brw_validate_state( struct brw_context *brw )
-{
-   struct brw_state_flags *state = &brw->state.dirty;
-   GLuint i;
-   int ret;
-
-   brw_clear_validated_bos(brw);
-   brw_add_validated_bo(brw, brw->batch->buf);
-
-   if (brw->flags.always_emit_state) {
-      state->mesa |= ~0;
-      state->brw |= ~0;
-      state->cache |= ~0;
-   }
-
-   if (state->mesa == 0 &&
-       state->cache == 0 &&
-       state->brw == 0)
-      return 0;
-
-   if (brw->state.dirty.brw & BRW_NEW_CONTEXT)
-      brw_clear_batch_cache(brw);
-
-   /* do prepare stage for all atoms */
-   for (i = 0; i < Elements(atoms); i++) {
-      const struct brw_tracked_state *atom = atoms[i];
-
-      if (check_state(state, &atom->dirty)) {
-         if (atom->prepare) {
-            ret = atom->prepare(brw);
-           if (ret)
-              return ret;
-        }
-      }
-   }
-
-   /* Make sure that the textures which are referenced by the current
-    * brw fragment program are actually present/valid.
-    * If this fails, we can experience GPU lock-ups.
-    */
-   {
-      const struct brw_fragment_shader *fp = brw->curr.fragment_shader;
-      if (fp) {
-         assert(fp->info.file_max[TGSI_FILE_SAMPLER] < (int)brw->curr.num_samplers);
-        /*assert(fp->info.texture_max <= brw->curr.num_textures);*/
-      }
-   }
-
-   return 0;
-}
-
-
-enum pipe_error brw_upload_state(struct brw_context *brw)
-{
-   struct brw_state_flags *state = &brw->state.dirty;
-   int ret;
-   int i;
-
-   brw_clear_validated_bos(brw);
-
-   if (BRW_DEBUG) {
-      /* Debug version which enforces various sanity checks on the
-       * state flags which are generated and checked to help ensure
-       * state atoms are ordered correctly in the list.
-       */
-      struct brw_state_flags examined, prev;      
-      memset(&examined, 0, sizeof(examined));
-      prev = *state;
-
-      for (i = 0; i < Elements(atoms); i++) {
-        const struct brw_tracked_state *atom = atoms[i];
-        struct brw_state_flags generated;
-
-        assert(atom->dirty.mesa ||
-               atom->dirty.brw ||
-               atom->dirty.cache);
-
-        if (check_state(state, &atom->dirty)) {
-           if (atom->emit) {
-              ret = atom->emit( brw );
-              if (ret)
-                 return ret;
-           }
-        }
-
-        accumulate_state(&examined, &atom->dirty);
-
-        /* generated = (prev ^ state)
-         * if (examined & generated)
-         *     fail;
-         */
-        xor_states(&generated, &prev, state);
-        assert(!check_state(&examined, &generated));
-        prev = *state;
-      }
-   }
-   else {
-      for (i = 0; i < Elements(atoms); i++) {   
-        const struct brw_tracked_state *atom = atoms[i];
-
-        if (check_state(state, &atom->dirty)) {
-           if (atom->emit) {
-              ret = atom->emit( brw );
-              if (ret)
-                 return ret;
-           }
-        }
-      }
-   }
-
-   if (BRW_DEBUG & DEBUG_STATE) {
-      brw_update_dirty_counts( state->mesa, 
-                              state->brw,
-                              state->cache );
-   }
-   
-   /* Clear dirty flags:
-    */
-   memset(state, 0, sizeof(*state));
-   return 0;
-}
diff --git a/src/gallium/drivers/i965/brw_structs.h b/src/gallium/drivers/i965/brw_structs.h
deleted file mode 100644 (file)
index b0d75b4..0000000
+++ /dev/null
@@ -1,1776 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-
-#ifndef BRW_STRUCTS_H
-#define BRW_STRUCTS_H
-
-#include "brw_types.h"
-
-/** Number of general purpose registers (VS, WM, etc) */
-#define BRW_MAX_GRF 128
-
-/** Number of message register file registers */
-#define BRW_MAX_MRF 16
-
-
-/* Command packets:
- */
-struct header 
-{
-   GLuint length:16; 
-   GLuint opcode:16; 
-};
-
-
-union header_union
-{
-   struct header bits;
-   GLuint dword;
-};
-
-struct brw_3d_control
-{   
-   struct 
-   {
-      GLuint length:8;
-      GLuint notify_enable:1;
-      GLuint pad:3;
-      GLuint wc_flush_enable:1; 
-      GLuint depth_stall_enable:1; 
-      GLuint operation:2; 
-      GLuint opcode:16; 
-   } header;
-   
-   struct
-   {
-      GLuint pad:2;
-      GLuint dest_addr_type:1; 
-      GLuint dest_addr:29; 
-   } dest;
-   
-   GLuint dword2;   
-   GLuint dword3;   
-};
-
-
-struct brw_3d_primitive
-{
-   struct
-   {
-      GLuint length:8; 
-      GLuint pad:2;
-      GLuint topology:5; 
-      GLuint indexed:1; 
-      GLuint opcode:16; 
-   } header;
-
-   GLuint verts_per_instance;  
-   GLuint start_vert_location;  
-   GLuint instance_count;  
-   GLuint start_instance_location;  
-   GLuint base_vert_location;  
-};
-
-/* These seem to be passed around as function args, so it works out
- * better to keep them as #defines:
- */
-#define BRW_FLUSH_READ_CACHE           0x1
-#define BRW_FLUSH_STATE_CACHE          0x2
-#define BRW_INHIBIT_FLUSH_RENDER_CACHE 0x4
-#define BRW_FLUSH_SNAPSHOT_COUNTERS    0x8
-
-struct brw_mi_flush
-{
-   GLuint flags:4;
-   GLuint pad:12;
-   GLuint opcode:16;
-};
-
-struct brw_vf_statistics
-{
-   GLuint statistics_enable:1;
-   GLuint pad:15;
-   GLuint opcode:16;
-};
-
-
-
-struct brw_binding_table_pointers
-{
-   struct header header;
-   GLuint vs; 
-   GLuint gs; 
-   GLuint clp; 
-   GLuint sf; 
-   GLuint wm; 
-};
-
-
-struct brw_blend_constant_color
-{
-   struct header header;
-   GLfloat blend_constant_color[4];  
-};
-
-
-struct brw_depthbuffer
-{
-   union header_union header;
-   
-   union {
-      struct {
-        GLuint pitch:18; 
-        GLuint format:3; 
-        GLuint pad:2;
-        GLuint software_tiled_rendering_mode:2;
-        GLuint depth_offset_disable:1; 
-        GLuint tile_walk:1; 
-        GLuint tiled_surface:1; 
-        GLuint pad2:1;
-        GLuint surface_type:3; 
-      } bits;
-      GLuint dword;
-   } dword1;
-   
-   GLuint dword2_base_addr; 
-   union {
-      struct {
-        GLuint pad:1;
-        GLuint mipmap_layout:1; 
-        GLuint lod:4; 
-        GLuint width:13; 
-        GLuint height:13; 
-      } bits;
-      GLuint dword;
-   } dword3;
-
-   union {
-      struct {
-        GLuint pad:10;
-        GLuint min_array_element:11; 
-        GLuint depth:11; 
-      } bits;
-      GLuint dword;
-   } dword4;
-};
-
-struct brw_depthbuffer_g4x
-{
-   union header_union header;
-   
-   union {
-      struct {
-        GLuint pitch:18; 
-        GLuint format:3; 
-        GLuint pad:2;
-        GLuint software_tiled_rendering_mode:2;
-        GLuint depth_offset_disable:1; 
-        GLuint tile_walk:1; 
-        GLuint tiled_surface:1; 
-        GLuint pad2:1;
-        GLuint surface_type:3; 
-      } bits;
-      GLuint dword;
-   } dword1;
-   
-   GLuint dword2_base_addr; 
-   union {
-      struct {
-        GLuint pad:1;
-        GLuint mipmap_layout:1; 
-        GLuint lod:4; 
-        GLuint width:13; 
-        GLuint height:13; 
-      } bits;
-      GLuint dword;
-   } dword3;
-
-   union {
-      struct {
-        GLuint pad:10;
-        GLuint min_array_element:11; 
-        GLuint depth:11; 
-      } bits;
-      GLuint dword;
-   } dword4;
-
-   union {
-      struct {
-         GLuint xoffset:16;
-         GLuint yoffset:16;
-      } bits;
-      GLuint dword;
-   } dword5;   /* NEW in Integrated Graphics Device */
-};
-
-struct brw_drawrect
-{
-   struct header header;
-   GLuint xmin:16; 
-   GLuint ymin:16; 
-   GLuint xmax:16; 
-   GLuint ymax:16; 
-   GLuint xorg:16;  
-   GLuint yorg:16;  
-};
-
-
-
-
-struct brw_global_depth_offset_clamp
-{
-   struct header header;
-   GLfloat depth_offset_clamp;  
-};
-
-struct brw_indexbuffer
-{   
-   union {
-      struct
-      {
-        GLuint length:8; 
-        GLuint index_format:2; 
-        GLuint cut_index_enable:1; 
-        GLuint pad:5; 
-        GLuint opcode:16; 
-      } bits;
-      GLuint dword;
-
-   } header;
-
-   GLuint buffer_start; 
-   GLuint buffer_end; 
-};
-
-/* NEW in Integrated Graphics Device */
-struct brw_aa_line_parameters
-{
-   struct header header;
-
-   struct {
-      GLuint aa_coverage_slope:8;
-      GLuint pad0:8;
-      GLuint aa_coverage_bias:8;
-      GLuint pad1:8;
-   } bits0;
-
-   struct {
-      GLuint aa_coverage_endcap_slope:8;
-      GLuint pad0:8;
-      GLuint aa_coverage_endcap_bias:8;
-      GLuint pad1:8;
-   } bits1;
-};
-
-struct brw_line_stipple
-{   
-   struct header header;
-  
-   struct
-   {
-      GLuint pattern:16; 
-      GLuint pad:16;
-   } bits0;
-   
-   struct
-   {
-      GLuint repeat_count:9; 
-      GLuint pad:7;
-      GLuint inverse_repeat_count:16; 
-   } bits1;
-};
-
-
-struct brw_pipelined_state_pointers
-{
-   struct header header;
-   
-   struct {
-      GLuint pad:5;
-      GLuint offset:27; /* Offset from GENERAL_STATE_BASE */
-   } vs;
-   
-   struct
-   {
-      GLuint enable:1;
-      GLuint pad:4;
-      GLuint offset:27; /* Offset from GENERAL_STATE_BASE */
-   } gs;
-   
-   struct
-   {
-      GLuint enable:1;
-      GLuint pad:4;
-      GLuint offset:27; /* Offset from GENERAL_STATE_BASE */
-   } clp;
-   
-   struct
-   {
-      GLuint pad:5;
-      GLuint offset:27; /* Offset from GENERAL_STATE_BASE */
-   } sf;
-
-   struct
-   {
-      GLuint pad:5;
-      GLuint offset:27; /* Offset from GENERAL_STATE_BASE */
-   } wm;
-   
-   struct
-   {
-      GLuint pad:5;
-      GLuint offset:27; /* Offset from GENERAL_STATE_BASE. KW: check me! */
-   } cc;
-};
-
-
-struct brw_polygon_stipple_offset
-{
-   struct header header;
-
-   struct {
-      GLuint y_offset:5; 
-      GLuint pad:3;
-      GLuint x_offset:5; 
-      GLuint pad0:19;
-   } bits0;
-};
-
-
-
-struct brw_polygon_stipple
-{
-   struct header header;
-   GLuint stipple[32];
-};
-
-
-
-struct brw_pipeline_select
-{
-   struct
-   {
-      GLuint pipeline_select:1;   
-      GLuint pad:15;
-      GLuint opcode:16;   
-   } header;
-};
-
-
-struct brw_pipe_control
-{
-   struct
-   {
-      GLuint length:8;
-      GLuint notify_enable:1;
-      GLuint texture_cache_flush_enable:1;
-      GLuint indirect_state_pointers_disable:1;
-      GLuint instruction_state_cache_flush_enable:1;
-      GLuint write_cache_flush_enable:1;
-      GLuint depth_stall_enable:1;
-      GLuint post_sync_operation:2;
-
-      GLuint opcode:16;
-   } header;
-
-   struct
-   {
-      GLuint pad:2;
-      GLuint dest_addr_type:1;
-      GLuint dest_addr:29;
-   } bits1;
-
-   GLuint data0;
-   GLuint data1;
-};
-
-
-struct brw_urb_fence
-{
-   struct
-   {
-      GLuint length:8;   
-      GLuint vs_realloc:1;   
-      GLuint gs_realloc:1;   
-      GLuint clp_realloc:1;   
-      GLuint sf_realloc:1;   
-      GLuint vfe_realloc:1;   
-      GLuint cs_realloc:1;   
-      GLuint pad:2;
-      GLuint opcode:16;   
-   } header;
-
-   struct
-   {
-      GLuint vs_fence:10;  
-      GLuint gs_fence:10;  
-      GLuint clp_fence:10;  
-      GLuint pad:2;
-   } bits0;
-
-   struct
-   {
-      GLuint sf_fence:10;  
-      GLuint vf_fence:10;  
-      GLuint cs_fence:11;  
-      GLuint pad:1;
-   } bits1;
-};
-
-struct brw_cs_urb_state
-{
-   struct header header;
-
-   struct
-   {
-      GLuint nr_urb_entries:3;   
-      GLuint pad:1;
-      GLuint urb_entry_size:5;   
-      GLuint pad0:23;
-   } bits0;
-};
-
-struct brw_constant_buffer
-{
-   struct
-   {
-      GLuint length:8;   
-      GLuint valid:1;   
-      GLuint pad:7;
-      GLuint opcode:16;   
-   } header;
-
-   struct
-   {
-      GLuint buffer_length:6;   
-      GLuint buffer_address:26;  
-   } bits0;
-};
-
-struct brw_state_base_address
-{
-   struct header header;
-
-   struct
-   {
-      GLuint modify_enable:1;
-      GLuint pad:4;
-      GLuint general_state_address:27;  
-   } bits0;
-
-   struct
-   {
-      GLuint modify_enable:1;
-      GLuint pad:4;
-      GLuint surface_state_address:27;  
-   } bits1;
-
-   struct
-   {
-      GLuint modify_enable:1;
-      GLuint pad:4;
-      GLuint indirect_object_state_address:27;  
-   } bits2;
-
-   struct
-   {
-      GLuint modify_enable:1;
-      GLuint pad:11;
-      GLuint general_state_upper_bound:20;  
-   } bits3;
-
-   struct
-   {
-      GLuint modify_enable:1;
-      GLuint pad:11;
-      GLuint indirect_object_state_upper_bound:20;  
-   } bits4;
-};
-
-struct brw_state_prefetch
-{
-   struct header header;
-
-   struct
-   {
-      GLuint prefetch_count:3;   
-      GLuint pad:3;
-      GLuint prefetch_pointer:26;  
-   } bits0;
-};
-
-struct brw_system_instruction_pointer
-{
-   struct header header;
-
-   struct
-   {
-      GLuint pad:4;
-      GLuint system_instruction_pointer:28;  
-   } bits0;
-};
-
-
-
-
-/* State structs for the various fixed function units:
- */
-
-
-struct thread0
-{
-   GLuint pad0:1;
-   GLuint grf_reg_count:3; 
-   GLuint pad1:2;
-   GLuint kernel_start_pointer:26; /* Offset from GENERAL_STATE_BASE */
-};
-
-struct thread1
-{
-   GLuint ext_halt_exception_enable:1; 
-   GLuint sw_exception_enable:1; 
-   GLuint mask_stack_exception_enable:1; 
-   GLuint timeout_exception_enable:1; 
-   GLuint illegal_op_exception_enable:1; 
-   GLuint pad0:3;
-   GLuint depth_coef_urb_read_offset:6;        /* WM only */
-   GLuint pad1:2;
-   GLuint floating_point_mode:1; 
-   GLuint thread_priority:1; 
-   GLuint binding_table_entry_count:8; 
-   GLuint pad3:5;
-   GLuint single_program_flow:1; 
-};
-
-struct thread2
-{
-   GLuint per_thread_scratch_space:4; 
-   GLuint pad0:6;
-   GLuint scratch_space_base_pointer:22; 
-};
-
-   
-struct thread3
-{
-   GLuint dispatch_grf_start_reg:4; 
-   GLuint urb_entry_read_offset:6; 
-   GLuint pad0:1;
-   GLuint urb_entry_read_length:6; 
-   GLuint pad1:1;
-   GLuint const_urb_entry_read_offset:6; 
-   GLuint pad2:1;
-   GLuint const_urb_entry_read_length:6; 
-   GLuint pad3:1;
-};
-
-
-
-struct brw_clip_unit_state
-{
-   struct thread0 thread0;
-   struct
-   {
-      GLuint pad0:7;
-      GLuint sw_exception_enable:1;
-      GLuint pad1:3;
-      GLuint mask_stack_exception_enable:1;
-      GLuint pad2:1;
-      GLuint illegal_op_exception_enable:1;
-      GLuint pad3:2;
-      GLuint floating_point_mode:1;
-      GLuint thread_priority:1;
-      GLuint binding_table_entry_count:8;
-      GLuint pad4:5;
-      GLuint single_program_flow:1;
-   } thread1;
-
-   struct thread2 thread2;
-   struct thread3 thread3;
-
-   struct
-   {
-      GLuint pad0:9;
-      GLuint gs_output_stats:1; /* not always */
-      GLuint stats_enable:1; 
-      GLuint nr_urb_entries:7; 
-      GLuint pad1:1;
-      GLuint urb_entry_allocation_size:5; 
-      GLuint pad2:1;
-      GLuint max_threads:5;    /* may be less */
-      GLuint pad3:2;
-   } thread4;   
-      
-   struct
-   {
-      GLuint pad0:13;
-      GLuint clip_mode:3; 
-      GLuint userclip_enable_flags:8; 
-      GLuint userclip_must_clip:1; 
-      GLuint negative_w_clip_test:1;
-      GLuint guard_band_enable:1; 
-      GLuint viewport_z_clip_enable:1; 
-      GLuint viewport_xy_clip_enable:1; 
-      GLuint vertex_position_space:1; 
-      GLuint api_mode:1; 
-      GLuint pad2:1;
-   } clip5;
-   
-   struct
-   {
-      GLuint pad0:5;
-      GLuint clipper_viewport_state_ptr:27; 
-   } clip6;
-
-   
-   GLfloat viewport_xmin;  
-   GLfloat viewport_xmax;  
-   GLfloat viewport_ymin;  
-   GLfloat viewport_ymax;  
-};
-
-struct gen6_blend_state
-{
-   struct {
-      GLuint dest_blend_factor:5;
-      GLuint source_blend_factor:5;
-      GLuint pad3:1;
-      GLuint blend_func:3;
-      GLuint pad2:1;
-      GLuint ia_dest_blend_factor:5;
-      GLuint ia_source_blend_factor:5;
-      GLuint pad1:1;
-      GLuint ia_blend_func:3;
-      GLuint pad0:1;
-      GLuint ia_blend_enable:1;
-      GLuint blend_enable:1;
-   } blend0;
-
-   struct {
-      GLuint post_blend_clamp_enable:1;
-      GLuint pre_blend_clamp_enable:1;
-      GLuint clamp_range:2;
-      GLuint pad0:4;
-      GLuint x_dither_offset:2;
-      GLuint y_dither_offset:2;
-      GLuint dither_enable:1;
-      GLuint alpha_test_func:3;
-      GLuint alpha_test_enable:1;
-      GLuint pad1:1;
-      GLuint logic_op_func:4;
-      GLuint logic_op_enable:1;
-      GLuint pad2:1;
-      GLuint write_disable_b:1;
-      GLuint write_disable_g:1;
-      GLuint write_disable_r:1;
-      GLuint write_disable_a:1;
-      GLuint pad3:1;
-      GLuint alpha_to_coverage_dither:1;
-      GLuint alpha_to_one:1;
-      GLuint alpha_to_coverage:1;
-   } blend1;
-};
-
-struct gen6_color_calc_state
-{
-   struct {
-      GLuint alpha_test_format:1;
-      GLuint pad0:14;
-      GLuint round_disable:1;
-      GLuint bf_stencil_ref:8;
-      GLuint stencil_ref:8;
-   } cc0;
-
-   union {
-      GLfloat alpha_ref_f;
-      struct {
-        GLuint ui:8;
-        GLuint pad0:24;
-      } alpha_ref_fi;
-   } cc1;
-
-   GLfloat constant_r;
-   GLfloat constant_g;
-   GLfloat constant_b;
-   GLfloat constant_a;
-};
-
-struct gen6_depth_stencil_state
-{
-   struct {
-      GLuint pad0:3;
-      GLuint bf_stencil_pass_depth_pass_op:3;
-      GLuint bf_stencil_pass_depth_fail_op:3;
-      GLuint bf_stencil_fail_op:3;
-      GLuint bf_stencil_func:3;
-      GLuint bf_stencil_enable:1;
-      GLuint pad1:2;
-      GLuint stencil_write_enable:1;
-      GLuint stencil_pass_depth_pass_op:3;
-      GLuint stencil_pass_depth_fail_op:3;
-      GLuint stencil_fail_op:3;
-      GLuint stencil_func:3;
-      GLuint stencil_enable:1;
-   } ds0;
-
-   struct {
-      GLuint bf_stencil_write_mask:8;
-      GLuint bf_stencil_test_mask:8;
-      GLuint stencil_write_mask:8;
-      GLuint stencil_test_mask:8;
-   } ds1;
-
-   struct {
-      GLuint pad0:26;
-      GLuint depth_write_enable:1;
-      GLuint depth_test_func:3;
-      GLuint pad1:1;
-      GLuint depth_test_enable:1;
-   } ds2;
-};
-
-struct brw_cc_unit_state
-{
-   struct brw_cc0
-   {
-      GLuint pad0:3;
-      GLuint bf_stencil_pass_depth_pass_op:3; 
-      GLuint bf_stencil_pass_depth_fail_op:3; 
-      GLuint bf_stencil_fail_op:3; 
-      GLuint bf_stencil_func:3; 
-      GLuint bf_stencil_enable:1; 
-      GLuint pad1:2;
-      GLuint stencil_write_enable:1; 
-      GLuint stencil_pass_depth_pass_op:3; 
-      GLuint stencil_pass_depth_fail_op:3; 
-      GLuint stencil_fail_op:3; 
-      GLuint stencil_func:3; 
-      GLuint stencil_enable:1; 
-   } cc0;
-
-   
-   struct brw_cc1
-   {
-      GLuint bf_stencil_ref:8; 
-      GLuint stencil_write_mask:8; 
-      GLuint stencil_test_mask:8; 
-      GLuint stencil_ref:8; 
-   } cc1;
-
-   
-   struct brw_cc2
-   {
-      GLuint logicop_enable:1; 
-      GLuint pad0:10;
-      GLuint depth_write_enable:1; 
-      GLuint depth_test_function:3; 
-      GLuint depth_test:1; 
-      GLuint bf_stencil_write_mask:8; 
-      GLuint bf_stencil_test_mask:8; 
-   } cc2;
-
-   
-   struct brw_cc3
-   {
-      GLuint pad0:8;
-      GLuint alpha_test_func:3; 
-      GLuint alpha_test:1; 
-      GLuint blend_enable:1; 
-      GLuint ia_blend_enable:1; 
-      GLuint pad1:1;
-      GLuint alpha_test_format:1;
-      GLuint pad2:16;
-   } cc3;
-   
-   struct brw_cc4
-   {
-      GLuint pad0:5; 
-      GLuint cc_viewport_state_offset:27; /* Offset from GENERAL_STATE_BASE */
-   } cc4;
-   
-   struct brw_cc5
-   {
-      GLuint pad0:2;
-      GLuint ia_dest_blend_factor:5; 
-      GLuint ia_src_blend_factor:5; 
-      GLuint ia_blend_function:3; 
-      GLuint statistics_enable:1; 
-      GLuint logicop_func:4; 
-      GLuint pad1:11;
-      GLuint dither_enable:1; 
-   } cc5;
-
-   struct brw_cc6
-   {
-      GLuint clamp_post_alpha_blend:1; 
-      GLuint clamp_pre_alpha_blend:1; 
-      GLuint clamp_range:2; 
-      GLuint pad0:11;
-      GLuint y_dither_offset:2; 
-      GLuint x_dither_offset:2; 
-      GLuint dest_blend_factor:5; 
-      GLuint src_blend_factor:5; 
-      GLuint blend_function:3; 
-   } cc6;
-
-   struct brw_cc7 {
-      union {
-        GLfloat f;  
-        GLubyte ub[4];
-      } alpha_ref;
-   } cc7;
-};
-
-
-
-struct brw_sf_unit_state
-{
-   struct thread0 thread0;
-   struct thread1 thread1;
-   struct thread2 thread2;
-   struct thread3 thread3;
-
-   struct
-   {
-      GLuint pad0:10;
-      GLuint stats_enable:1; 
-      GLuint nr_urb_entries:7; 
-      GLuint pad1:1;
-      GLuint urb_entry_allocation_size:5; 
-      GLuint pad2:1;
-      GLuint max_threads:6; 
-      GLuint pad3:1;
-   } thread4;   
-
-   struct
-   {
-      GLuint front_winding:1; 
-      GLuint viewport_transform:1; 
-      GLuint pad0:3;
-      GLuint sf_viewport_state_offset:27; /* Offset from GENERAL_STATE_BASE */
-   } sf5;
-   
-   struct
-   {
-      GLuint pad0:9;
-      GLuint dest_org_vbias:4; 
-      GLuint dest_org_hbias:4; 
-      GLuint scissor:1; 
-      GLuint disable_2x2_trifilter:1; 
-      GLuint disable_zero_pix_trifilter:1; 
-      GLuint point_rast_rule:2; 
-      GLuint line_endcap_aa_region_width:2; 
-      GLuint line_width:4; 
-      GLuint fast_scissor_disable:1; 
-      GLuint cull_mode:2; 
-      GLuint aa_enable:1; 
-   } sf6;
-
-   struct
-   {
-      GLuint point_size:11; 
-      GLuint use_point_size_state:1; 
-      GLuint subpixel_precision:1; 
-      GLuint sprite_point:1; 
-      GLuint pad0:10;
-      GLuint aa_line_distance_mode:1;
-      GLuint trifan_pv:2; 
-      GLuint linestrip_pv:2; 
-      GLuint tristrip_pv:2; 
-      GLuint line_last_pixel_enable:1; 
-   } sf7;
-
-};
-
-struct gen6_scissor_rect
-{
-   GLuint xmin:16;
-   GLuint ymin:16;
-   GLuint xmax:16;
-   GLuint ymax:16;
-};
-
-struct brw_gs_unit_state
-{
-   struct thread0 thread0;
-   struct thread1 thread1;
-   struct thread2 thread2;
-   struct thread3 thread3;
-
-   struct
-   {
-      GLuint pad0:8;
-      GLuint rendering_enable:1; /* for Ironlake */
-      GLuint pad4:1;
-      GLuint stats_enable:1; 
-      GLuint nr_urb_entries:7; 
-      GLuint pad1:1;
-      GLuint urb_entry_allocation_size:5; 
-      GLuint pad2:1;
-      GLuint max_threads:5; 
-      GLuint pad3:2;
-   } thread4;   
-      
-   struct
-   {
-      GLuint sampler_count:3; 
-      GLuint pad0:2;
-      GLuint sampler_state_pointer:27; 
-   } gs5;
-
-   
-   struct
-   {
-      GLuint max_vp_index:4; 
-      GLuint pad0:12;
-      GLuint svbi_post_inc_value:10;
-      GLuint pad1:1;
-      GLuint svbi_post_inc_enable:1;
-      GLuint svbi_payload:1;
-      GLuint discard_adjaceny:1;
-      GLuint reorder_enable:1; 
-      GLuint pad2:1;
-   } gs6;
-};
-
-
-struct brw_vs_unit_state
-{
-   struct thread0 thread0;
-   struct thread1 thread1;
-   struct thread2 thread2;
-   struct thread3 thread3;
-   
-   struct
-   {
-      GLuint pad0:10;
-      GLuint stats_enable:1; 
-      GLuint nr_urb_entries:7; 
-      GLuint pad1:1;
-      GLuint urb_entry_allocation_size:5; 
-      GLuint pad2:1;
-      GLuint max_threads:6; 
-      GLuint pad3:1;
-   } thread4;   
-
-   struct
-   {
-      GLuint sampler_count:3; 
-      GLuint pad0:2;
-      GLuint sampler_state_pointer:27; 
-   } vs5;
-
-   struct
-   {
-      GLuint vs_enable:1; 
-      GLuint vert_cache_disable:1; 
-      GLuint pad0:30;
-   } vs6;
-};
-
-
-struct brw_wm_unit_state
-{
-   struct thread0 thread0;
-   struct thread1 thread1;
-   struct thread2 thread2;
-   struct thread3 thread3;
-   
-   struct {
-      GLuint stats_enable:1; 
-      GLuint depth_buffer_clear:1;
-      GLuint sampler_count:3; 
-      GLuint sampler_state_pointer:27; 
-   } wm4;
-   
-   struct
-   {
-      GLuint enable_8_pix:1; 
-      GLuint enable_16_pix:1; 
-      GLuint enable_32_pix:1; 
-      GLuint enable_con_32_pix:1;
-      GLuint enable_con_64_pix:1;
-      GLuint pad0:5;
-      GLuint legacy_global_depth_bias:1; 
-      GLuint line_stipple:1; 
-      GLuint depth_offset:1; 
-      GLuint polygon_stipple:1; 
-      GLuint line_aa_region_width:2; 
-      GLuint line_endcap_aa_region_width:2; 
-      GLuint early_depth_test:1; 
-      GLuint thread_dispatch_enable:1; 
-      GLuint program_uses_depth:1; 
-      GLuint program_computes_depth:1; 
-      GLuint program_uses_killpixel:1; 
-      GLuint legacy_line_rast: 1; 
-      GLuint transposed_urb_read_enable:1; 
-      GLuint max_threads:7; 
-   } wm5;
-   
-   GLfloat global_depth_offset_constant;  
-   GLfloat global_depth_offset_scale;   
-   
-   /* for Ironlake only */
-   struct {
-      GLuint pad0:1;
-      GLuint grf_reg_count_1:3; 
-      GLuint pad1:2;
-      GLuint kernel_start_pointer_1:26;
-   } wm8;       
-
-   struct {
-      GLuint pad0:1;
-      GLuint grf_reg_count_2:3; 
-      GLuint pad1:2;
-      GLuint kernel_start_pointer_2:26;
-   } wm9;       
-
-   struct {
-      GLuint pad0:1;
-      GLuint grf_reg_count_3:3; 
-      GLuint pad1:2;
-      GLuint kernel_start_pointer_3:26;
-   } wm10;       
-};
-
-struct brw_sampler_default_color {
-   GLfloat color[4];
-};
-
-struct gen5_sampler_default_color {
-   uint8_t ub[4];
-   float f[4];
-   uint16_t hf[4];
-   uint16_t us[4];
-   int16_t s[4];
-   uint8_t b[4];
-};
-
-struct brw_sampler_state
-{
-   
-   struct brw_ss0
-   {
-      GLuint shadow_function:3; 
-      GLuint lod_bias:11; 
-      GLuint min_filter:3; 
-      GLuint mag_filter:3; 
-      GLuint mip_filter:2; 
-      GLuint base_level:5; 
-      GLuint min_mag_neq:1;
-      GLuint lod_preclamp:1; 
-      GLuint default_color_mode:1; 
-      GLuint pad0:1;
-      GLuint disable:1; 
-   } ss0;
-
-   struct brw_ss1
-   {
-      GLuint r_wrap_mode:3; 
-      GLuint t_wrap_mode:3; 
-      GLuint s_wrap_mode:3; 
-      GLuint cube_control_mode:1;
-      GLuint pad:2;
-      GLuint max_lod:10; 
-      GLuint min_lod:10; 
-   } ss1;
-
-   
-   struct brw_ss2
-   {
-      GLuint pad:5;
-      GLuint default_color_pointer:27; 
-   } ss2;
-   
-   struct brw_ss3
-   {
-      GLuint non_normalized_coord:1;
-      GLuint pad:12;
-      GLuint address_round:6;
-      GLuint max_aniso:3; 
-      GLuint chroma_key_mode:1; 
-      GLuint chroma_key_index:2; 
-      GLuint chroma_key_enable:1; 
-      GLuint monochrome_filter_width:3; 
-      GLuint monochrome_filter_height:3; 
-   } ss3;
-};
-
-
-struct brw_clipper_viewport
-{
-   GLfloat xmin;  
-   GLfloat xmax;  
-   GLfloat ymin;  
-   GLfloat ymax;  
-};
-
-struct brw_cc_viewport
-{
-   GLfloat min_depth;  
-   GLfloat max_depth;  
-};
-
-struct brw_sf_viewport
-{
-   struct {
-      GLfloat m00;  
-      GLfloat m11;  
-      GLfloat m22;  
-      GLfloat m30;  
-      GLfloat m31;  
-      GLfloat m32;  
-   } viewport;
-
-   /* scissor coordinates are inclusive */
-   struct {
-      GLshort xmin;
-      GLshort ymin;
-      GLshort xmax;
-      GLshort ymax;
-   } scissor;
-};
-
-struct gen6_sf_viewport {
-   GLfloat m00;
-   GLfloat m11;
-   GLfloat m22;
-   GLfloat m30;
-   GLfloat m31;
-   GLfloat m32;
-};
-
-/* Documented in the subsystem/shared-functions/sampler chapter...
- */
-struct brw_surface_state
-{
-   struct brw_surf_ss0 {
-      GLuint cube_pos_z:1; 
-      GLuint cube_neg_z:1; 
-      GLuint cube_pos_y:1; 
-      GLuint cube_neg_y:1; 
-      GLuint cube_pos_x:1; 
-      GLuint cube_neg_x:1; 
-      GLuint pad:2;
-      /* Required on gen6 for surfaces accessed through render cache messages.
-       */
-      GLuint render_cache_read_write:1;
-      /* Ironlake and newer: instead of replicating one of the texels */
-      GLuint cube_corner_average:1;
-      GLuint mipmap_layout_mode:1; 
-      GLuint vert_line_stride_ofs:1; 
-      GLuint vert_line_stride:1; 
-      GLuint color_blend:1; 
-      GLuint writedisable_blue:1; 
-      GLuint writedisable_green:1; 
-      GLuint writedisable_red:1; 
-      GLuint writedisable_alpha:1; 
-      GLuint surface_format:9;     /**< BRW_SURFACEFORMAT_x */
-      GLuint data_return_format:1; 
-      GLuint pad0:1;
-      GLuint surface_type:3;       /**< BRW_SURFACE_1D/2D/3D/CUBE */
-   } ss0;
-   
-   struct brw_surf_ss1 {
-      GLuint base_addr;  
-   } ss1;
-   
-   struct brw_surf_ss2 {
-      GLuint pad:2;
-      GLuint mip_count:4; 
-      GLuint width:13; 
-      GLuint height:13; 
-   } ss2;
-
-   struct brw_surf_ss3 {
-      GLuint tile_walk:1; 
-      GLuint tiled_surface:1; 
-      GLuint pad:1; 
-      GLuint pitch:18; 
-      GLuint depth:11; 
-   } ss3;
-   
-   struct brw_surf_ss4 {
-      GLuint multisample_position_palette_index:3;
-      GLuint pad1:1;
-      GLuint num_multisamples:3;
-      GLuint pad0:1;
-      GLuint render_target_view_extent:9;
-      GLuint min_array_elt:11;
-      GLuint min_lod:4; 
-   } ss4;
-
-   struct brw_surf_ss5 {
-      GLuint pad1:16;
-      GLuint llc_mapping:1;
-      GLuint mlc_mapping:1;
-      GLuint gfdt:1;
-      GLuint gfdt_src:1;
-      GLuint y_offset:4;
-      GLuint pad0:1;
-      GLuint x_offset:7;
-   } ss5;   /* New in G4X */
-
-};
-
-
-
-struct brw_vertex_buffer_state
-{
-   struct {
-      GLuint pitch:11; 
-      GLuint pad:15;
-      GLuint access_type:1; 
-      GLuint vb_index:5; 
-   } vb0;
-   
-   GLuint start_addr; 
-   GLuint max_index;   
-#if 1
-   GLuint instance_data_step_rate; /* not included for sequential/random vertices? */
-#endif
-};
-
-#define BRW_VBP_MAX 17
-
-struct brw_vb_array_state {
-   struct header header;
-   struct brw_vertex_buffer_state vb[BRW_VBP_MAX];
-};
-
-
-struct brw_vertex_element_state
-{
-   struct
-   {
-      GLuint src_offset:11; 
-      GLuint pad:5;
-      GLuint src_format:9; 
-      GLuint pad0:1;
-      GLuint valid:1; 
-      GLuint vertex_buffer_index:5; 
-   } ve0;
-
-   struct
-   {
-      GLuint dst_offset:8; 
-      GLuint pad:8;
-      GLuint vfcomponent3:4; 
-      GLuint vfcomponent2:4; 
-      GLuint vfcomponent1:4; 
-      GLuint vfcomponent0:4; 
-   } ve1;
-};
-
-#define BRW_VEP_MAX 18
-
-struct brw_vertex_element_packet {
-   struct header header;
-   struct brw_vertex_element_state ve[BRW_VEP_MAX]; /* note: less than _TNL_ATTRIB_MAX */
-};
-
-
-struct brw_urb_immediate {
-   GLuint opcode:4;
-   GLuint offset:6;
-   GLuint swizzle_control:2; 
-   GLuint pad:1;
-   GLuint allocate:1;
-   GLuint used:1;
-   GLuint complete:1;
-   GLuint response_length:4;
-   GLuint msg_length:4;
-   GLuint msg_target:4;
-   GLuint pad1:3;
-   GLuint end_of_thread:1;
-};
-
-/* Instruction format for the execution units:
- */
-struct brw_instruction
-{
-   struct 
-   {
-      GLuint opcode:7;
-      GLuint pad:1;
-      GLuint access_mode:1;
-      GLuint mask_control:1;
-      GLuint dependency_control:2;
-      GLuint compression_control:2;
-      GLuint thread_control:2;
-      GLuint predicate_control:4;
-      GLuint predicate_inverse:1;
-      GLuint execution_size:3;
-      GLuint destreg__conditionalmod:4; /* destreg - send, conditionalmod - others */
-      GLuint acc_wr_control:1;
-      GLuint cmpt_control:1;
-      GLuint debug_control:1;
-      GLuint saturate:1;
-   } header;
-
-   union {
-      struct
-      {
-        GLuint dest_reg_file:2;
-        GLuint dest_reg_type:3;
-        GLuint src0_reg_file:2;
-        GLuint src0_reg_type:3;
-        GLuint src1_reg_file:2;
-        GLuint src1_reg_type:3;
-        GLuint pad:1;
-        GLuint dest_subreg_nr:5;
-        GLuint dest_reg_nr:8;
-        GLuint dest_horiz_stride:2;
-        GLuint dest_address_mode:1;
-      } da1;
-
-      struct
-      {
-        GLuint dest_reg_file:2;
-        GLuint dest_reg_type:3;
-        GLuint src0_reg_file:2;
-        GLuint src0_reg_type:3;
-        GLuint src1_reg_file:2;        /* 0x00000c00 */
-        GLuint src1_reg_type:3;        /* 0x00007000 */
-        GLuint pad:1;
-        GLint dest_indirect_offset:10; /* offset against the deref'd address reg */
-        GLuint dest_subreg_nr:3; /* subnr for the address reg a0.x */
-        GLuint dest_horiz_stride:2;
-        GLuint dest_address_mode:1;
-      } ia1;
-
-      struct
-      {
-        GLuint dest_reg_file:2;
-        GLuint dest_reg_type:3;
-        GLuint src0_reg_file:2;
-        GLuint src0_reg_type:3;
-        GLuint src1_reg_file:2;
-        GLuint src1_reg_type:3;
-        GLuint pad:1;
-        GLuint dest_writemask:4;
-        GLuint dest_subreg_nr:1;
-        GLuint dest_reg_nr:8;
-        GLuint dest_horiz_stride:2;
-        GLuint dest_address_mode:1;
-      } da16;
-
-      struct
-      {
-        GLuint dest_reg_file:2;
-        GLuint dest_reg_type:3;
-        GLuint src0_reg_file:2;
-        GLuint src0_reg_type:3;
-        GLuint pad0:6;
-        GLuint dest_writemask:4;
-        GLint dest_indirect_offset:6;
-        GLuint dest_subreg_nr:3;
-        GLuint dest_horiz_stride:2;
-        GLuint dest_address_mode:1;
-      } ia16;
-
-      struct {
-        GLuint dest_reg_file:2;
-        GLuint dest_reg_type:3;
-        GLuint src0_reg_file:2;
-        GLuint src0_reg_type:3;
-        GLuint src1_reg_file:2;
-        GLuint src1_reg_type:3;
-        GLuint pad:1;
-
-        GLint jump_count:16;
-      } branch_gen6;
-   } bits1;
-
-
-   union {
-      struct
-      {
-        GLuint src0_subreg_nr:5;
-        GLuint src0_reg_nr:8;
-        GLuint src0_abs:1;
-        GLuint src0_negate:1;
-        GLuint src0_address_mode:1;
-        GLuint src0_horiz_stride:2;
-        GLuint src0_width:3;
-        GLuint src0_vert_stride:4;
-        GLuint flag_reg_nr:1;
-        GLuint pad:6;
-      } da1;
-
-      struct
-      {
-        GLint src0_indirect_offset:10;
-        GLuint src0_subreg_nr:3;
-        GLuint src0_abs:1;
-        GLuint src0_negate:1;
-        GLuint src0_address_mode:1;
-        GLuint src0_horiz_stride:2;
-        GLuint src0_width:3;
-        GLuint src0_vert_stride:4;
-        GLuint flag_reg_nr:1;
-        GLuint pad:6;  
-      } ia1;
-
-      struct
-      {
-        GLuint src0_swz_x:2;
-        GLuint src0_swz_y:2;
-        GLuint src0_subreg_nr:1;
-        GLuint src0_reg_nr:8;
-        GLuint src0_abs:1;
-        GLuint src0_negate:1;
-        GLuint src0_address_mode:1;
-        GLuint src0_swz_z:2;
-        GLuint src0_swz_w:2;
-        GLuint pad0:1;
-        GLuint src0_vert_stride:4;
-        GLuint flag_reg_nr:1;
-        GLuint pad1:6;
-      } da16;
-
-      struct
-      {
-        GLuint src0_swz_x:2;
-        GLuint src0_swz_y:2;
-        GLint src0_indirect_offset:6;
-        GLuint src0_subreg_nr:3;
-        GLuint src0_abs:1;
-        GLuint src0_negate:1;
-        GLuint src0_address_mode:1;
-        GLuint src0_swz_z:2;
-        GLuint src0_swz_w:2;
-        GLuint pad0:1;
-        GLuint src0_vert_stride:4;
-        GLuint flag_reg_nr:1;
-        GLuint pad1:6;
-      } ia16;
-
-       struct 
-       {
-           GLuint pad:26;
-           GLuint end_of_thread:1;
-           GLuint pad1:1;
-           GLuint sfid:4;
-       } send_gen5;  /* for Ironlake only */
-
-   } bits2;
-
-   union
-   {
-      struct
-      {
-        GLuint src1_subreg_nr:5;
-        GLuint src1_reg_nr:8;
-        GLuint src1_abs:1;
-        GLuint src1_negate:1;
-        GLuint src1_address_mode:1;
-        GLuint src1_horiz_stride:2;
-        GLuint src1_width:3;
-        GLuint src1_vert_stride:4;
-        GLuint pad0:7;
-      } da1;
-
-      struct
-      {
-        GLuint src1_swz_x:2;
-        GLuint src1_swz_y:2;
-        GLuint src1_subreg_nr:1;
-        GLuint src1_reg_nr:8;
-        GLuint src1_abs:1;
-        GLuint src1_negate:1;
-        GLuint src1_address_mode:1;
-        GLuint src1_swz_z:2;
-        GLuint src1_swz_w:2;
-        GLuint pad1:1;
-        GLuint src1_vert_stride:4;
-        GLuint pad2:7;
-      } da16;
-
-      struct
-      {
-        GLint  src1_indirect_offset:10;
-        GLuint src1_subreg_nr:3;
-        GLuint src1_abs:1;
-        GLuint src1_negate:1;
-        GLuint src1_address_mode:1;
-        GLuint src1_horiz_stride:2;
-        GLuint src1_width:3;
-        GLuint src1_vert_stride:4;
-        GLuint flag_reg_nr:1;
-        GLuint pad1:6; 
-      } ia1;
-
-      struct
-      {
-        GLuint src1_swz_x:2;
-        GLuint src1_swz_y:2;
-        GLint  src1_indirect_offset:6;
-        GLuint src1_subreg_nr:3;
-        GLuint src1_abs:1;
-        GLuint src1_negate:1;
-        GLuint pad0:1;
-        GLuint src1_swz_z:2;
-        GLuint src1_swz_w:2;
-        GLuint pad1:1;
-        GLuint src1_vert_stride:4;
-        GLuint flag_reg_nr:1;
-        GLuint pad2:6;
-      } ia16;
-
-
-      struct
-      {
-        GLint  jump_count:16;  /* note: signed */
-        GLuint  pop_count:4;
-        GLuint  pad0:12;
-      } if_else;
-
-      struct
-      {
-        /* Signed jump distance to the ip to jump to if all channels
-         * are disabled after the break or continue.  It should point
-         * to the end of the innermost control flow block, as that's
-         * where some channel could get re-enabled.
-         */
-        int jip:16;
-
-        /* Signed jump distance to the location to resume execution
-         * of this channel if it's enabled for the break or continue.
-         */
-        int uip:16;
-      } break_cont;
-
-      struct {
-        GLuint function:4;
-        GLuint int_type:1;
-        GLuint precision:1;
-        GLuint saturate:1;
-        GLuint data_type:1;
-        GLuint pad0:8;
-        GLuint response_length:4;
-        GLuint msg_length:4;
-        GLuint msg_target:4;
-        GLuint pad1:3;
-        GLuint end_of_thread:1;
-      } math;
-
-      struct {
-        GLuint function:4;
-        GLuint int_type:1;
-        GLuint precision:1;
-        GLuint saturate:1;
-        GLuint data_type:1;
-        GLuint snapshot:1;
-        GLuint pad0:10;
-        GLuint header_present:1;
-        GLuint response_length:5;
-        GLuint msg_length:4;
-        GLuint pad1:2;
-        GLuint end_of_thread:1;
-      } math_gen5;
-
-      struct {
-        GLuint binding_table_index:8;
-        GLuint sampler:4;
-        GLuint return_format:2; 
-        GLuint msg_type:2;   
-        GLuint response_length:4;
-        GLuint msg_length:4;
-        GLuint msg_target:4;
-        GLuint pad1:3;
-        GLuint end_of_thread:1;
-      } sampler;
-
-      struct {
-         GLuint binding_table_index:8;
-         GLuint sampler:4;
-         GLuint msg_type:4;
-         GLuint response_length:4;
-         GLuint msg_length:4;
-         GLuint msg_target:4;
-         GLuint pad1:3;
-         GLuint end_of_thread:1;
-      } sampler_g4x;
-
-      struct {
-        GLuint binding_table_index:8;
-        GLuint sampler:4;
-        GLuint msg_type:4;
-        GLuint simd_mode:2;
-        GLuint pad0:1;
-        GLuint header_present:1;
-        GLuint response_length:5;
-        GLuint msg_length:4;
-        GLuint pad1:2;
-        GLuint end_of_thread:1;
-      } sampler_gen5;
-
-      struct brw_urb_immediate urb;
-
-      struct {
-        GLuint opcode:4;
-        GLuint offset:6;
-        GLuint swizzle_control:2; 
-        GLuint pad:1;
-        GLuint allocate:1;
-        GLuint used:1;
-        GLuint complete:1;
-        GLuint pad0:3;
-        GLuint header_present:1;
-        GLuint response_length:5;
-        GLuint msg_length:4;
-        GLuint pad1:2;
-        GLuint end_of_thread:1;
-      } urb_gen5;
-
-      struct {
-        GLuint binding_table_index:8;
-        GLuint msg_control:4;  
-        GLuint msg_type:2;  
-        GLuint target_cache:2;    
-        GLuint response_length:4;
-        GLuint msg_length:4;
-        GLuint msg_target:4;
-        GLuint pad1:3;
-        GLuint end_of_thread:1;
-      } dp_read;
-
-      struct {
-        GLuint binding_table_index:8;
-        GLuint msg_control:3;
-        GLuint msg_type:3;
-        GLuint target_cache:2;
-        GLuint response_length:4;
-        GLuint msg_length:4;
-        GLuint msg_target:4;
-        GLuint pad1:3;
-        GLuint end_of_thread:1;
-      } dp_read_g4x;
-
-      struct {
-        GLuint binding_table_index:8;
-        GLuint msg_control:3;  
-        GLuint msg_type:3;  
-        GLuint target_cache:2;    
-        GLuint pad0:3;
-        GLuint header_present:1;
-        GLuint response_length:5;
-        GLuint msg_length:4;
-        GLuint pad1:2;
-        GLuint end_of_thread:1;
-      } dp_read_gen5;
-
-      struct {
-        GLuint binding_table_index:8;
-        GLuint msg_control:3;
-        GLuint pixel_scoreboard_clear:1;
-        GLuint msg_type:3;    
-        GLuint send_commit_msg:1;
-        GLuint response_length:4;
-        GLuint msg_length:4;
-        GLuint msg_target:4;
-        GLuint pad1:3;
-        GLuint end_of_thread:1;
-      } dp_write;
-
-      struct {
-        GLuint binding_table_index:8;
-        GLuint msg_control:3;
-        GLuint pixel_scoreboard_clear:1;
-        GLuint msg_type:3;    
-        GLuint send_commit_msg:1;
-        GLuint pad0:3;
-        GLuint header_present:1;
-        GLuint response_length:5;
-        GLuint msg_length:4;
-        GLuint pad1:2;
-        GLuint end_of_thread:1;
-      } dp_write_gen5;
-
-      /* Sandybridge DP for sample cache, constant cache, render cache */
-      struct {
-        GLuint binding_table_index:8;
-        GLuint msg_control:5;
-        GLuint msg_type:3;
-        GLuint pad0:3;
-        GLuint header_present:1;
-        GLuint response_length:5;
-        GLuint msg_length:4;
-        GLuint pad1:2;
-        GLuint end_of_thread:1;
-      } dp_sampler_const_cache;
-
-      struct {
-        GLuint binding_table_index:8;
-        GLuint msg_control:3;
-        GLuint slot_group_select:1;
-        GLuint pixel_scoreboard_clear:1;
-        GLuint msg_type:4;
-        GLuint send_commit_msg:1;
-        GLuint pad0:1;
-        GLuint header_present:1;
-        GLuint response_length:5;
-        GLuint msg_length:4;
-        GLuint pad1:2;
-        GLuint end_of_thread:1;
-      } dp_render_cache;
-
-      struct {
-        GLuint function_control:16;
-        GLuint response_length:4;
-        GLuint msg_length:4;
-        GLuint msg_target:4;
-        GLuint pad1:3;
-        GLuint end_of_thread:1;
-      } generic;
-
-      /* Of this struct, only end_of_thread is not present for gen6. */
-      struct {
-        GLuint function_control:19;
-        GLuint header_present:1;
-        GLuint response_length:5;
-        GLuint msg_length:4;
-        GLuint pad1:2;
-        GLuint end_of_thread:1;
-      } generic_gen5;
-
-      GLint d;
-      GLuint ud;
-      float f;
-   } bits3;
-};
-
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_structs_dump.c b/src/gallium/drivers/i965/brw_structs_dump.c
deleted file mode 100644 (file)
index f3de2f9..0000000
+++ /dev/null
@@ -1,1247 +0,0 @@
-/**************************************************************************
- *
- * Copyright 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- **************************************************************************/
-
-/**
- * @file
- * Dump i965 data structures.
- *
- * Generated automatically from brw_structs.h by brw_structs_dump.py.
- */
-
-#include "util/u_debug.h"
-
-#include "brw_types.h"
-#include "brw_structs.h"
-#include "brw_structs_dump.h"
-
-void
-brw_dump_3d_control(const struct brw_3d_control *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.notify_enable = 0x%x\n", (*ptr).header.notify_enable);
-   debug_printf("\t\t.header.wc_flush_enable = 0x%x\n", (*ptr).header.wc_flush_enable);
-   debug_printf("\t\t.header.depth_stall_enable = 0x%x\n", (*ptr).header.depth_stall_enable);
-   debug_printf("\t\t.header.operation = 0x%x\n", (*ptr).header.operation);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.dest.dest_addr_type = 0x%x\n", (*ptr).dest.dest_addr_type);
-   debug_printf("\t\t.dest.dest_addr = 0x%x\n", (*ptr).dest.dest_addr);
-   debug_printf("\t\t.dword2 = 0x%x\n", (*ptr).dword2);
-   debug_printf("\t\t.dword3 = 0x%x\n", (*ptr).dword3);
-}
-
-void
-brw_dump_3d_primitive(const struct brw_3d_primitive *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.topology = 0x%x\n", (*ptr).header.topology);
-   debug_printf("\t\t.header.indexed = 0x%x\n", (*ptr).header.indexed);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.verts_per_instance = 0x%x\n", (*ptr).verts_per_instance);
-   debug_printf("\t\t.start_vert_location = 0x%x\n", (*ptr).start_vert_location);
-   debug_printf("\t\t.instance_count = 0x%x\n", (*ptr).instance_count);
-   debug_printf("\t\t.start_instance_location = 0x%x\n", (*ptr).start_instance_location);
-   debug_printf("\t\t.base_vert_location = 0x%x\n", (*ptr).base_vert_location);
-}
-
-void
-brw_dump_aa_line_parameters(const struct brw_aa_line_parameters *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits0.aa_coverage_scope = 0x%x\n", (*ptr).bits0.aa_coverage_slope);
-   debug_printf("\t\t.bits0.aa_coverage_bias = 0x%x\n", (*ptr).bits0.aa_coverage_bias);
-   debug_printf("\t\t.bits1.aa_coverage_endcap_slope = 0x%x\n", (*ptr).bits1.aa_coverage_endcap_slope);
-   debug_printf("\t\t.bits1.aa_coverage_endcap_bias = 0x%x\n", (*ptr).bits1.aa_coverage_endcap_bias);
-}
-
-void
-brw_dump_binding_table_pointers(const struct brw_binding_table_pointers *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.vs = 0x%x\n", (*ptr).vs);
-   debug_printf("\t\t.gs = 0x%x\n", (*ptr).gs);
-   debug_printf("\t\t.clp = 0x%x\n", (*ptr).clp);
-   debug_printf("\t\t.sf = 0x%x\n", (*ptr).sf);
-   debug_printf("\t\t.wm = 0x%x\n", (*ptr).wm);
-}
-
-void
-brw_dump_blend_constant_color(const struct brw_blend_constant_color *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.blend_constant_color[0] = %f\n", (*ptr).blend_constant_color[0]);
-   debug_printf("\t\t.blend_constant_color[1] = %f\n", (*ptr).blend_constant_color[1]);
-   debug_printf("\t\t.blend_constant_color[2] = %f\n", (*ptr).blend_constant_color[2]);
-   debug_printf("\t\t.blend_constant_color[3] = %f\n", (*ptr).blend_constant_color[3]);
-}
-
-void
-brw_dump_cc0(const struct brw_cc0 *ptr)
-{
-   debug_printf("\t\t.bf_stencil_pass_depth_pass_op = 0x%x\n", (*ptr).bf_stencil_pass_depth_pass_op);
-   debug_printf("\t\t.bf_stencil_pass_depth_fail_op = 0x%x\n", (*ptr).bf_stencil_pass_depth_fail_op);
-   debug_printf("\t\t.bf_stencil_fail_op = 0x%x\n", (*ptr).bf_stencil_fail_op);
-   debug_printf("\t\t.bf_stencil_func = 0x%x\n", (*ptr).bf_stencil_func);
-   debug_printf("\t\t.bf_stencil_enable = 0x%x\n", (*ptr).bf_stencil_enable);
-   debug_printf("\t\t.stencil_write_enable = 0x%x\n", (*ptr).stencil_write_enable);
-   debug_printf("\t\t.stencil_pass_depth_pass_op = 0x%x\n", (*ptr).stencil_pass_depth_pass_op);
-   debug_printf("\t\t.stencil_pass_depth_fail_op = 0x%x\n", (*ptr).stencil_pass_depth_fail_op);
-   debug_printf("\t\t.stencil_fail_op = 0x%x\n", (*ptr).stencil_fail_op);
-   debug_printf("\t\t.stencil_func = 0x%x\n", (*ptr).stencil_func);
-   debug_printf("\t\t.stencil_enable = 0x%x\n", (*ptr).stencil_enable);
-}
-
-void
-brw_dump_cc1(const struct brw_cc1 *ptr)
-{
-   debug_printf("\t\t.bf_stencil_ref = 0x%x\n", (*ptr).bf_stencil_ref);
-   debug_printf("\t\t.stencil_write_mask = 0x%x\n", (*ptr).stencil_write_mask);
-   debug_printf("\t\t.stencil_test_mask = 0x%x\n", (*ptr).stencil_test_mask);
-   debug_printf("\t\t.stencil_ref = 0x%x\n", (*ptr).stencil_ref);
-}
-
-void
-brw_dump_cc2(const struct brw_cc2 *ptr)
-{
-   debug_printf("\t\t.logicop_enable = 0x%x\n", (*ptr).logicop_enable);
-   debug_printf("\t\t.depth_write_enable = 0x%x\n", (*ptr).depth_write_enable);
-   debug_printf("\t\t.depth_test_function = 0x%x\n", (*ptr).depth_test_function);
-   debug_printf("\t\t.depth_test = 0x%x\n", (*ptr).depth_test);
-   debug_printf("\t\t.bf_stencil_write_mask = 0x%x\n", (*ptr).bf_stencil_write_mask);
-   debug_printf("\t\t.bf_stencil_test_mask = 0x%x\n", (*ptr).bf_stencil_test_mask);
-}
-
-void
-brw_dump_cc3(const struct brw_cc3 *ptr)
-{
-   debug_printf("\t\t.alpha_test_func = 0x%x\n", (*ptr).alpha_test_func);
-   debug_printf("\t\t.alpha_test = 0x%x\n", (*ptr).alpha_test);
-   debug_printf("\t\t.blend_enable = 0x%x\n", (*ptr).blend_enable);
-   debug_printf("\t\t.ia_blend_enable = 0x%x\n", (*ptr).ia_blend_enable);
-   debug_printf("\t\t.alpha_test_format = 0x%x\n", (*ptr).alpha_test_format);
-}
-
-void
-brw_dump_cc4(const struct brw_cc4 *ptr)
-{
-   debug_printf("\t\t.cc_viewport_state_offset = 0x%x\n", (*ptr).cc_viewport_state_offset);
-}
-
-void
-brw_dump_cc5(const struct brw_cc5 *ptr)
-{
-   debug_printf("\t\t.ia_dest_blend_factor = 0x%x\n", (*ptr).ia_dest_blend_factor);
-   debug_printf("\t\t.ia_src_blend_factor = 0x%x\n", (*ptr).ia_src_blend_factor);
-   debug_printf("\t\t.ia_blend_function = 0x%x\n", (*ptr).ia_blend_function);
-   debug_printf("\t\t.statistics_enable = 0x%x\n", (*ptr).statistics_enable);
-   debug_printf("\t\t.logicop_func = 0x%x\n", (*ptr).logicop_func);
-   debug_printf("\t\t.dither_enable = 0x%x\n", (*ptr).dither_enable);
-}
-
-void
-brw_dump_cc6(const struct brw_cc6 *ptr)
-{
-   debug_printf("\t\t.clamp_post_alpha_blend = 0x%x\n", (*ptr).clamp_post_alpha_blend);
-   debug_printf("\t\t.clamp_pre_alpha_blend = 0x%x\n", (*ptr).clamp_pre_alpha_blend);
-   debug_printf("\t\t.clamp_range = 0x%x\n", (*ptr).clamp_range);
-   debug_printf("\t\t.y_dither_offset = 0x%x\n", (*ptr).y_dither_offset);
-   debug_printf("\t\t.x_dither_offset = 0x%x\n", (*ptr).x_dither_offset);
-   debug_printf("\t\t.dest_blend_factor = 0x%x\n", (*ptr).dest_blend_factor);
-   debug_printf("\t\t.src_blend_factor = 0x%x\n", (*ptr).src_blend_factor);
-   debug_printf("\t\t.blend_function = 0x%x\n", (*ptr).blend_function);
-}
-
-void
-brw_dump_cc7(const struct brw_cc7 *ptr)
-{
-   debug_printf("\t\t.alpha_ref.f = %f\n", (*ptr).alpha_ref.f);
-   debug_printf("\t\t.alpha_ref.ub[0] = 0x%x\n", (*ptr).alpha_ref.ub[0]);
-   debug_printf("\t\t.alpha_ref.ub[1] = 0x%x\n", (*ptr).alpha_ref.ub[1]);
-   debug_printf("\t\t.alpha_ref.ub[2] = 0x%x\n", (*ptr).alpha_ref.ub[2]);
-   debug_printf("\t\t.alpha_ref.ub[3] = 0x%x\n", (*ptr).alpha_ref.ub[3]);
-}
-
-void
-brw_dump_cc_unit_state(const struct brw_cc_unit_state *ptr)
-{
-   debug_printf("\t\t.cc0.bf_stencil_pass_depth_pass_op = 0x%x\n", (*ptr).cc0.bf_stencil_pass_depth_pass_op);
-   debug_printf("\t\t.cc0.bf_stencil_pass_depth_fail_op = 0x%x\n", (*ptr).cc0.bf_stencil_pass_depth_fail_op);
-   debug_printf("\t\t.cc0.bf_stencil_fail_op = 0x%x\n", (*ptr).cc0.bf_stencil_fail_op);
-   debug_printf("\t\t.cc0.bf_stencil_func = 0x%x\n", (*ptr).cc0.bf_stencil_func);
-   debug_printf("\t\t.cc0.bf_stencil_enable = 0x%x\n", (*ptr).cc0.bf_stencil_enable);
-   debug_printf("\t\t.cc0.stencil_write_enable = 0x%x\n", (*ptr).cc0.stencil_write_enable);
-   debug_printf("\t\t.cc0.stencil_pass_depth_pass_op = 0x%x\n", (*ptr).cc0.stencil_pass_depth_pass_op);
-   debug_printf("\t\t.cc0.stencil_pass_depth_fail_op = 0x%x\n", (*ptr).cc0.stencil_pass_depth_fail_op);
-   debug_printf("\t\t.cc0.stencil_fail_op = 0x%x\n", (*ptr).cc0.stencil_fail_op);
-   debug_printf("\t\t.cc0.stencil_func = 0x%x\n", (*ptr).cc0.stencil_func);
-   debug_printf("\t\t.cc0.stencil_enable = 0x%x\n", (*ptr).cc0.stencil_enable);
-   debug_printf("\t\t.cc1.bf_stencil_ref = 0x%x\n", (*ptr).cc1.bf_stencil_ref);
-   debug_printf("\t\t.cc1.stencil_write_mask = 0x%x\n", (*ptr).cc1.stencil_write_mask);
-   debug_printf("\t\t.cc1.stencil_test_mask = 0x%x\n", (*ptr).cc1.stencil_test_mask);
-   debug_printf("\t\t.cc1.stencil_ref = 0x%x\n", (*ptr).cc1.stencil_ref);
-   debug_printf("\t\t.cc2.logicop_enable = 0x%x\n", (*ptr).cc2.logicop_enable);
-   debug_printf("\t\t.cc2.depth_write_enable = 0x%x\n", (*ptr).cc2.depth_write_enable);
-   debug_printf("\t\t.cc2.depth_test_function = 0x%x\n", (*ptr).cc2.depth_test_function);
-   debug_printf("\t\t.cc2.depth_test = 0x%x\n", (*ptr).cc2.depth_test);
-   debug_printf("\t\t.cc2.bf_stencil_write_mask = 0x%x\n", (*ptr).cc2.bf_stencil_write_mask);
-   debug_printf("\t\t.cc2.bf_stencil_test_mask = 0x%x\n", (*ptr).cc2.bf_stencil_test_mask);
-   debug_printf("\t\t.cc3.alpha_test_func = 0x%x\n", (*ptr).cc3.alpha_test_func);
-   debug_printf("\t\t.cc3.alpha_test = 0x%x\n", (*ptr).cc3.alpha_test);
-   debug_printf("\t\t.cc3.blend_enable = 0x%x\n", (*ptr).cc3.blend_enable);
-   debug_printf("\t\t.cc3.ia_blend_enable = 0x%x\n", (*ptr).cc3.ia_blend_enable);
-   debug_printf("\t\t.cc3.alpha_test_format = 0x%x\n", (*ptr).cc3.alpha_test_format);
-   debug_printf("\t\t.cc4.cc_viewport_state_offset = 0x%x\n", (*ptr).cc4.cc_viewport_state_offset);
-   debug_printf("\t\t.cc5.ia_dest_blend_factor = 0x%x\n", (*ptr).cc5.ia_dest_blend_factor);
-   debug_printf("\t\t.cc5.ia_src_blend_factor = 0x%x\n", (*ptr).cc5.ia_src_blend_factor);
-   debug_printf("\t\t.cc5.ia_blend_function = 0x%x\n", (*ptr).cc5.ia_blend_function);
-   debug_printf("\t\t.cc5.statistics_enable = 0x%x\n", (*ptr).cc5.statistics_enable);
-   debug_printf("\t\t.cc5.logicop_func = 0x%x\n", (*ptr).cc5.logicop_func);
-   debug_printf("\t\t.cc5.dither_enable = 0x%x\n", (*ptr).cc5.dither_enable);
-   debug_printf("\t\t.cc6.clamp_post_alpha_blend = 0x%x\n", (*ptr).cc6.clamp_post_alpha_blend);
-   debug_printf("\t\t.cc6.clamp_pre_alpha_blend = 0x%x\n", (*ptr).cc6.clamp_pre_alpha_blend);
-   debug_printf("\t\t.cc6.clamp_range = 0x%x\n", (*ptr).cc6.clamp_range);
-   debug_printf("\t\t.cc6.y_dither_offset = 0x%x\n", (*ptr).cc6.y_dither_offset);
-   debug_printf("\t\t.cc6.x_dither_offset = 0x%x\n", (*ptr).cc6.x_dither_offset);
-   debug_printf("\t\t.cc6.dest_blend_factor = 0x%x\n", (*ptr).cc6.dest_blend_factor);
-   debug_printf("\t\t.cc6.src_blend_factor = 0x%x\n", (*ptr).cc6.src_blend_factor);
-   debug_printf("\t\t.cc6.blend_function = 0x%x\n", (*ptr).cc6.blend_function);
-   debug_printf("\t\t.cc7.alpha_ref.f = %f\n", (*ptr).cc7.alpha_ref.f);
-   debug_printf("\t\t.cc7.alpha_ref.ub[0] = 0x%x\n", (*ptr).cc7.alpha_ref.ub[0]);
-   debug_printf("\t\t.cc7.alpha_ref.ub[1] = 0x%x\n", (*ptr).cc7.alpha_ref.ub[1]);
-   debug_printf("\t\t.cc7.alpha_ref.ub[2] = 0x%x\n", (*ptr).cc7.alpha_ref.ub[2]);
-   debug_printf("\t\t.cc7.alpha_ref.ub[3] = 0x%x\n", (*ptr).cc7.alpha_ref.ub[3]);
-}
-
-void
-brw_dump_cc_viewport(const struct brw_cc_viewport *ptr)
-{
-   debug_printf("\t\t.min_depth = %f\n", (*ptr).min_depth);
-   debug_printf("\t\t.max_depth = %f\n", (*ptr).max_depth);
-}
-
-void
-brw_dump_clip_unit_state(const struct brw_clip_unit_state *ptr)
-{
-   debug_printf("\t\t.thread0.grf_reg_count = 0x%x\n", (*ptr).thread0.grf_reg_count);
-   debug_printf("\t\t.thread0.kernel_start_pointer = 0x%x\n", (*ptr).thread0.kernel_start_pointer);
-   debug_printf("\t\t.thread1.sw_exception_enable = 0x%x\n", (*ptr).thread1.sw_exception_enable);
-   debug_printf("\t\t.thread1.mask_stack_exception_enable = 0x%x\n", (*ptr).thread1.mask_stack_exception_enable);
-   debug_printf("\t\t.thread1.illegal_op_exception_enable = 0x%x\n", (*ptr).thread1.illegal_op_exception_enable);
-   debug_printf("\t\t.thread1.floating_point_mode = 0x%x\n", (*ptr).thread1.floating_point_mode);
-   debug_printf("\t\t.thread1.thread_priority = 0x%x\n", (*ptr).thread1.thread_priority);
-   debug_printf("\t\t.thread1.binding_table_entry_count = 0x%x\n", (*ptr).thread1.binding_table_entry_count);
-   debug_printf("\t\t.thread1.single_program_flow = 0x%x\n", (*ptr).thread1.single_program_flow);
-   debug_printf("\t\t.thread2.per_thread_scratch_space = 0x%x\n", (*ptr).thread2.per_thread_scratch_space);
-   debug_printf("\t\t.thread2.scratch_space_base_pointer = 0x%x\n", (*ptr).thread2.scratch_space_base_pointer);
-   debug_printf("\t\t.thread3.dispatch_grf_start_reg = 0x%x\n", (*ptr).thread3.dispatch_grf_start_reg);
-   debug_printf("\t\t.thread3.urb_entry_read_offset = 0x%x\n", (*ptr).thread3.urb_entry_read_offset);
-   debug_printf("\t\t.thread3.urb_entry_read_length = 0x%x\n", (*ptr).thread3.urb_entry_read_length);
-   debug_printf("\t\t.thread3.const_urb_entry_read_offset = 0x%x\n", (*ptr).thread3.const_urb_entry_read_offset);
-   debug_printf("\t\t.thread3.const_urb_entry_read_length = 0x%x\n", (*ptr).thread3.const_urb_entry_read_length);
-   debug_printf("\t\t.thread4.gs_output_stats = 0x%x\n", (*ptr).thread4.gs_output_stats);
-   debug_printf("\t\t.thread4.stats_enable = 0x%x\n", (*ptr).thread4.stats_enable);
-   debug_printf("\t\t.thread4.nr_urb_entries = 0x%x\n", (*ptr).thread4.nr_urb_entries);
-   debug_printf("\t\t.thread4.urb_entry_allocation_size = 0x%x\n", (*ptr).thread4.urb_entry_allocation_size);
-   debug_printf("\t\t.thread4.max_threads = 0x%x\n", (*ptr).thread4.max_threads);
-   debug_printf("\t\t.clip5.clip_mode = 0x%x\n", (*ptr).clip5.clip_mode);
-   debug_printf("\t\t.clip5.userclip_enable_flags = 0x%x\n", (*ptr).clip5.userclip_enable_flags);
-   debug_printf("\t\t.clip5.userclip_must_clip = 0x%x\n", (*ptr).clip5.userclip_must_clip);
-   debug_printf("\t\t.clip5.negative_w_clip_test = 0x%x\n", (*ptr).clip5.negative_w_clip_test);
-   debug_printf("\t\t.clip5.guard_band_enable = 0x%x\n", (*ptr).clip5.guard_band_enable);
-   debug_printf("\t\t.clip5.viewport_z_clip_enable = 0x%x\n", (*ptr).clip5.viewport_z_clip_enable);
-   debug_printf("\t\t.clip5.viewport_xy_clip_enable = 0x%x\n", (*ptr).clip5.viewport_xy_clip_enable);
-   debug_printf("\t\t.clip5.vertex_position_space = 0x%x\n", (*ptr).clip5.vertex_position_space);
-   debug_printf("\t\t.clip5.api_mode = 0x%x\n", (*ptr).clip5.api_mode);
-   debug_printf("\t\t.clip6.clipper_viewport_state_ptr = 0x%x\n", (*ptr).clip6.clipper_viewport_state_ptr);
-   debug_printf("\t\t.viewport_xmin = %f\n", (*ptr).viewport_xmin);
-   debug_printf("\t\t.viewport_xmax = %f\n", (*ptr).viewport_xmax);
-   debug_printf("\t\t.viewport_ymin = %f\n", (*ptr).viewport_ymin);
-   debug_printf("\t\t.viewport_ymax = %f\n", (*ptr).viewport_ymax);
-}
-
-void
-brw_dump_clipper_viewport(const struct brw_clipper_viewport *ptr)
-{
-   debug_printf("\t\t.xmin = %f\n", (*ptr).xmin);
-   debug_printf("\t\t.xmax = %f\n", (*ptr).xmax);
-   debug_printf("\t\t.ymin = %f\n", (*ptr).ymin);
-   debug_printf("\t\t.ymax = %f\n", (*ptr).ymax);
-}
-
-void
-brw_dump_constant_buffer(const struct brw_constant_buffer *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.valid = 0x%x\n", (*ptr).header.valid);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits0.buffer_length = 0x%x\n", (*ptr).bits0.buffer_length);
-   debug_printf("\t\t.bits0.buffer_address = 0x%x\n", (*ptr).bits0.buffer_address);
-}
-
-void
-brw_dump_cs_urb_state(const struct brw_cs_urb_state *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits0.nr_urb_entries = 0x%x\n", (*ptr).bits0.nr_urb_entries);
-   debug_printf("\t\t.bits0.urb_entry_size = 0x%x\n", (*ptr).bits0.urb_entry_size);
-}
-
-void
-brw_dump_depthbuffer(const struct brw_depthbuffer *ptr)
-{
-   debug_printf("\t\t.header.bits.length = 0x%x\n", (*ptr).header.bits.length);
-   debug_printf("\t\t.header.bits.opcode = 0x%x\n", (*ptr).header.bits.opcode);
-   debug_printf("\t\t.dword1.bits.pitch = 0x%x\n", (*ptr).dword1.bits.pitch);
-   debug_printf("\t\t.dword1.bits.format = 0x%x\n", (*ptr).dword1.bits.format);
-   debug_printf("\t\t.dword1.bits.software_tiled_rendering_mode = 0x%x\n", (*ptr).dword1.bits.software_tiled_rendering_mode);
-   debug_printf("\t\t.dword1.bits.depth_offset_disable = 0x%x\n", (*ptr).dword1.bits.depth_offset_disable);
-   debug_printf("\t\t.dword1.bits.tile_walk = 0x%x\n", (*ptr).dword1.bits.tile_walk);
-   debug_printf("\t\t.dword1.bits.tiled_surface = 0x%x\n", (*ptr).dword1.bits.tiled_surface);
-   debug_printf("\t\t.dword1.bits.surface_type = 0x%x\n", (*ptr).dword1.bits.surface_type);
-   debug_printf("\t\t.dword2_base_addr = 0x%x\n", (*ptr).dword2_base_addr);
-   debug_printf("\t\t.dword3.bits.mipmap_layout = 0x%x\n", (*ptr).dword3.bits.mipmap_layout);
-   debug_printf("\t\t.dword3.bits.lod = 0x%x\n", (*ptr).dword3.bits.lod);
-   debug_printf("\t\t.dword3.bits.width = 0x%x\n", (*ptr).dword3.bits.width);
-   debug_printf("\t\t.dword3.bits.height = 0x%x\n", (*ptr).dword3.bits.height);
-   debug_printf("\t\t.dword4.bits.min_array_element = 0x%x\n", (*ptr).dword4.bits.min_array_element);
-   debug_printf("\t\t.dword4.bits.depth = 0x%x\n", (*ptr).dword4.bits.depth);
-}
-
-void
-brw_dump_depthbuffer_g4x(const struct brw_depthbuffer_g4x *ptr)
-{
-   debug_printf("\t\t.header.bits.length = 0x%x\n", (*ptr).header.bits.length);
-   debug_printf("\t\t.header.bits.opcode = 0x%x\n", (*ptr).header.bits.opcode);
-   debug_printf("\t\t.dword1.bits.pitch = 0x%x\n", (*ptr).dword1.bits.pitch);
-   debug_printf("\t\t.dword1.bits.format = 0x%x\n", (*ptr).dword1.bits.format);
-   debug_printf("\t\t.dword1.bits.software_tiled_rendering_mode = 0x%x\n", (*ptr).dword1.bits.software_tiled_rendering_mode);
-   debug_printf("\t\t.dword1.bits.depth_offset_disable = 0x%x\n", (*ptr).dword1.bits.depth_offset_disable);
-   debug_printf("\t\t.dword1.bits.tile_walk = 0x%x\n", (*ptr).dword1.bits.tile_walk);
-   debug_printf("\t\t.dword1.bits.tiled_surface = 0x%x\n", (*ptr).dword1.bits.tiled_surface);
-   debug_printf("\t\t.dword1.bits.surface_type = 0x%x\n", (*ptr).dword1.bits.surface_type);
-   debug_printf("\t\t.dword2_base_addr = 0x%x\n", (*ptr).dword2_base_addr);
-   debug_printf("\t\t.dword3.bits.mipmap_layout = 0x%x\n", (*ptr).dword3.bits.mipmap_layout);
-   debug_printf("\t\t.dword3.bits.lod = 0x%x\n", (*ptr).dword3.bits.lod);
-   debug_printf("\t\t.dword3.bits.width = 0x%x\n", (*ptr).dword3.bits.width);
-   debug_printf("\t\t.dword3.bits.height = 0x%x\n", (*ptr).dword3.bits.height);
-   debug_printf("\t\t.dword4.bits.min_array_element = 0x%x\n", (*ptr).dword4.bits.min_array_element);
-   debug_printf("\t\t.dword4.bits.depth = 0x%x\n", (*ptr).dword4.bits.depth);
-   debug_printf("\t\t.dword5.bits.xoffset = 0x%x\n", (*ptr).dword5.bits.xoffset);
-   debug_printf("\t\t.dword5.bits.yoffset = 0x%x\n", (*ptr).dword5.bits.yoffset);
-}
-
-void
-brw_dump_drawrect(const struct brw_drawrect *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.xmin = 0x%x\n", (*ptr).xmin);
-   debug_printf("\t\t.ymin = 0x%x\n", (*ptr).ymin);
-   debug_printf("\t\t.xmax = 0x%x\n", (*ptr).xmax);
-   debug_printf("\t\t.ymax = 0x%x\n", (*ptr).ymax);
-   debug_printf("\t\t.xorg = 0x%x\n", (*ptr).xorg);
-   debug_printf("\t\t.yorg = 0x%x\n", (*ptr).yorg);
-}
-
-void
-brw_dump_global_depth_offset_clamp(const struct brw_global_depth_offset_clamp *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.depth_offset_clamp = %f\n", (*ptr).depth_offset_clamp);
-}
-
-void
-brw_dump_gs_unit_state(const struct brw_gs_unit_state *ptr)
-{
-   debug_printf("\t\t.thread0.grf_reg_count = 0x%x\n", (*ptr).thread0.grf_reg_count);
-   debug_printf("\t\t.thread0.kernel_start_pointer = 0x%x\n", (*ptr).thread0.kernel_start_pointer);
-   debug_printf("\t\t.thread1.ext_halt_exception_enable = 0x%x\n", (*ptr).thread1.ext_halt_exception_enable);
-   debug_printf("\t\t.thread1.sw_exception_enable = 0x%x\n", (*ptr).thread1.sw_exception_enable);
-   debug_printf("\t\t.thread1.mask_stack_exception_enable = 0x%x\n", (*ptr).thread1.mask_stack_exception_enable);
-   debug_printf("\t\t.thread1.timeout_exception_enable = 0x%x\n", (*ptr).thread1.timeout_exception_enable);
-   debug_printf("\t\t.thread1.illegal_op_exception_enable = 0x%x\n", (*ptr).thread1.illegal_op_exception_enable);
-   debug_printf("\t\t.thread1.depth_coef_urb_read_offset = 0x%x\n", (*ptr).thread1.depth_coef_urb_read_offset);
-   debug_printf("\t\t.thread1.floating_point_mode = 0x%x\n", (*ptr).thread1.floating_point_mode);
-   debug_printf("\t\t.thread1.thread_priority = 0x%x\n", (*ptr).thread1.thread_priority);
-   debug_printf("\t\t.thread1.binding_table_entry_count = 0x%x\n", (*ptr).thread1.binding_table_entry_count);
-   debug_printf("\t\t.thread1.single_program_flow = 0x%x\n", (*ptr).thread1.single_program_flow);
-   debug_printf("\t\t.thread2.per_thread_scratch_space = 0x%x\n", (*ptr).thread2.per_thread_scratch_space);
-   debug_printf("\t\t.thread2.scratch_space_base_pointer = 0x%x\n", (*ptr).thread2.scratch_space_base_pointer);
-   debug_printf("\t\t.thread3.dispatch_grf_start_reg = 0x%x\n", (*ptr).thread3.dispatch_grf_start_reg);
-   debug_printf("\t\t.thread3.urb_entry_read_offset = 0x%x\n", (*ptr).thread3.urb_entry_read_offset);
-   debug_printf("\t\t.thread3.urb_entry_read_length = 0x%x\n", (*ptr).thread3.urb_entry_read_length);
-   debug_printf("\t\t.thread3.const_urb_entry_read_offset = 0x%x\n", (*ptr).thread3.const_urb_entry_read_offset);
-   debug_printf("\t\t.thread3.const_urb_entry_read_length = 0x%x\n", (*ptr).thread3.const_urb_entry_read_length);
-   debug_printf("\t\t.thread4.rendering_enable = 0x%x\n", (*ptr).thread4.rendering_enable);
-   debug_printf("\t\t.thread4.stats_enable = 0x%x\n", (*ptr).thread4.stats_enable);
-   debug_printf("\t\t.thread4.nr_urb_entries = 0x%x\n", (*ptr).thread4.nr_urb_entries);
-   debug_printf("\t\t.thread4.urb_entry_allocation_size = 0x%x\n", (*ptr).thread4.urb_entry_allocation_size);
-   debug_printf("\t\t.thread4.max_threads = 0x%x\n", (*ptr).thread4.max_threads);
-   debug_printf("\t\t.gs5.sampler_count = 0x%x\n", (*ptr).gs5.sampler_count);
-   debug_printf("\t\t.gs5.sampler_state_pointer = 0x%x\n", (*ptr).gs5.sampler_state_pointer);
-   debug_printf("\t\t.gs6.max_vp_index = 0x%x\n", (*ptr).gs6.max_vp_index);
-   debug_printf("\t\t.gs6.svbi_post_inc_value = 0x%x\n", (*ptr).gs6.svbi_post_inc_value);
-   debug_printf("\t\t.gs6.svbi_post_inc_enable = 0x%x\n", (*ptr).gs6.svbi_post_inc_enable);
-   debug_printf("\t\t.gs6.svbi_payload = 0x%x\n", (*ptr).gs6.svbi_payload);
-   debug_printf("\t\t.gs6.discard_adjaceny = 0x%x\n", (*ptr).gs6.discard_adjaceny);
-   debug_printf("\t\t.gs6.reorder_enable = 0x%x\n", (*ptr).gs6.reorder_enable);
-}
-
-void
-brw_dump_indexbuffer(const struct brw_indexbuffer *ptr)
-{
-   debug_printf("\t\t.header.bits.length = 0x%x\n", (*ptr).header.bits.length);
-   debug_printf("\t\t.header.bits.index_format = 0x%x\n", (*ptr).header.bits.index_format);
-   debug_printf("\t\t.header.bits.cut_index_enable = 0x%x\n", (*ptr).header.bits.cut_index_enable);
-   debug_printf("\t\t.header.bits.opcode = 0x%x\n", (*ptr).header.bits.opcode);
-   debug_printf("\t\t.buffer_start = 0x%x\n", (*ptr).buffer_start);
-   debug_printf("\t\t.buffer_end = 0x%x\n", (*ptr).buffer_end);
-}
-
-void
-brw_dump_line_stipple(const struct brw_line_stipple *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits0.pattern = 0x%x\n", (*ptr).bits0.pattern);
-   debug_printf("\t\t.bits1.repeat_count = 0x%x\n", (*ptr).bits1.repeat_count);
-   debug_printf("\t\t.bits1.inverse_repeat_count = 0x%x\n", (*ptr).bits1.inverse_repeat_count);
-}
-
-void
-brw_dump_mi_flush(const struct brw_mi_flush *ptr)
-{
-   debug_printf("\t\t.flags = 0x%x\n", (*ptr).flags);
-   debug_printf("\t\t.opcode = 0x%x\n", (*ptr).opcode);
-}
-
-void
-brw_dump_pipe_control(const struct brw_pipe_control *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.notify_enable = 0x%x\n", (*ptr).header.notify_enable);
-   debug_printf("\t\t.header.texture_cache_flush_enable = 0x%x\n", (*ptr).header.texture_cache_flush_enable);
-   debug_printf("\t\t.header.indirect_state_pointers_disable = 0x%x\n", (*ptr).header.indirect_state_pointers_disable);
-   debug_printf("\t\t.header.instruction_state_cache_flush_enable = 0x%x\n", (*ptr).header.instruction_state_cache_flush_enable);
-   debug_printf("\t\t.header.write_cache_flush_enable = 0x%x\n", (*ptr).header.write_cache_flush_enable);
-   debug_printf("\t\t.header.depth_stall_enable = 0x%x\n", (*ptr).header.depth_stall_enable);
-   debug_printf("\t\t.header.post_sync_operation = 0x%x\n", (*ptr).header.post_sync_operation);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits1.dest_addr_type = 0x%x\n", (*ptr).bits1.dest_addr_type);
-   debug_printf("\t\t.bits1.dest_addr = 0x%x\n", (*ptr).bits1.dest_addr);
-   debug_printf("\t\t.data0 = 0x%x\n", (*ptr).data0);
-   debug_printf("\t\t.data1 = 0x%x\n", (*ptr).data1);
-}
-
-void
-brw_dump_pipeline_select(const struct brw_pipeline_select *ptr)
-{
-   debug_printf("\t\t.header.pipeline_select = 0x%x\n", (*ptr).header.pipeline_select);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-}
-
-void
-brw_dump_pipelined_state_pointers(const struct brw_pipelined_state_pointers *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.vs.offset = 0x%x\n", (*ptr).vs.offset);
-   debug_printf("\t\t.gs.enable = 0x%x\n", (*ptr).gs.enable);
-   debug_printf("\t\t.gs.offset = 0x%x\n", (*ptr).gs.offset);
-   debug_printf("\t\t.clp.enable = 0x%x\n", (*ptr).clp.enable);
-   debug_printf("\t\t.clp.offset = 0x%x\n", (*ptr).clp.offset);
-   debug_printf("\t\t.sf.offset = 0x%x\n", (*ptr).sf.offset);
-   debug_printf("\t\t.wm.offset = 0x%x\n", (*ptr).wm.offset);
-   debug_printf("\t\t.cc.offset = 0x%x\n", (*ptr).cc.offset);
-}
-
-void
-brw_dump_polygon_stipple(const struct brw_polygon_stipple *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.stipple[0] = 0x%x\n", (*ptr).stipple[0]);
-   debug_printf("\t\t.stipple[1] = 0x%x\n", (*ptr).stipple[1]);
-   debug_printf("\t\t.stipple[2] = 0x%x\n", (*ptr).stipple[2]);
-   debug_printf("\t\t.stipple[3] = 0x%x\n", (*ptr).stipple[3]);
-   debug_printf("\t\t.stipple[4] = 0x%x\n", (*ptr).stipple[4]);
-   debug_printf("\t\t.stipple[5] = 0x%x\n", (*ptr).stipple[5]);
-   debug_printf("\t\t.stipple[6] = 0x%x\n", (*ptr).stipple[6]);
-   debug_printf("\t\t.stipple[7] = 0x%x\n", (*ptr).stipple[7]);
-   debug_printf("\t\t.stipple[8] = 0x%x\n", (*ptr).stipple[8]);
-   debug_printf("\t\t.stipple[9] = 0x%x\n", (*ptr).stipple[9]);
-   debug_printf("\t\t.stipple[10] = 0x%x\n", (*ptr).stipple[10]);
-   debug_printf("\t\t.stipple[11] = 0x%x\n", (*ptr).stipple[11]);
-   debug_printf("\t\t.stipple[12] = 0x%x\n", (*ptr).stipple[12]);
-   debug_printf("\t\t.stipple[13] = 0x%x\n", (*ptr).stipple[13]);
-   debug_printf("\t\t.stipple[14] = 0x%x\n", (*ptr).stipple[14]);
-   debug_printf("\t\t.stipple[15] = 0x%x\n", (*ptr).stipple[15]);
-   debug_printf("\t\t.stipple[16] = 0x%x\n", (*ptr).stipple[16]);
-   debug_printf("\t\t.stipple[17] = 0x%x\n", (*ptr).stipple[17]);
-   debug_printf("\t\t.stipple[18] = 0x%x\n", (*ptr).stipple[18]);
-   debug_printf("\t\t.stipple[19] = 0x%x\n", (*ptr).stipple[19]);
-   debug_printf("\t\t.stipple[20] = 0x%x\n", (*ptr).stipple[20]);
-   debug_printf("\t\t.stipple[21] = 0x%x\n", (*ptr).stipple[21]);
-   debug_printf("\t\t.stipple[22] = 0x%x\n", (*ptr).stipple[22]);
-   debug_printf("\t\t.stipple[23] = 0x%x\n", (*ptr).stipple[23]);
-   debug_printf("\t\t.stipple[24] = 0x%x\n", (*ptr).stipple[24]);
-   debug_printf("\t\t.stipple[25] = 0x%x\n", (*ptr).stipple[25]);
-   debug_printf("\t\t.stipple[26] = 0x%x\n", (*ptr).stipple[26]);
-   debug_printf("\t\t.stipple[27] = 0x%x\n", (*ptr).stipple[27]);
-   debug_printf("\t\t.stipple[28] = 0x%x\n", (*ptr).stipple[28]);
-   debug_printf("\t\t.stipple[29] = 0x%x\n", (*ptr).stipple[29]);
-   debug_printf("\t\t.stipple[30] = 0x%x\n", (*ptr).stipple[30]);
-   debug_printf("\t\t.stipple[31] = 0x%x\n", (*ptr).stipple[31]);
-}
-
-void
-brw_dump_polygon_stipple_offset(const struct brw_polygon_stipple_offset *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits0.y_offset = 0x%x\n", (*ptr).bits0.y_offset);
-   debug_printf("\t\t.bits0.x_offset = 0x%x\n", (*ptr).bits0.x_offset);
-}
-
-void
-brw_dump_sampler_default_color(const struct brw_sampler_default_color *ptr)
-{
-   debug_printf("\t\t.color[0] = %f\n", (*ptr).color[0]);
-   debug_printf("\t\t.color[1] = %f\n", (*ptr).color[1]);
-   debug_printf("\t\t.color[2] = %f\n", (*ptr).color[2]);
-   debug_printf("\t\t.color[3] = %f\n", (*ptr).color[3]);
-}
-
-void
-brw_dump_sampler_state(const struct brw_sampler_state *ptr)
-{
-   debug_printf("\t\t.ss0.shadow_function = 0x%x\n", (*ptr).ss0.shadow_function);
-   debug_printf("\t\t.ss0.lod_bias = 0x%x\n", (*ptr).ss0.lod_bias);
-   debug_printf("\t\t.ss0.min_filter = 0x%x\n", (*ptr).ss0.min_filter);
-   debug_printf("\t\t.ss0.mag_filter = 0x%x\n", (*ptr).ss0.mag_filter);
-   debug_printf("\t\t.ss0.mip_filter = 0x%x\n", (*ptr).ss0.mip_filter);
-   debug_printf("\t\t.ss0.base_level = 0x%x\n", (*ptr).ss0.base_level);
-   debug_printf("\t\t.ss0.lod_preclamp = 0x%x\n", (*ptr).ss0.lod_preclamp);
-   debug_printf("\t\t.ss0.default_color_mode = 0x%x\n", (*ptr).ss0.default_color_mode);
-   debug_printf("\t\t.ss0.disable = 0x%x\n", (*ptr).ss0.disable);
-   debug_printf("\t\t.ss1.r_wrap_mode = 0x%x\n", (*ptr).ss1.r_wrap_mode);
-   debug_printf("\t\t.ss1.t_wrap_mode = 0x%x\n", (*ptr).ss1.t_wrap_mode);
-   debug_printf("\t\t.ss1.s_wrap_mode = 0x%x\n", (*ptr).ss1.s_wrap_mode);
-   debug_printf("\t\t.ss1.max_lod = 0x%x\n", (*ptr).ss1.max_lod);
-   debug_printf("\t\t.ss1.min_lod = 0x%x\n", (*ptr).ss1.min_lod);
-   debug_printf("\t\t.ss2.default_color_pointer = 0x%x\n", (*ptr).ss2.default_color_pointer);
-   debug_printf("\t\t.ss3.max_aniso = 0x%x\n", (*ptr).ss3.max_aniso);
-   debug_printf("\t\t.ss3.chroma_key_mode = 0x%x\n", (*ptr).ss3.chroma_key_mode);
-   debug_printf("\t\t.ss3.chroma_key_index = 0x%x\n", (*ptr).ss3.chroma_key_index);
-   debug_printf("\t\t.ss3.chroma_key_enable = 0x%x\n", (*ptr).ss3.chroma_key_enable);
-   debug_printf("\t\t.ss3.monochrome_filter_width = 0x%x\n", (*ptr).ss3.monochrome_filter_width);
-   debug_printf("\t\t.ss3.monochrome_filter_height = 0x%x\n", (*ptr).ss3.monochrome_filter_height);
-}
-
-void
-brw_dump_sf_unit_state(const struct brw_sf_unit_state *ptr)
-{
-   debug_printf("\t\t.thread0.grf_reg_count = 0x%x\n", (*ptr).thread0.grf_reg_count);
-   debug_printf("\t\t.thread0.kernel_start_pointer = 0x%x\n", (*ptr).thread0.kernel_start_pointer);
-   debug_printf("\t\t.thread1.ext_halt_exception_enable = 0x%x\n", (*ptr).thread1.ext_halt_exception_enable);
-   debug_printf("\t\t.thread1.sw_exception_enable = 0x%x\n", (*ptr).thread1.sw_exception_enable);
-   debug_printf("\t\t.thread1.mask_stack_exception_enable = 0x%x\n", (*ptr).thread1.mask_stack_exception_enable);
-   debug_printf("\t\t.thread1.timeout_exception_enable = 0x%x\n", (*ptr).thread1.timeout_exception_enable);
-   debug_printf("\t\t.thread1.illegal_op_exception_enable = 0x%x\n", (*ptr).thread1.illegal_op_exception_enable);
-   debug_printf("\t\t.thread1.depth_coef_urb_read_offset = 0x%x\n", (*ptr).thread1.depth_coef_urb_read_offset);
-   debug_printf("\t\t.thread1.floating_point_mode = 0x%x\n", (*ptr).thread1.floating_point_mode);
-   debug_printf("\t\t.thread1.thread_priority = 0x%x\n", (*ptr).thread1.thread_priority);
-   debug_printf("\t\t.thread1.binding_table_entry_count = 0x%x\n", (*ptr).thread1.binding_table_entry_count);
-   debug_printf("\t\t.thread1.single_program_flow = 0x%x\n", (*ptr).thread1.single_program_flow);
-   debug_printf("\t\t.thread2.per_thread_scratch_space = 0x%x\n", (*ptr).thread2.per_thread_scratch_space);
-   debug_printf("\t\t.thread2.scratch_space_base_pointer = 0x%x\n", (*ptr).thread2.scratch_space_base_pointer);
-   debug_printf("\t\t.thread3.dispatch_grf_start_reg = 0x%x\n", (*ptr).thread3.dispatch_grf_start_reg);
-   debug_printf("\t\t.thread3.urb_entry_read_offset = 0x%x\n", (*ptr).thread3.urb_entry_read_offset);
-   debug_printf("\t\t.thread3.urb_entry_read_length = 0x%x\n", (*ptr).thread3.urb_entry_read_length);
-   debug_printf("\t\t.thread3.const_urb_entry_read_offset = 0x%x\n", (*ptr).thread3.const_urb_entry_read_offset);
-   debug_printf("\t\t.thread3.const_urb_entry_read_length = 0x%x\n", (*ptr).thread3.const_urb_entry_read_length);
-   debug_printf("\t\t.thread4.stats_enable = 0x%x\n", (*ptr).thread4.stats_enable);
-   debug_printf("\t\t.thread4.nr_urb_entries = 0x%x\n", (*ptr).thread4.nr_urb_entries);
-   debug_printf("\t\t.thread4.urb_entry_allocation_size = 0x%x\n", (*ptr).thread4.urb_entry_allocation_size);
-   debug_printf("\t\t.thread4.max_threads = 0x%x\n", (*ptr).thread4.max_threads);
-   debug_printf("\t\t.sf5.front_winding = 0x%x\n", (*ptr).sf5.front_winding);
-   debug_printf("\t\t.sf5.viewport_transform = 0x%x\n", (*ptr).sf5.viewport_transform);
-   debug_printf("\t\t.sf5.sf_viewport_state_offset = 0x%x\n", (*ptr).sf5.sf_viewport_state_offset);
-   debug_printf("\t\t.sf6.dest_org_vbias = 0x%x\n", (*ptr).sf6.dest_org_vbias);
-   debug_printf("\t\t.sf6.dest_org_hbias = 0x%x\n", (*ptr).sf6.dest_org_hbias);
-   debug_printf("\t\t.sf6.scissor = 0x%x\n", (*ptr).sf6.scissor);
-   debug_printf("\t\t.sf6.disable_2x2_trifilter = 0x%x\n", (*ptr).sf6.disable_2x2_trifilter);
-   debug_printf("\t\t.sf6.disable_zero_pix_trifilter = 0x%x\n", (*ptr).sf6.disable_zero_pix_trifilter);
-   debug_printf("\t\t.sf6.point_rast_rule = 0x%x\n", (*ptr).sf6.point_rast_rule);
-   debug_printf("\t\t.sf6.line_endcap_aa_region_width = 0x%x\n", (*ptr).sf6.line_endcap_aa_region_width);
-   debug_printf("\t\t.sf6.line_width = 0x%x\n", (*ptr).sf6.line_width);
-   debug_printf("\t\t.sf6.fast_scissor_disable = 0x%x\n", (*ptr).sf6.fast_scissor_disable);
-   debug_printf("\t\t.sf6.cull_mode = 0x%x\n", (*ptr).sf6.cull_mode);
-   debug_printf("\t\t.sf6.aa_enable = 0x%x\n", (*ptr).sf6.aa_enable);
-   debug_printf("\t\t.sf7.point_size = 0x%x\n", (*ptr).sf7.point_size);
-   debug_printf("\t\t.sf7.use_point_size_state = 0x%x\n", (*ptr).sf7.use_point_size_state);
-   debug_printf("\t\t.sf7.subpixel_precision = 0x%x\n", (*ptr).sf7.subpixel_precision);
-   debug_printf("\t\t.sf7.sprite_point = 0x%x\n", (*ptr).sf7.sprite_point);
-   debug_printf("\t\t.sf7.aa_line_distance_mode = 0x%x\n", (*ptr).sf7.aa_line_distance_mode);
-   debug_printf("\t\t.sf7.trifan_pv = 0x%x\n", (*ptr).sf7.trifan_pv);
-   debug_printf("\t\t.sf7.linestrip_pv = 0x%x\n", (*ptr).sf7.linestrip_pv);
-   debug_printf("\t\t.sf7.tristrip_pv = 0x%x\n", (*ptr).sf7.tristrip_pv);
-   debug_printf("\t\t.sf7.line_last_pixel_enable = 0x%x\n", (*ptr).sf7.line_last_pixel_enable);
-}
-
-void
-brw_dump_sf_viewport(const struct brw_sf_viewport *ptr)
-{
-   debug_printf("\t\t.viewport.m00 = %f\n", (*ptr).viewport.m00);
-   debug_printf("\t\t.viewport.m11 = %f\n", (*ptr).viewport.m11);
-   debug_printf("\t\t.viewport.m22 = %f\n", (*ptr).viewport.m22);
-   debug_printf("\t\t.viewport.m30 = %f\n", (*ptr).viewport.m30);
-   debug_printf("\t\t.viewport.m31 = %f\n", (*ptr).viewport.m31);
-   debug_printf("\t\t.viewport.m32 = %f\n", (*ptr).viewport.m32);
-   debug_printf("\t\t.scissor.xmin = 0x%x\n", (*ptr).scissor.xmin);
-   debug_printf("\t\t.scissor.ymin = 0x%x\n", (*ptr).scissor.ymin);
-   debug_printf("\t\t.scissor.xmax = 0x%x\n", (*ptr).scissor.xmax);
-   debug_printf("\t\t.scissor.ymax = 0x%x\n", (*ptr).scissor.ymax);
-}
-
-void
-brw_dump_ss0(const struct brw_ss0 *ptr)
-{
-   debug_printf("\t\t.shadow_function = 0x%x\n", (*ptr).shadow_function);
-   debug_printf("\t\t.lod_bias = 0x%x\n", (*ptr).lod_bias);
-   debug_printf("\t\t.min_filter = 0x%x\n", (*ptr).min_filter);
-   debug_printf("\t\t.mag_filter = 0x%x\n", (*ptr).mag_filter);
-   debug_printf("\t\t.mip_filter = 0x%x\n", (*ptr).mip_filter);
-   debug_printf("\t\t.base_level = 0x%x\n", (*ptr).base_level);
-   debug_printf("\t\t.lod_preclamp = 0x%x\n", (*ptr).lod_preclamp);
-   debug_printf("\t\t.default_color_mode = 0x%x\n", (*ptr).default_color_mode);
-   debug_printf("\t\t.disable = 0x%x\n", (*ptr).disable);
-}
-
-void
-brw_dump_ss1(const struct brw_ss1 *ptr)
-{
-   debug_printf("\t\t.r_wrap_mode = 0x%x\n", (*ptr).r_wrap_mode);
-   debug_printf("\t\t.t_wrap_mode = 0x%x\n", (*ptr).t_wrap_mode);
-   debug_printf("\t\t.s_wrap_mode = 0x%x\n", (*ptr).s_wrap_mode);
-   debug_printf("\t\t.max_lod = 0x%x\n", (*ptr).max_lod);
-   debug_printf("\t\t.min_lod = 0x%x\n", (*ptr).min_lod);
-}
-
-void
-brw_dump_ss2(const struct brw_ss2 *ptr)
-{
-   debug_printf("\t\t.default_color_pointer = 0x%x\n", (*ptr).default_color_pointer);
-}
-
-void
-brw_dump_ss3(const struct brw_ss3 *ptr)
-{
-   debug_printf("\t\t.max_aniso = 0x%x\n", (*ptr).max_aniso);
-   debug_printf("\t\t.chroma_key_mode = 0x%x\n", (*ptr).chroma_key_mode);
-   debug_printf("\t\t.chroma_key_index = 0x%x\n", (*ptr).chroma_key_index);
-   debug_printf("\t\t.chroma_key_enable = 0x%x\n", (*ptr).chroma_key_enable);
-   debug_printf("\t\t.monochrome_filter_width = 0x%x\n", (*ptr).monochrome_filter_width);
-   debug_printf("\t\t.monochrome_filter_height = 0x%x\n", (*ptr).monochrome_filter_height);
-}
-
-void
-brw_dump_state_base_address(const struct brw_state_base_address *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits0.modify_enable = 0x%x\n", (*ptr).bits0.modify_enable);
-   debug_printf("\t\t.bits0.general_state_address = 0x%x\n", (*ptr).bits0.general_state_address);
-   debug_printf("\t\t.bits1.modify_enable = 0x%x\n", (*ptr).bits1.modify_enable);
-   debug_printf("\t\t.bits1.surface_state_address = 0x%x\n", (*ptr).bits1.surface_state_address);
-   debug_printf("\t\t.bits2.modify_enable = 0x%x\n", (*ptr).bits2.modify_enable);
-   debug_printf("\t\t.bits2.indirect_object_state_address = 0x%x\n", (*ptr).bits2.indirect_object_state_address);
-   debug_printf("\t\t.bits3.modify_enable = 0x%x\n", (*ptr).bits3.modify_enable);
-   debug_printf("\t\t.bits3.general_state_upper_bound = 0x%x\n", (*ptr).bits3.general_state_upper_bound);
-   debug_printf("\t\t.bits4.modify_enable = 0x%x\n", (*ptr).bits4.modify_enable);
-   debug_printf("\t\t.bits4.indirect_object_state_upper_bound = 0x%x\n", (*ptr).bits4.indirect_object_state_upper_bound);
-}
-
-void
-brw_dump_state_prefetch(const struct brw_state_prefetch *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits0.prefetch_count = 0x%x\n", (*ptr).bits0.prefetch_count);
-   debug_printf("\t\t.bits0.prefetch_pointer = 0x%x\n", (*ptr).bits0.prefetch_pointer);
-}
-
-void
-brw_dump_surf_ss0(const struct brw_surf_ss0 *ptr)
-{
-   debug_printf("\t\t.cube_pos_z = 0x%x\n", (*ptr).cube_pos_z);
-   debug_printf("\t\t.cube_neg_z = 0x%x\n", (*ptr).cube_neg_z);
-   debug_printf("\t\t.cube_pos_y = 0x%x\n", (*ptr).cube_pos_y);
-   debug_printf("\t\t.cube_neg_y = 0x%x\n", (*ptr).cube_neg_y);
-   debug_printf("\t\t.cube_pos_x = 0x%x\n", (*ptr).cube_pos_x);
-   debug_printf("\t\t.cube_neg_x = 0x%x\n", (*ptr).cube_neg_x);
-   debug_printf("\t\t.mipmap_layout_mode = 0x%x\n", (*ptr).mipmap_layout_mode);
-   debug_printf("\t\t.vert_line_stride_ofs = 0x%x\n", (*ptr).vert_line_stride_ofs);
-   debug_printf("\t\t.vert_line_stride = 0x%x\n", (*ptr).vert_line_stride);
-   debug_printf("\t\t.color_blend = 0x%x\n", (*ptr).color_blend);
-   debug_printf("\t\t.writedisable_blue = 0x%x\n", (*ptr).writedisable_blue);
-   debug_printf("\t\t.writedisable_green = 0x%x\n", (*ptr).writedisable_green);
-   debug_printf("\t\t.writedisable_red = 0x%x\n", (*ptr).writedisable_red);
-   debug_printf("\t\t.writedisable_alpha = 0x%x\n", (*ptr).writedisable_alpha);
-   debug_printf("\t\t.surface_format = 0x%x\n", (*ptr).surface_format);
-   debug_printf("\t\t.data_return_format = 0x%x\n", (*ptr).data_return_format);
-   debug_printf("\t\t.surface_type = 0x%x\n", (*ptr).surface_type);
-}
-
-void
-brw_dump_surf_ss1(const struct brw_surf_ss1 *ptr)
-{
-   debug_printf("\t\t.base_addr = 0x%x\n", (*ptr).base_addr);
-}
-
-void
-brw_dump_surf_ss2(const struct brw_surf_ss2 *ptr)
-{
-   debug_printf("\t\t.mip_count = 0x%x\n", (*ptr).mip_count);
-   debug_printf("\t\t.width = 0x%x\n", (*ptr).width);
-   debug_printf("\t\t.height = 0x%x\n", (*ptr).height);
-}
-
-void
-brw_dump_surf_ss3(const struct brw_surf_ss3 *ptr)
-{
-   debug_printf("\t\t.tile_walk = 0x%x\n", (*ptr).tile_walk);
-   debug_printf("\t\t.tiled_surface = 0x%x\n", (*ptr).tiled_surface);
-   debug_printf("\t\t.pitch = 0x%x\n", (*ptr).pitch);
-   debug_printf("\t\t.depth = 0x%x\n", (*ptr).depth);
-}
-
-void
-brw_dump_surf_ss4(const struct brw_surf_ss4 *ptr)
-{
-   debug_printf("\t\t.multisample_position_palette_index = 0x%x\n", (*ptr).multisample_position_palette_index);
-   debug_printf("\t\t.num_multisamples = 0x%x\n", (*ptr).num_multisamples);
-   debug_printf("\t\t.render_target_view_extent = 0x%x\n", (*ptr).render_target_view_extent);
-   debug_printf("\t\t.min_array_elt = 0x%x\n", (*ptr).min_array_elt);
-   debug_printf("\t\t.min_lod = 0x%x\n", (*ptr).min_lod);
-}
-
-void
-brw_dump_surf_ss5(const struct brw_surf_ss5 *ptr)
-{
-   debug_printf("\t\t.llc_mapping = 0x%x\n", (*ptr).llc_mapping);
-   debug_printf("\t\t.mlc_mapping = 0x%x\n", (*ptr).mlc_mapping);
-   debug_printf("\t\t.gfdt = 0x%x\n", (*ptr).gfdt);
-   debug_printf("\t\t.gfdt_src = 0x%x\n", (*ptr).gfdt_src);
-   debug_printf("\t\t.y_offset = 0x%x\n", (*ptr).y_offset);
-   debug_printf("\t\t.x_offset = 0x%x\n", (*ptr).x_offset);
-}
-
-void
-brw_dump_surface_state(const struct brw_surface_state *ptr)
-{
-   debug_printf("\t\t.ss0.cube_pos_z = 0x%x\n", (*ptr).ss0.cube_pos_z);
-   debug_printf("\t\t.ss0.cube_neg_z = 0x%x\n", (*ptr).ss0.cube_neg_z);
-   debug_printf("\t\t.ss0.cube_pos_y = 0x%x\n", (*ptr).ss0.cube_pos_y);
-   debug_printf("\t\t.ss0.cube_neg_y = 0x%x\n", (*ptr).ss0.cube_neg_y);
-   debug_printf("\t\t.ss0.cube_pos_x = 0x%x\n", (*ptr).ss0.cube_pos_x);
-   debug_printf("\t\t.ss0.cube_neg_x = 0x%x\n", (*ptr).ss0.cube_neg_x);
-   debug_printf("\t\t.ss0.mipmap_layout_mode = 0x%x\n", (*ptr).ss0.mipmap_layout_mode);
-   debug_printf("\t\t.ss0.vert_line_stride_ofs = 0x%x\n", (*ptr).ss0.vert_line_stride_ofs);
-   debug_printf("\t\t.ss0.vert_line_stride = 0x%x\n", (*ptr).ss0.vert_line_stride);
-   debug_printf("\t\t.ss0.color_blend = 0x%x\n", (*ptr).ss0.color_blend);
-   debug_printf("\t\t.ss0.writedisable_blue = 0x%x\n", (*ptr).ss0.writedisable_blue);
-   debug_printf("\t\t.ss0.writedisable_green = 0x%x\n", (*ptr).ss0.writedisable_green);
-   debug_printf("\t\t.ss0.writedisable_red = 0x%x\n", (*ptr).ss0.writedisable_red);
-   debug_printf("\t\t.ss0.writedisable_alpha = 0x%x\n", (*ptr).ss0.writedisable_alpha);
-   debug_printf("\t\t.ss0.surface_format = 0x%x\n", (*ptr).ss0.surface_format);
-   debug_printf("\t\t.ss0.data_return_format = 0x%x\n", (*ptr).ss0.data_return_format);
-   debug_printf("\t\t.ss0.surface_type = 0x%x\n", (*ptr).ss0.surface_type);
-   debug_printf("\t\t.ss1.base_addr = 0x%x\n", (*ptr).ss1.base_addr);
-   debug_printf("\t\t.ss2.mip_count = 0x%x\n", (*ptr).ss2.mip_count);
-   debug_printf("\t\t.ss2.width = 0x%x\n", (*ptr).ss2.width);
-   debug_printf("\t\t.ss2.height = 0x%x\n", (*ptr).ss2.height);
-   debug_printf("\t\t.ss3.tile_walk = 0x%x\n", (*ptr).ss3.tile_walk);
-   debug_printf("\t\t.ss3.tiled_surface = 0x%x\n", (*ptr).ss3.tiled_surface);
-   debug_printf("\t\t.ss3.pitch = 0x%x\n", (*ptr).ss3.pitch);
-   debug_printf("\t\t.ss3.depth = 0x%x\n", (*ptr).ss3.depth);
-   debug_printf("\t\t.ss4.multisample_position_palette_index = 0x%x\n", (*ptr).ss4.multisample_position_palette_index);
-   debug_printf("\t\t.ss4.num_multisamples = 0x%x\n", (*ptr).ss4.num_multisamples);
-   debug_printf("\t\t.ss4.render_target_view_extent = 0x%x\n", (*ptr).ss4.render_target_view_extent);
-   debug_printf("\t\t.ss4.min_array_elt = 0x%x\n", (*ptr).ss4.min_array_elt);
-   debug_printf("\t\t.ss4.min_lod = 0x%x\n", (*ptr).ss4.min_lod);
-   debug_printf("\t\t.ss5.llc_mapping = 0x%x\n", (*ptr).ss5.llc_mapping);
-   debug_printf("\t\t.ss5.mlc_mapping = 0x%x\n", (*ptr).ss5.mlc_mapping);
-   debug_printf("\t\t.ss5.gfdt = 0x%x\n", (*ptr).ss5.gfdt);
-   debug_printf("\t\t.ss5.gfdt_src = 0x%x\n", (*ptr).ss5.gfdt_src);
-   debug_printf("\t\t.ss5.y_offset = 0x%x\n", (*ptr).ss5.y_offset);
-   debug_printf("\t\t.ss5.x_offset = 0x%x\n", (*ptr).ss5.x_offset);
-}
-
-void
-brw_dump_system_instruction_pointer(const struct brw_system_instruction_pointer *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits0.system_instruction_pointer = 0x%x\n", (*ptr).bits0.system_instruction_pointer);
-}
-
-void
-brw_dump_urb_fence(const struct brw_urb_fence *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.vs_realloc = 0x%x\n", (*ptr).header.vs_realloc);
-   debug_printf("\t\t.header.gs_realloc = 0x%x\n", (*ptr).header.gs_realloc);
-   debug_printf("\t\t.header.clp_realloc = 0x%x\n", (*ptr).header.clp_realloc);
-   debug_printf("\t\t.header.sf_realloc = 0x%x\n", (*ptr).header.sf_realloc);
-   debug_printf("\t\t.header.vfe_realloc = 0x%x\n", (*ptr).header.vfe_realloc);
-   debug_printf("\t\t.header.cs_realloc = 0x%x\n", (*ptr).header.cs_realloc);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.bits0.vs_fence = 0x%x\n", (*ptr).bits0.vs_fence);
-   debug_printf("\t\t.bits0.gs_fence = 0x%x\n", (*ptr).bits0.gs_fence);
-   debug_printf("\t\t.bits0.clp_fence = 0x%x\n", (*ptr).bits0.clp_fence);
-   debug_printf("\t\t.bits1.sf_fence = 0x%x\n", (*ptr).bits1.sf_fence);
-   debug_printf("\t\t.bits1.vf_fence = 0x%x\n", (*ptr).bits1.vf_fence);
-   debug_printf("\t\t.bits1.cs_fence = 0x%x\n", (*ptr).bits1.cs_fence);
-}
-
-void
-brw_dump_urb_immediate(const struct brw_urb_immediate *ptr)
-{
-   debug_printf("\t\t.opcode = 0x%x\n", (*ptr).opcode);
-   debug_printf("\t\t.offset = 0x%x\n", (*ptr).offset);
-   debug_printf("\t\t.swizzle_control = 0x%x\n", (*ptr).swizzle_control);
-   debug_printf("\t\t.allocate = 0x%x\n", (*ptr).allocate);
-   debug_printf("\t\t.used = 0x%x\n", (*ptr).used);
-   debug_printf("\t\t.complete = 0x%x\n", (*ptr).complete);
-   debug_printf("\t\t.response_length = 0x%x\n", (*ptr).response_length);
-   debug_printf("\t\t.msg_length = 0x%x\n", (*ptr).msg_length);
-   debug_printf("\t\t.msg_target = 0x%x\n", (*ptr).msg_target);
-   debug_printf("\t\t.end_of_thread = 0x%x\n", (*ptr).end_of_thread);
-}
-
-void
-brw_dump_vb_array_state(const struct brw_vb_array_state *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.vb[0].vb0.pitch = 0x%x\n", (*ptr).vb[0].vb0.pitch);
-   debug_printf("\t\t.vb[0].vb0.access_type = 0x%x\n", (*ptr).vb[0].vb0.access_type);
-   debug_printf("\t\t.vb[0].vb0.vb_index = 0x%x\n", (*ptr).vb[0].vb0.vb_index);
-   debug_printf("\t\t.vb[0].start_addr = 0x%x\n", (*ptr).vb[0].start_addr);
-   debug_printf("\t\t.vb[0].max_index = 0x%x\n", (*ptr).vb[0].max_index);
-   debug_printf("\t\t.vb[0].instance_data_step_rate = 0x%x\n", (*ptr).vb[0].instance_data_step_rate);
-   debug_printf("\t\t.vb[1].vb0.pitch = 0x%x\n", (*ptr).vb[1].vb0.pitch);
-   debug_printf("\t\t.vb[1].vb0.access_type = 0x%x\n", (*ptr).vb[1].vb0.access_type);
-   debug_printf("\t\t.vb[1].vb0.vb_index = 0x%x\n", (*ptr).vb[1].vb0.vb_index);
-   debug_printf("\t\t.vb[1].start_addr = 0x%x\n", (*ptr).vb[1].start_addr);
-   debug_printf("\t\t.vb[1].max_index = 0x%x\n", (*ptr).vb[1].max_index);
-   debug_printf("\t\t.vb[1].instance_data_step_rate = 0x%x\n", (*ptr).vb[1].instance_data_step_rate);
-   debug_printf("\t\t.vb[2].vb0.pitch = 0x%x\n", (*ptr).vb[2].vb0.pitch);
-   debug_printf("\t\t.vb[2].vb0.access_type = 0x%x\n", (*ptr).vb[2].vb0.access_type);
-   debug_printf("\t\t.vb[2].vb0.vb_index = 0x%x\n", (*ptr).vb[2].vb0.vb_index);
-   debug_printf("\t\t.vb[2].start_addr = 0x%x\n", (*ptr).vb[2].start_addr);
-   debug_printf("\t\t.vb[2].max_index = 0x%x\n", (*ptr).vb[2].max_index);
-   debug_printf("\t\t.vb[2].instance_data_step_rate = 0x%x\n", (*ptr).vb[2].instance_data_step_rate);
-   debug_printf("\t\t.vb[3].vb0.pitch = 0x%x\n", (*ptr).vb[3].vb0.pitch);
-   debug_printf("\t\t.vb[3].vb0.access_type = 0x%x\n", (*ptr).vb[3].vb0.access_type);
-   debug_printf("\t\t.vb[3].vb0.vb_index = 0x%x\n", (*ptr).vb[3].vb0.vb_index);
-   debug_printf("\t\t.vb[3].start_addr = 0x%x\n", (*ptr).vb[3].start_addr);
-   debug_printf("\t\t.vb[3].max_index = 0x%x\n", (*ptr).vb[3].max_index);
-   debug_printf("\t\t.vb[3].instance_data_step_rate = 0x%x\n", (*ptr).vb[3].instance_data_step_rate);
-   debug_printf("\t\t.vb[4].vb0.pitch = 0x%x\n", (*ptr).vb[4].vb0.pitch);
-   debug_printf("\t\t.vb[4].vb0.access_type = 0x%x\n", (*ptr).vb[4].vb0.access_type);
-   debug_printf("\t\t.vb[4].vb0.vb_index = 0x%x\n", (*ptr).vb[4].vb0.vb_index);
-   debug_printf("\t\t.vb[4].start_addr = 0x%x\n", (*ptr).vb[4].start_addr);
-   debug_printf("\t\t.vb[4].max_index = 0x%x\n", (*ptr).vb[4].max_index);
-   debug_printf("\t\t.vb[4].instance_data_step_rate = 0x%x\n", (*ptr).vb[4].instance_data_step_rate);
-   debug_printf("\t\t.vb[5].vb0.pitch = 0x%x\n", (*ptr).vb[5].vb0.pitch);
-   debug_printf("\t\t.vb[5].vb0.access_type = 0x%x\n", (*ptr).vb[5].vb0.access_type);
-   debug_printf("\t\t.vb[5].vb0.vb_index = 0x%x\n", (*ptr).vb[5].vb0.vb_index);
-   debug_printf("\t\t.vb[5].start_addr = 0x%x\n", (*ptr).vb[5].start_addr);
-   debug_printf("\t\t.vb[5].max_index = 0x%x\n", (*ptr).vb[5].max_index);
-   debug_printf("\t\t.vb[5].instance_data_step_rate = 0x%x\n", (*ptr).vb[5].instance_data_step_rate);
-   debug_printf("\t\t.vb[6].vb0.pitch = 0x%x\n", (*ptr).vb[6].vb0.pitch);
-   debug_printf("\t\t.vb[6].vb0.access_type = 0x%x\n", (*ptr).vb[6].vb0.access_type);
-   debug_printf("\t\t.vb[6].vb0.vb_index = 0x%x\n", (*ptr).vb[6].vb0.vb_index);
-   debug_printf("\t\t.vb[6].start_addr = 0x%x\n", (*ptr).vb[6].start_addr);
-   debug_printf("\t\t.vb[6].max_index = 0x%x\n", (*ptr).vb[6].max_index);
-   debug_printf("\t\t.vb[6].instance_data_step_rate = 0x%x\n", (*ptr).vb[6].instance_data_step_rate);
-   debug_printf("\t\t.vb[7].vb0.pitch = 0x%x\n", (*ptr).vb[7].vb0.pitch);
-   debug_printf("\t\t.vb[7].vb0.access_type = 0x%x\n", (*ptr).vb[7].vb0.access_type);
-   debug_printf("\t\t.vb[7].vb0.vb_index = 0x%x\n", (*ptr).vb[7].vb0.vb_index);
-   debug_printf("\t\t.vb[7].start_addr = 0x%x\n", (*ptr).vb[7].start_addr);
-   debug_printf("\t\t.vb[7].max_index = 0x%x\n", (*ptr).vb[7].max_index);
-   debug_printf("\t\t.vb[7].instance_data_step_rate = 0x%x\n", (*ptr).vb[7].instance_data_step_rate);
-   debug_printf("\t\t.vb[8].vb0.pitch = 0x%x\n", (*ptr).vb[8].vb0.pitch);
-   debug_printf("\t\t.vb[8].vb0.access_type = 0x%x\n", (*ptr).vb[8].vb0.access_type);
-   debug_printf("\t\t.vb[8].vb0.vb_index = 0x%x\n", (*ptr).vb[8].vb0.vb_index);
-   debug_printf("\t\t.vb[8].start_addr = 0x%x\n", (*ptr).vb[8].start_addr);
-   debug_printf("\t\t.vb[8].max_index = 0x%x\n", (*ptr).vb[8].max_index);
-   debug_printf("\t\t.vb[8].instance_data_step_rate = 0x%x\n", (*ptr).vb[8].instance_data_step_rate);
-   debug_printf("\t\t.vb[9].vb0.pitch = 0x%x\n", (*ptr).vb[9].vb0.pitch);
-   debug_printf("\t\t.vb[9].vb0.access_type = 0x%x\n", (*ptr).vb[9].vb0.access_type);
-   debug_printf("\t\t.vb[9].vb0.vb_index = 0x%x\n", (*ptr).vb[9].vb0.vb_index);
-   debug_printf("\t\t.vb[9].start_addr = 0x%x\n", (*ptr).vb[9].start_addr);
-   debug_printf("\t\t.vb[9].max_index = 0x%x\n", (*ptr).vb[9].max_index);
-   debug_printf("\t\t.vb[9].instance_data_step_rate = 0x%x\n", (*ptr).vb[9].instance_data_step_rate);
-   debug_printf("\t\t.vb[10].vb0.pitch = 0x%x\n", (*ptr).vb[10].vb0.pitch);
-   debug_printf("\t\t.vb[10].vb0.access_type = 0x%x\n", (*ptr).vb[10].vb0.access_type);
-   debug_printf("\t\t.vb[10].vb0.vb_index = 0x%x\n", (*ptr).vb[10].vb0.vb_index);
-   debug_printf("\t\t.vb[10].start_addr = 0x%x\n", (*ptr).vb[10].start_addr);
-   debug_printf("\t\t.vb[10].max_index = 0x%x\n", (*ptr).vb[10].max_index);
-   debug_printf("\t\t.vb[10].instance_data_step_rate = 0x%x\n", (*ptr).vb[10].instance_data_step_rate);
-   debug_printf("\t\t.vb[11].vb0.pitch = 0x%x\n", (*ptr).vb[11].vb0.pitch);
-   debug_printf("\t\t.vb[11].vb0.access_type = 0x%x\n", (*ptr).vb[11].vb0.access_type);
-   debug_printf("\t\t.vb[11].vb0.vb_index = 0x%x\n", (*ptr).vb[11].vb0.vb_index);
-   debug_printf("\t\t.vb[11].start_addr = 0x%x\n", (*ptr).vb[11].start_addr);
-   debug_printf("\t\t.vb[11].max_index = 0x%x\n", (*ptr).vb[11].max_index);
-   debug_printf("\t\t.vb[11].instance_data_step_rate = 0x%x\n", (*ptr).vb[11].instance_data_step_rate);
-   debug_printf("\t\t.vb[12].vb0.pitch = 0x%x\n", (*ptr).vb[12].vb0.pitch);
-   debug_printf("\t\t.vb[12].vb0.access_type = 0x%x\n", (*ptr).vb[12].vb0.access_type);
-   debug_printf("\t\t.vb[12].vb0.vb_index = 0x%x\n", (*ptr).vb[12].vb0.vb_index);
-   debug_printf("\t\t.vb[12].start_addr = 0x%x\n", (*ptr).vb[12].start_addr);
-   debug_printf("\t\t.vb[12].max_index = 0x%x\n", (*ptr).vb[12].max_index);
-   debug_printf("\t\t.vb[12].instance_data_step_rate = 0x%x\n", (*ptr).vb[12].instance_data_step_rate);
-   debug_printf("\t\t.vb[13].vb0.pitch = 0x%x\n", (*ptr).vb[13].vb0.pitch);
-   debug_printf("\t\t.vb[13].vb0.access_type = 0x%x\n", (*ptr).vb[13].vb0.access_type);
-   debug_printf("\t\t.vb[13].vb0.vb_index = 0x%x\n", (*ptr).vb[13].vb0.vb_index);
-   debug_printf("\t\t.vb[13].start_addr = 0x%x\n", (*ptr).vb[13].start_addr);
-   debug_printf("\t\t.vb[13].max_index = 0x%x\n", (*ptr).vb[13].max_index);
-   debug_printf("\t\t.vb[13].instance_data_step_rate = 0x%x\n", (*ptr).vb[13].instance_data_step_rate);
-   debug_printf("\t\t.vb[14].vb0.pitch = 0x%x\n", (*ptr).vb[14].vb0.pitch);
-   debug_printf("\t\t.vb[14].vb0.access_type = 0x%x\n", (*ptr).vb[14].vb0.access_type);
-   debug_printf("\t\t.vb[14].vb0.vb_index = 0x%x\n", (*ptr).vb[14].vb0.vb_index);
-   debug_printf("\t\t.vb[14].start_addr = 0x%x\n", (*ptr).vb[14].start_addr);
-   debug_printf("\t\t.vb[14].max_index = 0x%x\n", (*ptr).vb[14].max_index);
-   debug_printf("\t\t.vb[14].instance_data_step_rate = 0x%x\n", (*ptr).vb[14].instance_data_step_rate);
-   debug_printf("\t\t.vb[15].vb0.pitch = 0x%x\n", (*ptr).vb[15].vb0.pitch);
-   debug_printf("\t\t.vb[15].vb0.access_type = 0x%x\n", (*ptr).vb[15].vb0.access_type);
-   debug_printf("\t\t.vb[15].vb0.vb_index = 0x%x\n", (*ptr).vb[15].vb0.vb_index);
-   debug_printf("\t\t.vb[15].start_addr = 0x%x\n", (*ptr).vb[15].start_addr);
-   debug_printf("\t\t.vb[15].max_index = 0x%x\n", (*ptr).vb[15].max_index);
-   debug_printf("\t\t.vb[15].instance_data_step_rate = 0x%x\n", (*ptr).vb[15].instance_data_step_rate);
-   debug_printf("\t\t.vb[16].vb0.pitch = 0x%x\n", (*ptr).vb[16].vb0.pitch);
-   debug_printf("\t\t.vb[16].vb0.access_type = 0x%x\n", (*ptr).vb[16].vb0.access_type);
-   debug_printf("\t\t.vb[16].vb0.vb_index = 0x%x\n", (*ptr).vb[16].vb0.vb_index);
-   debug_printf("\t\t.vb[16].start_addr = 0x%x\n", (*ptr).vb[16].start_addr);
-   debug_printf("\t\t.vb[16].max_index = 0x%x\n", (*ptr).vb[16].max_index);
-   debug_printf("\t\t.vb[16].instance_data_step_rate = 0x%x\n", (*ptr).vb[16].instance_data_step_rate);
-}
-
-void
-brw_dump_vertex_buffer_state(const struct brw_vertex_buffer_state *ptr)
-{
-   debug_printf("\t\t.vb0.pitch = 0x%x\n", (*ptr).vb0.pitch);
-   debug_printf("\t\t.vb0.access_type = 0x%x\n", (*ptr).vb0.access_type);
-   debug_printf("\t\t.vb0.vb_index = 0x%x\n", (*ptr).vb0.vb_index);
-   debug_printf("\t\t.start_addr = 0x%x\n", (*ptr).start_addr);
-   debug_printf("\t\t.max_index = 0x%x\n", (*ptr).max_index);
-   debug_printf("\t\t.instance_data_step_rate = 0x%x\n", (*ptr).instance_data_step_rate);
-}
-
-void
-brw_dump_vertex_element_packet(const struct brw_vertex_element_packet *ptr)
-{
-   debug_printf("\t\t.header.length = 0x%x\n", (*ptr).header.length);
-   debug_printf("\t\t.header.opcode = 0x%x\n", (*ptr).header.opcode);
-   debug_printf("\t\t.ve[0].ve0.src_offset = 0x%x\n", (*ptr).ve[0].ve0.src_offset);
-   debug_printf("\t\t.ve[0].ve0.src_format = 0x%x\n", (*ptr).ve[0].ve0.src_format);
-   debug_printf("\t\t.ve[0].ve0.valid = 0x%x\n", (*ptr).ve[0].ve0.valid);
-   debug_printf("\t\t.ve[0].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[0].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[0].ve1.dst_offset = 0x%x\n", (*ptr).ve[0].ve1.dst_offset);
-   debug_printf("\t\t.ve[0].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[0].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[0].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[0].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[0].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[0].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[0].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[0].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[1].ve0.src_offset = 0x%x\n", (*ptr).ve[1].ve0.src_offset);
-   debug_printf("\t\t.ve[1].ve0.src_format = 0x%x\n", (*ptr).ve[1].ve0.src_format);
-   debug_printf("\t\t.ve[1].ve0.valid = 0x%x\n", (*ptr).ve[1].ve0.valid);
-   debug_printf("\t\t.ve[1].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[1].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[1].ve1.dst_offset = 0x%x\n", (*ptr).ve[1].ve1.dst_offset);
-   debug_printf("\t\t.ve[1].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[1].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[1].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[1].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[1].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[1].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[1].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[1].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[2].ve0.src_offset = 0x%x\n", (*ptr).ve[2].ve0.src_offset);
-   debug_printf("\t\t.ve[2].ve0.src_format = 0x%x\n", (*ptr).ve[2].ve0.src_format);
-   debug_printf("\t\t.ve[2].ve0.valid = 0x%x\n", (*ptr).ve[2].ve0.valid);
-   debug_printf("\t\t.ve[2].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[2].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[2].ve1.dst_offset = 0x%x\n", (*ptr).ve[2].ve1.dst_offset);
-   debug_printf("\t\t.ve[2].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[2].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[2].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[2].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[2].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[2].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[2].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[2].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[3].ve0.src_offset = 0x%x\n", (*ptr).ve[3].ve0.src_offset);
-   debug_printf("\t\t.ve[3].ve0.src_format = 0x%x\n", (*ptr).ve[3].ve0.src_format);
-   debug_printf("\t\t.ve[3].ve0.valid = 0x%x\n", (*ptr).ve[3].ve0.valid);
-   debug_printf("\t\t.ve[3].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[3].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[3].ve1.dst_offset = 0x%x\n", (*ptr).ve[3].ve1.dst_offset);
-   debug_printf("\t\t.ve[3].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[3].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[3].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[3].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[3].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[3].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[3].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[3].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[4].ve0.src_offset = 0x%x\n", (*ptr).ve[4].ve0.src_offset);
-   debug_printf("\t\t.ve[4].ve0.src_format = 0x%x\n", (*ptr).ve[4].ve0.src_format);
-   debug_printf("\t\t.ve[4].ve0.valid = 0x%x\n", (*ptr).ve[4].ve0.valid);
-   debug_printf("\t\t.ve[4].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[4].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[4].ve1.dst_offset = 0x%x\n", (*ptr).ve[4].ve1.dst_offset);
-   debug_printf("\t\t.ve[4].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[4].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[4].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[4].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[4].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[4].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[4].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[4].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[5].ve0.src_offset = 0x%x\n", (*ptr).ve[5].ve0.src_offset);
-   debug_printf("\t\t.ve[5].ve0.src_format = 0x%x\n", (*ptr).ve[5].ve0.src_format);
-   debug_printf("\t\t.ve[5].ve0.valid = 0x%x\n", (*ptr).ve[5].ve0.valid);
-   debug_printf("\t\t.ve[5].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[5].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[5].ve1.dst_offset = 0x%x\n", (*ptr).ve[5].ve1.dst_offset);
-   debug_printf("\t\t.ve[5].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[5].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[5].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[5].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[5].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[5].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[5].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[5].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[6].ve0.src_offset = 0x%x\n", (*ptr).ve[6].ve0.src_offset);
-   debug_printf("\t\t.ve[6].ve0.src_format = 0x%x\n", (*ptr).ve[6].ve0.src_format);
-   debug_printf("\t\t.ve[6].ve0.valid = 0x%x\n", (*ptr).ve[6].ve0.valid);
-   debug_printf("\t\t.ve[6].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[6].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[6].ve1.dst_offset = 0x%x\n", (*ptr).ve[6].ve1.dst_offset);
-   debug_printf("\t\t.ve[6].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[6].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[6].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[6].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[6].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[6].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[6].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[6].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[7].ve0.src_offset = 0x%x\n", (*ptr).ve[7].ve0.src_offset);
-   debug_printf("\t\t.ve[7].ve0.src_format = 0x%x\n", (*ptr).ve[7].ve0.src_format);
-   debug_printf("\t\t.ve[7].ve0.valid = 0x%x\n", (*ptr).ve[7].ve0.valid);
-   debug_printf("\t\t.ve[7].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[7].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[7].ve1.dst_offset = 0x%x\n", (*ptr).ve[7].ve1.dst_offset);
-   debug_printf("\t\t.ve[7].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[7].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[7].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[7].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[7].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[7].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[7].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[7].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[8].ve0.src_offset = 0x%x\n", (*ptr).ve[8].ve0.src_offset);
-   debug_printf("\t\t.ve[8].ve0.src_format = 0x%x\n", (*ptr).ve[8].ve0.src_format);
-   debug_printf("\t\t.ve[8].ve0.valid = 0x%x\n", (*ptr).ve[8].ve0.valid);
-   debug_printf("\t\t.ve[8].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[8].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[8].ve1.dst_offset = 0x%x\n", (*ptr).ve[8].ve1.dst_offset);
-   debug_printf("\t\t.ve[8].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[8].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[8].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[8].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[8].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[8].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[8].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[8].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[9].ve0.src_offset = 0x%x\n", (*ptr).ve[9].ve0.src_offset);
-   debug_printf("\t\t.ve[9].ve0.src_format = 0x%x\n", (*ptr).ve[9].ve0.src_format);
-   debug_printf("\t\t.ve[9].ve0.valid = 0x%x\n", (*ptr).ve[9].ve0.valid);
-   debug_printf("\t\t.ve[9].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[9].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[9].ve1.dst_offset = 0x%x\n", (*ptr).ve[9].ve1.dst_offset);
-   debug_printf("\t\t.ve[9].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[9].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[9].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[9].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[9].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[9].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[9].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[9].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[10].ve0.src_offset = 0x%x\n", (*ptr).ve[10].ve0.src_offset);
-   debug_printf("\t\t.ve[10].ve0.src_format = 0x%x\n", (*ptr).ve[10].ve0.src_format);
-   debug_printf("\t\t.ve[10].ve0.valid = 0x%x\n", (*ptr).ve[10].ve0.valid);
-   debug_printf("\t\t.ve[10].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[10].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[10].ve1.dst_offset = 0x%x\n", (*ptr).ve[10].ve1.dst_offset);
-   debug_printf("\t\t.ve[10].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[10].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[10].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[10].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[10].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[10].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[10].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[10].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[11].ve0.src_offset = 0x%x\n", (*ptr).ve[11].ve0.src_offset);
-   debug_printf("\t\t.ve[11].ve0.src_format = 0x%x\n", (*ptr).ve[11].ve0.src_format);
-   debug_printf("\t\t.ve[11].ve0.valid = 0x%x\n", (*ptr).ve[11].ve0.valid);
-   debug_printf("\t\t.ve[11].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[11].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[11].ve1.dst_offset = 0x%x\n", (*ptr).ve[11].ve1.dst_offset);
-   debug_printf("\t\t.ve[11].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[11].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[11].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[11].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[11].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[11].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[11].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[11].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[12].ve0.src_offset = 0x%x\n", (*ptr).ve[12].ve0.src_offset);
-   debug_printf("\t\t.ve[12].ve0.src_format = 0x%x\n", (*ptr).ve[12].ve0.src_format);
-   debug_printf("\t\t.ve[12].ve0.valid = 0x%x\n", (*ptr).ve[12].ve0.valid);
-   debug_printf("\t\t.ve[12].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[12].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[12].ve1.dst_offset = 0x%x\n", (*ptr).ve[12].ve1.dst_offset);
-   debug_printf("\t\t.ve[12].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[12].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[12].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[12].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[12].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[12].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[12].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[12].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[13].ve0.src_offset = 0x%x\n", (*ptr).ve[13].ve0.src_offset);
-   debug_printf("\t\t.ve[13].ve0.src_format = 0x%x\n", (*ptr).ve[13].ve0.src_format);
-   debug_printf("\t\t.ve[13].ve0.valid = 0x%x\n", (*ptr).ve[13].ve0.valid);
-   debug_printf("\t\t.ve[13].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[13].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[13].ve1.dst_offset = 0x%x\n", (*ptr).ve[13].ve1.dst_offset);
-   debug_printf("\t\t.ve[13].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[13].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[13].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[13].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[13].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[13].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[13].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[13].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[14].ve0.src_offset = 0x%x\n", (*ptr).ve[14].ve0.src_offset);
-   debug_printf("\t\t.ve[14].ve0.src_format = 0x%x\n", (*ptr).ve[14].ve0.src_format);
-   debug_printf("\t\t.ve[14].ve0.valid = 0x%x\n", (*ptr).ve[14].ve0.valid);
-   debug_printf("\t\t.ve[14].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[14].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[14].ve1.dst_offset = 0x%x\n", (*ptr).ve[14].ve1.dst_offset);
-   debug_printf("\t\t.ve[14].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[14].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[14].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[14].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[14].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[14].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[14].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[14].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[15].ve0.src_offset = 0x%x\n", (*ptr).ve[15].ve0.src_offset);
-   debug_printf("\t\t.ve[15].ve0.src_format = 0x%x\n", (*ptr).ve[15].ve0.src_format);
-   debug_printf("\t\t.ve[15].ve0.valid = 0x%x\n", (*ptr).ve[15].ve0.valid);
-   debug_printf("\t\t.ve[15].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[15].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[15].ve1.dst_offset = 0x%x\n", (*ptr).ve[15].ve1.dst_offset);
-   debug_printf("\t\t.ve[15].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[15].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[15].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[15].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[15].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[15].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[15].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[15].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[16].ve0.src_offset = 0x%x\n", (*ptr).ve[16].ve0.src_offset);
-   debug_printf("\t\t.ve[16].ve0.src_format = 0x%x\n", (*ptr).ve[16].ve0.src_format);
-   debug_printf("\t\t.ve[16].ve0.valid = 0x%x\n", (*ptr).ve[16].ve0.valid);
-   debug_printf("\t\t.ve[16].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[16].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[16].ve1.dst_offset = 0x%x\n", (*ptr).ve[16].ve1.dst_offset);
-   debug_printf("\t\t.ve[16].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[16].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[16].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[16].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[16].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[16].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[16].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[16].ve1.vfcomponent0);
-   debug_printf("\t\t.ve[17].ve0.src_offset = 0x%x\n", (*ptr).ve[17].ve0.src_offset);
-   debug_printf("\t\t.ve[17].ve0.src_format = 0x%x\n", (*ptr).ve[17].ve0.src_format);
-   debug_printf("\t\t.ve[17].ve0.valid = 0x%x\n", (*ptr).ve[17].ve0.valid);
-   debug_printf("\t\t.ve[17].ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve[17].ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve[17].ve1.dst_offset = 0x%x\n", (*ptr).ve[17].ve1.dst_offset);
-   debug_printf("\t\t.ve[17].ve1.vfcomponent3 = 0x%x\n", (*ptr).ve[17].ve1.vfcomponent3);
-   debug_printf("\t\t.ve[17].ve1.vfcomponent2 = 0x%x\n", (*ptr).ve[17].ve1.vfcomponent2);
-   debug_printf("\t\t.ve[17].ve1.vfcomponent1 = 0x%x\n", (*ptr).ve[17].ve1.vfcomponent1);
-   debug_printf("\t\t.ve[17].ve1.vfcomponent0 = 0x%x\n", (*ptr).ve[17].ve1.vfcomponent0);
-}
-
-void
-brw_dump_vertex_element_state(const struct brw_vertex_element_state *ptr)
-{
-   debug_printf("\t\t.ve0.src_offset = 0x%x\n", (*ptr).ve0.src_offset);
-   debug_printf("\t\t.ve0.src_format = 0x%x\n", (*ptr).ve0.src_format);
-   debug_printf("\t\t.ve0.valid = 0x%x\n", (*ptr).ve0.valid);
-   debug_printf("\t\t.ve0.vertex_buffer_index = 0x%x\n", (*ptr).ve0.vertex_buffer_index);
-   debug_printf("\t\t.ve1.dst_offset = 0x%x\n", (*ptr).ve1.dst_offset);
-   debug_printf("\t\t.ve1.vfcomponent3 = 0x%x\n", (*ptr).ve1.vfcomponent3);
-   debug_printf("\t\t.ve1.vfcomponent2 = 0x%x\n", (*ptr).ve1.vfcomponent2);
-   debug_printf("\t\t.ve1.vfcomponent1 = 0x%x\n", (*ptr).ve1.vfcomponent1);
-   debug_printf("\t\t.ve1.vfcomponent0 = 0x%x\n", (*ptr).ve1.vfcomponent0);
-}
-
-void
-brw_dump_vf_statistics(const struct brw_vf_statistics *ptr)
-{
-   debug_printf("\t\t.statistics_enable = 0x%x\n", (*ptr).statistics_enable);
-   debug_printf("\t\t.opcode = 0x%x\n", (*ptr).opcode);
-}
-
-void
-brw_dump_vs_unit_state(const struct brw_vs_unit_state *ptr)
-{
-   debug_printf("\t\t.thread0.grf_reg_count = 0x%x\n", (*ptr).thread0.grf_reg_count);
-   debug_printf("\t\t.thread0.kernel_start_pointer = 0x%x\n", (*ptr).thread0.kernel_start_pointer);
-   debug_printf("\t\t.thread1.ext_halt_exception_enable = 0x%x\n", (*ptr).thread1.ext_halt_exception_enable);
-   debug_printf("\t\t.thread1.sw_exception_enable = 0x%x\n", (*ptr).thread1.sw_exception_enable);
-   debug_printf("\t\t.thread1.mask_stack_exception_enable = 0x%x\n", (*ptr).thread1.mask_stack_exception_enable);
-   debug_printf("\t\t.thread1.timeout_exception_enable = 0x%x\n", (*ptr).thread1.timeout_exception_enable);
-   debug_printf("\t\t.thread1.illegal_op_exception_enable = 0x%x\n", (*ptr).thread1.illegal_op_exception_enable);
-   debug_printf("\t\t.thread1.depth_coef_urb_read_offset = 0x%x\n", (*ptr).thread1.depth_coef_urb_read_offset);
-   debug_printf("\t\t.thread1.floating_point_mode = 0x%x\n", (*ptr).thread1.floating_point_mode);
-   debug_printf("\t\t.thread1.thread_priority = 0x%x\n", (*ptr).thread1.thread_priority);
-   debug_printf("\t\t.thread1.binding_table_entry_count = 0x%x\n", (*ptr).thread1.binding_table_entry_count);
-   debug_printf("\t\t.thread1.single_program_flow = 0x%x\n", (*ptr).thread1.single_program_flow);
-   debug_printf("\t\t.thread2.per_thread_scratch_space = 0x%x\n", (*ptr).thread2.per_thread_scratch_space);
-   debug_printf("\t\t.thread2.scratch_space_base_pointer = 0x%x\n", (*ptr).thread2.scratch_space_base_pointer);
-   debug_printf("\t\t.thread3.dispatch_grf_start_reg = 0x%x\n", (*ptr).thread3.dispatch_grf_start_reg);
-   debug_printf("\t\t.thread3.urb_entry_read_offset = 0x%x\n", (*ptr).thread3.urb_entry_read_offset);
-   debug_printf("\t\t.thread3.urb_entry_read_length = 0x%x\n", (*ptr).thread3.urb_entry_read_length);
-   debug_printf("\t\t.thread3.const_urb_entry_read_offset = 0x%x\n", (*ptr).thread3.const_urb_entry_read_offset);
-   debug_printf("\t\t.thread3.const_urb_entry_read_length = 0x%x\n", (*ptr).thread3.const_urb_entry_read_length);
-   debug_printf("\t\t.thread4.stats_enable = 0x%x\n", (*ptr).thread4.stats_enable);
-   debug_printf("\t\t.thread4.nr_urb_entries = 0x%x\n", (*ptr).thread4.nr_urb_entries);
-   debug_printf("\t\t.thread4.urb_entry_allocation_size = 0x%x\n", (*ptr).thread4.urb_entry_allocation_size);
-   debug_printf("\t\t.thread4.max_threads = 0x%x\n", (*ptr).thread4.max_threads);
-   debug_printf("\t\t.vs5.sampler_count = 0x%x\n", (*ptr).vs5.sampler_count);
-   debug_printf("\t\t.vs5.sampler_state_pointer = 0x%x\n", (*ptr).vs5.sampler_state_pointer);
-   debug_printf("\t\t.vs6.vs_enable = 0x%x\n", (*ptr).vs6.vs_enable);
-   debug_printf("\t\t.vs6.vert_cache_disable = 0x%x\n", (*ptr).vs6.vert_cache_disable);
-}
-
-void
-brw_dump_wm_unit_state(const struct brw_wm_unit_state *ptr)
-{
-   debug_printf("\t\t.thread0.grf_reg_count = 0x%x\n", (*ptr).thread0.grf_reg_count);
-   debug_printf("\t\t.thread0.kernel_start_pointer = 0x%x\n", (*ptr).thread0.kernel_start_pointer);
-   debug_printf("\t\t.thread1.ext_halt_exception_enable = 0x%x\n", (*ptr).thread1.ext_halt_exception_enable);
-   debug_printf("\t\t.thread1.sw_exception_enable = 0x%x\n", (*ptr).thread1.sw_exception_enable);
-   debug_printf("\t\t.thread1.mask_stack_exception_enable = 0x%x\n", (*ptr).thread1.mask_stack_exception_enable);
-   debug_printf("\t\t.thread1.timeout_exception_enable = 0x%x\n", (*ptr).thread1.timeout_exception_enable);
-   debug_printf("\t\t.thread1.illegal_op_exception_enable = 0x%x\n", (*ptr).thread1.illegal_op_exception_enable);
-   debug_printf("\t\t.thread1.depth_coef_urb_read_offset = 0x%x\n", (*ptr).thread1.depth_coef_urb_read_offset);
-   debug_printf("\t\t.thread1.floating_point_mode = 0x%x\n", (*ptr).thread1.floating_point_mode);
-   debug_printf("\t\t.thread1.thread_priority = 0x%x\n", (*ptr).thread1.thread_priority);
-   debug_printf("\t\t.thread1.binding_table_entry_count = 0x%x\n", (*ptr).thread1.binding_table_entry_count);
-   debug_printf("\t\t.thread1.single_program_flow = 0x%x\n", (*ptr).thread1.single_program_flow);
-   debug_printf("\t\t.thread2.per_thread_scratch_space = 0x%x\n", (*ptr).thread2.per_thread_scratch_space);
-   debug_printf("\t\t.thread2.scratch_space_base_pointer = 0x%x\n", (*ptr).thread2.scratch_space_base_pointer);
-   debug_printf("\t\t.thread3.dispatch_grf_start_reg = 0x%x\n", (*ptr).thread3.dispatch_grf_start_reg);
-   debug_printf("\t\t.thread3.urb_entry_read_offset = 0x%x\n", (*ptr).thread3.urb_entry_read_offset);
-   debug_printf("\t\t.thread3.urb_entry_read_length = 0x%x\n", (*ptr).thread3.urb_entry_read_length);
-   debug_printf("\t\t.thread3.const_urb_entry_read_offset = 0x%x\n", (*ptr).thread3.const_urb_entry_read_offset);
-   debug_printf("\t\t.thread3.const_urb_entry_read_length = 0x%x\n", (*ptr).thread3.const_urb_entry_read_length);
-   debug_printf("\t\t.wm4.stats_enable = 0x%x\n", (*ptr).wm4.stats_enable);
-   debug_printf("\t\t.wm4.depth_buffer_clear = 0x%x\n", (*ptr).wm4.depth_buffer_clear);
-   debug_printf("\t\t.wm4.sampler_count = 0x%x\n", (*ptr).wm4.sampler_count);
-   debug_printf("\t\t.wm4.sampler_state_pointer = 0x%x\n", (*ptr).wm4.sampler_state_pointer);
-   debug_printf("\t\t.wm5.enable_8_pix = 0x%x\n", (*ptr).wm5.enable_8_pix);
-   debug_printf("\t\t.wm5.enable_16_pix = 0x%x\n", (*ptr).wm5.enable_16_pix);
-   debug_printf("\t\t.wm5.enable_32_pix = 0x%x\n", (*ptr).wm5.enable_32_pix);
-   debug_printf("\t\t.wm5.enable_con_32_pix = 0x%x\n", (*ptr).wm5.enable_con_32_pix);
-   debug_printf("\t\t.wm5.enable_con_64_pix = 0x%x\n", (*ptr).wm5.enable_con_64_pix);
-   debug_printf("\t\t.wm5.legacy_global_depth_bias = 0x%x\n", (*ptr).wm5.legacy_global_depth_bias);
-   debug_printf("\t\t.wm5.line_stipple = 0x%x\n", (*ptr).wm5.line_stipple);
-   debug_printf("\t\t.wm5.depth_offset = 0x%x\n", (*ptr).wm5.depth_offset);
-   debug_printf("\t\t.wm5.polygon_stipple = 0x%x\n", (*ptr).wm5.polygon_stipple);
-   debug_printf("\t\t.wm5.line_aa_region_width = 0x%x\n", (*ptr).wm5.line_aa_region_width);
-   debug_printf("\t\t.wm5.line_endcap_aa_region_width = 0x%x\n", (*ptr).wm5.line_endcap_aa_region_width);
-   debug_printf("\t\t.wm5.early_depth_test = 0x%x\n", (*ptr).wm5.early_depth_test);
-   debug_printf("\t\t.wm5.thread_dispatch_enable = 0x%x\n", (*ptr).wm5.thread_dispatch_enable);
-   debug_printf("\t\t.wm5.program_uses_depth = 0x%x\n", (*ptr).wm5.program_uses_depth);
-   debug_printf("\t\t.wm5.program_computes_depth = 0x%x\n", (*ptr).wm5.program_computes_depth);
-   debug_printf("\t\t.wm5.program_uses_killpixel = 0x%x\n", (*ptr).wm5.program_uses_killpixel);
-   debug_printf("\t\t.wm5.legacy_line_rast = 0x%x\n", (*ptr).wm5.legacy_line_rast);
-   debug_printf("\t\t.wm5.transposed_urb_read_enable = 0x%x\n", (*ptr).wm5.transposed_urb_read_enable);
-   debug_printf("\t\t.wm5.max_threads = 0x%x\n", (*ptr).wm5.max_threads);
-   debug_printf("\t\t.global_depth_offset_constant = %f\n", (*ptr).global_depth_offset_constant);
-   debug_printf("\t\t.global_depth_offset_scale = %f\n", (*ptr).global_depth_offset_scale);
-   debug_printf("\t\t.wm8.grf_reg_count_1 = 0x%x\n", (*ptr).wm8.grf_reg_count_1);
-   debug_printf("\t\t.wm8.kernel_start_pointer_1 = 0x%x\n", (*ptr).wm8.kernel_start_pointer_1);
-   debug_printf("\t\t.wm9.grf_reg_count_2 = 0x%x\n", (*ptr).wm9.grf_reg_count_2);
-   debug_printf("\t\t.wm9.kernel_start_pointer_2 = 0x%x\n", (*ptr).wm9.kernel_start_pointer_2);
-   debug_printf("\t\t.wm10.grf_reg_count_3 = 0x%x\n", (*ptr).wm10.grf_reg_count_3);
-   debug_printf("\t\t.wm10.kernel_start_pointer_3 = 0x%x\n", (*ptr).wm10.kernel_start_pointer_3);
-}
-
diff --git a/src/gallium/drivers/i965/brw_structs_dump.h b/src/gallium/drivers/i965/brw_structs_dump.h
deleted file mode 100644 (file)
index 7c02dbf..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-/**************************************************************************
- *
- * Copyright 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- **************************************************************************/
-
-/**
- * @file
- * Dump i965 data structures.
- *
- * Generated automatically from brw_structs.h by brw_structs_dump.py.
- */
-
-#ifndef BRW_STRUCTS_DUMP_H
-#define BRW_STRUCTS_DUMP_H
-
-struct brw_3d_control;
-struct brw_3d_primitive;
-struct brw_aa_line_parameters;
-struct brw_binding_table_pointers;
-struct brw_blend_constant_color;
-struct brw_cc0;
-struct brw_cc1;
-struct brw_cc2;
-struct brw_cc3;
-struct brw_cc4;
-struct brw_cc5;
-struct brw_cc6;
-struct brw_cc7;
-struct brw_cc_unit_state;
-struct brw_cc_viewport;
-struct brw_clip_unit_state;
-struct brw_clipper_viewport;
-struct brw_constant_buffer;
-struct brw_cs_urb_state;
-struct brw_depthbuffer;
-struct brw_depthbuffer_g4x;
-struct brw_drawrect;
-struct brw_global_depth_offset_clamp;
-struct brw_gs_unit_state;
-struct brw_indexbuffer;
-struct brw_line_stipple;
-struct brw_mi_flush;
-struct brw_pipe_control;
-struct brw_pipeline_select;
-struct brw_pipelined_state_pointers;
-struct brw_polygon_stipple;
-struct brw_polygon_stipple_offset;
-struct brw_sampler_default_color;
-struct brw_sampler_state;
-struct brw_sf_unit_state;
-struct brw_sf_viewport;
-struct brw_ss0;
-struct brw_ss1;
-struct brw_ss2;
-struct brw_ss3;
-struct brw_state_base_address;
-struct brw_state_prefetch;
-struct brw_surf_ss0;
-struct brw_surf_ss1;
-struct brw_surf_ss2;
-struct brw_surf_ss3;
-struct brw_surf_ss4;
-struct brw_surf_ss5;
-struct brw_surface_state;
-struct brw_system_instruction_pointer;
-struct brw_urb_fence;
-struct brw_urb_immediate;
-struct brw_vb_array_state;
-struct brw_vertex_buffer_state;
-struct brw_vertex_element_packet;
-struct brw_vertex_element_state;
-struct brw_vf_statistics;
-struct brw_vs_unit_state;
-struct brw_wm_unit_state;
-
-void
-brw_dump_3d_control(const struct brw_3d_control *ptr);
-
-void
-brw_dump_3d_primitive(const struct brw_3d_primitive *ptr);
-
-void
-brw_dump_aa_line_parameters(const struct brw_aa_line_parameters *ptr);
-
-void
-brw_dump_binding_table_pointers(const struct brw_binding_table_pointers *ptr);
-
-void
-brw_dump_blend_constant_color(const struct brw_blend_constant_color *ptr);
-
-void
-brw_dump_cc0(const struct brw_cc0 *ptr);
-
-void
-brw_dump_cc1(const struct brw_cc1 *ptr);
-
-void
-brw_dump_cc2(const struct brw_cc2 *ptr);
-
-void
-brw_dump_cc3(const struct brw_cc3 *ptr);
-
-void
-brw_dump_cc4(const struct brw_cc4 *ptr);
-
-void
-brw_dump_cc5(const struct brw_cc5 *ptr);
-
-void
-brw_dump_cc6(const struct brw_cc6 *ptr);
-
-void
-brw_dump_cc7(const struct brw_cc7 *ptr);
-
-void
-brw_dump_cc_unit_state(const struct brw_cc_unit_state *ptr);
-
-void
-brw_dump_cc_viewport(const struct brw_cc_viewport *ptr);
-
-void
-brw_dump_clip_unit_state(const struct brw_clip_unit_state *ptr);
-
-void
-brw_dump_clipper_viewport(const struct brw_clipper_viewport *ptr);
-
-void
-brw_dump_constant_buffer(const struct brw_constant_buffer *ptr);
-
-void
-brw_dump_cs_urb_state(const struct brw_cs_urb_state *ptr);
-
-void
-brw_dump_depthbuffer(const struct brw_depthbuffer *ptr);
-
-void
-brw_dump_depthbuffer_g4x(const struct brw_depthbuffer_g4x *ptr);
-
-void
-brw_dump_drawrect(const struct brw_drawrect *ptr);
-
-void
-brw_dump_global_depth_offset_clamp(const struct brw_global_depth_offset_clamp *ptr);
-
-void
-brw_dump_gs_unit_state(const struct brw_gs_unit_state *ptr);
-
-void
-brw_dump_indexbuffer(const struct brw_indexbuffer *ptr);
-
-void
-brw_dump_line_stipple(const struct brw_line_stipple *ptr);
-
-void
-brw_dump_mi_flush(const struct brw_mi_flush *ptr);
-
-void
-brw_dump_pipe_control(const struct brw_pipe_control *ptr);
-
-void
-brw_dump_pipeline_select(const struct brw_pipeline_select *ptr);
-
-void
-brw_dump_pipelined_state_pointers(const struct brw_pipelined_state_pointers *ptr);
-
-void
-brw_dump_polygon_stipple(const struct brw_polygon_stipple *ptr);
-
-void
-brw_dump_polygon_stipple_offset(const struct brw_polygon_stipple_offset *ptr);
-
-void
-brw_dump_sampler_default_color(const struct brw_sampler_default_color *ptr);
-
-void
-brw_dump_sampler_state(const struct brw_sampler_state *ptr);
-
-void
-brw_dump_sf_unit_state(const struct brw_sf_unit_state *ptr);
-
-void
-brw_dump_sf_viewport(const struct brw_sf_viewport *ptr);
-
-void
-brw_dump_ss0(const struct brw_ss0 *ptr);
-
-void
-brw_dump_ss1(const struct brw_ss1 *ptr);
-
-void
-brw_dump_ss2(const struct brw_ss2 *ptr);
-
-void
-brw_dump_ss3(const struct brw_ss3 *ptr);
-
-void
-brw_dump_state_base_address(const struct brw_state_base_address *ptr);
-
-void
-brw_dump_state_prefetch(const struct brw_state_prefetch *ptr);
-
-void
-brw_dump_surf_ss0(const struct brw_surf_ss0 *ptr);
-
-void
-brw_dump_surf_ss1(const struct brw_surf_ss1 *ptr);
-
-void
-brw_dump_surf_ss2(const struct brw_surf_ss2 *ptr);
-
-void
-brw_dump_surf_ss3(const struct brw_surf_ss3 *ptr);
-
-void
-brw_dump_surf_ss4(const struct brw_surf_ss4 *ptr);
-
-void
-brw_dump_surf_ss5(const struct brw_surf_ss5 *ptr);
-
-void
-brw_dump_surface_state(const struct brw_surface_state *ptr);
-
-void
-brw_dump_system_instruction_pointer(const struct brw_system_instruction_pointer *ptr);
-
-void
-brw_dump_urb_fence(const struct brw_urb_fence *ptr);
-
-void
-brw_dump_urb_immediate(const struct brw_urb_immediate *ptr);
-
-void
-brw_dump_vb_array_state(const struct brw_vb_array_state *ptr);
-
-void
-brw_dump_vertex_buffer_state(const struct brw_vertex_buffer_state *ptr);
-
-void
-brw_dump_vertex_element_packet(const struct brw_vertex_element_packet *ptr);
-
-void
-brw_dump_vertex_element_state(const struct brw_vertex_element_state *ptr);
-
-void
-brw_dump_vf_statistics(const struct brw_vf_statistics *ptr);
-
-void
-brw_dump_vs_unit_state(const struct brw_vs_unit_state *ptr);
-
-void
-brw_dump_wm_unit_state(const struct brw_wm_unit_state *ptr);
-
-
-#endif /* BRW_STRUCTS_DUMP_H */
diff --git a/src/gallium/drivers/i965/brw_structs_dump.py b/src/gallium/drivers/i965/brw_structs_dump.py
deleted file mode 100755 (executable)
index 6dba49a..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-#!/usr/bin/env python
-'''
-Generates dumpers for the i965 state strucutures using pygccxml.
-
-Run as 
-
-  PYTHONPATH=/path/to/pygccxml-1.0.0 python brw_structs_dump.py
-
-Jose Fonseca <jfonseca@vmware.com>
-'''
-
-copyright = '''
-/**************************************************************************
- *
- * Copyright 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- **************************************************************************/
- '''
-
-import os
-import sys
-import re
-
-from pygccxml import parser
-from pygccxml import declarations
-
-from pygccxml.declarations import algorithm
-from pygccxml.declarations import decl_visitor
-from pygccxml.declarations import type_traits
-from pygccxml.declarations import type_visitor
-
-
-enums = True
-
-
-def vars_filter(variable):
-    name = variable.name
-    return not re.match('^pad\d*', name) and name != 'dword' 
-
-
-class decl_dumper_t(decl_visitor.decl_visitor_t):
-
-    def __init__(self, stream, instance = '', decl = None):
-        decl_visitor.decl_visitor_t.__init__(self)
-        self.stream = stream
-        self._instance = instance
-        self.decl = decl
-
-    def clone(self):
-        return decl_dumper_t(self.stream, self._instance, self.decl)
-
-    def visit_class(self):
-        class_ = self.decl
-        assert self.decl.class_type in ('struct', 'union')
-
-        for variable in class_.variables(recursive = False):
-            if vars_filter(variable):
-                dump_type(self.stream, self._instance + '.' + variable.name, variable.type)
-
-    def visit_enumeration(self):
-        if enums:
-            self.stream.write('   switch(%s) {\n' % ("(*ptr)" + self._instance,))
-            for name, value in self.decl.values:
-                self.stream.write('   case %s:\n' % (name,))
-                self.stream.write('      debug_printf("\\t\\t%s = %s\\n");\n' % (self._instance, name))
-                self.stream.write('      break;\n')
-            self.stream.write('   default:\n')
-            self.stream.write('      debug_printf("\\t\\t%s = %%i\\n", %s);\n' % (self._instance, "(*ptr)" + self._instance))
-            self.stream.write('      break;\n')
-            self.stream.write('   }\n')
-        else:
-            self.stream.write('   debug_printf("\\t\\t%s = %%i\\n", %s);\n' % (self._instance, "(*ptr)" + self._instance))
-
-
-def dump_decl(stream, instance, decl):
-    dumper = decl_dumper_t(stream, instance, decl)
-    algorithm.apply_visitor(dumper, decl)
-
-
-class type_dumper_t(type_visitor.type_visitor_t):
-
-    def __init__(self, stream, instance, type_):
-        type_visitor.type_visitor_t.__init__(self)
-        self.stream = stream
-        self.instance = instance
-        self.type = type_
-
-    def clone(self):
-        return type_dumper_t(self.instance, self.type)
-
-    def visit_bool(self):
-        self.print_instance('%i')
-        
-    def visit_char(self):
-        #self.print_instance('%i')
-        self.print_instance('0x%x')
-        
-    def visit_unsigned_char(self):
-        #self.print_instance('%u')
-        self.print_instance('0x%x')
-
-    def visit_signed_char(self):
-        #self.print_instance('%i')
-        self.print_instance('0x%x')
-    
-    def visit_wchar(self):
-        self.print_instance('0x%x')
-        
-    def visit_short_int(self):
-        #self.print_instance('%i')
-        self.print_instance('0x%x')
-        
-    def visit_short_unsigned_int(self):
-        #self.print_instance('%u')
-        self.print_instance('0x%x')
-        
-    def visit_int(self):
-        #self.print_instance('%i')
-        self.print_instance('0x%x')
-        
-    def visit_unsigned_int(self):
-        #self.print_instance('%u')
-        self.print_instance('0x%x')
-        
-    def visit_long_int(self):
-        #self.print_instance('%li')
-        self.print_instance('0x%lx')
-        
-    def visit_long_unsigned_int(self):
-        #self.print_instance('%lu')
-        self.print_instance('%0xlx')
-        
-    def visit_long_long_int(self):
-        #self.print_instance('%lli')
-        self.print_instance('%0xllx')
-        
-    def visit_long_long_unsigned_int(self):
-        #self.print_instance('%llu')
-        self.print_instance('0x%llx')
-        
-    def visit_float(self):
-        self.print_instance('%f')
-        
-    def visit_double(self):
-        self.print_instance('%f')
-        
-    def visit_array(self):
-        for i in range(type_traits.array_size(self.type)):
-            dump_type(self.stream, self.instance + '[%i]' % i, type_traits.base_type(self.type))
-
-    def visit_pointer(self):
-        self.print_instance('%p')
-
-    def visit_declarated(self):
-        #stream.write('decl = %r\n' % self.type.decl_string)
-        decl = type_traits.remove_declarated(self.type)
-        dump_decl(self.stream, self.instance, decl)
-
-    def print_instance(self, format):
-        self.stream.write('   debug_printf("\\t\\t%s = %s\\n", %s);\n' % (self.instance, format, "(*ptr)" + self.instance))
-
-
-
-def dump_type(stream, instance, type_):
-    type_ = type_traits.remove_alias(type_)
-    visitor = type_dumper_t(stream, instance, type_)
-    algorithm.apply_visitor(visitor, type_)
-
-
-def dump_struct_interface(stream, class_, suffix = ';'):
-    name = class_.name
-    assert name.startswith('brw_');
-    name = name[:4] + 'dump_' + name[4:]
-    stream.write('void\n')
-    stream.write('%s(const struct %s *ptr)%s\n' % (name, class_.name, suffix))
-
-
-def dump_struct_implementation(stream, decls, class_):
-    dump_struct_interface(stream, class_, suffix = '')
-    stream.write('{\n')
-    dump_decl(stream, '', class_)
-    stream.write('}\n')
-    stream.write('\n')
-
-
-def dump_header(stream):
-    stream.write(copyright.strip() + '\n')
-    stream.write('\n')
-    stream.write('/**\n')
-    stream.write(' * @file\n')
-    stream.write(' * Dump i965 data structures.\n')
-    stream.write(' *\n')
-    stream.write(' * Generated automatically from brw_structs.h by brw_structs_dump.py.\n')
-    stream.write(' */\n')
-    stream.write('\n')
-
-
-def dump_interfaces(decls, global_ns, names):
-    stream = open('brw_structs_dump.h', 'wt')
-    
-    dump_header(stream)
-    
-    stream.write('#ifndef BRW_STRUCTS_DUMP_H\n')
-    stream.write('#define BRW_STRUCTS_DUMP_H\n')
-    stream.write('\n')
-    
-    for name in names:
-        stream.write('struct %s;\n' % (name,))
-    stream.write('\n')
-
-    for name in names:
-        (class_,) = global_ns.classes(name = name)
-        dump_struct_interface(stream, class_)
-        stream.write('\n')
-    stream.write('\n')
-
-    stream.write('#endif /* BRW_STRUCTS_DUMP_H */\n')
-
-
-def dump_implementations(decls, global_ns, names):
-    stream = open('brw_structs_dump.c', 'wt')
-    
-    dump_header(stream)
-
-    stream.write('#include "util/u_debug.h"\n')
-    stream.write('\n')
-    stream.write('#include "brw_types.h"\n')
-    stream.write('#include "brw_structs.h"\n')
-    stream.write('#include "brw_structs_dump.h"\n')
-    stream.write('\n')
-
-    for name in names:
-        (class_,) = global_ns.classes(name = name)
-        dump_struct_implementation(stream, decls, class_)
-
-
-def decl_filter(decl):
-    '''Filter the declarations we're interested in'''
-    name = decl.name
-    return name.startswith('brw_') and name not in ('brw_instruction',) 
-
-
-def main():
-
-    config = parser.config_t(
-        include_paths = [
-            '../../include',
-        ],
-        compiler = 'gcc',
-    )
-
-    headers = [
-        'brw_types.h', 
-        'brw_structs.h', 
-    ]
-
-    decls = parser.parse(headers, config, parser.COMPILATION_MODE.ALL_AT_ONCE)
-    global_ns = declarations.get_global_namespace(decls)
-
-    names = []
-    for class_ in global_ns.classes(decl_filter):
-        names.append(class_.name)
-    names.sort()
-
-    dump_interfaces(decls, global_ns, names)
-    dump_implementations(decls, global_ns, names)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/src/gallium/drivers/i965/brw_swtnl.c b/src/gallium/drivers/i965/brw_swtnl.c
deleted file mode 100644 (file)
index f96301e..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-
-#include "brw_context.h"
-#include "brw_pipe_rast.h"
-
-
-#if 0
-
-static GLboolean need_swtnl( struct brw_context *brw )
-{
-   const struct pipe_rasterizer_state *rast = &brw->curr.rast->templ;
-
-   /* If we don't require strict OpenGL conformance, never 
-    * use fallbacks.  If we're forcing fallbacks, always
-    * use fallfacks.
-    */
-   if (brw->flags.no_swtnl)
-      return FALSE;
-
-   if (brw->flags.force_swtnl)
-      return TRUE;
-
-   /* Exceeding hw limits on number of VS inputs?
-    */
-   if (brw->curr.num_vertex_elements == 0 ||
-       brw->curr.num_vertex_elements >= BRW_VEP_MAX) {
-      return TRUE;
-   }
-
-   /* Position array with zero stride?
-    *
-    * XXX: position isn't always at zero...
-    * XXX: eliminate zero-stride arrays
-    */
-   {
-      int ve0_vb = brw->curr.vertex_element[0].vertex_buffer_index;
-      
-      if (brw->curr.vertex_buffer[ve0_vb].stride == 0)
-        return TRUE;
-   }
-
-   /* XXX: short-circuit
-    */
-   return FALSE;
-
-   if (brw->reduced_primitive == PIPE_PRIM_TRIANGLES) {
-      if (rast->poly_smooth)
-        return TRUE;
-
-   }
-   
-   if (brw->reduced_primitive == PIPE_PRIM_LINES ||
-       (brw->reduced_primitive == PIPE_PRIM_TRIANGLES &&
-       (rast->fill_cw == PIPE_POLYGON_MODE_LINE ||
-        rast->fill_ccw == PIPE_POLYGON_MODE_LINE)))
-   {
-      /* BRW hardware will do AA lines, but they are non-conformant it
-       * seems.  TBD whether we keep this fallback:
-       */
-      if (rast->line_smooth)
-        return TRUE;
-
-      /* XXX: was a fallback in mesa (gs doesn't get enough
-       * information to know when to reset stipple counter), but there
-       * must be a way around it.
-       */
-      if (rast->line_stipple_enable &&
-         (brw->reduced_primitive == PIPE_PRIM_TRIANGLES ||
-          brw->primitive == PIPE_PRIM_LINE_LOOP || 
-          brw->primitive == PIPE_PRIM_LINE_STRIP))
-        return TRUE;
-   }
-
-   
-   if (brw->reduced_primitive == PIPE_PRIM_POINTS ||
-       (brw->reduced_primitive == PIPE_PRIM_TRIANGLES &&
-       (rast->fill_cw == PIPE_POLYGON_MODE_POINT ||
-        rast->fill_ccw == PIPE_POLYGON_MODE_POINT)))
-   {
-      if (rast->point_smooth)
-        return TRUE;
-   }
-
-   /* BRW hardware doesn't handle CLAMP texturing correctly;
-    * brw_wm_sampler_state:translate_wrap_mode() treats CLAMP
-    * as CLAMP_TO_EDGE instead.  If we're using CLAMP, and
-    * we want strict conformance, force the fallback.
-    *
-    * XXX: need a workaround for this.
-    */
-      
-   /* Nothing stopping us from the fast path now */
-   return FALSE;
-}
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_types.h b/src/gallium/drivers/i965/brw_types.h
deleted file mode 100644 (file)
index 89e08a5..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef BRW_TYPES_H
-#define BRW_TYPES_H
-
-#include "pipe/p_compiler.h"
-
-typedef uint32_t GLuint;
-typedef uint8_t GLubyte;
-typedef uint16_t GLushort;
-typedef int32_t GLint;
-typedef int8_t GLbyte;
-typedef int16_t GLshort;
-typedef float GLfloat;
-
-/* no GLenum, translate all away */
-
-typedef uint8_t GLboolean;
-
-#define GL_FALSE FALSE
-#define GL_TRUE TRUE
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_urb.c b/src/gallium/drivers/i965/brw_urb.c
deleted file mode 100644 (file)
index b630752..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-        
-
-
-#include "brw_batchbuffer.h"
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_defines.h"
-#include "brw_debug.h"
-
-#define VS 0
-#define GS 1
-#define CLP 2
-#define SF 3
-#define CS 4
-
-/** @file brw_urb.c
- *
- * Manages the division of the URB space between the various fixed-function
- * units.
- *
- * See the Thread Initiation Management section of the GEN4 B-Spec, and
- * the individual *_STATE structures for restrictions on numbers of
- * entries and threads.
- */
-
-/*
- * Generally, a unit requires a min_nr_entries based on how many entries
- * it produces before the downstream unit gets unblocked and can use and
- * dereference some of its handles.
- *
- * The SF unit preallocates a PUE at the start of thread dispatch, and only
- * uses that one.  So it requires one entry per thread.
- *
- * For CLIP, the SF unit will hold the previous primitive while the
- * next is getting assembled, meaning that linestrips require 3 CLIP VUEs
- * (vertices) to ensure continued processing, trifans require 4, and tristrips
- * require 5.  There can be 1 or 2 threads, and each has the same requirement.
- *
- * GS has the same requirement as CLIP, but it never handles tristrips,
- * so we can lower the minimum to 4 for the POLYGONs (trifans) it produces.
- * We only run it single-threaded.
- *
- * For VS, the number of entries may be 8, 12, 16, or 32 (or 64 on G4X).
- * Each thread processes 2 preallocated VUEs (vertices) at a time, and they
- * get streamed down as soon as threads processing earlier vertices get
- * theirs accepted.
- *
- * Each unit will take the number of URB entries we give it (based on the
- * entry size calculated in brw_vs_emit.c for VUEs, brw_sf_emit.c for PUEs,
- * and brw_curbe.c for the CURBEs) and decide its maximum number of
- * threads it can support based on that. in brw_*_state.c.
- *
- * XXX: Are the min_entry_size numbers useful?
- * XXX: Verify min_nr_entries, esp for VS.
- * XXX: Verify SF min_entry_size.
- */
-static const struct urb_limits {
-   GLuint min_nr_entries;
-   GLuint preferred_nr_entries;
-   GLuint min_entry_size;
-   GLuint max_entry_size;
-} limits[CS+1] = {
-   { 16, 32, 1, 5 },                   /* vs */
-   { 4, 8,  1, 5 },                    /* gs */
-   { 5, 10,  1, 5 },                   /* clp */
-   { 1, 8,  1, 12 },                   /* sf */
-   { 1, 4,  1, 32 }                    /* cs */
-};
-
-
-static GLboolean check_urb_layout( struct brw_context *brw )
-{
-   brw->urb.vs_start = 0;
-   brw->urb.gs_start = brw->urb.nr_vs_entries * brw->urb.vsize;
-   brw->urb.clip_start = brw->urb.gs_start + brw->urb.nr_gs_entries * brw->urb.vsize;
-   brw->urb.sf_start = brw->urb.clip_start + brw->urb.nr_clip_entries * brw->urb.vsize;
-   brw->urb.cs_start = brw->urb.sf_start + brw->urb.nr_sf_entries * brw->urb.sfsize;
-
-   return brw->urb.cs_start + brw->urb.nr_cs_entries * brw->urb.csize <= URB_SIZES(brw);
-}
-
-/* Most minimal update, forces re-emit of URB fence packet after GS
- * unit turned on/off.
- */
-static int recalculate_urb_fence( struct brw_context *brw )
-{
-   GLuint csize = brw->curbe.total_size;
-   GLuint vsize = brw->vs.prog_data->urb_entry_size;
-   GLuint sfsize = brw->sf.prog_data->urb_entry_size;
-
-   if (csize < limits[CS].min_entry_size)
-      csize = limits[CS].min_entry_size;
-
-   if (vsize < limits[VS].min_entry_size)
-      vsize = limits[VS].min_entry_size;
-
-   if (sfsize < limits[SF].min_entry_size)
-      sfsize = limits[SF].min_entry_size;
-
-   if (brw->urb.vsize < vsize ||
-       brw->urb.sfsize < sfsize ||
-       brw->urb.csize < csize ||
-       (brw->urb.constrained && (brw->urb.vsize > vsize ||
-                                brw->urb.sfsize > sfsize ||
-                                brw->urb.csize > csize))) {
-      
-
-      brw->urb.csize = csize;
-      brw->urb.sfsize = sfsize;
-      brw->urb.vsize = vsize;
-
-      brw->urb.nr_vs_entries = limits[VS].preferred_nr_entries;        
-      brw->urb.nr_gs_entries = limits[GS].preferred_nr_entries;        
-      brw->urb.nr_clip_entries = limits[CLP].preferred_nr_entries;
-      brw->urb.nr_sf_entries = limits[SF].preferred_nr_entries;        
-      brw->urb.nr_cs_entries = limits[CS].preferred_nr_entries;        
-
-      brw->urb.constrained = 0;
-
-      if (brw->gen == 5) {
-         brw->urb.nr_vs_entries = 128;
-         brw->urb.nr_sf_entries = 48;
-         if (check_urb_layout(brw)) {
-            goto done;
-         } else {
-            brw->urb.constrained = 1;
-            brw->urb.nr_vs_entries = limits[VS].preferred_nr_entries;
-            brw->urb.nr_sf_entries = limits[SF].preferred_nr_entries;
-         }
-      } else if (brw->is_g4x) {
-        brw->urb.nr_vs_entries = 64;
-        if (check_urb_layout(brw)) {
-           goto done;
-        } else {
-           brw->urb.constrained = 1;
-           brw->urb.nr_vs_entries = limits[VS].preferred_nr_entries;
-        }
-      }
-
-      if (BRW_DEBUG & DEBUG_MIN_URB) {
-        brw->urb.nr_vs_entries = limits[VS].min_nr_entries;    
-        brw->urb.nr_gs_entries = limits[GS].min_nr_entries;    
-        brw->urb.nr_clip_entries = limits[CLP].min_nr_entries;
-        brw->urb.nr_sf_entries = limits[SF].min_nr_entries;    
-        brw->urb.nr_cs_entries = limits[CS].min_nr_entries;    
-        brw->urb.constrained = 1;
-      }
-
-      if (!check_urb_layout(brw)) {
-        brw->urb.nr_vs_entries = limits[VS].min_nr_entries;    
-        brw->urb.nr_gs_entries = limits[GS].min_nr_entries;    
-        brw->urb.nr_clip_entries = limits[CLP].min_nr_entries;
-        brw->urb.nr_sf_entries = limits[SF].min_nr_entries;    
-        brw->urb.nr_cs_entries = limits[CS].min_nr_entries;    
-
-        /* Mark us as operating with constrained nr_entries, so that next
-         * time we recalculate we'll resize the fences in the hope of
-         * escaping constrained mode and getting back to normal performance.
-         */
-        brw->urb.constrained = 1;
-        
-        if (!check_urb_layout(brw)) {
-           /* This is impossible, given the maximal sizes of urb
-            * entries and the values for minimum nr of entries
-            * provided above.
-            */
-           debug_printf("couldn't calculate URB layout!\n");
-           exit(1);
-        }
-        
-        if (BRW_DEBUG & (DEBUG_URB|DEBUG_FALLBACKS))
-           debug_printf("URB CONSTRAINED\n");
-      }
-
-done:
-      if (BRW_DEBUG & DEBUG_URB)
-        debug_printf("URB fence: %d ..VS.. %d ..GS.. %d ..CLP.. %d ..SF.. %d ..CS.. %d\n",
-                     brw->urb.vs_start,
-                     brw->urb.gs_start,
-                     brw->urb.clip_start,
-                     brw->urb.sf_start,
-                     brw->urb.cs_start, 
-                     URB_SIZES(brw));
-      
-      brw->state.dirty.brw |= BRW_NEW_URB_FENCE;
-   }
-
-   return 0;
-}
-
-
-const struct brw_tracked_state brw_recalculate_urb_fence = {
-   .dirty = {
-      .mesa = 0,
-      .brw = BRW_NEW_CURBE_OFFSETS,
-      .cache = (CACHE_NEW_VS_PROG |
-               CACHE_NEW_SF_PROG)
-   },
-   .prepare = recalculate_urb_fence
-};
-
-
-
-
-
-int brw_upload_urb_fence(struct brw_context *brw)
-{
-   struct brw_urb_fence uf;
-   memset(&uf, 0, sizeof(uf));
-
-   uf.header.opcode = CMD_URB_FENCE;
-   uf.header.length = sizeof(uf)/4-2;
-   uf.header.vs_realloc = 1;
-   uf.header.gs_realloc = 1;
-   uf.header.clp_realloc = 1;
-   uf.header.sf_realloc = 1;
-   uf.header.vfe_realloc = 1;
-   uf.header.cs_realloc = 1;
-
-   /* The ordering below is correct, not the layout in the
-    * instruction.
-    *
-    * There are 256/384 urb reg pairs in total.
-    */
-   uf.bits0.vs_fence  = brw->urb.gs_start;
-   uf.bits0.gs_fence  = brw->urb.clip_start; 
-   uf.bits0.clp_fence = brw->urb.sf_start; 
-   uf.bits1.sf_fence  = brw->urb.cs_start; 
-   uf.bits1.cs_fence  = URB_SIZES(brw);
-
-   BRW_BATCH_STRUCT(brw, &uf);
-   return 0;
-}
diff --git a/src/gallium/drivers/i965/brw_util.h b/src/gallium/drivers/i965/brw_util.h
deleted file mode 100644 (file)
index b5f9a36..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-          
-
-#ifndef BRW_UTIL_H
-#define BRW_UTIL_H
-
-#include "brw_types.h"
-
-extern GLuint brw_count_bits( GLuint val );
-extern GLuint brw_translate_blend_factor( unsigned factor );
-extern GLuint brw_translate_blend_equation( unsigned mode );
-
-
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_vs.c b/src/gallium/drivers/i965/brw_vs.c
deleted file mode 100644 (file)
index ca8ee79..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "tgsi/tgsi_dump.h"           
-
-#include "brw_context.h"
-#include "brw_vs.h"
-#include "brw_state.h"
-
-
-
-static enum pipe_error do_vs_prog( struct brw_context *brw, 
-                                   struct brw_vertex_shader *vp,
-                                   struct brw_vs_prog_key *key,
-                                   struct brw_winsys_buffer **bo_out)
-{
-   enum pipe_error ret;
-   GLuint program_size;
-   const GLuint *program;
-   struct brw_vs_compile c;
-
-   memset(&c, 0, sizeof(c));
-   memcpy(&c.key, key, sizeof(*key));
-
-   brw_init_compile(brw, &c.func);
-   c.vp = vp;
-
-   c.prog_data.nr_outputs = vp->info.num_outputs;
-   c.prog_data.nr_inputs = vp->info.num_inputs;
-
-   if (1)
-      tgsi_dump(c.vp->tokens, 0);
-
-   /* Emit GEN4 code.
-    */
-   brw_vs_emit(&c);
-
-   /* get the program
-    */
-   ret = brw_get_program(&c.func, &program, &program_size);
-   if (ret)
-      return ret;
-
-   ret = brw_upload_cache( &brw->cache, BRW_VS_PROG,
-                           &c.key, brw_vs_prog_key_size(&c.key),
-                           NULL, 0,
-                           program, program_size,
-                           &c.prog_data,
-                           &brw->vs.prog_data,
-                           bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-static enum pipe_error brw_upload_vs_prog(struct brw_context *brw)
-{
-   struct brw_vs_prog_key key;
-   struct brw_vertex_shader *vp = brw->curr.vertex_shader;
-   struct brw_fs_signature *sig = &brw->curr.fragment_shader->signature;
-   enum pipe_error ret;
-
-   memset(&key, 0, sizeof(key));
-
-   key.program_string_id = vp->id;
-   key.nr_userclip = brw->curr.ucp.nr;
-
-   memcpy(&key.fs_signature, sig, brw_fs_signature_size(sig));
-
-
-   /* Make an early check for the key.
-    */
-   if (brw_search_cache(&brw->cache, BRW_VS_PROG,
-                        &key, brw_vs_prog_key_size(&key),
-                        NULL, 0,
-                        &brw->vs.prog_data,
-                        &brw->vs.prog_bo))
-      return PIPE_OK;
-
-   ret = do_vs_prog(brw, vp, &key, &brw->vs.prog_bo);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-/* See brw_vs.c:
- */
-const struct brw_tracked_state brw_vs_prog = {
-   .dirty = {
-      .mesa  = (PIPE_NEW_CLIP | 
-                PIPE_NEW_RAST |
-                PIPE_NEW_FRAGMENT_SIGNATURE),
-      .brw   = BRW_NEW_VERTEX_PROGRAM,
-      .cache = 0
-   },
-   .prepare = brw_upload_vs_prog
-};
diff --git a/src/gallium/drivers/i965/brw_vs.h b/src/gallium/drivers/i965/brw_vs.h
deleted file mode 100644 (file)
index b6d1091..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-            
-
-#ifndef BRW_VS_H
-#define BRW_VS_H
-
-
-#include "brw_context.h"
-#include "brw_eu.h"
-
-
-struct brw_vs_prog_key {
-   GLuint program_string_id;
-   GLuint nr_userclip:4;
-   GLuint pad:26;
-   struct brw_fs_signature fs_signature;
-};
-
-#define brw_vs_prog_key_size(s) (offsetof(struct brw_vs_prog_key, fs_signature) + \
-                                 brw_fs_signature_size(&(s)->fs_signature))
-
-
-#define MAX_IF_DEPTH 32
-#define MAX_LOOP_DEPTH 32
-
-struct brw_vs_compile {
-   struct brw_compile func;
-   struct brw_vs_prog_key key;
-   struct brw_vs_prog_data prog_data;
-
-   struct brw_vertex_shader *vp;
-
-   GLuint nr_inputs;
-   GLuint nr_outputs;
-   GLuint nr_immediates;
-   GLfloat immediate[128][4];
-
-   GLuint overflow_grf_start;
-   GLuint overflow_count;
-
-   GLuint first_tmp;
-   GLuint last_tmp;
-
-   struct brw_reg r0;
-   struct brw_reg r1;
-   struct brw_reg regs[TGSI_FILE_COUNT][128];
-   struct brw_reg tmp;
-   struct brw_reg stack;
-
-   struct {    
-       GLboolean used_in_src;
-       struct brw_reg reg;
-   } output_regs[128];
-
-   struct brw_reg userplane[6];
-
-   /** we may need up to 3 constants per instruction (if use_const_buffer) */
-   struct {
-      GLint index;
-      struct brw_reg reg;
-   } current_const[3];
-
-   struct brw_instruction *if_inst[MAX_IF_DEPTH];
-   struct brw_instruction *loop_inst[MAX_LOOP_DEPTH];
-   GLuint insn;
-   GLuint if_depth;
-   GLuint loop_depth;
-   GLuint end_offset;
-
-   struct brw_indirect stack_index;
-};
-
-
-void brw_vs_emit( struct brw_vs_compile *c );
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_vs_emit.c b/src/gallium/drivers/i965/brw_vs_emit.c
deleted file mode 100644 (file)
index 559f0c6..0000000
+++ /dev/null
@@ -1,1660 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "pipe/p_shader_tokens.h"
-            
-#include "util/u_memory.h"
-#include "util/u_math.h"
-
-#include "tgsi/tgsi_parse.h"
-#include "tgsi/tgsi_dump.h"
-#include "tgsi/tgsi_info.h"
-
-#include "brw_context.h"
-#include "brw_vs.h"
-#include "brw_debug.h"
-#include "brw_disasm.h"
-
-/* Choose one of the 4 vec4's which can be packed into each 16-wide reg.
- */
-static INLINE struct brw_reg brw_vec4_grf_repeat( GLuint reg, GLuint slot )
-{
-   int nr = reg + slot/2;
-   int subnr = (slot%2) * 4;
-
-   return stride(brw_vec4_grf(nr, subnr), 0, 4, 1);
-}
-
-
-static struct brw_reg get_tmp( struct brw_vs_compile *c )
-{
-   struct brw_reg tmp = brw_vec8_grf(c->last_tmp, 0);
-
-   if (++c->last_tmp > c->prog_data.total_grf)
-      c->prog_data.total_grf = c->last_tmp;
-
-   return tmp;
-}
-
-static void release_tmp( struct brw_vs_compile *c, struct brw_reg tmp )
-{
-   if (tmp.nr == c->last_tmp-1)
-      c->last_tmp--;
-}
-                              
-static void release_tmps( struct brw_vs_compile *c )
-{
-   c->last_tmp = c->first_tmp;
-}
-
-
-static boolean is_position_output( struct brw_vs_compile *c,
-                                   unsigned vs_output )
-{
-   const struct brw_vertex_shader *vs = c->vp;
-   unsigned semantic = vs->info.output_semantic_name[vs_output];
-   unsigned index = vs->info.output_semantic_index[vs_output];
-      
-   return (semantic == TGSI_SEMANTIC_POSITION &&
-           index == 0);
-}
-
-
-static boolean find_output_slot( struct brw_vs_compile *c,
-                                  unsigned vs_output,
-                                  unsigned *fs_input_slot )
-{
-   const struct brw_vertex_shader *vs = c->vp;
-   unsigned semantic = vs->info.output_semantic_name[vs_output];
-   unsigned index = vs->info.output_semantic_index[vs_output];
-   unsigned i;
-
-   for (i = 0; i < c->key.fs_signature.nr_inputs; i++) {
-      if (c->key.fs_signature.input[i].semantic == semantic &&
-          c->key.fs_signature.input[i].semantic_index == index) {
-         *fs_input_slot = i;
-         return TRUE;
-      }
-   }
-
-   return FALSE;
-}
-
-
-/**
- * Preallocate GRF register before code emit.
- * Do things as simply as possible.  Allocate and populate all regs
- * ahead of time.
- */
-static void brw_vs_alloc_regs( struct brw_vs_compile *c )
-{
-   struct brw_context *brw = c->func.brw;
-   GLuint i, reg = 0, subreg = 0, mrf;
-   int attributes_in_vue;
-
-   /* Determine whether to use a real constant buffer or use a block
-    * of GRF registers for constants.  The later is faster but only
-    * works if everything fits in the GRF.
-    * XXX this heuristic/check may need some fine tuning...
-    */
-   if (c->vp->info.file_max[TGSI_FILE_CONSTANT] + 1 +
-       c->vp->info.file_max[TGSI_FILE_IMMEDIATE] + 1 +
-       c->vp->info.file_max[TGSI_FILE_TEMPORARY] + 1 + 21 > BRW_MAX_GRF)
-      c->vp->use_const_buffer = GL_TRUE;
-   else {
-      /* XXX: immediates can go elsewhere if necessary:
-       */
-      assert(c->vp->info.file_max[TGSI_FILE_IMMEDIATE] + 1 +
-            c->vp->info.file_max[TGSI_FILE_TEMPORARY] + 1 + 21 <= BRW_MAX_GRF);
-
-      c->vp->use_const_buffer = GL_FALSE;
-   }
-
-   /*printf("use_const_buffer = %d\n", c->vp->use_const_buffer);*/
-
-   /* r0 -- reserved as usual
-    */
-   c->r0 = brw_vec8_grf(reg, 0);
-   reg++;
-
-   /* User clip planes from curbe: 
-    */
-   if (c->key.nr_userclip) {
-      /* Skip over fixed planes:  Or never read them into vs unit?
-       */
-      subreg += 6;
-
-      for (i = 0; i < c->key.nr_userclip; i++, subreg++) {
-        c->userplane[i] = 
-            stride( brw_vec4_grf(reg+subreg/2, (subreg%2) * 4), 0, 4, 1);
-      }     
-
-      /* Deal with curbe alignment:
-       */
-      subreg = align(subreg, 2);
-      /*reg += ((6 + c->key.nr_userclip + 3) / 4) * 2;*/
-   }
-
-
-   /* Immediates: always in the curbe.
-    *
-    * XXX: Can try to encode some immediates as brw immediates
-    * XXX: Make sure ureg sets minimal immediate size and respect it
-    * here.
-    */
-   for (i = 0; i < c->vp->info.immediate_count; i++, subreg++) {
-      c->regs[TGSI_FILE_IMMEDIATE][i] = 
-         stride( brw_vec4_grf(reg+subreg/2, (subreg%2) * 4), 0, 4, 1);
-   }
-   c->prog_data.nr_params = c->vp->info.immediate_count * 4;
-
-
-   /* Vertex constant buffer.
-    *
-    * Constants from the buffer can be either cached in the curbe or
-    * loaded as needed from the actual constant buffer.
-    */
-   if (!c->vp->use_const_buffer) {
-      GLuint nr_params = c->vp->info.file_max[TGSI_FILE_CONSTANT] + 1;
-
-      for (i = 0; i < nr_params; i++, subreg++) {
-         c->regs[TGSI_FILE_CONSTANT][i] =
-            stride( brw_vec4_grf(reg+subreg/2, (subreg%2) * 4), 0, 4, 1);
-      }
-
-      c->prog_data.nr_params += nr_params * 4;
-   }
-
-   /* All regs allocated
-    */
-   reg += (subreg + 1) / 2;
-   c->prog_data.curb_read_length = reg - 1;
-
-
-   /* Allocate input regs:  
-    */
-   c->nr_inputs = c->vp->info.num_inputs;
-   for (i = 0; i < c->nr_inputs; i++) {
-      c->regs[TGSI_FILE_INPUT][i] = brw_vec8_grf(reg, 0);
-      reg++;
-   }
-
-   /* If there are no inputs, we'll still be reading one attribute's worth
-    * because it's required -- see urb_read_length setting.
-    */
-   if (c->nr_inputs == 0)
-      reg++;
-
-
-
-   /* Allocate outputs.  The non-position outputs go straight into message regs.
-    */
-   c->nr_outputs = c->prog_data.nr_outputs;
-
-   if (brw->gen == 5)
-      mrf = 8;
-   else
-      mrf = 4;
-
-   
-   if (c->key.fs_signature.nr_inputs > BRW_MAX_MRF) {
-      c->overflow_grf_start = reg;
-      c->overflow_count = c->key.fs_signature.nr_inputs - BRW_MAX_MRF;
-      reg += c->overflow_count;
-   }
-
-   /* XXX: need to access vertex output semantics here:
-    */
-   for (i = 0; i < c->nr_outputs; i++) {
-      unsigned slot;
-
-      /* XXX: Put output position in slot zero always.  Clipper, etc,
-       * need access to this reg.
-       */
-      if (is_position_output(c, i)) {
-        c->regs[TGSI_FILE_OUTPUT][i] = brw_vec8_grf(reg, 0); /* copy to mrf 0 */
-        reg++;
-      }
-      else if (find_output_slot(c, i, &slot)) {
-         
-         if (0 /* is_psize_output(c, i) */ ) {
-            /* c->psize_out.grf = reg; */
-            /* c->psize_out.mrf = i; */
-         }
-         
-         /* The first (16-4) outputs can go straight into the message regs.
-          */
-         if (slot + mrf < BRW_MAX_MRF) {
-            c->regs[TGSI_FILE_OUTPUT][i] = brw_message_reg(slot + mrf);
-         }
-         else {
-            int grf = c->overflow_grf_start + slot - BRW_MAX_MRF;
-            c->regs[TGSI_FILE_OUTPUT][i] = brw_vec8_grf(grf, 0);
-         }
-      }
-      else {
-         c->regs[TGSI_FILE_OUTPUT][i] = brw_null_reg();
-      }
-   }     
-
-   /* Allocate program temporaries:
-    */
-   
-   for (i = 0; i < c->vp->info.file_max[TGSI_FILE_TEMPORARY]+1; i++) {
-      c->regs[TGSI_FILE_TEMPORARY][i] = brw_vec8_grf(reg, 0);
-      reg++;
-   }
-
-   /* Address reg(s).  Don't try to use the internal address reg until
-    * deref time.
-    */
-   for (i = 0; i < c->vp->info.file_max[TGSI_FILE_ADDRESS]+1; i++) {
-      c->regs[TGSI_FILE_ADDRESS][i] =  brw_reg(BRW_GENERAL_REGISTER_FILE,
-                                            reg,
-                                            0,
-                                            BRW_REGISTER_TYPE_D,
-                                            BRW_VERTICAL_STRIDE_8,
-                                            BRW_WIDTH_8,
-                                            BRW_HORIZONTAL_STRIDE_1,
-                                            BRW_SWIZZLE_XXXX,
-                                            BRW_WRITEMASK_X);
-      reg++;
-   }
-
-   if (c->vp->use_const_buffer) {
-      for (i = 0; i < 3; i++) {
-         c->current_const[i].index = -1;
-         c->current_const[i].reg = brw_vec8_grf(reg, 0);
-         reg++;
-      }
-   }
-
-#if 0
-   for (i = 0; i < 128; i++) {
-      if (c->output_regs[i].used_in_src) {
-         c->output_regs[i].reg = brw_vec8_grf(reg, 0);
-         reg++;
-      }
-   }
-#endif
-
-   if (c->vp->has_flow_control) {
-      c->stack =  brw_uw16_reg(BRW_GENERAL_REGISTER_FILE, reg, 0);
-      reg += 2;
-   }
-
-   /* Some opcodes need an internal temporary:
-    */
-   c->first_tmp = reg;
-   c->last_tmp = reg;          /* for allocation purposes */
-
-   /* Each input reg holds data from two vertices.  The
-    * urb_read_length is the number of registers read from *each*
-    * vertex urb, so is half the amount:
-    */
-   c->prog_data.urb_read_length = (c->nr_inputs + 1) / 2;
-
-   /* Setting this field to 0 leads to undefined behavior according to the
-    * the VS_STATE docs.  Our VUEs will always have at least one attribute
-    * sitting in them, even if it's padding.
-    */
-   if (c->prog_data.urb_read_length == 0)
-      c->prog_data.urb_read_length = 1;
-
-   /* The VS VUEs are shared by VF (outputting our inputs) and VS, so size
-    * them to fit the biggest thing they need to.
-    */
-   attributes_in_vue = MAX2(c->nr_outputs, c->nr_inputs);
-
-   if (brw->gen == 5)
-      c->prog_data.urb_entry_size = (attributes_in_vue + 6 + 3) / 4;
-   else
-      c->prog_data.urb_entry_size = (attributes_in_vue + 2 + 3) / 4;
-
-   c->prog_data.total_grf = reg;
-
-   if (BRW_DEBUG & DEBUG_VS) {
-      debug_printf("%s NumAddrRegs %d\n", __FUNCTION__, 
-                  c->vp->info.file_max[TGSI_FILE_ADDRESS]+1);
-      debug_printf("%s NumTemps %d\n", __FUNCTION__,
-                  c->vp->info.file_max[TGSI_FILE_TEMPORARY]+1);
-      debug_printf("%s reg = %d\n", __FUNCTION__, reg);
-   }
-}
-
-
-/**
- * If an instruction uses a temp reg both as a src and the dest, we
- * sometimes need to allocate an intermediate temporary.
- */
-static void unalias1( struct brw_vs_compile *c,
-                     struct brw_reg dst,
-                     struct brw_reg arg0,
-                     void (*func)( struct brw_vs_compile *,
-                                   struct brw_reg,
-                                   struct brw_reg ))
-{
-   if (dst.file == arg0.file && dst.nr == arg0.nr) {
-      struct brw_compile *p = &c->func;
-      struct brw_reg tmp = brw_writemask(get_tmp(c), dst.dw1.bits.writemask);
-      func(c, tmp, arg0);
-      brw_MOV(p, dst, tmp);
-      release_tmp(c, tmp);
-   }
-   else {
-      func(c, dst, arg0);
-   }
-}
-
-/**
- * \sa unalias2
- * Checkes if 2-operand instruction needs an intermediate temporary.
- */
-static void unalias2( struct brw_vs_compile *c,
-                     struct brw_reg dst,
-                     struct brw_reg arg0,
-                     struct brw_reg arg1,
-                     void (*func)( struct brw_vs_compile *,
-                                   struct brw_reg,
-                                   struct brw_reg,
-                                   struct brw_reg ))
-{
-   if ((dst.file == arg0.file && dst.nr == arg0.nr) ||
-       (dst.file == arg1.file && dst.nr == arg1.nr)) {
-      struct brw_compile *p = &c->func;
-      struct brw_reg tmp = brw_writemask(get_tmp(c), dst.dw1.bits.writemask);
-      func(c, tmp, arg0, arg1);
-      brw_MOV(p, dst, tmp);
-      release_tmp(c, tmp);
-   }
-   else {
-      func(c, dst, arg0, arg1);
-   }
-}
-
-/**
- * \sa unalias2
- * Checkes if 3-operand instruction needs an intermediate temporary.
- */
-static void unalias3( struct brw_vs_compile *c,
-                     struct brw_reg dst,
-                     struct brw_reg arg0,
-                     struct brw_reg arg1,
-                     struct brw_reg arg2,
-                     void (*func)( struct brw_vs_compile *,
-                                   struct brw_reg,
-                                   struct brw_reg,
-                                   struct brw_reg,
-                                   struct brw_reg ))
-{
-   if ((dst.file == arg0.file && dst.nr == arg0.nr) ||
-       (dst.file == arg1.file && dst.nr == arg1.nr) ||
-       (dst.file == arg2.file && dst.nr == arg2.nr)) {
-      struct brw_compile *p = &c->func;
-      struct brw_reg tmp = brw_writemask(get_tmp(c), dst.dw1.bits.writemask);
-      func(c, tmp, arg0, arg1, arg2);
-      brw_MOV(p, dst, tmp);
-      release_tmp(c, tmp);
-   }
-   else {
-      func(c, dst, arg0, arg1, arg2);
-   }
-}
-
-static void emit_sop( struct brw_compile *p,
-                      struct brw_reg dst,
-                      struct brw_reg arg0,
-                      struct brw_reg arg1, 
-                     GLuint cond)
-{
-   brw_MOV(p, dst, brw_imm_f(0.0f));
-   brw_CMP(p, brw_null_reg(), cond, arg0, arg1);
-   brw_MOV(p, dst, brw_imm_f(1.0f));
-   brw_set_predicate_control_flag_value(p, 0xff);
-}
-
-static void emit_seq( struct brw_compile *p,
-                      struct brw_reg dst,
-                      struct brw_reg arg0,
-                      struct brw_reg arg1 )
-{
-   emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_EQ);
-}
-
-static void emit_sne( struct brw_compile *p,
-                      struct brw_reg dst,
-                      struct brw_reg arg0,
-                      struct brw_reg arg1 )
-{
-   emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_NEQ);
-}
-static void emit_slt( struct brw_compile *p, 
-                     struct brw_reg dst,
-                     struct brw_reg arg0,
-                     struct brw_reg arg1 )
-{
-   emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_L);
-}
-
-static void emit_sle( struct brw_compile *p, 
-                     struct brw_reg dst,
-                     struct brw_reg arg0,
-                     struct brw_reg arg1 )
-{
-   emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_LE);
-}
-
-static void emit_sgt( struct brw_compile *p, 
-                     struct brw_reg dst,
-                     struct brw_reg arg0,
-                     struct brw_reg arg1 )
-{
-   emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_G);
-}
-
-static void emit_sge( struct brw_compile *p, 
-                     struct brw_reg dst,
-                     struct brw_reg arg0,
-                     struct brw_reg arg1 )
-{
-  emit_sop(p, dst, arg0, arg1, BRW_CONDITIONAL_GE);
-}
-
-static void emit_max( struct brw_compile *p, 
-                     struct brw_reg dst,
-                     struct brw_reg arg0,
-                     struct brw_reg arg1 )
-{
-   brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0, arg1);
-   brw_SEL(p, dst, arg1, arg0);
-   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-}
-
-static void emit_min( struct brw_compile *p, 
-                     struct brw_reg dst,
-                     struct brw_reg arg0,
-                     struct brw_reg arg1 )
-{
-   brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0, arg1);
-   brw_SEL(p, dst, arg0, arg1);
-   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-}
-
-
-static void emit_math1( struct brw_vs_compile *c,
-                       GLuint function,
-                       struct brw_reg dst,
-                       struct brw_reg arg0,
-                       GLuint precision)
-{
-   /* There are various odd behaviours with SEND on the simulator.  In
-    * addition there are documented issues with the fact that the GEN4
-    * processor doesn't do dependency control properly on SEND
-    * results.  So, on balance, this kludge to get around failures
-    * with writemasked math results looks like it might be necessary
-    * whether that turns out to be a simulator bug or not:
-    */
-   struct brw_compile *p = &c->func;
-   struct brw_reg tmp = dst;
-   GLboolean need_tmp = (dst.dw1.bits.writemask != 0xf ||
-                        dst.file != BRW_GENERAL_REGISTER_FILE);
-
-   if (need_tmp) 
-      tmp = get_tmp(c);
-
-   brw_math(p, 
-           tmp,
-           function,
-           BRW_MATH_SATURATE_NONE,
-           2,
-           arg0,
-           BRW_MATH_DATA_SCALAR,
-           precision);
-
-   if (need_tmp) {
-      brw_MOV(p, dst, tmp);
-      release_tmp(c, tmp);
-   }
-}
-
-
-static void emit_math2( struct brw_vs_compile *c, 
-                       GLuint function,
-                       struct brw_reg dst,
-                       struct brw_reg arg0,
-                       struct brw_reg arg1,
-                       GLuint precision)
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg tmp = dst;
-   GLboolean need_tmp = (dst.dw1.bits.writemask != 0xf ||
-                        dst.file != BRW_GENERAL_REGISTER_FILE);
-
-   if (need_tmp) 
-      tmp = get_tmp(c);
-
-   brw_MOV(p, brw_message_reg(3), arg1);
-   
-   brw_math(p, 
-           tmp,
-           function,
-           BRW_MATH_SATURATE_NONE,
-           2,
-           arg0,
-           BRW_MATH_DATA_SCALAR,
-           precision);
-
-   if (need_tmp) {
-      brw_MOV(p, dst, tmp);
-      release_tmp(c, tmp);
-   }
-}
-
-
-static void emit_exp_noalias( struct brw_vs_compile *c,
-                             struct brw_reg dst,
-                             struct brw_reg arg0 )
-{
-   struct brw_compile *p = &c->func;
-   
-
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_X) {
-      struct brw_reg tmp = get_tmp(c);
-      struct brw_reg tmp_d = retype(tmp, BRW_REGISTER_TYPE_D);
-
-      /* tmp_d = floor(arg0.x) */
-      brw_RNDD(p, tmp_d, brw_swizzle1(arg0, 0));
-
-      /* result[0] = 2.0 ^ tmp */
-
-      /* Adjust exponent for floating point: 
-       * exp += 127 
-       */
-      brw_ADD(p, brw_writemask(tmp_d, BRW_WRITEMASK_X), tmp_d, brw_imm_d(127));
-
-      /* Install exponent and sign.  
-       * Excess drops off the edge: 
-       */
-      brw_SHL(p, brw_writemask(retype(dst, BRW_REGISTER_TYPE_D), BRW_WRITEMASK_X), 
-             tmp_d, brw_imm_d(23));
-
-      release_tmp(c, tmp);
-   }
-
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_Y) {
-      /* result[1] = arg0.x - floor(arg0.x) */
-      brw_FRC(p, brw_writemask(dst, BRW_WRITEMASK_Y), brw_swizzle1(arg0, 0));
-   }
-   
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_Z) {
-      /* As with the LOG instruction, we might be better off just
-       * doing a taylor expansion here, seeing as we have to do all
-       * the prep work.
-       *
-       * If mathbox partial precision is too low, consider also:
-       * result[3] = result[0] * EXP(result[1])
-       */
-      emit_math1(c, 
-                BRW_MATH_FUNCTION_EXP, 
-                brw_writemask(dst, BRW_WRITEMASK_Z),
-                brw_swizzle1(arg0, 0), 
-                BRW_MATH_PRECISION_FULL);
-   }  
-
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_W) {
-      /* result[3] = 1.0; */
-      brw_MOV(p, brw_writemask(dst, BRW_WRITEMASK_W), brw_imm_f(1));
-   }
-}
-
-
-static void emit_log_noalias( struct brw_vs_compile *c,
-                             struct brw_reg dst,
-                             struct brw_reg arg0 )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg tmp = dst;
-   struct brw_reg tmp_ud = retype(tmp, BRW_REGISTER_TYPE_UD);
-   struct brw_reg arg0_ud = retype(arg0, BRW_REGISTER_TYPE_UD);
-   GLboolean need_tmp = (dst.dw1.bits.writemask != 0xf ||
-                        dst.file != BRW_GENERAL_REGISTER_FILE);
-
-   if (need_tmp) {
-      tmp = get_tmp(c);
-      tmp_ud = retype(tmp, BRW_REGISTER_TYPE_UD);
-   }
-   
-   /* Perform mant = frexpf(fabsf(x), &exp), adjust exp and mnt
-    * according to spec:
-    *
-    * These almost look likey they could be joined up, but not really
-    * practical:
-    *
-    * result[0].f = (x.i & ((1<<31)-1) >> 23) - 127
-    * result[1].i = (x.i & ((1<<23)-1)        + (127<<23)
-    */
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_XZ) {
-      brw_AND(p, 
-             brw_writemask(tmp_ud, BRW_WRITEMASK_X),
-             brw_swizzle1(arg0_ud, 0),
-             brw_imm_ud((1U<<31)-1));
-
-      brw_SHR(p, 
-             brw_writemask(tmp_ud, BRW_WRITEMASK_X), 
-             tmp_ud,
-             brw_imm_ud(23));
-
-      brw_ADD(p, 
-             brw_writemask(tmp, BRW_WRITEMASK_X), 
-             retype(tmp_ud, BRW_REGISTER_TYPE_D),      /* does it matter? */
-             brw_imm_d(-127));
-   }
-
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_YZ) {
-      brw_AND(p, 
-             brw_writemask(tmp_ud, BRW_WRITEMASK_Y),
-             brw_swizzle1(arg0_ud, 0),
-             brw_imm_ud((1<<23)-1));
-
-      brw_OR(p, 
-            brw_writemask(tmp_ud, BRW_WRITEMASK_Y), 
-            tmp_ud,
-            brw_imm_ud(127<<23));
-   }
-   
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_Z) {
-      /* result[2] = result[0] + LOG2(result[1]); */
-
-      /* Why bother?  The above is just a hint how to do this with a
-       * taylor series.  Maybe we *should* use a taylor series as by
-       * the time all the above has been done it's almost certainly
-       * quicker than calling the mathbox, even with low precision.
-       * 
-       * Options are:
-       *    - result[0] + mathbox.LOG2(result[1])
-       *    - mathbox.LOG2(arg0.x)
-       *    - result[0] + inline_taylor_approx(result[1])
-       */
-      emit_math1(c, 
-                BRW_MATH_FUNCTION_LOG, 
-                brw_writemask(tmp, BRW_WRITEMASK_Z), 
-                brw_swizzle1(tmp, 1), 
-                BRW_MATH_PRECISION_FULL);
-      
-      brw_ADD(p, 
-             brw_writemask(tmp, BRW_WRITEMASK_Z), 
-             brw_swizzle1(tmp, 2), 
-             brw_swizzle1(tmp, 0));
-   }  
-
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_W) {
-      /* result[3] = 1.0; */
-      brw_MOV(p, brw_writemask(tmp, BRW_WRITEMASK_W), brw_imm_f(1));
-   }
-
-   if (need_tmp) {
-      brw_MOV(p, dst, tmp);
-      release_tmp(c, tmp);
-   }
-}
-
-
-/* Need to unalias - consider swizzles:   r0 = DST r0.xxxx r1
- */
-static void emit_dst_noalias( struct brw_vs_compile *c, 
-                             struct brw_reg dst,
-                             struct brw_reg arg0,
-                             struct brw_reg arg1)
-{
-   struct brw_compile *p = &c->func;
-
-   /* There must be a better way to do this: 
-    */
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_X)
-      brw_MOV(p, brw_writemask(dst, BRW_WRITEMASK_X), brw_imm_f(1.0));
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_Y)
-      brw_MUL(p, brw_writemask(dst, BRW_WRITEMASK_Y), arg0, arg1);
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_Z)
-      brw_MOV(p, brw_writemask(dst, BRW_WRITEMASK_Z), arg0);
-   if (dst.dw1.bits.writemask & BRW_WRITEMASK_W)
-      brw_MOV(p, brw_writemask(dst, BRW_WRITEMASK_W), arg1);
-}
-
-
-static void emit_xpd( struct brw_compile *p,
-                     struct brw_reg dst,
-                     struct brw_reg t,
-                     struct brw_reg u)
-{
-   brw_MUL(p, brw_null_reg(), brw_swizzle(t, 1,2,0,3),  brw_swizzle(u,2,0,1,3));
-   brw_MAC(p, dst,     negate(brw_swizzle(t, 2,0,1,3)), brw_swizzle(u,1,2,0,3));
-}
-
-
-static void emit_lit_noalias( struct brw_vs_compile *c, 
-                             struct brw_reg dst,
-                             struct brw_reg arg0 )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_instruction *if_insn;
-   struct brw_reg tmp = dst;
-   GLboolean need_tmp = (dst.file != BRW_GENERAL_REGISTER_FILE);
-
-   if (need_tmp) 
-      tmp = get_tmp(c);
-   
-   brw_MOV(p, brw_writemask(dst, BRW_WRITEMASK_YZ), brw_imm_f(0)); 
-   brw_MOV(p, brw_writemask(dst, BRW_WRITEMASK_XW), brw_imm_f(1)); 
-
-   /* Need to use BRW_EXECUTE_8 and also do an 8-wide compare in order
-    * to get all channels active inside the IF.  In the clipping code
-    * we run with NoMask, so it's not an option and we can use
-    * BRW_EXECUTE_1 for all comparisions.
-    */
-   brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_G, brw_swizzle1(arg0,0), brw_imm_f(0));
-   if_insn = brw_IF(p, BRW_EXECUTE_8);
-   {
-      brw_MOV(p, brw_writemask(dst, BRW_WRITEMASK_Y), brw_swizzle1(arg0,0));
-
-      brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_G, brw_swizzle1(arg0,1), brw_imm_f(0));
-      brw_MOV(p, brw_writemask(tmp, BRW_WRITEMASK_Z),  brw_swizzle1(arg0,1));
-      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-
-      emit_math2(c, 
-                BRW_MATH_FUNCTION_POW, 
-                brw_writemask(dst, BRW_WRITEMASK_Z),
-                brw_swizzle1(tmp, 2),
-                brw_swizzle1(arg0, 3),
-                BRW_MATH_PRECISION_PARTIAL);      
-   }
-
-   brw_ENDIF(p, if_insn);
-
-   release_tmp(c, tmp);
-}
-
-static void emit_lrp_noalias(struct brw_vs_compile *c,
-                            struct brw_reg dst,
-                            struct brw_reg arg0,
-                            struct brw_reg arg1,
-                            struct brw_reg arg2)
-{
-   struct brw_compile *p = &c->func;
-
-   brw_ADD(p, dst, negate(arg0), brw_imm_f(1.0));
-   brw_MUL(p, brw_null_reg(), dst, arg2);
-   brw_MAC(p, dst, arg0, arg1);
-}
-
-/** 3 or 4-component vector normalization */
-static void emit_nrm( struct brw_vs_compile *c, 
-                      struct brw_reg dst,
-                      struct brw_reg arg0,
-                      int num_comps)
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg tmp = get_tmp(c);
-
-   /* tmp = dot(arg0, arg0) */
-   if (num_comps == 3)
-      brw_DP3(p, tmp, arg0, arg0);
-   else
-      brw_DP4(p, tmp, arg0, arg0);
-
-   /* tmp = 1 / sqrt(tmp) */
-   emit_math1(c, BRW_MATH_FUNCTION_RSQ, tmp, tmp, BRW_MATH_PRECISION_FULL);
-
-   /* dst = arg0 * tmp */
-   brw_MUL(p, dst, arg0, tmp);
-
-   release_tmp(c, tmp);
-}
-
-
-static struct brw_reg
-get_constant(struct brw_vs_compile *c,
-            GLuint argIndex,
-            GLuint index,
-            GLboolean relAddr)
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg const_reg;
-   struct brw_reg const2_reg;
-
-   assert(argIndex < 3);
-
-   if (c->current_const[argIndex].index != index || relAddr) {
-      struct brw_reg addrReg = c->regs[TGSI_FILE_ADDRESS][0];
-
-      c->current_const[argIndex].index = index;
-
-#if 0
-      printf("  fetch const[%d] for arg %d into reg %d\n",
-             src.Index, argIndex, c->current_const[argIndex].reg.nr);
-#endif
-      /* need to fetch the constant now */
-      brw_dp_READ_4_vs(p,
-                       c->current_const[argIndex].reg,/* writeback dest */
-                       0,                             /* oword */
-                       relAddr,                       /* relative indexing? */
-                       addrReg,                       /* address register */
-                       16 * index,               /* byte offset */
-                       SURF_INDEX_VERT_CONST_BUFFER   /* binding table index */
-                       );
-
-      if (relAddr) {
-         /* second read */
-         const2_reg = get_tmp(c);
-
-         /* use upper half of address reg for second read */
-         addrReg = stride(addrReg, 0, 4, 0);
-         addrReg.subnr = 16;
-
-         brw_dp_READ_4_vs(p,
-                          const2_reg,              /* writeback dest */
-                          1,                       /* oword */
-                          relAddr,                 /* relative indexing? */
-                          addrReg,                 /* address register */
-                          16 * index,         /* byte offset */
-                          SURF_INDEX_VERT_CONST_BUFFER
-                          );
-      }
-   }
-
-   const_reg = c->current_const[argIndex].reg;
-
-   if (relAddr) {
-      /* merge the two Owords into the constant register */
-      /* const_reg[7..4] = const2_reg[7..4] */
-      brw_MOV(p,
-              suboffset(stride(const_reg, 0, 4, 1), 4),
-              suboffset(stride(const2_reg, 0, 4, 1), 4));
-      release_tmp(c, const2_reg);
-   }
-   else {
-      /* replicate lower four floats into upper half (to get XYZWXYZW) */
-      const_reg = stride(const_reg, 0, 4, 0);
-      const_reg.subnr = 0;
-   }
-
-   return const_reg;
-}
-
-
-#if 0
-
-/* TODO: relative addressing!
- */
-static struct brw_reg get_reg( struct brw_vs_compile *c,
-                              enum tgsi_file_type file,
-                              GLuint index )
-{
-   switch (file) {
-   case TGSI_FILE_TEMPORARY:
-   case TGSI_FILE_INPUT:
-   case TGSI_FILE_OUTPUT:
-   case TGSI_FILE_CONSTANT:
-      assert(c->regs[file][index].nr != 0);
-      return c->regs[file][index];
-
-   case TGSI_FILE_ADDRESS:
-      assert(index == 0);
-      return c->regs[file][index];
-
-   case TGSI_FILE_NULL:                        /* undef values */
-      return brw_null_reg();
-
-   default:
-      assert(0);
-      return brw_null_reg();
-   }
-}
-
-#endif
-
-
-/**
- * Indirect addressing:  get reg[[arg] + offset].
- */
-static struct brw_reg deref( struct brw_vs_compile *c,
-                            struct brw_reg arg,
-                            GLint offset)
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg tmp = vec4(get_tmp(c));
-   struct brw_reg addr_reg = c->regs[TGSI_FILE_ADDRESS][0];
-   struct brw_reg vp_address = retype(vec1(addr_reg), BRW_REGISTER_TYPE_UW);
-   GLuint byte_offset = arg.nr * 32 + arg.subnr + offset * 16;
-   struct brw_reg indirect = brw_vec4_indirect(0,0);
-
-   {
-      brw_push_insn_state(p);
-      brw_set_access_mode(p, BRW_ALIGN_1);
-
-      /* This is pretty clunky - load the address register twice and
-       * fetch each 4-dword value in turn.  There must be a way to do
-       * this in a single pass, but I couldn't get it to work.
-       */
-      brw_ADD(p, brw_address_reg(0), vp_address, brw_imm_d(byte_offset));
-      brw_MOV(p, tmp, indirect);
-
-      brw_ADD(p, brw_address_reg(0), suboffset(vp_address, 8), brw_imm_d(byte_offset));
-      brw_MOV(p, suboffset(tmp, 4), indirect);
-
-      brw_pop_insn_state(p);
-   }
-   
-   /* NOTE: tmp not released */
-   return vec8(tmp);
-}
-
-
-/**
- * Get brw reg corresponding to the instruction's [argIndex] src reg.
- * TODO: relative addressing!
- */
-static struct brw_reg
-get_src_reg( struct brw_vs_compile *c,
-            GLuint argIndex,
-            GLuint file,
-            GLint index,
-            GLboolean relAddr )
-{
-
-   switch (file) {
-   case TGSI_FILE_TEMPORARY:
-   case TGSI_FILE_INPUT:
-   case TGSI_FILE_OUTPUT:
-      if (relAddr) {
-         return deref(c, c->regs[file][0], index);
-      }
-      else {
-         assert(c->regs[file][index].nr != 0);
-         return c->regs[file][index];
-      }
-
-   case TGSI_FILE_IMMEDIATE:
-      return c->regs[file][index];
-
-   case TGSI_FILE_CONSTANT:
-      if (c->vp->use_const_buffer) {
-         return get_constant(c, argIndex, index, relAddr);
-      }
-      else if (relAddr) {
-         return deref(c, c->regs[TGSI_FILE_CONSTANT][0], index);
-      }
-      else {
-         assert(c->regs[TGSI_FILE_CONSTANT][index].nr != 0);
-         return c->regs[TGSI_FILE_CONSTANT][index];
-      }
-   case TGSI_FILE_ADDRESS:
-      assert(index == 0);
-      return c->regs[file][index];
-
-   case TGSI_FILE_NULL:
-      /* this is a normal case since we loop over all three src args */
-      return brw_null_reg();
-
-   default:
-      assert(0);
-      return brw_null_reg();
-   }
-}
-
-
-static void emit_arl( struct brw_vs_compile *c,
-                     struct brw_reg dst,
-                     struct brw_reg arg0 )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg tmp = dst;
-   GLboolean need_tmp = (dst.file != BRW_GENERAL_REGISTER_FILE);
-   
-   if (need_tmp) 
-      tmp = get_tmp(c);
-
-   brw_RNDD(p, tmp, arg0);               /* tmp = round(arg0) */
-   brw_MUL(p, dst, tmp, brw_imm_d(16));  /* dst = tmp * 16 */
-
-   if (need_tmp)
-      release_tmp(c, tmp);
-}
-
-
-/**
- * Return the brw reg for the given instruction's src argument.
- */
-static struct brw_reg get_arg( struct brw_vs_compile *c,
-                               const struct tgsi_full_src_register *src,
-                               GLuint argIndex )
-{
-   struct brw_reg reg;
-
-   if (src->Register.File == TGSI_FILE_NULL)
-      return brw_null_reg();
-
-   reg = get_src_reg(c, argIndex,
-                    src->Register.File,
-                    src->Register.Index,
-                    src->Register.Indirect);
-
-   /* Convert 3-bit swizzle to 2-bit.  
-    */
-   reg.dw1.bits.swizzle = BRW_SWIZZLE4(src->Register.SwizzleX,
-                                      src->Register.SwizzleY,
-                                      src->Register.SwizzleZ,
-                                      src->Register.SwizzleW);
-
-   reg.negate = src->Register.Negate ? 1 : 0;   
-
-   /* XXX: abs, absneg
-    */
-
-   return reg;
-}
-
-
-/**
- * Get brw register for the given program dest register.
- */
-static struct brw_reg get_dst( struct brw_vs_compile *c,
-                              unsigned file,
-                              unsigned index,
-                              unsigned writemask )
-{
-   struct brw_reg reg;
-
-   switch (file) {
-   case TGSI_FILE_TEMPORARY:
-   case TGSI_FILE_OUTPUT:
-      assert(c->regs[file][index].nr != 0);
-      reg = c->regs[file][index];
-      break;
-   case TGSI_FILE_ADDRESS:
-      assert(index == 0);
-      reg = c->regs[file][index];
-      break;
-   case TGSI_FILE_NULL:
-      /* we may hit this for OPCODE_END, OPCODE_KIL, etc */
-      reg = brw_null_reg();
-      break;
-   default:
-      assert(0);
-      reg = brw_null_reg();
-   }
-
-   reg.dw1.bits.writemask = writemask;
-
-   return reg;
-}
-
-
-
-
-/**
- * Post-vertex-program processing.  Send the results to the URB.
- */
-static void emit_vertex_write( struct brw_vs_compile *c)
-{
-   struct brw_compile *p = &c->func;
-   struct brw_context *brw = p->brw;
-   struct brw_reg m0 = brw_message_reg(0);
-   struct brw_reg pos = c->regs[TGSI_FILE_OUTPUT][VERT_RESULT_HPOS];
-   struct brw_reg ndc;
-   int eot;
-   int i;
-   GLuint len_vertext_header = 2;
-
-   /* Build ndc coords */
-   ndc = get_tmp(c);
-   /* ndc = 1.0 / pos.w */
-   emit_math1(c, BRW_MATH_FUNCTION_INV, ndc, brw_swizzle1(pos, 3), BRW_MATH_PRECISION_FULL);
-   /* ndc.xyz = pos * ndc */
-   brw_MUL(p, brw_writemask(ndc, BRW_WRITEMASK_XYZ), pos, ndc);
-
-   /* Update the header for point size, user clipping flags, and -ve rhw
-    * workaround.
-    */
-   if (c->prog_data.writes_psiz ||
-       c->key.nr_userclip || 
-       brw->has_negative_rhw_bug)
-   {
-      struct brw_reg header1 = retype(get_tmp(c), BRW_REGISTER_TYPE_UD);
-      GLuint i;
-
-      brw_MOV(p, header1, brw_imm_ud(0));
-
-      brw_set_access_mode(p, BRW_ALIGN_16);    
-
-      if (c->prog_data.writes_psiz) {
-        struct brw_reg psiz = c->regs[TGSI_FILE_OUTPUT][VERT_RESULT_PSIZ];
-        brw_MUL(p, brw_writemask(header1, BRW_WRITEMASK_W), brw_swizzle1(psiz, 0), brw_imm_f(1<<11));
-        brw_AND(p, brw_writemask(header1, BRW_WRITEMASK_W), header1, brw_imm_ud(0x7ff<<8));
-      }
-
-      for (i = 0; i < c->key.nr_userclip; i++) {
-        brw_set_conditionalmod(p, BRW_CONDITIONAL_L);
-        brw_DP4(p, brw_null_reg(), pos, c->userplane[i]);
-        brw_OR(p, brw_writemask(header1, BRW_WRITEMASK_W), header1, brw_imm_ud(1<<i));
-        brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-      }
-
-      /* i965 clipping workaround: 
-       * 1) Test for -ve rhw
-       * 2) If set, 
-       *      set ndc = (0,0,0,0)
-       *      set ucp[6] = 1
-       *
-       * Later, clipping will detect ucp[6] and ensure the primitive is
-       * clipped against all fixed planes.
-       */
-      if (brw->has_negative_rhw_bug) {
-        brw_CMP(p,
-                vec8(brw_null_reg()),
-                BRW_CONDITIONAL_L,
-                brw_swizzle1(ndc, 3),
-                brw_imm_f(0));
-   
-        brw_OR(p, brw_writemask(header1, BRW_WRITEMASK_W), header1, brw_imm_ud(1<<6));
-        brw_MOV(p, ndc, brw_imm_f(0));
-        brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-      }
-
-      brw_set_access_mode(p, BRW_ALIGN_1);     /* why? */
-      brw_MOV(p, retype(brw_message_reg(1), BRW_REGISTER_TYPE_UD), header1);
-      brw_set_access_mode(p, BRW_ALIGN_16);
-
-      release_tmp(c, header1);
-   }
-   else {
-      brw_MOV(p, retype(brw_message_reg(1), BRW_REGISTER_TYPE_UD), brw_imm_ud(0));
-   }
-
-   /* Emit the (interleaved) headers for the two vertices - an 8-reg
-    * of zeros followed by two sets of NDC coordinates:
-    */
-   brw_set_access_mode(p, BRW_ALIGN_1);
-   brw_MOV(p, offset(m0, 2), ndc);
-
-   if (brw->gen == 5) {
-       /* There are 20 DWs (D0-D19) in VUE vertex header on IGDNG */
-       brw_MOV(p, offset(m0, 3), pos); /* a portion of vertex header */
-       /* m4, m5 contain the distances from vertex to the user clip planeXXX. 
-        * Seems it is useless for us.
-        * m6 is used for aligning, so that the remainder of vertex element is 
-        * reg-aligned.
-        */
-       brw_MOV(p, offset(m0, 7), pos); /* the remainder of vertex element */
-       len_vertext_header = 6;
-   } else {
-       brw_MOV(p, offset(m0, 3), pos);
-       len_vertext_header = 2;
-   }
-
-   eot = (c->overflow_count == 0);
-
-   brw_urb_WRITE(p, 
-                brw_null_reg(), /* dest */
-                0,             /* starting mrf reg nr */
-                c->r0,         /* src */
-                0,             /* allocate */
-                1,             /* used */
-                MIN2(c->nr_outputs + 1 + len_vertext_header, (BRW_MAX_MRF-1)), /* msg len */
-                0,             /* response len */
-                eot,           /* eot */
-                eot,           /* writes complete */
-                0,             /* urb destination offset */
-                BRW_URB_SWIZZLE_INTERLEAVE);
-
-   /* Not all of the vertex outputs/results fit into the MRF.
-    * Move the overflowed attributes from the GRF to the MRF and
-    * issue another brw_urb_WRITE().
-    */
-   for (i = 0; i < c->overflow_count; i += BRW_MAX_MRF) {
-      unsigned nr = MIN2(c->overflow_count - i, BRW_MAX_MRF);
-      GLuint j;
-
-      eot = (i + nr >= c->overflow_count);
-
-      /* XXX I'm not 100% sure about which MRF regs to use here.  Starting
-       * at mrf[4] atm...
-       */
-      for (j = 0; j < nr; j++) {
-        brw_MOV(p, brw_message_reg(4+j), 
-                 brw_vec8_grf(c->overflow_grf_start + i + j, 0));
-      }
-
-      brw_urb_WRITE(p,
-                    brw_null_reg(), /* dest */
-                    4,              /* starting mrf reg nr */
-                    c->r0,          /* src */
-                    0,              /* allocate */
-                    1,              /* used */
-                    nr+1,          /* msg len */
-                    0,              /* response len */
-                    eot,            /* eot */
-                    eot,            /* writes complete */
-                    i-1,            /* urb destination offset */
-                    BRW_URB_SWIZZLE_INTERLEAVE);
-   }
-}
-
-
-/**
- * Called after code generation to resolve subroutine calls and the
- * END instruction.
- * \param end_inst  points to brw code for END instruction
- * \param last_inst  points to last instruction emitted before vertex write
- */
-static void 
-post_vs_emit( struct brw_vs_compile *c,
-              struct brw_instruction *end_inst,
-              struct brw_instruction *last_inst )
-{
-   GLint offset;
-
-   brw_resolve_cals(&c->func);
-
-   /* patch up the END code to jump past subroutines, etc */
-   offset = last_inst - end_inst;
-   if (offset > 1) {
-      brw_set_src1(end_inst, brw_imm_d(offset * 16));
-   } else {
-      end_inst->header.opcode = BRW_OPCODE_NOP;
-   }
-}
-
-static uint32_t
-get_predicate(const struct tgsi_full_instruction *inst)
-{
-   /* XXX: disabling for now
-    */
-#if 0
-   if (inst->dst.CondMask == COND_TR)
-      return BRW_PREDICATE_NONE;
-
-   /* All of GLSL only produces predicates for COND_NE and one channel per
-    * vector.  Fail badly if someone starts doing something else, as it might
-    * mean infinite looping or something.
-    *
-    * We'd like to support all the condition codes, but our hardware doesn't
-    * quite match the Mesa IR, which is modeled after the NV extensions.  For
-    * those, the instruction may update the condition codes or not, then any
-    * later instruction may use one of those condition codes.  For gen4, the
-    * instruction may update the flags register based on one of the condition
-    * codes output by the instruction, and then further instructions may
-    * predicate on that.  We can probably support this, but it won't
-    * necessarily be easy.
-    */
-/*   assert(inst->dst.CondMask == COND_NE); */
-
-   switch (inst->dst.CondSwizzle) {
-   case SWIZZLE_XXXX:
-      return BRW_PREDICATE_ALIGN16_REPLICATE_X;
-   case SWIZZLE_YYYY:
-      return BRW_PREDICATE_ALIGN16_REPLICATE_Y;
-   case SWIZZLE_ZZZZ:
-      return BRW_PREDICATE_ALIGN16_REPLICATE_Z;
-   case SWIZZLE_WWWW:
-      return BRW_PREDICATE_ALIGN16_REPLICATE_W;
-   default:
-      debug_printf("Unexpected predicate: 0x%08x\n",
-                   inst->dst.CondMask);
-      return BRW_PREDICATE_NORMAL;
-   }
-#else
-   return BRW_PREDICATE_NORMAL;
-#endif
-}
-
-static void emit_insn(struct brw_vs_compile *c,
-                     const struct tgsi_full_instruction *inst)
-{
-   unsigned opcode = inst->Instruction.Opcode;
-   unsigned label = inst->Label.Label;
-   struct brw_compile *p = &c->func;
-   struct brw_context *brw = p->brw;
-   struct brw_reg args[3], dst;
-   GLuint i;
-
-#if 0
-   printf("%d: ", insn);
-   _mesa_print_instruction(inst);
-#endif
-
-   /* Get argument regs.
-    */
-   for (i = 0; i < 3; i++) {
-      args[i] = get_arg(c, &inst->Src[i], i);
-   }
-
-   /* Get dest regs.  Note that it is possible for a reg to be both
-    * dst and arg, given the static allocation of registers.  So
-    * care needs to be taken emitting multi-operation instructions.
-    */ 
-   dst = get_dst(c, 
-                inst->Dst[0].Register.File,
-                inst->Dst[0].Register.Index,
-                inst->Dst[0].Register.WriteMask);
-
-   /* XXX: saturate
-    */
-   if (inst->Instruction.Saturate != TGSI_SAT_NONE) {
-      debug_printf("Unsupported saturate in vertex shader");
-   }
-
-   switch (opcode) {
-   case TGSI_OPCODE_ABS:
-      brw_MOV(p, dst, brw_abs(args[0]));
-      break;
-   case TGSI_OPCODE_ADD:
-      brw_ADD(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_COS:
-      emit_math1(c, BRW_MATH_FUNCTION_COS, dst, args[0], BRW_MATH_PRECISION_FULL);
-      break;
-   case TGSI_OPCODE_DP3:
-      brw_DP3(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_DP4:
-      brw_DP4(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_DPH:
-      brw_DPH(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_NRM:
-      emit_nrm(c, dst, args[0], 3);
-      break;
-   case TGSI_OPCODE_NRM4:
-      emit_nrm(c, dst, args[0], 4);
-      break;
-   case TGSI_OPCODE_DST:
-      unalias2(c, dst, args[0], args[1], emit_dst_noalias); 
-      break;
-   case TGSI_OPCODE_EXP:
-      unalias1(c, dst, args[0], emit_exp_noalias);
-      break;
-   case TGSI_OPCODE_EX2:
-      emit_math1(c, BRW_MATH_FUNCTION_EXP, dst, args[0], BRW_MATH_PRECISION_FULL);
-      break;
-   case TGSI_OPCODE_ARL:
-      emit_arl(c, dst, args[0]);
-      break;
-   case TGSI_OPCODE_FLR:
-      brw_RNDD(p, dst, args[0]);
-      break;
-   case TGSI_OPCODE_FRC:
-      brw_FRC(p, dst, args[0]);
-      break;
-   case TGSI_OPCODE_LOG:
-      unalias1(c, dst, args[0], emit_log_noalias);
-      break;
-   case TGSI_OPCODE_LG2:
-      emit_math1(c, BRW_MATH_FUNCTION_LOG, dst, args[0], BRW_MATH_PRECISION_FULL);
-      break;
-   case TGSI_OPCODE_LIT:
-      unalias1(c, dst, args[0], emit_lit_noalias);
-      break;
-   case TGSI_OPCODE_LRP:
-      unalias3(c, dst, args[0], args[1], args[2], emit_lrp_noalias);
-      break;
-   case TGSI_OPCODE_MAD:
-      brw_MOV(p, brw_acc_reg(), args[2]);
-      brw_MAC(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_MAX:
-      emit_max(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_MIN:
-      emit_min(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_MOV:
-      brw_MOV(p, dst, args[0]);
-      break;
-   case TGSI_OPCODE_MUL:
-      brw_MUL(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_POW:
-      emit_math2(c, BRW_MATH_FUNCTION_POW, dst, args[0], args[1], BRW_MATH_PRECISION_FULL); 
-      break;
-   case TGSI_OPCODE_RCP:
-      emit_math1(c, BRW_MATH_FUNCTION_INV, dst, args[0], BRW_MATH_PRECISION_FULL);
-      break;
-   case TGSI_OPCODE_RSQ:
-      emit_math1(c, BRW_MATH_FUNCTION_RSQ, dst, 
-                 brw_swizzle(args[0], 0,0,0,0), BRW_MATH_PRECISION_FULL);
-      break;
-   case TGSI_OPCODE_SEQ:
-      emit_seq(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_SIN:
-      emit_math1(c, BRW_MATH_FUNCTION_SIN, dst, args[0], BRW_MATH_PRECISION_FULL);
-      break;
-   case TGSI_OPCODE_SNE:
-      emit_sne(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_SGE:
-      emit_sge(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_SGT:
-      emit_sgt(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_SLT:
-      emit_slt(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_SLE:
-      emit_sle(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_SUB:
-      brw_ADD(p, dst, args[0], negate(args[1]));
-      break;
-   case TGSI_OPCODE_TRUNC:
-      /* round toward zero */
-      brw_RNDZ(p, dst, args[0]);
-      break;
-   case TGSI_OPCODE_XPD:
-      emit_xpd(p, dst, args[0], args[1]);
-      break;
-   case TGSI_OPCODE_IF:
-      assert(c->if_depth < MAX_IF_DEPTH);
-      c->if_inst[c->if_depth] = brw_IF(p, BRW_EXECUTE_8);
-      /* Note that brw_IF smashes the predicate_control field. */
-      c->if_inst[c->if_depth]->header.predicate_control = get_predicate(inst);
-      c->if_depth++;
-      break;
-   case TGSI_OPCODE_ELSE:
-      c->if_inst[c->if_depth-1] = brw_ELSE(p, c->if_inst[c->if_depth-1]);
-      break;
-   case TGSI_OPCODE_ENDIF:
-      assert(c->if_depth > 0);
-      brw_ENDIF(p, c->if_inst[--c->if_depth]);
-      break;                   
-   case TGSI_OPCODE_BGNLOOP:
-      c->loop_inst[c->loop_depth++] = brw_DO(p, BRW_EXECUTE_8);
-      break;
-   case TGSI_OPCODE_BRK:
-      brw_set_predicate_control(p, get_predicate(inst));
-      brw_BREAK(p);
-      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-      break;
-   case TGSI_OPCODE_CONT:
-      brw_set_predicate_control(p, get_predicate(inst));
-      brw_CONT(p);
-      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-      break;
-   case TGSI_OPCODE_ENDLOOP: 
-   {
-      struct brw_instruction *inst0, *inst1;
-      GLuint br = 1;
-
-      c->loop_depth--;
-
-      if (brw->gen == 5)
-        br = 2;
-
-      inst0 = inst1 = brw_WHILE(p, c->loop_inst[c->loop_depth]);
-      /* patch all the BREAK/CONT instructions from last BEGINLOOP */
-      while (inst0 > c->loop_inst[c->loop_depth]) {
-        inst0--;
-        if (inst0->header.opcode == TGSI_OPCODE_BRK) {
-           inst0->bits3.if_else.jump_count = br * (inst1 - inst0 + 1);
-           inst0->bits3.if_else.pop_count = 0;
-        }
-        else if (inst0->header.opcode == TGSI_OPCODE_CONT) {
-           inst0->bits3.if_else.jump_count = br * (inst1 - inst0);
-           inst0->bits3.if_else.pop_count = 0;
-        }
-      }
-   }
-   break;
-   case TGSI_OPCODE_BRA:
-      brw_set_predicate_control(p, get_predicate(inst));
-      brw_ADD(p, brw_ip_reg(), brw_ip_reg(), brw_imm_d(1*16));
-      brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-      break;
-   case TGSI_OPCODE_CAL:
-      brw_set_access_mode(p, BRW_ALIGN_1);
-      brw_ADD(p, deref_1d(c->stack_index, 0), brw_ip_reg(), brw_imm_d(3*16));
-      brw_set_access_mode(p, BRW_ALIGN_16);
-      brw_ADD(p, get_addr_reg(c->stack_index),
-             get_addr_reg(c->stack_index), brw_imm_d(4));
-      brw_save_call(p, label, p->nr_insn);
-      brw_ADD(p, brw_ip_reg(), brw_ip_reg(), brw_imm_d(1*16));
-      break;
-   case TGSI_OPCODE_RET:
-      brw_ADD(p, get_addr_reg(c->stack_index),
-             get_addr_reg(c->stack_index), brw_imm_d(-4));
-      brw_set_access_mode(p, BRW_ALIGN_1);
-      brw_MOV(p, brw_ip_reg(), deref_1d(c->stack_index, 0));
-      brw_set_access_mode(p, BRW_ALIGN_16);
-      break;
-   case TGSI_OPCODE_END:       
-      c->end_offset = p->nr_insn;
-      /* this instruction will get patched later to jump past subroutine
-       * code, etc.
-       */
-      brw_ADD(p, brw_ip_reg(), brw_ip_reg(), brw_imm_d(1*16));
-      break;
-   case TGSI_OPCODE_BGNSUB:
-      brw_save_label(p, p->nr_insn, p->nr_insn);
-      break;
-   case TGSI_OPCODE_ENDSUB:
-      /* no-op */
-      break;
-   default:
-      debug_printf("Unsupported opcode %i (%s) in vertex shader",
-                  opcode, 
-                  tgsi_get_opcode_name(opcode));
-   }
-
-   /* Set the predication update on the last instruction of the native
-    * instruction sequence.
-    *
-    * This would be problematic if it was set on a math instruction,
-    * but that shouldn't be the case with the current GLSL compiler.
-    */
-#if 0
-   /* XXX: disabled
-    */
-   if (inst->CondUpdate) {
-      struct brw_instruction *hw_insn = &p->store[p->nr_insn - 1];
-
-      assert(hw_insn->header.destreg__conditionalmod == 0);
-      hw_insn->header.destreg__conditionalmod = BRW_CONDITIONAL_NZ;
-   }
-#endif
-
-   release_tmps(c);
-}
-
-
-/* Emit the vertex program instructions here.
- */
-void brw_vs_emit(struct brw_vs_compile *c)
-{
-   struct brw_compile *p = &c->func;
-   const struct tgsi_token *tokens = c->vp->tokens;
-   struct brw_instruction *end_inst, *last_inst;
-   struct tgsi_parse_context parse;
-   struct tgsi_full_instruction *inst;
-
-   if (BRW_DEBUG & DEBUG_VS)
-      tgsi_dump(c->vp->tokens, 0); 
-
-   c->stack_index = brw_indirect(0, 0);
-
-   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-   brw_set_access_mode(p, BRW_ALIGN_16);
-   
-
-   /* Static register allocation
-    */
-   brw_vs_alloc_regs(c);
-
-   if (c->vp->has_flow_control) {
-      brw_MOV(p, get_addr_reg(c->stack_index), brw_address(c->stack));
-   }
-
-   /* Instructions
-    */
-   tgsi_parse_init( &parse, tokens );
-   while( !tgsi_parse_end_of_tokens( &parse ) ) {
-      tgsi_parse_token( &parse );
-
-      switch( parse.FullToken.Token.Type ) {
-      case TGSI_TOKEN_TYPE_DECLARATION:
-      case TGSI_TOKEN_TYPE_IMMEDIATE:
-        break;
-
-      case TGSI_TOKEN_TYPE_INSTRUCTION:
-         inst = &parse.FullToken.FullInstruction;
-        emit_insn( c, inst );
-         break;
-
-      default:
-         assert( 0 );
-      }
-   }
-   tgsi_parse_free( &parse );
-
-   end_inst = &p->store[c->end_offset];
-   last_inst = &p->store[p->nr_insn];
-
-   /* The END instruction will be patched to jump to this code */
-   emit_vertex_write(c);
-
-   post_vs_emit(c, end_inst, last_inst);
-
-   if (BRW_DEBUG & DEBUG_VS) {
-      debug_printf("vs-native:\n");
-      brw_disasm(stderr, p->store, p->nr_insn, p->brw->gen);
-   }
-}
diff --git a/src/gallium/drivers/i965/brw_vs_state.c b/src/gallium/drivers/i965/brw_vs_state.c
deleted file mode 100644 (file)
index 6d2ccfd..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-            
-#include "util/u_math.h"
-
-
-#include "brw_debug.h"
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_defines.h"
-
-struct brw_vs_unit_key {
-   unsigned int total_grf;
-   unsigned int urb_entry_read_length;
-   unsigned int curb_entry_read_length;
-
-   unsigned int curbe_offset;
-
-   unsigned int nr_urb_entries, urb_size;
-
-   unsigned int nr_surfaces;
-};
-
-static void
-vs_unit_populate_key(struct brw_context *brw, struct brw_vs_unit_key *key)
-{
-   memset(key, 0, sizeof(*key));
-
-   /* CACHE_NEW_VS_PROG */
-   key->total_grf = brw->vs.prog_data->total_grf;
-   key->urb_entry_read_length = brw->vs.prog_data->urb_read_length;
-   key->curb_entry_read_length = brw->vs.prog_data->curb_read_length;
-
-   /* BRW_NEW_URB_FENCE */
-   key->nr_urb_entries = brw->urb.nr_vs_entries;
-   key->urb_size = brw->urb.vsize;
-
-   /* BRW_NEW_NR_VS_SURFACES */
-   key->nr_surfaces = brw->vs.nr_surfaces;
-
-   /* PIPE_NEW_CLIP */
-   if (brw->curr.ucp.nr) {
-      /* Note that we read in the userclip planes as well, hence
-       * clip_start:
-       */
-      key->curbe_offset = brw->curbe.clip_start;
-   }
-   else {
-      key->curbe_offset = brw->curbe.vs_start;
-   }
-}
-
-static enum pipe_error
-vs_unit_create_from_key(struct brw_context *brw, 
-                        struct brw_vs_unit_key *key,
-                        struct brw_winsys_reloc *reloc,
-                        struct brw_winsys_buffer **bo_out)
-{
-   enum pipe_error ret;
-   struct brw_vs_unit_state vs;
-   int chipset_max_threads;
-
-   memset(&vs, 0, sizeof(vs));
-
-   vs.thread0.kernel_start_pointer = 0; /* reloc */
-   vs.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
-   vs.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
-   /* Choosing multiple program flow means that we may get 2-vertex threads,
-    * which will have the channel mask for dwords 4-7 enabled in the thread,
-    * and those dwords will be written to the second URB handle when we
-    * brw_urb_WRITE() results.
-    */
-   vs.thread1.single_program_flow = 0;
-
-   if (brw->gen == 5)
-      vs.thread1.binding_table_entry_count = 0; /* hardware requirement */
-   else
-      vs.thread1.binding_table_entry_count = key->nr_surfaces;
-
-   vs.thread3.urb_entry_read_length = key->urb_entry_read_length;
-   vs.thread3.const_urb_entry_read_length = key->curb_entry_read_length;
-   vs.thread3.dispatch_grf_start_reg = 1;
-   vs.thread3.urb_entry_read_offset = 0;
-   vs.thread3.const_urb_entry_read_offset = key->curbe_offset * 2;
-
-   if (brw->gen == 5)
-       vs.thread4.nr_urb_entries = key->nr_urb_entries >> 2;
-   else
-       vs.thread4.nr_urb_entries = key->nr_urb_entries;
-
-   vs.thread4.urb_entry_allocation_size = key->urb_size - 1;
-
-   if (brw->gen == 5)
-      chipset_max_threads = 72;
-   else if (brw->is_g4x)
-      chipset_max_threads = 32;
-   else
-      chipset_max_threads = 16;
-
-   vs.thread4.max_threads = CLAMP(key->nr_urb_entries / 2,
-                                 1, chipset_max_threads) - 1;
-
-   if (BRW_DEBUG & DEBUG_SINGLE_THREAD)
-      vs.thread4.max_threads = 0;
-
-   /* No samplers for ARB_vp programs:
-    */
-   /* It has to be set to 0 for IGDNG
-    */
-   vs.vs5.sampler_count = 0;
-
-   if (BRW_DEBUG & DEBUG_STATS)
-      vs.thread4.stats_enable = 1;
-
-   /* Vertex program always enabled:
-    */
-   vs.vs6.vs_enable = 1;
-
-   ret = brw_upload_cache(&brw->cache, BRW_VS_UNIT,
-                          key, sizeof(*key),
-                          reloc, 1,
-                          &vs, sizeof(vs),
-                          NULL, NULL,
-                          bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-static int prepare_vs_unit(struct brw_context *brw)
-{
-   struct brw_vs_unit_key key;
-   enum pipe_error ret;
-   struct brw_winsys_reloc reloc[1];
-   unsigned grf_reg_count;
-
-   vs_unit_populate_key(brw, &key);
-
-   grf_reg_count = (align(key.total_grf, 16) / 16 - 1);
-
-   /* Emit VS program relocation */
-   make_reloc(&reloc[0],
-              BRW_USAGE_STATE,
-              grf_reg_count << 1,
-              offsetof(struct brw_vs_unit_state, thread0),
-              brw->vs.prog_bo);
-
-
-   if (brw_search_cache(&brw->cache, BRW_VS_UNIT,
-                        &key, sizeof(key),
-                        reloc, 1,
-                        NULL,
-                        &brw->vs.state_bo))
-      return PIPE_OK;
-
-   ret = vs_unit_create_from_key(brw, &key, reloc, &brw->vs.state_bo);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-const struct brw_tracked_state brw_vs_unit = {
-   .dirty = {
-      .mesa  = (PIPE_NEW_CLIP),
-      .brw   = (BRW_NEW_CURBE_OFFSETS |
-                BRW_NEW_NR_VS_SURFACES |
-               BRW_NEW_URB_FENCE),
-      .cache = CACHE_NEW_VS_PROG
-   },
-   .prepare = prepare_vs_unit,
-};
diff --git a/src/gallium/drivers/i965/brw_vs_surface_state.c b/src/gallium/drivers/i965/brw_vs_surface_state.c
deleted file mode 100644 (file)
index 424bb0d..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_winsys.h"
-
-/* XXX: disabled true constant buffer functionality
- */
-
-
-/* Creates a new VS constant buffer reflecting the current VS program's
- * constants, if needed by the VS program.
- *
- * Otherwise, constants go through the CURBEs using the brw_constant_buffer
- * state atom.
- */
-#if 0
-static struct brw_winsys_buffer *
-brw_vs_update_constant_buffer(struct brw_context *brw)
-{
-   /* XXX: true constant buffers
-    */
-   struct brw_vertex_program *vp =
-      (struct brw_vertex_program *) brw->vertex_program;
-   const struct gl_program_parameter_list *params = vp->program.Base.Parameters;
-   const int size = params->NumParameters * 4 * sizeof(GLfloat);
-   drm_intel_bo *const_buffer;
-
-   /* BRW_NEW_VERTEX_PROGRAM */
-   if (!vp->use_const_buffer)
-      return NULL;
-
-   const_buffer = brw->sws->bo_alloc(brw->sws, 
-                                    BRW_BUFFER_TYPE_SHADER_CONSTANTS,
-                                    size, 64);
-
-   /* _NEW_PROGRAM_CONSTANTS */
-   brw->sws->bo_subdata(const_buffer, 0, size, params->ParameterValues,
-                        NULL, 0);
-
-   return const_buffer;
-}
-#endif
-
-/**
- * Update the surface state for a VS constant buffer.
- *
- * Sets brw->vs.surf_bo[surf] and brw->vp->const_buffer.
- */
-#if 0
-static void
-brw_update_vs_constant_surface( struct brw_context *brw,
-                                GLuint surf)
-{
-   struct brw_surface_key key;
-   struct pipe_resource *cb = brw->curr.vs_constants;
-   enum pipe_error ret;
-
-   assert(surf == 0);
-
-   /* If we're in this state update atom, we need to update VS constants, so
-    * free the old buffer and create a new one for the new contents.
-    */
-   ret = brw_vs_update_constant_buffer(brw, &vp->const_buffer);
-   if (ret)
-      return ret;
-
-   /* If there's no constant buffer, then no surface BO is needed to point at
-    * it.
-    */
-   if (vp->const_buffer == NULL) {
-      bo_reference(brw->vs.surf_bo[surf], NULL);
-      return PIPE_OK;
-   }
-
-   memset(&key, 0, sizeof(key));
-
-   key.format = PIPE_FORMAT_R32G32B32A32_FLOAT;
-   key.bo = vp->const_buffer;
-   key.depthmode = GL_NONE;
-   key.pitch = params->NumParameters;
-   key.width = params->NumParameters;
-   key.height = 1;
-   key.depth = 1;
-   key.cpp = 16;
-
-   /*
-   printf("%s:\n", __FUNCTION__);
-   printf("  width %d  height %d  depth %d  cpp %d  pitch %d\n",
-          key.width, key.height, key.depth, key.cpp, key.pitch);
-   */
-
-   if (brw_search_cache(&brw->surface_cache,
-                        BRW_SS_SURFACE,
-                        &key, sizeof(key),
-                        &key.bo, key.bo ? 1 : 0,
-                        NULL,
-                        &brw->vs.surf_bo[surf]))
-      return PIPE_OK;
-
-   ret = brw_create_constant_surface(brw, &key
-                                     &brw->vs.surf_bo[surf]);
-   if (ret)
-      return ret;
-   
-   return PIPE_OK;
-}
-#endif
-
-
-/**
- * Constructs the binding table for the VS surface state.
- */
-static enum pipe_error
-brw_vs_get_binding_table(struct brw_context *brw,
-                         struct brw_winsys_buffer **bo_out)
-{
-#if 0
-   static GLuint data[BRW_VS_MAX_SURF]; /* always zero */
-   struct brw_winsys_reloc reloc[BRW_VS_MAX_SURF];
-   int i;
-
-   /* Emit binding table relocations to surface state */
-   for (i = 0; i < BRW_VS_MAX_SURF; i++) {
-      make_reloc(&reloc[i],
-                 BRW_USAGE_STATE,
-                 0,
-                 i * 4,
-                 brw->vs.surf_bo[i]);
-   }
-   
-   ret = brw_cache_data( &brw->surface_cache, 
-                         BRW_SS_SURF_BIND,
-                         NULL, 0,
-                         reloc, nr_reloc,
-                         data, sizeof data,
-                         NULL, NULL,
-                         bo_out);
-   if (ret)
-      return ret;
-
-   FREE(data);
-   return PIPE_OK;
-#else
-   return PIPE_OK;
-#endif
-}
-
-/**
- * Vertex shader surfaces (constant buffer).
- *
- * This consumes the state updates for the constant buffer needing
- * to be updated, and produces BRW_NEW_NR_VS_SURFACES for the VS unit and
- * CACHE_NEW_SURF_BIND for the binding table upload.
- */
-static enum pipe_error prepare_vs_surfaces(struct brw_context *brw )
-{
-   enum pipe_error ret;
-
-#if 0
-   int i;
-   int nr_surfaces = 0;
-
-   brw_update_vs_constant_surface(ctx, SURF_INDEX_VERT_CONST_BUFFER);
-
-   for (i = 0; i < BRW_VS_MAX_SURF; i++) {
-      if (brw->vs.surf_bo[i] != NULL) {
-        nr_surfaces = i + 1;
-      }
-   }
-
-   if (brw->vs.nr_surfaces != nr_surfaces) {
-      brw->state.dirty.brw |= BRW_NEW_NR_VS_SURFACES;
-      brw->vs.nr_surfaces = nr_surfaces;
-   }
-#endif
-
-   /* Note that we don't end up updating the bind_bo if we don't have a
-    * surface to be pointing at.  This should be relatively harmless, as it
-    * just slightly increases our working set size.
-    */
-   if (brw->vs.nr_surfaces != 0) {
-      ret = brw_vs_get_binding_table(brw, &brw->vs.bind_bo);
-      if (ret)
-         return ret;
-   }
-
-   return PIPE_OK;
-}
-
-const struct brw_tracked_state brw_vs_surfaces = {
-   .dirty = {
-      .mesa = (PIPE_NEW_VERTEX_CONSTANTS |
-              PIPE_NEW_VERTEX_SHADER),
-      .brw = 0,
-      .cache = 0
-   },
-   .prepare = prepare_vs_surfaces,
-};
-
-
-
diff --git a/src/gallium/drivers/i965/brw_winsys.h b/src/gallium/drivers/i965/brw_winsys.h
deleted file mode 100644 (file)
index 038f6f7..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-/**************************************************************************
- *
- * Copyright © 2009 Jakob Bornecrantz
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef BRW_WINSYS_H
-#define BRW_WINSYS_H
-
-#include "pipe/p_compiler.h"
-#include "pipe/p_defines.h"
-#include "util/u_inlines.h"
-
-struct brw_winsys;
-struct pipe_fence_handle;
-
-/* Not sure why the winsys needs this:
- */
-#define BRW_BATCH_SIZE (32*1024)
-
-struct brw_winsys_screen;
-
-/* Need a tiny bit of information inside the abstract buffer struct:
- */
-struct brw_winsys_buffer {
-   struct pipe_reference reference;
-   struct brw_winsys_screen *sws;
-   unsigned size;
-};
-
-
-/* Should be possible to validate usages above against buffer creation
- * types, below:
- */
-enum brw_buffer_type
-{
-   BRW_BUFFER_TYPE_TEXTURE,
-   BRW_BUFFER_TYPE_SCANOUT,          /**< a texture used for scanning out from */
-   BRW_BUFFER_TYPE_VERTEX,
-   BRW_BUFFER_TYPE_CURBE,
-   BRW_BUFFER_TYPE_QUERY,
-   BRW_BUFFER_TYPE_SHADER_CONSTANTS,
-   BRW_BUFFER_TYPE_SHADER_SCRATCH,
-   BRW_BUFFER_TYPE_BATCH,
-   BRW_BUFFER_TYPE_GENERAL_STATE,
-   BRW_BUFFER_TYPE_SURFACE_STATE,
-   BRW_BUFFER_TYPE_PIXEL,            /* image uploads, pbo's, etc */
-   BRW_BUFFER_TYPE_GENERIC,          /* unknown */
-   BRW_BUFFER_TYPE_MAX               /* Count of possible values */
-};
-
-
-/* Describe the usage of a particular buffer in a relocation.  The DRM
- * winsys will translate these back to GEM read/write domain flags.
- */
-enum brw_buffer_usage {
-   BRW_USAGE_STATE,         /* INSTRUCTION, 0 */
-   BRW_USAGE_QUERY_RESULT,  /* INSTRUCTION, INSTRUCTION */
-   BRW_USAGE_RENDER_TARGET, /* RENDER,      0 */
-   BRW_USAGE_DEPTH_BUFFER,  /* RENDER,      RENDER */
-   BRW_USAGE_BLIT_SOURCE,   /* RENDER,      0 */
-   BRW_USAGE_BLIT_DEST,     /* RENDER,      RENDER */
-   BRW_USAGE_SAMPLER,       /* SAMPLER,     0 */
-   BRW_USAGE_VERTEX,        /* VERTEX,      0 */
-   BRW_USAGE_SCRATCH,       /* 0,           0 */
-   BRW_USAGE_MAX
-};
-
-enum brw_buffer_data_type {
-   BRW_DATA_GS_CC_VP,
-   BRW_DATA_GS_CC_UNIT,
-   BRW_DATA_GS_WM_PROG,
-   BRW_DATA_GS_SAMPLER_DEFAULT_COLOR,
-   BRW_DATA_GS_SAMPLER,
-   BRW_DATA_GS_WM_UNIT,
-   BRW_DATA_GS_SF_PROG,
-   BRW_DATA_GS_SF_VP,
-   BRW_DATA_GS_SF_UNIT,
-   BRW_DATA_GS_VS_UNIT,
-   BRW_DATA_GS_VS_PROG,
-   BRW_DATA_GS_GS_UNIT,
-   BRW_DATA_GS_GS_PROG,
-   BRW_DATA_GS_CLIP_VP,
-   BRW_DATA_GS_CLIP_UNIT,
-   BRW_DATA_GS_CLIP_PROG,
-   BRW_DATA_SS_SURFACE,
-   BRW_DATA_SS_SURF_BIND,
-   BRW_DATA_CONSTANT_BUFFER,
-   BRW_DATA_BATCH_BUFFER,
-   BRW_DATA_OTHER,
-   BRW_DATA_MAX
-};
-
-
-/* Matches the i915_drm definitions:
- */
-#define BRW_TILING_NONE  0
-#define BRW_TILING_X     1
-#define BRW_TILING_Y     2
-
-
-/* Relocations to be applied with subdata in a call to sws->bo_subdata, below.
- *
- * Effectively this encodes:
- *
- *    (unsigned *)(subdata + offset) = bo->offset + delta
- */
-struct brw_winsys_reloc {
-   enum brw_buffer_usage usage; /* debug only */
-   unsigned delta;
-   unsigned offset;
-   struct brw_winsys_buffer *bo;
-};
-
-static INLINE void make_reloc(struct brw_winsys_reloc *reloc,
-                              enum brw_buffer_usage usage,
-                              unsigned delta,
-                              unsigned offset,
-                              struct brw_winsys_buffer *bo)
-{
-   reloc->usage = usage;
-   reloc->delta = delta;
-   reloc->offset = offset;
-   reloc->bo = bo;              /* Note - note taking a reference yet */
-}
-
-
-
-struct brw_winsys_screen {
-
-   unsigned pci_id;
-   int gen;
-   /**
-    * Buffer functions.
-    */
-
-   /*@{*/
-   /**
-    * Create a buffer.
-    */
-   enum pipe_error (*bo_alloc)(struct brw_winsys_screen *sws,
-                               enum brw_buffer_type type,
-                               unsigned size,
-                               unsigned alignment,
-                               struct brw_winsys_buffer **bo_out);
-
-   enum pipe_error (*bo_from_handle)(struct brw_winsys_screen *sws,
-                                     struct winsys_handle *whandle,
-                                     unsigned *stride,
-                                     unsigned *tiling,
-                                     struct brw_winsys_buffer **bo_out);
-
-   enum pipe_error (*bo_get_handle)(struct brw_winsys_buffer *buffer,
-                                    struct winsys_handle *whandle,
-                                    unsigned stride);
-
-   /* Destroy a buffer when our refcount goes to zero:
-    */
-   void (*bo_destroy)(struct brw_winsys_buffer *buffer);
-
-   /* delta -- added to b2->offset, and written into buffer
-    * offset -- location above value is written to within buffer
-    */
-   enum pipe_error (*bo_emit_reloc)(struct brw_winsys_buffer *buffer,
-                                    enum brw_buffer_usage usage,
-                                    unsigned delta,
-                                    unsigned offset,
-                                    struct brw_winsys_buffer *b2);
-
-   enum pipe_error (*bo_exec)(struct brw_winsys_buffer *buffer,
-                              unsigned bytes_used);
-
-   enum pipe_error (*bo_subdata)(struct brw_winsys_buffer *buffer,
-                                 enum brw_buffer_data_type data_type,
-                                 size_t offset,
-                                 size_t size,
-                                 const void *data,
-                                 const struct brw_winsys_reloc *reloc,
-                                 unsigned nr_reloc );
-
-   boolean (*bo_is_busy)(struct brw_winsys_buffer *buffer);
-   boolean (*bo_references)(struct brw_winsys_buffer *a,
-                            struct brw_winsys_buffer *b);
-
-   /* XXX: couldn't this be handled by returning true/false on
-    * bo_emit_reloc?
-    */
-   enum pipe_error (*check_aperture_space)(struct brw_winsys_screen *iws,
-                                           struct brw_winsys_buffer **buffers,
-                                           unsigned count);
-
-   /**
-    * Map a buffer.
-    */
-   void *(*bo_map)(struct brw_winsys_buffer *buffer,
-                   enum brw_buffer_data_type data_type,
-                   unsigned offset,
-                   unsigned length,
-                   boolean write,
-                   boolean discard,
-                   boolean flush_explicit);
-
-   void (*bo_flush_range)(struct brw_winsys_buffer *buffer,
-                          unsigned offset,
-                          unsigned length);
-
-   /**
-    * Unmap a buffer.
-    */
-   void (*bo_unmap)(struct brw_winsys_buffer *buffer);
-   /*@}*/
-
-   
-   /* Wait for buffer to go idle.  Similar to map+unmap, but doesn't
-    * mark buffer contents as dirty.
-    */
-   void (*bo_wait_idle)(struct brw_winsys_buffer *buffer);
-   
-   /**
-    * Destroy the winsys.
-    */
-   void (*destroy)(struct brw_winsys_screen *iws);
-};
-
-static INLINE void *
-bo_map_read(struct brw_winsys_screen *sws, struct brw_winsys_buffer *buf)
-{
-   return sws->bo_map( buf,
-                       BRW_DATA_OTHER,
-                       0, buf->size,
-                       FALSE, FALSE, FALSE );
-}
-
-static INLINE void
-bo_reference(struct brw_winsys_buffer **ptr, struct brw_winsys_buffer *buf)
-{
-   struct brw_winsys_buffer *old_buf = *ptr;
-
-   if (pipe_reference(&(*ptr)->reference, &buf->reference))
-      old_buf->sws->bo_destroy(old_buf);
-
-   *ptr = buf;
-}
-
-
-
-/*************************************************************************
- * Cooperative dumping between winsys and driver.  TODO: make this
- * driver-only by wrapping calls to winsys->bo_subdata().
- */
-
-#ifdef DEBUG
-extern int BRW_DUMP;
-#else
-#define BRW_DUMP 0
-#endif 
-
-#define DUMP_ASM               0x1
-#define DUMP_STATE             0x2
-#define DUMP_BATCH             0x4
-
-void brw_dump_data( unsigned pci_id,
-                   enum brw_buffer_data_type data_type,
-                   unsigned offset,
-                   const void *data,
-                   size_t size, int gen );
-
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_winsys_debug.c b/src/gallium/drivers/i965/brw_winsys_debug.c
deleted file mode 100644 (file)
index b66b1cf..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "brw_winsys.h"
-#include "brw_disasm.h"
-#include "brw_structs_dump.h"
-#include "brw_structs.h"
-#include "intel_decode.h"
-
-
-void brw_dump_data( unsigned pci_id,
-                   enum brw_buffer_data_type data_type,
-                   unsigned offset,
-                   const void *data,
-                   size_t size, int gen )
-{
-   if (BRW_DUMP & DUMP_ASM) {
-      switch (data_type) {
-      case BRW_DATA_GS_WM_PROG:
-      case BRW_DATA_GS_SF_PROG:
-      case BRW_DATA_GS_VS_PROG:
-      case BRW_DATA_GS_GS_PROG:
-      case BRW_DATA_GS_CLIP_PROG:
-         brw_disasm( stderr, (struct brw_instruction *)data, size / sizeof(struct brw_instruction), gen );
-         break;
-      default:
-         break;
-      }
-   }
-
-   if (BRW_DUMP & DUMP_STATE) {
-      switch (data_type) {
-      case BRW_DATA_GS_CC_VP:
-         brw_dump_cc_viewport( data );
-         break;
-      case BRW_DATA_GS_CC_UNIT:
-         brw_dump_cc_unit_state( data );
-         break;
-      case BRW_DATA_GS_SAMPLER_DEFAULT_COLOR:
-         brw_dump_sampler_default_color( data );
-         break;
-      case BRW_DATA_GS_SAMPLER:
-         brw_dump_sampler_state( data );
-         break;
-      case BRW_DATA_GS_WM_UNIT:
-         brw_dump_wm_unit_state( data );
-         break;
-      case BRW_DATA_GS_SF_VP:
-         brw_dump_sf_viewport( data );
-         break;
-      case BRW_DATA_GS_SF_UNIT:
-         brw_dump_sf_unit_state( data );
-         break;
-      case BRW_DATA_GS_VS_UNIT:
-         brw_dump_vs_unit_state( data );
-         break;
-      case BRW_DATA_GS_GS_UNIT:
-         brw_dump_gs_unit_state( data );
-         break;
-      case BRW_DATA_GS_CLIP_VP:
-         brw_dump_clipper_viewport( data );
-         break;
-      case BRW_DATA_GS_CLIP_UNIT:
-         brw_dump_clip_unit_state( data );
-         break;
-      case BRW_DATA_SS_SURFACE:
-         brw_dump_surface_state( data );
-         break;
-      case BRW_DATA_SS_SURF_BIND:
-         break;
-      case BRW_DATA_OTHER:
-         break;
-      case BRW_DATA_CONSTANT_BUFFER:
-         break;
-      default:
-         break;
-      }
-   }
-
-   if (BRW_DUMP & DUMP_BATCH) {
-      switch (data_type) {
-      case BRW_DATA_BATCH_BUFFER:
-         intel_decode(data, size / 4, offset, pci_id, 0);
-         break;
-      default:
-         break;
-      }
-   }
-}
-
diff --git a/src/gallium/drivers/i965/brw_wm.c b/src/gallium/drivers/i965/brw_wm.c
deleted file mode 100644 (file)
index 5d66e61..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-#include "tgsi/tgsi_info.h"
-
-#include "brw_context.h"
-#include "brw_screen.h"
-#include "brw_wm.h"
-#include "brw_state.h"
-#include "brw_debug.h"
-#include "brw_resource.h"
-#include "brw_pipe_rast.h"
-
-
-/** Return number of src args for given instruction */
-GLuint brw_wm_nr_args( GLuint opcode )
-{
-   switch (opcode) {
-   case WM_FRONTFACING:
-   case WM_PIXELXY:
-      return 0;
-   case WM_CINTERP:
-   case WM_WPOSXY:
-   case WM_DELTAXY:
-      return 1;
-   case WM_LINTERP:
-   case WM_PIXELW:
-      return 2;
-   case WM_FB_WRITE:
-   case WM_PINTERP:
-      return 3;
-   case TGSI_OPCODE_TEX:
-   case TGSI_OPCODE_TXP:
-   case TGSI_OPCODE_TXB:
-   case TGSI_OPCODE_TXD:
-      /* sampler arg is held as a field in the instruction, not in an
-       * actual register:
-       */
-      return tgsi_get_opcode_info(opcode)->num_src - 1;
-
-   default:
-      assert(opcode < MAX_OPCODE);
-      return tgsi_get_opcode_info(opcode)->num_src;
-   }
-}
-
-
-GLuint brw_wm_is_scalar_result( GLuint opcode )
-{
-   switch (opcode) {
-   case TGSI_OPCODE_COS:
-   case TGSI_OPCODE_EX2:
-   case TGSI_OPCODE_LG2:
-   case TGSI_OPCODE_POW:
-   case TGSI_OPCODE_RCP:
-   case TGSI_OPCODE_RSQ:
-   case TGSI_OPCODE_SIN:
-   case TGSI_OPCODE_DP3:
-   case TGSI_OPCODE_DP4:
-   case TGSI_OPCODE_DPH:
-   case TGSI_OPCODE_DST:
-      return 1;
-      
-   default:
-      return 0;
-   }
-}
-
-
-/**
- * Do GPU code generation for shaders without flow control.  Shaders
- * without flow control instructions can more readily be analysed for
- * SSA-style optimizations.
- */
-static void
-brw_wm_linear_shader_emit(struct brw_context *brw, struct brw_wm_compile *c)
-{
-   /* Augment fragment program.  Add instructions for pre- and
-    * post-fragment-program tasks such as interpolation and fogging.
-    */
-   brw_wm_pass_fp(c);
-
-   /* Translate to intermediate representation.  Build register usage
-    * chains.
-    */
-   brw_wm_pass0(c);
-
-   /* Dead code removal.
-    */
-   brw_wm_pass1(c);
-
-   /* Register allocation.
-    * Divide by two because we operate on 16 pixels at a time and require
-    * two GRF entries for each logical shader register.
-    */
-   c->grf_limit = BRW_WM_MAX_GRF / 2;
-
-   brw_wm_pass2(c);
-
-   /* how many general-purpose registers are used */
-   c->prog_data.total_grf = c->max_wm_grf;
-
-   /* Scratch space is used for register spilling */
-   if (c->last_scratch) {
-      c->prog_data.total_scratch = c->last_scratch + 0x40;
-   }
-   else {
-      c->prog_data.total_scratch = 0;
-   }
-
-   /* Emit GEN4 code.
-    */
-   brw_wm_emit(c);
-}
-
-
-/**
- * All Mesa program -> GPU code generation goes through this function.
- * Depending on the instructions used (i.e. flow control instructions)
- * we'll use one of two code generators.
- */
-static enum pipe_error do_wm_prog( struct brw_context *brw,
-                                   struct brw_fragment_shader *fp, 
-                                   struct brw_wm_prog_key *key,
-                                   struct brw_winsys_buffer **bo_out)
-{
-   enum pipe_error ret;
-   struct brw_wm_compile *c;
-   const GLuint *program;
-   GLuint program_size;
-
-   if (brw->wm.compile_data == NULL) {
-      brw->wm.compile_data = MALLOC(sizeof(*brw->wm.compile_data));
-      if (!brw->wm.compile_data) 
-         return PIPE_ERROR_OUT_OF_MEMORY;
-   }
-
-   c = brw->wm.compile_data;
-   memset(c, 0, sizeof *c);
-
-   c->key = *key;
-   c->fp = fp;
-   c->env_param = NULL; /*brw->intel.ctx.FragmentProgram.Parameters;*/
-
-   brw_init_compile(brw, &c->func);
-
-   /*
-    * Shader which use GLSL features such as flow control are handled
-    * differently from "simple" shaders.
-    */
-   if (fp->has_flow_control) {
-      c->dispatch_width = 8;
-      /* XXX: GLSL support
-       */
-      exit(1);
-      /* brw_wm_branching_shader_emit(brw, c); */
-   }
-   else {
-      c->dispatch_width = 16;
-      brw_wm_linear_shader_emit(brw, c);
-   }
-
-   if (BRW_DEBUG & DEBUG_WM)
-      debug_printf("\n");
-
-   /* get the program
-    */
-   ret = brw_get_program(&c->func, &program, &program_size);
-   if (ret)
-      return ret;
-
-   ret = brw_upload_cache( &brw->cache, BRW_WM_PROG,
-                           &c->key, sizeof(c->key),
-                           NULL, 0,
-                           program, program_size,
-                           &c->prog_data,
-                           &brw->wm.prog_data,
-                           bo_out );
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-
-static void brw_wm_populate_key( struct brw_context *brw,
-                                struct brw_wm_prog_key *key )
-{
-   unsigned lookup, line_aa;
-   unsigned i;
-
-   memset(key, 0, sizeof(*key));
-
-   /* PIPE_NEW_FRAGMENT_SHADER
-    * PIPE_NEW_DEPTH_STENCIL_ALPHA
-    */
-   lookup = (brw->curr.zstencil->iz_lookup |
-            brw->curr.fragment_shader->iz_lookup);
-
-
-   /* PIPE_NEW_RAST
-    * BRW_NEW_REDUCED_PRIMITIVE 
-    */
-   switch (brw->reduced_primitive) {
-   case PIPE_PRIM_POINTS:
-      line_aa = AA_NEVER;
-      break;
-   case PIPE_PRIM_LINES:
-      line_aa = (brw->curr.rast->templ.line_smooth ? 
-                 AA_ALWAYS : AA_NEVER);
-      break;
-   default:
-      line_aa = brw->curr.rast->unfilled_aa_line;
-      break;
-   }
-        
-   brw_wm_lookup_iz(line_aa,
-                   lookup,
-                   brw->curr.fragment_shader->uses_depth,
-                   key);
-
-   /* PIPE_NEW_RAST */
-   key->flat_shade = brw->curr.rast->templ.flatshade;
-
-
-   /* PIPE_NEW_BOUND_TEXTURES */
-   for (i = 0; i < brw->curr.num_fragment_sampler_views; i++) {
-      const struct brw_texture *tex = brw_texture(brw->curr.fragment_sampler_views[i]->texture);
-        
-      if (tex->b.b.format == PIPE_FORMAT_UYVY)
-        key->yuvtex_mask |= 1 << i;
-
-      if (tex->b.b.format == PIPE_FORMAT_YUYV)
-        key->yuvtex_swap_mask |= 1 << i;
-
-      /* XXX: shadow texture
-       */
-      /* key->shadowtex_mask |= 1<<i; */
-   }
-
-   /* CACHE_NEW_VS_PROG */
-   key->vp_nr_outputs = brw->vs.prog_data->nr_outputs;
-
-   key->nr_cbufs = brw->curr.fb.nr_cbufs;
-
-   key->nr_inputs = brw->curr.fragment_shader->info.num_inputs;
-
-   /* The unique fragment program ID */
-   key->program_string_id = brw->curr.fragment_shader->id;
-}
-
-
-static enum pipe_error brw_prepare_wm_prog(struct brw_context *brw)
-{
-   struct brw_wm_prog_key key;
-   struct brw_fragment_shader *fs = brw->curr.fragment_shader;
-   enum pipe_error ret;
-     
-   brw_wm_populate_key(brw, &key);
-
-   /* Make an early check for the key.
-    */
-   if (brw_search_cache(&brw->cache, BRW_WM_PROG,
-                        &key, sizeof(key),
-                        NULL, 0,
-                        &brw->wm.prog_data,
-                        &brw->wm.prog_bo))
-      return PIPE_OK;
-
-   ret = do_wm_prog(brw, fs, &key, &brw->wm.prog_bo);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-const struct brw_tracked_state brw_wm_prog = {
-   .dirty = {
-      .mesa  = (PIPE_NEW_FRAGMENT_SHADER |
-               PIPE_NEW_DEPTH_STENCIL_ALPHA |
-               PIPE_NEW_RAST |
-               PIPE_NEW_NR_CBUFS |
-               PIPE_NEW_BOUND_TEXTURES),
-      .brw   = (BRW_NEW_WM_INPUT_DIMENSIONS |
-               BRW_NEW_REDUCED_PRIMITIVE),
-      .cache = CACHE_NEW_VS_PROG,
-   },
-   .prepare = brw_prepare_wm_prog
-};
-
diff --git a/src/gallium/drivers/i965/brw_wm.h b/src/gallium/drivers/i965/brw_wm.h
deleted file mode 100644 (file)
index f1ca9f6..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-              
-
-#ifndef BRW_WM_H
-#define BRW_WM_H
-
-#include "brw_context.h"
-#include "brw_eu.h"
-
-#define SATURATE (1<<5)
-
-/* A big lookup table is used to figure out which and how many
- * additional regs will inserted before the main payload in the WM
- * program execution.  These mainly relate to depth and stencil
- * processing and the early-depth-test optimization.
- */
-#define IZ_PS_KILL_ALPHATEST_BIT    0x1
-#define IZ_PS_COMPUTES_DEPTH_BIT    0x2
-#define IZ_DEPTH_WRITE_ENABLE_BIT   0x4
-#define IZ_DEPTH_TEST_ENABLE_BIT    0x8
-#define IZ_STENCIL_WRITE_ENABLE_BIT 0x10
-#define IZ_STENCIL_TEST_ENABLE_BIT  0x20
-#define IZ_BIT_MAX                  0x40
-
-#define AA_NEVER     0
-#define AA_SOMETIMES 1
-#define AA_ALWAYS    2
-
-struct brw_wm_prog_key {
-   GLuint source_depth_reg:3;
-   GLuint aa_dest_stencil_reg:3;
-   GLuint dest_depth_reg:3;
-   GLuint nr_depth_regs:3;
-   GLuint computes_depth:1;
-   GLuint source_depth_to_render_target:1;
-   GLuint flat_shade:1;
-   GLuint runtime_check_aads_emit:1;
-
-   GLuint shadowtex_mask:16;
-   GLuint yuvtex_mask:16;
-   GLuint yuvtex_swap_mask:16; /* UV swaped */
-
-   GLuint vp_nr_outputs:6;
-   GLuint nr_inputs:6;
-   GLuint nr_cbufs:3;
-   GLuint has_flow_control:1;
-
-   GLuint program_string_id;
-};
-
-
-/* A bit of a glossary:
- *
- * brw_wm_value: A computed value or program input.  Values are
- * constant, they are created once and are never modified.  When a
- * fragment program register is written or overwritten, new values are
- * created fresh, preserving the rule that values are constant.
- *
- * brw_wm_ref: A reference to a value.  Wherever a value used is by an
- * instruction or as a program output, that is tracked with an
- * instance of this struct.  All references to a value occur after it
- * is created.  After the last reference, a value is dead and can be
- * discarded.
- *
- * brw_wm_grf: Represents a physical hardware register.  May be either
- * empty or hold a value.  Register allocation is the process of
- * assigning values to grf registers.  This occurs in pass2 and the
- * brw_wm_grf struct is not used before that.
- *
- * Fragment program registers: These are time-varying constructs that
- * are hard to reason about and which we translate away in pass0.  A
- * single fragment program register element (eg. temp[0].x) will be
- * translated to one or more brw_wm_value structs, one for each time
- * that temp[0].x is written to during the program. 
- */
-
-
-
-/* Used in pass2 to track register allocation.
- */
-struct brw_wm_grf {
-   struct brw_wm_value *value;
-   GLuint nextuse;
-};
-
-struct brw_wm_value {
-   struct brw_reg hw_reg;      /* emitted to this reg, may not always be there */
-   struct brw_wm_ref *lastuse;
-   struct brw_wm_grf *resident; 
-   GLuint contributes_to_output:1;
-   GLuint spill_slot:16;       /* if non-zero, spill immediately after calculation */
-};
-
-struct brw_wm_ref {
-   struct brw_reg hw_reg;      /* nr filled in in pass2, everything else, pass0 */
-   struct brw_wm_value *value;
-   struct brw_wm_ref *prevuse;
-   GLuint unspill_reg:7;       /* unspill to reg */
-   GLuint emitted:1;
-   GLuint insn:24;
-};
-
-struct brw_wm_instruction {
-   struct brw_wm_value *dst[4];
-   struct brw_wm_ref *src[3][4];
-   GLuint opcode:8;
-   GLuint saturate:1;
-   GLuint writemask:4;
-   GLuint sampler:4;
-   GLuint tex_unit:4;   /* texture/sampler unit for texture instructions */
-   GLuint target:4;     /* TGSI_TEXTURE_x for texture instructions,
-                         * target binding table index for FB_WRITE
-                         */
-   GLuint eot:1;       /* End of thread indicator for FB_WRITE*/
-};
-
-
-#define BRW_WM_MAX_INSN  2048
-#define BRW_WM_MAX_GRF   128           /* hardware limit */
-#define BRW_WM_MAX_VREG  (BRW_WM_MAX_INSN * 4)
-#define BRW_WM_MAX_REF   (BRW_WM_MAX_INSN * 12)
-#define BRW_WM_MAX_PARAM 256
-#define BRW_WM_MAX_CONST 256
-#define BRW_WM_MAX_KILLS MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS
-#define BRW_WM_MAX_SUBROUTINE 16
-
-
-/* New opcodes to track internal operations required for WM unit.
- * These are added early so that the registers used can be tracked,
- * freed and reused like those of other instructions.
- */
-#define MAX_OPCODE        TGSI_OPCODE_LAST
-#define WM_PIXELXY        (MAX_OPCODE)
-#define WM_DELTAXY        (MAX_OPCODE + 1)
-#define WM_PIXELW         (MAX_OPCODE + 2)
-#define WM_LINTERP        (MAX_OPCODE + 3)
-#define WM_PINTERP        (MAX_OPCODE + 4)
-#define WM_CINTERP        (MAX_OPCODE + 5)
-#define WM_WPOSXY         (MAX_OPCODE + 6)
-#define WM_FB_WRITE       (MAX_OPCODE + 7)
-#define WM_FRONTFACING    (MAX_OPCODE + 8)
-#define MAX_WM_OPCODE     (MAX_OPCODE + 9)
-
-#define BRW_FILE_PAYLOAD   (TGSI_FILE_COUNT)
-#define PAYLOAD_DEPTH      (PIPE_MAX_SHADER_INPUTS) /* ?? */
-
-#define X    0
-#define Y    1
-#define Z    2
-#define W    3
-
-
-struct brw_fp_src {
-   unsigned file:4;
-   unsigned index:16;
-   unsigned swizzle:8;
-   unsigned indirect:1;
-   unsigned negate:1;
-   unsigned abs:1;
-};
-
-struct brw_fp_dst {
-   unsigned file:4;
-   unsigned index:16;
-   unsigned writemask:4;
-   unsigned indirect:1;
-   unsigned saturate:1;
-};
-
-struct brw_fp_instruction {
-   struct brw_fp_dst dst;
-   struct brw_fp_src src[3];
-   unsigned opcode:8;
-   unsigned target:8; /* XXX: special usage for FB_WRITE */
-   unsigned tex_unit:4;
-   unsigned sampler:4;
-   unsigned pad:8;
-};
-
-
-struct brw_wm_compile {
-   struct brw_compile func;
-   struct brw_wm_prog_key key;
-   struct brw_wm_prog_data prog_data;
-
-   struct brw_fragment_shader *fp;
-
-   GLfloat (*env_param)[4];
-
-   enum {
-      START,
-      PASS2_DONE
-   } state;
-
-   /* Initial pass - translate fp instructions to fp instructions,
-    * simplifying and adding instructions for interpolation and
-    * framebuffer writes.
-    */
-   struct {
-      GLfloat v[4];
-      unsigned nr;
-   } immediate[BRW_WM_MAX_CONST+3];
-   GLuint nr_immediates;
-   
-   struct brw_fp_instruction fp_instructions[BRW_WM_MAX_INSN];
-   GLuint nr_fp_insns;
-   GLuint fp_temp;
-   GLuint fp_interp_emitted;
-   GLuint fp_fragcolor_emitted;
-   GLuint fp_first_internal_temp;
-
-   struct brw_fp_src fp_pixel_xy;
-   struct brw_fp_src fp_delta_xy;
-   struct brw_fp_src fp_pixel_w;
-
-
-   /* Subsequent passes using SSA representation:
-    */
-   struct brw_wm_value vreg[BRW_WM_MAX_VREG];
-   GLuint nr_vreg;
-
-   struct brw_wm_value creg[BRW_WM_MAX_PARAM];
-   GLuint nr_creg;
-
-   struct {
-      struct brw_wm_value depth[4]; /* includes r0/r1 */
-      struct brw_wm_value input_interp[PIPE_MAX_SHADER_INPUTS];
-   } payload;
-
-
-   const struct brw_wm_ref *pass0_fp_reg[BRW_FILE_PAYLOAD+1][256][4];
-
-   struct brw_wm_ref undef_ref;
-   struct brw_wm_value undef_value;
-
-   struct brw_wm_ref refs[BRW_WM_MAX_REF];
-   GLuint nr_refs;
-
-   struct brw_wm_instruction instruction[BRW_WM_MAX_INSN];
-   GLuint nr_insns;
-
-   struct brw_wm_grf pass2_grf[BRW_WM_MAX_GRF/2];
-
-   GLuint grf_limit;
-   GLuint max_wm_grf;
-   GLuint last_scratch;
-
-   GLuint cur_inst;  /**< index of current instruction */
-
-   GLboolean out_of_regs;  /**< ran out of GRF registers? */
-
-   /** Mapping from Mesa registers to hardware registers */
-   struct {
-      GLboolean inited;
-      struct brw_reg reg;
-   } wm_regs[BRW_FILE_PAYLOAD+1][256][4];
-
-   GLboolean used_grf[BRW_WM_MAX_GRF];
-   GLuint first_free_grf;
-   struct brw_reg stack;
-   struct brw_reg emit_mask_reg;
-   GLuint tmp_regs[BRW_WM_MAX_GRF];
-   GLuint tmp_index;
-   GLuint tmp_max;
-   GLuint subroutines[BRW_WM_MAX_SUBROUTINE];
-   GLuint dispatch_width;
-
-   /** we may need up to 3 constants per instruction (if use_const_buffer) */
-   struct {
-      GLint index;
-      struct brw_reg reg;
-   } current_const[3];
-
-   GLuint error;
-};
-
-
-GLuint brw_wm_nr_args( GLuint opcode );
-GLuint brw_wm_is_scalar_result( GLuint opcode );
-
-int brw_wm_pass_fp( struct brw_wm_compile *c );
-void brw_wm_pass0( struct brw_wm_compile *c );
-void brw_wm_pass1( struct brw_wm_compile *c );
-void brw_wm_pass2( struct brw_wm_compile *c );
-void brw_wm_emit( struct brw_wm_compile *c );
-
-void brw_wm_print_value( struct brw_wm_compile *c,
-                        struct brw_wm_value *value );
-
-void brw_wm_print_ref( struct brw_wm_compile *c,
-                      struct brw_wm_ref *ref );
-
-void brw_wm_print_insn( struct brw_wm_compile *c,
-                       struct brw_wm_instruction *inst );
-
-void brw_wm_print_program( struct brw_wm_compile *c,
-                          const char *stage );
-
-void brw_wm_print_fp_program( struct brw_wm_compile *c,
-                              const char *stage );
-
-void brw_wm_lookup_iz( GLuint line_aa,
-                      GLuint lookup,
-                      GLboolean ps_uses_depth,
-                      struct brw_wm_prog_key *key );
-
-void brw_wm_branching_shader_emit(struct brw_context *brw, struct brw_wm_compile *c);
-
-void emit_ddxy(struct brw_compile *p,
-              const struct brw_reg *dst,
-              GLuint mask,
-              GLboolean is_ddx,
-              const struct brw_reg *arg0);
-
-#endif
diff --git a/src/gallium/drivers/i965/brw_wm_constant_buffer.c b/src/gallium/drivers/i965/brw_wm_constant_buffer.c
deleted file mode 100644 (file)
index df5cd03..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/* XXX: Constant buffers disabled
- */
-
-
-/**
- * Create the constant buffer surface.  Vertex/fragment shader constants will be
- * read from this buffer with Data Port Read instructions/messages.
- */
-enum pipe_error
-brw_create_constant_surface( struct brw_context *brw,
-                             struct brw_surface_key *key,
-                             struct brw_winsys_buffer **bo_out )
-{
-   const GLint w = key->width - 1;
-   struct brw_winsys_buffer *bo;
-   struct brw_winsys_reloc reloc[1];
-   enum pipe_error ret;
-
-      /* Emit relocation to surface contents */
-   make_reloc(&reloc[0],
-              BRW_USAGE_SAMPLER,
-              0,
-              offsetof(struct brw_surface_state, ss1),
-              key->bo);
-
-   
-   memset(&surf, 0, sizeof(surf));
-
-   surf.ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
-   surf.ss0.surface_type = BRW_SURFACE_BUFFER;
-   surf.ss0.surface_format = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT;
-
-   surf.ss1.base_addr = 0; /* reloc */
-
-   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 = (key->pitch * key->cpp) - 1; /* ignored?? */
-   brw_set_surface_tiling(&surf, key->tiling); /* tiling now allowed */
-   ret = brw_upload_cache(&brw->surface_cache, BRW_SS_SURFACE,
-                          key, sizeof(*key),
-                          reloc, Elements(reloc),
-                          &surf, sizeof(surf),
-                          NULL, NULL,
-                          &bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-
-/**
- * Update the surface state for a WM constant buffer.
- * The constant buffer will be (re)allocated here if needed.
- */
-static enum pipe_error
-brw_update_wm_constant_surface( struct brw_context *brw,
-                                GLuint surf)
-{
-   struct brw_surface_key key;
-   struct brw_fragment_shader *fp = brw->curr.fragment_shader;
-   struct pipe_resource *cbuf = brw->curr.fragment_constants;
-   int pitch = cbuf->size / (4 * sizeof(float));
-   enum pipe_error ret;
-
-   /* If we're in this state update atom, we need to update WM constants, so
-    * free the old buffer and create a new one for the new contents.
-    */
-   ret = brw_wm_update_constant_buffer(brw, &fp->const_buffer);
-   if (ret)
-      return ret;
-
-   /* If there's no constant buffer, then no surface BO is needed to point at
-    * it.
-    */
-   if (cbuf == NULL) {
-      bo_reference(&brw->wm.surf_bo[surf], NULL);
-      return PIPE_OK;
-   }
-
-   memset(&key, 0, sizeof(key));
-
-   key.ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
-   key.ss0.surface_type = BRW_SURFACE_BUFFER;
-   key.ss0.surface_format = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT;
-
-   key.bo = brw_buffer(cbuf)->bo;
-
-   key.ss2.width = (pitch-1) & 0x7f;            /* bits 6:0 of size or width */
-   key.ss2.height = ((pitch-1) >> 7) & 0x1fff;  /* bits 19:7 of size or width */
-   key.ss3.depth = ((pitch-1) >> 20) & 0x7f;    /* bits 26:20 of size or width */
-   key.ss3.pitch = (pitch * 4 * sizeof(float)) - 1; /* ignored?? */
-   brw_set_surface_tiling(&surf, key->tiling); /* tiling now allowed */
-
-
-   /*
-   printf("%s:\n", __FUNCTION__);
-   printf("  width %d  height %d  depth %d  cpp %d  pitch %d\n",
-          key.width, key.height, key.depth, key.cpp, key.pitch);
-   */
-
-   if (brw_search_cache(&brw->surface_cache,
-                        BRW_SS_SURFACE,
-                        &key, sizeof(key),
-                        &key.bo, 1,
-                        NULL,
-                        &brw->wm.surf_bo[surf]))
-      return PIPE_OK;
-
-   ret = brw_create_constant_surface(brw, &key, &brw->wm.surf_bo[surf]);
-   if (ret)
-      return ret;
-
-   brw->state.dirty.brw |= BRW_NEW_WM_SURFACES;
-   return PIPE_OK;
-}
-
-/**
- * Updates surface / buffer for fragment shader constant buffer, if
- * one is required.
- *
- * This consumes the state updates for the constant buffer, and produces
- * BRW_NEW_WM_SURFACES to get picked up by brw_prepare_wm_surfaces for
- * inclusion in the binding table.
- */
-static enum pipe_error prepare_wm_constant_surface(struct brw_context *brw )
-{
-   struct brw_fragment_program *fp =
-      (struct brw_fragment_program *) brw->fragment_program;
-   GLuint surf = SURF_INDEX_FRAG_CONST_BUFFER;
-
-   ret = brw_wm_update_constant_buffer(brw,
-                                       &fp->const_buffer);
-   if (ret)
-      return ret;
-
-   /* If there's no constant buffer, then no surface BO is needed to point at
-    * it.
-    */
-   if (fp->const_buffer == 0) {
-      if (brw->wm.surf_bo[surf] != NULL) {
-        bo_reference(&brw->wm.surf_bo[surf], NULL);
-        brw->state.dirty.brw |= BRW_NEW_WM_SURFACES;
-      }
-      return PIPE_OK;
-   }
-
-   ret = brw_update_wm_constant_surface(ctx, surf);
-   if (ret)
-      return ret;
-
-   return PIPE_OK
-}
-
-const struct brw_tracked_state brw_wm_constant_surface = {
-   .dirty = {
-      .mesa = (_NEW_PROGRAM_CONSTANTS),
-      .brw = (BRW_NEW_FRAGMENT_PROGRAM),
-      .cache = 0
-   },
-   .prepare = prepare_wm_constant_surface,
-};
diff --git a/src/gallium/drivers/i965/brw_wm_debug.c b/src/gallium/drivers/i965/brw_wm_debug.c
deleted file mode 100644 (file)
index 1b2aa93..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "tgsi/tgsi_info.h"
-
-#include "brw_context.h"
-#include "brw_wm.h"
-
-static void print_writemask( unsigned writemask )
-{
-   if (writemask != BRW_WRITEMASK_XYZW)
-      debug_printf(".%s%s%s%s", 
-                  (writemask & BRW_WRITEMASK_X) ? "x" : "",
-                  (writemask & BRW_WRITEMASK_Y) ? "y" : "",
-                  (writemask & BRW_WRITEMASK_Z) ? "z" : "",
-                  (writemask & BRW_WRITEMASK_W) ? "w" : "");
-}
-
-static void print_swizzle( unsigned swizzle )
-{
-   char *swz = "xyzw";
-   if (swizzle != BRW_SWIZZLE_XYZW)
-      debug_printf(".%c%c%c%c", 
-                  swz[BRW_GET_SWZ(swizzle, X)],
-                  swz[BRW_GET_SWZ(swizzle, Y)],
-                  swz[BRW_GET_SWZ(swizzle, Z)],
-                  swz[BRW_GET_SWZ(swizzle, W)]);
-}
-
-static void print_opcode( unsigned opcode )
-{
-   switch (opcode) {
-   case WM_PIXELXY:
-      debug_printf("PIXELXY");
-      break;
-   case WM_DELTAXY:
-      debug_printf("DELTAXY");
-      break;
-   case WM_PIXELW:
-      debug_printf("PIXELW");
-      break;
-   case WM_WPOSXY:
-      debug_printf("WPOSXY");
-      break;
-   case WM_PINTERP:
-      debug_printf("PINTERP");
-      break;
-   case WM_LINTERP:
-      debug_printf("LINTERP");
-      break;
-   case WM_CINTERP:
-      debug_printf("CINTERP");
-      break;
-   case WM_FB_WRITE:
-      debug_printf("FB_WRITE");
-      break;
-   case WM_FRONTFACING:
-      debug_printf("FRONTFACING");
-      break;
-   default:
-      debug_printf("%s", tgsi_get_opcode_info(opcode)->mnemonic);
-      break;
-   }
-}
-
-void brw_wm_print_value( struct brw_wm_compile *c,
-                      struct brw_wm_value *value )
-{
-   assert(value);
-   if (c->state >= PASS2_DONE) 
-      brw_print_reg(value->hw_reg);
-   else if( value == &c->undef_value )
-      debug_printf("undef");
-   else if( value - c->vreg >= 0 &&
-           value - c->vreg < BRW_WM_MAX_VREG)
-      debug_printf("r%ld", (long) (value - c->vreg));
-   else if (value - c->creg >= 0 &&
-           value - c->creg < BRW_WM_MAX_PARAM)
-      debug_printf("c%ld", (long) (value - c->creg));
-   else if (value - c->payload.input_interp >= 0 &&
-           value - c->payload.input_interp < PIPE_MAX_SHADER_INPUTS)
-      debug_printf("i%ld", (long) (value - c->payload.input_interp));
-   else if (value - c->payload.depth >= 0 &&
-           value - c->payload.depth < PIPE_MAX_SHADER_INPUTS)
-      debug_printf("d%ld", (long) (value - c->payload.depth));
-   else 
-      debug_printf("?");
-}
-
-void brw_wm_print_ref( struct brw_wm_compile *c,
-                      struct brw_wm_ref *ref )
-{
-   struct brw_reg hw_reg = ref->hw_reg;
-
-   if (ref->unspill_reg)
-      debug_printf("UNSPILL(%x)/", ref->value->spill_slot);
-
-   if (c->state >= PASS2_DONE)
-      brw_print_reg(ref->hw_reg);
-   else {
-      debug_printf("%s", hw_reg.negate ? "-" : "");
-      debug_printf("%s", hw_reg.abs ? "abs/" : "");
-      brw_wm_print_value(c, ref->value);
-      if ((hw_reg.nr&1) || hw_reg.subnr) {
-        debug_printf("->%d.%d", (hw_reg.nr&1), hw_reg.subnr);
-      }
-   }
-}
-
-void brw_wm_print_insn( struct brw_wm_compile *c,
-                       struct brw_wm_instruction *inst )
-{
-   GLuint i, arg;
-   GLuint nr_args = brw_wm_nr_args(inst->opcode);
-
-   debug_printf("[");
-   for (i = 0; i < 4; i++) {
-      if (inst->dst[i]) {
-        brw_wm_print_value(c, inst->dst[i]);
-        if (inst->dst[i]->spill_slot)
-           debug_printf("/SPILL(%x)",inst->dst[i]->spill_slot);
-      }
-      else
-        debug_printf("#");
-      if (i < 3)      
-        debug_printf(",");
-   }
-   debug_printf("]");
-   print_writemask(inst->writemask);
-   
-   debug_printf(" = ");
-   print_opcode(inst->opcode);
-  
-   if (inst->saturate)
-      debug_printf("_SAT");
-
-   for (arg = 0; arg < nr_args; arg++) {
-
-      debug_printf(" [");
-
-      for (i = 0; i < 4; i++) {
-        if (inst->src[arg][i]) {
-           brw_wm_print_ref(c, inst->src[arg][i]);
-        }
-        else
-           debug_printf("%%");
-
-        if (i < 3) 
-           debug_printf(",");
-        else
-           debug_printf("]");
-      }
-   }
-   debug_printf("\n");
-}
-
-void brw_wm_print_program( struct brw_wm_compile *c,
-                          const char *stage )
-{
-   GLuint insn;
-
-   debug_printf("%s:\n", stage);
-   for (insn = 0; insn < c->nr_insns; insn++)
-      brw_wm_print_insn(c, &c->instruction[insn]);
-   debug_printf("\n");
-}
-
-static const char *file_strings[TGSI_FILE_COUNT+1] = {
-   "NULL",
-   "CONST",
-   "IN",
-   "OUT",
-   "TEMP",
-   "SAMPLER",
-   "ADDR",
-   "IMM",
-   "PRED",
-   "SV",
-   "PAYLOAD"
-};
-
-static void brw_wm_print_fp_insn( struct brw_wm_compile *c,
-                                  struct brw_fp_instruction *inst )
-{
-   GLuint i;
-   GLuint nr_args = brw_wm_nr_args(inst->opcode);
-
-   print_opcode(inst->opcode);
-   if (inst->dst.saturate)
-      debug_printf("_SAT");
-   debug_printf(" ");
-
-   if (inst->dst.indirect)
-      debug_printf("[");
-
-   debug_printf("%s[%d]",
-                file_strings[inst->dst.file],
-                inst->dst.index );
-   print_writemask(inst->dst.writemask);
-
-   if (inst->dst.indirect)
-      debug_printf("]");
-
-   debug_printf(nr_args ? ", " : "\n");
-   
-   for (i = 0; i < nr_args; i++) {
-      debug_printf("%s%s%s[%d]%s",
-                   inst->src[i].negate ? "-" : "",
-                   inst->src[i].abs ? "ABS(" : "",
-                   file_strings[inst->src[i].file],
-                   inst->src[i].index,
-                   inst->src[i].abs ? ")" : "");
-      print_swizzle(inst->src[i].swizzle);
-      debug_printf("%s", i == nr_args - 1 ? "\n" : ", ");
-   }
-}
-
-
-void brw_wm_print_fp_program( struct brw_wm_compile *c,
-                              const char *stage )
-{
-   GLuint insn;
-
-   debug_printf("%s:\n", stage);
-   for (insn = 0; insn < c->nr_fp_insns; insn++)
-      brw_wm_print_fp_insn(c, &c->fp_instructions[insn]);
-   debug_printf("\n");
-}
-
diff --git a/src/gallium/drivers/i965/brw_wm_emit.c b/src/gallium/drivers/i965/brw_wm_emit.c
deleted file mode 100644 (file)
index 6301062..0000000
+++ /dev/null
@@ -1,1521 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "util/u_math.h"
-#include "tgsi/tgsi_info.h"
-
-#include "brw_context.h"
-#include "brw_wm.h"
-#include "brw_debug.h"
-#include "brw_disasm.h"
-
-/* Not quite sure how correct this is - need to understand horiz
- * vs. vertical strides a little better.
- */
-static INLINE struct brw_reg sechalf( struct brw_reg reg )
-{
-   if (reg.vstride)
-      reg.nr++;
-   return reg;
-}
-
-/* Payload R0:
- *
- * R0.0 -- pixel mask, one bit for each of 4 pixels in 4 quads,
- *         corresponding to each of the 16 execution channels.
- * R0.1..8 -- ?
- * R1.0 -- triangle vertex 0.X
- * R1.1 -- triangle vertex 0.Y
- * R1.2 -- quad 0 x,y coords (2 packed uwords)
- * R1.3 -- quad 1 x,y coords (2 packed uwords)
- * R1.4 -- quad 2 x,y coords (2 packed uwords)
- * R1.5 -- quad 3 x,y coords (2 packed uwords)
- * R1.6 -- ?
- * R1.7 -- ?
- * R1.8 -- ?
- */
-
-
-static void emit_pixel_xy(struct brw_compile *p,
-                         const struct brw_reg *dst,
-                         GLuint mask)
-{
-   struct brw_reg r1 = brw_vec1_grf(1, 0);
-   struct brw_reg r1_uw = retype(r1, BRW_REGISTER_TYPE_UW);
-
-   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-
-   /* Calculate pixel centers by adding 1 or 0 to each of the
-    * micro-tile coordinates passed in r1.
-    */
-   if (mask & BRW_WRITEMASK_X) {
-      brw_ADD(p,
-             vec16(retype(dst[0], BRW_REGISTER_TYPE_UW)),
-             stride(suboffset(r1_uw, 4), 2, 4, 0),
-             brw_imm_v(0x10101010));
-   }
-
-   if (mask & BRW_WRITEMASK_Y) {
-      brw_ADD(p,
-             vec16(retype(dst[1], BRW_REGISTER_TYPE_UW)),
-             stride(suboffset(r1_uw,5), 2, 4, 0),
-             brw_imm_v(0x11001100));
-   }
-
-   brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED);
-}
-
-
-
-static void emit_delta_xy(struct brw_compile *p,
-                         const struct brw_reg *dst,
-                         GLuint mask,
-                         const struct brw_reg *arg0)
-{
-   struct brw_reg r1 = brw_vec1_grf(1, 0);
-
-   /* Calc delta X,Y by subtracting origin in r1 from the pixel
-    * centers.
-    */
-   if (mask & BRW_WRITEMASK_X) {
-      brw_ADD(p,
-             dst[0],
-             retype(arg0[0], BRW_REGISTER_TYPE_UW),
-             negate(r1));
-   }
-
-   if (mask & BRW_WRITEMASK_Y) {
-      brw_ADD(p,
-             dst[1],
-             retype(arg0[1], BRW_REGISTER_TYPE_UW),
-             negate(suboffset(r1,1)));
-
-   }
-}
-
-static void emit_wpos_xy(struct brw_wm_compile *c,
-                        const struct brw_reg *dst,
-                        GLuint mask,
-                        const struct brw_reg *arg0)
-{
-   struct brw_compile *p = &c->func;
-
-   if (mask & BRW_WRITEMASK_X) {
-      /* X' = X */
-      brw_MOV(p,
-             dst[0],
-             retype(arg0[0], BRW_REGISTER_TYPE_W));
-   }
-
-   /* XXX: is this needed any more, or is this a NOOP?
-    */
-   if (mask & BRW_WRITEMASK_Y) {
-#if 0
-      /* Y' = height - 1 - Y */
-      brw_ADD(p,
-             dst[1],
-             negate(retype(arg0[1], BRW_REGISTER_TYPE_W)),
-             brw_imm_d(c->key.drawable_height - 1));
-#else
-      brw_MOV(p,
-             dst[0],
-             retype(arg0[0], BRW_REGISTER_TYPE_W));
-#endif
-   }
-}
-
-
-static void emit_pixel_w( struct brw_compile *p,
-                         const struct brw_reg *dst,
-                         GLuint mask,
-                         const struct brw_reg *arg0,
-                         const struct brw_reg *deltas)
-{
-   /* Don't need this if all you are doing is interpolating color, for
-    * instance.
-    */
-   if (mask & BRW_WRITEMASK_W) {      
-      struct brw_reg interp3 = brw_vec1_grf(arg0[0].nr+1, 4);
-
-      /* Calc 1/w - just linterp wpos[3] optimized by putting the
-       * result straight into a message reg.
-       */
-      brw_LINE(p, brw_null_reg(), interp3, deltas[0]);
-      brw_MAC(p, brw_message_reg(2), suboffset(interp3, 1), deltas[1]);
-
-      /* Calc w */
-      brw_math_16( p, dst[3],
-                  BRW_MATH_FUNCTION_INV,
-                  BRW_MATH_SATURATE_NONE,
-                  2, brw_null_reg(),
-                  BRW_MATH_PRECISION_FULL);
-   }
-}
-
-
-
-static void emit_linterp( struct brw_compile *p, 
-                        const struct brw_reg *dst,
-                        GLuint mask,
-                        const struct brw_reg *arg0,
-                        const struct brw_reg *deltas )
-{
-   struct brw_reg interp[4];
-   GLuint nr = arg0[0].nr;
-   GLuint i;
-
-   interp[0] = brw_vec1_grf(nr, 0);
-   interp[1] = brw_vec1_grf(nr, 4);
-   interp[2] = brw_vec1_grf(nr+1, 0);
-   interp[3] = brw_vec1_grf(nr+1, 4);
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-        brw_LINE(p, brw_null_reg(), interp[i], deltas[0]);
-        brw_MAC(p, dst[i], suboffset(interp[i],1), deltas[1]);
-      }
-   }
-}
-
-
-static void emit_pinterp( struct brw_compile *p, 
-                         const struct brw_reg *dst,
-                         GLuint mask,
-                         const struct brw_reg *arg0,
-                         const struct brw_reg *deltas,
-                         const struct brw_reg *w)
-{
-   struct brw_reg interp[4];
-   GLuint nr = arg0[0].nr;
-   GLuint i;
-
-   interp[0] = brw_vec1_grf(nr, 0);
-   interp[1] = brw_vec1_grf(nr, 4);
-   interp[2] = brw_vec1_grf(nr+1, 0);
-   interp[3] = brw_vec1_grf(nr+1, 4);
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-        brw_LINE(p, brw_null_reg(), interp[i], deltas[0]);
-        brw_MAC(p, dst[i], suboffset(interp[i],1), deltas[1]);
-      }
-   }
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-        brw_MUL(p, dst[i], dst[i], w[3]);
-      }
-   }
-}
-
-
-static void emit_cinterp( struct brw_compile *p, 
-                        const struct brw_reg *dst,
-                        GLuint mask,
-                        const struct brw_reg *arg0 )
-{
-   struct brw_reg interp[4];
-   GLuint nr = arg0[0].nr;
-   GLuint i;
-
-   interp[0] = brw_vec1_grf(nr, 0);
-   interp[1] = brw_vec1_grf(nr, 4);
-   interp[2] = brw_vec1_grf(nr+1, 0);
-   interp[3] = brw_vec1_grf(nr+1, 4);
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-         brw_MOV(p, dst[i], suboffset(interp[i],3));   /* TODO: optimize away like other moves */
-      }
-   }
-}
-
-/* Sets the destination channels to 1.0 or 0.0 according to glFrontFacing. */
-static void emit_frontfacing( struct brw_compile *p,
-                             const struct brw_reg *dst,
-                             GLuint mask )
-{
-   struct brw_reg r1_6ud = retype(brw_vec1_grf(1, 6), BRW_REGISTER_TYPE_UD);
-   GLuint i;
-
-   if (!(mask & BRW_WRITEMASK_XYZW))
-      return;
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-        brw_MOV(p, dst[i], brw_imm_f(0.0));
-      }
-   }
-
-   /* bit 31 is "primitive is back face", so checking < (1 << 31) gives
-    * us front face
-    */
-   brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, r1_6ud, brw_imm_ud(1 << 31));
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-        brw_MOV(p, dst[i], brw_imm_f(1.0));
-      }
-   }
-   brw_set_predicate_control_flag_value(p, 0xff);
-}
-
-/* For OPCODE_DDX and OPCODE_DDY, per channel of output we've got input
- * looking like:
- *
- * arg0: q0.tl q0.tr q0.bl q0.br q1.tl q1.tr q1.bl q1.br
- *
- * and we're trying to produce:
- *
- *           DDX                     DDY
- * dst: (q0.tr - q0.tl)     (q0.tl - q0.bl)
- *      (q0.tr - q0.tl)     (q0.tr - q0.br)
- *      (q0.br - q0.bl)     (q0.tl - q0.bl)
- *      (q0.br - q0.bl)     (q0.tr - q0.br)
- *      (q1.tr - q1.tl)     (q1.tl - q1.bl)
- *      (q1.tr - q1.tl)     (q1.tr - q1.br)
- *      (q1.br - q1.bl)     (q1.tl - q1.bl)
- *      (q1.br - q1.bl)     (q1.tr - q1.br)
- *
- * and add two more quads if in 16-pixel dispatch mode.
- *
- * For DDX, it ends up being easy: width = 2, horiz=0 gets us the same result
- * for each pair, and vertstride = 2 jumps us 2 elements after processing a
- * pair. But for DDY, it's harder, as we want to produce the pairs swizzled
- * between each other.  We could probably do it like ddx and swizzle the right
- * order later, but bail for now and just produce
- * ((q0.tl - q0.bl)x4 (q1.tl - q1.bl)x4)
- */
-void emit_ddxy(struct brw_compile *p,
-              const struct brw_reg *dst,
-              GLuint mask,
-              GLboolean is_ddx,
-              const struct brw_reg *arg0)
-{
-   int i;
-   struct brw_reg src0, src1;
-
-   if (mask & SATURATE)
-      brw_set_saturate(p, 1);
-   for (i = 0; i < 4; i++ ) {
-      if (mask & (1<<i)) {
-        if (is_ddx) {
-           src0 = brw_reg(arg0[i].file, arg0[i].nr, 1,
-                          BRW_REGISTER_TYPE_F,
-                          BRW_VERTICAL_STRIDE_2,
-                          BRW_WIDTH_2,
-                          BRW_HORIZONTAL_STRIDE_0,
-                          BRW_SWIZZLE_XYZW, BRW_WRITEMASK_XYZW);
-           src1 = brw_reg(arg0[i].file, arg0[i].nr, 0,
-                          BRW_REGISTER_TYPE_F,
-                          BRW_VERTICAL_STRIDE_2,
-                          BRW_WIDTH_2,
-                          BRW_HORIZONTAL_STRIDE_0,
-                          BRW_SWIZZLE_XYZW, BRW_WRITEMASK_XYZW);
-        } else {
-           src0 = brw_reg(arg0[i].file, arg0[i].nr, 0,
-                          BRW_REGISTER_TYPE_F,
-                          BRW_VERTICAL_STRIDE_4,
-                          BRW_WIDTH_4,
-                          BRW_HORIZONTAL_STRIDE_0,
-                          BRW_SWIZZLE_XYZW, BRW_WRITEMASK_XYZW);
-           src1 = brw_reg(arg0[i].file, arg0[i].nr, 2,
-                          BRW_REGISTER_TYPE_F,
-                          BRW_VERTICAL_STRIDE_4,
-                          BRW_WIDTH_4,
-                          BRW_HORIZONTAL_STRIDE_0,
-                          BRW_SWIZZLE_XYZW, BRW_WRITEMASK_XYZW);
-        }
-        brw_ADD(p, dst[i], src0, negate(src1));
-      }
-   }
-   if (mask & SATURATE)
-      brw_set_saturate(p, 0);
-}
-
-static void emit_alu1( struct brw_compile *p, 
-                      struct brw_instruction *(*func)(struct brw_compile *, 
-                                                      struct brw_reg, 
-                                                      struct brw_reg),
-                      const struct brw_reg *dst,
-                      GLuint mask,
-                      const struct brw_reg *arg0 )
-{
-   GLuint i;
-
-   if (mask & SATURATE)
-      brw_set_saturate(p, 1);
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-        func(p, dst[i], arg0[i]);
-      }
-   }
-
-   if (mask & SATURATE)
-      brw_set_saturate(p, 0);
-}
-
-
-static void emit_alu2( struct brw_compile *p, 
-                      struct brw_instruction *(*func)(struct brw_compile *, 
-                                                      struct brw_reg, 
-                                                      struct brw_reg, 
-                                                      struct brw_reg),
-                      const struct brw_reg *dst,
-                      GLuint mask,
-                      const struct brw_reg *arg0,
-                      const struct brw_reg *arg1 )
-{
-   GLuint i;
-
-   if (mask & SATURATE)
-      brw_set_saturate(p, 1);
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-        func(p, dst[i], arg0[i], arg1[i]);
-      }
-   }
-
-   if (mask & SATURATE)
-      brw_set_saturate(p, 0);
-}
-
-
-static void emit_mad( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1,
-                     const struct brw_reg *arg2 )
-{
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-        brw_MUL(p, dst[i], arg0[i], arg1[i]);
-
-        brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-        brw_ADD(p, dst[i], dst[i], arg2[i]);
-        brw_set_saturate(p, 0);
-      }
-   }
-}
-
-static void emit_trunc( struct brw_compile *p,
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0)
-{
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {
-        brw_RNDZ(p, dst[i], arg0[i]);
-      }
-   }
-}
-
-static void emit_lrp( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1,
-                     const struct brw_reg *arg2 )
-{
-   GLuint i;
-
-   /* Uses dst as a temporary:
-    */
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {     
-        /* Can I use the LINE instruction for this? 
-         */
-        brw_ADD(p, dst[i], negate(arg0[i]), brw_imm_f(1.0));
-        brw_MUL(p, brw_null_reg(), dst[i], arg2[i]);
-
-        brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-        brw_MAC(p, dst[i], arg0[i], arg1[i]);
-        brw_set_saturate(p, 0);
-      }
-   }
-}
-
-static void emit_sop( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     GLuint cond,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {     
-        brw_MOV(p, dst[i], brw_imm_f(0));
-        brw_CMP(p, brw_null_reg(), cond, arg0[i], arg1[i]);
-        brw_MOV(p, dst[i], brw_imm_f(1.0));
-        brw_set_predicate_control_flag_value(p, 0xff);
-      }
-   }
-}
-
-static void emit_slt( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   emit_sop(p, dst, mask, BRW_CONDITIONAL_L, arg0, arg1);
-}
-
-static void emit_sle( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   emit_sop(p, dst, mask, BRW_CONDITIONAL_LE, arg0, arg1);
-}
-
-static void emit_sgt( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   emit_sop(p, dst, mask, BRW_CONDITIONAL_G, arg0, arg1);
-}
-
-static void emit_sge( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   emit_sop(p, dst, mask, BRW_CONDITIONAL_GE, arg0, arg1);
-}
-
-static void emit_seq( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   emit_sop(p, dst, mask, BRW_CONDITIONAL_EQ, arg0, arg1);
-}
-
-static void emit_sne( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   emit_sop(p, dst, mask, BRW_CONDITIONAL_NEQ, arg0, arg1);
-}
-
-static void emit_cmp( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1,
-                     const struct brw_reg *arg2 )
-{
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {     
-        brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-        brw_MOV(p, dst[i], arg2[i]);
-        brw_set_saturate(p, 0);
-
-        brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0[i], brw_imm_f(0));
-
-        brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-        brw_MOV(p, dst[i], arg1[i]);
-        brw_set_saturate(p, 0);
-        brw_set_predicate_control_flag_value(p, 0xff);
-      }
-   }
-}
-
-static void emit_max( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {     
-        brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-        brw_MOV(p, dst[i], arg0[i]);
-        brw_set_saturate(p, 0);
-
-        brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0[i], arg1[i]);
-
-        brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-        brw_MOV(p, dst[i], arg1[i]);
-        brw_set_saturate(p, 0);
-        brw_set_predicate_control_flag_value(p, 0xff);
-      }
-   }
-}
-
-static void emit_min( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      if (mask & (1<<i)) {     
-        brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-        brw_MOV(p, dst[i], arg1[i]);
-        brw_set_saturate(p, 0);
-
-        brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, arg0[i], arg1[i]);
-
-        brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-        brw_MOV(p, dst[i], arg0[i]);
-        brw_set_saturate(p, 0);
-        brw_set_predicate_control_flag_value(p, 0xff);
-      }
-   }
-}
-
-
-static void emit_dp3( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   int dst_chan = ffs(mask & BRW_WRITEMASK_XYZW) - 1;
-
-   if (!(mask & BRW_WRITEMASK_XYZW))
-      return; /* Do not emit dead code */
-
-   assert(util_is_power_of_two(mask & BRW_WRITEMASK_XYZW));
-
-   brw_MUL(p, brw_null_reg(), arg0[0], arg1[0]);
-   brw_MAC(p, brw_null_reg(), arg0[1], arg1[1]);
-
-   brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-   brw_MAC(p, dst[dst_chan], arg0[2], arg1[2]);
-   brw_set_saturate(p, 0);
-}
-
-
-static void emit_dp4( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   int dst_chan = ffs(mask & BRW_WRITEMASK_XYZW) - 1;
-
-   if (!(mask & BRW_WRITEMASK_XYZW))
-      return; /* Do not emit dead code */
-
-   assert(util_is_power_of_two(mask & BRW_WRITEMASK_XYZW));
-
-   brw_MUL(p, brw_null_reg(), arg0[0], arg1[0]);
-   brw_MAC(p, brw_null_reg(), arg0[1], arg1[1]);
-   brw_MAC(p, brw_null_reg(), arg0[2], arg1[2]);
-
-   brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-   brw_MAC(p, dst[dst_chan], arg0[3], arg1[3]);
-   brw_set_saturate(p, 0);
-}
-
-
-static void emit_dph( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   const int dst_chan = ffs(mask & BRW_WRITEMASK_XYZW) - 1;
-
-   if (!(mask & BRW_WRITEMASK_XYZW))
-      return; /* Do not emit dead code */
-
-   assert(util_is_power_of_two(mask & BRW_WRITEMASK_XYZW));
-
-   brw_MUL(p, brw_null_reg(), arg0[0], arg1[0]);
-   brw_MAC(p, brw_null_reg(), arg0[1], arg1[1]);
-   brw_MAC(p, dst[dst_chan], arg0[2], arg1[2]);
-
-   brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-   brw_ADD(p, dst[dst_chan], dst[dst_chan], arg1[3]);
-   brw_set_saturate(p, 0);
-}
-
-
-static void emit_xpd( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0,
-                     const struct brw_reg *arg1 )
-{
-   GLuint i;
-
-   assert((mask & BRW_WRITEMASK_W) != BRW_WRITEMASK_W);
-   
-   for (i = 0 ; i < 3; i++) {
-      if (mask & (1<<i)) {
-        GLuint i2 = (i+2)%3;
-        GLuint i1 = (i+1)%3;
-
-        brw_MUL(p, brw_null_reg(), negate(arg0[i2]), arg1[i1]);
-
-        brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-        brw_MAC(p, dst[i], arg0[i1], arg1[i2]);
-        brw_set_saturate(p, 0);
-      }
-   }
-}
-
-
-static void emit_math1( struct brw_compile *p, 
-                       GLuint function,
-                       const struct brw_reg *dst,
-                       GLuint mask,
-                       const struct brw_reg *arg0 )
-{
-   int dst_chan = ffs(mask & BRW_WRITEMASK_XYZW) - 1;
-
-   if (!(mask & BRW_WRITEMASK_XYZW))
-      return; /* Do not emit dead code */
-
-   assert(util_is_power_of_two(mask & BRW_WRITEMASK_XYZW));
-
-   brw_MOV(p, brw_message_reg(2), arg0[0]);
-
-   /* Send two messages to perform all 16 operations:
-    */
-   brw_math_16(p, 
-              dst[dst_chan],
-              function,
-              (mask & SATURATE) ? BRW_MATH_SATURATE_SATURATE : BRW_MATH_SATURATE_NONE,
-              2,
-              brw_null_reg(),
-              BRW_MATH_PRECISION_FULL);
-}
-
-
-static void emit_math2( struct brw_compile *p, 
-                       GLuint function,
-                       const struct brw_reg *dst,
-                       GLuint mask,
-                       const struct brw_reg *arg0,
-                       const struct brw_reg *arg1)
-{
-   int dst_chan = ffs(mask & BRW_WRITEMASK_XYZW) - 1;
-
-   if (!(mask & BRW_WRITEMASK_XYZW))
-      return; /* Do not emit dead code */
-
-   assert(util_is_power_of_two(mask & BRW_WRITEMASK_XYZW));
-
-   brw_push_insn_state(p);
-
-   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-   brw_MOV(p, brw_message_reg(2), arg0[0]);
-   brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF);
-   brw_MOV(p, brw_message_reg(4), sechalf(arg0[0]));
-
-   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-   brw_MOV(p, brw_message_reg(3), arg1[0]);
-   brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF);
-   brw_MOV(p, brw_message_reg(5), sechalf(arg1[0]));
-
-   
-   /* Send two messages to perform all 16 operations:
-    */
-   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-   brw_math(p, 
-           dst[dst_chan],
-           function,
-           (mask & SATURATE) ? BRW_MATH_SATURATE_SATURATE : BRW_MATH_SATURATE_NONE,
-           2,
-           brw_null_reg(),
-           BRW_MATH_DATA_VECTOR,
-           BRW_MATH_PRECISION_FULL);
-
-   brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF);
-   brw_math(p, 
-           offset(dst[dst_chan],1),
-           function,
-           (mask & SATURATE) ? BRW_MATH_SATURATE_SATURATE : BRW_MATH_SATURATE_NONE,
-           4,
-           brw_null_reg(),
-           BRW_MATH_DATA_VECTOR,
-           BRW_MATH_PRECISION_FULL);
-   
-   brw_pop_insn_state(p);
-}
-                    
-
-
-static void emit_tex( struct brw_wm_compile *c,
-                     const struct brw_wm_instruction *inst,
-                     struct brw_reg *dst,
-                     GLuint dst_flags,
-                     struct brw_reg *coord,
-                     GLuint sampler)
-{
-   struct brw_compile *p = &c->func;
-   GLuint msgLength, responseLength;
-   GLuint i, nr;
-   GLuint emit;
-   GLuint msg_type;
-   GLboolean shadow = FALSE;
-
-   /* How many input regs are there?
-    */
-   switch (inst->target) {
-   case TGSI_TEXTURE_1D:
-      emit = BRW_WRITEMASK_X;
-      nr = 1;
-      break;
-   case TGSI_TEXTURE_SHADOW1D:
-      emit = BRW_WRITEMASK_XW;
-      nr = 4;
-      shadow = TRUE;
-      break;
-   case TGSI_TEXTURE_2D:
-      emit = BRW_WRITEMASK_XY;
-      nr = 2;
-      break;
-   case TGSI_TEXTURE_SHADOW2D:
-   case TGSI_TEXTURE_SHADOWRECT:
-      emit = BRW_WRITEMASK_XYW;
-      nr = 4;
-      shadow = TRUE;
-      break;
-   case TGSI_TEXTURE_3D:
-   case TGSI_TEXTURE_CUBE:
-      emit = BRW_WRITEMASK_XYZ;
-      nr = 3;
-      break;
-   default:
-      /* unexpected target */
-      abort();
-   }
-
-   msgLength = 1;
-
-   for (i = 0; i < nr; i++) {
-      static const GLuint swz[4] = {0,1,2,2};
-      if (emit & (1<<i)) 
-        brw_MOV(p, brw_message_reg(msgLength+1), coord[swz[i]]);
-      else
-        brw_MOV(p, brw_message_reg(msgLength+1), brw_imm_f(0));
-      msgLength += 2;
-   }
-
-   responseLength = 8;         /* always */
-
-   if (p->brw->gen == 5) {
-       if (shadow)
-           msg_type = BRW_SAMPLER_MESSAGE_SAMPLE_COMPARE_GEN5;
-       else
-          msg_type = BRW_SAMPLER_MESSAGE_SAMPLE_GEN5;
-   } else {
-       if (shadow)
-           msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE;
-       else
-           msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE;
-   }
-
-   brw_SAMPLE(p, 
-             retype(vec16(dst[0]), BRW_REGISTER_TYPE_UW),
-             1,
-             retype(c->payload.depth[0].hw_reg, BRW_REGISTER_TYPE_UW),
-              BTI_TEXTURE(inst->tex_unit),
-             sampler,          /* sampler index */
-             inst->writemask,
-             msg_type, 
-             responseLength,
-             msgLength,
-             0,        
-             1,
-             BRW_SAMPLER_SIMD_MODE_SIMD16);    
-}
-
-
-static void emit_txb( struct brw_wm_compile *c,
-                     const struct brw_wm_instruction *inst,
-                     struct brw_reg *dst,
-                     GLuint dst_flags,
-                     struct brw_reg *coord,
-                     GLuint sampler )
-{
-   struct brw_compile *p = &c->func;
-   GLuint msgLength;
-   GLuint msg_type;
-   /* Shadow ignored for txb.
-    */
-   switch (inst->target) {
-   case TGSI_TEXTURE_1D:
-   case TGSI_TEXTURE_SHADOW1D:
-      brw_MOV(p, brw_message_reg(2), coord[0]);
-      brw_MOV(p, brw_message_reg(4), brw_imm_f(0));
-      brw_MOV(p, brw_message_reg(6), brw_imm_f(0));
-      break;
-   case TGSI_TEXTURE_2D:
-   case TGSI_TEXTURE_RECT:
-   case TGSI_TEXTURE_SHADOW2D:
-   case TGSI_TEXTURE_SHADOWRECT:
-      brw_MOV(p, brw_message_reg(2), coord[0]);
-      brw_MOV(p, brw_message_reg(4), coord[1]);
-      brw_MOV(p, brw_message_reg(6), brw_imm_f(0));
-      break;
-   case TGSI_TEXTURE_3D:
-   case TGSI_TEXTURE_CUBE:
-      brw_MOV(p, brw_message_reg(2), coord[0]);
-      brw_MOV(p, brw_message_reg(4), coord[1]);
-      brw_MOV(p, brw_message_reg(6), coord[2]);
-      break;
-   default:
-      /* unexpected target */
-      abort();
-   }
-
-   brw_MOV(p, brw_message_reg(8), coord[3]);
-   msgLength = 9;
-
-   if (p->brw->gen == 5)
-       msg_type = BRW_SAMPLER_MESSAGE_SAMPLE_BIAS_GEN5;
-   else
-       msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS;
-
-   brw_SAMPLE(p, 
-             retype(vec16(dst[0]), BRW_REGISTER_TYPE_UW),
-             1,
-             retype(c->payload.depth[0].hw_reg, BRW_REGISTER_TYPE_UW),
-              BTI_TEXTURE(inst->tex_unit),
-             sampler,          /* sampler index */
-             inst->writemask,
-             msg_type,
-             8,                /* responseLength */
-             msgLength,
-             0,        
-             1,
-             BRW_SAMPLER_SIMD_MODE_SIMD16);    
-}
-
-
-static void emit_lit( struct brw_compile *p, 
-                     const struct brw_reg *dst,
-                     GLuint mask,
-                     const struct brw_reg *arg0 )
-{
-   assert((mask & BRW_WRITEMASK_XW) == 0);
-
-   if (mask & BRW_WRITEMASK_Y) {
-      brw_set_saturate(p, (mask & SATURATE) ? 1 : 0);
-      brw_MOV(p, dst[1], arg0[0]);
-      brw_set_saturate(p, 0);
-   }
-
-   if (mask & BRW_WRITEMASK_Z) {
-      emit_math2(p, BRW_MATH_FUNCTION_POW,
-                &dst[2],
-                BRW_WRITEMASK_X | (mask & SATURATE),
-                &arg0[1],
-                &arg0[3]);
-   }
-
-   /* Ordinarily you'd use an iff statement to skip or shortcircuit
-    * some of the POW calculations above, but 16-wide iff statements
-    * seem to lock c1 hardware, so this is a nasty workaround:
-    */
-   brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_LE, arg0[0], brw_imm_f(0));
-   {
-      if (mask & BRW_WRITEMASK_Y) 
-        brw_MOV(p, dst[1], brw_imm_f(0));
-
-      if (mask & BRW_WRITEMASK_Z) 
-        brw_MOV(p, dst[2], brw_imm_f(0)); 
-   }
-   brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-}
-
-
-/* Kill pixel - set execution mask to zero for those pixels which
- * fail.
- */
-static void emit_kil( struct brw_wm_compile *c,
-                     struct brw_reg *arg0)
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg r0uw = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW);
-   GLuint i;
-   
-   /* XXX - usually won't need 4 compares!
-    */
-   for (i = 0; i < 4; i++) {
-      brw_push_insn_state(p);
-      brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_GE, arg0[i], brw_imm_f(0));   
-      brw_set_predicate_control_flag_value(p, 0xff);
-      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-      brw_AND(p, r0uw, brw_flag_reg(), r0uw);
-      brw_pop_insn_state(p);
-   }
-}
-
-/* KILLP kills the pixels that are currently executing, not based on a test
- * of the arguments.
- */
-static void emit_killp( struct brw_wm_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   struct brw_reg r0uw = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW);
-
-   brw_push_insn_state(p);
-   brw_set_mask_control(p, BRW_MASK_DISABLE);
-   brw_NOT(p, c->emit_mask_reg, brw_mask_reg(1)); /* IMASK */
-   brw_AND(p, r0uw, c->emit_mask_reg, r0uw);
-   brw_pop_insn_state(p);
-}
-
-static void fire_fb_write( struct brw_wm_compile *c,
-                          GLuint base_reg,
-                          GLuint nr,
-                          GLuint target,
-                          GLuint eot )
-{
-   struct brw_compile *p = &c->func;
-   
-   /* Pass through control information:
-    */
-/*  mov (8) m1.0<1>:ud   r1.0<8;8,1>:ud   { Align1 NoMask } */
-   {
-      brw_push_insn_state(p);
-      brw_set_mask_control(p, BRW_MASK_DISABLE); /* ? */
-      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-      brw_MOV(p, 
-              brw_message_reg(base_reg + 1),
-              brw_vec8_grf(1, 0));
-      brw_pop_insn_state(p);
-   }
-
-   /* Send framebuffer write message: */
-/*  send (16) null.0<1>:uw m0               r0.0<8;8,1>:uw   0x85a04000:ud    { Align1 EOT } */
-   brw_fb_WRITE(p,
-               retype(vec16(brw_null_reg()), BRW_REGISTER_TYPE_UW),
-               base_reg,
-               retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW),
-               target,         
-               nr,
-               0, 
-               eot);
-}
-
-
-static void emit_aa( struct brw_wm_compile *c,
-                    struct brw_reg *arg1,
-                    GLuint reg )
-{
-   struct brw_compile *p = &c->func;
-   GLuint comp = c->key.aa_dest_stencil_reg / 2;
-   GLuint off = c->key.aa_dest_stencil_reg % 2;
-   struct brw_reg aa = offset(arg1[comp], off);
-
-   brw_push_insn_state(p);
-   brw_set_compression_control(p, BRW_COMPRESSION_NONE); /* ?? */
-   brw_MOV(p, brw_message_reg(reg), aa);
-   brw_pop_insn_state(p);
-}
-
-
-/* Post-fragment-program processing.  Send the results to the
- * framebuffer.
- * \param arg0  the fragment color
- * \param arg1  the pass-through depth value
- * \param arg2  the shader-computed depth value
- */
-static void emit_fb_write( struct brw_wm_compile *c,
-                          struct brw_reg *arg0,
-                          struct brw_reg *arg1,
-                          struct brw_reg *arg2,
-                          GLuint target,
-                          GLuint eot)
-{
-   struct brw_compile *p = &c->func;
-   GLuint nr = 2;
-   GLuint channel;
-
-   /* Reserve a space for AA - may not be needed:
-    */
-   if (c->key.aa_dest_stencil_reg)
-      nr += 1;
-
-   /* I don't really understand how this achieves the color interleave
-    * (ie RGBARGBA) in the result:  [Do the saturation here]
-    */
-   {
-      brw_push_insn_state(p);
-      
-      for (channel = 0; channel < 4; channel++) {
-        /*  mov (8) m2.0<1>:ud   r28.0<8;8,1>:ud  { Align1 } */
-        /*  mov (8) m6.0<1>:ud   r29.0<8;8,1>:ud  { Align1 SecHalf } */
-
-        brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-        brw_MOV(p,
-                brw_message_reg(nr + channel),
-                arg0[channel]);
-       
-        brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF);
-        brw_MOV(p,
-                brw_message_reg(nr + channel + 4),
-                sechalf(arg0[channel]));
-      }
-
-      /* skip over the regs populated above:
-       */
-      nr += 8;
-   
-      brw_pop_insn_state(p);
-   }
-
-   if (c->key.source_depth_to_render_target)
-   {
-      if (c->key.computes_depth) 
-        brw_MOV(p, brw_message_reg(nr), arg2[2]);
-      else 
-        brw_MOV(p, brw_message_reg(nr), arg1[1]); /* ? */
-
-      nr += 2;
-   }
-
-   if (c->key.dest_depth_reg)
-   {
-      GLuint comp = c->key.dest_depth_reg / 2;
-      GLuint off = c->key.dest_depth_reg % 2;
-
-      if (off != 0) {
-         brw_push_insn_state(p);
-         brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-
-         brw_MOV(p, brw_message_reg(nr), offset(arg1[comp],1));
-         /* 2nd half? */
-         brw_MOV(p, brw_message_reg(nr+1), arg1[comp+1]);
-         brw_pop_insn_state(p);
-      }
-      else {
-         brw_MOV(p, brw_message_reg(nr), arg1[comp]);
-      }
-      nr += 2;
-   }
-
-   if (!c->key.runtime_check_aads_emit) {
-      if (c->key.aa_dest_stencil_reg)
-        emit_aa(c, arg1, 2);
-
-      fire_fb_write(c, 0, nr, target, eot);
-   }
-   else {
-      struct brw_reg v1_null_ud = vec1(retype(brw_null_reg(), BRW_REGISTER_TYPE_UD));
-      struct brw_reg ip = brw_ip_reg();
-      struct brw_instruction *jmp;
-      
-      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-      brw_set_conditionalmod(p, BRW_CONDITIONAL_Z);
-      brw_AND(p, 
-             v1_null_ud, 
-             get_element_ud(brw_vec8_grf(1,0), 6), 
-             brw_imm_ud(1<<26)); 
-
-      jmp = brw_JMPI(p, ip, ip, brw_imm_d(0));
-      {
-        emit_aa(c, arg1, 2);
-        fire_fb_write(c, 0, nr, target, eot);
-        /* note - thread killed in subroutine */
-      }
-      brw_land_fwd_jump(p, jmp);
-
-      /* ELSE: Shuffle up one register to fill in the hole left for AA:
-       */
-      fire_fb_write(c, 1, nr-1, target, eot);
-   }
-}
-
-
-/**
- * Move a GPR to scratch memory. 
- */
-static void emit_spill( struct brw_wm_compile *c,
-                       struct brw_reg reg,
-                       GLuint slot )
-{
-   struct brw_compile *p = &c->func;
-
-   /*
-     mov (16) m2.0<1>:ud   r2.0<8;8,1>:ud   { Align1 Compr }
-   */
-   brw_MOV(p, brw_message_reg(2), reg);
-
-   /*
-     mov (1) r0.2<1>:d    0x00000080:d     { Align1 NoMask }
-     send (16) null.0<1>:uw m1               r0.0<8;8,1>:uw   0x053003ff:ud    { Align1 }
-   */
-   brw_dp_WRITE_16(p, 
-                  retype(vec16(brw_vec8_grf(0, 0)), BRW_REGISTER_TYPE_UW),
-                  slot);
-}
-
-
-/**
- * Load a GPR from scratch memory. 
- */
-static void emit_unspill( struct brw_wm_compile *c,
-                         struct brw_reg reg,
-                         GLuint slot )
-{
-   struct brw_compile *p = &c->func;
-
-   /* Slot 0 is the undef value.
-    */
-   if (slot == 0) {
-      brw_MOV(p, reg, brw_imm_f(0));
-      return;
-   }
-
-   /*
-     mov (1) r0.2<1>:d    0x000000c0:d     { Align1 NoMask }
-     send (16) r110.0<1>:uw m1               r0.0<8;8,1>:uw   0x041243ff:ud    { Align1 }
-   */
-
-   brw_dp_READ_16(p,
-                 retype(vec16(reg), BRW_REGISTER_TYPE_UW),
-                 slot);
-}
-
-
-/**
- * Retrieve up to 4 GEN4 register pairs for the given wm reg:
- * Args with unspill_reg != 0 will be loaded from scratch memory.
- */
-static void get_argument_regs( struct brw_wm_compile *c,
-                              struct brw_wm_ref *arg[],
-                              struct brw_reg *regs )
-{
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      if (arg[i]) {
-        if (arg[i]->unspill_reg)
-           emit_unspill(c,
-                        brw_vec8_grf(arg[i]->unspill_reg, 0),
-                        arg[i]->value->spill_slot);
-
-        regs[i] = arg[i]->hw_reg;
-      }
-      else {
-        regs[i] = brw_null_reg();
-      }
-   }
-}
-
-
-/**
- * For values that have a spill_slot!=0, write those regs to scratch memory.
- */
-static void spill_values( struct brw_wm_compile *c,
-                         struct brw_wm_value *values,
-                         GLuint nr )
-{
-   GLuint i;
-
-   for (i = 0; i < nr; i++)
-      if (values[i].spill_slot) 
-        emit_spill(c, values[i].hw_reg, values[i].spill_slot);
-}
-
-
-/* Emit the fragment program instructions here.
- */
-void brw_wm_emit( struct brw_wm_compile *c )
-{
-   struct brw_compile *p = &c->func;
-   GLuint insn;
-
-   brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED);
-
-   /* Check if any of the payload regs need to be spilled:
-    */
-   spill_values(c, c->payload.depth, 4);
-   spill_values(c, c->creg, c->nr_creg);
-   spill_values(c, c->payload.input_interp, PIPE_MAX_SHADER_INPUTS);
-   
-
-   for (insn = 0; insn < c->nr_insns; insn++) {
-
-      struct brw_wm_instruction *inst = &c->instruction[insn];
-      struct brw_reg args[3][4], dst[4];
-      GLuint i, dst_flags;
-      
-      /* Get argument regs:
-       */
-      for (i = 0; i < 3; i++) 
-        get_argument_regs(c, inst->src[i], args[i]);
-
-      /* Get dest regs:
-       */
-      for (i = 0; i < 4; i++)
-        if (inst->dst[i])
-           dst[i] = inst->dst[i]->hw_reg;
-        else
-           dst[i] = brw_null_reg();
-      
-      /* Flags
-       */
-      dst_flags = inst->writemask;
-      if (inst->saturate) 
-        dst_flags |= SATURATE;
-
-      switch (inst->opcode) {
-        /* Generated instructions for calculating triangle interpolants:
-         */
-      case WM_PIXELXY:
-        emit_pixel_xy(p, dst, dst_flags);
-        break;
-
-      case WM_DELTAXY:
-        emit_delta_xy(p, dst, dst_flags, args[0]);
-        break;
-
-      case WM_WPOSXY:
-        emit_wpos_xy(c, dst, dst_flags, args[0]);
-        break;
-
-      case WM_PIXELW:
-        emit_pixel_w(p, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case WM_LINTERP:
-        emit_linterp(p, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case WM_PINTERP:
-        emit_pinterp(p, dst, dst_flags, args[0], args[1], args[2]);
-        break;
-
-      case WM_CINTERP:
-        emit_cinterp(p, dst, dst_flags, args[0]);
-        break;
-
-      case WM_FB_WRITE:
-        emit_fb_write(c, args[0], args[1], args[2], inst->target, inst->eot);
-        break;
-
-      case WM_FRONTFACING:
-        emit_frontfacing(p, dst, dst_flags);
-        break;
-
-        /* Straightforward arithmetic:
-         */
-      case TGSI_OPCODE_ADD:
-        emit_alu2(p, brw_ADD, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case TGSI_OPCODE_FRC:
-        emit_alu1(p, brw_FRC, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_FLR:
-        emit_alu1(p, brw_RNDD, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_DDX:
-        emit_ddxy(p, dst, dst_flags, GL_TRUE, args[0]);
-        break;
-
-      case TGSI_OPCODE_DDY:
-        emit_ddxy(p, dst, dst_flags, GL_FALSE, args[0]);
-        break;
-
-      case TGSI_OPCODE_DP3:
-        emit_dp3(p, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case TGSI_OPCODE_DP4:
-        emit_dp4(p, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case TGSI_OPCODE_DPH:
-        emit_dph(p, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case TGSI_OPCODE_TRUNC:
-        emit_trunc(p, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_LRP:
-        emit_lrp(p, dst, dst_flags, args[0], args[1], args[2]);
-        break;
-
-      case TGSI_OPCODE_MAD:    
-        emit_mad(p, dst, dst_flags, args[0], args[1], args[2]);
-        break;
-
-      case TGSI_OPCODE_MOV:
-        emit_alu1(p, brw_MOV, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_MUL:
-        emit_alu2(p, brw_MUL, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case TGSI_OPCODE_XPD:
-        emit_xpd(p, dst, dst_flags, args[0], args[1]);
-        break;
-
-        /* Higher math functions:
-         */
-      case TGSI_OPCODE_RCP:
-        emit_math1(p, BRW_MATH_FUNCTION_INV, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_RSQ:
-        emit_math1(p, BRW_MATH_FUNCTION_RSQ, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_SIN:
-        emit_math1(p, BRW_MATH_FUNCTION_SIN, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_COS:
-        emit_math1(p, BRW_MATH_FUNCTION_COS, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_EX2:
-        emit_math1(p, BRW_MATH_FUNCTION_EXP, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_LG2:
-        emit_math1(p, BRW_MATH_FUNCTION_LOG, dst, dst_flags, args[0]);
-        break;
-
-      case TGSI_OPCODE_SCS:
-        /* There is an scs math function, but it would need some
-         * fixup for 16-element execution.
-         */
-        if (dst_flags & BRW_WRITEMASK_X)
-           emit_math1(p, BRW_MATH_FUNCTION_COS, dst, (dst_flags&SATURATE)|BRW_WRITEMASK_X, args[0]);
-        if (dst_flags & BRW_WRITEMASK_Y)
-           emit_math1(p, BRW_MATH_FUNCTION_SIN, dst+1, (dst_flags&SATURATE)|BRW_WRITEMASK_X, args[0]);
-        break;
-
-      case TGSI_OPCODE_POW:
-        emit_math2(p, BRW_MATH_FUNCTION_POW, dst, dst_flags, args[0], args[1]);
-        break;
-
-        /* Comparisons:
-         */
-      case TGSI_OPCODE_CMP:
-        emit_cmp(p, dst, dst_flags, args[0], args[1], args[2]);
-        break;
-
-      case TGSI_OPCODE_MAX:
-        emit_max(p, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case TGSI_OPCODE_MIN:
-        emit_min(p, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case TGSI_OPCODE_SLT:
-        emit_slt(p, dst, dst_flags, args[0], args[1]);
-        break;
-
-      case TGSI_OPCODE_SLE:
-        emit_sle(p, dst, dst_flags, args[0], args[1]);
-       break;
-      case TGSI_OPCODE_SGT:
-        emit_sgt(p, dst, dst_flags, args[0], args[1]);
-       break;
-      case TGSI_OPCODE_SGE:
-        emit_sge(p, dst, dst_flags, args[0], args[1]);
-        break;
-      case TGSI_OPCODE_SEQ:
-        emit_seq(p, dst, dst_flags, args[0], args[1]);
-       break;
-      case TGSI_OPCODE_SNE:
-        emit_sne(p, dst, dst_flags, args[0], args[1]);
-       break;
-
-      case TGSI_OPCODE_LIT:
-        emit_lit(p, dst, dst_flags, args[0]);
-        break;
-
-        /* Texturing operations:
-         */
-      case TGSI_OPCODE_TEX:
-        emit_tex(c, inst, dst, dst_flags, args[0], inst->sampler);
-        break;
-
-      case TGSI_OPCODE_TXB:
-        emit_txb(c, inst, dst, dst_flags, args[0], inst->sampler);
-        break;
-
-      case TGSI_OPCODE_KIL:
-        emit_kil(c, args[0]);
-        break;
-
-      case TGSI_OPCODE_KILP:
-        emit_killp(c);
-        break;
-
-      default:
-        debug_printf("Unsupported opcode %i (%s) in fragment shader\n",
-                     inst->opcode, 
-                     tgsi_get_opcode_info(inst->opcode)->mnemonic);
-      }
-      
-      for (i = 0; i < 4; i++)
-       if (inst->dst[i] && inst->dst[i]->spill_slot) 
-          emit_spill(c, 
-                     inst->dst[i]->hw_reg, 
-                     inst->dst[i]->spill_slot);
-   }
-
-   if (BRW_DEBUG & DEBUG_WM) {
-      debug_printf("wm-native:\n");
-      brw_disasm(stderr, p->store, p->nr_insn, p->brw->gen);
-   }
-}
diff --git a/src/gallium/drivers/i965/brw_wm_fp.c b/src/gallium/drivers/i965/brw_wm_fp.c
deleted file mode 100644 (file)
index a65e16e..0000000
+++ /dev/null
@@ -1,1223 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-               
-
-#include "pipe/p_shader_tokens.h"
-
-#include "util/u_math.h"
-#include "util/u_memory.h"
-
-#include "tgsi/tgsi_parse.h"
-#include "tgsi/tgsi_dump.h"
-#include "tgsi/tgsi_info.h"
-#include "tgsi/tgsi_util.h"
-
-#include "brw_wm.h"
-#include "brw_debug.h"
-
-
-/***********************************************************************
- * Source regs
- */
-
-static struct brw_fp_src src_reg(GLuint file, GLuint idx)
-{
-   struct brw_fp_src reg;
-   reg.file = file;
-   reg.index = idx;
-   reg.swizzle = BRW_SWIZZLE_XYZW;
-   reg.indirect = 0;
-   reg.negate = 0;
-   reg.abs = 0;
-   return reg;
-}
-
-static struct brw_fp_src src_reg_from_dst(struct brw_fp_dst dst)
-{
-   return src_reg(dst.file, dst.index);
-}
-
-static struct brw_fp_src src_undef( void )
-{
-   return src_reg(TGSI_FILE_NULL, 0);
-}
-
-static GLboolean src_is_undef(struct brw_fp_src src)
-{
-   return src.file == TGSI_FILE_NULL;
-}
-
-static struct brw_fp_src src_swizzle( struct brw_fp_src reg, int x, int y, int z, int w )
-{
-   unsigned swz = reg.swizzle;
-
-   reg.swizzle = ( BRW_GET_SWZ(swz, x) << 0 |
-                  BRW_GET_SWZ(swz, y) << 2 |
-                  BRW_GET_SWZ(swz, z) << 4 |
-                  BRW_GET_SWZ(swz, w) << 6 );
-
-   return reg;
-}
-
-static struct brw_fp_src src_scalar( struct brw_fp_src reg, int x )
-{
-   return src_swizzle(reg, x, x, x, x);
-}
-
-static struct brw_fp_src src_abs( struct brw_fp_src src )
-{
-   src.negate = 0;
-   src.abs = 1;
-   return src;
-}
-
-static struct brw_fp_src src_negate( struct brw_fp_src src )
-{
-   src.negate = 1;
-   src.abs = 0;
-   return src;
-}
-
-
-static int match_or_expand_immediate( const float *v,
-                                      unsigned nr,
-                                      float *v2,
-                                      unsigned *nr2,
-                                      unsigned *swizzle )
-{
-   unsigned i, j;
-   
-   *swizzle = 0;
-
-   for (i = 0; i < nr; i++) {
-      boolean found = FALSE;
-
-      for (j = 0; j < *nr2 && !found; j++) {
-         if (v[i] == v2[j]) {
-            *swizzle |= j << (i * 2);
-            found = TRUE;
-         }
-      }
-
-      if (!found) {
-         if (*nr2 >= 4) 
-            return FALSE;
-
-         v2[*nr2] = v[i];
-         *swizzle |= *nr2 << (i * 2);
-         (*nr2)++;
-      }
-   }
-
-   return TRUE;
-}
-
-
-
-/* Internally generated immediates: overkill...
- */
-static struct brw_fp_src src_imm( struct brw_wm_compile *c, 
-                                 const GLfloat *v, 
-                                 unsigned nr)
-{
-   unsigned i, j;
-   unsigned swizzle;
-
-   /* Could do a first pass where we examine all existing immediates
-    * without expanding.
-    */
-
-   for (i = 0; i < c->nr_immediates; i++) {
-      if (match_or_expand_immediate( v, 
-                                     nr,
-                                     c->immediate[i].v,
-                                     &c->immediate[i].nr, 
-                                     &swizzle ))
-         goto out;
-   }
-
-   if (c->nr_immediates < Elements(c->immediate)) {
-      i = c->nr_immediates++;
-      if (match_or_expand_immediate( v,
-                                     nr,
-                                     c->immediate[i].v,
-                                     &c->immediate[i].nr, 
-                                     &swizzle ))
-         goto out;
-   }
-
-   c->error = 1;
-   return src_undef();
-
-out:
-   /* Make sure that all referenced elements are from this immediate.
-    * Has the effect of making size-one immediates into scalars.
-    */
-   for (j = nr; j < 4; j++)
-      swizzle |= (swizzle & 0x3) << (j * 2);
-
-   return src_swizzle( src_reg( TGSI_FILE_IMMEDIATE, i ),
-                      BRW_GET_SWZ(swizzle, X),
-                      BRW_GET_SWZ(swizzle, Y),
-                      BRW_GET_SWZ(swizzle, Z),
-                      BRW_GET_SWZ(swizzle, W) );
-}
-
-
-
-static struct brw_fp_src src_imm1f( struct brw_wm_compile *c,
-                                   GLfloat f )
-{
-   return src_imm(c, &f, 1);
-}
-
-static struct brw_fp_src src_imm4f( struct brw_wm_compile *c,
-                                   GLfloat x,
-                                   GLfloat y,
-                                   GLfloat z,
-                                   GLfloat w)
-{
-   GLfloat f[4] = {x,y,z,w};
-   return src_imm(c, f, 4);
-}
-
-
-
-/***********************************************************************
- * Dest regs
- */
-
-static struct brw_fp_dst dst_reg(GLuint file, GLuint idx)
-{
-   struct brw_fp_dst reg;
-   reg.file = file;
-   reg.index = idx;
-   reg.writemask = BRW_WRITEMASK_XYZW;
-   reg.indirect = 0;
-   reg.saturate = 0;
-   return reg;
-}
-
-static struct brw_fp_dst dst_mask( struct brw_fp_dst reg, int mask )
-{
-   reg.writemask &= mask;
-   return reg;
-}
-
-static struct brw_fp_dst dst_undef( void )
-{
-   return dst_reg(TGSI_FILE_NULL, 0);
-}
-
-static boolean dst_is_undef( struct brw_fp_dst dst )
-{
-   return dst.file == TGSI_FILE_NULL;
-}
-
-static struct brw_fp_dst dst_saturate( struct brw_fp_dst reg, boolean flag )
-{
-   reg.saturate = flag;
-   return reg;
-}
-
-static struct brw_fp_dst get_temp( struct brw_wm_compile *c )
-{
-   int bit = ffs( ~c->fp_temp );
-
-   if (!bit) {
-      debug_printf("%s: out of temporaries\n", __FILE__);
-   }
-
-   c->fp_temp |= 1<<(bit-1);
-   return dst_reg(TGSI_FILE_TEMPORARY, c->fp_first_internal_temp+(bit-1));
-}
-
-
-static void release_temp( struct brw_wm_compile *c, struct brw_fp_dst temp )
-{
-   c->fp_temp &= ~(1 << (temp.index - c->fp_first_internal_temp));
-}
-
-
-/***********************************************************************
- * Instructions 
- */
-
-static struct brw_fp_instruction *get_fp_inst(struct brw_wm_compile *c)
-{
-   return &c->fp_instructions[c->nr_fp_insns++];
-}
-
-static struct brw_fp_instruction * emit_tex_op(struct brw_wm_compile *c,
-                                            GLuint op,
-                                            struct brw_fp_dst dest,
-                                            GLuint tex_unit,
-                                            GLuint target,
-                                            GLuint sampler,
-                                            struct brw_fp_src src0,
-                                            struct brw_fp_src src1,
-                                            struct brw_fp_src src2 )
-{
-   struct brw_fp_instruction *inst = get_fp_inst(c);
-
-   if (tex_unit || target)
-      assert(op == TGSI_OPCODE_TXP ||
-             op == TGSI_OPCODE_TXB ||
-             op == TGSI_OPCODE_TEX ||
-             op == WM_FB_WRITE);
-
-   inst->opcode = op;
-   inst->dst = dest;
-   inst->tex_unit = tex_unit;
-   inst->target = target;
-   inst->sampler = sampler;
-   inst->src[0] = src0;
-   inst->src[1] = src1;
-   inst->src[2] = src2;
-
-   return inst;
-}
-   
-
-static INLINE void emit_op3(struct brw_wm_compile *c,
-                           GLuint op,
-                           struct brw_fp_dst dest,
-                           struct brw_fp_src src0,
-                           struct brw_fp_src src1,
-                           struct brw_fp_src src2 )
-{
-   emit_tex_op(c, op, dest, 0, 0, 0, src0, src1, src2);
-}
-
-
-static INLINE void emit_op2(struct brw_wm_compile *c,
-                           GLuint op,
-                           struct brw_fp_dst dest,
-                           struct brw_fp_src src0,
-                           struct brw_fp_src src1)
-{
-   emit_tex_op(c, op, dest, 0, 0, 0, src0, src1, src_undef());
-}
-
-static INLINE void emit_op1(struct brw_wm_compile *c,
-                           GLuint op,
-                           struct brw_fp_dst dest,
-                           struct brw_fp_src src0)
-{
-   emit_tex_op(c, op, dest, 0, 0, 0, src0, src_undef(), src_undef());
-}
-
-static INLINE void emit_op0(struct brw_wm_compile *c,
-                          GLuint op,
-                          struct brw_fp_dst dest)
-{
-   emit_tex_op(c, op, dest, 0, 0, 0, src_undef(), src_undef(), src_undef());
-}
-
-
-
-/* Many opcodes produce the same value across all the result channels.
- * We'd rather not have to support that splatting in the opcode implementations,
- * and brw_wm_pass*.c wants to optimize them out by shuffling references around
- * anyway.  We can easily get both by emitting the opcode to one channel, and
- * then MOVing it to the others, which brw_wm_pass*.c already understands.
- */
-static void emit_scalar_insn(struct brw_wm_compile *c,
-                            unsigned opcode,
-                            struct brw_fp_dst dst,
-                            struct brw_fp_src src0,
-                            struct brw_fp_src src1,
-                            struct brw_fp_src src2 )
-{
-   unsigned first_chan = ffs(dst.writemask) - 1;
-   unsigned first_mask = 1 << first_chan;
-
-   if (dst.writemask == 0)
-      return;
-
-   emit_op3( c, opcode,
-            dst_mask(dst, first_mask),
-            src0, src1, src2 );
-
-   if (dst.writemask != first_mask) {
-      emit_op1(c, TGSI_OPCODE_MOV,
-              dst_mask(dst, ~first_mask),
-              src_scalar(src_reg_from_dst(dst), first_chan));
-   }
-}
-
-
-/***********************************************************************
- * Special instructions for interpolation and other tasks
- */
-
-static struct brw_fp_src get_pixel_xy( struct brw_wm_compile *c )
-{
-   if (src_is_undef(c->fp_pixel_xy)) {
-      struct brw_fp_dst pixel_xy = get_temp(c);
-      struct brw_fp_src payload_r0_depth = src_reg(BRW_FILE_PAYLOAD, PAYLOAD_DEPTH);
-      
-      
-      /* Emit the out calculations, and hold onto the results.  Use
-       * two instructions as a temporary is required.
-       */   
-      /* pixel_xy.xy = PIXELXY payload[0];
-       */
-      emit_op1(c,
-              WM_PIXELXY,
-              dst_mask(pixel_xy, BRW_WRITEMASK_XY),
-              payload_r0_depth);
-
-      c->fp_pixel_xy = src_reg_from_dst(pixel_xy);
-   }
-
-   return c->fp_pixel_xy;
-}
-
-static struct brw_fp_src get_delta_xy( struct brw_wm_compile *c )
-{
-   if (src_is_undef(c->fp_delta_xy)) {
-      struct brw_fp_dst delta_xy = get_temp(c);
-      struct brw_fp_src pixel_xy = get_pixel_xy(c);
-      struct brw_fp_src payload_r0_depth = src_reg(BRW_FILE_PAYLOAD, PAYLOAD_DEPTH);
-      
-      /* deltas.xy = DELTAXY pixel_xy, payload[0]
-       */
-      emit_op3(c,
-             WM_DELTAXY,
-             dst_mask(delta_xy, BRW_WRITEMASK_XY),
-             pixel_xy, 
-             payload_r0_depth,
-             src_undef());
-      
-      c->fp_delta_xy = src_reg_from_dst(delta_xy);
-   }
-
-   return c->fp_delta_xy;
-}
-
-static struct brw_fp_src get_pixel_w( struct brw_wm_compile *c )
-{
-   if (src_is_undef(c->fp_pixel_w)) {
-      struct brw_fp_dst pixel_w = get_temp(c);
-      struct brw_fp_src deltas = get_delta_xy(c);
-
-      /* XXX: assuming position is always first -- valid? 
-       */
-      struct brw_fp_src interp_wpos = src_reg(BRW_FILE_PAYLOAD, 0);
-
-      /* deltas.xyw = DELTAS2 deltas.xy, payload.interp_wpos.x
-       */
-      emit_op3(c,
-              WM_PIXELW,
-              dst_mask(pixel_w, BRW_WRITEMASK_W),
-              interp_wpos,
-              deltas, 
-              src_undef());
-      
-
-      c->fp_pixel_w = src_reg_from_dst(pixel_w);
-   }
-
-   return c->fp_pixel_w;
-}
-
-
-/***********************************************************************
- * Emit INTERP instructions ahead of first use of each attrib.
- */
-
-static void emit_interp( struct brw_wm_compile *c,
-                        GLuint idx,
-                        GLuint semantic,
-                        GLuint interp_mode )
-{
-   struct brw_fp_dst dst = dst_reg(TGSI_FILE_INPUT, idx);
-   struct brw_fp_src interp = src_reg(BRW_FILE_PAYLOAD, idx);
-   struct brw_fp_src deltas = get_delta_xy(c);
-
-   /* Need to use PINTERP on attributes which have been
-    * multiplied by 1/W in the SF program, and LINTERP on those
-    * which have not:
-    */
-   switch (semantic) {
-   case TGSI_SEMANTIC_POSITION:
-      /* Have to treat wpos.xy specially:
-       */
-      emit_op1(c,
-             WM_WPOSXY,
-             dst_mask(dst, BRW_WRITEMASK_XY),
-             get_pixel_xy(c));
-      
-      /* TGSI_FILE_INPUT.attr.xyzw = INTERP payload.interp[attr].x, deltas.xyw
-       */
-      emit_op2(c,
-              WM_LINTERP,
-              dst_mask(dst, BRW_WRITEMASK_ZW),
-              interp,
-              deltas);
-      break;
-
-   case TGSI_SEMANTIC_COLOR:
-      if (c->key.flat_shade) {
-        emit_op1(c,
-                WM_CINTERP,
-                dst,
-                interp);
-      }
-      else if (interp_mode == TGSI_INTERPOLATE_LINEAR) {
-        emit_op2(c,
-                 WM_LINTERP,
-                 dst,
-                 interp,
-                 deltas);
-      }
-      else {
-        emit_op3(c,
-                 WM_PINTERP,
-                 dst,
-                 interp,
-                 deltas,
-                 get_pixel_w(c));
-      }
-
-      break;
-
-   case TGSI_SEMANTIC_FOG:
-      /* Interpolate the fog coordinate */
-      emit_op3(c,
-             WM_PINTERP,
-             dst_mask(dst, BRW_WRITEMASK_X),
-             interp,
-             deltas,
-             get_pixel_w(c));
-
-      emit_op1(c,
-              TGSI_OPCODE_MOV,
-              dst_mask(dst, BRW_WRITEMASK_YZ),
-              src_imm1f(c, 0.0));
-
-      emit_op1(c,
-              TGSI_OPCODE_MOV,
-              dst_mask(dst, BRW_WRITEMASK_W),
-              src_imm1f(c, 1.0));
-      break;
-
-   case TGSI_SEMANTIC_FACE:
-      /* XXX review/test this case */
-      emit_op0(c,
-              WM_FRONTFACING,
-              dst_mask(dst, BRW_WRITEMASK_X));
-      
-      emit_op1(c,
-             TGSI_OPCODE_MOV,
-             dst_mask(dst, BRW_WRITEMASK_YZ),
-              src_imm1f(c, 0.0));
-
-      emit_op1(c,
-             TGSI_OPCODE_MOV,
-             dst_mask(dst, BRW_WRITEMASK_W),
-              src_imm1f(c, 1.0));
-      break;
-
-   case TGSI_SEMANTIC_PSIZE:
-      /* XXX review/test this case */
-      emit_op3(c,
-              WM_PINTERP,
-              dst_mask(dst, BRW_WRITEMASK_XY),
-              interp,
-              deltas,
-              get_pixel_w(c));
-
-      emit_op1(c,
-             TGSI_OPCODE_MOV,
-             dst_mask(dst, BRW_WRITEMASK_Z),
-             src_imm1f(c, 0.0f));
-
-      emit_op1(c,
-             TGSI_OPCODE_MOV,
-             dst_mask(dst, BRW_WRITEMASK_W),
-             src_imm1f(c, 1.0f));
-      break;
-
-   default: 
-      switch (interp_mode) {
-      case TGSI_INTERPOLATE_CONSTANT:
-        emit_op1(c,
-                 WM_CINTERP,
-                 dst,
-                 interp);
-        break;
-
-      case TGSI_INTERPOLATE_LINEAR:
-        emit_op2(c,
-                 WM_LINTERP,
-                 dst,
-                 interp,
-                 deltas);
-        break;
-
-      case TGSI_INTERPOLATE_PERSPECTIVE:
-        emit_op3(c,
-                 WM_PINTERP,
-                 dst,
-                 interp,
-                 deltas,
-                 get_pixel_w(c));
-        break;
-      }
-      break;
-   }
-}
-
-
-/***********************************************************************
- * Expand various instructions here to simpler forms.  
- */
-static void precalc_dst( struct brw_wm_compile *c,
-                        struct brw_fp_dst dst,
-                        struct brw_fp_src src0,
-                        struct brw_fp_src src1 )
-{
-   if (dst.writemask & BRW_WRITEMASK_Y) {      
-      /* dst.y = mul src0.y, src1.y
-       */
-      emit_op2(c,
-              TGSI_OPCODE_MUL,
-              dst_mask(dst, BRW_WRITEMASK_Y),
-              src0,
-              src1);
-   }
-
-   if (dst.writemask & BRW_WRITEMASK_XZ) {
-      /* dst.z = mov src0.zzzz
-       */
-      emit_op1(c,
-             TGSI_OPCODE_MOV,
-             dst_mask(dst, BRW_WRITEMASK_Z),
-             src_scalar(src0, Z));
-
-      /* dst.x = imm1f(1.0)
-       */
-      emit_op1(c,
-             TGSI_OPCODE_MOV,
-             dst_saturate(dst_mask(dst, BRW_WRITEMASK_X), 0),
-             src_imm1f(c, 1.0));
-   }
-   if (dst.writemask & BRW_WRITEMASK_W) {
-      /* dst.w = mov src1.w
-       */
-      emit_op1(c,
-              TGSI_OPCODE_MOV,
-              dst_mask(dst, BRW_WRITEMASK_W),
-              src1);
-   }
-}
-
-
-static void precalc_lit( struct brw_wm_compile *c,
-                        struct brw_fp_dst dst,
-                        struct brw_fp_src src0 )
-{
-   if (dst.writemask & BRW_WRITEMASK_XW) {
-      /* dst.xw = imm(1.0f)
-       */
-      emit_op1(c,
-              TGSI_OPCODE_MOV,
-              dst_saturate(dst_mask(dst, BRW_WRITEMASK_XW), 0),
-              src_imm1f(c, 1.0f));
-   }
-
-   if (dst.writemask & BRW_WRITEMASK_YZ) {
-      emit_op1(c,
-              TGSI_OPCODE_LIT,
-              dst_mask(dst, BRW_WRITEMASK_YZ),
-              src0);
-   }
-}
-
-
-/**
- * Some TEX instructions require extra code, cube map coordinate
- * normalization, or coordinate scaling for RECT textures, etc.
- * This function emits those extra instructions and the TEX
- * instruction itself.
- */
-static void precalc_tex( struct brw_wm_compile *c,
-                        struct brw_fp_dst dst,
-                        unsigned target,
-                        unsigned unit,
-                        struct brw_fp_src src0,
-                        struct brw_fp_src sampler )
-{
-   struct brw_fp_src coord;
-   struct brw_fp_dst tmp = dst_undef();
-
-   assert(unit < BRW_MAX_TEX_UNIT);
-
-   /* Cubemap: find longest component of coord vector and normalize
-    * it.
-    */
-   if (target == TGSI_TEXTURE_CUBE) {
-      struct brw_fp_src tmpsrc;
-
-      tmp = get_temp(c);
-      tmpsrc = src_reg_from_dst(tmp);
-
-      /* tmp = abs(src0) */
-      emit_op1(c, 
-              TGSI_OPCODE_MOV,
-              tmp,
-              src_abs(src0));
-
-      /* tmp.X = MAX(tmp.X, tmp.Y) */
-      emit_op2(c, TGSI_OPCODE_MAX,
-              dst_mask(tmp, BRW_WRITEMASK_X),
-              src_scalar(tmpsrc, X),
-              src_scalar(tmpsrc, Y));
-
-      /* tmp.X = MAX(tmp.X, tmp.Z) */
-      emit_op2(c, TGSI_OPCODE_MAX,
-              dst_mask(tmp, BRW_WRITEMASK_X),
-              tmpsrc,
-              src_scalar(tmpsrc, Z));
-
-      /* tmp.X = 1 / tmp.X */
-      emit_op1(c, TGSI_OPCODE_RCP,
-             dst_mask(tmp, BRW_WRITEMASK_X),
-             tmpsrc);
-
-      /* tmp = src0 * tmp.xxxx */
-      emit_op2(c, TGSI_OPCODE_MUL,
-              tmp,
-              src0,
-              src_scalar(tmpsrc, X));
-
-      coord = tmpsrc;
-   }
-   else if (target == TGSI_TEXTURE_RECT ||
-           target == TGSI_TEXTURE_SHADOWRECT) {
-      /* XXX: need a mechanism for internally generated constants.
-       */
-      coord = src0;
-   }
-   else {
-      coord = src0;
-   }
-
-   /* Need to emit YUV texture conversions by hand.  Probably need to
-    * do this here - the alternative is in brw_wm_emit.c, but the
-    * conversion requires allocating a temporary variable which we
-    * don't have the facility to do that late in the compilation.
-    */
-   if (c->key.yuvtex_mask & (1 << unit)) {
-      /* convert ycbcr to RGBA */
-      GLboolean  swap_uv = c->key.yuvtex_swap_mask & (1<<unit);
-      struct brw_fp_dst tmp = get_temp(c);
-      struct brw_fp_src tmpsrc = src_reg_from_dst(tmp);
-      struct brw_fp_src C0 = src_imm4f( c,  -.5, -.0625, -.5, 1.164 );
-      struct brw_fp_src C1 = src_imm4f( c, 1.596, -0.813, 2.018, -.391 );
-     
-      /* tmp     = TEX ...
-       */
-      emit_tex_op(c, 
-                  TGSI_OPCODE_TEX,
-                  dst_saturate(tmp, dst.saturate),
-                  unit,
-                  target,
-                  sampler.index,
-                  coord,
-                  src_undef(),
-                  src_undef());
-
-      /* tmp.xyz =  ADD TMP, C0
-       */
-      emit_op2(c, TGSI_OPCODE_ADD,
-              dst_mask(tmp, BRW_WRITEMASK_XYZ),
-              tmpsrc,
-              C0);
-
-      /* YUV.y   = MUL YUV.y, C0.w
-       */
-      emit_op2(c, TGSI_OPCODE_MUL,
-              dst_mask(tmp, BRW_WRITEMASK_Y),
-              tmpsrc,
-              src_scalar(C0, W));
-
-      /* 
-       * if (UV swaped)
-       *     RGB.xyz = MAD YUV.zzx, C1, YUV.y
-       * else
-       *     RGB.xyz = MAD YUV.xxz, C1, YUV.y
-       */
-
-      emit_op3(c, TGSI_OPCODE_MAD,
-              dst_mask(dst, BRW_WRITEMASK_XYZ),
-              ( swap_uv ? 
-                src_swizzle(tmpsrc, Z,Z,X,X) : 
-                src_swizzle(tmpsrc, X,X,Z,Z)),
-              C1,
-              src_scalar(tmpsrc, Y));
-
-      /*  RGB.y   = MAD YUV.z, C1.w, RGB.y
-       */
-      emit_op3(c,
-              TGSI_OPCODE_MAD,
-              dst_mask(dst, BRW_WRITEMASK_Y),
-              src_scalar(tmpsrc, Z),
-              src_scalar(C1, W),
-              src_scalar(src_reg_from_dst(dst), Y));
-
-      release_temp(c, tmp);
-   }
-   else {
-      /* ordinary RGBA tex instruction */
-      emit_tex_op(c, 
-                  TGSI_OPCODE_TEX,
-                  dst,
-                  unit,
-                  target,
-                  sampler.index,
-                  coord,
-                  src_undef(),
-                  src_undef());
-   }
-
-   /* XXX: add GL_EXT_texture_swizzle support to gallium -- by
-    * generating shader variants in mesa state tracker.
-    */
-
-   /* Release this temp if we ended up allocating it:
-    */
-   if (!dst_is_undef(tmp))
-      release_temp(c, tmp);
-}
-
-
-/**
- * Check if the given TXP instruction really needs the divide-by-W step.
- */
-static GLboolean projtex( struct brw_wm_compile *c,
-                         unsigned target, 
-                         struct brw_fp_src src )
-{
-   /* Only try to detect the simplest cases.  Could detect (later)
-    * cases where we are trying to emit code like RCP {1.0}, MUL x,
-    * {1.0}, and so on.
-    *
-    * More complex cases than this typically only arise from
-    * user-provided fragment programs anyway:
-    */
-   if (target == TGSI_TEXTURE_CUBE)
-      return GL_FALSE;  /* ut2004 gun rendering !?! */
-   
-   if (src.file == TGSI_FILE_INPUT && 
-       BRW_GET_SWZ(src.swizzle, W) == W &&
-       c->fp->info.input_interpolate[src.index] != TGSI_INTERPOLATE_PERSPECTIVE)
-      return GL_FALSE;
-
-   return GL_TRUE;
-}
-
-
-/**
- * Emit code for TXP.
- */
-static void precalc_txp( struct brw_wm_compile *c,
-                        struct brw_fp_dst dst,
-                        unsigned target,
-                        unsigned unit,
-                        struct brw_fp_src src0,
-                         struct brw_fp_src sampler )
-{
-   if (projtex(c, target, src0)) {
-      struct brw_fp_dst tmp = get_temp(c);
-
-      /* tmp0.w = RCP inst.arg[0][3]
-       */
-      emit_op1(c,
-             TGSI_OPCODE_RCP,
-             dst_mask(tmp, BRW_WRITEMASK_W),
-             src_scalar(src0, W));
-
-      /* tmp0.xyz =  MUL inst.arg[0], tmp0.wwww
-       */
-      emit_op2(c,
-              TGSI_OPCODE_MUL,
-              dst_mask(tmp, BRW_WRITEMASK_XYZ),
-              src0,
-              src_scalar(src_reg_from_dst(tmp), W));
-
-      /* dst = TEX tmp0
-       */
-      precalc_tex(c, 
-                 dst,
-                 target,
-                 unit,
-                 src_reg_from_dst(tmp),
-                  sampler );
-
-      release_temp(c, tmp);
-   }
-   else
-   {
-      /* dst = TEX src0
-       */
-      precalc_tex(c, dst, target, unit, src0, sampler);
-   }
-}
-
-
-/* XXX: note this returns a src_reg.
- */
-static struct brw_fp_src
-find_output_by_semantic( struct brw_wm_compile *c,
-                        unsigned semantic,
-                        unsigned index )
-{
-   const struct tgsi_shader_info *info = &c->fp->info;
-   unsigned i;
-
-   for (i = 0; i < info->num_outputs; i++)
-      if (info->output_semantic_name[i] == semantic &&
-         info->output_semantic_index[i] == index)
-        return src_reg( TGSI_FILE_OUTPUT, i );
-
-   /* If not found, return some arbitrary immediate value:
-    *
-    * XXX: this is a good idea but immediates are up generating extra
-    * curbe entries atm, as they would have in the original driver.
-    */
-   return src_reg( TGSI_FILE_OUTPUT, 0 ); /* src_imm1f(c, 1.0); */
-}
-
-
-static void emit_fb_write( struct brw_wm_compile *c )
-{
-   struct brw_fp_src payload_r0_depth = src_reg(BRW_FILE_PAYLOAD, PAYLOAD_DEPTH);
-   struct brw_fp_src outdepth = find_output_by_semantic(c, TGSI_SEMANTIC_POSITION, 0);
-   GLuint i;
-
-
-   outdepth = src_scalar(outdepth, Z);
-
-   for (i = 0 ; i < c->key.nr_cbufs; i++) {
-      struct brw_fp_src outcolor;
-      
-      outcolor = find_output_by_semantic(c, TGSI_SEMANTIC_COLOR, i);
-
-      /* Use emit_tex_op so that we can specify the inst->target
-       * field, which is abused to contain the FB write target and the
-       * EOT marker
-       */
-      emit_tex_op(c, WM_FB_WRITE,
-                 dst_undef(),
-                 (i == c->key.nr_cbufs - 1), /* EOT */
-                 i,
-                  0,            /* no sampler */
-                 outcolor,
-                 payload_r0_depth,
-                 outdepth);
-   }
-}
-
-
-static struct brw_fp_dst translate_dst( struct brw_wm_compile *c,
-                                       const struct tgsi_full_dst_register *dst,
-                                       unsigned saturate )
-{
-   struct brw_fp_dst out;
-
-   out.file = dst->Register.File;
-   out.index = dst->Register.Index;
-   out.writemask = dst->Register.WriteMask;
-   out.indirect = dst->Register.Indirect;
-   out.saturate = (saturate == TGSI_SAT_ZERO_ONE);
-   
-   if (out.indirect) {
-      assert(dst->Indirect.File == TGSI_FILE_ADDRESS);
-      assert(dst->Indirect.Index == 0);
-   }
-   
-   return out;
-}
-
-
-static struct brw_fp_src translate_src( struct brw_wm_compile *c,
-                                       const struct tgsi_full_src_register *src )
-{
-   struct brw_fp_src out;
-
-   out.file = src->Register.File;
-   out.index = src->Register.Index;
-   out.indirect = src->Register.Indirect;
-
-   out.swizzle = ((src->Register.SwizzleX << 0) |
-                 (src->Register.SwizzleY << 2) |
-                 (src->Register.SwizzleZ << 4) |
-                 (src->Register.SwizzleW << 6));
-   
-   switch (tgsi_util_get_full_src_register_sign_mode( src, 0 )) {
-   case TGSI_UTIL_SIGN_CLEAR:
-      out.abs = 1;
-      out.negate = 0;
-      break;
-
-   case TGSI_UTIL_SIGN_SET:
-      out.abs = 1;
-      out.negate = 1;
-      break;
-
-   case TGSI_UTIL_SIGN_TOGGLE:
-      out.abs = 0;
-      out.negate = 1;
-      break;
-
-   case TGSI_UTIL_SIGN_KEEP:
-   default:
-      out.abs = 0;
-      out.negate = 0;
-      break;
-   }
-
-   if (out.indirect) {
-      assert(src->Indirect.File == TGSI_FILE_ADDRESS);
-      assert(src->Indirect.Index == 0);
-   }
-   
-   return out;
-}
-
-
-
-static void emit_insn( struct brw_wm_compile *c,
-                      const struct tgsi_full_instruction *inst )
-{
-   unsigned opcode = inst->Instruction.Opcode;
-   struct brw_fp_dst dst;
-   struct brw_fp_src src[3];
-   int i;
-
-   dst = translate_dst( c, &inst->Dst[0],
-                       inst->Instruction.Saturate );
-
-   for (i = 0; i < inst->Instruction.NumSrcRegs; i++)
-      src[i] = translate_src( c, &inst->Src[i] );
-   
-   switch (opcode) {
-   case TGSI_OPCODE_ABS:
-      emit_op1(c, TGSI_OPCODE_MOV,
-              dst, 
-              src_abs(src[0]));
-      break;
-
-   case TGSI_OPCODE_SUB: 
-      emit_op2(c, TGSI_OPCODE_ADD,
-              dst,
-              src[0],
-              src_negate(src[1]));
-      break;
-
-   case TGSI_OPCODE_SCS: 
-      emit_op1(c, TGSI_OPCODE_SCS,
-              dst_mask(dst, BRW_WRITEMASK_XY),
-              src[0]);
-      break;
-        
-   case TGSI_OPCODE_DST:
-      precalc_dst(c, dst, src[0], src[1]);
-      break;
-
-   case TGSI_OPCODE_LIT:
-      precalc_lit(c, dst, src[0]);
-      break;
-
-   case TGSI_OPCODE_TEX:
-      precalc_tex(c, dst,
-                 inst->Texture.Texture,
-                 src[1].index, /* use sampler unit for tex idx */
-                 src[0],       /* coord */
-                  src[1]);      /* sampler */
-      break;
-
-   case TGSI_OPCODE_TXP:
-      precalc_txp(c, dst,
-                 inst->Texture.Texture,
-                 src[1].index, /* use sampler unit for tex idx */
-                 src[0],       /* coord */
-                  src[1]);      /* sampler */
-      break;
-
-   case TGSI_OPCODE_TXB:
-      /* XXX: TXB not done
-       */
-      precalc_tex(c, dst,
-                 inst->Texture.Texture,
-                 src[1].index, /* use sampler unit for tex idx*/
-                 src[0],
-                  src[1]);
-      break;
-
-   case TGSI_OPCODE_XPD: 
-      emit_op2(c, TGSI_OPCODE_XPD,
-              dst_mask(dst, BRW_WRITEMASK_XYZ),
-              src[0], 
-              src[1]);
-      break;
-
-   case TGSI_OPCODE_KIL: 
-      emit_op1(c, TGSI_OPCODE_KIL,
-              dst_mask(dst_undef(), 0),
-              src[0]);
-      break;
-
-   case TGSI_OPCODE_END:
-      emit_fb_write(c);
-      break;
-   default:
-      if (!c->key.has_flow_control &&
-         brw_wm_is_scalar_result(opcode))
-        emit_scalar_insn(c, opcode, dst, src[0], src[1], src[2]);
-      else
-        emit_op3(c, opcode, dst, src[0], src[1], src[2]);
-      break;
-   }
-}
-
-/**
- * Initial pass for fragment program code generation.
- * This function is used by both the GLSL and non-GLSL paths.
- */
-int brw_wm_pass_fp( struct brw_wm_compile *c )
-{
-   struct brw_fragment_shader *fs = c->fp;
-   struct tgsi_parse_context parse;
-   struct tgsi_full_instruction *inst;
-   struct tgsi_full_declaration *decl;
-   const float *imm;
-   GLuint size;
-   GLuint i;
-
-   if (BRW_DEBUG & DEBUG_WM) {
-      debug_printf("pre-fp:\n");
-      tgsi_dump(fs->tokens, 0); 
-   }
-
-   c->fp_pixel_xy = src_undef();
-   c->fp_delta_xy = src_undef();
-   c->fp_pixel_w = src_undef();
-   c->nr_fp_insns = 0;
-   c->nr_immediates = 0;
-
-
-   /* Loop over all instructions doing assorted simplifications and
-    * transformations.
-    */
-   tgsi_parse_init( &parse, fs->tokens );
-   while( !tgsi_parse_end_of_tokens( &parse ) ) {
-      tgsi_parse_token( &parse );
-
-      switch( parse.FullToken.Token.Type ) {
-      case TGSI_TOKEN_TYPE_DECLARATION:
-        /* Turn intput declarations into special WM_* instructions.
-         *
-         * XXX: For non-branching shaders, consider deferring variable
-         * initialization as late as possible to minimize register
-         * usage.  This is how the original BRW driver worked.
-         *
-         * In a branching shader, must preamble instructions at decl
-         * time, as instruction order in the shader does not
-         * correspond to the order instructions are executed in the
-         * wild.
-         *
-         * This is where special instructions such as WM_CINTERP,
-         * WM_LINTERP, WM_PINTERP and WM_WPOSXY are emitted to
-         * compute shader inputs from the payload registers and pixel
-         * position.
-         */
-         decl = &parse.FullToken.FullDeclaration;
-         if( decl->Declaration.File == TGSI_FILE_INPUT ) {
-            unsigned first, last, mask;
-            unsigned attrib;
-
-            first = decl->Range.First;
-            last = decl->Range.Last;
-            mask = decl->Declaration.UsageMask;
-
-            for (attrib = first; attrib <= last; attrib++) {
-              emit_interp(c, 
-                          attrib, 
-                          decl->Semantic.Name,
-                          decl->Declaration.Interpolate );
-            }
-         }
-        
-         break;
-
-      case TGSI_TOKEN_TYPE_IMMEDIATE:
-        /* Unlike VS programs we can probably manage fine encoding
-         * immediate values directly into the emitted EU
-         * instructions, as we probably only need to reference one
-         * float value per instruction.  Just save the data for now
-         * and use directly later.
-         */
-        i = c->nr_immediates++;
-        imm = &parse.FullToken.FullImmediate.u[i].Float;
-        size = parse.FullToken.FullImmediate.Immediate.NrTokens - 1;
-
-        if (c->nr_immediates >= BRW_WM_MAX_CONST)
-           return PIPE_ERROR_OUT_OF_MEMORY;
-
-        for (i = 0; i < size; i++)
-           c->immediate[c->nr_immediates].v[i] = imm[i];
-
-        for (; i < 4; i++)
-           c->immediate[c->nr_immediates].v[i] = 0.0;
-
-        c->immediate[c->nr_immediates].nr = size;
-        c->nr_immediates++;
-        break;
-
-      case TGSI_TOKEN_TYPE_INSTRUCTION:
-         inst = &parse.FullToken.FullInstruction;
-        emit_insn(c, inst);
-        break;
-      }
-   }
-
-   if (BRW_DEBUG & DEBUG_WM) {
-      brw_wm_print_fp_program( c, "pass_fp" );
-      debug_printf("\n");
-   }
-
-   return c->error;
-}
-
diff --git a/src/gallium/drivers/i965/brw_wm_glsl.c b/src/gallium/drivers/i965/brw_wm_glsl.c
deleted file mode 100644 (file)
index fb8e40d..0000000
+++ /dev/null
@@ -1,2032 +0,0 @@
-#include "util/u_math.h"
-
-
-#include "brw_context.h"
-#include "brw_eu.h"
-#include "brw_wm.h"
-
-
-static struct brw_reg get_dst_reg(struct brw_wm_compile *c,
-                                  const struct brw_fp_instruction *inst,
-                                  GLuint component);
-
-
-static void
-reclaim_temps(struct brw_wm_compile *c);
-
-
-/** Mark GRF register as used. */
-static void
-prealloc_grf(struct brw_wm_compile *c, int r)
-{
-   c->used_grf[r] = GL_TRUE;
-}
-
-
-/** Mark given GRF register as not in use. */
-static void
-release_grf(struct brw_wm_compile *c, int r)
-{
-   /*assert(c->used_grf[r]);*/
-   c->used_grf[r] = GL_FALSE;
-   c->first_free_grf = MIN2(c->first_free_grf, r);
-}
-
-
-/** Return index of a free GRF, mark it as used. */
-static int
-alloc_grf(struct brw_wm_compile *c)
-{
-   GLuint r;
-   for (r = c->first_free_grf; r < BRW_WM_MAX_GRF; r++) {
-      if (!c->used_grf[r]) {
-         c->used_grf[r] = GL_TRUE;
-         c->first_free_grf = r + 1;  /* a guess */
-         return r;
-      }
-   }
-
-   /* no free temps, try to reclaim some */
-   reclaim_temps(c);
-   c->first_free_grf = 0;
-
-   /* try alloc again */
-   for (r = c->first_free_grf; r < BRW_WM_MAX_GRF; r++) {
-      if (!c->used_grf[r]) {
-         c->used_grf[r] = GL_TRUE;
-         c->first_free_grf = r + 1;  /* a guess */
-         return r;
-      }
-   }
-
-   for (r = 0; r < BRW_WM_MAX_GRF; r++) {
-      assert(c->used_grf[r]);
-   }
-
-   /* really, no free GRF regs found */
-   if (!c->out_of_regs) {
-      /* print warning once per compilation */
-      debug_printf("%s: ran out of registers for fragment program", __FUNCTION__);
-      c->out_of_regs = GL_TRUE;
-   }
-
-   return -1;
-}
-
-
-/** Return number of GRF registers used */
-static int
-num_grf_used(const struct brw_wm_compile *c)
-{
-   int r;
-   for (r = BRW_WM_MAX_GRF - 1; r >= 0; r--)
-      if (c->used_grf[r])
-         return r + 1;
-   return 0;
-}
-
-
-
-/**
- * Record the mapping of a Mesa register to a hardware register.
- */
-static void set_reg(struct brw_wm_compile *c, int file, int index, 
-       int component, struct brw_reg reg)
-{
-    c->wm_regs[file][index][component].reg = reg;
-    c->wm_regs[file][index][component].inited = GL_TRUE;
-}
-
-static struct brw_reg alloc_tmp(struct brw_wm_compile *c)
-{
-    struct brw_reg reg;
-
-    /* if we need to allocate another temp, grow the tmp_regs[] array */
-    if (c->tmp_index == c->tmp_max) {
-       int r = alloc_grf(c);
-       if (r < 0) {
-          /*printf("Out of temps in %s\n", __FUNCTION__);*/
-          r = 50; /* XXX random register! */
-       }
-       c->tmp_regs[ c->tmp_max++ ] = r;
-    }
-
-    /* form the GRF register */
-    reg = brw_vec8_grf(c->tmp_regs[ c->tmp_index++ ], 0);
-    /*printf("alloc_temp %d\n", reg.nr);*/
-    assert(reg.nr < BRW_WM_MAX_GRF);
-    return reg;
-
-}
-
-/**
- * Save current temp register info.
- * There must be a matching call to release_tmps().
- */
-static int mark_tmps(struct brw_wm_compile *c)
-{
-    return c->tmp_index;
-}
-
-static struct brw_reg lookup_tmp( struct brw_wm_compile *c, int index )
-{
-    return brw_vec8_grf( c->tmp_regs[ index ], 0 );
-}
-
-static void release_tmps(struct brw_wm_compile *c, int mark)
-{
-    c->tmp_index = mark;
-}
-
-/**
- * Convert Mesa src register to brw register.
- *
- * Since we're running in SOA mode each Mesa register corresponds to four
- * hardware registers.  We allocate the hardware registers as needed here.
- *
- * \param file  register file, one of PROGRAM_x
- * \param index  register number
- * \param component  src component (X=0, Y=1, Z=2, W=3)
- * \param nr  not used?!?
- * \param neg  negate value?
- * \param abs  take absolute value?
- */
-static struct brw_reg 
-get_reg(struct brw_wm_compile *c, int file, int index, int component,
-        int nr, GLuint neg, GLuint abs)
-{
-    struct brw_reg reg;
-    switch (file) {
-       case TGSI_FILE_NULL:
-           return brw_null_reg();      
-
-       case TGSI_FILE_CONSTANT:
-       case TGSI_FILE_TEMPORARY:
-       case TGSI_FILE_INPUT:
-       case TGSI_FILE_OUTPUT:
-       case BRW_FILE_PAYLOAD:
-           break;
-
-       default:
-          debug_printf("%s: Unexpected file type\n", __FUNCTION__);
-          return brw_null_reg();
-    }
-
-    assert(index < 256);
-    assert(component < 4);
-
-    /* see if we've already allocated a HW register for this Mesa register */
-    if (c->wm_regs[file][index][component].inited) {
-       /* yes, re-use */
-       reg = c->wm_regs[file][index][component].reg;
-    }
-    else {
-       /* no, allocate new register */
-       int grf = alloc_grf(c);
-       /*printf("alloc grf %d for reg %d:%d.%d\n", grf, file, index, component);*/
-       if (grf < 0) {
-          /* totally out of temps */
-          grf = 51; /* XXX random register! */
-       }
-
-       reg = brw_vec8_grf(grf, 0);
-       /*printf("Alloc new grf %d for %d.%d\n", reg.nr, index, component);*/
-
-       set_reg(c, file, index, component, reg);
-    }
-
-    if (neg & (1 << component)) {
-       reg = negate(reg);
-    }
-    if (abs)
-       reg = brw_abs(reg);
-    return reg;
-}
-
-
-
-
-/**
- * Find first/last instruction that references each temporary register.
- */
-GLboolean
-_mesa_find_temp_intervals(const struct prog_instruction *instructions,
-                          GLuint numInstructions,
-                          GLint intBegin[MAX_PROGRAM_TEMPS],
-                          GLint intEnd[MAX_PROGRAM_TEMPS])
-{
-   struct loop_info
-   {
-      GLuint Start, End;  /**< Start, end instructions of loop */
-   };
-   struct loop_info loopStack[MAX_LOOP_NESTING];
-   GLuint loopStackDepth = 0;
-   GLuint i;
-
-   for (i = 0; i < MAX_PROGRAM_TEMPS; i++){
-      intBegin[i] = intEnd[i] = -1;
-   }
-
-   /* Scan instructions looking for temporary registers */
-   for (i = 0; i < numInstructions; i++) {
-      const struct prog_instruction *inst = instructions + i;
-      if (inst->Opcode == OPCODE_BGNLOOP) {
-         loopStack[loopStackDepth].Start = i;
-         loopStack[loopStackDepth].End = inst->BranchTarget;
-         loopStackDepth++;
-      }
-      else if (inst->Opcode == OPCODE_ENDLOOP) {
-         loopStackDepth--;
-      }
-      else if (inst->Opcode == OPCODE_CAL) {
-         return GL_FALSE;
-      }
-      else {
-         const GLuint numSrc = 3;
-         GLuint j;
-         for (j = 0; j < numSrc; j++) {
-            if (inst->SrcReg[j].File == PROGRAM_TEMPORARY) {
-               const GLuint index = inst->SrcReg[j].Index;
-               if (inst->SrcReg[j].RelAddr)
-                  return GL_FALSE;
-               update_interval(intBegin, intEnd, index, i);
-               if (loopStackDepth > 0) {
-                  /* extend temp register's interval to end of loop */
-                  GLuint loopEnd = loopStack[loopStackDepth - 1].End;
-                  update_interval(intBegin, intEnd, index, loopEnd);
-               }
-            }
-         }
-         if (inst->DstReg.File == PROGRAM_TEMPORARY) {
-            const GLuint index = inst->DstReg.Index;
-            if (inst->DstReg.RelAddr)
-               return GL_FALSE;
-            update_interval(intBegin, intEnd, index, i);
-            if (loopStackDepth > 0) {
-               /* extend temp register's interval to end of loop */
-               GLuint loopEnd = loopStack[loopStackDepth - 1].End;
-               update_interval(intBegin, intEnd, index, loopEnd);
-            }
-         }
-      }
-   }
-
-   return GL_TRUE;
-}
-
-
-/**
- * This is called if we run out of GRF registers.  Examine the live intervals
- * of temp regs in the program and free those which won't be used again.
- */
-static void
-reclaim_temps(struct brw_wm_compile *c)
-{
-   GLint intBegin[BRW_WM_MAX_TEMPS];
-   GLint intEnd[BRW_WM_MAX_TEMPS];
-   int index;
-
-   /*printf("Reclaim temps:\n");*/
-
-   _mesa_find_temp_intervals(c->fp_instructions, c->nr_fp_insns,
-                             intBegin, intEnd);
-
-   for (index = 0; index < BRW_WM_MAX_TEMPS; index++) {
-      if (intEnd[index] != -1 && intEnd[index] < c->cur_inst) {
-         /* program temp[i] can be freed */
-         int component;
-         /*printf("  temp[%d] is dead\n", index);*/
-         for (component = 0; component < 4; component++) {
-            if (c->wm_regs[TGSI_FILE_TEMPORARY][index][component].inited) {
-               int r = c->wm_regs[TGSI_FILE_TEMPORARY][index][component].reg.nr;
-               release_grf(c, r);
-               /*
-               printf("  Reclaim temp %d, reg %d at inst %d\n",
-                      index, r, c->cur_inst);
-               */
-               c->wm_regs[TGSI_FILE_TEMPORARY][index][component].inited = GL_FALSE;
-            }
-         }
-      }
-   }
-}
-
-
-
-
-/**
- * Preallocate registers.  This sets up the Mesa to hardware register
- * mapping for certain registers, such as constants (uniforms/state vars)
- * and shader inputs.
- */
-static void prealloc_reg(struct brw_wm_compile *c)
-{
-    int i, j;
-    struct brw_reg reg;
-    int urb_read_length = 0;
-    GLuint inputs = FRAG_BIT_WPOS | c->fp_interp_emitted;
-    GLuint reg_index = 0;
-
-    memset(c->used_grf, GL_FALSE, sizeof(c->used_grf));
-    c->first_free_grf = 0;
-
-    for (i = 0; i < 4; i++) {
-        if (i < c->key.nr_depth_regs) 
-            reg = brw_vec8_grf(i * 2, 0);
-        else
-            reg = brw_vec8_grf(0, 0);
-       set_reg(c, TGSI_FILE_PAYLOAD, PAYLOAD_DEPTH, i, reg);
-    }
-    reg_index += 2 * c->key.nr_depth_regs;
-
-    /* constants */
-    {
-        const GLuint nr_params = c->fp->program.Base.Parameters->NumParameters;
-        const GLuint nr_temps = c->fp->program.Base.NumTemporaries;
-
-        /* use a real constant buffer, or just use a section of the GRF? */
-        /* XXX this heuristic may need adjustment... */
-        if ((nr_params + nr_temps) * 4 + reg_index > 80)
-           c->fp->use_const_buffer = GL_TRUE;
-        else
-           c->fp->use_const_buffer = GL_FALSE;
-        /*printf("WM use_const_buffer = %d\n", c->fp->use_const_buffer);*/
-
-        if (c->fp->use_const_buffer) {
-           /* We'll use a real constant buffer and fetch constants from
-            * it with a dataport read message.
-            */
-
-           /* number of float constants in CURBE */
-           c->prog_data.nr_params = 0;
-        }
-        else {
-           const struct gl_program_parameter_list *plist = 
-              c->fp->program.Base.Parameters;
-           int index = 0;
-
-           /* number of float constants in CURBE */
-           c->prog_data.nr_params = 4 * nr_params;
-
-           /* loop over program constants (float[4]) */
-           for (i = 0; i < nr_params; i++) {
-              /* loop over XYZW channels */
-              for (j = 0; j < 4; j++, index++) {
-                 reg = brw_vec1_grf(reg_index + index / 8, index % 8);
-                 /* Save pointer to parameter/constant value.
-                  * Constants will be copied in prepare_constant_buffer()
-                  */
-                 c->prog_data.param[index] = &plist->ParameterValues[i][j];
-                 set_reg(c, TGSI_FILE_STATE_VAR, i, j, reg);
-              }
-           }
-           /* number of constant regs used (each reg is float[8]) */
-           c->nr_creg = 2 * ((4 * nr_params + 15) / 16);
-           reg_index += c->nr_creg;
-        }
-    }
-
-    /* fragment shader inputs */
-    for (i = 0; i < VERT_RESULT_MAX; i++) {
-       int fp_input;
-
-       if (i >= VERT_RESULT_VAR0)
-         fp_input = i - VERT_RESULT_VAR0 + FRAG_ATTRIB_VAR0;
-       else if (i <= VERT_RESULT_TEX7)
-         fp_input = i;
-       else
-         fp_input = -1;
-
-       if (fp_input >= 0 && inputs & (1 << fp_input)) {
-         urb_read_length = reg_index;
-         reg = brw_vec8_grf(reg_index, 0);
-         for (j = 0; j < 4; j++)
-            set_reg(c, TGSI_FILE_PAYLOAD, fp_input, j, reg);
-       }
-       if (c->key.nr_vp_outputs > i) {
-         reg_index += 2;
-       }
-    }
-
-    c->prog_data.first_curbe_grf = c->key.nr_depth_regs * 2;
-    c->prog_data.urb_read_length = urb_read_length;
-    c->prog_data.curb_read_length = c->nr_creg;
-    c->emit_mask_reg = brw_uw1_reg(BRW_GENERAL_REGISTER_FILE, reg_index, 0);
-    reg_index++;
-    c->stack =  brw_uw16_reg(BRW_GENERAL_REGISTER_FILE, reg_index, 0);
-    reg_index += 2;
-
-    /* mark GRF regs [0..reg_index-1] as in-use */
-    for (i = 0; i < reg_index; i++)
-       prealloc_grf(c, i);
-
-    /* Don't use GRF 126, 127.  Using them seems to lead to GPU lock-ups */
-    prealloc_grf(c, 126);
-    prealloc_grf(c, 127);
-
-    for (i = 0; i < c->nr_fp_insns; i++) {
-       const struct brw_fp_instruction *inst = &c->fp_instructions[i];
-       struct brw_reg dst[4];
-
-       switch (inst->Opcode) {
-       case OPCODE_TEX:
-       case OPCODE_TXB:
-           /* Allocate the channels of texture results contiguously,
-            * since they are written out that way by the sampler unit.
-            */
-           for (j = 0; j < 4; j++) {
-               dst[j] = get_dst_reg(c, inst, j);
-               if (j != 0)
-                   assert(dst[j].nr == dst[j - 1].nr + 1);
-           }
-           break;
-       default:
-           break;
-       }
-    }
-
-    /* An instruction may reference up to three constants.
-     * They'll be found in these registers.
-     * XXX alloc these on demand!
-     */
-    if (c->fp->use_const_buffer) {
-       for (i = 0; i < 3; i++) {
-          c->current_const[i].index = -1;
-          c->current_const[i].reg = brw_vec8_grf(alloc_grf(c), 0);
-       }
-    }
-#if 0
-    printf("USE CONST BUFFER? %d\n", c->fp->use_const_buffer);
-    printf("AFTER PRE_ALLOC, reg_index = %d\n", reg_index);
-#endif
-}
-
-
-/**
- * Check if any of the instruction's src registers are constants, uniforms,
- * or statevars.  If so, fetch any constants that we don't already have in
- * the three GRF slots.
- */
-static void fetch_constants(struct brw_wm_compile *c,
-                            const struct brw_fp_instruction *inst)
-{
-   struct brw_compile *p = &c->func;
-   GLuint i;
-
-   /* loop over instruction src regs */
-   for (i = 0; i < 3; i++) {
-      const struct prog_src_register *src = &inst->SrcReg[i];
-      if (src->File == TGSI_FILE_IMMEDIATE ||
-          src->File == TGSI_FILE_CONSTANT) {
-        c->current_const[i].index = src->Index;
-
-#if 0
-        printf("  fetch const[%d] for arg %d into reg %d\n",
-               src->Index, i, c->current_const[i].reg.nr);
-#endif
-
-        /* need to fetch the constant now */
-        brw_dp_READ_4(p,
-                      c->current_const[i].reg,  /* writeback dest */
-                      src->RelAddr,             /* relative indexing? */
-                      16 * src->Index,          /* byte offset */
-                      SURF_INDEX_FRAG_CONST_BUFFER/* binding table index */
-                      );
-      }
-   }
-}
-
-
-/**
- * Convert Mesa dst register to brw register.
- */
-static struct brw_reg get_dst_reg(struct brw_wm_compile *c, 
-                                  const struct brw_fp_instruction *inst,
-                                  GLuint component)
-{
-    const int nr = 1;
-    return get_reg(c, inst->DstReg.File, inst->DstReg.Index, component, nr,
-           0, 0);
-}
-
-
-static struct brw_reg
-get_src_reg_const(struct brw_wm_compile *c,
-                  const struct brw_fp_instruction *inst,
-                  GLuint srcRegIndex, GLuint component)
-{
-   /* We should have already fetched the constant from the constant
-    * buffer in fetch_constants().  Now we just have to return a
-    * register description that extracts the needed component and
-    * smears it across all eight vector components.
-    */
-   const struct prog_src_register *src = &inst->SrcReg[srcRegIndex];
-   struct brw_reg const_reg;
-
-   assert(component < 4);
-   assert(srcRegIndex < 3);
-   assert(c->current_const[srcRegIndex].index != -1);
-   const_reg = c->current_const[srcRegIndex].reg;
-
-   /* extract desired float from the const_reg, and smear */
-   const_reg = stride(const_reg, 0, 1, 0);
-   const_reg.subnr = component * 4;
-
-   if (src->Negate)
-      const_reg = negate(const_reg);
-   if (src->Abs)
-      const_reg = brw_abs(const_reg);
-
-#if 0
-   printf("  form const[%d].%d for arg %d, reg %d\n",
-          c->current_const[srcRegIndex].index,
-          component,
-          srcRegIndex,
-          const_reg.nr);
-#endif
-
-   return const_reg;
-}
-
-
-/**
- * Convert Mesa src register to brw register.
- */
-static struct brw_reg get_src_reg(struct brw_wm_compile *c, 
-                                  const struct brw_fp_instruction *inst,
-                                  GLuint srcRegIndex, GLuint channel)
-{
-    const struct prog_src_register *src = &inst->SrcReg[srcRegIndex];
-    const GLuint nr = 1;
-    const GLuint component = BRW_GET_SWZ(src->Swizzle, channel);
-
-    /* Extended swizzle terms */
-    if (component == SWIZZLE_ZERO) {
-       return brw_imm_f(0.0F);
-    }
-    else if (component == SWIZZLE_ONE) {
-       return brw_imm_f(1.0F);
-    }
-
-    if (c->fp->use_const_buffer &&
-        (src->File == TGSI_FILE_STATE_VAR ||
-         src->File == TGSI_FILE_CONSTANT ||
-         src->File == TGSI_FILE_UNIFORM)) {
-       return get_src_reg_const(c, inst, srcRegIndex, component);
-    }
-    else {
-       /* other type of source register */
-       return get_reg(c, src->File, src->Index, component, nr, 
-                      src->Negate, src->Abs);
-    }
-}
-
-
-/**
- * Same as \sa get_src_reg() but if the register is a immediate, emit
- * a brw_reg encoding the immediate.
- * Note that a brw instruction only allows one src operand to be a immediate.
- * For instructions with more than one operand, only the second can be a
- * immediate.  This means that we treat some immediates as constants
- * (which why TGSI_FILE_IMMEDIATE is checked in fetch_constants()).
- * 
- */
-static struct brw_reg get_src_reg_imm(struct brw_wm_compile *c, 
-                                      const struct brw_fp_instruction *inst,
-                                      GLuint srcRegIndex, GLuint channel)
-{
-    const struct prog_src_register *src = &inst->SrcReg[srcRegIndex];
-    if (src->File == TGSI_FILE_IMMEDIATE) {
-       /* an immediate */
-       const int component = BRW_GET_SWZ(src->Swizzle, channel);
-       const GLfloat *param =
-          c->fp->program.Base.Parameters->ParameterValues[src->Index];
-       GLfloat value = param[component];
-       if (src->Negate)
-          value = -value;
-       if (src->Abs)
-          value = FABSF(value);
-#if 0
-       printf("  form immed value %f for chan %d\n", value, channel);
-#endif
-       return brw_imm_f(value);
-    }
-    else {
-       return get_src_reg(c, inst, srcRegIndex, channel);
-    }
-}
-
-
-/**
- * Subroutines are minimal support for resusable instruction sequences.
- * They are implemented as simply as possible to minimise overhead: there
- * is no explicit support for communication between the caller and callee
- * other than saving the return address in a temporary register, nor is
- * there any automatic local storage.  This implies that great care is
- * required before attempting reentrancy or any kind of nested
- * subroutine invocations.
- */
-static void invoke_subroutine( struct brw_wm_compile *c,
-                              enum _subroutine subroutine,
-                              void (*emit)( struct brw_wm_compile * ) )
-{
-    struct brw_compile *p = &c->func;
-
-    assert( subroutine < BRW_WM_MAX_SUBROUTINE );
-    
-    if( c->subroutines[ subroutine ] ) {
-       /* subroutine previously emitted: reuse existing instructions */
-
-       int mark = mark_tmps( c );
-       struct brw_reg return_address = retype( alloc_tmp( c ),
-                                               BRW_REGISTER_TYPE_UD );
-       int here = p->nr_insn;
-       
-       brw_push_insn_state(p);
-       brw_set_mask_control(p, BRW_MASK_DISABLE);
-       brw_ADD( p, return_address, brw_ip_reg(), brw_imm_ud( 2 << 4 ) );
-
-       brw_ADD( p, brw_ip_reg(), brw_ip_reg(),
-                brw_imm_d( ( c->subroutines[ subroutine ] -
-                             here - 1 ) << 4 ) );
-       brw_pop_insn_state(p);
-
-       release_tmps( c, mark );
-    } else {
-       /* previously unused subroutine: emit, and mark for later reuse */
-       
-       int mark = mark_tmps( c );
-       struct brw_reg return_address = retype( alloc_tmp( c ),
-                                               BRW_REGISTER_TYPE_UD );
-       struct brw_instruction *calc;
-       int base = p->nr_insn;
-       
-       brw_push_insn_state(p);
-       brw_set_mask_control(p, BRW_MASK_DISABLE);
-       calc = brw_ADD( p, return_address, brw_ip_reg(), brw_imm_ud( 0 ) );
-       brw_pop_insn_state(p);
-       
-       c->subroutines[ subroutine ] = p->nr_insn;
-
-       emit( c );
-       
-       brw_push_insn_state(p);
-       brw_set_mask_control(p, BRW_MASK_DISABLE);
-       brw_MOV( p, brw_ip_reg(), return_address );
-       brw_pop_insn_state(p);
-
-       brw_set_src1( calc, brw_imm_ud( ( p->nr_insn - base ) << 4 ) );
-       
-       release_tmps( c, mark );
-    }
-}
-
-static void emit_trunc( struct brw_wm_compile *c,
-                        const struct brw_fp_instruction *inst)
-{
-    int i;
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    brw_set_saturate(p, inst->SaturateMode != SATURATE_OFF);
-    for (i = 0; i < 4; i++) {
-       if (mask & (1<<i)) {
-           struct brw_reg src, dst;
-           dst = get_dst_reg(c, inst, i);
-           src = get_src_reg(c, inst, 0, i);
-           brw_RNDZ(p, dst, src);
-       }
-    }
-    brw_set_saturate(p, 0);
-}
-
-static void emit_mov( struct brw_wm_compile *c,
-                      const struct brw_fp_instruction *inst)
-{
-    int i;
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    brw_set_saturate(p, inst->SaturateMode != SATURATE_OFF);
-    for (i = 0; i < 4; i++) {
-       if (mask & (1<<i)) {
-           struct brw_reg src, dst;
-           dst = get_dst_reg(c, inst, i);
-            /* XXX some moves from immediate value don't work reliably!!! */
-            /*src = get_src_reg_imm(c, inst, 0, i);*/
-            src = get_src_reg(c, inst, 0, i);
-           brw_MOV(p, dst, src);
-       }
-    }
-    brw_set_saturate(p, 0);
-}
-
-static void emit_pixel_xy(struct brw_wm_compile *c,
-                          const struct brw_fp_instruction *inst)
-{
-    struct brw_reg r1 = brw_vec1_grf(1, 0);
-    struct brw_reg r1_uw = retype(r1, BRW_REGISTER_TYPE_UW);
-
-    struct brw_reg dst0, dst1;
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-
-    dst0 = get_dst_reg(c, inst, 0);
-    dst1 = get_dst_reg(c, inst, 1);
-    /* Calculate pixel centers by adding 1 or 0 to each of the
-     * micro-tile coordinates passed in r1.
-     */
-    if (mask & WRITEMASK_X) {
-       brw_ADD(p,
-               vec8(retype(dst0, BRW_REGISTER_TYPE_UW)),
-               stride(suboffset(r1_uw, 4), 2, 4, 0),
-               brw_imm_v(0x10101010));
-    }
-
-    if (mask & WRITEMASK_Y) {
-       brw_ADD(p,
-               vec8(retype(dst1, BRW_REGISTER_TYPE_UW)),
-               stride(suboffset(r1_uw, 5), 2, 4, 0),
-               brw_imm_v(0x11001100));
-    }
-}
-
-static void emit_delta_xy(struct brw_wm_compile *c,
-                          const struct brw_fp_instruction *inst)
-{
-    struct brw_reg r1 = brw_vec1_grf(1, 0);
-    struct brw_reg dst0, dst1, src0, src1;
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-
-    dst0 = get_dst_reg(c, inst, 0);
-    dst1 = get_dst_reg(c, inst, 1);
-    src0 = get_src_reg(c, inst, 0, 0);
-    src1 = get_src_reg(c, inst, 0, 1);
-    /* Calc delta X,Y by subtracting origin in r1 from the pixel
-     * centers.
-     */
-    if (mask & WRITEMASK_X) {
-       brw_ADD(p,
-               dst0,
-               retype(src0, BRW_REGISTER_TYPE_UW),
-               negate(r1));
-    }
-
-    if (mask & WRITEMASK_Y) {
-       brw_ADD(p,
-               dst1,
-               retype(src1, BRW_REGISTER_TYPE_UW),
-               negate(suboffset(r1,1)));
-
-    }
-}
-
-static void fire_fb_write( struct brw_wm_compile *c,
-                           GLuint base_reg,
-                           GLuint nr,
-                           GLuint target,
-                           GLuint eot)
-{
-    struct brw_compile *p = &c->func;
-    /* Pass through control information:
-     */
-    /*  mov (8) m1.0<1>:ud   r1.0<8;8,1>:ud   { Align1 NoMask } */
-    {
-       brw_push_insn_state(p);
-       brw_set_mask_control(p, BRW_MASK_DISABLE); /* ? */
-       brw_MOV(p,
-               brw_message_reg(base_reg + 1),
-               brw_vec8_grf(1, 0));
-       brw_pop_insn_state(p);
-    }
-    /* Send framebuffer write message: */
-    brw_fb_WRITE(p,
-           retype(vec8(brw_null_reg()), BRW_REGISTER_TYPE_UW),
-           base_reg,
-           retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW),
-           target,              
-           nr,
-           0,
-           eot);
-}
-
-static void emit_fb_write(struct brw_wm_compile *c,
-                          const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    int nr = 2;
-    int channel;
-    GLuint target, eot;
-    struct brw_reg src0;
-
-    /* Reserve a space for AA - may not be needed:
-     */
-    if (c->key.aa_dest_stencil_reg)
-       nr += 1;
-
-    brw_push_insn_state(p);
-    for (channel = 0; channel < 4; channel++) {
-        src0 = get_src_reg(c,  inst, 0, channel);
-        /*  mov (8) m2.0<1>:ud   r28.0<8;8,1>:ud  { Align1 } */
-        /*  mov (8) m6.0<1>:ud   r29.0<8;8,1>:ud  { Align1 SecHalf } */
-        brw_MOV(p, brw_message_reg(nr + channel), src0);
-    }
-    /* skip over the regs populated above: */
-    nr += 8;
-    brw_pop_insn_state(p);
-
-    if (c->key.source_depth_to_render_target) {
-       if (c->key.computes_depth) {
-          src0 = get_src_reg(c, inst, 2, 2);
-          brw_MOV(p, brw_message_reg(nr), src0);
-       }
-       else {
-          src0 = get_src_reg(c, inst, 1, 1);
-          brw_MOV(p, brw_message_reg(nr), src0);
-       }
-
-       nr += 2;
-    }
-
-    if (c->key.dest_depth_reg) {
-        const GLuint comp = c->key.dest_depth_reg / 2;
-        const GLuint off = c->key.dest_depth_reg % 2;
-
-        if (off != 0) {
-            /* XXX this code needs review/testing */
-            struct brw_reg arg1_0 = get_src_reg(c, inst, 1, comp);
-            struct brw_reg arg1_1 = get_src_reg(c, inst, 1, comp+1);
-
-            brw_push_insn_state(p);
-            brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-
-            brw_MOV(p, brw_message_reg(nr), offset(arg1_0, 1));
-            /* 2nd half? */
-            brw_MOV(p, brw_message_reg(nr+1), arg1_1);
-            brw_pop_insn_state(p);
-        }
-        else
-        {
-            struct brw_reg src =  get_src_reg(c, inst, 1, 1);
-            brw_MOV(p, brw_message_reg(nr), src);
-        }
-        nr += 2;
-   }
-
-    target = inst->Aux >> 1;
-    eot = inst->Aux & 1;
-    fire_fb_write(c, 0, nr, target, eot);
-}
-
-static void emit_pixel_w( struct brw_wm_compile *c,
-                          const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    if (mask & WRITEMASK_W) {
-       struct brw_reg dst, src0, delta0, delta1;
-       struct brw_reg interp3;
-
-       dst = get_dst_reg(c, inst, 3);
-       src0 = get_src_reg(c, inst, 0, 0);
-       delta0 = get_src_reg(c, inst, 1, 0);
-       delta1 = get_src_reg(c, inst, 1, 1);
-
-       interp3 = brw_vec1_grf(src0.nr+1, 4);
-       /* Calc 1/w - just linterp wpos[3] optimized by putting the
-        * result straight into a message reg.
-        */
-       brw_LINE(p, brw_null_reg(), interp3, delta0);
-       brw_MAC(p, brw_message_reg(2), suboffset(interp3, 1), delta1);
-
-       /* Calc w */
-       brw_math_16( p, dst,
-               BRW_MATH_FUNCTION_INV,
-               BRW_MATH_SATURATE_NONE,
-               2, brw_null_reg(),
-               BRW_MATH_PRECISION_FULL);
-    }
-}
-
-static void emit_linterp(struct brw_wm_compile *c,
-                         const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    struct brw_reg interp[4];
-    struct brw_reg dst, delta0, delta1;
-    struct brw_reg src0;
-    GLuint nr, i;
-
-    src0 = get_src_reg(c, inst, 0, 0);
-    delta0 = get_src_reg(c, inst, 1, 0);
-    delta1 = get_src_reg(c, inst, 1, 1);
-    nr = src0.nr;
-
-    interp[0] = brw_vec1_grf(nr, 0);
-    interp[1] = brw_vec1_grf(nr, 4);
-    interp[2] = brw_vec1_grf(nr+1, 0);
-    interp[3] = brw_vec1_grf(nr+1, 4);
-
-    for(i = 0; i < 4; i++ ) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           brw_LINE(p, brw_null_reg(), interp[i], delta0);
-           brw_MAC(p, dst, suboffset(interp[i],1), delta1);
-       }
-    }
-}
-
-static void emit_cinterp(struct brw_wm_compile *c,
-                         const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-
-    struct brw_reg interp[4];
-    struct brw_reg dst, src0;
-    GLuint nr, i;
-
-    src0 = get_src_reg(c, inst, 0, 0);
-    nr = src0.nr;
-
-    interp[0] = brw_vec1_grf(nr, 0);
-    interp[1] = brw_vec1_grf(nr, 4);
-    interp[2] = brw_vec1_grf(nr+1, 0);
-    interp[3] = brw_vec1_grf(nr+1, 4);
-
-    for(i = 0; i < 4; i++ ) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           brw_MOV(p, dst, suboffset(interp[i],3));
-       }
-    }
-}
-
-static void emit_pinterp(struct brw_wm_compile *c,
-                         const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-
-    struct brw_reg interp[4];
-    struct brw_reg dst, delta0, delta1;
-    struct brw_reg src0, w;
-    GLuint nr, i;
-
-    src0 = get_src_reg(c, inst, 0, 0);
-    delta0 = get_src_reg(c, inst, 1, 0);
-    delta1 = get_src_reg(c, inst, 1, 1);
-    w = get_src_reg(c, inst, 2, 3);
-    nr = src0.nr;
-
-    interp[0] = brw_vec1_grf(nr, 0);
-    interp[1] = brw_vec1_grf(nr, 4);
-    interp[2] = brw_vec1_grf(nr+1, 0);
-    interp[3] = brw_vec1_grf(nr+1, 4);
-
-    for(i = 0; i < 4; i++ ) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           brw_LINE(p, brw_null_reg(), interp[i], delta0);
-           brw_MAC(p, dst, suboffset(interp[i],1), 
-                   delta1);
-           brw_MUL(p, dst, dst, w);
-       }
-    }
-}
-
-/* Sets the destination channels to 1.0 or 0.0 according to glFrontFacing. */
-static void emit_frontfacing(struct brw_wm_compile *c,
-                            const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg r1_6ud = retype(brw_vec1_grf(1, 6), BRW_REGISTER_TYPE_UD);
-    struct brw_reg dst;
-    GLuint mask = inst->DstReg.WriteMask;
-    int i;
-
-    for (i = 0; i < 4; i++) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           brw_MOV(p, dst, brw_imm_f(0.0));
-       }
-    }
-
-    /* bit 31 is "primitive is back face", so checking < (1 << 31) gives
-     * us front face
-     */
-    brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, r1_6ud, brw_imm_ud(1 << 31));
-    for (i = 0; i < 4; i++) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           brw_MOV(p, dst, brw_imm_f(1.0));
-       }
-    }
-    brw_set_predicate_control_flag_value(p, 0xff);
-}
-
-static void emit_xpd(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    int i;
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    for (i = 0; i < 4; i++) {
-       GLuint i2 = (i+2)%3;
-       GLuint i1 = (i+1)%3;
-       if (mask & (1<<i)) {
-           struct brw_reg src0, src1, dst;
-           dst = get_dst_reg(c, inst, i);
-           src0 = negate(get_src_reg(c, inst, 0, i2));
-           src1 = get_src_reg_imm(c, inst, 1, i1);
-           brw_MUL(p, brw_null_reg(), src0, src1);
-           src0 = get_src_reg(c, inst, 0, i1);
-           src1 = get_src_reg_imm(c, inst, 1, i2);
-           brw_set_saturate(p, inst->SaturateMode != SATURATE_OFF);
-           brw_MAC(p, dst, src0, src1);
-           brw_set_saturate(p, 0);
-       }
-    }
-    brw_set_saturate(p, 0);
-}
-
-static void emit_dp3(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_reg src0[3], src1[3], dst;
-    int i;
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    int dst_chan = ffs(mask & WRITEMASK_XYZW) - 1;
-
-    if (!(mask & WRITEMASK_XYZW))
-       return;
-
-    assert(is_power_of_two(mask & WRITEMASK_XYZW));
-
-    for (i = 0; i < 3; i++) {
-       src0[i] = get_src_reg(c, inst, 0, i);
-       src1[i] = get_src_reg_imm(c, inst, 1, i);
-    }
-
-    dst = get_dst_reg(c, inst, dst_chan);
-    brw_MUL(p, brw_null_reg(), src0[0], src1[0]);
-    brw_MAC(p, brw_null_reg(), src0[1], src1[1]);
-    brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-    brw_MAC(p, dst, src0[2], src1[2]);
-    brw_set_saturate(p, 0);
-}
-
-static void emit_dp4(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_reg src0[4], src1[4], dst;
-    int i;
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    int dst_chan = ffs(mask & WRITEMASK_XYZW) - 1;
-
-    if (!(mask & WRITEMASK_XYZW))
-       return;
-
-    assert(is_power_of_two(mask & WRITEMASK_XYZW));
-
-    for (i = 0; i < 4; i++) {
-       src0[i] = get_src_reg(c, inst, 0, i);
-       src1[i] = get_src_reg_imm(c, inst, 1, i);
-    }
-    dst = get_dst_reg(c, inst, dst_chan);
-    brw_MUL(p, brw_null_reg(), src0[0], src1[0]);
-    brw_MAC(p, brw_null_reg(), src0[1], src1[1]);
-    brw_MAC(p, brw_null_reg(), src0[2], src1[2]);
-    brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-    brw_MAC(p, dst, src0[3], src1[3]);
-    brw_set_saturate(p, 0);
-}
-
-static void emit_dph(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_reg src0[4], src1[4], dst;
-    int i;
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    int dst_chan = ffs(mask & WRITEMASK_XYZW) - 1;
-
-    if (!(mask & WRITEMASK_XYZW))
-       return;
-
-    assert(is_power_of_two(mask & WRITEMASK_XYZW));
-
-    for (i = 0; i < 4; i++) {
-       src0[i] = get_src_reg(c, inst, 0, i);
-       src1[i] = get_src_reg_imm(c, inst, 1, i);
-    }
-    dst = get_dst_reg(c, inst, dst_chan);
-    brw_MUL(p, brw_null_reg(), src0[0], src1[0]);
-    brw_MAC(p, brw_null_reg(), src0[1], src1[1]);
-    brw_MAC(p, dst, src0[2], src1[2]);
-    brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-    brw_ADD(p, dst, dst, src1[3]);
-    brw_set_saturate(p, 0);
-}
-
-/**
- * Emit a scalar instruction, like RCP, RSQ, LOG, EXP.
- * Note that the result of the function is smeared across the dest
- * register's X, Y, Z and W channels (subject to writemasking of course).
- */
-static void emit_math1(struct brw_wm_compile *c,
-                       const struct brw_fp_instruction *inst, GLuint func)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg src0, dst;
-    GLuint mask = inst->DstReg.WriteMask;
-    int dst_chan = ffs(mask & WRITEMASK_XYZW) - 1;
-
-    if (!(mask & WRITEMASK_XYZW))
-       return;
-
-    assert(is_power_of_two(mask & WRITEMASK_XYZW));
-
-    /* Get first component of source register */
-    dst = get_dst_reg(c, inst, dst_chan);
-    src0 = get_src_reg(c, inst, 0, 0);
-
-    brw_MOV(p, brw_message_reg(2), src0);
-    brw_math(p,
-             dst,
-             func,
-             (inst->SaturateMode != SATURATE_OFF) ? BRW_MATH_SATURATE_SATURATE : BRW_MATH_SATURATE_NONE,
-             2,
-             brw_null_reg(),
-             BRW_MATH_DATA_VECTOR,
-             BRW_MATH_PRECISION_FULL);
-}
-
-static void emit_rcp(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_math1(c, inst, BRW_MATH_FUNCTION_INV);
-}
-
-static void emit_rsq(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_math1(c, inst, BRW_MATH_FUNCTION_RSQ);
-}
-
-static void emit_sin(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_math1(c, inst, BRW_MATH_FUNCTION_SIN);
-}
-
-static void emit_cos(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_math1(c, inst, BRW_MATH_FUNCTION_COS);
-}
-
-static void emit_ex2(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_math1(c, inst, BRW_MATH_FUNCTION_EXP);
-}
-
-static void emit_lg2(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_math1(c, inst, BRW_MATH_FUNCTION_LOG);
-}
-
-static void emit_add(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg src0, src1, dst;
-    GLuint mask = inst->DstReg.WriteMask;
-    int i;
-    brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-    for (i = 0 ; i < 4; i++) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           src0 = get_src_reg(c, inst, 0, i);
-           src1 = get_src_reg_imm(c, inst, 1, i);
-           brw_ADD(p, dst, src0, src1);
-       }
-    }
-    brw_set_saturate(p, 0);
-}
-
-static void emit_arl(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg src0, addr_reg;
-    brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-    addr_reg = brw_uw8_reg(BRW_ARCHITECTURE_REGISTER_FILE, 
-                           BRW_ARF_ADDRESS, 0);
-    src0 = get_src_reg(c, inst, 0, 0); /* channel 0 */
-    brw_MOV(p, addr_reg, src0);
-    brw_set_saturate(p, 0);
-}
-
-
-static void emit_mul(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg src0, src1, dst;
-    GLuint mask = inst->DstReg.WriteMask;
-    int i;
-    brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-    for (i = 0 ; i < 4; i++) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           src0 = get_src_reg(c, inst, 0, i);
-           src1 = get_src_reg_imm(c, inst, 1, i);
-           brw_MUL(p, dst, src0, src1);
-       }
-    }
-    brw_set_saturate(p, 0);
-}
-
-static void emit_frc(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg src0, dst;
-    GLuint mask = inst->DstReg.WriteMask;
-    int i;
-    brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-    for (i = 0 ; i < 4; i++) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           src0 = get_src_reg_imm(c, inst, 0, i);
-           brw_FRC(p, dst, src0);
-       }
-    }
-    if (inst->SaturateMode != SATURATE_OFF)
-       brw_set_saturate(p, 0);
-}
-
-static void emit_flr(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg src0, dst;
-    GLuint mask = inst->DstReg.WriteMask;
-    int i;
-    brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-    for (i = 0 ; i < 4; i++) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           src0 = get_src_reg_imm(c, inst, 0, i);
-           brw_RNDD(p, dst, src0);
-       }
-    }
-    brw_set_saturate(p, 0);
-}
-
-
-static void emit_min_max(struct brw_wm_compile *c,
-                         const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    const GLuint mask = inst->DstReg.WriteMask;
-    const int mark = mark_tmps(c);
-    int i;
-    brw_push_insn_state(p);
-    for (i = 0; i < 4; i++) {
-       if (mask & (1<<i)) {
-            struct brw_reg real_dst = get_dst_reg(c, inst, i);
-           struct brw_reg src0 = get_src_reg(c, inst, 0, i);
-           struct brw_reg src1 = get_src_reg(c, inst, 1, i);
-            struct brw_reg dst;
-            /* if dst==src0 or dst==src1 we need to use a temp reg */
-            GLboolean use_temp = brw_same_reg(dst, src0) ||
-                                 brw_same_reg(dst, src1);
-            if (use_temp)
-               dst = alloc_tmp(c);
-            else
-               dst = real_dst;
-
-            /*
-            printf("  Min/max: dst %d  src0 %d  src1 %d\n",
-                   dst.nr, src0.nr, src1.nr);
-            */
-           brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-           brw_MOV(p, dst, src0);
-           brw_set_saturate(p, 0);
-
-            if (inst->Opcode == OPCODE_MIN)
-               brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_L, src1, src0);
-            else
-               brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_G, src1, src0);
-
-           brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-           brw_set_predicate_control(p, BRW_PREDICATE_NORMAL);
-           brw_MOV(p, dst, src1);
-           brw_set_saturate(p, 0);
-           brw_set_predicate_control_flag_value(p, 0xff);
-            if (use_temp)
-               brw_MOV(p, real_dst, dst);
-       }
-    }
-    brw_pop_insn_state(p);
-    release_tmps(c, mark);
-}
-
-static void emit_pow(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg dst, src0, src1;
-    GLuint mask = inst->DstReg.WriteMask;
-    int dst_chan = ffs(mask & WRITEMASK_XYZW) - 1;
-
-    if (!(mask & WRITEMASK_XYZW))
-       return;
-
-    assert(is_power_of_two(mask & WRITEMASK_XYZW));
-
-    dst = get_dst_reg(c, inst, dst_chan);
-    src0 = get_src_reg_imm(c, inst, 0, 0);
-    src1 = get_src_reg_imm(c, inst, 1, 0);
-
-    brw_MOV(p, brw_message_reg(2), src0);
-    brw_MOV(p, brw_message_reg(3), src1);
-
-    brw_math(p,
-           dst,
-           BRW_MATH_FUNCTION_POW,
-           (inst->SaturateMode != SATURATE_OFF) ? BRW_MATH_SATURATE_SATURATE : BRW_MATH_SATURATE_NONE,
-           2,
-           brw_null_reg(),
-           BRW_MATH_DATA_VECTOR,
-           BRW_MATH_PRECISION_FULL);
-}
-
-static void emit_lrp(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    struct brw_reg dst, tmp1, tmp2, src0, src1, src2;
-    int i;
-    int mark = mark_tmps(c);
-    for (i = 0; i < 4; i++) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           src0 = get_src_reg(c, inst, 0, i);
-
-           src1 = get_src_reg_imm(c, inst, 1, i);
-
-           if (src1.nr == dst.nr) {
-               tmp1 = alloc_tmp(c);
-               brw_MOV(p, tmp1, src1);
-           } else
-               tmp1 = src1;
-
-           src2 = get_src_reg(c, inst, 2, i);
-           if (src2.nr == dst.nr) {
-               tmp2 = alloc_tmp(c);
-               brw_MOV(p, tmp2, src2);
-           } else
-               tmp2 = src2;
-
-           brw_ADD(p, dst, negate(src0), brw_imm_f(1.0));
-           brw_MUL(p, brw_null_reg(), dst, tmp2);
-           brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-           brw_MAC(p, dst, src0, tmp1);
-           brw_set_saturate(p, 0);
-       }
-       release_tmps(c, mark);
-    }
-}
-
-/**
- * For GLSL shaders, this KIL will be unconditional.
- * It may be contained inside an IF/ENDIF structure of course.
- */
-static void emit_kil(struct brw_wm_compile *c)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg depth = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW);
-    brw_push_insn_state(p);
-    brw_set_mask_control(p, BRW_MASK_DISABLE);
-    brw_NOT(p, c->emit_mask_reg, brw_mask_reg(1)); //IMASK
-    brw_AND(p, depth, c->emit_mask_reg, depth);
-    brw_pop_insn_state(p);
-}
-
-static void emit_mad(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    struct brw_reg dst, src0, src1, src2;
-    int i;
-
-    for (i = 0; i < 4; i++) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           src0 = get_src_reg(c, inst, 0, i);
-           src1 = get_src_reg_imm(c, inst, 1, i);
-           src2 = get_src_reg_imm(c, inst, 2, i);
-           brw_MUL(p, dst, src0, src1);
-
-           brw_set_saturate(p, (inst->SaturateMode != SATURATE_OFF) ? 1 : 0);
-           brw_ADD(p, dst, dst, src2);
-           brw_set_saturate(p, 0);
-       }
-    }
-}
-
-static void emit_sop(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst, GLuint cond)
-{
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    struct brw_reg dst, src0, src1;
-    int i;
-
-    for (i = 0; i < 4; i++) {
-       if (mask & (1<<i)) {
-           dst = get_dst_reg(c, inst, i);
-           src0 = get_src_reg(c, inst, 0, i);
-           src1 = get_src_reg_imm(c, inst, 1, i);
-           brw_push_insn_state(p);
-           brw_CMP(p, brw_null_reg(), cond, src0, src1);
-           brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-           brw_MOV(p, dst, brw_imm_f(0.0));
-           brw_set_predicate_control(p, BRW_PREDICATE_NORMAL);
-           brw_MOV(p, dst, brw_imm_f(1.0));
-           brw_pop_insn_state(p);
-       }
-    }
-}
-
-static void emit_slt(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_sop(c, inst, BRW_CONDITIONAL_L);
-}
-
-static void emit_sle(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_sop(c, inst, BRW_CONDITIONAL_LE);
-}
-
-static void emit_sgt(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_sop(c, inst, BRW_CONDITIONAL_G);
-}
-
-static void emit_sge(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_sop(c, inst, BRW_CONDITIONAL_GE);
-}
-
-static void emit_seq(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_sop(c, inst, BRW_CONDITIONAL_EQ);
-}
-
-static void emit_sne(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    emit_sop(c, inst, BRW_CONDITIONAL_NEQ);
-}
-
-static INLINE struct brw_reg high_words( struct brw_reg reg )
-{
-    return stride( suboffset( retype( reg, BRW_REGISTER_TYPE_W ), 1 ),
-                  0, 8, 2 );
-}
-
-static INLINE struct brw_reg low_words( struct brw_reg reg )
-{
-    return stride( retype( reg, BRW_REGISTER_TYPE_W ), 0, 8, 2 );
-}
-
-static INLINE struct brw_reg even_bytes( struct brw_reg reg )
-{
-    return stride( retype( reg, BRW_REGISTER_TYPE_B ), 0, 16, 2 );
-}
-
-static INLINE struct brw_reg odd_bytes( struct brw_reg reg )
-{
-    return stride( suboffset( retype( reg, BRW_REGISTER_TYPE_B ), 1 ),
-                  0, 16, 2 );
-}
-
-
-    
-static void emit_wpos_xy(struct brw_wm_compile *c,
-                         const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    GLuint mask = inst->DstReg.WriteMask;
-    struct brw_reg src0[2], dst[2];
-
-    dst[0] = get_dst_reg(c, inst, 0);
-    dst[1] = get_dst_reg(c, inst, 1);
-
-    src0[0] = get_src_reg(c, inst, 0, 0);
-    src0[1] = get_src_reg(c, inst, 0, 1);
-
-    /* Calculate the pixel offset from window bottom left into destination
-     * X and Y channels.
-     */
-    if (mask & WRITEMASK_X) {
-       /* X' = X */
-       brw_MOV(p,
-               dst[0],
-               retype(src0[0], BRW_REGISTER_TYPE_W));
-    }
-
-    if (mask & WRITEMASK_Y) {
-       /* Y' = height - 1 - Y */
-       brw_ADD(p,
-               dst[1],
-               negate(retype(src0[1], BRW_REGISTER_TYPE_W)),
-               brw_imm_d(c->key.drawable_height - 1));
-    }
-}
-
-/* TODO
-   BIAS on SIMD8 not working yet...
- */    
-static void emit_txb(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg dst[4], src[4], payload_reg;
-    /* Note: tex_unit was already looked up through SamplerTextures[] */
-    const GLuint unit = inst->tex_unit;
-    GLuint i;
-    GLuint msg_type;
-
-    assert(unit < BRW_MAX_TEX_UNIT);
-
-    payload_reg = get_reg(c, TGSI_FILE_PAYLOAD, PAYLOAD_DEPTH, 0, 1, 0, 0);
-
-    for (i = 0; i < 4; i++) 
-       dst[i] = get_dst_reg(c, inst, i);
-    for (i = 0; i < 4; i++)
-       src[i] = get_src_reg(c, inst, 0, i);
-
-    switch (inst->tex_target) {
-       case TEXTURE_1D_INDEX:
-           brw_MOV(p, brw_message_reg(2), src[0]);         /* s coord */
-           brw_MOV(p, brw_message_reg(3), brw_imm_f(0));   /* t coord */
-           brw_MOV(p, brw_message_reg(4), brw_imm_f(0));   /* r coord */
-           break;
-       case TEXTURE_2D_INDEX:
-       case TEXTURE_RECT_INDEX:
-           brw_MOV(p, brw_message_reg(2), src[0]);
-           brw_MOV(p, brw_message_reg(3), src[1]);
-           brw_MOV(p, brw_message_reg(4), brw_imm_f(0));
-           break;
-       case TEXTURE_3D_INDEX:
-       case TEXTURE_CUBE_INDEX:
-           brw_MOV(p, brw_message_reg(2), src[0]);
-           brw_MOV(p, brw_message_reg(3), src[1]);
-           brw_MOV(p, brw_message_reg(4), src[2]);
-           break;
-       default:
-            /* invalid target */
-            abort();
-    }
-    brw_MOV(p, brw_message_reg(5), src[3]);          /* bias */
-    brw_MOV(p, brw_message_reg(6), brw_imm_f(0));    /* ref (unused?) */
-
-    if (p->brw->gen == 5) {
-        msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_BIAS_IGDNG;
-    } else {
-        /* Does it work well on SIMD8? */
-        msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS;
-    }
-
-    brw_SAMPLE(p,
-               retype(vec8(dst[0]), BRW_REGISTER_TYPE_UW),  /* dest */
-               1,                                           /* msg_reg_nr */
-               retype(payload_reg, BRW_REGISTER_TYPE_UW),   /* src0 */
-               SURF_INDEX_TEXTURE(unit),
-               unit,                                        /* sampler */
-               inst->DstReg.WriteMask,                      /* writemask */
-               msg_type,                                    /* msg_type */
-               4,                                           /* response_length */
-               4,                                           /* msg_length */
-               0,                                           /* eot */
-               1,
-               BRW_SAMPLER_SIMD_MODE_SIMD8);   
-}
-
-
-static void emit_tex(struct brw_wm_compile *c,
-                     const struct brw_fp_instruction *inst)
-{
-    struct brw_compile *p = &c->func;
-    struct brw_reg dst[4], src[4], payload_reg;
-    /* Note: tex_unit was already looked up through SamplerTextures[] */
-    const GLuint unit = inst->tex_unit;
-    GLuint msg_len;
-    GLuint i, nr;
-    GLuint emit;
-    GLboolean shadow = (c->key.shadowtex_mask & (1<<unit)) ? 1 : 0;
-    GLuint msg_type;
-
-    assert(unit < BRW_MAX_TEX_UNIT);
-
-    payload_reg = get_reg(c, TGSI_FILE_PAYLOAD, PAYLOAD_DEPTH, 0, 1, 0, 0);
-
-    for (i = 0; i < 4; i++) 
-       dst[i] = get_dst_reg(c, inst, i);
-    for (i = 0; i < 4; i++)
-       src[i] = get_src_reg(c, inst, 0, i);
-
-    switch (inst->tex_target) {
-       case TEXTURE_1D_INDEX:
-           emit = WRITEMASK_X;
-           nr = 1;
-           break;
-       case TEXTURE_2D_INDEX:
-       case TEXTURE_RECT_INDEX:
-           emit = WRITEMASK_XY;
-           nr = 2;
-           break;
-       case TEXTURE_3D_INDEX:
-       case TEXTURE_CUBE_INDEX:
-           emit = WRITEMASK_XYZ;
-           nr = 3;
-           break;
-       default:
-           /* invalid target */
-           abort();
-    }
-    msg_len = 1;
-
-    /* move/load S, T, R coords */
-    for (i = 0; i < nr; i++) {
-       static const GLuint swz[4] = {0,1,2,2};
-       if (emit & (1<<i))
-           brw_MOV(p, brw_message_reg(msg_len+1), src[swz[i]]);
-       else
-           brw_MOV(p, brw_message_reg(msg_len+1), brw_imm_f(0));
-       msg_len += 1;
-    }
-
-    if (shadow) {
-       brw_MOV(p, brw_message_reg(5), brw_imm_f(0));  /* lod / bias */
-       brw_MOV(p, brw_message_reg(6), src[2]);        /* ref value / R coord */
-    }
-
-    if (p->brw->gen == 5) {
-        if (shadow)
-            msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_COMPARE_IGDNG;
-        else
-            msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_IGDNG;
-    } else {
-        /* Does it work for shadow on SIMD8 ? */
-        msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE;
-    }
-    
-    brw_SAMPLE(p,
-               retype(vec8(dst[0]), BRW_REGISTER_TYPE_UW), /* dest */
-               1,                                          /* msg_reg_nr */
-               retype(payload_reg, BRW_REGISTER_TYPE_UW),  /* src0 */
-               SURF_INDEX_TEXTURE(unit),
-               unit,                                       /* sampler */
-               inst->DstReg.WriteMask,                     /* writemask */
-               msg_type,                                   /* msg_type */
-               4,                                          /* response_length */
-               shadow ? 6 : 4,                             /* msg_length */
-               0,                                          /* eot */
-               1,
-               BRW_SAMPLER_SIMD_MODE_SIMD8);   
-
-    if (shadow)
-       brw_MOV(p, dst[3], brw_imm_f(1.0));
-}
-
-
-/**
- * Resolve subroutine calls after code emit is done.
- */
-static void post_wm_emit( struct brw_wm_compile *c )
-{
-    brw_resolve_cals(&c->func);
-}
-
-static void
-get_argument_regs(struct brw_wm_compile *c,
-                 const struct brw_fp_instruction *inst,
-                 int index,
-                 struct brw_reg *regs,
-                 int mask)
-{
-    int i;
-
-    for (i = 0; i < 4; i++) {
-       if (mask & (1 << i))
-           regs[i] = get_src_reg(c, inst, index, i);
-    }
-}
-
-static void brw_wm_emit_branching_shader(struct brw_context *brw, struct brw_wm_compile *c)
-{
-#define MAX_IF_DEPTH 32
-#define MAX_LOOP_DEPTH 32
-    struct brw_instruction *if_inst[MAX_IF_DEPTH], *loop_inst[MAX_LOOP_DEPTH];
-    GLuint i, if_depth = 0, loop_depth = 0;
-    struct brw_compile *p = &c->func;
-    struct brw_indirect stack_index = brw_indirect(0, 0);
-
-    c->out_of_regs = GL_FALSE;
-
-    prealloc_reg(c);
-    brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-    brw_MOV(p, get_addr_reg(stack_index), brw_address(c->stack));
-
-    for (i = 0; i < c->nr_fp_insns; i++) {
-        const struct brw_fp_instruction *inst = &c->fp_instructions[i];
-       int dst_flags;
-       struct brw_reg args[3][4], dst[4];
-       int j;
-
-        c->cur_inst = i;
-
-#if 0
-        debug_printf("Inst %d: ", i);
-        _mesa_print_instruction(inst);
-#endif
-
-        /* fetch any constants that this instruction needs */
-        if (c->fp->use_const_buffer)
-           fetch_constants(c, inst);
-
-       if (inst->CondUpdate)
-           brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ);
-       else
-           brw_set_conditionalmod(p, BRW_CONDITIONAL_NONE);
-
-       dst_flags = inst->DstReg.WriteMask;
-       if (inst->SaturateMode == SATURATE_ZERO_ONE)
-           dst_flags |= SATURATE;
-
-       switch (inst->Opcode) {
-           case WM_PIXELXY:
-               emit_pixel_xy(c, inst);
-               break;
-           case WM_DELTAXY: 
-               emit_delta_xy(c, inst);
-               break;
-           case WM_PIXELW:
-               emit_pixel_w(c, inst);
-               break;  
-           case WM_LINTERP:
-               emit_linterp(c, inst);
-               break;
-           case WM_PINTERP:
-               emit_pinterp(c, inst);
-               break;
-           case WM_CINTERP:
-               emit_cinterp(c, inst);
-               break;
-           case WM_WPOSXY:
-               emit_wpos_xy(c, inst);
-               break;
-           case WM_FB_WRITE:
-               emit_fb_write(c, inst);
-               break;
-           case WM_FRONTFACING:
-               emit_frontfacing(c, inst);
-               break;
-           case OPCODE_ADD:
-               emit_add(c, inst);
-               break;
-           case OPCODE_ARL:
-               emit_arl(c, inst);
-               break;
-           case OPCODE_FRC:
-               emit_frc(c, inst);
-               break;
-           case OPCODE_FLR:
-               emit_flr(c, inst);
-               break;
-           case OPCODE_LRP:
-               emit_lrp(c, inst);
-               break;
-           case OPCODE_TRUNC:
-               emit_trunc(c, inst);
-               break;
-           case OPCODE_MOV:
-               emit_mov(c, inst);
-               break;
-           case OPCODE_DP3:
-               emit_dp3(c, inst);
-               break;
-           case OPCODE_DP4:
-               emit_dp4(c, inst);
-               break;
-           case OPCODE_XPD:
-               emit_xpd(c, inst);
-               break;
-           case OPCODE_DPH:
-               emit_dph(c, inst);
-               break;
-           case OPCODE_RCP:
-               emit_rcp(c, inst);
-               break;
-           case OPCODE_RSQ:
-               emit_rsq(c, inst);
-               break;
-           case OPCODE_SIN:
-               emit_sin(c, inst);
-               break;
-           case OPCODE_COS:
-               emit_cos(c, inst);
-               break;
-           case OPCODE_EX2:
-               emit_ex2(c, inst);
-               break;
-           case OPCODE_LG2:
-               emit_lg2(c, inst);
-               break;
-           case OPCODE_MIN:    
-           case OPCODE_MAX:    
-               emit_min_max(c, inst);
-               break;
-           case OPCODE_DDX:
-           case OPCODE_DDY:
-               for (j = 0; j < 4; j++) {
-                   if (inst->DstReg.WriteMask & (1 << j))
-                       dst[j] = get_dst_reg(c, inst, j);
-                   else
-                       dst[j] = brw_null_reg();
-               }
-               get_argument_regs(c, inst, 0, args[0], WRITEMASK_XYZW);
-               emit_ddxy(p, dst, dst_flags, (inst->Opcode == OPCODE_DDX),
-                         args[0]);
-                break;
-           case OPCODE_SLT:
-               emit_slt(c, inst);
-               break;
-           case OPCODE_SLE:
-               emit_sle(c, inst);
-               break;
-           case OPCODE_SGT:
-               emit_sgt(c, inst);
-               break;
-           case OPCODE_SGE:
-               emit_sge(c, inst);
-               break;
-           case OPCODE_SEQ:
-               emit_seq(c, inst);
-               break;
-           case OPCODE_SNE:
-               emit_sne(c, inst);
-               break;
-           case OPCODE_MUL:
-               emit_mul(c, inst);
-               break;
-           case OPCODE_POW:
-               emit_pow(c, inst);
-               break;
-           case OPCODE_MAD:
-               emit_mad(c, inst);
-               break;
-           case OPCODE_TEX:
-               emit_tex(c, inst);
-               break;
-           case OPCODE_TXB:
-               emit_txb(c, inst);
-               break;
-           case OPCODE_KIL_NV:
-               emit_kil(c);
-               break;
-           case OPCODE_IF:
-               assert(if_depth < MAX_IF_DEPTH);
-               if_inst[if_depth++] = brw_IF(p, BRW_EXECUTE_8);
-               break;
-           case OPCODE_ELSE:
-               if_inst[if_depth-1]  = brw_ELSE(p, if_inst[if_depth-1]);
-               break;
-           case OPCODE_ENDIF:
-               assert(if_depth > 0);
-               brw_ENDIF(p, if_inst[--if_depth]);
-               break;
-           case OPCODE_BGNSUB:
-               brw_save_label(p, inst->Comment, p->nr_insn);
-               break;
-           case OPCODE_ENDSUB:
-               /* no-op */
-               break;
-           case OPCODE_CAL: 
-               brw_push_insn_state(p);
-               brw_set_mask_control(p, BRW_MASK_DISABLE);
-                brw_set_access_mode(p, BRW_ALIGN_1);
-                brw_ADD(p, deref_1ud(stack_index, 0), brw_ip_reg(), brw_imm_d(3*16));
-                brw_set_access_mode(p, BRW_ALIGN_16);
-                brw_ADD(p, get_addr_reg(stack_index),
-                         get_addr_reg(stack_index), brw_imm_d(4));
-               brw_save_call(&c->func, inst->label, p->nr_insn);
-                brw_ADD(p, brw_ip_reg(), brw_ip_reg(), brw_imm_d(1*16));
-                brw_pop_insn_state(p);
-               break;
-
-           case OPCODE_RET:
-               brw_push_insn_state(p);
-               brw_set_mask_control(p, BRW_MASK_DISABLE);
-                brw_ADD(p, get_addr_reg(stack_index),
-                        get_addr_reg(stack_index), brw_imm_d(-4));
-                brw_set_access_mode(p, BRW_ALIGN_1);
-                brw_MOV(p, brw_ip_reg(), deref_1ud(stack_index, 0));
-                brw_set_access_mode(p, BRW_ALIGN_16);
-               brw_pop_insn_state(p);
-
-               break;
-           case OPCODE_BGNLOOP:
-                /* XXX may need to invalidate the current_constant regs */
-               loop_inst[loop_depth++] = brw_DO(p, BRW_EXECUTE_8);
-               break;
-           case OPCODE_BRK:
-               brw_BREAK(p);
-               brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-               break;
-           case OPCODE_CONT:
-               brw_CONT(p);
-               brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-               break;
-           case OPCODE_ENDLOOP: 
-               {
-                  struct brw_instruction *inst0, *inst1;
-                  GLuint br = 1;
-
-                  if (brw->gen == 5)
-                     br = 2;
-                  loop_depth--;
-                  inst0 = inst1 = brw_WHILE(p, loop_inst[loop_depth]);
-                  /* patch all the BREAK/CONT instructions from last BGNLOOP */
-                  while (inst0 > loop_inst[loop_depth]) {
-                     inst0--;
-                     if (inst0->header.opcode == BRW_OPCODE_BREAK) {
-                       inst0->bits3.if_else.jump_count = br * (inst1 - inst0 + 1);
-                       inst0->bits3.if_else.pop_count = 0;
-                     }
-                     else if (inst0->header.opcode == BRW_OPCODE_CONTINUE) {
-                        inst0->bits3.if_else.jump_count = br * (inst1 - inst0);
-                        inst0->bits3.if_else.pop_count = 0;
-                     }
-                  }
-               }
-               break;
-           default:
-               debug_printf("unsupported IR in fragment shader %d\n",
-                       inst->Opcode);
-       }
-
-       if (inst->CondUpdate)
-           brw_set_predicate_control(p, BRW_PREDICATE_NORMAL);
-       else
-           brw_set_predicate_control(p, BRW_PREDICATE_NONE);
-    }
-    post_wm_emit(c);
-
-    if (BRW_DEBUG & DEBUG_WM) {
-      debug_printf("wm-native:\n");
-      brw_disasm(stderr, p->store, p->nr_insn);
-    }
-}
-
-/**
- * Do GPU code generation for shaders that use GLSL features such as
- * flow control.  Other shaders will be compiled with the 
- */
-void brw_wm_branching_shader_emit(struct brw_context *brw, struct brw_wm_compile *c)
-{
-    if (BRW_DEBUG & DEBUG_WM) {
-       debug_printf("%s:\n", __FUNCTION__);
-    }
-
-    /* initial instruction translation/simplification */
-    brw_wm_pass_fp(c);
-
-    /* actual code generation */
-    brw_wm_emit_branching_shader(brw, c);
-
-    if (BRW_DEBUG & DEBUG_WM) {
-        brw_wm_print_program(c, "brw_wm_branching_shader_emit done");
-    }
-
-    c->prog_data.total_grf = num_grf_used(c);
-    c->prog_data.total_scratch = 0;
-}
diff --git a/src/gallium/drivers/i965/brw_wm_iz.c b/src/gallium/drivers/i965/brw_wm_iz.c
deleted file mode 100644 (file)
index 6f1e9fc..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-                
-
-#include "brw_wm.h"
-
-
-#undef P                       /* prompted depth */
-#undef C                       /* computed */
-#undef N                       /* non-promoted? */
-
-#define P 0
-#define C 1
-#define N 2
-
-const struct {
-   GLuint mode:2;
-   GLuint sd_present:1;
-   GLuint sd_to_rt:1;
-   GLuint dd_present:1;
-   GLuint ds_present:1;
-} wm_iz_table[IZ_BIT_MAX] =
-{
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { N, 1, 1, 0, 0 }, 
- { N, 0, 1, 0, 0 }, 
- { N, 0, 1, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { C, 0, 1, 1, 0 }, 
- { C, 0, 1, 1, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { N, 1, 1, 0, 0 }, 
- { C, 0, 1, 1, 0 }, 
- { C, 0, 1, 1, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { N, 1, 1, 0, 0 }, 
- { N, 0, 1, 0, 0 }, 
- { N, 0, 1, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { C, 0, 1, 1, 0 }, 
- { C, 0, 1, 1, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { N, 1, 1, 0, 0 }, 
- { C, 0, 1, 1, 0 }, 
- { C, 0, 1, 1, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { N, 1, 1, 0, 1 }, 
- { N, 0, 1, 0, 1 }, 
- { N, 0, 1, 0, 1 }, 
- { P, 0, 0, 0, 0 }, 
- { P, 0, 0, 0, 0 }, 
- { C, 0, 1, 1, 1 }, 
- { C, 0, 1, 1, 1 }, 
- { P, 0, 0, 0, 0 }, 
- { N, 1, 1, 0, 1 }, 
- { C, 0, 1, 1, 1 }, 
- { C, 0, 1, 1, 1 }, 
- { P, 0, 0, 0, 0 }, 
- { C, 0, 0, 0, 1 }, 
- { P, 0, 0, 0, 0 }, 
- { C, 0, 1, 0, 1 }, 
- { P, 0, 0, 0, 0 }, 
- { C, 1, 1, 0, 1 }, 
- { C, 0, 1, 0, 1 }, 
- { C, 0, 1, 0, 1 }, 
- { P, 0, 0, 0, 0 }, 
- { C, 1, 1, 1, 1 }, 
- { C, 0, 1, 1, 1 }, 
- { C, 0, 1, 1, 1 }, 
- { P, 0, 0, 0, 0 }, 
- { C, 1, 1, 1, 1 }, 
- { C, 0, 1, 1, 1 }, 
- { C, 0, 1, 1, 1 } 
-};
-
-/**
- * \param line_aa  AA_NEVER, AA_ALWAYS or AA_SOMETIMES
- * \param lookup  bitmask of IZ_* flags
- */
-void brw_wm_lookup_iz( GLuint line_aa,
-                      GLuint lookup,
-                      GLboolean ps_uses_depth,
-                      struct brw_wm_prog_key *key )
-{
-   GLuint reg = 2;
-
-   assert (lookup < IZ_BIT_MAX);
-      
-   if (lookup & IZ_PS_COMPUTES_DEPTH_BIT)
-      key->computes_depth = 1;
-
-   if (wm_iz_table[lookup].sd_present || ps_uses_depth) {
-      key->source_depth_reg = reg;
-      reg += 2;
-   }
-
-   if (wm_iz_table[lookup].sd_to_rt)
-      key->source_depth_to_render_target = 1;
-
-   if (wm_iz_table[lookup].ds_present || line_aa != AA_NEVER) {
-      key->aa_dest_stencil_reg = reg;
-      key->runtime_check_aads_emit = (!wm_iz_table[lookup].ds_present &&
-                                     line_aa == AA_SOMETIMES);
-      reg++;
-   }
-
-   if (wm_iz_table[lookup].dd_present) {
-      key->dest_depth_reg = reg;
-      reg+=2;
-   }
-
-   key->nr_depth_regs = (reg+1)/2;
-}
-
diff --git a/src/gallium/drivers/i965/brw_wm_pass0.c b/src/gallium/drivers/i965/brw_wm_pass0.c
deleted file mode 100644 (file)
index 0bacad2..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "util/u_memory.h"
-#include "util/u_math.h"
-
-#include "brw_debug.h"
-#include "brw_wm.h"
-
-
-
-/***********************************************************************
- */
-
-static struct brw_wm_ref *get_ref( struct brw_wm_compile *c )
-{
-   assert(c->nr_refs < BRW_WM_MAX_REF);
-   return &c->refs[c->nr_refs++];
-}
-
-static struct brw_wm_value *get_value( struct brw_wm_compile *c)
-{
-   assert(c->nr_refs < BRW_WM_MAX_VREG);
-   return &c->vreg[c->nr_vreg++];
-}
-
-/** return pointer to a newly allocated instruction */
-static struct brw_wm_instruction *get_instruction( struct brw_wm_compile *c )
-{
-   assert(c->nr_insns < BRW_WM_MAX_INSN);
-   return &c->instruction[c->nr_insns++];
-}
-
-/***********************************************************************
- */
-
-/** Init the "undef" register */
-static void pass0_init_undef( struct brw_wm_compile *c)
-{
-   struct brw_wm_ref *ref = &c->undef_ref;
-   ref->value = &c->undef_value;
-   ref->hw_reg = brw_vec8_grf(0, 0);
-   ref->insn = 0;
-   ref->prevuse = NULL;
-}
-
-/** Set a FP register to a value */
-static void pass0_set_fpreg_value( struct brw_wm_compile *c,
-                                  GLuint file,
-                                  GLuint idx,
-                                  GLuint component,
-                                  struct brw_wm_value *value )
-{
-   struct brw_wm_ref *ref = get_ref(c);
-   ref->value = value;
-   ref->hw_reg = brw_vec8_grf(0, 0);
-   ref->insn = 0;
-   ref->prevuse = NULL;
-   c->pass0_fp_reg[file][idx][component] = ref;
-}
-
-/** Set a FP register to a ref */
-static void pass0_set_fpreg_ref( struct brw_wm_compile *c,
-                                GLuint file,
-                                GLuint idx,
-                                GLuint component,
-                                const struct brw_wm_ref *src_ref )
-{
-   c->pass0_fp_reg[file][idx][component] = src_ref;
-}
-
-static const struct brw_wm_ref *get_param_ref( struct brw_wm_compile *c, 
-                                              unsigned idx,
-                                               unsigned component)
-{
-   GLuint i = idx * 4 + component;
-   
-   if (i >= BRW_WM_MAX_PARAM) {
-      debug_printf("%s: out of params\n", __FUNCTION__);
-      c->prog_data.error = 1;
-      return NULL;
-   }
-   else {
-      struct brw_wm_ref *ref = get_ref(c);
-
-      c->nr_creg = MAX2(c->nr_creg, (i+16)/16);
-
-      /* Push the offsets into hw_reg.  These will be added to the
-       * real register numbers once one is allocated in pass2.
-       */
-      ref->hw_reg = brw_vec1_grf((i&8)?1:0, i%8);
-      ref->value = &c->creg[i/16];
-      ref->insn = 0;
-      ref->prevuse = NULL;
-
-      return ref;
-   }
-}
-
-
-
-
-/* Lookup our internal registers
- */
-static const struct brw_wm_ref *pass0_get_reg( struct brw_wm_compile *c,
-                                              GLuint file,
-                                              GLuint idx,
-                                              GLuint component )
-{
-   const struct brw_wm_ref *ref = c->pass0_fp_reg[file][idx][component];
-
-   if (!ref) {
-      switch (file) {
-      case TGSI_FILE_INPUT:
-      case TGSI_FILE_TEMPORARY:
-      case TGSI_FILE_OUTPUT:
-      case BRW_FILE_PAYLOAD:
-        /* should already be done?? */
-        break;
-
-      case TGSI_FILE_CONSTANT:
-        ref = get_param_ref(c, 
-                             c->fp->info.immediate_count + idx,
-                             component);
-        break;
-
-      case TGSI_FILE_IMMEDIATE:
-        ref = get_param_ref(c, 
-                             idx,
-                             component);
-        break;
-
-      default:
-        assert(0);
-        break;
-      }
-
-      c->pass0_fp_reg[file][idx][component] = ref;
-   }
-
-   if (!ref)
-      ref = &c->undef_ref;
-
-   return ref;
-}
-
-
-
-/***********************************************************************
- * Straight translation to internal instruction format
- */
-
-static void pass0_set_dst( struct brw_wm_compile *c,
-                          struct brw_wm_instruction *out,
-                          const struct brw_fp_instruction *inst,
-                          GLuint writemask )
-{
-   const struct brw_fp_dst dst = inst->dst;
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      if (writemask & (1<<i)) {
-        out->dst[i] = get_value(c);
-        pass0_set_fpreg_value(c, dst.file, dst.index, i, out->dst[i]);
-      }
-   }
-
-   out->writemask = writemask;
-}
-
-
-static const struct brw_wm_ref *get_fp_src_reg_ref( struct brw_wm_compile *c,
-                                                   struct brw_fp_src src,
-                                                   GLuint i )
-{
-   return pass0_get_reg(c, src.file, src.index, BRW_GET_SWZ(src.swizzle,i));
-}
-
-
-static struct brw_wm_ref *get_new_ref( struct brw_wm_compile *c,
-                                      struct brw_fp_src src,
-                                      GLuint i,
-                                      struct brw_wm_instruction *insn)
-{
-   const struct brw_wm_ref *ref = get_fp_src_reg_ref(c, src, i);
-   struct brw_wm_ref *newref = get_ref(c);
-
-   newref->value = ref->value;
-   newref->hw_reg = ref->hw_reg;
-
-   if (insn) {
-      newref->insn = insn - c->instruction;
-      newref->prevuse = newref->value->lastuse;
-      newref->value->lastuse = newref;
-   }
-
-   if (src.negate)
-      newref->hw_reg.negate ^= 1;
-
-   if (src.abs) {
-      newref->hw_reg.negate = 0;
-      newref->hw_reg.abs = 1;
-   }
-
-   return newref;
-}
-
-
-static void
-translate_insn(struct brw_wm_compile *c,
-               const struct brw_fp_instruction *inst)
-{
-   struct brw_wm_instruction *out = get_instruction(c);
-   GLuint writemask = inst->dst.writemask;
-   GLuint nr_args = brw_wm_nr_args(inst->opcode);
-   GLuint i, j;
-
-   /* Copy some data out of the instruction
-    */
-   out->opcode = inst->opcode;
-   out->saturate = inst->dst.saturate;
-   out->tex_unit = inst->tex_unit;
-   out->target = inst->target;
-
-   /* Nasty hack:
-    */
-   out->eot = (inst->opcode == WM_FB_WRITE &&
-               inst->tex_unit != 0);
-
-
-   /* Args:
-    */
-   for (i = 0; i < nr_args; i++) {
-      for (j = 0; j < 4; j++) {
-        out->src[i][j] = get_new_ref(c, inst->src[i], j, out);
-      }
-   }
-
-   /* Dst:
-    */
-   pass0_set_dst(c, out, inst, writemask);
-}
-
-
-
-/***********************************************************************
- * Optimize moves and swizzles away:
- */ 
-static void pass0_precalc_mov( struct brw_wm_compile *c,
-                              const struct brw_fp_instruction *inst )
-{
-   const struct brw_fp_dst dst = inst->dst;
-   GLuint writemask = dst.writemask;
-   struct brw_wm_ref *refs[4];
-   GLuint i;
-
-   /* Get the effect of a MOV by manipulating our register table:
-    * First get all refs, then assign refs.  This ensures that "in-place"
-    * swizzles such as:
-    *   MOV t, t.xxyx
-    * are handled correctly.  Previously, these two steps were done in
-    * one loop and the above case was incorrectly handled.
-    */
-   for (i = 0; i < 4; i++) {
-      refs[i] = get_new_ref(c, inst->src[0], i, NULL);
-   }
-   for (i = 0; i < 4; i++) {
-      if (writemask & (1 << i)) {          
-         pass0_set_fpreg_ref( c, dst.file, dst.index, i, refs[i]);
-      }
-   }
-}
-
-
-/* Initialize payload "registers".
- */
-static void pass0_init_payload( struct brw_wm_compile *c )
-{
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      GLuint j = i >= c->key.nr_depth_regs ? 0 : i;
-      pass0_set_fpreg_value( c, BRW_FILE_PAYLOAD, PAYLOAD_DEPTH, i, 
-                            &c->payload.depth[j] );
-   }
-
-   for (i = 0; i < c->key.nr_inputs; i++)
-      pass0_set_fpreg_value( c, BRW_FILE_PAYLOAD, i, 0, 
-                            &c->payload.input_interp[i] );      
-}
-
-
-/***********************************************************************
- * PASS 0
- *
- * Work forwards to give each calculated value a unique number.  Where
- * an instruction produces duplicate values (eg DP3), all are given
- * the same number.
- *
- * Translate away swizzling and eliminate non-saturating moves.
- *
- * Translate instructions from our fp_instruction structs to our
- * internal brw_wm_instruction representation.
- */
-void brw_wm_pass0( struct brw_wm_compile *c )
-{
-   GLuint insn;
-
-   c->nr_vreg = 0;
-   c->nr_insns = 0;
-
-   pass0_init_undef(c);
-   pass0_init_payload(c);
-
-   for (insn = 0; insn < c->nr_fp_insns; insn++) {
-      const struct brw_fp_instruction *inst = &c->fp_instructions[insn];
-
-      /* Optimize away moves, otherwise emit translated instruction:
-       */      
-      switch (inst->opcode) {
-      case TGSI_OPCODE_MOV: 
-        if (!inst->dst.saturate) {
-           pass0_precalc_mov(c, inst);
-        }
-        else {
-           translate_insn(c, inst);
-        }
-        break;
-      default:
-        translate_insn(c, inst);
-        break;
-      }
-   }
-   if (BRW_DEBUG & DEBUG_WM) {
-      brw_wm_print_program(c, "pass0");
-   }
-}
diff --git a/src/gallium/drivers/i965/brw_wm_pass1.c b/src/gallium/drivers/i965/brw_wm_pass1.c
deleted file mode 100644 (file)
index 005747f..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-                  
-
-#include "brw_wm.h"
-#include "brw_debug.h"
-
-
-static GLuint get_tracked_mask(struct brw_wm_compile *c,
-                              struct brw_wm_instruction *inst)
-{
-   GLuint i;
-   for (i = 0; i < 4; i++) {
-      if (inst->writemask & (1<<i)) {
-        if (!inst->dst[i]->contributes_to_output) {
-           inst->writemask &= ~(1<<i);
-           inst->dst[i] = 0;
-        }
-      }
-   }
-
-   return inst->writemask;
-}
-
-/* Remove a reference from a value's usage chain.
- */
-static void unlink_ref(struct brw_wm_ref *ref)
-{
-   struct brw_wm_value *value = ref->value;
-
-   if (ref == value->lastuse) {
-      value->lastuse = ref->prevuse;
-   }
-   else {
-      struct brw_wm_ref *i = value->lastuse;
-      while (i->prevuse != ref) i = i->prevuse;
-      i->prevuse = ref->prevuse;
-   }
-}
-
-static void track_arg(struct brw_wm_compile *c,
-                     struct brw_wm_instruction *inst,
-                     GLuint arg,
-                     GLuint readmask)
-{
-   GLuint i;
-
-   for (i = 0; i < 4; i++) {
-      struct brw_wm_ref *ref = inst->src[arg][i];
-      if (ref) {
-        if (readmask & (1<<i)) {
-           ref->value->contributes_to_output = 1;
-         }
-        else {
-           unlink_ref(ref);
-           inst->src[arg][i] = NULL;
-        }
-      }
-   }
-}
-
-static GLuint get_texcoord_mask( GLuint tex_idx )
-{
-   switch (tex_idx) {
-   case TGSI_TEXTURE_1D:
-      return BRW_WRITEMASK_X;
-   case TGSI_TEXTURE_2D:
-   case TGSI_TEXTURE_RECT:
-      return BRW_WRITEMASK_XY;
-   case TGSI_TEXTURE_3D:
-      return BRW_WRITEMASK_XYZ;
-   case TGSI_TEXTURE_CUBE:
-      return BRW_WRITEMASK_XYZ;
-
-   case TGSI_TEXTURE_SHADOW1D:
-      return BRW_WRITEMASK_XZ;
-   case TGSI_TEXTURE_SHADOW2D:
-   case TGSI_TEXTURE_SHADOWRECT:
-      return BRW_WRITEMASK_XYZ;
-   default: 
-      assert(0);
-      return 0;
-   }
-}
-
-
-/* Step two: Basically this is dead code elimination.  
- *
- * Iterate backwards over instructions, noting which values
- * contribute to the final result.  Adjust writemasks to only
- * calculate these values.
- */
-void brw_wm_pass1( struct brw_wm_compile *c )
-{
-   GLint insn;
-
-   for (insn = c->nr_insns-1; insn >= 0; insn--) {
-      struct brw_wm_instruction *inst = &c->instruction[insn];
-      GLuint writemask;
-      GLuint read0, read1, read2;
-
-      if (inst->opcode == TGSI_OPCODE_KIL) {
-        track_arg(c, inst, 0, BRW_WRITEMASK_XYZW); /* All args contribute to final */
-        continue;
-      }
-
-      if (inst->opcode == WM_FB_WRITE) {
-        track_arg(c, inst, 0, BRW_WRITEMASK_XYZW); 
-        track_arg(c, inst, 1, BRW_WRITEMASK_XYZW); 
-        if (c->key.source_depth_to_render_target &&
-            c->key.computes_depth)
-           track_arg(c, inst, 2, BRW_WRITEMASK_Z); 
-        else
-           track_arg(c, inst, 2, 0); 
-        continue;
-      }
-
-      /* Lookup all the registers which were written by this
-       * instruction and get a mask of those that contribute to the output:
-       */
-      writemask = get_tracked_mask(c, inst);
-      if (!writemask) {
-        GLuint arg;
-        for (arg = 0; arg < 3; arg++)
-           track_arg(c, inst, arg, 0);
-        continue;
-      }
-
-      read0 = 0;
-      read1 = 0;
-      read2 = 0;
-
-      /* Mark all inputs which contribute to the marked outputs:
-       */
-      switch (inst->opcode) {
-      case TGSI_OPCODE_ABS:
-      case TGSI_OPCODE_FLR:
-      case TGSI_OPCODE_FRC:
-      case TGSI_OPCODE_MOV:
-      case TGSI_OPCODE_TRUNC:
-        read0 = writemask;
-        break;
-
-      case TGSI_OPCODE_SUB:
-      case TGSI_OPCODE_SLT:
-      case TGSI_OPCODE_SLE:
-      case TGSI_OPCODE_SGE:
-      case TGSI_OPCODE_SGT:
-      case TGSI_OPCODE_SEQ:
-      case TGSI_OPCODE_SNE:
-      case TGSI_OPCODE_ADD:
-      case TGSI_OPCODE_MAX:
-      case TGSI_OPCODE_MIN:
-      case TGSI_OPCODE_MUL:
-        read0 = writemask;
-        read1 = writemask;
-        break;
-
-      case TGSI_OPCODE_DDX:
-      case TGSI_OPCODE_DDY:
-        read0 = writemask;
-        break;
-
-      case TGSI_OPCODE_MAD:    
-      case TGSI_OPCODE_CMP:
-      case TGSI_OPCODE_LRP:
-        read0 = writemask;
-        read1 = writemask;     
-        read2 = writemask;     
-        break;
-
-      case TGSI_OPCODE_XPD: 
-        if (writemask & BRW_WRITEMASK_X) read0 |= BRW_WRITEMASK_YZ;     
-        if (writemask & BRW_WRITEMASK_Y) read0 |= BRW_WRITEMASK_XZ;     
-        if (writemask & BRW_WRITEMASK_Z) read0 |= BRW_WRITEMASK_XY;
-        read1 = read0;
-        break;
-
-      case TGSI_OPCODE_COS:
-      case TGSI_OPCODE_EX2:
-      case TGSI_OPCODE_LG2:
-      case TGSI_OPCODE_RCP:
-      case TGSI_OPCODE_RSQ:
-      case TGSI_OPCODE_SIN:
-      case TGSI_OPCODE_SCS:
-      case WM_CINTERP:
-      case WM_PIXELXY:
-        read0 = BRW_WRITEMASK_X;
-        break;
-
-      case TGSI_OPCODE_POW:
-        read0 = BRW_WRITEMASK_X;
-        read1 = BRW_WRITEMASK_X;
-        break;
-
-      case TGSI_OPCODE_TEX:
-      case TGSI_OPCODE_TXP:
-        read0 = get_texcoord_mask(inst->target);
-        break;
-
-      case TGSI_OPCODE_TXB:
-        read0 = get_texcoord_mask(inst->target) | BRW_WRITEMASK_W;
-        break;
-
-      case WM_WPOSXY:
-        read0 = writemask & BRW_WRITEMASK_XY;
-        break;
-
-      case WM_DELTAXY:
-        read0 = writemask & BRW_WRITEMASK_XY;
-        read1 = BRW_WRITEMASK_X;
-        break;
-
-      case WM_PIXELW:
-        read0 = BRW_WRITEMASK_X;
-        read1 = BRW_WRITEMASK_XY;
-        break;
-
-      case WM_LINTERP:
-        read0 = BRW_WRITEMASK_X;
-        read1 = BRW_WRITEMASK_XY;
-        break;
-
-      case WM_PINTERP:
-        read0 = BRW_WRITEMASK_X; /* interpolant */
-        read1 = BRW_WRITEMASK_XY; /* deltas */
-        read2 = BRW_WRITEMASK_W; /* pixel w */
-        break;
-
-      case TGSI_OPCODE_DP3:    
-        read0 = BRW_WRITEMASK_XYZ;
-        read1 = BRW_WRITEMASK_XYZ;
-        break;
-
-      case TGSI_OPCODE_DPH:
-        read0 = BRW_WRITEMASK_XYZ;
-        read1 = BRW_WRITEMASK_XYZW;
-        break;
-
-      case TGSI_OPCODE_DP4:
-        read0 = BRW_WRITEMASK_XYZW;
-        read1 = BRW_WRITEMASK_XYZW;
-        break;
-
-      case TGSI_OPCODE_LIT: 
-        read0 = BRW_WRITEMASK_XYW;
-        break;
-
-      case TGSI_OPCODE_DST:
-      case WM_FRONTFACING:
-      case TGSI_OPCODE_KILP:
-      default:
-        break;
-      }
-
-      track_arg(c, inst, 0, read0);
-      track_arg(c, inst, 1, read1);
-      track_arg(c, inst, 2, read2);
-   }
-
-   if (BRW_DEBUG & DEBUG_WM) {
-      brw_wm_print_program(c, "pass1");
-   }
-}
diff --git a/src/gallium/drivers/i965/brw_wm_pass2.c b/src/gallium/drivers/i965/brw_wm_pass2.c
deleted file mode 100644 (file)
index 19248b4..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-                   
-
-#include "brw_debug.h"
-#include "brw_wm.h"
-
-
-/* Use these to force spilling so that that functionality can be
- * tested with known-good examples rather than having to construct new
- * tests.
- */
-#define TEST_PAYLOAD_SPILLS 0
-#define TEST_DST_SPILLS 0
-
-static void spill_value(struct brw_wm_compile *c,
-                       struct brw_wm_value *value);
-
-static void prealloc_reg(struct brw_wm_compile *c,
-                        struct brw_wm_value *value,
-                        GLuint reg)
-{
-   if (value->lastuse) {
-      /* Set nextuse to zero, it will be corrected by
-       * update_register_usage().
-       */
-      c->pass2_grf[reg].value = value;
-      c->pass2_grf[reg].nextuse = 0;
-
-      value->resident = &c->pass2_grf[reg];
-      value->hw_reg = brw_vec8_grf(reg*2, 0);
-
-      if (TEST_PAYLOAD_SPILLS)
-        spill_value(c, value);
-   }
-}
-
-
-/* Initialize all the register values.  Do the initial setup
- * calculations for interpolants.
- */
-static void init_registers( struct brw_wm_compile *c )
-{
-   GLuint reg = 0;
-   GLuint j;
-
-   for (j = 0; j < c->grf_limit; j++) 
-      c->pass2_grf[j].nextuse = BRW_WM_MAX_INSN;
-
-   /* Pre-allocate incoming payload regs:
-    */
-   for (j = 0; j < c->key.nr_depth_regs; j++) 
-      prealloc_reg(c, &c->payload.depth[j], reg++);
-
-   for (j = 0; j < c->nr_creg; j++) 
-      prealloc_reg(c, &c->creg[j], reg++);
-
-   reg++;                       /* XXX: skip over position output */
-
-   /* XXX: currently just hope the VS outputs line up with FS inputs:
-    */
-   for (j = 0; j < c->key.nr_inputs; j++)
-      prealloc_reg(c, &c->payload.input_interp[j], reg++);
-
-   c->prog_data.first_curbe_grf = c->key.nr_depth_regs * 2;
-   c->prog_data.urb_read_length = (c->key.nr_inputs + 1) * 2;
-   c->prog_data.curb_read_length = c->nr_creg * 2;
-
-   /* Note this allocation:
-    */
-   c->max_wm_grf = reg * 2;
-}
-
-
-/* Update the nextuse value for each register in our file.
- */
-static void update_register_usage(struct brw_wm_compile *c,
-                                 GLuint thisinsn)
-{
-   GLuint i;
-
-   for (i = 1; i < c->grf_limit; i++) {
-      struct brw_wm_grf *grf = &c->pass2_grf[i];
-
-      /* Only search those which can change:
-       */
-      if (grf->nextuse < thisinsn) {
-        const struct brw_wm_ref *ref = grf->value->lastuse;
-
-        /* Has last use of value been passed?
-         */
-        if (ref->insn < thisinsn) {
-           grf->value->resident = 0;
-           grf->value = 0;
-           grf->nextuse = BRW_WM_MAX_INSN;
-        }
-        else {
-           /* Else loop through chain to update:
-            */
-           while (ref->prevuse && ref->prevuse->insn >= thisinsn)
-              ref = ref->prevuse;
-
-           grf->nextuse = ref->insn;
-        }
-      }
-   }
-}
-
-
-static void spill_value(struct brw_wm_compile *c,
-                       struct brw_wm_value *value)
-{      
-   /* Allocate a spill slot.  Note that allocations start from 0x40 -
-    * the first slot is reserved to mean "undef" in brw_wm_emit.c
-    */
-   if (!value->spill_slot) {
-      c->last_scratch += 0x40; 
-      value->spill_slot = c->last_scratch;
-   }
-
-   /* The spill will be done in brw_wm_emit.c immediately after the
-    * value is calculated, so we can just take this reg without any
-    * further work.
-    */
-   value->resident->value = NULL;
-   value->resident->nextuse = BRW_WM_MAX_INSN;
-   value->resident = NULL;
-}
-
-
-
-/* Search for contiguous region with the most distant nearest
- * member.  Free regs count as very distant.
- *
- * TODO: implement spill-to-reg so that we can rearrange discontigous
- * free regs and then spill the oldest non-free regs in sequence.
- * This would mean inserting instructions in this pass.
- */
-static GLuint search_contiguous_regs(struct brw_wm_compile *c,
-                                    GLuint nr,
-                                    GLuint thisinsn)
-{
-   struct brw_wm_grf *grf = c->pass2_grf;
-   GLuint furthest = 0;
-   GLuint reg = 0;
-   GLuint i, j;
-
-   /* Start search at 1: r0 is special and can't be used or spilled.
-    */
-   for (i = 1; i < c->grf_limit && furthest < BRW_WM_MAX_INSN; i++) {
-      GLuint group_nextuse = BRW_WM_MAX_INSN;
-
-      for (j = 0; j < nr; j++) {
-        if (grf[i+j].nextuse < group_nextuse)
-           group_nextuse = grf[i+j].nextuse;
-      }
-
-      if (group_nextuse > furthest) {
-        furthest = group_nextuse;
-        reg = i;
-      }
-   }
-
-   assert(furthest != thisinsn);
-
-   /* Any non-empty regs will need to be spilled:
-    */
-   for (j = 0; j < nr; j++) 
-      if (grf[reg+j].value)
-        spill_value(c, grf[reg+j].value);
-
-   return reg;
-}
-
-
-static void alloc_contiguous_dest(struct brw_wm_compile *c, 
-                                 struct brw_wm_value *dst[],
-                                 GLuint nr,
-                                 GLuint thisinsn)
-{
-   GLuint reg = search_contiguous_regs(c, nr, thisinsn);
-   GLuint i;
-
-   for (i = 0; i < nr; i++) {
-      if (!dst[i]) {
-        /* Need to grab a dummy value in TEX case.  Don't introduce
-         * it into the tracking scheme.
-         */
-        dst[i] = &c->vreg[c->nr_vreg++];
-      }
-      else {
-        assert(!dst[i]->resident);
-        assert(c->pass2_grf[reg+i].nextuse != thisinsn);
-
-        c->pass2_grf[reg+i].value = dst[i];
-        c->pass2_grf[reg+i].nextuse = thisinsn;
-
-        dst[i]->resident = &c->pass2_grf[reg+i];
-      }
-
-      dst[i]->hw_reg = brw_vec8_grf((reg+i)*2, 0);
-   }
-
-   if ((reg+nr)*2 > c->max_wm_grf)
-      c->max_wm_grf = (reg+nr) * 2;
-}
-
-
-static void load_args(struct brw_wm_compile *c, 
-                     struct brw_wm_instruction *inst)
-{
-   GLuint thisinsn = inst - c->instruction;
-   GLuint i,j;
-
-   for (i = 0; i < 3; i++) {
-      for (j = 0; j < 4; j++) {
-        struct brw_wm_ref *ref = inst->src[i][j];
-
-        if (ref) {
-           if (!ref->value->resident) {
-              /* Need to bring the value in from scratch space.  The code for
-               * this will be done in brw_wm_emit.c, here we just do the
-               * register allocation and mark the ref as requiring a fill.
-               */
-              GLuint reg = search_contiguous_regs(c, 1, thisinsn);
-
-              c->pass2_grf[reg].value = ref->value;
-              c->pass2_grf[reg].nextuse = thisinsn;
-
-              ref->value->resident = &c->pass2_grf[reg];
-
-              /* Note that a fill is required:
-               */
-              ref->unspill_reg = reg*2;
-           }
-
-           /* Adjust the hw_reg to point at the value's current location:
-            */
-           assert(ref->value == ref->value->resident->value);
-           ref->hw_reg.nr += (ref->value->resident - c->pass2_grf) * 2;
-        }
-      }
-   }
-}
-
-
-
-/* Step 3: Work forwards once again.  Perform register allocations,
- * taking into account instructions like TEX which require contiguous
- * result registers.  Where necessary spill registers to scratch space
- * and reload later.
- */
-void brw_wm_pass2( struct brw_wm_compile *c )
-{
-   GLuint insn;
-   GLuint i;
-
-   init_registers(c);
-
-   for (insn = 0; insn < c->nr_insns; insn++) {
-      struct brw_wm_instruction *inst = &c->instruction[insn];
-
-      /* Update registers' nextuse values:
-       */
-      update_register_usage(c, insn);
-
-      /* May need to unspill some args.
-       */
-      load_args(c, inst);
-
-      /* Allocate registers to hold results:
-       */
-      switch (inst->opcode) {
-      case TGSI_OPCODE_TEX:
-      case TGSI_OPCODE_TXB:
-      case TGSI_OPCODE_TXP:
-        alloc_contiguous_dest(c, inst->dst, 4, insn);
-        break;
-
-      default:
-        for (i = 0; i < 4; i++) {
-           if (inst->writemask & (1<<i)) {
-              assert(inst->dst[i]);
-              alloc_contiguous_dest(c, &inst->dst[i], 1, insn);
-           }
-        }
-        break;
-      }
-
-      if (TEST_DST_SPILLS && inst->opcode != WM_PIXELXY) {
-        for (i = 0; i < 4; i++)        
-           if (inst->dst[i])
-              spill_value(c, inst->dst[i]);
-      }
-   }
-
-   if (BRW_DEBUG & DEBUG_WM) {
-      brw_wm_print_program(c, "pass2");
-   }
-
-   c->state = PASS2_DONE;
-
-   if (BRW_DEBUG & DEBUG_WM) {
-       brw_wm_print_program(c, "pass2/done");
-   }
-}
diff --git a/src/gallium/drivers/i965/brw_wm_sampler_state.c b/src/gallium/drivers/i965/brw_wm_sampler_state.c
deleted file mode 100644 (file)
index 8406a1a..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-                   
-#include "util/u_math.h"
-#include "util/u_format.h"
-
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_defines.h"
-#include "brw_resource.h"
-
-
-/* Samplers aren't strictly wm state from the hardware's perspective,
- * but that is the only situation in which we use them in this driver.
- */
-
-
-
-static enum pipe_error
-upload_default_color( struct brw_context *brw,
-                     const GLfloat *color,
-                      struct brw_winsys_buffer **bo_out )
-{
-   struct brw_sampler_default_color sdc;
-   enum pipe_error ret;
-
-   COPY_4V(sdc.color, color); 
-   
-   ret = brw_cache_data( &brw->cache, BRW_SAMPLER_DEFAULT_COLOR, &sdc,
-                         NULL, 0, bo_out );
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-struct wm_sampler_key {
-   int sampler_count;
-   struct brw_sampler_state sampler[BRW_MAX_TEX_UNIT];
-};
-
-
-/** Sets up the cache key for sampler state for all texture units */
-static void
-brw_wm_sampler_populate_key(struct brw_context *brw,
-                           struct wm_sampler_key *key)
-{
-   int i;
-
-   memset(key, 0, sizeof(*key));
-
-   key->sampler_count = MIN2(brw->curr.num_fragment_sampler_views,
-                           brw->curr.num_samplers);
-
-   for (i = 0; i < key->sampler_count; i++) {
-      const struct brw_texture *tex = brw_texture(brw->curr.fragment_sampler_views[i]->texture);
-      const struct brw_sampler *sampler = brw->curr.sampler[i];
-      struct brw_sampler_state *entry = &key->sampler[i];
-
-      entry->ss0 = sampler->ss0;
-      entry->ss1 = sampler->ss1;
-      entry->ss2.default_color_pointer = 0; /* reloc */
-      entry->ss3 = sampler->ss3;
-
-      /* Cube-maps on 965 and later must use the same wrap mode for all 3
-       * coordinate dimensions.  Futher, only CUBE and CLAMP are valid.
-       */
-      if (tex->b.b.target == PIPE_TEXTURE_CUBE) {
-        if (FALSE &&
-            (sampler->ss0.min_filter != BRW_MAPFILTER_NEAREST || 
-             sampler->ss0.mag_filter != BRW_MAPFILTER_NEAREST)) {
-           entry->ss1.r_wrap_mode = BRW_TEXCOORDMODE_CUBE;
-           entry->ss1.s_wrap_mode = BRW_TEXCOORDMODE_CUBE;
-           entry->ss1.t_wrap_mode = BRW_TEXCOORDMODE_CUBE;
-        } else {
-           entry->ss1.r_wrap_mode = BRW_TEXCOORDMODE_CLAMP;
-           entry->ss1.s_wrap_mode = BRW_TEXCOORDMODE_CLAMP;
-           entry->ss1.t_wrap_mode = BRW_TEXCOORDMODE_CLAMP;
-        }
-      } else if (tex->b.b.target == PIPE_TEXTURE_1D) {
-        /* There's a bug in 1D texture sampling - it actually pays
-         * attention to the wrap_t value, though it should not.
-         * Override the wrap_t value here to GL_REPEAT to keep
-         * any nonexistent border pixels from floating in.
-         */
-        entry->ss1.t_wrap_mode = BRW_TEXCOORDMODE_WRAP;
-      }
-   }
-}
-
-
-static enum pipe_error
-brw_wm_sampler_update_default_colors(struct brw_context *brw)
-{
-   enum pipe_error ret;
-   int nr = MIN2(brw->curr.num_fragment_sampler_views,
-                brw->curr.num_samplers);
-   int i;
-
-   for (i = 0; i < nr; i++) {
-      const struct brw_texture *tex = brw_texture(brw->curr.fragment_sampler_views[i]->texture);
-      const struct brw_sampler *sampler = brw->curr.sampler[i];
-      const float *bc;
-      float bordercolor[4] = {
-         sampler->border_color[0],
-         sampler->border_color[0],
-         sampler->border_color[0],
-         sampler->border_color[0]
-      };
-      
-      if (util_format_is_depth_or_stencil(tex->b.b.format)) {
-         bc = bordercolor;
-      }
-      else {
-         bc = sampler->border_color;
-      }
-
-      /* GL specs that border color for depth textures is taken from the
-       * R channel, while the hardware uses A.  Spam R into all the
-       * channels for safety.
-       */
-      ret = upload_default_color(brw, 
-                                 bc,
-                                 &brw->wm.sdc_bo[i]);
-      if (ret) 
-         return ret;
-   }
-
-   return PIPE_OK;
-}
-
-
-
-/* All samplers must be uploaded in a single contiguous array.  
- */
-static int upload_wm_samplers( struct brw_context *brw )
-{
-   struct wm_sampler_key key;
-   struct brw_winsys_reloc reloc[BRW_MAX_TEX_UNIT];
-   enum pipe_error ret;
-   int i;
-
-   brw_wm_sampler_update_default_colors(brw);
-   brw_wm_sampler_populate_key(brw, &key);
-
-   if (brw->wm.sampler_count != key.sampler_count) {
-      brw->wm.sampler_count = key.sampler_count;
-      brw->state.dirty.cache |= CACHE_NEW_SAMPLER;
-   }
-
-   if (brw->wm.sampler_count == 0) {
-      bo_reference(&brw->wm.sampler_bo, NULL);
-      return PIPE_OK;
-   }
-
-   /* Emit SDC relocations */
-   for (i = 0; i < key.sampler_count; i++) {
-      make_reloc( &reloc[i],
-                  BRW_USAGE_SAMPLER,
-                  0,
-                  i * sizeof(struct brw_sampler_state) +
-                  offsetof(struct brw_sampler_state, ss2),
-                  brw->wm.sdc_bo[i]);
-   }
-
-
-   if (brw_search_cache(&brw->cache, BRW_SAMPLER,
-                        &key, sizeof(key),
-                        reloc, key.sampler_count,
-                        NULL,
-                        &brw->wm.sampler_bo))
-      return PIPE_OK;
-
-   /* If we didnt find it in the cache, compute the state and put it in the
-    * cache.
-    */
-   ret = brw_upload_cache(&brw->cache, BRW_SAMPLER,
-                          &key, sizeof(key),
-                          reloc, key.sampler_count,
-                          &key.sampler, sizeof(key.sampler),
-                          NULL, NULL,
-                          &brw->wm.sampler_bo);
-   if (ret)
-      return ret;
-
-
-   return 0;
-}
-
-const struct brw_tracked_state brw_wm_samplers = {
-   .dirty = {
-      .mesa = PIPE_NEW_BOUND_TEXTURES | PIPE_NEW_SAMPLERS,
-      .brw = 0,
-      .cache = 0
-   },
-   .prepare = upload_wm_samplers,
-};
-
-
diff --git a/src/gallium/drivers/i965/brw_wm_state.c b/src/gallium/drivers/i965/brw_wm_state.c
deleted file mode 100644 (file)
index a690003..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-                   
-#include "util/u_math.h"
-
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_defines.h"
-#include "brw_wm.h"
-#include "brw_debug.h"
-#include "brw_pipe_rast.h"
-
-/***********************************************************************
- * WM unit - fragment programs and rasterization
- */
-
-struct brw_wm_unit_key {
-   unsigned int total_grf, total_scratch;
-   unsigned int urb_entry_read_length;
-   unsigned int curb_entry_read_length;
-   unsigned int dispatch_grf_start_reg;
-
-   unsigned int curbe_offset;
-   unsigned int urb_size;
-
-   unsigned int max_threads;
-
-   unsigned int nr_surfaces, sampler_count;
-   GLboolean uses_depth, computes_depth, uses_kill, has_flow_control;
-   GLboolean polygon_stipple, stats_wm, line_stipple, offset_enable;
-   GLfloat offset_units, offset_factor;
-};
-
-static void
-wm_unit_populate_key(struct brw_context *brw, struct brw_wm_unit_key *key)
-{
-   const struct brw_fragment_shader *fp = brw->curr.fragment_shader;
-
-   memset(key, 0, sizeof(*key));
-
-   if (BRW_DEBUG & DEBUG_SINGLE_THREAD)
-      key->max_threads = 1;
-   else {
-      /* WM maximum threads is number of EUs times number of threads per EU. */
-      if (brw->gen == 5)
-         key->max_threads = 12 * 6;
-      else if (brw->is_g4x)
-        key->max_threads = 10 * 5;
-      else
-        key->max_threads = 8 * 4;
-   }
-
-   /* CACHE_NEW_WM_PROG */
-   key->total_grf = brw->wm.prog_data->total_grf;
-   key->urb_entry_read_length = brw->wm.prog_data->urb_read_length;
-   key->curb_entry_read_length = brw->wm.prog_data->curb_read_length;
-   key->dispatch_grf_start_reg = brw->wm.prog_data->first_curbe_grf;
-   key->total_scratch = align(brw->wm.prog_data->total_scratch, 1024);
-
-   /* BRW_NEW_URB_FENCE */
-   key->urb_size = brw->urb.vsize;
-
-   /* BRW_NEW_CURBE_OFFSETS */
-   key->curbe_offset = brw->curbe.wm_start;
-
-   /* BRW_NEW_NR_SURFACEs */
-   key->nr_surfaces = brw->wm.nr_surfaces;
-
-   /* CACHE_NEW_SAMPLER */
-   key->sampler_count = brw->wm.sampler_count;
-
-   /* PIPE_NEW_RAST */
-   key->polygon_stipple = brw->curr.rast->templ.poly_stipple_enable;
-
-   /* PIPE_NEW_FRAGMENT_PROGRAM */
-   key->uses_depth = fp->uses_depth;
-   key->computes_depth = fp->info.writes_z;
-
-   /* PIPE_NEW_DEPTH_BUFFER
-    *
-    * Override for NULL depthbuffer case, required by the Pixel Shader Computed
-    * Depth field.
-    */
-   if (brw->curr.fb.zsbuf == NULL)
-      key->computes_depth = 0;
-
-   /* PIPE_NEW_DEPTH_STENCIL_ALPHA */
-   key->uses_kill = (fp->info.uses_kill || 
-                    brw->curr.zstencil->cc3.alpha_test);
-
-   key->has_flow_control = fp->has_flow_control;
-
-   /* temporary sanity check assertion */
-   assert(fp->has_flow_control == 0);
-
-   /* PIPE_NEW_QUERY */
-   key->stats_wm = (brw->query.stats_wm != 0);
-
-   /* PIPE_NEW_RAST */
-   key->line_stipple = brw->curr.rast->templ.line_stipple_enable;
-
-
-   key->offset_enable = (brw->curr.rast->templ.offset_point ||
-                        brw->curr.rast->templ.offset_line ||
-                        brw->curr.rast->templ.offset_tri);
-
-   key->offset_units = brw->curr.rast->templ.offset_units;
-   key->offset_factor = brw->curr.rast->templ.offset_scale;
-}
-
-/**
- * Setup wm hardware state.  See page 225 of Volume 2
- */
-static enum pipe_error
-wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,
-                       struct brw_winsys_reloc *reloc,
-                        unsigned nr_reloc,
-                        struct brw_winsys_buffer **bo_out)
-{
-   struct brw_wm_unit_state wm;
-   enum pipe_error ret;
-
-   memset(&wm, 0, sizeof(wm));
-
-   wm.thread0.grf_reg_count = align(key->total_grf, 16) / 16 - 1;
-   wm.thread0.kernel_start_pointer = 0; /* reloc */
-   wm.thread1.depth_coef_urb_read_offset = 1;
-   wm.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
-
-   if (brw->gen == 5)
-      wm.thread1.binding_table_entry_count = 0; /* hardware requirement */
-   else
-      wm.thread1.binding_table_entry_count = key->nr_surfaces;
-
-   if (key->total_scratch != 0) {
-      wm.thread2.scratch_space_base_pointer = 0; /* reloc */
-      wm.thread2.per_thread_scratch_space = key->total_scratch / 1024 - 1;
-   } else {
-      wm.thread2.scratch_space_base_pointer = 0;
-      wm.thread2.per_thread_scratch_space = 0;
-   }
-
-   wm.thread3.dispatch_grf_start_reg = key->dispatch_grf_start_reg;
-   wm.thread3.urb_entry_read_length = key->urb_entry_read_length;
-   wm.thread3.urb_entry_read_offset = 0;
-   wm.thread3.const_urb_entry_read_length = key->curb_entry_read_length;
-   wm.thread3.const_urb_entry_read_offset = key->curbe_offset * 2;
-
-   if (brw->gen == 5) 
-      wm.wm4.sampler_count = 0; /* hardware requirement */
-   else
-      wm.wm4.sampler_count = (key->sampler_count + 1) / 4;
-
-   /* reloc */
-   wm.wm4.sampler_state_pointer = 0;
-
-   wm.wm5.program_uses_depth = key->uses_depth;
-   wm.wm5.program_computes_depth = key->computes_depth;
-   wm.wm5.program_uses_killpixel = key->uses_kill;
-
-   if (key->has_flow_control)
-      wm.wm5.enable_8_pix = 1;
-   else
-      wm.wm5.enable_16_pix = 1;
-
-   wm.wm5.max_threads = key->max_threads - 1;
-   wm.wm5.thread_dispatch_enable = 1;  /* AKA: color_write */
-   wm.wm5.legacy_line_rast = 0;
-   wm.wm5.legacy_global_depth_bias = 0;
-   wm.wm5.early_depth_test = 1;                /* never need to disable */
-   wm.wm5.line_aa_region_width = 0;
-   wm.wm5.line_endcap_aa_region_width = 1;
-
-   wm.wm5.polygon_stipple = key->polygon_stipple;
-
-   if (key->offset_enable) {
-      wm.wm5.depth_offset = 1;
-      /* Something wierd going on with legacy_global_depth_bias,
-       * offset_constant, scaling and MRD.  This value passes glean
-       * but gives some odd results elsewere (eg. the
-       * quad-offset-units test).
-       */
-      wm.global_depth_offset_constant = key->offset_units * 2;
-
-      /* This is the only value that passes glean:
-       */
-      wm.global_depth_offset_scale = key->offset_factor;
-   }
-
-   wm.wm5.line_stipple = key->line_stipple;
-
-   if ((BRW_DEBUG & DEBUG_STATS) || key->stats_wm)
-      wm.wm4.stats_enable = 1;
-
-   ret = brw_upload_cache(&brw->cache, BRW_WM_UNIT,
-                          key, sizeof(*key),
-                          reloc, nr_reloc,
-                          &wm, sizeof(wm),
-                          NULL, NULL,
-                          bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-static enum pipe_error upload_wm_unit( struct brw_context *brw )
-{
-   struct brw_wm_unit_key key;
-   struct brw_winsys_reloc reloc[3];
-   unsigned nr_reloc = 0;
-   enum pipe_error ret;
-   unsigned grf_reg_count;
-   unsigned per_thread_scratch_space;
-   unsigned stats_enable;
-   unsigned sampler_count;
-
-   wm_unit_populate_key(brw, &key);
-
-
-   /* Allocate the necessary scratch space if we haven't already.  Don't
-    * bother reducing the allocation later, since we use scratch so
-    * rarely.
-    */
-   assert(key.total_scratch <= 12 * 1024);
-   if (key.total_scratch) {
-      GLuint total = key.total_scratch * key.max_threads;
-
-      /* Do we need a new buffer:
-       */
-      if (brw->wm.scratch_bo && total > brw->wm.scratch_bo->size) 
-        bo_reference(&brw->wm.scratch_bo, NULL);
-
-      if (brw->wm.scratch_bo == NULL) {
-        ret = brw->sws->bo_alloc(brw->sws,
-                                  BRW_BUFFER_TYPE_SHADER_SCRATCH,
-                                  total,
-                                  4096,
-                                  &brw->wm.scratch_bo);
-         if (ret)
-            return ret;
-      }
-   }
-
-
-   /* XXX: temporary:
-    */
-   grf_reg_count = (align(key.total_grf, 16) / 16 - 1);
-   per_thread_scratch_space = key.total_scratch / 1024 - 1;
-   stats_enable = (BRW_DEBUG & DEBUG_STATS) || key.stats_wm;
-   sampler_count = brw->gen == 5 ? 0 :(key.sampler_count + 1) / 4;
-
-   /* Emit WM program relocation */
-   make_reloc(&reloc[nr_reloc++],
-              BRW_USAGE_STATE,
-              grf_reg_count << 1,
-              offsetof(struct brw_wm_unit_state, thread0),
-              brw->wm.prog_bo);
-
-   /* Emit scratch space relocation */
-   if (key.total_scratch != 0) {
-      make_reloc(&reloc[nr_reloc++],
-                 BRW_USAGE_SCRATCH,
-                 per_thread_scratch_space,
-                 offsetof(struct brw_wm_unit_state, thread2),
-                 brw->wm.scratch_bo);
-   }
-
-   /* Emit sampler state relocation */
-   if (key.sampler_count != 0) {
-      make_reloc(&reloc[nr_reloc++],
-                 BRW_USAGE_STATE,
-                 stats_enable | (sampler_count << 2),
-                 offsetof(struct brw_wm_unit_state, wm4),
-                 brw->wm.sampler_bo);
-   }
-
-
-   if (brw_search_cache(&brw->cache, BRW_WM_UNIT,
-                        &key, sizeof(key),
-                        reloc, nr_reloc,
-                        NULL,
-                        &brw->wm.state_bo))
-      return PIPE_OK;
-
-   ret = wm_unit_create_from_key(brw, &key, 
-                                 reloc, nr_reloc,
-                                 &brw->wm.state_bo);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-const struct brw_tracked_state brw_wm_unit = {
-   .dirty = {
-      .mesa = (PIPE_NEW_FRAGMENT_SHADER |
-              PIPE_NEW_DEPTH_BUFFER |
-              PIPE_NEW_RAST | 
-              PIPE_NEW_DEPTH_STENCIL_ALPHA |
-              PIPE_NEW_QUERY),
-
-      .brw = (BRW_NEW_CURBE_OFFSETS |
-             BRW_NEW_NR_WM_SURFACES),
-
-      .cache = (CACHE_NEW_WM_PROG |
-               CACHE_NEW_SAMPLER)
-   },
-   .prepare = upload_wm_unit,
-};
-
diff --git a/src/gallium/drivers/i965/brw_wm_surface_state.c b/src/gallium/drivers/i965/brw_wm_surface_state.c
deleted file mode 100644 (file)
index 0d80a01..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- Copyright (C) Intel Corp.  2006.  All Rights Reserved.
- Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
- develop this 3D driver.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice (including the
- next paragraph) shall be included in all copies or substantial
- portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- **********************************************************************/
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-                   
-#include "pipe/p_format.h"
-
-#include "brw_batchbuffer.h"
-#include "brw_context.h"
-#include "brw_state.h"
-#include "brw_resource.h"
-
-
-
-
-static enum pipe_error
-brw_update_texture_surface( struct brw_context *brw,
-                           struct brw_texture *tex,
-                            struct brw_winsys_buffer **bo_out)
-{
-   struct brw_winsys_reloc reloc[1];
-   enum pipe_error ret;
-
-   /* Emit relocation to surface contents */
-   make_reloc(&reloc[0],
-              BRW_USAGE_SAMPLER,
-              0,
-              offsetof(struct brw_surface_state, ss1),
-              tex->bo);
-
-   if (brw_search_cache(&brw->surface_cache,
-                        BRW_SS_SURFACE,
-                        &tex->ss, sizeof tex->ss,
-                        reloc, Elements(reloc),
-                        NULL,
-                        bo_out))
-      return PIPE_OK;
-
-   ret = brw_upload_cache(&brw->surface_cache, BRW_SS_SURFACE,
-                          &tex->ss, sizeof tex->ss,
-                          reloc, Elements(reloc),
-                          &tex->ss, sizeof tex->ss,
-                          NULL, NULL,
-                          bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-
-
-
-
-
-
-/**
- * Sets up a surface state structure to point at the given region.
- * While it is only used for the front/back buffer currently, it should be
- * usable for further buffers when doing ARB_draw_buffer support.
- */
-static enum pipe_error
-brw_update_render_surface(struct brw_context *brw,
-                          struct brw_surface *surface,
-                          struct brw_winsys_buffer **bo_out)
-{
-   struct brw_surf_ss0 blend_ss0 = brw->curr.blend->ss0;
-   struct brw_surface_state ss;
-   struct brw_winsys_reloc reloc[1];
-   enum pipe_error ret;
-
-   /* XXX: we will only be rendering to this surface:
-    */
-   make_reloc(&reloc[0],
-              BRW_USAGE_RENDER_TARGET,
-              0,
-              offsetof(struct brw_surface_state, ss1),
-              surface->bo);
-
-   /* Surfaces are potentially shared between contexts, so can't
-    * scribble the in-place ss0 value in the surface.
-    */
-   memcpy(&ss, &surface->ss, sizeof ss);
-
-   ss.ss0.color_blend        = blend_ss0.color_blend;
-   ss.ss0.writedisable_blue  = blend_ss0.writedisable_blue;
-   ss.ss0.writedisable_green = blend_ss0.writedisable_green;
-   ss.ss0.writedisable_red   = blend_ss0.writedisable_red;
-   ss.ss0.writedisable_alpha = blend_ss0.writedisable_alpha;
-
-   if (brw_search_cache(&brw->surface_cache,
-                        BRW_SS_SURFACE,
-                        &ss, sizeof(ss),
-                        reloc, Elements(reloc),
-                        NULL,
-                        bo_out))
-      return PIPE_OK;
-       
-   ret = brw_upload_cache(&brw->surface_cache,
-                          BRW_SS_SURFACE,
-                          &ss, sizeof ss,
-                          reloc, Elements(reloc),
-                          &ss, sizeof ss,
-                          NULL, NULL,
-                          bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-
-/**
- * Constructs the binding table for the WM surface state, which maps unit
- * numbers to surface state objects.
- */
-static enum pipe_error
-brw_wm_get_binding_table(struct brw_context *brw,
-                         struct brw_winsys_buffer **bo_out )
-{
-   enum pipe_error ret;
-   struct brw_winsys_reloc reloc[BRW_WM_MAX_SURF];
-   uint32_t data[BRW_WM_MAX_SURF];
-   GLuint nr_relocs = 0;
-   GLuint data_size = brw->wm.nr_surfaces * sizeof data[0];
-   int i;
-
-   assert(brw->wm.nr_surfaces <= BRW_WM_MAX_SURF);
-   assert(brw->wm.nr_surfaces > 0);
-
-   /* Emit binding table relocations to surface state 
-    */
-   for (i = 0; i < brw->wm.nr_surfaces; i++) {
-      if (brw->wm.surf_bo[i]) {
-         make_reloc(&reloc[nr_relocs++],
-                    BRW_USAGE_STATE,
-                    0,
-                    i * sizeof(GLuint),
-                    brw->wm.surf_bo[i]);
-      }
-   }
-
-   /* Note there is no key for this search beyond the values in the
-    * relocation array:
-    */
-   if (brw_search_cache(&brw->surface_cache, BRW_SS_SURF_BIND,
-                        NULL, 0,
-                        reloc, nr_relocs,
-                        NULL,
-                        bo_out))
-      return PIPE_OK;
-
-   /* Upload zero data, will all be overwitten with relocation
-    * offsets:
-    */
-   for (i = 0; i < brw->wm.nr_surfaces; i++)
-      data[i] = 0;
-
-   ret = brw_upload_cache( &brw->surface_cache, BRW_SS_SURF_BIND,
-                           NULL, 0,
-                           reloc, nr_relocs,
-                           data, data_size,
-                           NULL, NULL,
-                           bo_out);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-static enum pipe_error prepare_wm_surfaces(struct brw_context *brw )
-{
-   enum pipe_error ret;
-   int nr_surfaces = 0;
-   GLuint i;
-
-   /* PIPE_NEW_COLOR_BUFFERS | PIPE_NEW_BLEND
-    *
-    * Update surfaces for drawing buffers.  Mixes in colormask and
-    * blend state.
-    *
-    * XXX: no color buffer case
-    */
-   for (i = 0; i < brw->curr.fb.nr_cbufs; i++) {
-      ret = brw_update_render_surface(brw, 
-                                      brw_surface(brw->curr.fb.cbufs[i]), 
-                                      &brw->wm.surf_bo[BTI_COLOR_BUF(i)]);
-      if (ret)
-         return ret;
-      
-      nr_surfaces = BTI_COLOR_BUF(i) + 1;
-   }
-
-
-
-   /* PIPE_NEW_FRAGMENT_CONSTANTS
-    */
-#if 0
-   if (brw->curr.fragment_constants) {
-      ret = brw_update_fragment_constant_surface(
-         brw, 
-         brw->curr.fragment_constants, 
-         &brw->wm.surf_bo[BTI_FRAGMENT_CONSTANTS]);
-
-      if (ret)
-         return ret;
-
-      nr_surfaces = BTI_FRAGMENT_CONSTANTS + 1;
-   }
-   else {
-      bo_reference(&brw->wm.surf_bo[SURF_FRAG_CONSTANTS], NULL);      
-   }
-#endif
-
-
-   /* PIPE_NEW_TEXTURE 
-    */
-   for (i = 0; i < brw->curr.num_fragment_sampler_views; i++) {
-      ret = brw_update_texture_surface(brw, 
-                                       brw_texture(brw->curr.fragment_sampler_views[i]->texture),
-                                       &brw->wm.surf_bo[BTI_TEXTURE(i)]);
-      if (ret)
-         return ret;
-
-      nr_surfaces = BTI_TEXTURE(i) + 1;
-   }
-
-   /* Clear any inactive entries:
-    */
-   for (i = brw->curr.fb.nr_cbufs; i < BRW_MAX_DRAW_BUFFERS; i++) 
-      bo_reference(&brw->wm.surf_bo[BTI_COLOR_BUF(i)], NULL);
-
-   if (!brw->curr.fragment_constants)
-      bo_reference(&brw->wm.surf_bo[BTI_FRAGMENT_CONSTANTS], NULL);      
-
-   /* XXX: no pipe_max_textures define?? */
-   for (i = brw->curr.num_fragment_sampler_views; i < PIPE_MAX_SAMPLERS; i++)
-      bo_reference(&brw->wm.surf_bo[BTI_TEXTURE(i)], NULL);
-
-   if (brw->wm.nr_surfaces != nr_surfaces) {
-      brw->wm.nr_surfaces = nr_surfaces;
-      brw->state.dirty.brw |= BRW_NEW_NR_WM_SURFACES;
-   }
-
-   ret = brw_wm_get_binding_table(brw, &brw->wm.bind_bo);
-   if (ret)
-      return ret;
-
-   return PIPE_OK;
-}
-
-const struct brw_tracked_state brw_wm_surfaces = {
-   .dirty = {
-      .mesa = (PIPE_NEW_COLOR_BUFFERS |
-               PIPE_NEW_BOUND_TEXTURES |
-               PIPE_NEW_FRAGMENT_CONSTANTS |
-              PIPE_NEW_BLEND),
-      .brw = (BRW_NEW_CONTEXT |
-             BRW_NEW_WM_SURFACES),
-      .cache = 0
-   },
-   .prepare = prepare_wm_surfaces,
-};
-
-
-
diff --git a/src/gallium/drivers/i965/intel_decode.c b/src/gallium/drivers/i965/intel_decode.c
deleted file mode 100644 (file)
index 1abe869..0000000
+++ /dev/null
@@ -1,2078 +0,0 @@
-/* -*- c-basic-offset: 4 -*- */
-/*
- * Copyright © 2007 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- *    Eric Anholt <eric@anholt.net>
- *
- */
-
-/** @file intel_decode.c
- * This file contains code to print out batchbuffer contents in a
- * human-readable format.
- *
- * The current version only supports i915 packets, and only pretty-prints a
- * subset of them.  The intention is for it to make just a best attempt to
- * decode, but never crash in the process.
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <string.h>
-
-#include "util/u_memory.h"
-#include "util/u_string.h"
-
-#include "intel_decode.h"
-#include "brw_reg.h"
-
-/*#include "intel_chipset.h"*/
-#define IS_9XX(x) 1             /* XXX */
-
-#define BUFFER_FAIL(_count, _len, _name) do {                  \
-    fprintf(out, "Buffer size too small in %s (%d < %d)\n",    \
-           (_name), (_count), (_len));                         \
-    (*failures)++;                                             \
-    return count;                                              \
-} while (0)
-
-static FILE *out;
-static uint32_t saved_s2 = 0, saved_s4 = 0;
-static char saved_s2_set = 0, saved_s4_set = 0;
-
-static float
-int_as_float(uint32_t intval)
-{
-    union intfloat {
-       uint32_t i;
-       float f;
-    } uval;
-
-    uval.i = intval;
-    return uval.f;
-}
-
-static void
-instr_out(const uint32_t *data, uint32_t hw_offset, unsigned int index,
-         char *fmt, ...)
-{
-    va_list va;
-
-    fprintf(out, "0x%08x: 0x%08x:%s ", hw_offset + index * 4, data[index],
-           index == 0 ? "" : "  ");
-    va_start(va, fmt);
-    vfprintf(out, fmt, va);
-    va_end(va);
-}
-
-
-static int
-decode_mi(const uint32_t *data, int count, uint32_t hw_offset, int *failures)
-{
-    unsigned int opcode;
-
-    struct {
-       uint32_t opcode;
-       int len_mask;
-       int min_len;
-       int max_len;
-       char *name;
-    } opcodes_mi[] = {
-       { 0x08, 0, 1, 1, "MI_ARB_ON_OFF" },
-       { 0x0a, 0, 1, 1, "MI_BATCH_BUFFER_END" },
-       { 0x30, 0x3f, 3, 3, "MI_BATCH_BUFFER" },
-       { 0x31, 0x3f, 2, 2, "MI_BATCH_BUFFER_START" },
-       { 0x14, 0x3f, 3, 3, "MI_DISPLAY_BUFFER_INFO" },
-       { 0x04, 0, 1, 1, "MI_FLUSH" },
-       { 0x22, 0x1f, 3, 3, "MI_LOAD_REGISTER_IMM" },
-       { 0x13, 0x3f, 2, 2, "MI_LOAD_SCAN_LINES_EXCL" },
-       { 0x12, 0x3f, 2, 2, "MI_LOAD_SCAN_LINES_INCL" },
-       { 0x00, 0, 1, 1, "MI_NOOP" },
-       { 0x11, 0x3f, 2, 2, "MI_OVERLAY_FLIP" },
-       { 0x07, 0, 1, 1, "MI_REPORT_HEAD" },
-       { 0x18, 0x3f, 2, 2, "MI_SET_CONTEXT" },
-       { 0x20, 0x3f, 3, 4, "MI_STORE_DATA_IMM" },
-       { 0x21, 0x3f, 3, 4, "MI_STORE_DATA_INDEX" },
-       { 0x24, 0x3f, 3, 3, "MI_STORE_REGISTER_MEM" },
-       { 0x02, 0, 1, 1, "MI_USER_INTERRUPT" },
-       { 0x03, 0, 1, 1, "MI_WAIT_FOR_EVENT" },
-    };
-
-    switch ((data[0] & 0x1f800000) >> 23) {
-    case 0x0a:
-       instr_out(data, hw_offset, 0, "MI_BATCH_BUFFER_END\n");
-       return -1;
-    }
-
-    for (opcode = 0; opcode < Elements(opcodes_mi); opcode++) {
-       if ((data[0] & 0x1f800000) >> 23 == opcodes_mi[opcode].opcode) {
-           unsigned int len = 1, i;
-
-           instr_out(data, hw_offset, 0, "%s\n", opcodes_mi[opcode].name);
-           if (opcodes_mi[opcode].max_len > 1) {
-               len = (data[0] & opcodes_mi[opcode].len_mask) + 2;
-               if (len < opcodes_mi[opcode].min_len ||
-                   len > opcodes_mi[opcode].max_len)
-               {
-                   fprintf(out, "Bad length (%d) in %s, [%d, %d]\n",
-                           len, opcodes_mi[opcode].name,
-                           opcodes_mi[opcode].min_len,
-                           opcodes_mi[opcode].max_len);
-               }
-           }
-
-           for (i = 1; i < len; i++) {
-               if (i >= count)
-                   BUFFER_FAIL(count, len, opcodes_mi[opcode].name);
-               instr_out(data, hw_offset, i, "dword %d\n", i);
-           }
-
-           return len;
-       }
-    }
-
-    instr_out(data, hw_offset, 0, "MI UNKNOWN\n");
-    (*failures)++;
-    return 1;
-}
-
-static int
-decode_2d(const uint32_t *data, int count, uint32_t hw_offset, int *failures)
-{
-    unsigned int opcode, len;
-    char *format = NULL;
-
-    struct {
-       uint32_t opcode;
-       int min_len;
-       int max_len;
-       char *name;
-    } opcodes_2d[] = {
-       { 0x40, 5, 5, "COLOR_BLT" },
-       { 0x43, 6, 6, "SRC_COPY_BLT" },
-       { 0x01, 8, 8, "XY_SETUP_BLT" },
-       { 0x11, 9, 9, "XY_SETUP_MONO_PATTERN_SL_BLT" },
-       { 0x03, 3, 3, "XY_SETUP_CLIP_BLT" },
-       { 0x24, 2, 2, "XY_PIXEL_BLT" },
-       { 0x25, 3, 3, "XY_SCANLINES_BLT" },
-       { 0x26, 4, 4, "Y_TEXT_BLT" },
-       { 0x31, 5, 134, "XY_TEXT_IMMEDIATE_BLT" },
-       { 0x50, 6, 6, "XY_COLOR_BLT" },
-       { 0x51, 6, 6, "XY_PAT_BLT" },
-       { 0x76, 8, 8, "XY_PAT_CHROMA_BLT" },
-       { 0x72, 7, 135, "XY_PAT_BLT_IMMEDIATE" },
-       { 0x77, 9, 137, "XY_PAT_CHROMA_BLT_IMMEDIATE" },
-       { 0x52, 9, 9, "XY_MONO_PAT_BLT" },
-       { 0x59, 7, 7, "XY_MONO_PAT_FIXED_BLT" },
-       { 0x53, 8, 8, "XY_SRC_COPY_BLT" },
-       { 0x54, 8, 8, "XY_MONO_SRC_COPY_BLT" },
-       { 0x71, 9, 137, "XY_MONO_SRC_COPY_IMMEDIATE_BLT" },
-       { 0x55, 9, 9, "XY_FULL_BLT" },
-       { 0x55, 9, 137, "XY_FULL_IMMEDIATE_PATTERN_BLT" },
-       { 0x56, 9, 9, "XY_FULL_MONO_SRC_BLT" },
-       { 0x75, 10, 138, "XY_FULL_MONO_SRC_IMMEDIATE_PATTERN_BLT" },
-       { 0x57, 12, 12, "XY_FULL_MONO_PATTERN_BLT" },
-       { 0x58, 12, 12, "XY_FULL_MONO_PATTERN_MONO_SRC_BLT" },
-    };
-
-    switch ((data[0] & 0x1fc00000) >> 22) {
-    case 0x50:
-       instr_out(data, hw_offset, 0,
-                 "XY_COLOR_BLT (rgb %sabled, alpha %sabled, dst tile %d)\n",
-                 (data[0] & (1 << 20)) ? "en" : "dis",
-                 (data[0] & (1 << 21)) ? "en" : "dis",
-                 (data[0] >> 11) & 1);
-
-       len = (data[0] & 0x000000ff) + 2;
-       if (len != 6)
-           fprintf(out, "Bad count in XY_COLOR_BLT\n");
-       if (count < 6)
-           BUFFER_FAIL(count, len, "XY_COLOR_BLT");
-
-       switch ((data[1] >> 24) & 0x3) {
-       case 0:
-           format="8";
-           break;
-       case 1:
-           format="565";
-           break;
-       case 2:
-           format="1555";
-           break;
-       case 3:
-           format="8888";
-           break;
-       }
-
-       instr_out(data, hw_offset, 1, "format %s, pitch %d, "
-                 "clipping %sabled\n", format,
-                 (short)(data[1] & 0xffff),
-                 data[1] & (1 << 30) ? "en" : "dis");
-       instr_out(data, hw_offset, 2, "(%d,%d)\n",
-                 data[2] & 0xffff, data[2] >> 16);
-       instr_out(data, hw_offset, 3, "(%d,%d)\n",
-                 data[3] & 0xffff, data[3] >> 16);
-       instr_out(data, hw_offset, 4, "offset 0x%08x\n", data[4]);
-       instr_out(data, hw_offset, 5, "color\n");
-       return len;
-    case 0x53:
-       instr_out(data, hw_offset, 0,
-                 "XY_SRC_COPY_BLT (rgb %sabled, alpha %sabled, "
-                 "src tile %d, dst tile %d)\n",
-                 (data[0] & (1 << 20)) ? "en" : "dis",
-                 (data[0] & (1 << 21)) ? "en" : "dis",
-                 (data[0] >> 15) & 1,
-                 (data[0] >> 11) & 1);
-
-       len = (data[0] & 0x000000ff) + 2;
-       if (len != 8)
-           fprintf(out, "Bad count in XY_SRC_COPY_BLT\n");
-       if (count < 8)
-           BUFFER_FAIL(count, len, "XY_SRC_COPY_BLT");
-
-       switch ((data[1] >> 24) & 0x3) {
-       case 0:
-           format="8";
-           break;
-       case 1:
-           format="565";
-           break;
-       case 2:
-           format="1555";
-           break;
-       case 3:
-           format="8888";
-           break;
-       }
-
-       instr_out(data, hw_offset, 1, "format %s, dst pitch %d, "
-                 "clipping %sabled\n", format,
-                 (short)(data[1] & 0xffff),
-                 data[1] & (1 << 30) ? "en" : "dis");
-       instr_out(data, hw_offset, 2, "dst (%d,%d)\n",
-                 data[2] & 0xffff, data[2] >> 16);
-       instr_out(data, hw_offset, 3, "dst (%d,%d)\n",
-                 data[3] & 0xffff, data[3] >> 16);
-       instr_out(data, hw_offset, 4, "dst offset 0x%08x\n", data[4]);
-       instr_out(data, hw_offset, 5, "src (%d,%d)\n",
-                 data[5] & 0xffff, data[5] >> 16);
-       instr_out(data, hw_offset, 6, "src pitch %d\n",
-                 (short)(data[6] & 0xffff));
-       instr_out(data, hw_offset, 7, "src offset 0x%08x\n", data[7]);
-       return len;
-    }
-
-    for (opcode = 0; opcode < Elements(opcodes_2d); opcode++) {
-       if ((data[0] & 0x1fc00000) >> 22 == opcodes_2d[opcode].opcode) {
-           unsigned int i;
-
-           len = 1;
-           instr_out(data, hw_offset, 0, "%s\n", opcodes_2d[opcode].name);
-           if (opcodes_2d[opcode].max_len > 1) {
-               len = (data[0] & 0x000000ff) + 2;
-               if (len < opcodes_2d[opcode].min_len ||
-                   len > opcodes_2d[opcode].max_len)
-               {
-                   fprintf(out, "Bad count in %s\n", opcodes_2d[opcode].name);
-               }
-           }
-
-           for (i = 1; i < len; i++) {
-               if (i >= count)
-                   BUFFER_FAIL(count, len, opcodes_2d[opcode].name);
-               instr_out(data, hw_offset, i, "dword %d\n", i);
-           }
-
-           return len;
-       }
-    }
-
-    instr_out(data, hw_offset, 0, "2D UNKNOWN\n");
-    (*failures)++;
-    return 1;
-}
-
-static int
-decode_3d_1c(const uint32_t *data, int count, uint32_t hw_offset, int *failures)
-{
-    uint32_t opcode;
-
-    opcode = (data[0] & 0x00f80000) >> 19;
-
-    switch (opcode) {
-    case 0x11:
-       instr_out(data, hw_offset, 0, "3DSTATE_DEPTH_SUBRECTANGLE_DISABLE\n");
-       return 1;
-    case 0x10:
-       instr_out(data, hw_offset, 0, "3DSTATE_SCISSOR_ENABLE\n");
-       return 1;
-    case 0x01:
-       instr_out(data, hw_offset, 0, "3DSTATE_MAP_COORD_SET_I830\n");
-       return 1;
-    case 0x0a:
-       instr_out(data, hw_offset, 0, "3DSTATE_MAP_CUBE_I830\n");
-       return 1;
-    case 0x05:
-       instr_out(data, hw_offset, 0, "3DSTATE_MAP_TEX_STREAM_I830\n");
-       return 1;
-    }
-
-    instr_out(data, hw_offset, 0, "3D UNKNOWN: 3d_1c opcode = 0x%x\n",
-             opcode);
-    (*failures)++;
-    return 1;
-}
-
-/** Sets the string dstname to describe the destination of the PS instruction */
-static void
-i915_get_instruction_dst(const uint32_t *data, int i, char *dstname, int do_mask)
-{
-    uint32_t a0 = data[i];
-    int dst_nr = (a0 >> 14) & 0xf;
-    char dstmask[8];
-    char *sat;
-
-    if (do_mask) {
-       if (((a0 >> 10) & 0xf) == 0xf) {
-           dstmask[0] = 0;
-       } else {
-           int dstmask_index = 0;
-
-           dstmask[dstmask_index++] = '.';
-           if (a0 & (1 << 10))
-               dstmask[dstmask_index++] = 'x';
-           if (a0 & (1 << 11))
-               dstmask[dstmask_index++] = 'y';
-           if (a0 & (1 << 12))
-               dstmask[dstmask_index++] = 'z';
-           if (a0 & (1 << 13))
-               dstmask[dstmask_index++] = 'w';
-           dstmask[dstmask_index++] = 0;
-       }
-
-       if (a0 & (1 << 22))
-           sat = ".sat";
-       else
-           sat = "";
-    } else {
-       dstmask[0] = 0;
-       sat = "";
-    }
-
-    switch ((a0 >> 19) & 0x7) {
-    case 0:
-       if (dst_nr > 15)
-           fprintf(out, "bad destination reg R%d\n", dst_nr);
-       sprintf(dstname, "R%d%s%s", dst_nr, dstmask, sat);
-       break;
-    case 4:
-       if (dst_nr > 0)
-           fprintf(out, "bad destination reg oC%d\n", dst_nr);
-       sprintf(dstname, "oC%s%s", dstmask, sat);
-       break;
-    case 5:
-       if (dst_nr > 0)
-           fprintf(out, "bad destination reg oD%d\n", dst_nr);
-       sprintf(dstname, "oD%s%s",  dstmask, sat);
-       break;
-    case 6:
-       if (dst_nr > 3)
-           fprintf(out, "bad destination reg U%d\n", dst_nr);
-       sprintf(dstname, "U%d%s%s", dst_nr, dstmask, sat);
-       break;
-    default:
-       sprintf(dstname, "RESERVED");
-       break;
-    }
-}
-
-static char *
-i915_get_channel_swizzle(uint32_t select)
-{
-    switch (select & 0x7) {
-    case 0:
-       return (select & 8) ? "-x" : "x";
-    case 1:
-       return (select & 8) ? "-y" : "y";
-    case 2:
-       return (select & 8) ? "-z" : "z";
-    case 3:
-       return (select & 8) ? "-w" : "w";
-    case 4:
-       return (select & 8) ? "-0" : "0";
-    case 5:
-       return (select & 8) ? "-1" : "1";
-    default:
-       return (select & 8) ? "-bad" : "bad";
-    }
-}
-
-static void
-i915_get_instruction_src_name(uint32_t src_type, uint32_t src_nr, char *name)
-{
-    switch (src_type) {
-    case 0:
-       sprintf(name, "R%d", src_nr);
-       if (src_nr > 15)
-           fprintf(out, "bad src reg %s\n", name);
-       break;
-    case 1:
-       if (src_nr < 8)
-           sprintf(name, "T%d", src_nr);
-       else if (src_nr == 8)
-           sprintf(name, "DIFFUSE");
-       else if (src_nr == 9)
-           sprintf(name, "SPECULAR");
-       else if (src_nr == 10)
-           sprintf(name, "FOG");
-       else {
-           fprintf(out, "bad src reg T%d\n", src_nr);
-           sprintf(name, "RESERVED");
-       }
-       break;
-    case 2:
-       sprintf(name, "C%d", src_nr);
-       if (src_nr > 31)
-           fprintf(out, "bad src reg %s\n", name);
-       break;
-    case 4:
-       sprintf(name, "oC");
-       if (src_nr > 0)
-           fprintf(out, "bad src reg oC%d\n", src_nr);
-       break;
-    case 5:
-       sprintf(name, "oD");
-       if (src_nr > 0)
-           fprintf(out, "bad src reg oD%d\n", src_nr);
-       break;
-    case 6:
-       sprintf(name, "U%d", src_nr);
-       if (src_nr > 3)
-           fprintf(out, "bad src reg %s\n", name);
-       break;
-    default:
-       fprintf(out, "bad src reg type %d\n", src_type);
-       sprintf(name, "RESERVED");
-       break;
-    }
-}
-
-static void
-i915_get_instruction_src0(const uint32_t *data, int i, char *srcname)
-{
-    uint32_t a0 = data[i];
-    uint32_t a1 = data[i + 1];
-    int src_nr = (a0 >> 2) & 0x1f;
-    char *swizzle_x = i915_get_channel_swizzle((a1 >> 28) & 0xf);
-    char *swizzle_y = i915_get_channel_swizzle((a1 >> 24) & 0xf);
-    char *swizzle_z = i915_get_channel_swizzle((a1 >> 20) & 0xf);
-    char *swizzle_w = i915_get_channel_swizzle((a1 >> 16) & 0xf);
-    char swizzle[100];
-
-    i915_get_instruction_src_name((a0 >> 7) & 0x7, src_nr, srcname);
-    util_snprintf(swizzle, sizeof(swizzle), ".%s%s%s%s", swizzle_x, swizzle_y, swizzle_z, swizzle_w);
-    if (strcmp(swizzle, ".xyzw") != 0)
-       strcat(srcname, swizzle);
-}
-
-static void
-i915_get_instruction_src1(const uint32_t *data, int i, char *srcname)
-{
-    uint32_t a1 = data[i + 1];
-    uint32_t a2 = data[i + 2];
-    int src_nr = (a1 >> 8) & 0x1f;
-    char *swizzle_x = i915_get_channel_swizzle((a1 >> 4) & 0xf);
-    char *swizzle_y = i915_get_channel_swizzle((a1 >> 0) & 0xf);
-    char *swizzle_z = i915_get_channel_swizzle((a2 >> 28) & 0xf);
-    char *swizzle_w = i915_get_channel_swizzle((a2 >> 24) & 0xf);
-    char swizzle[100];
-
-    i915_get_instruction_src_name((a1 >> 13) & 0x7, src_nr, srcname);
-    util_snprintf(swizzle, sizeof(swizzle), ".%s%s%s%s", swizzle_x, swizzle_y, swizzle_z, swizzle_w);
-    if (strcmp(swizzle, ".xyzw") != 0)
-       strcat(srcname, swizzle);
-}
-
-static void
-i915_get_instruction_src2(const uint32_t *data, int i, char *srcname)
-{
-    uint32_t a2 = data[i + 2];
-    int src_nr = (a2 >> 16) & 0x1f;
-    char *swizzle_x = i915_get_channel_swizzle((a2 >> 12) & 0xf);
-    char *swizzle_y = i915_get_channel_swizzle((a2 >> 8) & 0xf);
-    char *swizzle_z = i915_get_channel_swizzle((a2 >> 4) & 0xf);
-    char *swizzle_w = i915_get_channel_swizzle((a2 >> 0) & 0xf);
-    char swizzle[100];
-
-    i915_get_instruction_src_name((a2 >> 21) & 0x7, src_nr, srcname);
-    util_snprintf(swizzle, sizeof(swizzle), ".%s%s%s%s", swizzle_x, swizzle_y, swizzle_z, swizzle_w);
-    if (strcmp(swizzle, ".xyzw") != 0)
-       strcat(srcname, swizzle);
-}
-
-static void
-i915_get_instruction_addr(uint32_t src_type, uint32_t src_nr, char *name)
-{
-    switch (src_type) {
-    case 0:
-       sprintf(name, "R%d", src_nr);
-       if (src_nr > 15)
-           fprintf(out, "bad src reg %s\n", name);
-       break;
-    case 1:
-       if (src_nr < 8)
-           sprintf(name, "T%d", src_nr);
-       else if (src_nr == 8)
-           sprintf(name, "DIFFUSE");
-       else if (src_nr == 9)
-           sprintf(name, "SPECULAR");
-       else if (src_nr == 10)
-           sprintf(name, "FOG");
-       else {
-           fprintf(out, "bad src reg T%d\n", src_nr);
-           sprintf(name, "RESERVED");
-       }
-       break;
-    case 4:
-       sprintf(name, "oC");
-       if (src_nr > 0)
-           fprintf(out, "bad src reg oC%d\n", src_nr);
-       break;
-    case 5:
-       sprintf(name, "oD");
-       if (src_nr > 0)
-           fprintf(out, "bad src reg oD%d\n", src_nr);
-       break;
-    default:
-       fprintf(out, "bad src reg type %d\n", src_type);
-       sprintf(name, "RESERVED");
-       break;
-    }
-}
-
-static void
-i915_decode_alu1(const uint32_t *data, uint32_t hw_offset,
-                int i, char *instr_prefix, char *op_name)
-{
-    char dst[100], src0[100];
-
-    i915_get_instruction_dst(data, i, dst, 1);
-    i915_get_instruction_src0(data, i, src0);
-
-    instr_out(data, hw_offset, i++, "%s: %s %s, %s\n", instr_prefix,
-             op_name, dst, src0);
-    instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-    instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-}
-
-static void
-i915_decode_alu2(const uint32_t *data, uint32_t hw_offset,
-                int i, char *instr_prefix, char *op_name)
-{
-    char dst[100], src0[100], src1[100];
-
-    i915_get_instruction_dst(data, i, dst, 1);
-    i915_get_instruction_src0(data, i, src0);
-    i915_get_instruction_src1(data, i, src1);
-
-    instr_out(data, hw_offset, i++, "%s: %s %s, %s, %s\n", instr_prefix,
-             op_name, dst, src0, src1);
-    instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-    instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-}
-
-static void
-i915_decode_alu3(const uint32_t *data, uint32_t hw_offset,
-                int i, char *instr_prefix, char *op_name)
-{
-    char dst[100], src0[100], src1[100], src2[100];
-
-    i915_get_instruction_dst(data, i, dst, 1);
-    i915_get_instruction_src0(data, i, src0);
-    i915_get_instruction_src1(data, i, src1);
-    i915_get_instruction_src2(data, i, src2);
-
-    instr_out(data, hw_offset, i++, "%s: %s %s, %s, %s, %s\n", instr_prefix,
-             op_name, dst, src0, src1, src2);
-    instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-    instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-}
-
-static void
-i915_decode_tex(const uint32_t *data, uint32_t hw_offset, int i, char *instr_prefix,
-               char *tex_name)
-{
-    uint32_t t0 = data[i];
-    uint32_t t1 = data[i + 1];
-    char dst_name[100];
-    char addr_name[100];
-    int sampler_nr;
-
-    i915_get_instruction_dst(data, i, dst_name, 0);
-    i915_get_instruction_addr((t1 >> 24) & 0x7,
-                             (t1 >> 17) & 0xf,
-                             addr_name);
-    sampler_nr = t0 & 0xf;
-
-    instr_out(data, hw_offset, i++, "%s: %s %s, S%d, %s\n", instr_prefix,
-             tex_name, dst_name, sampler_nr, addr_name);
-    instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-    instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-}
-
-static void
-i915_decode_dcl(const uint32_t *data, uint32_t hw_offset, int i, char *instr_prefix)
-{
-    uint32_t d0 = data[i];
-    char *sampletype;
-    int dcl_nr = (d0 >> 14) & 0xf;
-    char *dcl_x = d0 & (1 << 10) ? "x" : "";
-    char *dcl_y = d0 & (1 << 11) ? "y" : "";
-    char *dcl_z = d0 & (1 << 12) ? "z" : "";
-    char *dcl_w = d0 & (1 << 13) ? "w" : "";
-    char dcl_mask[10];
-
-    switch ((d0 >> 19) & 0x3) {
-    case 1:
-       util_snprintf(dcl_mask, sizeof(dcl_mask), ".%s%s%s%s", dcl_x, dcl_y, dcl_z, dcl_w);
-       if (strcmp(dcl_mask, ".") == 0)
-           fprintf(out, "bad (empty) dcl mask\n");
-
-       if (dcl_nr > 10)
-           fprintf(out, "bad T%d dcl register number\n", dcl_nr);
-       if (dcl_nr < 8) {
-           if (strcmp(dcl_mask, ".x") != 0 &&
-               strcmp(dcl_mask, ".xy") != 0 &&
-               strcmp(dcl_mask, ".xz") != 0 &&
-               strcmp(dcl_mask, ".w") != 0 &&
-               strcmp(dcl_mask, ".xyzw") != 0) {
-               fprintf(out, "bad T%d.%s dcl mask\n", dcl_nr, dcl_mask);
-           }
-           instr_out(data, hw_offset, i++, "%s: DCL T%d%s\n", instr_prefix,
-                     dcl_nr, dcl_mask);
-       } else {
-           if (strcmp(dcl_mask, ".xz") == 0)
-               fprintf(out, "errataed bad dcl mask %s\n", dcl_mask);
-           else if (strcmp(dcl_mask, ".xw") == 0)
-               fprintf(out, "errataed bad dcl mask %s\n", dcl_mask);
-           else if (strcmp(dcl_mask, ".xzw") == 0)
-               fprintf(out, "errataed bad dcl mask %s\n", dcl_mask);
-
-           if (dcl_nr == 8) {
-               instr_out(data, hw_offset, i++, "%s: DCL DIFFUSE%s\n", instr_prefix,
-                         dcl_mask);
-           } else if (dcl_nr == 9) {
-               instr_out(data, hw_offset, i++, "%s: DCL SPECULAR%s\n", instr_prefix,
-                         dcl_mask);
-           } else if (dcl_nr == 10) {
-               instr_out(data, hw_offset, i++, "%s: DCL FOG%s\n", instr_prefix,
-                         dcl_mask);
-           }
-       }
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-       break;
-    case 3:
-       switch ((d0 >> 22) & 0x3) {
-       case 0:
-           sampletype = "2D";
-           break;
-       case 1:
-           sampletype = "CUBE";
-           break;
-       case 2:
-           sampletype = "3D";
-           break;
-       default:
-           sampletype = "RESERVED";
-           break;
-       }
-       if (dcl_nr > 15)
-           fprintf(out, "bad S%d dcl register number\n", dcl_nr);
-       instr_out(data, hw_offset, i++, "%s: DCL S%d %s\n", instr_prefix,
-                 dcl_nr, sampletype);
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-       break;
-    default:
-       instr_out(data, hw_offset, i++, "%s: DCL RESERVED%d\n", instr_prefix, dcl_nr);
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-    }
-}
-
-static void
-i915_decode_instruction(const uint32_t *data, uint32_t hw_offset,
-                       int i, char *instr_prefix)
-{
-    switch ((data[i] >> 24) & 0x1f) {
-    case 0x0:
-       instr_out(data, hw_offset, i++, "%s: NOP\n", instr_prefix);
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-       break;
-    case 0x01:
-       i915_decode_alu2(data, hw_offset, i, instr_prefix, "ADD");
-       break;
-    case 0x02:
-       i915_decode_alu1(data, hw_offset, i, instr_prefix, "MOV");
-       break;
-    case 0x03:
-       i915_decode_alu2(data, hw_offset, i, instr_prefix, "MUL");
-       break;
-    case 0x04:
-       i915_decode_alu3(data, hw_offset, i, instr_prefix, "MAD");
-       break;
-    case 0x05:
-       i915_decode_alu3(data, hw_offset, i, instr_prefix, "DP2ADD");
-       break;
-    case 0x06:
-       i915_decode_alu2(data, hw_offset, i, instr_prefix, "DP3");
-       break;
-    case 0x07:
-       i915_decode_alu2(data, hw_offset, i, instr_prefix, "DP4");
-       break;
-    case 0x08:
-       i915_decode_alu1(data, hw_offset, i, instr_prefix, "FRC");
-       break;
-    case 0x09:
-       i915_decode_alu1(data, hw_offset, i, instr_prefix, "RCP");
-       break;
-    case 0x0a:
-       i915_decode_alu1(data, hw_offset, i, instr_prefix, "RSQ");
-       break;
-    case 0x0b:
-       i915_decode_alu1(data, hw_offset, i, instr_prefix, "EXP");
-       break;
-    case 0x0c:
-       i915_decode_alu1(data, hw_offset, i, instr_prefix, "LOG");
-       break;
-    case 0x0d:
-       i915_decode_alu2(data, hw_offset, i, instr_prefix, "CMP");
-       break;
-    case 0x0e:
-       i915_decode_alu2(data, hw_offset, i, instr_prefix, "MIN");
-       break;
-    case 0x0f:
-       i915_decode_alu2(data, hw_offset, i, instr_prefix, "MAX");
-       break;
-    case 0x10:
-       i915_decode_alu1(data, hw_offset, i, instr_prefix, "FLR");
-       break;
-    case 0x11:
-       i915_decode_alu1(data, hw_offset, i, instr_prefix, "MOD");
-       break;
-    case 0x12:
-       i915_decode_alu1(data, hw_offset, i, instr_prefix, "TRC");
-       break;
-    case 0x13:
-       i915_decode_alu2(data, hw_offset, i, instr_prefix, "SGE");
-       break;
-    case 0x14:
-       i915_decode_alu2(data, hw_offset, i, instr_prefix, "SLT");
-       break;
-    case 0x15:
-       i915_decode_tex(data, hw_offset, i, instr_prefix, "TEXLD");
-       break;
-    case 0x16:
-       i915_decode_tex(data, hw_offset, i, instr_prefix, "TEXLDP");
-       break;
-    case 0x17:
-       i915_decode_tex(data, hw_offset, i, instr_prefix, "TEXLDB");
-       break;
-    case 0x19:
-       i915_decode_dcl(data, hw_offset, i, instr_prefix);
-       break;
-    default:
-       instr_out(data, hw_offset, i++, "%s: unknown\n", instr_prefix);
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-       instr_out(data, hw_offset, i++, "%s\n", instr_prefix);
-       break;
-    }
-}
-
-static int
-decode_3d_1d(const uint32_t *data, int count,
-            uint32_t hw_offset,
-            uint32_t devid,
-            int *failures)
-{
-    unsigned int len, i, c, idx, word, map, sampler, instr;
-    char *format;
-    uint32_t opcode;
-
-    struct {
-       uint32_t opcode;
-       int i830_only;
-       int min_len;
-       int max_len;
-       char *name;
-    } opcodes_3d_1d[] = {
-       { 0x8e, 0, 3, 3, "3DSTATE_BUFFER_INFO" },
-       { 0x86, 0, 4, 4, "3DSTATE_CHROMA_KEY" },
-       { 0x9c, 0, 7, 7, "3DSTATE_CLEAR_PARAMETERS" },
-       { 0x88, 0, 2, 2, "3DSTATE_CONSTANT_BLEND_COLOR" },
-       { 0x99, 0, 2, 2, "3DSTATE_DEFAULT_DIFFUSE" },
-       { 0x9a, 0, 2, 2, "3DSTATE_DEFAULT_SPECULAR" },
-       { 0x98, 0, 2, 2, "3DSTATE_DEFAULT_Z" },
-       { 0x97, 0, 2, 2, "3DSTATE_DEPTH_OFFSET_SCALE" },
-       { 0x85, 0, 2, 2, "3DSTATE_DEST_BUFFER_VARIABLES" },
-       { 0x80, 0, 5, 5, "3DSTATE_DRAWING_RECTANGLE" },
-       { 0x9d, 0, 65, 65, "3DSTATE_FILTER_COEFFICIENTS_4X4" },
-       { 0x9e, 0, 4, 4, "3DSTATE_MONO_FILTER" },
-       { 0x89, 0, 4, 4, "3DSTATE_FOG_MODE" },
-       { 0x8f, 0, 2, 16, "3DSTATE_MAP_PALLETE_LOAD_32" },
-       { 0x81, 0, 3, 3, "3DSTATE_SCISSOR_RECTANGLE" },
-       { 0x83, 0, 2, 2, "3DSTATE_SPAN_STIPPLE" },
-       { 0x8c, 1, 2, 2, "3DSTATE_MAP_COORD_TRANSFORM_I830" },
-       { 0x8b, 1, 2, 2, "3DSTATE_MAP_VERTEX_TRANSFORM_I830" },
-       { 0x8d, 1, 3, 3, "3DSTATE_W_STATE_I830" },
-       { 0x01, 1, 2, 2, "3DSTATE_COLOR_FACTOR_I830" },
-       { 0x02, 1, 2, 2, "3DSTATE_MAP_COORD_SETBIND_I830" },
-    }, *opcode_3d_1d;
-
-    opcode = (data[0] & 0x00ff0000) >> 16;
-
-    switch (opcode) {
-    case 0x07:
-       /* This instruction is unusual.  A 0 length means just 1 DWORD instead of
-        * 2.  The 0 length is specified in one place to be unsupported, but
-        * stated to be required in another, and 0 length LOAD_INDIRECTs appear
-        * to cause no harm at least.
-        */
-       instr_out(data, hw_offset, 0, "3DSTATE_LOAD_INDIRECT\n");
-       len = (data[0] & 0x000000ff) + 1;
-       i = 1;
-       if (data[0] & (0x01 << 8)) {
-           if (i + 2 >= count)
-               BUFFER_FAIL(count, len, "3DSTATE_LOAD_INDIRECT");
-           instr_out(data, hw_offset, i++, "SIS.0\n");
-           instr_out(data, hw_offset, i++, "SIS.1\n");
-       }
-       if (data[0] & (0x02 << 8)) {
-           if (i + 1 >= count)
-               BUFFER_FAIL(count, len, "3DSTATE_LOAD_INDIRECT");
-           instr_out(data, hw_offset, i++, "DIS.0\n");
-       }
-       if (data[0] & (0x04 << 8)) {
-           if (i + 2 >= count)
-               BUFFER_FAIL(count, len, "3DSTATE_LOAD_INDIRECT");
-           instr_out(data, hw_offset, i++, "SSB.0\n");
-           instr_out(data, hw_offset, i++, "SSB.1\n");
-       }
-       if (data[0] & (0x08 << 8)) {
-           if (i + 2 >= count)
-               BUFFER_FAIL(count, len, "3DSTATE_LOAD_INDIRECT");
-           instr_out(data, hw_offset, i++, "MSB.0\n");
-           instr_out(data, hw_offset, i++, "MSB.1\n");
-       }
-       if (data[0] & (0x10 << 8)) {
-           if (i + 2 >= count)
-               BUFFER_FAIL(count, len, "3DSTATE_LOAD_INDIRECT");
-           instr_out(data, hw_offset, i++, "PSP.0\n");
-           instr_out(data, hw_offset, i++, "PSP.1\n");
-       }
-       if (data[0] & (0x20 << 8)) {
-           if (i + 2 >= count)
-               BUFFER_FAIL(count, len, "3DSTATE_LOAD_INDIRECT");
-           instr_out(data, hw_offset, i++, "PSC.0\n");
-           instr_out(data, hw_offset, i++, "PSC.1\n");
-       }
-       if (len != i) {
-           fprintf(out, "Bad count in 3DSTATE_LOAD_INDIRECT\n");
-           (*failures)++;
-           return len;
-       }
-       return len;
-    case 0x04:
-       instr_out(data, hw_offset, 0, "3DSTATE_LOAD_STATE_IMMEDIATE_1\n");
-       len = (data[0] & 0x0000000f) + 2;
-       i = 1;
-       for (word = 0; word <= 8; word++) {
-           if (data[0] & (1 << (4 + word))) {
-               if (i >= count)
-                   BUFFER_FAIL(count, len, "3DSTATE_LOAD_STATE_IMMEDIATE_1");
-
-               /* save vertex state for decode */
-               if (IS_9XX(devid)) {
-                   if (word == 2) {
-                       saved_s2_set = 1;
-                       saved_s2 = data[i];
-                   }
-                   if (word == 4) {
-                       saved_s4_set = 1;
-                       saved_s4 = data[i];
-                   }
-               }
-
-               instr_out(data, hw_offset, i++, "S%d\n", word);
-           }
-       }
-       if (len != i) {
-           fprintf(out, "Bad count in 3DSTATE_LOAD_STATE_IMMEDIATE_1\n");
-           (*failures)++;
-       }
-       return len;
-    case 0x03:
-       instr_out(data, hw_offset, 0, "3DSTATE_LOAD_STATE_IMMEDIATE_2\n");
-       len = (data[0] & 0x0000000f) + 2;
-       i = 1;
-       for (word = 6; word <= 14; word++) {
-           if (data[0] & (1 << word)) {
-               if (i >= count)
-                   BUFFER_FAIL(count, len, "3DSTATE_LOAD_STATE_IMMEDIATE_2");
-
-               if (word == 6)
-                   instr_out(data, hw_offset, i++, "TBCF\n");
-               else if (word >= 7 && word <= 10) {
-                   instr_out(data, hw_offset, i++, "TB%dC\n", word - 7);
-                   instr_out(data, hw_offset, i++, "TB%dA\n", word - 7);
-               } else if (word >= 11 && word <= 14) {
-                   instr_out(data, hw_offset, i++, "TM%dS0\n", word - 11);
-                   instr_out(data, hw_offset, i++, "TM%dS1\n", word - 11);
-                   instr_out(data, hw_offset, i++, "TM%dS2\n", word - 11);
-                   instr_out(data, hw_offset, i++, "TM%dS3\n", word - 11);
-                   instr_out(data, hw_offset, i++, "TM%dS4\n", word - 11);
-               }
-           }
-       }
-       if (len != i) {
-           fprintf(out, "Bad count in 3DSTATE_LOAD_STATE_IMMEDIATE_2\n");
-           (*failures)++;
-       }
-       return len;
-    case 0x00:
-       instr_out(data, hw_offset, 0, "3DSTATE_MAP_STATE\n");
-       len = (data[0] & 0x0000003f) + 2;
-       instr_out(data, hw_offset, 1, "mask\n");
-
-       i = 2;
-       for (map = 0; map <= 15; map++) {
-           if (data[1] & (1 << map)) {
-               int width, height, pitch, dword;
-               const char *tiling;
-
-               if (i + 3 >= count)
-                   BUFFER_FAIL(count, len, "3DSTATE_MAP_STATE");
-               instr_out(data, hw_offset, i++, "map %d MS2\n", map);
-
-               dword = data[i];
-               width = ((dword >> 10) & ((1 << 11) - 1))+1;
-               height = ((dword >> 21) & ((1 << 11) - 1))+1;
-
-               tiling = "none";
-               if (dword & (1 << 2))
-                       tiling = "fenced";
-               else if (dword & (1 << 1))
-                       tiling = dword & (1 << 0) ? "Y" : "X";
-               instr_out(data, hw_offset, i++, "map %d MS3 [width=%d, height=%d, tiling=%s]\n", map, width, height, tiling);
-
-               dword = data[i];
-               pitch = 4*(((dword >> 21) & ((1 << 11) - 1))+1);
-               instr_out(data, hw_offset, i++, "map %d MS4 [pitch=%d]\n", map, pitch);
-           }
-       }
-       if (len != i) {
-           fprintf(out, "Bad count in 3DSTATE_MAP_STATE\n");
-           (*failures)++;
-           return len;
-       }
-       return len;
-    case 0x06:
-       instr_out(data, hw_offset, 0, "3DSTATE_PIXEL_SHADER_CONSTANTS\n");
-       len = (data[0] & 0x000000ff) + 2;
-
-       i = 2;
-       for (c = 0; c <= 31; c++) {
-           if (data[1] & (1 << c)) {
-               if (i + 4 >= count)
-                   BUFFER_FAIL(count, len, "3DSTATE_PIXEL_SHADER_CONSTANTS");
-               instr_out(data, hw_offset, i, "C%d.X = %f\n",
-                         c, int_as_float(data[i]));
-               i++;
-               instr_out(data, hw_offset, i, "C%d.Y = %f\n",
-                         c, int_as_float(data[i]));
-               i++;
-               instr_out(data, hw_offset, i, "C%d.Z = %f\n",
-                         c, int_as_float(data[i]));
-               i++;
-               instr_out(data, hw_offset, i, "C%d.W = %f\n",
-                         c, int_as_float(data[i]));
-               i++;
-           }
-       }
-       if (len != i) {
-           fprintf(out, "Bad count in 3DSTATE_PIXEL_SHADER_CONSTANTS\n");
-           (*failures)++;
-       }
-       return len;
-    case 0x05:
-       instr_out(data, hw_offset, 0, "3DSTATE_PIXEL_SHADER_PROGRAM\n");
-       len = (data[0] & 0x000000ff) + 2;
-       if ((len - 1) % 3 != 0 || len > 370) {
-           fprintf(out, "Bad count in 3DSTATE_PIXEL_SHADER_PROGRAM\n");
-           (*failures)++;
-       }
-       i = 1;
-       for (instr = 0; instr < (len - 1) / 3; instr++) {
-           char instr_prefix[10];
-
-           if (i + 3 >= count)
-               BUFFER_FAIL(count, len, "3DSTATE_PIXEL_SHADER_PROGRAM");
-           util_snprintf(instr_prefix, sizeof(instr_prefix), "PS%03d", instr);
-           i915_decode_instruction(data, hw_offset, i, instr_prefix);
-           i += 3;
-       }
-       return len;
-    case 0x01:
-       if (!IS_9XX(devid))
-               break;
-       instr_out(data, hw_offset, 0, "3DSTATE_SAMPLER_STATE\n");
-       instr_out(data, hw_offset, 1, "mask\n");
-       len = (data[0] & 0x0000003f) + 2;
-       i = 2;
-       for (sampler = 0; sampler <= 15; sampler++) {
-           if (data[1] & (1 << sampler)) {
-               if (i + 3 >= count)
-                   BUFFER_FAIL(count, len, "3DSTATE_SAMPLER_STATE");
-               instr_out(data, hw_offset, i++, "sampler %d SS2\n",
-                         sampler);
-               instr_out(data, hw_offset, i++, "sampler %d SS3\n",
-                         sampler);
-               instr_out(data, hw_offset, i++, "sampler %d SS4\n",
-                         sampler);
-           }
-       }
-       if (len != i) {
-           fprintf(out, "Bad count in 3DSTATE_SAMPLER_STATE\n");
-           (*failures)++;
-       }
-       return len;
-    case 0x85:
-       len = (data[0] & 0x0000000f) + 2;
-
-       if (len != 2)
-           fprintf(out, "Bad count in 3DSTATE_DEST_BUFFER_VARIABLES\n");
-       if (count < 2)
-           BUFFER_FAIL(count, len, "3DSTATE_DEST_BUFFER_VARIABLES");
-
-       instr_out(data, hw_offset, 0,
-                 "3DSTATE_DEST_BUFFER_VARIABLES\n");
-
-       switch ((data[1] >> 8) & 0xf) {
-       case 0x0: format = "g8"; break;
-       case 0x1: format = "x1r5g5b5"; break;
-       case 0x2: format = "r5g6b5"; break;
-       case 0x3: format = "a8r8g8b8"; break;
-       case 0x4: format = "ycrcb_swapy"; break;
-       case 0x5: format = "ycrcb_normal"; break;
-       case 0x6: format = "ycrcb_swapuv"; break;
-       case 0x7: format = "ycrcb_swapuvy"; break;
-       case 0x8: format = "a4r4g4b4"; break;
-       case 0x9: format = "a1r5g5b5"; break;
-       case 0xa: format = "a2r10g10b10"; break;
-       default: format = "BAD"; break;
-       }
-       instr_out(data, hw_offset, 1, "%s format, early Z %sabled\n",
-                 format,
-                 (data[1] & (1 << 31)) ? "en" : "dis");
-       return len;
-
-    case 0x8e:
-       {
-           const char *name, *tiling;
-
-           len = (data[0] & 0x0000000f) + 2;
-           if (len != 3)
-               fprintf(out, "Bad count in 3DSTATE_BUFFER_INFO\n");
-           if (count < 3)
-               BUFFER_FAIL(count, len, "3DSTATE_BUFFER_INFO");
-
-           switch((data[1] >> 24) & 0x7) {
-           case 0x3: name = "color"; break;
-           case 0x7: name = "depth"; break;
-           default: name = "unknown"; break;
-           }
-
-           tiling = "none";
-           if (data[1] & (1 << 23))
-               tiling = "fenced";
-           else if (data[1] & (1 << 22))
-               tiling = data[1] & (1 << 21) ? "Y" : "X";
-
-           instr_out(data, hw_offset, 0, "3DSTATE_BUFFER_INFO\n");
-           instr_out(data, hw_offset, 1, "%s, tiling = %s, pitch=%d\n", name, tiling, data[1]&0xffff);
-
-           instr_out(data, hw_offset, 2, "address\n");
-           return len;
-       }
-    }
-
-    for (idx = 0; idx < Elements(opcodes_3d_1d); idx++)
-    {
-       opcode_3d_1d = &opcodes_3d_1d[idx];
-       if (opcode_3d_1d->i830_only && IS_9XX(devid))
-           continue;
-
-       if (((data[0] & 0x00ff0000) >> 16) == opcode_3d_1d->opcode) {
-           len = 1;
-
-           instr_out(data, hw_offset, 0, "%s\n", opcode_3d_1d->name);
-           if (opcode_3d_1d->max_len > 1) {
-               len = (data[0] & 0x0000ffff) + 2;
-               if (len < opcode_3d_1d->min_len ||
-                   len > opcode_3d_1d->max_len)
-               {
-                   fprintf(out, "Bad count in %s\n",
-                           opcode_3d_1d->name);
-                   (*failures)++;
-               }
-           }
-
-           for (i = 1; i < len; i++) {
-               if (i >= count)
-                   BUFFER_FAIL(count, len,  opcode_3d_1d->name);
-               instr_out(data, hw_offset, i, "dword %d\n", i);
-           }
-
-           return len;
-       }
-    }
-
-    instr_out(data, hw_offset, 0, "3D UNKNOWN: 3d_1d opcode = 0x%x\n", opcode);
-    (*failures)++;
-    return 1;
-}
-
-static int
-decode_3d_primitive(const uint32_t *data, int count, uint32_t hw_offset,
-                   int *failures)
-{
-    char immediate = (data[0] & (1 << 23)) == 0;
-    unsigned int len, i, ret;
-    char *primtype;
-    int original_s2 = saved_s2;
-    int original_s4 = saved_s4;
-
-    switch ((data[0] >> 18) & 0xf) {
-    case 0x0: primtype = "TRILIST"; break;
-    case 0x1: primtype = "TRISTRIP"; break;
-    case 0x2: primtype = "TRISTRIP_REVERSE"; break;
-    case 0x3: primtype = "TRIFAN"; break;
-    case 0x4: primtype = "POLYGON"; break;
-    case 0x5: primtype = "LINELIST"; break;
-    case 0x6: primtype = "LINESTRIP"; break;
-    case 0x7: primtype = "RECTLIST"; break;
-    case 0x8: primtype = "POINTLIST"; break;
-    case 0x9: primtype = "DIB"; break;
-    case 0xa: primtype = "CLEAR_RECT"; saved_s4 = 3 << 6; saved_s2 = ~0; break;
-    default: primtype = "unknown"; break;
-    }
-
-    /* XXX: 3DPRIM_DIB not supported */
-    if (immediate) {
-       len = (data[0] & 0x0003ffff) + 2;
-       instr_out(data, hw_offset, 0, "3DPRIMITIVE inline %s\n", primtype);
-       if (count < len)
-           BUFFER_FAIL(count, len,  "3DPRIMITIVE inline");
-       if (!saved_s2_set || !saved_s4_set) {
-           fprintf(out, "unknown vertex format\n");
-           for (i = 1; i < len; i++) {
-               instr_out(data, hw_offset, i,
-                         "           vertex data (%f float)\n",
-                         int_as_float(data[i]));
-           }
-       } else {
-           unsigned int vertex = 0;
-           for (i = 1; i < len;) {
-               unsigned int tc;
-
-#define VERTEX_OUT(fmt, ...) do {                                      \
-    if (i < len)                                                       \
-       instr_out(data, hw_offset, i, " V%d."fmt"\n", vertex, __VA_ARGS__); \
-    else                                                               \
-       fprintf(out, " missing data in V%d\n", vertex);                 \
-    i++;                                                               \
-} while (0)
-
-               VERTEX_OUT("X = %f", int_as_float(data[i]));
-               VERTEX_OUT("Y = %f", int_as_float(data[i]));
-               switch (saved_s4 >> 6 & 0x7) {
-               case 0x1:
-                   VERTEX_OUT("Z = %f", int_as_float(data[i]));
-                   break;
-               case 0x2:
-                   VERTEX_OUT("Z = %f", int_as_float(data[i]));
-                   VERTEX_OUT("W = %f", int_as_float(data[i]));
-                   break;
-               case 0x3:
-                   break;
-               case 0x4:
-                   VERTEX_OUT("W = %f", int_as_float(data[i]));
-                   break;
-               default:
-                   fprintf(out, "bad S4 position mask\n");
-               }
-
-               if (saved_s4 & (1 << 10)) {
-                   VERTEX_OUT("color = (A=0x%02x, R=0x%02x, G=0x%02x, "
-                              "B=0x%02x)",
-                              data[i] >> 24,
-                              (data[i] >> 16) & 0xff,
-                              (data[i] >> 8) & 0xff,
-                              data[i] & 0xff);
-               }
-               if (saved_s4 & (1 << 11)) {
-                   VERTEX_OUT("spec = (A=0x%02x, R=0x%02x, G=0x%02x, "
-                              "B=0x%02x)",
-                              data[i] >> 24,
-                              (data[i] >> 16) & 0xff,
-                              (data[i] >> 8) & 0xff,
-                              data[i] & 0xff);
-               }
-               if (saved_s4 & (1 << 12))
-                   VERTEX_OUT("width = 0x%08x)", data[i]);
-
-               for (tc = 0; tc <= 7; tc++) {
-                   switch ((saved_s2 >> (tc * 4)) & 0xf) {
-                   case 0x0:
-                       VERTEX_OUT("T%d.X = %f", tc, int_as_float(data[i]));
-                       VERTEX_OUT("T%d.Y = %f", tc, int_as_float(data[i]));
-                       break;
-                   case 0x1:
-                       VERTEX_OUT("T%d.X = %f", tc, int_as_float(data[i]));
-                       VERTEX_OUT("T%d.Y = %f", tc, int_as_float(data[i]));
-                       VERTEX_OUT("T%d.Z = %f", tc, int_as_float(data[i]));
-                       break;
-                   case 0x2:
-                       VERTEX_OUT("T%d.X = %f", tc, int_as_float(data[i]));
-                       VERTEX_OUT("T%d.Y = %f", tc, int_as_float(data[i]));
-                       VERTEX_OUT("T%d.Z = %f", tc, int_as_float(data[i]));
-                       VERTEX_OUT("T%d.W = %f", tc, int_as_float(data[i]));
-                       break;
-                   case 0x3:
-                       VERTEX_OUT("T%d.X = %f", tc, int_as_float(data[i]));
-                       break;
-                   case 0x4:
-                       VERTEX_OUT("T%d.XY = 0x%08x half-float", tc, data[i]);
-                       break;
-                   case 0x5:
-                       VERTEX_OUT("T%d.XY = 0x%08x half-float", tc, data[i]);
-                       VERTEX_OUT("T%d.ZW = 0x%08x half-float", tc, data[i]);
-                       break;
-                   case 0xf:
-                       break;
-                   default:
-                       fprintf(out, "bad S2.T%d format\n", tc);
-                   }
-               }
-               vertex++;
-           }
-       }
-
-       ret = len;
-    } else {
-       /* indirect vertices */
-       len = data[0] & 0x0000ffff; /* index count */
-       if (data[0] & (1 << 17)) {
-           /* random vertex access */
-           if (count < (len + 1) / 2 + 1) {
-               BUFFER_FAIL(count, (len + 1) / 2 + 1,
-                           "3DPRIMITIVE random indirect");
-           }
-           instr_out(data, hw_offset, 0,
-                     "3DPRIMITIVE random indirect %s (%d)\n", primtype, len);
-           if (len == 0) {
-               /* vertex indices continue until 0xffff is found */
-               for (i = 1; i < count; i++) {
-                   if ((data[i] & 0xffff) == 0xffff) {
-                       instr_out(data, hw_offset, i,
-                                 "            indices: (terminator)\n");
-                       ret = i;
-                       goto out;
-                   } else if ((data[i] >> 16) == 0xffff) {
-                       instr_out(data, hw_offset, i,
-                                 "            indices: 0x%04x, "
-                                 "(terminator)\n",
-                                 data[i] & 0xffff);
-                       ret = i;
-                       goto out;
-                   } else {
-                       instr_out(data, hw_offset, i,
-                                 "            indices: 0x%04x, 0x%04x\n",
-                                 data[i] & 0xffff, data[i] >> 16);
-                   }
-               }
-               fprintf(out,
-                       "3DPRIMITIVE: no terminator found in index buffer\n");
-               (*failures)++;
-               ret = count;
-               goto out;
-           } else {
-               /* fixed size vertex index buffer */
-               for (i = 0; i < len; i += 2) {
-                   if (i * 2 == len - 1) {
-                       instr_out(data, hw_offset, i,
-                                 "            indices: 0x%04x\n",
-                                 data[i] & 0xffff);
-                   } else {
-                       instr_out(data, hw_offset, i,
-                                 "            indices: 0x%04x, 0x%04x\n",
-                                 data[i] & 0xffff, data[i] >> 16);
-                   }
-               }
-           }
-           ret = (len + 1) / 2 + 1;
-           goto out;
-       } else {
-           /* sequential vertex access */
-           if (count < 2)
-               BUFFER_FAIL(count, 2, "3DPRIMITIVE seq indirect");
-           instr_out(data, hw_offset, 0,
-                     "3DPRIMITIVE sequential indirect %s, %d starting from "
-                     "%d\n", primtype, len, data[1] & 0xffff);
-           instr_out(data, hw_offset, 1, "           start\n");
-           ret = 2;
-           goto out;
-       }
-    }
-
-out:
-    saved_s2 = original_s2;
-    saved_s4 = original_s4;
-    return ret;
-}
-
-static int
-decode_3d(const uint32_t *data, int count, uint32_t hw_offset, uint32_t devid, int *failures)
-{
-    uint32_t opcode;
-    unsigned int idx;
-
-    struct {
-       uint32_t opcode;
-       int min_len;
-       int max_len;
-       char *name;
-    } opcodes_3d[] = {
-       { 0x06, 1, 1, "3DSTATE_ANTI_ALIASING" },
-       { 0x08, 1, 1, "3DSTATE_BACKFACE_STENCIL_OPS" },
-       { 0x09, 1, 1, "3DSTATE_BACKFACE_STENCIL_MASKS" },
-       { 0x16, 1, 1, "3DSTATE_COORD_SET_BINDINGS" },
-       { 0x15, 1, 1, "3DSTATE_FOG_COLOR" },
-       { 0x0b, 1, 1, "3DSTATE_INDEPENDENT_ALPHA_BLEND" },
-       { 0x0d, 1, 1, "3DSTATE_MODES_4" },
-       { 0x0c, 1, 1, "3DSTATE_MODES_5" },
-       { 0x07, 1, 1, "3DSTATE_RASTERIZATION_RULES" },
-    }, *opcode_3d;
-
-    opcode = (data[0] & 0x1f000000) >> 24;
-
-    switch (opcode) {
-    case 0x1f:
-       return decode_3d_primitive(data, count, hw_offset, failures);
-    case 0x1d:
-       return decode_3d_1d(data, count, hw_offset, devid, failures);
-    case 0x1c:
-       return decode_3d_1c(data, count, hw_offset, failures);
-    }
-
-    for (idx = 0; idx < Elements(opcodes_3d); idx++) {
-       opcode_3d = &opcodes_3d[idx];
-       if (opcode == opcode_3d->opcode) {
-           unsigned int len = 1, i;
-
-           instr_out(data, hw_offset, 0, "%s\n", opcode_3d->name);
-           if (opcode_3d->max_len > 1) {
-               len = (data[0] & 0xff) + 2;
-               if (len < opcode_3d->min_len ||
-                   len > opcode_3d->max_len)
-               {
-                   fprintf(out, "Bad count in %s\n", opcode_3d->name);
-               }
-           }
-
-           for (i = 1; i < len; i++) {
-               if (i >= count)
-                   BUFFER_FAIL(count, len, opcode_3d->name);
-               instr_out(data, hw_offset, i, "dword %d\n", i);
-           }
-           return len;
-       }
-    }
-
-    instr_out(data, hw_offset, 0, "3D UNKNOWN: 3d opcode = 0x%x\n", opcode);
-    (*failures)++;
-    return 1;
-}
-
-static const char *
-get_965_surfacetype(unsigned int surfacetype)
-{
-    switch (surfacetype) {
-    case 0: return "1D";
-    case 1: return "2D";
-    case 2: return "3D";
-    case 3: return "CUBE";
-    case 4: return "BUFFER";
-    case 7: return "NULL";
-    default: return "unknown";
-    }
-}
-
-static const char *
-get_965_depthformat(unsigned int depthformat)
-{
-    switch (depthformat) {
-    case 0: return "s8_z24float";
-    case 1: return "z32float";
-    case 2: return "z24s8";
-    case 5: return "z16";
-    default: return "unknown";
-    }
-}
-
-static const char *
-get_965_element_component(uint32_t data, int component)
-{
-    uint32_t component_control = (data >> (16 + (3 - component) * 4)) & 0x7;
-
-    switch (component_control) {
-    case 0:
-       return "nostore";
-    case 1:
-       switch (component) {
-       case 0: return "X";
-       case 1: return "Y";
-       case 2: return "Z";
-       case 3: return "W";
-       default: return "fail";
-       }
-    case 2:
-       return "0.0";
-    case 3:
-       return "1.0";
-    case 4:
-       return "0x1";
-    case 5:
-       return "VID";
-    default:
-       return "fail";
-    }
-}
-
-static const char *
-get_965_prim_type(uint32_t data)
-{
-    uint32_t primtype = (data >> 10) & 0x1f;
-
-    switch (primtype) {
-    case 0x01: return "point list";
-    case 0x02: return "line list";
-    case 0x03: return "line strip";
-    case 0x04: return "tri list";
-    case 0x05: return "tri strip";
-    case 0x06: return "tri fan";
-    case 0x07: return "quad list";
-    case 0x08: return "quad strip";
-    case 0x09: return "line list adj";
-    case 0x0a: return "line strip adj";
-    case 0x0b: return "tri list adj";
-    case 0x0c: return "tri strip adj";
-    case 0x0d: return "tri strip reverse";
-    case 0x0e: return "polygon";
-    case 0x0f: return "rect list";
-    case 0x10: return "line loop";
-    case 0x11: return "point list bf";
-    case 0x12: return "line strip cont";
-    case 0x13: return "line strip bf";
-    case 0x14: return "line strip cont bf";
-    case 0x15: return "tri fan no stipple";
-    default: return "fail";
-    }
-}
-static int
-i965_decode_urb_fence(const uint32_t *data, uint32_t hw_offset, int len, int count,
-                     int *failures)
-{
-       uint32_t vs_fence, clip_fence, gs_fence, sf_fence, vfe_fence, cs_fence;
-
-       if (len != 3)
-           fprintf(out, "Bad count in URB_FENCE\n");
-       if (count < 3)
-           BUFFER_FAIL(count, len, "URB_FENCE");
-
-       vs_fence = data[1] & 0x3ff;
-       gs_fence = (data[1] >> 10) & 0x3ff;
-       clip_fence = (data[1] >> 20) & 0x3ff;
-       sf_fence = data[2] & 0x3ff;
-       vfe_fence = (data[2] >> 10) & 0x3ff;
-       cs_fence = (data[2] >> 20) & 0x7ff;
-
-       instr_out(data, hw_offset, 0, "URB_FENCE: %s%s%s%s%s%s\n",
-                       (data[0] >> 13) & 1 ? "cs " : "",
-                       (data[0] >> 12) & 1 ? "vfe " : "",
-                       (data[0] >> 11) & 1 ? "sf " : "",
-                       (data[0] >> 10) & 1 ? "clip " : "",
-                       (data[0] >> 9)  & 1 ? "gs " : "",
-                       (data[0] >> 8)  & 1 ? "vs " : "");
-       instr_out(data, hw_offset, 1,
-                 "vs fence: %d, clip_fence: %d, gs_fence: %d\n",
-                 vs_fence, clip_fence, gs_fence);
-       instr_out(data, hw_offset, 2,
-                 "sf fence: %d, vfe_fence: %d, cs_fence: %d\n",
-                 sf_fence, vfe_fence, cs_fence);
-       if (gs_fence < vs_fence)
-           fprintf(out, "gs fence < vs fence!\n");
-       if (clip_fence < gs_fence)
-           fprintf(out, "clip fence < gs fence!\n");
-       if (sf_fence < clip_fence)
-           fprintf(out, "sf fence < clip fence!\n");
-       if (cs_fence < sf_fence)
-           fprintf(out, "cs fence < sf fence!\n");
-
-       return len;
-}
-
-static void
-state_base_out(const uint32_t *data, uint32_t hw_offset, unsigned int index,
-              char *name)
-{
-    if (data[index] & 1) {
-       instr_out(data, hw_offset, index, "%s state base address 0x%08x\n",
-                 name, data[index] & ~1);
-    } else {
-       instr_out(data, hw_offset, index, "%s state base not updated\n",
-                 name);
-    }
-}
-
-static void
-state_max_out(const uint32_t *data, uint32_t hw_offset, unsigned int index,
-             char *name)
-{
-    if (data[index] & 1) {
-       if (data[index] == 1) {
-           instr_out(data, hw_offset, index,
-                     "%s state upper bound disabled\n", name);
-       } else {
-           instr_out(data, hw_offset, index, "%s state upper bound 0x%08x\n",
-                     name, data[index] & ~1);
-       }
-    } else {
-       instr_out(data, hw_offset, index, "%s state upper bound not updated\n",
-                 name);
-    }
-}
-
-static int
-decode_3d_965(const uint32_t *data, int count, uint32_t hw_offset, uint32_t devid, int *failures)
-{
-    uint32_t opcode;
-    unsigned int idx, len;
-    int i, sba_len;
-    char *desc1 = NULL;
-
-    struct {
-       uint32_t opcode;
-       int min_len;
-       int max_len;
-       char *name;
-    } opcodes_3d[] = {
-       { 0x6000, 3, 3, "URB_FENCE" },
-       { 0x6001, 2, 2, "CS_URB_STATE" },
-       { 0x6002, 2, 2, "CONSTANT_BUFFER" },
-       { 0x6101, 6, 6, "STATE_BASE_ADDRESS" },
-       { 0x6102, 2, 2 , "STATE_SIP" },
-       { 0x6104, 1, 1, "3DSTATE_PIPELINE_SELECT" },
-       { 0x680b, 1, 1, "3DSTATE_VF_STATISTICS" },
-       { 0x6904, 1, 1, "3DSTATE_PIPELINE_SELECT" },
-       { 0x7800, 7, 7, "3DSTATE_PIPELINED_POINTERS" },
-       { 0x7801, 6, 6, "3DSTATE_BINDING_TABLE_POINTERS" },
-       { 0x780b, 1, 1, "3DSTATE_VF_STATISTICS" },
-       { 0x7808, 5, 257, "3DSTATE_VERTEX_BUFFERS" },
-       { 0x7809, 3, 256, "3DSTATE_VERTEX_ELEMENTS" },
-       { 0x780a, 3, 3, "3DSTATE_INDEX_BUFFER" },
-       { 0x7900, 4, 4, "3DSTATE_DRAWING_RECTANGLE" },
-       { 0x7901, 5, 5, "3DSTATE_CONSTANT_COLOR" },
-       { 0x7905, 5, 7, "3DSTATE_DEPTH_BUFFER" },
-       { 0x7906, 2, 2, "3DSTATE_POLY_STIPPLE_OFFSET" },
-       { 0x7907, 33, 33, "3DSTATE_POLY_STIPPLE_PATTERN" },
-       { 0x7908, 3, 3, "3DSTATE_LINE_STIPPLE" },
-       { 0x7909, 2, 2, "3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP" },
-       { 0x7909, 2, 2, "3DSTATE_CLEAR_PARAMS" },
-       { 0x790a, 3, 3, "3DSTATE_AA_LINE_PARAMETERS" },
-       { 0x790b, 4, 4, "3DSTATE_GS_SVB_INDEX" },
-       { 0x790d, 3, 3, "3DSTATE_MULTISAMPLE" },
-       { 0x7b00, 6, 6, "3DPRIMITIVE" },
-       { 0x7802, 4, 4, "3DSTATE_SAMPLER_STATE_POINTERS" },
-       { 0x7805, 3, 3, "3DSTATE_URB" },
-       { 0x780e, 4, 4, "3DSTATE_CC_STATE_POINTERS" },
-       { 0x7810, 6, 6, "3DSTATE_VS_STATE" },
-       { 0x7811, 7, 7, "3DSTATE_GS_STATE" },
-       { 0x7812, 4, 4, "3DSTATE_CLIP_STATE" },
-       { 0x7813, 20, 20, "3DSTATE_SF_STATE" },
-       { 0x7814, 9, 9, "3DSTATE_WM_STATE" },
-       { 0x7812, 4, 4, "3DSTATE_CLIP_STATE" },
-       { 0x7815, 5, 5, "3DSTATE_CONSTANT_VS_STATE" },
-       { 0x7816, 5, 5, "3DSTATE_CONSTANT_GS_STATE" },
-       { 0x7817, 5, 5, "3DSTATE_CONSTANT_PS_STATE" },
-       { 0x7818, 2, 2, "3DSTATE_SAMPLE_MASK" },
-   }, *opcode_3d;
-
-    len = (data[0] & 0x0000ffff) + 2;
-
-    opcode = (data[0] & 0xffff0000) >> 16;
-    switch (opcode) {
-    case 0x6000:
-       len = (data[0] & 0x000000ff) + 2;
-       return i965_decode_urb_fence(data, hw_offset, len, count, failures);
-    case 0x6001:
-       instr_out(data, hw_offset, 0, "CS_URB_STATE\n");
-       instr_out(data, hw_offset, 1, "entry_size: %d [%d bytes], n_entries: %d\n",
-                       (data[1] >> 4) & 0x1f,
-                       (((data[1] >> 4) & 0x1f) + 1) * 64,
-                       data[1] & 0x7);
-       return len;
-    case 0x6002:
-       len = (data[0] & 0x000000ff) + 2;
-       instr_out(data, hw_offset, 0, "CONSTANT_BUFFER: %s\n",
-                       (data[0] >> 8) & 1 ? "valid" : "invalid");
-       instr_out(data, hw_offset, 1, "offset: 0x%08x, length: %d bytes\n",
-                       data[1] & ~0x3f, ((data[1] & 0x3f) + 1) * 64);
-       return len;
-    case 0x6101:
-       if (IS_GEN6(devid))
-           sba_len = 10;
-       else if (IS_IRONLAKE(devid))
-           sba_len = 8;
-       else
-           sba_len = 6;
-       if (len != sba_len)
-           fprintf(out, "Bad count in STATE_BASE_ADDRESS\n");
-       if (len != sba_len)
-           BUFFER_FAIL(count, len, "STATE_BASE_ADDRESS");
-
-       i = 0;
-       instr_out(data, hw_offset, 0,
-                 "STATE_BASE_ADDRESS\n");
-       i++;
-
-       state_base_out(data, hw_offset, i++, "general");
-       state_base_out(data, hw_offset, i++, "surface");
-       if (IS_GEN6(devid))
-           state_base_out(data, hw_offset, i++, "dynamic");
-       state_base_out(data, hw_offset, i++, "indirect");
-       if (IS_IRONLAKE(devid) || IS_GEN6(devid))
-           state_base_out(data, hw_offset, i++, "instruction");
-
-       state_max_out(data, hw_offset, i++, "general");
-       if (IS_GEN6(devid))
-           state_max_out(data, hw_offset, i++, "dynamic");
-       state_max_out(data, hw_offset, i++, "indirect");
-       if (IS_IRONLAKE(devid) || IS_GEN6(devid))
-           state_max_out(data, hw_offset, i++, "instruction");
-
-       return len;
-    case 0x7800:
-       if (len != 7)
-           fprintf(out, "Bad count in 3DSTATE_PIPELINED_POINTERS\n");
-       if (count < 7)
-           BUFFER_FAIL(count, len, "3DSTATE_PIPELINED_POINTERS");
-
-       instr_out(data, hw_offset, 0,
-                 "3DSTATE_PIPELINED_POINTERS\n");
-       instr_out(data, hw_offset, 1, "VS state\n");
-       instr_out(data, hw_offset, 2, "GS state\n");
-       instr_out(data, hw_offset, 3, "Clip state\n");
-       instr_out(data, hw_offset, 4, "SF state\n");
-       instr_out(data, hw_offset, 5, "WM state\n");
-       instr_out(data, hw_offset, 6, "CC state\n");
-       return len;
-    case 0x7801:
-       len = (data[0] & 0x000000ff) + 2;
-       if (len != 6 && len != 4)
-           fprintf(out, "Bad count in 3DSTATE_BINDING_TABLE_POINTERS\n");
-       if (len == 6) {
-           if (count < 6)
-               BUFFER_FAIL(count, len, "3DSTATE_BINDING_TABLE_POINTERS");
-           instr_out(data, hw_offset, 0,
-                     "3DSTATE_BINDING_TABLE_POINTERS\n");
-           instr_out(data, hw_offset, 1, "VS binding table\n");
-           instr_out(data, hw_offset, 2, "GS binding table\n");
-           instr_out(data, hw_offset, 3, "Clip binding table\n");
-           instr_out(data, hw_offset, 4, "SF binding table\n");
-           instr_out(data, hw_offset, 5, "WM binding table\n");
-       } else {
-           if (count < 4)
-               BUFFER_FAIL(count, len, "3DSTATE_BINDING_TABLE_POINTERS");
-
-           instr_out(data, hw_offset, 0,
-                     "3DSTATE_BINDING_TABLE_POINTERS: VS mod %d, "
-                     "GS mod %d, PS mod %d\n",
-                     (data[0] & (1 << 8)) != 0,
-                     (data[0] & (1 << 9)) != 0,
-                     (data[0] & (1 << 10)) != 0);
-           instr_out(data, hw_offset, 1, "VS binding table\n");
-           instr_out(data, hw_offset, 2, "GS binding table\n");
-           instr_out(data, hw_offset, 3, "WM binding table\n");
-       }
-
-       return len;
-
-    case 0x7808:
-       len = (data[0] & 0xff) + 2;
-       if ((len - 1) % 4 != 0)
-           fprintf(out, "Bad count in 3DSTATE_VERTEX_BUFFERS\n");
-       if (count < len)
-           BUFFER_FAIL(count, len, "3DSTATE_VERTEX_BUFFERS");
-       instr_out(data, hw_offset, 0, "3DSTATE_VERTEX_BUFFERS\n");
-
-       for (i = 1; i < len;) {
-           instr_out(data, hw_offset, i, "buffer %d: %s, pitch %db\n",
-                     data[i] >> 27,
-                     data[i] & (1 << 26) ? "random" : "sequential",
-                     data[i] & 0x07ff);
-           i++;
-           instr_out(data, hw_offset, i++, "buffer address\n");
-           instr_out(data, hw_offset, i++, "max index\n");
-           instr_out(data, hw_offset, i++, "mbz\n");
-       }
-       return len;
-
-    case 0x7809:
-       len = (data[0] & 0xff) + 2;
-       if ((len + 1) % 2 != 0)
-           fprintf(out, "Bad count in 3DSTATE_VERTEX_ELEMENTS\n");
-       if (count < len)
-           BUFFER_FAIL(count, len, "3DSTATE_VERTEX_ELEMENTS");
-       instr_out(data, hw_offset, 0, "3DSTATE_VERTEX_ELEMENTS\n");
-
-       for (i = 1; i < len;) {
-           instr_out(data, hw_offset, i, "buffer %d: %svalid, type 0x%04x, "
-                     "src offset 0x%04x bytes\n",
-                     data[i] >> 27,
-                     data[i] & (1 << 26) ? "" : "in",
-                     (data[i] >> 16) & 0x1ff,
-                     data[i] & 0x07ff);
-           i++;
-           instr_out(data, hw_offset, i, "(%s, %s, %s, %s), "
-                     "dst offset 0x%02x bytes\n",
-                     get_965_element_component(data[i], 0),
-                     get_965_element_component(data[i], 1),
-                     get_965_element_component(data[i], 2),
-                     get_965_element_component(data[i], 3),
-                     (data[i] & 0xff) * 4);
-           i++;
-       }
-       return len;
-
-    case 0x780d:
-       len = (data[0] & 0xff) + 2;
-       if (len != 4)
-           fprintf(out, "Bad count in 3DSTATE_VIEWPORT_STATE_POINTERS\n");
-       if (count < len)
-           BUFFER_FAIL(count, len, "3DSTATE_VIEWPORT_STATE_POINTERS");
-       instr_out(data, hw_offset, 0, "3DSTATE_VIEWPORT_STATE_POINTERS\n");
-       instr_out(data, hw_offset, 1, "clip\n");
-       instr_out(data, hw_offset, 2, "sf\n");
-       instr_out(data, hw_offset, 3, "cc\n");
-       return len;
-
-    case 0x780a:
-       len = (data[0] & 0xff) + 2;
-       if (len != 3)
-           fprintf(out, "Bad count in 3DSTATE_INDEX_BUFFER\n");
-       if (count < len)
-           BUFFER_FAIL(count, len, "3DSTATE_INDEX_BUFFER");
-       instr_out(data, hw_offset, 0, "3DSTATE_INDEX_BUFFER\n");
-       instr_out(data, hw_offset, 1, "beginning buffer address\n");
-       instr_out(data, hw_offset, 2, "ending buffer address\n");
-       return len;
-
-    case 0x7900:
-       if (len != 4)
-           fprintf(out, "Bad count in 3DSTATE_DRAWING_RECTANGLE\n");
-       if (count < 4)
-           BUFFER_FAIL(count, len, "3DSTATE_DRAWING_RECTANGLE");
-
-       instr_out(data, hw_offset, 0,
-                 "3DSTATE_DRAWING_RECTANGLE\n");
-       instr_out(data, hw_offset, 1, "top left: %d,%d\n",
-                 data[1] & 0xffff,
-                 (data[1] >> 16) & 0xffff);
-       instr_out(data, hw_offset, 2, "bottom right: %d,%d\n",
-                 data[2] & 0xffff,
-                 (data[2] >> 16) & 0xffff);
-       instr_out(data, hw_offset, 3, "origin: %d,%d\n",
-                 (int)data[3] & 0xffff,
-                 ((int)data[3] >> 16) & 0xffff);
-
-       return len;
-
-    case 0x7905:
-       if (len < 5 || len > 7)
-           fprintf(out, "Bad count in 3DSTATE_DEPTH_BUFFER\n");
-       if (count < len)
-           BUFFER_FAIL(count, len, "3DSTATE_DEPTH_BUFFER");
-
-       instr_out(data, hw_offset, 0,
-                 "3DSTATE_DEPTH_BUFFER\n");
-       instr_out(data, hw_offset, 1, "%s, %s, pitch = %d bytes, %stiled\n",
-                 get_965_surfacetype(data[1] >> 29),
-                 get_965_depthformat((data[1] >> 18) & 0x7),
-                 (data[1] & 0x0001ffff) + 1,
-                 data[1] & (1 << 27) ? "" : "not ");
-       instr_out(data, hw_offset, 2, "depth offset\n");
-       instr_out(data, hw_offset, 3, "%dx%d\n",
-                 ((data[3] & 0x0007ffc0) >> 6) + 1,
-                 ((data[3] & 0xfff80000) >> 19) + 1);
-       instr_out(data, hw_offset, 4, "volume depth\n");
-       if (len >= 6)
-           instr_out(data, hw_offset, 5, "\n");
-       if (len >= 7)
-           instr_out(data, hw_offset, 6, "render target view extent\n");
-
-       return len;
-
-    case 0x7a00:
-       len = (data[0] & 0xff) + 2;
-       if (len != 4)
-           fprintf(out, "Bad count in PIPE_CONTROL\n");
-       if (count < len)
-           BUFFER_FAIL(count, len, "PIPE_CONTROL");
-
-       switch ((data[0] >> 14) & 0x3) {
-       case 0: desc1 = "no write"; break;
-       case 1: desc1 = "qword write"; break;
-       case 2: desc1 = "PS_DEPTH_COUNT write"; break;
-       case 3: desc1 = "TIMESTAMP write"; break;
-       }
-       instr_out(data, hw_offset, 0,
-                 "PIPE_CONTROL: %s, %sdepth stall, %sRC write flush, "
-                 "%sinst flush\n",
-                 desc1,
-                 data[0] & (1 << 13) ? "" : "no ",
-                 data[0] & (1 << 12) ? "" : "no ",
-                 data[0] & (1 << 11) ? "" : "no ");
-       instr_out(data, hw_offset, 1, "destination address\n");
-       instr_out(data, hw_offset, 2, "immediate dword low\n");
-       instr_out(data, hw_offset, 3, "immediate dword high\n");
-       return len;
-
-    case 0x7b00:
-       len = (data[0] & 0xff) + 2;
-       if (len != 6)
-           fprintf(out, "Bad count in 3DPRIMITIVE\n");
-       if (count < len)
-           BUFFER_FAIL(count, len, "3DPRIMITIVE");
-
-       instr_out(data, hw_offset, 0,
-                 "3DPRIMITIVE: %s %s\n",
-                 get_965_prim_type(data[0]),
-                 (data[0] & (1 << 15)) ? "random" : "sequential");
-       instr_out(data, hw_offset, 1, "vertex count\n");
-       instr_out(data, hw_offset, 2, "start vertex\n");
-       instr_out(data, hw_offset, 3, "instance count\n");
-       instr_out(data, hw_offset, 4, "start instance\n");
-       instr_out(data, hw_offset, 5, "index bias\n");
-       return len;
-    }
-
-    for (idx = 0; idx < Elements(opcodes_3d); idx++) {
-       opcode_3d = &opcodes_3d[idx];
-       if ((data[0] & 0xffff0000) >> 16 == opcode_3d->opcode) {
-           unsigned int i;
-           len = 1;
-
-           instr_out(data, hw_offset, 0, "%s\n", opcode_3d->name);
-           if (opcode_3d->max_len > 1) {
-               len = (data[0] & 0xff) + 2;
-               if (len < opcode_3d->min_len ||
-                   len > opcode_3d->max_len)
-               {
-                   fprintf(out, "Bad count in %s\n", opcode_3d->name);
-               }
-           }
-
-           for (i = 1; i < len; i++) {
-               if (i >= count)
-                   BUFFER_FAIL(count, len, opcode_3d->name);
-               instr_out(data, hw_offset, i, "dword %d\n", i);
-           }
-           return len;
-       }
-    }
-
-    instr_out(data, hw_offset, 0, "3D UNKNOWN: 3d_965 opcode = 0x%x\n", opcode);
-    (*failures)++;
-    return 1;
-}
-
-static int
-decode_3d_i830(const uint32_t *data, int count, uint32_t hw_offset, uint32_t devid, int *failures)
-{
-    unsigned int idx;
-    uint32_t opcode;
-
-    struct {
-       uint32_t opcode;
-       int min_len;
-       int max_len;
-       char *name;
-    } opcodes_3d[] = {
-       { 0x02, 1, 1, "3DSTATE_MODES_3" },
-       { 0x03, 1, 1, "3DSTATE_ENABLES_1"},
-       { 0x04, 1, 1, "3DSTATE_ENABLES_2"},
-       { 0x05, 1, 1, "3DSTATE_VFT0"},
-       { 0x06, 1, 1, "3DSTATE_AA"},
-       { 0x07, 1, 1, "3DSTATE_RASTERIZATION_RULES" },
-       { 0x08, 1, 1, "3DSTATE_MODES_1" },
-       { 0x09, 1, 1, "3DSTATE_STENCIL_TEST" },
-       { 0x0a, 1, 1, "3DSTATE_VFT1"},
-       { 0x0b, 1, 1, "3DSTATE_INDPT_ALPHA_BLEND" },
-       { 0x0c, 1, 1, "3DSTATE_MODES_5" },
-       { 0x0d, 1, 1, "3DSTATE_MAP_BLEND_OP" },
-       { 0x0e, 1, 1, "3DSTATE_MAP_BLEND_ARG" },
-       { 0x0f, 1, 1, "3DSTATE_MODES_2" },
-       { 0x15, 1, 1, "3DSTATE_FOG_COLOR" },
-       { 0x16, 1, 1, "3DSTATE_MODES_4" },
-    }, *opcode_3d;
-
-    opcode = (data[0] & 0x1f000000) >> 24;
-
-    switch (opcode) {
-    case 0x1f:
-       return decode_3d_primitive(data, count, hw_offset, failures);
-    case 0x1d:
-       return decode_3d_1d(data, count, hw_offset, devid, failures);
-    case 0x1c:
-       return decode_3d_1c(data, count, hw_offset, failures);
-    }
-
-    for (idx = 0; idx < Elements(opcodes_3d); idx++) {
-       opcode_3d = &opcodes_3d[idx];
-       if ((data[0] & 0x1f000000) >> 24 == opcode_3d->opcode) {
-           unsigned int len = 1, i;
-
-           instr_out(data, hw_offset, 0, "%s\n", opcode_3d->name);
-           if (opcode_3d->max_len > 1) {
-               len = (data[0] & 0xff) + 2;
-               if (len < opcode_3d->min_len ||
-                   len > opcode_3d->max_len)
-               {
-                   fprintf(out, "Bad count in %s\n", opcode_3d->name);
-               }
-           }
-
-           for (i = 1; i < len; i++) {
-               if (i >= count)
-                   BUFFER_FAIL(count, len, opcode_3d->name);
-               instr_out(data, hw_offset, i, "dword %d\n", i);
-           }
-           return len;
-       }
-    }
-
-    instr_out(data, hw_offset, 0, "3D UNKNOWN: 3d_i830 opcode = 0x%x\n", opcode);
-    (*failures)++;
-    return 1;
-}
-
-/**
- * Decodes an i830-i915 batch buffer, writing the output to stdout.
- *
- * \param data batch buffer contents
- * \param count number of DWORDs to decode in the batch buffer
- * \param hw_offset hardware address for the buffer
- */
-int
-intel_decode(const uint32_t *data, int count,
-            uint32_t hw_offset,
-            uint32_t devid,
-            uint32_t ignore_end_of_batchbuffer)
-{
-    int ret;
-    int index = 0;
-    int failures = 0;
-
-    out = stderr;
-
-    while (index < count) {
-       switch ((data[index] & 0xe0000000) >> 29) {
-       case 0x0:
-           ret = decode_mi(data + index, count - index,
-                              hw_offset + index * 4, &failures);
-
-           /* If MI_BATCHBUFFER_END happened, then dump the rest of the
-            * output in case we some day want it in debugging, but don't
-            * decode it since it'll just confuse in the common case.
-            */
-           if (ret == -1) {
-               if (ignore_end_of_batchbuffer) {
-                   index++;
-               } else {
-                   for (index = index + 1; index < count; index++) {
-                       instr_out(data, hw_offset, index, "\n");
-                   }
-               }
-           } else
-               index += ret;
-           break;
-       case 0x2:
-           index += decode_2d(data + index, count - index,
-                              hw_offset + index * 4, &failures);
-           break;
-       case 0x3:
-           if (IS_965(devid)) {
-               index += decode_3d_965(data + index, count - index,
-                                      hw_offset + index * 4,
-                                      devid, &failures);
-           } else if (IS_9XX(devid)) {
-               index += decode_3d(data + index, count - index,
-                                  hw_offset + index * 4,
-                                  devid, &failures);
-           } else {
-               index += decode_3d_i830(data + index, count - index,
-                                       hw_offset + index * 4,
-                                       devid, &failures);
-           }
-           break;
-       default:
-           instr_out(data, hw_offset, index, "UNKNOWN\n");
-           failures++;
-           index++;
-           break;
-       }
-       fflush(out);
-    }
-
-    return failures;
-}
-
-void intel_decode_context_reset(void)
-{
-    saved_s2_set = 0;
-    saved_s4_set = 1;
-}
-
diff --git a/src/gallium/drivers/i965/intel_decode.h b/src/gallium/drivers/i965/intel_decode.h
deleted file mode 100644 (file)
index 7e7c108..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright © 2007 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- *    Eric Anholt <eric@anholt.net>
- *
- */
-
-#include "pipe/p_compiler.h"
-
-int intel_decode(const uint32_t *data, int count, uint32_t hw_offset, uint32_t devid, uint32_t ignore_end_of_batchbuffer);
-void intel_decode_context_reset(void);
diff --git a/src/gallium/drivers/i965/intel_structs.h b/src/gallium/drivers/i965/intel_structs.h
deleted file mode 100644 (file)
index ec6eec8..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-#ifndef INTEL_STRUCTS_H
-#define INTEL_STRUCTS_H
-
-#include "brw_types.h"
-
-struct br0 {
-   GLuint length:8;
-   GLuint pad0:3;
-   GLuint dst_tiled:1;
-   GLuint pad1:8;
-   GLuint write_rgb:1;
-   GLuint write_alpha:1;
-   GLuint opcode:7;
-   GLuint client:3;
-};
-
-   
-struct br13 {
-   GLint dest_pitch:16;
-   GLuint rop:8;
-   GLuint color_depth:2;
-   GLuint pad1:3;
-   GLuint mono_source_transparency:1;
-   GLuint clipping_enable:1;
-   GLuint pad0:1;
-};
-
-
-
-/* This is an attempt to move some of the 2D interaction in this
- * driver to using structs for packets rather than a bunch of #defines
- * and dwords.
- */
-struct xy_color_blit {
-   struct br0 br0;
-   struct br13 br13;
-
-   struct {
-      GLuint dest_x1:16;
-      GLuint dest_y1:16;
-   } dw2;
-
-   struct {
-      GLuint dest_x2:16;
-      GLuint dest_y2:16;
-   } dw3;
-   
-   GLuint dest_base_addr;
-   GLuint color;
-};
-
-struct xy_src_copy_blit {
-   struct br0 br0;
-   struct br13 br13;
-
-   struct {
-      GLuint dest_x1:16;
-      GLuint dest_y1:16;
-   } dw2;
-
-   struct {
-      GLuint dest_x2:16;
-      GLuint dest_y2:16;
-   } dw3;
-   
-   GLuint dest_base_addr;
-
-   struct {
-      GLuint src_x1:16;
-      GLuint src_y1:16;
-   } dw5;
-
-   struct {
-      GLint src_pitch:16;
-      GLuint pad:16;
-   } dw6;
-   
-   GLuint src_base_addr;
-};
-
-struct xy_setup_blit {
-   struct br0 br0;
-   struct br13 br13;
-
-   struct {
-      GLuint clip_x1:16;
-      GLuint clip_y1:16;
-   } dw2;
-
-   struct {
-      GLuint clip_x2:16;
-      GLuint clip_y2:16;
-   } dw3;
-      
-   GLuint dest_base_addr;
-   GLuint background_color;
-   GLuint foreground_color;
-   GLuint pattern_base_addr;
-};
-
-
-struct xy_text_immediate_blit {
-   struct {
-      GLuint length:8;
-      GLuint pad2:3;
-      GLuint dst_tiled:1;
-      GLuint pad1:4;
-      GLuint byte_packed:1;
-      GLuint pad0:5;
-      GLuint opcode:7;
-      GLuint client:3;
-   } dw0;
-
-   struct {
-      GLuint dest_x1:16;
-      GLuint dest_y1:16;
-   } dw1;
-
-   struct {
-      GLuint dest_x2:16;
-      GLuint dest_y2:16;
-   } dw2;   
-
-   /* Src bitmap data follows as inline dwords.
-    */
-};
-
-
-#define CLIENT_2D 0x2
-#define OPCODE_XY_SETUP_BLT 0x1
-#define OPCODE_XY_COLOR_BLT 0x50
-#define OPCODE_XY_TEXT_IMMEDIATE_BLT 0x31
-
-#endif
diff --git a/src/gallium/targets/dri-i965/Makefile b/src/gallium/targets/dri-i965/Makefile
deleted file mode 100644 (file)
index 9e75bfe..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-TOP = ../../../..
-include $(TOP)/configs/current
-
-LIBNAME = i965_dri.so
-
-PIPE_DRIVERS = \
-       $(TOP)/src/gallium/state_trackers/dri/drm/libdridrm.a \
-       $(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
-       $(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a \
-       $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a \
-       $(TOP)/src/gallium/drivers/galahad/libgalahad.a \
-       $(TOP)/src/gallium/drivers/trace/libtrace.a \
-       $(TOP)/src/gallium/drivers/rbug/librbug.a \
-       $(TOP)/src/gallium/drivers/i965/libi965.a
-
-C_SOURCES = \
-       target.c \
-       $(COMMON_GALLIUM_SOURCES) \
-       $(DRIVER_SOURCES)
-
-DRIVER_DEFINES = \
-       -DGALLIUM_RBUG -DGALLIUM_TRACE -DGALLIUM_GALAHAD -DGALLIUM_SOFTPIPE
-
-ifeq ($(MESA_LLVM),1)
-PIPE_DRIVERS += $(TOP)/src/gallium/drivers/llvmpipe/libllvmpipe.a
-DRIVER_DEFINES += -DGALLIUM_LLVMPIPE
-endif
-
-include ../Makefile.dri
-
-DRI_LIB_DEPS += -ldrm_intel
-
-symlinks:
diff --git a/src/gallium/targets/dri-i965/SConscript b/src/gallium/targets/dri-i965/SConscript
deleted file mode 100644 (file)
index 01a458d..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-Import('*')
-
-env = drienv.Clone()
-
-env.PkgUseModules('DRM_INTEL')
-
-env.Append(CPPDEFINES = [
-    'GALLIUM_SOFTPIPE',
-    'GALLIUM_RBUG',
-    'GALLIUM_TRACE'
-])
-
-env.Prepend(LIBS = [
-    st_dri,
-    i965drm,
-    ws_wrapper,
-    i965,
-    trace,
-    rbug,
-    mesa,
-    glsl,
-    gallium,
-    COMMON_DRI_DRM_OBJECTS
-])
-
-module = env.LoadableModule(
-    target = 'i965_dri.so',
-    source = 'target.c',
-    SHLIBPREFIX = '',
-)
-
-env.Alias('dri-i965', module)
diff --git a/src/gallium/targets/dri-i965/target.c b/src/gallium/targets/dri-i965/target.c
deleted file mode 100644 (file)
index 0434063..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#include "target-helpers/inline_wrapper_sw_helper.h"
-#include "target-helpers/inline_debug_helper.h"
-#include "state_tracker/drm_driver.h"
-#include "i965/drm/i965_drm_public.h"
-#include "i965/brw_public.h"
-
-static struct pipe_screen *
-create_screen(int fd)
-{
-   struct brw_winsys_screen *bws;
-   struct pipe_screen *screen;
-
-   bws = i965_drm_winsys_screen_create(fd);
-   if (!bws)
-      return NULL;
-
-   screen = brw_screen_create(bws);
-   if (!screen)
-      return NULL;
-
-   screen = sw_screen_wrap(screen);
-
-   screen = debug_screen_wrap(screen);
-
-   return screen;
-}
-
-DRM_DRIVER_DESCRIPTOR("i915", "i965", create_screen, NULL)
index 17a578d43afbac5889632d223970ebd7241188a8..79a098af448dbbfb322e23d0ab97ba6765f400d2 100644 (file)
@@ -96,16 +96,6 @@ egl_LIBS += \
 egl_SYS += -ldrm_intel
 endif
 
-# i965
-ifneq ($(findstring i965/drm,$(GALLIUM_WINSYS_DIRS)),)
-egl_CPPFLAGS += -D_EGL_PIPE_I995=1
-egl_LIBS += \
-       $(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
-       $(TOP)/src/gallium/drivers/i965/libi965.a \
-       $(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a
-egl_SYS += -ldrm_intel
-endif
-
 # nouveau
 ifneq ($(findstring nouveau/drm,$(GALLIUM_WINSYS_DIRS)),)
 egl_CPPFLAGS += -D_EGL_PIPE_NOUVEAU=1
index a929d6003497a0cd9e005faf8e7a0d52bbb14fe4..e657e9f2ff5bf822e6e90fc1946791c7a09afb96 100644 (file)
@@ -90,12 +90,10 @@ if env['HAVE_DRM']:
     env.PkgUseModules('DRM')
 
     if env['HAVE_DRM_INTEL']:
-        env.Append(CPPDEFINES = ['_EGL_PIPE_I915', '_EGL_PIPE_I965'])
+        env.Append(CPPDEFINES = ['_EGL_PIPE_I915'])
         env.Prepend(LIBS = [
             i915drm,
             i915,
-            i965drm,
-            i965,
             ws_wrapper,
         ])
 
index f2b50bd0eab0d4d63bc6d79b7a43d801339847d0..887bcfd12c4862e275ee7264d0f01088bde14773 100644 (file)
 /* for i915 */
 #include "i915/drm/i915_drm_public.h"
 #include "i915/i915_public.h"
-/* for i965 */
 #include "target-helpers/inline_wrapper_sw_helper.h"
-#include "i965/drm/i965_drm_public.h"
-#include "i965/brw_public.h"
 /* for nouveau */
 #include "nouveau/drm/nouveau_drm_public.h"
 /* for r300 */
@@ -70,31 +67,6 @@ pipe_i915_create_screen(int fd)
 #endif
 }
 
-static struct pipe_screen *
-pipe_i965_create_screen(int fd)
-{
-#if _EGL_PIPE_I965
-   struct brw_winsys_screen *bws;
-   struct pipe_screen *screen;
-
-   bws = i965_drm_winsys_screen_create(fd);
-   if (!bws)
-      return NULL;
-
-   screen = brw_screen_create(bws);
-   if (!screen)
-      return NULL;
-
-   screen = sw_screen_wrap(screen);
-
-   screen = debug_screen_wrap(screen);
-
-   return screen;
-#else
-   return NULL;
-#endif
-}
-
 static struct pipe_screen *
 pipe_nouveau_create_screen(int fd)
 {
@@ -187,8 +159,6 @@ egl_pipe_create_drm_screen(const char *name, int fd)
 {
    if (strcmp(name, "i915") == 0)
       return pipe_i915_create_screen(fd);
-   else if (strcmp(name, "i965") == 0)
-      return pipe_i965_create_screen(fd);
    else if (strcmp(name, "nouveau") == 0)
       return pipe_nouveau_create_screen(fd);
    else if (strcmp(name, "r300") == 0)
index 15618a6f1269e3e8f7d40667f777ca5349f6d47e..89fddfe9a7bfaea466d58d811c3cf69ff407af20 100644 (file)
@@ -59,13 +59,6 @@ i915_LIBS = \
        $(TOP)/src/gallium/drivers/i915/libi915.a
 i915_SYS = -ldrm_intel
 
-# i965 pipe driver
-i965_LIBS = \
-       $(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
-       $(TOP)/src/gallium/drivers/i965/libi965.a \
-       $(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a
-i965_SYS = -ldrm_intel
-
 # nouveau pipe driver
 nouveau_LIBS = \
        $(TOP)/src/gallium/winsys/nouveau/drm/libnouveaudrm.a \
@@ -112,11 +105,6 @@ _pipe_TARGETS_CC += $(PIPE_PREFIX)i915.so
 pipe_SOURCES += pipe_i915.c
 endif
 
-ifneq ($(findstring i965/drm,$(GALLIUM_WINSYS_DIRS)),)
-_pipe_TARGETS_CC += $(PIPE_PREFIX)i965.so
-pipe_SOURCES += pipe_i965.c
-endif
-
 ifneq ($(findstring nouveau/drm,$(GALLIUM_WINSYS_DIRS)),)
 _pipe_TARGETS_CXX += $(PIPE_PREFIX)nouveau.so
 pipe_SOURCES += pipe_nouveau.c
diff --git a/src/gallium/targets/gbm/pipe_i965.c b/src/gallium/targets/gbm/pipe_i965.c
deleted file mode 100644 (file)
index 1eece9c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-#include "target-helpers/inline_debug_helper.h"
-#include "target-helpers/inline_wrapper_sw_helper.h"
-#include "state_tracker/drm_driver.h"
-#include "i965/drm/i965_drm_public.h"
-#include "i965/brw_public.h"
-
-static struct pipe_screen *
-create_screen(int fd)
-{
-   struct brw_winsys_screen *bws;
-   struct pipe_screen *screen;
-
-   bws = i965_drm_winsys_screen_create(fd);
-   if (!bws)
-      return NULL;
-
-   screen = brw_screen_create(bws);
-   if (!screen)
-      return NULL;
-
-   screen = sw_screen_wrap(screen);
-
-   screen = debug_screen_wrap(screen);
-
-   return screen;
-}
-
-PUBLIC
-DRM_DRIVER_DESCRIPTOR("i965", "i965", create_screen, NULL)
diff --git a/src/gallium/targets/xorg-i965/Makefile b/src/gallium/targets/xorg-i965/Makefile
deleted file mode 100644 (file)
index 36df276..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-TOP = ../../../..
-include $(TOP)/configs/current
-
-LIBNAME = i965g_drv.so
-
-C_SOURCES = \
-       intel_target.c \
-       intel_xorg.c
-
-DRIVER_DEFINES = \
-       -DHAVE_CONFIG_H -DGALLIUM_SOFTPIPE \
-       -DGALLIUM_RBUG -DGALLIUM_TRACE
-
-DRIVER_PIPES = \
-       $(TOP)/src/gallium/state_trackers/xorg/libxorgtracker.a \
-       $(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
-       $(TOP)/src/gallium/drivers/i965/libi965.a \
-       $(TOP)/src/gallium/drivers/trace/libtrace.a \
-       $(TOP)/src/gallium/drivers/rbug/librbug.a \
-       $(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a \
-       $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a
-
-DRIVER_LINKS = \
-       $(shell $(PKG_CONFIG) --libs libdrm libdrm_intel)
-
-include ../Makefile.xorg
diff --git a/src/gallium/targets/xorg-i965/intel_target.c b/src/gallium/targets/xorg-i965/intel_target.c
deleted file mode 100644 (file)
index 0434063..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#include "target-helpers/inline_wrapper_sw_helper.h"
-#include "target-helpers/inline_debug_helper.h"
-#include "state_tracker/drm_driver.h"
-#include "i965/drm/i965_drm_public.h"
-#include "i965/brw_public.h"
-
-static struct pipe_screen *
-create_screen(int fd)
-{
-   struct brw_winsys_screen *bws;
-   struct pipe_screen *screen;
-
-   bws = i965_drm_winsys_screen_create(fd);
-   if (!bws)
-      return NULL;
-
-   screen = brw_screen_create(bws);
-   if (!screen)
-      return NULL;
-
-   screen = sw_screen_wrap(screen);
-
-   screen = debug_screen_wrap(screen);
-
-   return screen;
-}
-
-DRM_DRIVER_DESCRIPTOR("i915", "i965", create_screen, NULL)
diff --git a/src/gallium/targets/xorg-i965/intel_xorg.c b/src/gallium/targets/xorg-i965/intel_xorg.c
deleted file mode 100644 (file)
index f4608f0..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- *
- * Author: Alan Hourihane <alanh@tungstengraphics.com>
- * Author: Jakob Bornecrantz <wallbraker@gmail.com>
- *
- */
-
-#include "../../state_trackers/xorg/xorg_winsys.h"
-
-static void intel_xorg_identify(int flags);
-static Bool intel_xorg_pci_probe(DriverPtr driver,
-                                int entity_num,
-                                struct pci_device *device,
-                                intptr_t match_data);
-
-static const struct pci_id_match intel_xorg_device_match[] = {
-    {0x8086, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, 0},
-    {0, 0, 0},
-};
-
-static SymTabRec intel_xorg_chipsets[] = {
-    {PCI_MATCH_ANY, "Intel Graphics Device"},
-    {-1, NULL}
-};
-
-static PciChipsets intel_xorg_pci_devices[] = {
-    {PCI_MATCH_ANY, PCI_MATCH_ANY, NULL},
-    {-1, -1, NULL}
-};
-
-static XF86ModuleVersionInfo intel_xorg_version = {
-    "modesetting",
-    MODULEVENDORSTRING,
-    MODINFOSTRING1,
-    MODINFOSTRING2,
-    XORG_VERSION_CURRENT,
-    0, 1, 0, /* major, minor, patch */
-    ABI_CLASS_VIDEODRV,
-    ABI_VIDEODRV_VERSION,
-    MOD_CLASS_VIDEODRV,
-    {0, 0, 0, 0}
-};
-
-/*
- * Xorg driver exported structures
- */
-
-_X_EXPORT DriverRec modesetting = {
-    1,
-    "modesetting",
-    intel_xorg_identify,
-    NULL,
-    xorg_tracker_available_options,
-    NULL,
-    0,
-    NULL,
-    intel_xorg_device_match,
-    intel_xorg_pci_probe
-};
-
-static MODULESETUPPROTO(intel_xorg_setup);
-
-_X_EXPORT XF86ModuleData modesettingModuleData = {
-    &intel_xorg_version,
-    intel_xorg_setup,
-    NULL
-};
-
-/*
- * Xorg driver functions
- */
-
-static pointer
-intel_xorg_setup(pointer module, pointer opts, int *errmaj, int *errmin)
-{
-    static Bool setupDone = 0;
-
-    /* This module should be loaded only once, but check to be sure.
-     */
-    if (!setupDone) {
-       setupDone = 1;
-       xf86AddDriver(&modesetting, module, HaveDriverFuncs);
-
-       /*
-        * The return value must be non-NULL on success even though there
-        * is no TearDownProc.
-        */
-       return (pointer) 1;
-    } else {
-       if (errmaj)
-           *errmaj = LDR_ONCEONLY;
-       return NULL;
-    }
-}
-
-static void
-intel_xorg_identify(int flags)
-{
-    xf86PrintChipsets("modesetting", "Driver for Modesetting Kernel Drivers",
-                     intel_xorg_chipsets);
-}
-
-static Bool
-intel_xorg_pci_probe(DriverPtr driver,
-         int entity_num, struct pci_device *device, intptr_t match_data)
-{
-    ScrnInfoPtr scrn = NULL;
-    EntityInfoPtr entity;
-
-    scrn = xf86ConfigPciEntity(scrn, 0, entity_num, intel_xorg_pci_devices,
-                              NULL, NULL, NULL, NULL, NULL);
-    if (scrn != NULL) {
-       scrn->driverVersion = 1;
-       scrn->driverName = "i965";
-       scrn->name = "modesetting";
-       scrn->Probe = NULL;
-
-       entity = xf86GetEntityInfo(entity_num);
-
-       /* Use all the functions from the xorg tracker */
-       xorg_tracker_set_functions(scrn);
-    }
-    return scrn != NULL;
-}
index ee86ba4cd0b70c179656228956a37ae841d15623..f3a2453e834fa90e2b9e3e49dfc20b70e9485ab1 100644 (file)
@@ -30,10 +30,6 @@ if env['dri']:
         'i915/drm/SConscript',
     ])
 
-    SConscript([
-        'i965/drm/SConscript',
-    ])
-
     SConscript([
         'radeon/drm/SConscript',
     ])
diff --git a/src/gallium/winsys/i965/drm/Makefile b/src/gallium/winsys/i965/drm/Makefile
deleted file mode 100644 (file)
index 830007e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-LIBNAME = i965drm
-
-C_SOURCES = \
-       i965_drm_buffer.c \
-       i965_drm_winsys.c
-
-LIBRARY_INCLUDES = $(shell $(PKG_CONFIG) libdrm --cflags-only-I)
-
-LIBRARY_DEFINES = $(shell $(PKG_CONFIG) --cflags-only-other)
-
-include ../../../Makefile.template
diff --git a/src/gallium/winsys/i965/drm/SConscript b/src/gallium/winsys/i965/drm/SConscript
deleted file mode 100644 (file)
index a0f32de..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Import('*')
-
-env = env.Clone()
-
-env.PkgUseModules('DRM')
-
-i965drm_sources = [
-    'i965_drm_buffer.c',
-    'i965_drm_winsys.c',
-]
-
-i965drm = env.ConvenienceLibrary(
-    target ='i965drm',
-    source = i965drm_sources,
-)
-
-Export('i965drm')
diff --git a/src/gallium/winsys/i965/drm/i965_drm_buffer.c b/src/gallium/winsys/i965/drm/i965_drm_buffer.c
deleted file mode 100644 (file)
index a904179..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-
-#include "state_tracker/drm_driver.h"
-#include "i965_drm_winsys.h"
-#include "util/u_memory.h"
-#include "util/u_inlines.h"
-
-#include "i915_drm.h"
-#include "intel_bufmgr.h"
-
-
-
-const char *names[BRW_BUFFER_TYPE_MAX] = {
-   "TEXTURE",
-   "SCANOUT",
-   "VERTEX",
-   "CURBE",
-   "QUERY",
-   "SHADER_CONSTANTS",
-   "WM_SCRATCH",
-   "BATCH",
-   "GENERAL_STATE",
-   "SURFACE_STATE",
-   "PIXEL",
-   "GENERIC",
-};
-
-const char *usages[BRW_USAGE_MAX] = {
-   "STATE",
-   "QUERY_RESULT",
-   "RENDER_TARGET",
-   "DEPTH_BUFFER",
-   "BLIT_SOURCE",
-   "BLIT_DEST",
-   "SAMPLER",
-   "VERTEX",
-   "SCRATCH"
-};
-
-
-const char *data_types[BRW_DATA_MAX] =
-{
-   "GS: CC_VP",
-   "GS: CC_UNIT",
-   "GS: WM_PROG",
-   "GS: SAMPLER_DEFAULT_COLOR",
-   "GS: SAMPLER",
-   "GS: WM_UNIT",
-   "GS: SF_PROG",
-   "GS: SF_VP",
-   "GS: SF_UNIT",
-   "GS: VS_UNIT",
-   "GS: VS_PROG",
-   "GS: GS_UNIT",
-   "GS: GS_PROG",
-   "GS: CLIP_VP",
-   "GS: CLIP_UNIT",
-   "GS: CLIP_PROG",
-   "SS: SURFACE",
-   "SS: SURF_BIND",
-   "CONSTANT DATA",
-   "BATCH DATA",
-   "(untyped)"
-};
-
-static enum pipe_error 
-i965_libdrm_bo_alloc(struct brw_winsys_screen *sws,
-                     enum brw_buffer_type type,
-                     unsigned size,
-                     unsigned alignment,
-                     struct brw_winsys_buffer **bo_out)
-{
-   struct i965_libdrm_winsys *idws = i965_libdrm_winsys(sws);
-   struct i965_libdrm_buffer *buf;
-
-   if (BRW_DUMP)
-      debug_printf("%s type %s sz %d align %d\n",
-                  __FUNCTION__, names[type], size, alignment );
-
-   buf = CALLOC_STRUCT(i965_libdrm_buffer);
-   if (!buf)
-      return PIPE_ERROR_OUT_OF_MEMORY;
-
-   switch (type) {
-   case BRW_BUFFER_TYPE_TEXTURE:
-/* case BRW_BUFFER_TYPE_SCANOUT:*/
-   case BRW_BUFFER_TYPE_VERTEX:
-   case BRW_BUFFER_TYPE_CURBE:
-   case BRW_BUFFER_TYPE_QUERY:
-   case BRW_BUFFER_TYPE_SHADER_CONSTANTS:
-   case BRW_BUFFER_TYPE_SHADER_SCRATCH:
-   case BRW_BUFFER_TYPE_BATCH:
-   case BRW_BUFFER_TYPE_GENERAL_STATE:
-   case BRW_BUFFER_TYPE_SURFACE_STATE:
-   case BRW_BUFFER_TYPE_PIXEL:
-   case BRW_BUFFER_TYPE_GENERIC:
-      break;
-   case BRW_BUFFER_TYPE_SCANOUT:
-      buf->map_gtt = TRUE;
-      break;
-   default:
-      assert(0);
-      break;
-   }
-
-   buf->bo = drm_intel_bo_alloc(idws->gem, 
-                                names[type], 
-                                size, 
-                                alignment);
-
-   if (!buf->bo)
-      goto err;
-
-   pipe_reference_init(&buf->base.reference, 1);
-   buf->base.size = size;
-   buf->base.sws = sws;
-
-   *bo_out = &buf->base;
-   return PIPE_OK;
-
-err:
-   assert(0);
-   FREE(buf);
-   return PIPE_ERROR_OUT_OF_MEMORY;
-}
-
-static enum pipe_error
-i965_libdrm_bo_from_handle(struct brw_winsys_screen *sws,
-                           struct winsys_handle *whandle,
-                           unsigned *stride,
-                           unsigned *tile,
-                           struct brw_winsys_buffer **bo_out)
-{
-   struct i965_libdrm_winsys *idws = i965_libdrm_winsys(sws);
-   struct i965_libdrm_buffer *buf = CALLOC_STRUCT(i965_libdrm_buffer);
-   uint32_t swizzle = 0;
-
-   if (BRW_DUMP)
-      debug_printf("%s\n", __FUNCTION__);
-
-   if (!buf)
-      return PIPE_ERROR_OUT_OF_MEMORY;
-
-   pipe_reference_init(&buf->base.reference, 1);
-   buf->bo = drm_intel_bo_gem_create_from_name(idws->gem, "FROM_HANDLE", whandle->handle);
-   buf->base.size = buf->bo->size;
-   buf->base.sws = &idws->base;
-   buf->flinked = TRUE;
-   buf->flink = whandle->handle;
-
-
-   if (!buf->bo)
-      goto err;
-
-   drm_intel_bo_get_tiling(buf->bo, &buf->tiling, &swizzle);
-   if (buf->tiling != 0)
-      buf->map_gtt = TRUE;
-
-   *tile = buf->tiling;
-   *stride = whandle->stride;
-
-   *bo_out = &buf->base;
-   return PIPE_OK;
-
-err:
-   FREE(buf);
-   return PIPE_ERROR_OUT_OF_MEMORY;
-}
-
-static enum pipe_error
-i965_libdrm_bo_get_handle(struct brw_winsys_buffer *buffer,
-                          struct winsys_handle *whandle,
-                          unsigned stride)
-{
-   struct i965_libdrm_buffer *buf = i965_libdrm_buffer(buffer);
-
-   if (BRW_DUMP)
-      debug_printf("%s\n", __FUNCTION__);
-
-   if (whandle->type == DRM_API_HANDLE_TYPE_SHARED) {
-      if (!buf->flinked) {
-         if (drm_intel_bo_flink(buf->bo, &buf->flink))
-            return PIPE_ERROR_BAD_INPUT;
-         buf->flinked = TRUE;
-      }
-
-      whandle->handle = buf->flink;
-   } else if (whandle->type == DRM_API_HANDLE_TYPE_KMS) {
-      whandle->handle = buf->bo->handle;
-   } else {
-      assert(!"unknown usage");
-      return PIPE_ERROR_BAD_INPUT;
-   }
-
-   whandle->stride = stride;
-   return PIPE_OK;
-}
-
-static void 
-i965_libdrm_bo_destroy(struct brw_winsys_buffer *buffer)
-{
-   struct i965_libdrm_buffer *buf = i965_libdrm_buffer(buffer);
-
-   if (BRW_DUMP)
-      debug_printf("%s\n", __FUNCTION__);
-
-   drm_intel_bo_unreference(buf->bo);
-   FREE(buffer);
-}
-
-static enum pipe_error
-i965_libdrm_bo_emit_reloc(struct brw_winsys_buffer *buffer,
-                          enum brw_buffer_usage usage,
-                          unsigned delta,
-                          unsigned offset,
-                          struct brw_winsys_buffer *buffer2)
-{
-   struct i965_libdrm_buffer *buf = i965_libdrm_buffer(buffer);
-   struct i965_libdrm_buffer *buf2 = i965_libdrm_buffer(buffer2);
-   int read, write;
-   int ret;
-
-   if (BRW_DUMP)
-      debug_printf("%s buf %p offset %x delta %x buf2 %p/%s/%s\n",
-                  __FUNCTION__, (void *)buffer, 
-                  offset, delta,
-                  (void *)buffer2, names[buf2->data_type], usages[usage]);
-
-   switch (usage) {
-   case BRW_USAGE_STATE:
-      read = I915_GEM_DOMAIN_INSTRUCTION;
-      write = 0;
-      break;
-   case BRW_USAGE_QUERY_RESULT:
-      read = I915_GEM_DOMAIN_INSTRUCTION;
-      write = I915_GEM_DOMAIN_INSTRUCTION;
-      break;
-   case BRW_USAGE_RENDER_TARGET:
-      read = I915_GEM_DOMAIN_RENDER;
-      write = 0;
-      break;
-   case BRW_USAGE_DEPTH_BUFFER:
-      read = I915_GEM_DOMAIN_RENDER;
-      write = I915_GEM_DOMAIN_RENDER;
-      break;
-   case BRW_USAGE_BLIT_SOURCE:
-      read = 0;
-      write = I915_GEM_DOMAIN_RENDER;
-      break;
-   case BRW_USAGE_BLIT_DEST:
-      read = I915_GEM_DOMAIN_RENDER;
-      write = I915_GEM_DOMAIN_RENDER;
-      break;
-   case BRW_USAGE_SAMPLER:
-      read = I915_GEM_DOMAIN_SAMPLER;
-      write = 0;
-      break;
-   case BRW_USAGE_VERTEX:
-      read = I915_GEM_DOMAIN_VERTEX;
-      write = 0;
-      break;
-   case BRW_USAGE_SCRATCH:
-      read = 0;
-      write = 0;
-      break;
-   default:
-      assert(0);
-      return -1;
-   }
-
-   /* Needed??
-   ((uint32_t *)buf->bo->virtual)[offset/4] = (delta +
-                                              buf2->bo->offset);
-    */
-
-   ret = dri_bo_emit_reloc( buf->bo, read, write, delta, offset, buf2->bo );
-   if (ret)
-      return -1;
-
-   return 0;
-}
-
-static enum pipe_error 
-i965_libdrm_bo_exec(struct brw_winsys_buffer *buffer,
-                    unsigned bytes_used)
-{
-   struct i965_libdrm_buffer *buf = i965_libdrm_buffer(buffer);
-   struct i965_libdrm_winsys *idws = i965_libdrm_winsys(buffer->sws);
-   int ret;
-
-   if (BRW_DUMP)
-      debug_printf("execute buffer %p, bytes %d\n", (void *)buffer, bytes_used);
-
-   if (idws->send_cmd) {
-      ret = dri_bo_exec(buf->bo, bytes_used, NULL, 0, 0);
-      if (ret)
-         return PIPE_ERROR;
-   }
-
-   return PIPE_OK;
-}
-
-static enum pipe_error
-i965_libdrm_bo_subdata(struct brw_winsys_buffer *buffer,
-                       enum brw_buffer_data_type data_type,
-                       size_t offset,
-                       size_t size,
-                       const void *data,
-                       const struct brw_winsys_reloc *reloc,
-                       unsigned nr_reloc)
-{
-   struct i965_libdrm_buffer *buf = i965_libdrm_buffer(buffer);
-   struct i965_libdrm_winsys *idws = i965_libdrm_winsys(buffer->sws);
-   int ret, i;
-
-   (void)data_type;
-
-   if (BRW_DUMP)
-      debug_printf("%s buf %p off %d sz %d %s relocs: %d\n", 
-                  __FUNCTION__, 
-                  (void *)buffer, offset, size, 
-                  data_types[data_type],
-                  nr_reloc);
-
-   if (BRW_DUMP)
-      brw_dump_data( idws->base.pci_id,
-                    data_type,
-                    buf->bo->offset + offset, 
-                    data, size, buffer->sws->gen );
-
-   /* XXX: use bo_map_gtt/memcpy/unmap_gtt under some circumstances???
-    */
-   ret = drm_intel_bo_subdata(buf->bo, offset, size, (void*)data);
-   if (ret)
-      return PIPE_ERROR;
-  
-   for (i = 0; i < nr_reloc; i++) {
-      i965_libdrm_bo_emit_reloc(buffer, reloc[i].usage, reloc[i].delta,
-                                reloc[i].offset, reloc[i].bo);
-   }
-
-   return PIPE_OK;
-}
-
-static boolean 
-i965_libdrm_bo_is_busy(struct brw_winsys_buffer *buffer)
-{
-   struct i965_libdrm_buffer *buf = i965_libdrm_buffer(buffer);
-   boolean ret;
-
-   if (BRW_DUMP)
-      debug_printf("%s %p\n", __FUNCTION__, (void *)buffer);
-
-   ret = drm_intel_bo_busy(buf->bo);
-
-   if (BRW_DUMP)
-      debug_printf("  --> %d\n", ret);
-
-   return ret;
-}
-
-static boolean 
-i965_libdrm_bo_references(struct brw_winsys_buffer *a,
-                          struct brw_winsys_buffer *b)
-{
-   struct i965_libdrm_buffer *bufa = i965_libdrm_buffer(a);
-   struct i965_libdrm_buffer *bufb = i965_libdrm_buffer(b);
-   boolean ret;
-
-   if (BRW_DUMP)
-      debug_printf("%s %p %p\n", __FUNCTION__, (void *)a, (void *)b);
-
-   ret = drm_intel_bo_references(bufa->bo, bufb->bo);
-
-   if (BRW_DUMP)
-      debug_printf("  --> %d\n", ret);
-
-   return ret;
-}
-
-/* XXX: couldn't this be handled by returning true/false on
- * bo_emit_reloc?
- */
-static enum pipe_error
-i965_libdrm_check_aperture_space(struct brw_winsys_screen *iws,
-                                 struct brw_winsys_buffer **buffers,
-                                 unsigned count)
-{
-   static drm_intel_bo *bos[128];
-   int i;
-   int ret;
-
-   if (BRW_DUMP)
-      debug_printf("%s\n", __FUNCTION__);
-
-   if (count > Elements(bos)) {
-      assert(0);
-      return FALSE;
-   }
-
-   for (i = 0; i < count; i++)
-      bos[i] = i965_libdrm_buffer(buffers[i])->bo;
-
-   /* XXX: converting from ??? to pipe_error:
-    */
-   ret = dri_bufmgr_check_aperture_space(bos, count);
-
-   if (BRW_DUMP)
-      debug_printf("  --> %d (ok == %d)\n", ret, PIPE_OK);
-
-   return ret;
-}
-
-static void *
-i965_libdrm_bo_map(struct brw_winsys_buffer *buffer,
-                   enum brw_buffer_data_type data_type,
-                   unsigned offset,
-                   unsigned length,
-                   boolean write,
-                   boolean discard,
-                   boolean flush_explicit)
-{
-   struct i965_libdrm_buffer *buf = i965_libdrm_buffer(buffer);
-   int ret;
-
-
-   if (BRW_DUMP)
-      debug_printf("%s %p %s %s\n", __FUNCTION__, (void *)buffer, 
-                  write ? "read/write" : "read",
-                  write ? data_types[data_type] : "");
-
-   if (!buf->map_count) {
-      if (buf->map_gtt) {
-         ret = drm_intel_gem_bo_map_gtt(buf->bo);
-         if (ret)
-            return NULL;
-      }
-      else {
-         ret = drm_intel_bo_map(buf->bo, write);
-         if (ret)
-            return NULL;
-      }
-   }
-
-   buf->data_type = data_type;
-   buf->map_count++;
-   return buf->bo->virtual;
-}
-
-static void
-i965_libdrm_bo_flush_range(struct brw_winsys_buffer *buffer,
-                           unsigned offset,
-                           unsigned length)
-{
-   struct i965_libdrm_buffer *buf = i965_libdrm_buffer(buffer);
-   struct i965_libdrm_winsys *idws = i965_libdrm_winsys(buffer->sws);
-
-   if (BRW_DUMP)
-      debug_printf("%s %s offset %d len %d\n", __FUNCTION__,
-                  data_types[buf->data_type],
-                  offset, length);
-
-   if (BRW_DUMP)
-      brw_dump_data( idws->base.pci_id,
-                    buf->data_type,
-                    buf->bo->offset + offset, 
-                    (char*)buf->bo->virtual + offset, 
-                    length, buffer->sws->gen );
-}
-
-static void 
-i965_libdrm_bo_unmap(struct brw_winsys_buffer *buffer)
-{
-   struct i965_libdrm_buffer *buf = i965_libdrm_buffer(buffer);
-
-   if (BRW_DUMP)
-      debug_printf("%s\n", __FUNCTION__);
-
-   if (--buf->map_count > 0)
-      return;
-
-   if (buf->map_gtt)
-      drm_intel_gem_bo_unmap_gtt(buf->bo);
-   else
-      drm_intel_bo_unmap(buf->bo);
-}
-
-void
-i965_libdrm_winsys_init_buffer_functions(struct i965_libdrm_winsys *idws)
-{
-   idws->base.bo_alloc             = i965_libdrm_bo_alloc;
-   idws->base.bo_from_handle       = i965_libdrm_bo_from_handle;
-   idws->base.bo_get_handle        = i965_libdrm_bo_get_handle;
-   idws->base.bo_destroy           = i965_libdrm_bo_destroy;
-   idws->base.bo_emit_reloc        = i965_libdrm_bo_emit_reloc;
-   idws->base.bo_exec              = i965_libdrm_bo_exec;
-   idws->base.bo_subdata           = i965_libdrm_bo_subdata;
-   idws->base.bo_is_busy           = i965_libdrm_bo_is_busy;
-   idws->base.bo_references        = i965_libdrm_bo_references;
-   idws->base.check_aperture_space = i965_libdrm_check_aperture_space;
-   idws->base.bo_map               = i965_libdrm_bo_map;
-   idws->base.bo_flush_range       = i965_libdrm_bo_flush_range;
-   idws->base.bo_unmap             = i965_libdrm_bo_unmap;
-}
diff --git a/src/gallium/winsys/i965/drm/i965_drm_public.h b/src/gallium/winsys/i965/drm/i965_drm_public.h
deleted file mode 100644 (file)
index 2913b07..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-#ifndef I965_DRM_PUBLIC_H
-#define I965_DRM_PUBLIC_H
-
-struct brw_winsys_screen;
-
-struct brw_winsys_screen * i965_drm_winsys_screen_create(int drmFD);
-
-#endif
diff --git a/src/gallium/winsys/i965/drm/i965_drm_winsys.c b/src/gallium/winsys/i965/drm/i965_drm_winsys.c
deleted file mode 100644 (file)
index b08e622..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-
-#include <stdio.h>
-#include "state_tracker/drm_driver.h"
-
-#include "i965_drm_winsys.h"
-#include "i965_drm_public.h"
-#include "util/u_memory.h"
-
-/*
- * Helper functions
- */
-
-
-static void
-i965_libdrm_get_device_id(unsigned int *device_id)
-{
-   char path[512];
-   FILE *file;
-   void *shutup_gcc;
-
-   /*
-    * FIXME: Fix this up to use a drm ioctl or whatever.
-    */
-
-   snprintf(path, sizeof(path), "/sys/class/drm/card0/device/device");
-   file = fopen(path, "r");
-   if (!file) {
-      return;
-   }
-
-   shutup_gcc = fgets(path, sizeof(path), file);
-   sscanf(path, "%x", device_id);
-   fclose(file);
-}
-
-static void
-i965_libdrm_winsys_destroy(struct brw_winsys_screen *iws)
-{
-   struct i965_libdrm_winsys *idws = i965_libdrm_winsys(iws);
-
-   if (BRW_DUMP)
-      debug_printf("%s\n", __FUNCTION__);
-
-   drm_intel_bufmgr_destroy(idws->gem);
-
-   FREE(idws);
-}
-
-struct brw_winsys_screen *
-i965_drm_winsys_screen_create(int drmFD)
-{
-   struct i965_libdrm_winsys *idws;
-
-   debug_printf("%s\n", __FUNCTION__);
-
-   idws = CALLOC_STRUCT(i965_libdrm_winsys);
-   if (!idws)
-      return NULL;
-
-   i965_libdrm_get_device_id(&idws->base.pci_id);
-
-   i965_libdrm_winsys_init_buffer_functions(idws);
-
-   idws->fd = drmFD;
-
-   idws->base.destroy = i965_libdrm_winsys_destroy;
-
-   idws->gem = drm_intel_bufmgr_gem_init(idws->fd, BRW_BATCH_SIZE);
-   drm_intel_bufmgr_gem_enable_reuse(idws->gem);
-
-   idws->send_cmd = !debug_get_bool_option("BRW_NO_HW", FALSE);
-
-   return &idws->base;
-}
diff --git a/src/gallium/winsys/i965/drm/i965_drm_winsys.h b/src/gallium/winsys/i965/drm/i965_drm_winsys.h
deleted file mode 100644 (file)
index 82dbe61..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-
-#ifndef INTEL_DRM_WINSYS_H
-#define INTEL_DRM_WINSYS_H
-
-#include "i965/brw_winsys.h"
-
-#include "drm.h"
-#include "intel_bufmgr.h"
-
-
-
-/*
- * Winsys
- */
-
-
-struct i965_libdrm_winsys
-{
-   struct brw_winsys_screen base;
-   drm_intel_bufmgr *gem;
-
-   boolean send_cmd;
-
-   int fd; /**< Drm file discriptor */
-};
-
-static INLINE struct i965_libdrm_winsys *
-i965_libdrm_winsys(struct brw_winsys_screen *iws)
-{
-   return (struct i965_libdrm_winsys *)iws;
-}
-
-void i965_libdrm_winsys_init_buffer_functions(struct i965_libdrm_winsys *idws);
-
-
-/* Buffer.  
- */
-struct i965_libdrm_buffer {
-   struct brw_winsys_buffer base;
-
-   drm_intel_bo *bo;
-
-   void *ptr;
-   unsigned map_count;
-   unsigned data_type;         /* valid while mapped */
-   unsigned tiling;
-
-   boolean map_gtt;
-   boolean flinked;
-   unsigned flink;
-};
-
-static INLINE struct i965_libdrm_buffer *
-i965_libdrm_buffer(struct brw_winsys_buffer *buffer)
-{
-   return (struct i965_libdrm_buffer *)buffer;
-}
-
-
-#endif
diff --git a/src/gallium/winsys/i965/xlib/Makefile b/src/gallium/winsys/i965/xlib/Makefile
deleted file mode 100644 (file)
index cc82493..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-# src/gallium/winsys/i965/xlib/Makefile
-
-# This makefile produces a "stand-alone" libGL.so which is based on
-# Xlib (no DRI HW acceleration)
-
-
-TOP = ../../../../..
-include $(TOP)/configs/current
-
-
-GL_MAJOR = 1
-GL_MINOR = 5
-GL_TINY = 0$(MESA_MAJOR)0$(MESA_MINOR)0$(MESA_TINY)
-
-
-INCLUDE_DIRS = \
-       -I$(TOP)/include \
-       -I$(TOP)/src/mesa \
-       -I$(TOP)/src/mesa/main \
-       -I$(TOP)/src/gallium/include \
-       -I$(TOP)/src/gallium/drivers \
-       -I$(TOP)/src/gallium/drivers/i965 \
-       -I$(TOP)/src/gallium/drivers/i965/include \
-       -I$(TOP)/src/gallium/state_trackers/glx/xlib \
-       -I$(TOP)/src/gallium/auxiliary \
-       -I/usr/include/drm
-
-XLIB_WINSYS_SOURCES = \
-       xlib_i965.c \
-
-
-
-XLIB_WINSYS_OBJECTS = $(XLIB_WINSYS_SOURCES:.c=.o)
-
-
-
-LIBS = \
-       $(TOP)/src/gallium/drivers/i965/libi965.a \
-       $(TOP)/src/gallium/drivers/trace/libtrace.a \
-       $(TOP)/src/gallium/state_trackers/glx/xlib/libxlib.a \
-       $(TOP)/src/mapi/glapi/libglapi.a \
-       $(TOP)/src/mesa/libmesagallium.a \
-       $(GALLIUM_AUXILIARIES) 
-
-#      $(TOP)/src/gallium/drivers/i965/lib/libi9xx.a \
-
-.SUFFIXES : .cpp
-
-.c.o:
-       $(CC) -c $(INCLUDE_DIRS) $(DEFINES) $(CFLAGS) $< -o $@
-
-.cpp.o:
-       $(CXX) -c $(INCLUDE_DIRS) $(DEFINES) $(CXXFLAGS) $< -o $@
-
-
-
-default: $(TOP)/$(LIB_DIR)/gallium $(TOP)/$(LIB_DIR)/gallium/$(GL_LIB_NAME)
-
-$(TOP)/$(LIB_DIR)/gallium:
-       @ mkdir -p $(TOP)/$(LIB_DIR)/gallium
-
-# Make the libGL.so library
-$(TOP)/$(LIB_DIR)/gallium/$(GL_LIB_NAME): $(XLIB_WINSYS_OBJECTS) $(LIBS) Makefile
-       $(TOP)/bin/mklib -o $(GL_LIB) \
-               -linker "$(CC)" \
-               -major $(GL_MAJOR) -minor $(GL_MINOR) -patch $(GL_TINY) \
-               -install $(TOP)/$(LIB_DIR)/gallium \
-               $(MKLIB_OPTIONS) $(XLIB_WINSYS_OBJECTS) \
-               -Wl,--start-group $(LIBS) -Wl,--end-group $(GL_LIB_DEPS)
-
-
-depend: $(XLIB_WINSYS_SOURCES)
-       @ echo "running $(MKDEP)"
-       @ rm -f depend  # workaround oops on gutsy?!?
-       @ touch depend
-       $(MKDEP) $(MKDEP_OPTIONS) $(DEFINES) $(INCLUDE_DIRS) $(XLIB_WINSYS_SOURCES) \
-               > /dev/null 2>/dev/null
-
-
-install: default
-       $(INSTALL) -d $(INSTALL_DIR)/include/GL
-       $(INSTALL) -d $(INSTALL_DIR)/$(LIB_DIR)
-       $(INSTALL) -m 644 $(TOP)/include/GL/*.h $(INSTALL_DIR)/include/GL
-       @if [ -e $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) ]; then \
-               $(MINSTALL) $(TOP)/$(LIB_DIR)/libGL* $(INSTALL_DIR)/$(LIB_DIR); \
-       fi
-
-
-# Emacs tags
-tags:
-       etags `find . -name \*.[ch]` $(TOP)/include/GL/*.h
-
-clean:
-       -rm -f *.o
-
-
-include depend
diff --git a/src/gallium/winsys/i965/xlib/xlib_i965.c b/src/gallium/winsys/i965/xlib/xlib_i965.c
deleted file mode 100644 (file)
index c22df66..0000000
+++ /dev/null
@@ -1,508 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2007 Tungsten Graphics, Inc., Bismarck, ND., USA
- * 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"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * 
- **************************************************************************/
-
-/*
- * Authors:
- *   Keith Whitwell
- *   Brian Paul
- */
-
-
-#include "util/u_memory.h"
-#include "util/u_math.h"
-#include "pipe/p_error.h"
-#include "pipe/p_context.h"
-
-#include "xm_public.h"
-
-#include "i965/brw_winsys.h"
-#include "i965/brw_screen.h"
-#include "i965/brw_resource.h"
-#include "i965/brw_reg.h"
-#include "i965/brw_structs_dump.h"
-
-#define MAX_VRAM (128*1024*1024)
-
-
-
-extern int brw_disasm (FILE *file, 
-                       const struct brw_instruction *inst,
-                       unsigned count );
-
-extern int intel_decode(const uint32_t *data, 
-                        int count,
-                        uint32_t hw_offset,
-                        uint32_t devid);
-
-struct xlib_brw_buffer
-{
-   struct brw_winsys_buffer base;
-   char *virtual;
-   unsigned offset;
-   unsigned type;
-   int map_count;
-   boolean modified;
-};
-
-
-/**
- * Subclass of brw_winsys_screen for Xlib winsys
- */
-struct xlib_brw_winsys
-{
-   struct brw_winsys_screen base;
-   struct brw_chipset chipset;
-
-   unsigned size;
-   unsigned used;
-};
-
-static struct xlib_brw_winsys *
-xlib_brw_winsys( struct brw_winsys_screen *screen )
-{
-   return (struct xlib_brw_winsys *)screen;
-}
-
-
-static struct xlib_brw_buffer *
-xlib_brw_buffer( struct brw_winsys_buffer *buffer )
-{
-   return (struct xlib_brw_buffer *)buffer;
-}
-
-
-
-const char *names[BRW_BUFFER_TYPE_MAX] = {
-   "TEXTURE",
-   "SCANOUT",
-   "VERTEX",
-   "CURBE",
-   "QUERY",
-   "SHADER_CONSTANTS",
-   "WM_SCRATCH",
-   "BATCH",
-   "GENERAL_STATE",
-   "SURFACE_STATE",
-   "PIXEL",
-   "GENERIC",
-};
-
-const char *usages[BRW_USAGE_MAX] = {
-   "STATE",
-   "QUERY_RESULT",
-   "RENDER_TARGET",
-   "DEPTH_BUFFER",
-   "BLIT_SOURCE",
-   "BLIT_DEST",
-   "SAMPLER",
-   "VERTEX",
-   "SCRATCH"
-};
-
-
-const char *data_types[BRW_DATA_MAX] =
-{
-   "GS: CC_VP",
-   "GS: CC_UNIT",
-   "GS: WM_PROG",
-   "GS: SAMPLER_DEFAULT_COLOR",
-   "GS: SAMPLER",
-   "GS: WM_UNIT",
-   "GS: SF_PROG",
-   "GS: SF_VP",
-   "GS: SF_UNIT",
-   "GS: VS_UNIT",
-   "GS: VS_PROG",
-   "GS: GS_UNIT",
-   "GS: GS_PROG",
-   "GS: CLIP_VP",
-   "GS: CLIP_UNIT",
-   "GS: CLIP_PROG",
-   "SS: SURFACE",
-   "SS: SURF_BIND",
-   "CONSTANT DATA",
-   "BATCH DATA",
-   "(untyped)"
-};
-
-
-static enum pipe_error
-xlib_brw_bo_alloc( struct brw_winsys_screen *sws,
-                   enum brw_buffer_type type,
-                   unsigned size,
-                   unsigned alignment,
-                   struct brw_winsys_buffer **bo_out )
-{
-   struct xlib_brw_winsys *xbw = xlib_brw_winsys(sws);
-   struct xlib_brw_buffer *buf;
-
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("%s type %s sz %d align %d\n",
-                   __FUNCTION__, names[type], size, alignment );
-
-   buf = CALLOC_STRUCT(xlib_brw_buffer);
-   if (!buf)
-      return PIPE_ERROR_OUT_OF_MEMORY;
-
-   pipe_reference_init(&buf->base.reference, 1);
-
-   buf->offset = align(xbw->used, alignment);
-   buf->type = type;
-   buf->virtual = MALLOC(size);
-   buf->base.size = size;
-   buf->base.sws = sws;
-
-   xbw->used = align(xbw->used, alignment) + size;
-   if (xbw->used > MAX_VRAM)
-      goto err;
-
-   /* XXX: possibly rentrant call to bo_destroy:
-    */
-   bo_reference(bo_out, &buf->base);
-   return PIPE_OK;
-
-err:
-   assert(0);
-   FREE(buf->virtual);
-   FREE(buf);
-   return PIPE_ERROR_OUT_OF_MEMORY;
-}
-
-static void 
-xlib_brw_bo_destroy( struct brw_winsys_buffer *buffer )
-{
-   struct xlib_brw_buffer *buf = xlib_brw_buffer(buffer);
-
-   FREE(buf);
-}
-
-static int 
-xlib_brw_bo_emit_reloc( struct brw_winsys_buffer *buffer,
-                        enum brw_buffer_usage usage,
-                        unsigned delta,
-                        unsigned offset,
-                        struct brw_winsys_buffer *buffer2)
-{
-   struct xlib_brw_buffer *buf = xlib_brw_buffer(buffer);
-   struct xlib_brw_buffer *buf2 = xlib_brw_buffer(buffer2);
-
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("%s buf %p offset %x val %x + %x buf2 %p/%s/%s\n",
-                   __FUNCTION__, (void *)buffer, offset,
-                   buf2->offset, delta,
-                   (void *)buffer2, names[buf2->type], usages[usage]);
-
-   *(uint32_t *)(buf->virtual + offset) = buf2->offset + delta;
-
-   return 0;
-}
-
-static int 
-xlib_brw_bo_exec( struct brw_winsys_buffer *buffer,
-                    unsigned bytes_used )
-{
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("execute buffer %p, bytes %d\n", (void *)buffer, bytes_used);
-
-   return 0;
-}
-
-
-
-
-static int
-xlib_brw_bo_subdata(struct brw_winsys_buffer *buffer,
-                    enum brw_buffer_data_type data_type,
-                    size_t offset,
-                    size_t size,
-                    const void *data,
-                    const struct brw_winsys_reloc *reloc,
-                    unsigned nr_relocs)
-{
-   struct xlib_brw_buffer *buf = xlib_brw_buffer(buffer);
-   struct xlib_brw_winsys *xbw = xlib_brw_winsys(buffer->sws);
-   unsigned i;
-
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("%s buf %p off %d sz %d %s relocs: %d\n", 
-                   __FUNCTION__, 
-                   (void *)buffer, offset, size, 
-                   data_types[data_type],
-                   nr_relocs);
-
-   assert(buf->base.size >= offset + size);
-   memcpy(buf->virtual + offset, data, size);
-
-   /* Apply the relocations:
-    */
-   for (i = 0; i < nr_relocs; i++) {
-      if (BRW_DEBUG & DEBUG_WINSYS)
-         debug_printf("\treloc[%d] usage %s off %d value %x+%x\n", 
-                      i, usages[reloc[i].usage], reloc[i].offset,
-                      xlib_brw_buffer(reloc[i].bo)->offset, reloc[i].delta);
-
-      *(unsigned *)(buf->virtual + offset + reloc[i].offset) = 
-         xlib_brw_buffer(reloc[i].bo)->offset + reloc[i].delta;
-   }
-
-   if (BRW_DUMP)
-      brw_dump_data( xbw->chipset.pci_id,
-                    data_type,
-                    buf->offset + offset, 
-                    buf->virtual + offset, size );
-
-
-   return 0;
-}
-
-
-static boolean 
-xlib_brw_bo_is_busy(struct brw_winsys_buffer *buffer)
-{
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("%s %p\n", __FUNCTION__, (void *)buffer);
-   return TRUE;
-}
-
-static boolean 
-xlib_brw_bo_references(struct brw_winsys_buffer *a,
-                         struct brw_winsys_buffer *b)
-{
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("%s %p %p\n", __FUNCTION__, (void *)a, (void *)b);
-   return TRUE;
-}
-
-static enum pipe_error
-xlib_brw_check_aperture_space( struct brw_winsys_screen *iws,
-                                struct brw_winsys_buffer **buffers,
-                                unsigned count )
-{
-   unsigned tot_size = 0;
-   unsigned i;
-
-   for (i = 0; i < count; i++)
-      tot_size += buffers[i]->size;
-
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("%s %d bufs, tot_size: %d kb\n", 
-                   __FUNCTION__, count, 
-                   (tot_size + 1023) / 1024);
-
-   return PIPE_OK;
-}
-
-static void *
-xlib_brw_bo_map(struct brw_winsys_buffer *buffer,
-                enum brw_buffer_data_type data_type,
-                unsigned offset,
-                unsigned length,
-                boolean write,
-                boolean discard,
-                boolean explicit)
-{
-   struct xlib_brw_buffer *buf = xlib_brw_buffer(buffer);
-
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("%s %p %s %s\n", __FUNCTION__, (void *)buffer, 
-                   write ? "read/write" : "read",
-                   write ? data_types[data_type] : "");
-
-   if (write)
-      buf->modified = 1;
-
-   buf->map_count++;
-   return buf->virtual;
-}
-
-
-static void
-xlib_brw_bo_flush_range( struct brw_winsys_buffer *buffer,
-                         unsigned offset,
-                         unsigned length )
-{
-}
-
-
-static void 
-xlib_brw_bo_unmap(struct brw_winsys_buffer *buffer)
-{
-   struct xlib_brw_buffer *buf = xlib_brw_buffer(buffer);
-
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("%s %p\n", __FUNCTION__, (void *)buffer);
-
-   --buf->map_count;
-   assert(buf->map_count >= 0);
-
-   if (buf->map_count == 0 &&
-       buf->modified) {
-
-      buf->modified = 0;
-      
-      /* Consider dumping new buffer contents here, using the
-       * flush-range info to minimize verbosity.
-       */
-   }
-}
-
-
-static void
-xlib_brw_bo_wait_idle( struct brw_winsys_buffer *buffer )
-{
-}
-
-
-static void
-xlib_brw_winsys_destroy( struct brw_winsys_screen *sws )
-{
-   struct xlib_brw_winsys *xbw = xlib_brw_winsys(sws);
-
-   FREE(xbw);
-}
-
-static struct brw_winsys_screen *
-xlib_create_brw_winsys_screen( void )
-{
-   struct xlib_brw_winsys *ws;
-
-   ws = CALLOC_STRUCT(xlib_brw_winsys);
-   if (!ws)
-      return NULL;
-
-   ws->used = 0;
-   ws->base.pci_id = PCI_CHIP_GM45_GM;
-
-   ws->base.destroy              = xlib_brw_winsys_destroy;
-   ws->base.bo_alloc             = xlib_brw_bo_alloc;
-   ws->base.bo_destroy           = xlib_brw_bo_destroy;
-   ws->base.bo_emit_reloc        = xlib_brw_bo_emit_reloc;
-   ws->base.bo_exec              = xlib_brw_bo_exec;
-   ws->base.bo_subdata           = xlib_brw_bo_subdata;
-   ws->base.bo_is_busy           = xlib_brw_bo_is_busy;
-   ws->base.bo_references        = xlib_brw_bo_references;
-   ws->base.check_aperture_space = xlib_brw_check_aperture_space;
-   ws->base.bo_map               = xlib_brw_bo_map;
-   ws->base.bo_flush_range       = xlib_brw_bo_flush_range;
-   ws->base.bo_unmap             = xlib_brw_bo_unmap;
-   ws->base.bo_wait_idle         = xlib_brw_bo_wait_idle;
-
-   return &ws->base;
-}
-
-
-/***********************************************************************
- * Implementation of Xlib co-state-tracker's winsys interface
- */
-
-static void
-xlib_i965_display_surface(struct xmesa_buffer *xm_buffer,
-                          struct pipe_resource *resource,
-                          unsigned level, unsigned layer)
-{
-   struct brw_texture *tex = brw_texture(resource);
-   struct xlib_brw_buffer *bo = xlib_brw_buffer(tex->bo);
-   /* not sure if the resource is really useful here but
-      since it was never implemented anyway... */
-   if (BRW_DEBUG & DEBUG_WINSYS)
-      debug_printf("%s level %u layer %u offset %x base sz %dx%d\n", __FUNCTION__,
-                   level, layer,
-                   bo->offset,
-                   resource->width0,
-                   resource->height0);
-}
-
-static void
-xlib_i965_flush_frontbuffer(struct pipe_screen *screen,
-                            struct pipe_resource *resource,
-                            unsigned level, unsigned layer,
-                            void *context_private)
-{
-   xlib_i965_display_surface(NULL, resource, level, layer);
-}
-
-
-static struct pipe_screen *
-xlib_create_i965_screen( void )
-{
-   struct brw_winsys_screen *winsys;
-   struct pipe_screen *screen;
-
-   winsys = xlib_create_brw_winsys_screen();
-   if (winsys == NULL)
-      return NULL;
-
-   screen = brw_create_screen(winsys);
-   if (screen == NULL)
-      goto fail;
-
-   xlib_brw_winsys(winsys)->chipset = brw_screen(screen)->chipset;
-
-   screen->flush_frontbuffer = xlib_i965_flush_frontbuffer;
-   return screen;
-
-fail:
-   if (winsys)
-      winsys->destroy( winsys );
-
-   return NULL;
-}
-
-
-
-
-
-struct xm_driver xlib_i965_driver = 
-{
-   .create_pipe_screen = xlib_create_i965_screen,
-   .display_surface = xlib_i965_display_surface
-};
-
-
-/* Register this driver at library load: 
- */
-static void _init( void ) __attribute__((constructor));
-static void _init( void )
-{
-   xmesa_set_driver( &xlib_i965_driver );
-}
-
-
-
-/***********************************************************************
- *
- * Butt-ugly hack to convince the linker not to throw away public GL
- * symbols (they are all referenced from getprocaddress, I guess).
- */
-extern void (*linker_foo(const unsigned char *procName))();
-extern void (*glXGetProcAddress(const unsigned char *procName))();
-
-extern void (*linker_foo(const unsigned char *procName))()
-{
-   return glXGetProcAddress(procName);
-}