ilo: EOL unmaintained older gallium intel driver
authorEdward O'Callaghan <funfunctor@folklore1984.net>
Tue, 6 Dec 2016 00:07:13 +0000 (11:07 +1100)
committerEdward O'Callaghan <funfunctor@folklore1984.net>
Fri, 3 Feb 2017 05:13:46 +0000 (16:13 +1100)
This is no longer actively maintained and is just
accumulating bitrot.

Signed-off-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Acked-by: Chia-I Wu <olvaffe@gmail.com>
120 files changed:
src/gallium/drivers/ilo/Android.mk [deleted file]
src/gallium/drivers/ilo/Automake.inc [deleted file]
src/gallium/drivers/ilo/Makefile.am [deleted file]
src/gallium/drivers/ilo/Makefile.sources [deleted file]
src/gallium/drivers/ilo/core/ilo_builder.c [deleted file]
src/gallium/drivers/ilo/core/ilo_builder.h [deleted file]
src/gallium/drivers/ilo/core/ilo_builder_3d.h [deleted file]
src/gallium/drivers/ilo/core/ilo_builder_3d_bottom.h [deleted file]
src/gallium/drivers/ilo/core/ilo_builder_3d_top.h [deleted file]
src/gallium/drivers/ilo/core/ilo_builder_blt.h [deleted file]
src/gallium/drivers/ilo/core/ilo_builder_decode.c [deleted file]
src/gallium/drivers/ilo/core/ilo_builder_media.h [deleted file]
src/gallium/drivers/ilo/core/ilo_builder_mi.h [deleted file]
src/gallium/drivers/ilo/core/ilo_builder_render.h [deleted file]
src/gallium/drivers/ilo/core/ilo_core.h [deleted file]
src/gallium/drivers/ilo/core/ilo_debug.c [deleted file]
src/gallium/drivers/ilo/core/ilo_debug.h [deleted file]
src/gallium/drivers/ilo/core/ilo_dev.c [deleted file]
src/gallium/drivers/ilo/core/ilo_dev.h [deleted file]
src/gallium/drivers/ilo/core/ilo_image.c [deleted file]
src/gallium/drivers/ilo/core/ilo_image.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_cc.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_cc.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_compute.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_compute.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_raster.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_raster.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_sampler.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_sampler.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_sbe.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_sbe.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_shader.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_shader.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_shader_ps.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_sol.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_sol.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_surface.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_surface.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_surface_format.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_urb.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_urb.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_vf.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_vf.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_viewport.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_viewport.h [deleted file]
src/gallium/drivers/ilo/core/ilo_state_zs.c [deleted file]
src/gallium/drivers/ilo/core/ilo_state_zs.h [deleted file]
src/gallium/drivers/ilo/core/ilo_vma.h [deleted file]
src/gallium/drivers/ilo/core/intel_winsys.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_blitter.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_eu_isa.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_eu_message.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_mi.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_regs.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_render.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_render_3d.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_render_dynamic.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_render_media.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/gen_render_surface.xml.h [deleted file]
src/gallium/drivers/ilo/genhw/genhw.h [deleted file]
src/gallium/drivers/ilo/ilo_blit.c [deleted file]
src/gallium/drivers/ilo/ilo_blit.h [deleted file]
src/gallium/drivers/ilo/ilo_blitter.c [deleted file]
src/gallium/drivers/ilo/ilo_blitter.h [deleted file]
src/gallium/drivers/ilo/ilo_blitter_blt.c [deleted file]
src/gallium/drivers/ilo/ilo_blitter_pipe.c [deleted file]
src/gallium/drivers/ilo/ilo_blitter_rectlist.c [deleted file]
src/gallium/drivers/ilo/ilo_common.h [deleted file]
src/gallium/drivers/ilo/ilo_context.c [deleted file]
src/gallium/drivers/ilo/ilo_context.h [deleted file]
src/gallium/drivers/ilo/ilo_cp.c [deleted file]
src/gallium/drivers/ilo/ilo_cp.h [deleted file]
src/gallium/drivers/ilo/ilo_draw.c [deleted file]
src/gallium/drivers/ilo/ilo_draw.h [deleted file]
src/gallium/drivers/ilo/ilo_format.c [deleted file]
src/gallium/drivers/ilo/ilo_format.h [deleted file]
src/gallium/drivers/ilo/ilo_gpgpu.c [deleted file]
src/gallium/drivers/ilo/ilo_gpgpu.h [deleted file]
src/gallium/drivers/ilo/ilo_public.h [deleted file]
src/gallium/drivers/ilo/ilo_query.c [deleted file]
src/gallium/drivers/ilo/ilo_query.h [deleted file]
src/gallium/drivers/ilo/ilo_render.c [deleted file]
src/gallium/drivers/ilo/ilo_render.h [deleted file]
src/gallium/drivers/ilo/ilo_render_dynamic.c [deleted file]
src/gallium/drivers/ilo/ilo_render_gen.h [deleted file]
src/gallium/drivers/ilo/ilo_render_gen6.c [deleted file]
src/gallium/drivers/ilo/ilo_render_gen7.c [deleted file]
src/gallium/drivers/ilo/ilo_render_gen8.c [deleted file]
src/gallium/drivers/ilo/ilo_render_media.c [deleted file]
src/gallium/drivers/ilo/ilo_render_surface.c [deleted file]
src/gallium/drivers/ilo/ilo_resource.c [deleted file]
src/gallium/drivers/ilo/ilo_resource.h [deleted file]
src/gallium/drivers/ilo/ilo_screen.c [deleted file]
src/gallium/drivers/ilo/ilo_screen.h [deleted file]
src/gallium/drivers/ilo/ilo_shader.c [deleted file]
src/gallium/drivers/ilo/ilo_shader.h [deleted file]
src/gallium/drivers/ilo/ilo_state.c [deleted file]
src/gallium/drivers/ilo/ilo_state.h [deleted file]
src/gallium/drivers/ilo/ilo_transfer.c [deleted file]
src/gallium/drivers/ilo/ilo_transfer.h [deleted file]
src/gallium/drivers/ilo/ilo_video.c [deleted file]
src/gallium/drivers/ilo/ilo_video.h [deleted file]
src/gallium/drivers/ilo/shader/ilo_shader_cs.c [deleted file]
src/gallium/drivers/ilo/shader/ilo_shader_fs.c [deleted file]
src/gallium/drivers/ilo/shader/ilo_shader_gs.c [deleted file]
src/gallium/drivers/ilo/shader/ilo_shader_internal.h [deleted file]
src/gallium/drivers/ilo/shader/ilo_shader_vs.c [deleted file]
src/gallium/drivers/ilo/shader/toy_compiler.c [deleted file]
src/gallium/drivers/ilo/shader/toy_compiler.h [deleted file]
src/gallium/drivers/ilo/shader/toy_compiler_asm.c [deleted file]
src/gallium/drivers/ilo/shader/toy_compiler_disasm.c [deleted file]
src/gallium/drivers/ilo/shader/toy_compiler_reg.h [deleted file]
src/gallium/drivers/ilo/shader/toy_helpers.h [deleted file]
src/gallium/drivers/ilo/shader/toy_legalize.c [deleted file]
src/gallium/drivers/ilo/shader/toy_legalize.h [deleted file]
src/gallium/drivers/ilo/shader/toy_legalize_ra.c [deleted file]
src/gallium/drivers/ilo/shader/toy_optimize.c [deleted file]
src/gallium/drivers/ilo/shader/toy_optimize.h [deleted file]
src/gallium/drivers/ilo/shader/toy_tgsi.c [deleted file]
src/gallium/drivers/ilo/shader/toy_tgsi.h [deleted file]

diff --git a/src/gallium/drivers/ilo/Android.mk b/src/gallium/drivers/ilo/Android.mk
deleted file mode 100644 (file)
index 4204134..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Mesa 3-D graphics library
-#
-# Copyright (C) 2013 LunarG Inc.
-#
-# 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 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.
-
-LOCAL_PATH := $(call my-dir)
-
-# get C_SOURCES
-include $(LOCAL_PATH)/Makefile.sources
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(C_SOURCES)
-
-LOCAL_MODULE := libmesa_pipe_ilo
-
-include $(GALLIUM_COMMON_MK)
-include $(BUILD_STATIC_LIBRARY)
diff --git a/src/gallium/drivers/ilo/Automake.inc b/src/gallium/drivers/ilo/Automake.inc
deleted file mode 100644 (file)
index 5124671..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-if HAVE_GALLIUM_ILO
-
-TARGET_DRIVERS += ilo
-TARGET_CPPFLAGS += -DGALLIUM_ILO
-TARGET_LIB_DEPS += \
-       $(top_builddir)/src/gallium/winsys/intel/drm/libintelwinsys.la \
-       $(top_builddir)/src/gallium/drivers/ilo/libilo.la \
-       $(INTEL_LIBS) \
-       $(LIBDRM_LIBS)
-
-endif
diff --git a/src/gallium/drivers/ilo/Makefile.am b/src/gallium/drivers/ilo/Makefile.am
deleted file mode 100644 (file)
index 1f14153..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright Â© 2012 Intel Corporation
-# Copyright (C) 2013 LunarG, Inc.
-#
-# 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.
-
-include Makefile.sources
-include $(top_srcdir)/src/gallium/Automake.inc
-
-AM_CPPFLAGS = \
-       $(GALLIUM_DRIVER_CFLAGS)
-
-noinst_HEADERS = $(GENHW_FILES)
-noinst_LTLIBRARIES = libilo.la
-
-libilo_la_SOURCES = $(C_SOURCES)
diff --git a/src/gallium/drivers/ilo/Makefile.sources b/src/gallium/drivers/ilo/Makefile.sources
deleted file mode 100644 (file)
index 7a7db93..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-C_SOURCES := \
-       core/ilo_builder.c \
-       core/ilo_builder.h \
-       core/ilo_builder_3d.h \
-       core/ilo_builder_3d_bottom.h \
-       core/ilo_builder_3d_top.h \
-       core/ilo_builder_blt.h \
-       core/ilo_builder_decode.c \
-       core/ilo_builder_media.h \
-       core/ilo_builder_mi.h \
-       core/ilo_builder_render.h \
-       core/ilo_core.h \
-       core/ilo_debug.c \
-       core/ilo_debug.h \
-       core/ilo_dev.c \
-       core/ilo_dev.h \
-       core/ilo_image.c \
-       core/ilo_image.h \
-       core/ilo_state_cc.c \
-       core/ilo_state_cc.h \
-       core/ilo_state_compute.c \
-       core/ilo_state_compute.h \
-       core/ilo_state_raster.c \
-       core/ilo_state_raster.h \
-       core/ilo_state_sampler.c \
-       core/ilo_state_sampler.h \
-       core/ilo_state_sbe.c \
-       core/ilo_state_sbe.h \
-       core/ilo_state_shader.c \
-       core/ilo_state_shader_ps.c \
-       core/ilo_state_shader.h \
-       core/ilo_state_sol.c \
-       core/ilo_state_sol.h \
-       core/ilo_state_surface.c \
-       core/ilo_state_surface_format.c \
-       core/ilo_state_surface.h \
-       core/ilo_state_urb.c \
-       core/ilo_state_urb.h \
-       core/ilo_state_vf.c \
-       core/ilo_state_vf.h \
-       core/ilo_state_viewport.c \
-       core/ilo_state_viewport.h \
-       core/ilo_state_zs.c \
-       core/ilo_state_zs.h \
-       core/ilo_vma.h \
-       core/intel_winsys.h \
-       ilo_blit.c \
-       ilo_blit.h \
-       ilo_blitter.c \
-       ilo_blitter.h \
-       ilo_blitter_blt.c \
-       ilo_blitter_pipe.c \
-       ilo_blitter_rectlist.c \
-       ilo_common.h \
-       ilo_context.c \
-       ilo_context.h \
-       ilo_cp.c \
-       ilo_cp.h \
-       ilo_draw.c \
-       ilo_draw.h \
-       ilo_format.c \
-       ilo_format.h \
-       ilo_gpgpu.c \
-       ilo_gpgpu.h \
-       ilo_public.h \
-       ilo_query.c \
-       ilo_query.h \
-       ilo_render.c \
-       ilo_render.h \
-       ilo_render_gen.h \
-       ilo_render_dynamic.c \
-       ilo_render_gen6.c \
-       ilo_render_gen7.c \
-       ilo_render_gen8.c \
-       ilo_render_media.c \
-       ilo_render_surface.c \
-       ilo_resource.c \
-       ilo_resource.h \
-       ilo_screen.c \
-       ilo_screen.h \
-       ilo_shader.c \
-       ilo_shader.h \
-       ilo_state.c \
-       ilo_state.h \
-       ilo_transfer.c \
-       ilo_transfer.h \
-       ilo_video.c \
-       ilo_video.h \
-       \
-       shader/ilo_shader_cs.c \
-       shader/ilo_shader_fs.c \
-       shader/ilo_shader_gs.c \
-       shader/ilo_shader_internal.h \
-       shader/ilo_shader_vs.c \
-       shader/toy_compiler.c \
-       shader/toy_compiler.h \
-       shader/toy_compiler_asm.c \
-       shader/toy_compiler_disasm.c \
-       shader/toy_compiler_reg.h \
-       shader/toy_helpers.h \
-       shader/toy_legalize.c \
-       shader/toy_legalize.h \
-       shader/toy_legalize_ra.c \
-       shader/toy_optimize.c \
-       shader/toy_optimize.h \
-       shader/toy_tgsi.c \
-       shader/toy_tgsi.h
-
-GENHW_FILES := \
-       genhw/gen_blitter.xml.h \
-       genhw/gen_eu_isa.xml.h \
-       genhw/gen_eu_message.xml.h \
-       genhw/genhw.h \
-       genhw/gen_mi.xml.h \
-       genhw/gen_regs.xml.h \
-       genhw/gen_render.xml.h \
-       genhw/gen_render_3d.xml.h \
-       genhw/gen_render_dynamic.xml.h \
-       genhw/gen_render_media.xml.h \
-       genhw/gen_render_surface.xml.h
diff --git a/src/gallium/drivers/ilo/core/ilo_builder.c b/src/gallium/drivers/ilo/core/ilo_builder.c
deleted file mode 100644 (file)
index 079872f..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_memory.h"
-
-#include "ilo_builder.h"
-#include "ilo_builder_render.h" /* for ilo_builder_batch_patch_sba() */
-
-enum ilo_builder_writer_flags {
-   /*
-    * When this bit is set, ilo_builder_begin() will not realllocate.  New
-    * data will be appended instead.
-    */
-   WRITER_FLAG_APPEND    = 1 << 0,
-
-   /*
-    * When this bit is set, the writer grows when full.  When not, callers
-    * must make sure the writer never needs to grow.
-    */
-   WRITER_FLAG_GROW      = 1 << 1,
-
-   /*
-    * The writer will be mapped directly.
-    */
-   WRITER_FLAG_MAP       = 1 << 2,
-};
-
-/**
- * Set the initial size and flags of a writer.
- */
-static void
-ilo_builder_writer_init(struct ilo_builder *builder,
-                        enum ilo_builder_writer_type which)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   switch (which) {
-   case ILO_BUILDER_WRITER_BATCH:
-      writer->size = sizeof(uint32_t) * 8192;
-      break;
-   case ILO_BUILDER_WRITER_INSTRUCTION:
-      /*
-       * The EUs pretch some instructions.  But since the kernel invalidates
-       * the instruction cache between batch buffers, we can set
-       * WRITER_FLAG_APPEND without worrying the EUs would see invalid
-       * instructions prefetched.
-       */
-      writer->flags = WRITER_FLAG_APPEND | WRITER_FLAG_GROW;
-      writer->size = 8192;
-      break;
-   default:
-      assert(!"unknown builder writer");
-      return;
-      break;
-   }
-
-   if (builder->dev->has_llc)
-      writer->flags |= WRITER_FLAG_MAP;
-}
-
-/**
- * Free all resources used by a writer.  Note that the initial size is not
- * reset.
- */
-static void
-ilo_builder_writer_reset(struct ilo_builder *builder,
-                         enum ilo_builder_writer_type which)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   if (writer->ptr) {
-      if (writer->flags & WRITER_FLAG_MAP)
-         intel_bo_unmap(writer->bo);
-      else
-         FREE(writer->ptr);
-
-      writer->ptr = NULL;
-   }
-
-   intel_bo_unref(writer->bo);
-   writer->bo = NULL;
-
-   writer->used = 0;
-   writer->stolen = 0;
-
-   if (writer->items) {
-      FREE(writer->items);
-      writer->item_alloc = 0;
-      writer->item_used = 0;
-   }
-}
-
-/**
- * Discard everything written so far.
- */
-void
-ilo_builder_writer_discard(struct ilo_builder *builder,
-                           enum ilo_builder_writer_type which)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   intel_bo_truncate_relocs(writer->bo, 0);
-   writer->used = 0;
-   writer->stolen = 0;
-   writer->item_used = 0;
-}
-
-static struct intel_bo *
-alloc_writer_bo(struct intel_winsys *winsys,
-                enum ilo_builder_writer_type which,
-                unsigned size)
-{
-   static const char *writer_names[ILO_BUILDER_WRITER_COUNT] = {
-      [ILO_BUILDER_WRITER_BATCH] = "batch",
-      [ILO_BUILDER_WRITER_INSTRUCTION] = "instruction",
-   };
-
-   return intel_winsys_alloc_bo(winsys, writer_names[which], size, true);
-}
-
-static void *
-map_writer_bo(struct intel_bo *bo, unsigned flags)
-{
-   assert(flags & WRITER_FLAG_MAP);
-
-   if (flags & WRITER_FLAG_APPEND)
-      return intel_bo_map_gtt_async(bo);
-   else
-      return intel_bo_map(bo, true);
-}
-
-/**
- * Allocate and map the buffer for writing.
- */
-static bool
-ilo_builder_writer_alloc_and_map(struct ilo_builder *builder,
-                                 enum ilo_builder_writer_type which)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   /* allocate a new bo when not appending */
-   if (!(writer->flags & WRITER_FLAG_APPEND) || !writer->bo) {
-      struct intel_bo *bo;
-
-      bo = alloc_writer_bo(builder->winsys, which, writer->size);
-      if (bo) {
-         intel_bo_unref(writer->bo);
-         writer->bo = bo;
-      } else if (writer->bo) {
-         /* reuse the old bo */
-         ilo_builder_writer_discard(builder, which);
-      } else {
-         return false;
-      }
-
-      writer->used = 0;
-      writer->stolen = 0;
-      writer->item_used = 0;
-   }
-
-   /* map the bo or allocate the staging system memory */
-   if (writer->flags & WRITER_FLAG_MAP)
-      writer->ptr = map_writer_bo(writer->bo, writer->flags);
-   else if (!writer->ptr)
-      writer->ptr = MALLOC(writer->size);
-
-   return (writer->ptr != NULL);
-}
-
-/**
- * Unmap the buffer for submission.
- */
-static bool
-ilo_builder_writer_unmap(struct ilo_builder *builder,
-                         enum ilo_builder_writer_type which)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-   unsigned offset;
-   int err = 0;
-
-   if (writer->flags & WRITER_FLAG_MAP) {
-      intel_bo_unmap(writer->bo);
-      writer->ptr = NULL;
-      return true;
-   }
-
-   offset = builder->begin_used[which];
-   if (writer->used > offset) {
-      err = intel_bo_pwrite(writer->bo, offset, writer->used - offset,
-            (char *) writer->ptr + offset);
-   }
-
-   if (writer->stolen && !err) {
-      const unsigned offset = writer->size - writer->stolen;
-      err = intel_bo_pwrite(writer->bo, offset, writer->stolen,
-            (const char *) writer->ptr + offset);
-   }
-
-   /* keep writer->ptr */
-
-   return !err;
-}
-
-/**
- * Grow a mapped writer to at least \p new_size.
- */
-bool
-ilo_builder_writer_grow(struct ilo_builder *builder,
-                        enum ilo_builder_writer_type which,
-                        unsigned new_size, bool preserve)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-   struct intel_bo *new_bo;
-   void *new_ptr;
-
-   if (!(writer->flags & WRITER_FLAG_GROW))
-      return false;
-
-   /* stolen data may already be referenced and cannot be moved */
-   if (writer->stolen)
-      return false;
-
-   if (new_size < writer->size << 1)
-      new_size = writer->size << 1;
-   /* STATE_BASE_ADDRESS requires page-aligned buffers */
-   new_size = align(new_size, 4096);
-
-   new_bo = alloc_writer_bo(builder->winsys, which, new_size);
-   if (!new_bo)
-      return false;
-
-   /* map and copy the data over */
-   if (writer->flags & WRITER_FLAG_MAP) {
-      new_ptr = map_writer_bo(new_bo, writer->flags);
-
-      /*
-       * When WRITER_FLAG_APPEND and WRITER_FLAG_GROW are both set, we may end
-       * up copying between two GTT-mapped BOs.  That is slow.  The issue
-       * could be solved by adding intel_bo_map_async(), or callers may choose
-       * to manually grow the writer without preserving the data.
-       */
-      if (new_ptr && preserve)
-         memcpy(new_ptr, writer->ptr, writer->used);
-   } else if (preserve) {
-      new_ptr = REALLOC(writer->ptr, writer->size, new_size);
-   } else {
-      new_ptr = MALLOC(new_size);
-   }
-
-   if (!new_ptr) {
-      intel_bo_unref(new_bo);
-      return false;
-   }
-
-   if (writer->flags & WRITER_FLAG_MAP)
-      intel_bo_unmap(writer->bo);
-   else if (!preserve)
-      FREE(writer->ptr);
-
-   intel_bo_unref(writer->bo);
-
-   writer->size = new_size;
-   writer->bo = new_bo;
-   writer->ptr = new_ptr;
-
-   return true;
-}
-
-/**
- * Record an item for later decoding.
- */
-bool
-ilo_builder_writer_record(struct ilo_builder *builder,
-                          enum ilo_builder_writer_type which,
-                          enum ilo_builder_item_type type,
-                          unsigned offset, unsigned size)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-   struct ilo_builder_item *item;
-
-   if (writer->item_used == writer->item_alloc) {
-      const unsigned new_alloc = (writer->item_alloc) ?
-         writer->item_alloc << 1 : 256;
-      struct ilo_builder_item *items;
-
-      items = REALLOC(writer->items,
-            sizeof(writer->items[0]) * writer->item_alloc,
-            sizeof(writer->items[0]) * new_alloc);
-      if (!items)
-         return false;
-
-      writer->items = items;
-      writer->item_alloc = new_alloc;
-   }
-
-   item = &writer->items[writer->item_used++];
-   item->type = type;
-   item->offset = offset;
-   item->size = size;
-
-   return true;
-}
-
-/**
- * Initialize the builder.
- */
-void
-ilo_builder_init(struct ilo_builder *builder,
-                 const struct ilo_dev *dev,
-                 struct intel_winsys *winsys)
-{
-   unsigned i;
-
-   assert(ilo_is_zeroed(builder, sizeof(*builder)));
-
-   builder->dev = dev;
-   builder->winsys = winsys;
-
-   /* gen6_SURFACE_STATE() may override this */
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-      builder->mocs = GEN8_MOCS_MT_WB | GEN8_MOCS_CT_L3;
-      break;
-   case ILO_GEN(7.5):
-   case ILO_GEN(7):
-      builder->mocs = GEN7_MOCS_L3_WB;
-      break;
-   default:
-      builder->mocs = 0;
-      break;
-   }
-
-   for (i = 0; i < ILO_BUILDER_WRITER_COUNT; i++)
-      ilo_builder_writer_init(builder, i);
-}
-
-/**
- * Reset the builder and free all resources used.  After resetting, the
- * builder behaves as if it is newly initialized, except for potentially
- * larger initial bo sizes.
- */
-void
-ilo_builder_reset(struct ilo_builder *builder)
-{
-   unsigned i;
-
-   for (i = 0; i < ILO_BUILDER_WRITER_COUNT; i++)
-      ilo_builder_writer_reset(builder, i);
-}
-
-/**
- * Allocate and map the BOs.  It may re-allocate or reuse existing BOs if
- * there is any.
- *
- * Most builder functions can only be called after ilo_builder_begin() and
- * before ilo_builder_end().
- */
-bool
-ilo_builder_begin(struct ilo_builder *builder)
-{
-   unsigned i;
-
-   for (i = 0; i < ILO_BUILDER_WRITER_COUNT; i++) {
-      if (!ilo_builder_writer_alloc_and_map(builder, i)) {
-         ilo_builder_reset(builder);
-         return false;
-      }
-
-      builder->begin_used[i] = builder->writers[i].used;
-   }
-
-   builder->unrecoverable_error = false;
-   builder->sba_instruction_pos = 0;
-
-   return true;
-}
-
-/**
- * Unmap BOs and make sure the written data landed the BOs.  The batch buffer
- * ready for submission is returned.
- */
-struct intel_bo *
-ilo_builder_end(struct ilo_builder *builder, unsigned *used)
-{
-   struct ilo_builder_writer *bat;
-   unsigned i;
-
-   ilo_builder_batch_patch_sba(builder);
-
-   assert(ilo_builder_validate(builder, 0, NULL));
-
-   for (i = 0; i < ILO_BUILDER_WRITER_COUNT; i++) {
-      if (!ilo_builder_writer_unmap(builder, i))
-         builder->unrecoverable_error = true;
-   }
-
-   if (builder->unrecoverable_error)
-      return NULL;
-
-   bat = &builder->writers[ILO_BUILDER_WRITER_BATCH];
-
-   *used = bat->used;
-
-   return bat->bo;
-}
-
-/**
- * Return true if the builder is in a valid state, after accounting for the
- * additional BOs specified.  The additional BOs can be listed to avoid
- * snapshotting and restoring when they are known ahead of time.
- *
- * The number of additional BOs should not be more than a few.  Like two, for
- * copying between two BOs.
- *
- * Callers must make sure the builder is in a valid state when
- * ilo_builder_end() is called.
- */
-bool
-ilo_builder_validate(struct ilo_builder *builder,
-                     unsigned bo_count, struct intel_bo **bos)
-{
-   const unsigned max_bo_count = 2;
-   struct intel_bo *bos_to_submit[ILO_BUILDER_WRITER_COUNT + max_bo_count];
-   int i;
-
-   for (i = 0; i < ILO_BUILDER_WRITER_COUNT; i++)
-      bos_to_submit[i] = builder->writers[i].bo;
-
-   if (bo_count) {
-      assert(bo_count <= max_bo_count);
-      if (bo_count > max_bo_count)
-         return false;
-
-      memcpy(&bos_to_submit[ILO_BUILDER_WRITER_COUNT],
-            bos, sizeof(*bos) * bo_count);
-      i += bo_count;
-   }
-
-   return intel_winsys_can_submit_bo(builder->winsys, bos_to_submit, i);
-}
-
-/**
- * Take a snapshot of the writer state.
- */
-void
-ilo_builder_batch_snapshot(const struct ilo_builder *builder,
-                           struct ilo_builder_snapshot *snapshot)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-   const struct ilo_builder_writer *writer = &builder->writers[which];
-
-   snapshot->reloc_count = intel_bo_get_reloc_count(writer->bo);
-   snapshot->used = writer->used;
-   snapshot->stolen = writer->stolen;
-   snapshot->item_used = writer->item_used;
-}
-
-/**
- * Restore the writer state to when the snapshot was taken, except that it
- * does not (unnecessarily) shrink BOs or the item array.
- */
-void
-ilo_builder_batch_restore(struct ilo_builder *builder,
-                          const struct ilo_builder_snapshot *snapshot)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   intel_bo_truncate_relocs(writer->bo, snapshot->reloc_count);
-   writer->used = snapshot->used;
-   writer->stolen = snapshot->stolen;
-   writer->item_used = snapshot->item_used;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_builder.h b/src/gallium/drivers/ilo/core/ilo_builder.h
deleted file mode 100644 (file)
index 6e26f22..0000000
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BUILDER_H
-#define ILO_BUILDER_H
-
-#include "intel_winsys.h"
-
-#include "ilo_core.h"
-#include "ilo_debug.h"
-#include "ilo_dev.h"
-
-enum ilo_builder_writer_type {
-   ILO_BUILDER_WRITER_BATCH,
-   ILO_BUILDER_WRITER_INSTRUCTION,
-
-   ILO_BUILDER_WRITER_COUNT,
-};
-
-enum ilo_builder_item_type {
-   /* for dynamic buffer */
-   ILO_BUILDER_ITEM_BLOB,
-   ILO_BUILDER_ITEM_CLIP_VIEWPORT,
-   ILO_BUILDER_ITEM_SF_VIEWPORT,
-   ILO_BUILDER_ITEM_SCISSOR_RECT,
-   ILO_BUILDER_ITEM_CC_VIEWPORT,
-   ILO_BUILDER_ITEM_COLOR_CALC,
-   ILO_BUILDER_ITEM_DEPTH_STENCIL,
-   ILO_BUILDER_ITEM_BLEND,
-   ILO_BUILDER_ITEM_SAMPLER,
-   ILO_BUILDER_ITEM_INTERFACE_DESCRIPTOR,
-
-   /* for surface buffer */
-   ILO_BUILDER_ITEM_SURFACE,
-   ILO_BUILDER_ITEM_BINDING_TABLE,
-
-   /* for instruction buffer */
-   ILO_BUILDER_ITEM_KERNEL,
-
-   ILO_BUILDER_ITEM_COUNT,
-};
-
-struct ilo_builder_item {
-   enum ilo_builder_item_type type;
-   unsigned offset;
-   unsigned size;
-};
-
-struct ilo_builder_writer {
-   /* internal flags */
-   unsigned flags;
-
-   unsigned size;
-   struct intel_bo *bo;
-   void *ptr;
-
-   /* data written to the bottom */
-   unsigned used;
-   /* data written to the top */
-   unsigned stolen;
-
-   /* for decoding */
-   struct ilo_builder_item *items;
-   unsigned item_alloc;
-   unsigned item_used;
-};
-
-/**
- * A snapshot of the writer state.
- */
-struct ilo_builder_snapshot {
-   unsigned reloc_count;
-
-   unsigned used;
-   unsigned stolen;
-   unsigned item_used;
-};
-
-struct ilo_builder {
-   const struct ilo_dev *dev;
-   struct intel_winsys *winsys;
-   uint32_t mocs;
-
-   struct ilo_builder_writer writers[ILO_BUILDER_WRITER_COUNT];
-   bool unrecoverable_error;
-
-   /* for writers that have their data appended */
-   unsigned begin_used[ILO_BUILDER_WRITER_COUNT];
-
-   /* for STATE_BASE_ADDRESS */
-   unsigned sba_instruction_pos;
-};
-
-void
-ilo_builder_init(struct ilo_builder *builder,
-                 const struct ilo_dev *dev,
-                 struct intel_winsys *winsys);
-
-void
-ilo_builder_reset(struct ilo_builder *builder);
-
-void
-ilo_builder_decode(struct ilo_builder *builder);
-
-bool
-ilo_builder_begin(struct ilo_builder *builder);
-
-struct intel_bo *
-ilo_builder_end(struct ilo_builder *builder, unsigned *used);
-
-bool
-ilo_builder_validate(struct ilo_builder *builder,
-                     unsigned bo_count, struct intel_bo **bos);
-
-/**
- * Return true if the builder has a relocation entry for \p bo.
- */
-static inline bool
-ilo_builder_has_reloc(const struct ilo_builder *builder,
-                      struct intel_bo *bo)
-{
-   int i;
-
-   for (i = 0; i < ILO_BUILDER_WRITER_COUNT; i++) {
-      const struct ilo_builder_writer *writer = &builder->writers[i];
-      if (intel_bo_has_reloc(writer->bo, bo))
-         return true;
-   }
-
-   return false;
-}
-
-void
-ilo_builder_writer_discard(struct ilo_builder *builder,
-                           enum ilo_builder_writer_type which);
-
-bool
-ilo_builder_writer_grow(struct ilo_builder *builder,
-                        enum ilo_builder_writer_type which,
-                        unsigned new_size, bool preserve);
-
-bool
-ilo_builder_writer_record(struct ilo_builder *builder,
-                          enum ilo_builder_writer_type which,
-                          enum ilo_builder_item_type type,
-                          unsigned offset, unsigned size);
-
-static inline void
-ilo_builder_writer_checked_record(struct ilo_builder *builder,
-                                  enum ilo_builder_writer_type which,
-                                  enum ilo_builder_item_type item,
-                                  unsigned offset, unsigned size)
-{
-   if (unlikely(ilo_debug & (ILO_DEBUG_BATCH | ILO_DEBUG_HANG))) {
-      if (!ilo_builder_writer_record(builder, which, item, offset, size)) {
-         builder->unrecoverable_error = true;
-         builder->writers[which].item_used = 0;
-      }
-   }
-}
-
-/**
- * Return an offset to a region that is aligned to \p alignment and has at
- * least \p size bytes.  The region is reserved from the bottom.
- */
-static inline unsigned
-ilo_builder_writer_reserve_bottom(struct ilo_builder *builder,
-                                  enum ilo_builder_writer_type which,
-                                  unsigned alignment, unsigned size)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-   unsigned offset;
-
-   assert(alignment && util_is_power_of_two(alignment));
-   offset = align(writer->used, alignment);
-
-   if (unlikely(offset + size > writer->size - writer->stolen)) {
-      if (!ilo_builder_writer_grow(builder, which,
-            offset + size + writer->stolen, true)) {
-         builder->unrecoverable_error = true;
-         ilo_builder_writer_discard(builder, which);
-         offset = 0;
-      }
-
-      assert(offset + size <= writer->size - writer->stolen);
-   }
-
-   return offset;
-}
-
-/**
- * Similar to ilo_builder_writer_reserve_bottom(), but reserve from the top.
- */
-static inline unsigned
-ilo_builder_writer_reserve_top(struct ilo_builder *builder,
-                               enum ilo_builder_writer_type which,
-                               unsigned alignment, unsigned size)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-   unsigned offset;
-
-   assert(alignment && util_is_power_of_two(alignment));
-   offset = (writer->size - writer->stolen - size) & ~(alignment - 1);
-
-   if (unlikely(offset < writer->used ||
-            size > writer->size - writer->stolen)) {
-      if (!ilo_builder_writer_grow(builder, which,
-            align(writer->used, alignment) + size + writer->stolen, true)) {
-         builder->unrecoverable_error = true;
-         ilo_builder_writer_discard(builder, which);
-      }
-
-      offset = (writer->size - writer->stolen - size) & ~(alignment - 1);
-      assert(offset + size <= writer->size - writer->stolen);
-   }
-
-   return offset;
-}
-
-/**
- * Add a relocation entry to the writer.
- */
-static inline void
-ilo_builder_writer_reloc(struct ilo_builder *builder,
-                         enum ilo_builder_writer_type which,
-                         unsigned offset, struct intel_bo *bo,
-                         unsigned bo_offset, unsigned reloc_flags,
-                         bool write_presumed_offset_hi)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-   uint64_t presumed_offset;
-   int err;
-
-   if (write_presumed_offset_hi)
-      ILO_DEV_ASSERT(builder->dev, 8, 8);
-   else
-      ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   assert(offset + sizeof(uint32_t) <= writer->used ||
-          (offset >= writer->size - writer->stolen &&
-           offset + sizeof(uint32_t) <= writer->size));
-
-   err = intel_bo_add_reloc(writer->bo, offset, bo, bo_offset,
-         reloc_flags, &presumed_offset);
-   if (unlikely(err))
-      builder->unrecoverable_error = true;
-
-   if (write_presumed_offset_hi) {
-      *((uint64_t *) ((char *) writer->ptr + offset)) = presumed_offset;
-   } else {
-      /* 32-bit addressing */
-      assert(presumed_offset == (uint64_t) ((uint32_t) presumed_offset));
-      *((uint32_t *) ((char *) writer->ptr + offset)) = presumed_offset;
-   }
-}
-
-/**
- * Reserve a region from the dynamic buffer.  Both the offset, in bytes, and
- * the pointer to the reserved region are returned.  The pointer is only valid
- * until the next reserve call.
- *
- * Note that \p alignment is in bytes and \p len is in DWords.
- */
-static inline uint32_t
-ilo_builder_dynamic_pointer(struct ilo_builder *builder,
-                            enum ilo_builder_item_type item,
-                            unsigned alignment, unsigned len,
-                            uint32_t **dw)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-   const unsigned size = len << 2;
-   const unsigned offset = ilo_builder_writer_reserve_top(builder,
-         which, alignment, size);
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   /* all states are at least aligned to 32-bytes */
-   if (item != ILO_BUILDER_ITEM_BLOB)
-      assert(alignment % 32 == 0);
-
-   *dw = (uint32_t *) ((char *) writer->ptr + offset);
-
-   writer->stolen = writer->size - offset;
-
-   ilo_builder_writer_checked_record(builder, which, item, offset, size);
-
-   return offset;
-}
-
-/**
- * Write a dynamic state to the dynamic buffer.
- */
-static inline uint32_t
-ilo_builder_dynamic_write(struct ilo_builder *builder,
-                          enum ilo_builder_item_type item,
-                          unsigned alignment, unsigned len,
-                          const uint32_t *dw)
-{
-   uint32_t offset, *dst;
-
-   offset = ilo_builder_dynamic_pointer(builder, item, alignment, len, &dst);
-   memcpy(dst, dw, len << 2);
-
-   return offset;
-}
-
-/**
- * Reserve some space from the top (for prefetches).
- */
-static inline void
-ilo_builder_dynamic_pad_top(struct ilo_builder *builder, unsigned len)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-   const unsigned size = len << 2;
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   if (writer->stolen < size) {
-      ilo_builder_writer_reserve_top(builder, which,
-            1, size - writer->stolen);
-      writer->stolen = size;
-   }
-}
-
-static inline unsigned
-ilo_builder_dynamic_used(const struct ilo_builder *builder)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-   const struct ilo_builder_writer *writer = &builder->writers[which];
-
-   return writer->stolen >> 2;
-}
-
-/**
- * Reserve a region from the surface buffer.  Both the offset, in bytes, and
- * the pointer to the reserved region are returned.  The pointer is only valid
- * until the next reserve call.
- *
- * Note that \p alignment is in bytes and \p len is in DWords.
- */
-static inline uint32_t
-ilo_builder_surface_pointer(struct ilo_builder *builder,
-                            enum ilo_builder_item_type item,
-                            unsigned alignment, unsigned len,
-                            uint32_t **dw)
-{
-   assert(item == ILO_BUILDER_ITEM_SURFACE ||
-          item == ILO_BUILDER_ITEM_BINDING_TABLE);
-
-   return ilo_builder_dynamic_pointer(builder, item, alignment, len, dw);
-}
-
-/**
- * Add a relocation entry for a DWord of a surface state.
- */
-static inline void
-ilo_builder_surface_reloc(struct ilo_builder *builder,
-                          uint32_t offset, unsigned dw_index,
-                          struct intel_bo *bo, unsigned bo_offset,
-                          unsigned reloc_flags)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-
-   ilo_builder_writer_reloc(builder, which, offset + (dw_index << 2),
-         bo, bo_offset, reloc_flags, false);
-}
-
-static inline void
-ilo_builder_surface_reloc64(struct ilo_builder *builder,
-                            uint32_t offset, unsigned dw_index,
-                            struct intel_bo *bo, unsigned bo_offset,
-                            unsigned reloc_flags)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-
-   ilo_builder_writer_reloc(builder, which, offset + (dw_index << 2),
-         bo, bo_offset, reloc_flags, true);
-}
-
-static inline unsigned
-ilo_builder_surface_used(const struct ilo_builder *builder)
-{
-   return ilo_builder_dynamic_used(builder);
-}
-
-/**
- * Write a kernel to the instruction buffer.  The offset, in bytes, of the
- * kernel is returned.
- */
-static inline uint32_t
-ilo_builder_instruction_write(struct ilo_builder *builder,
-                              unsigned size, const void *kernel)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_INSTRUCTION;
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 2, page 112:
-    *
-    *     "Due to prefetch of the instruction stream, the EUs may attempt to
-    *      access up to 8 instructions (128 bytes) beyond the end of the
-    *      kernel program - possibly into the next memory page.  Although
-    *      these instructions will not be executed, software must account for
-    *      the prefetch in order to avoid invalid page access faults."
-    */
-   const unsigned reserved_size = size + 128;
-   /* kernels are aligned to 64 bytes */
-   const unsigned alignment = 64;
-   const unsigned offset = ilo_builder_writer_reserve_bottom(builder,
-         which, alignment, reserved_size);
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   memcpy((char *) writer->ptr + offset, kernel, size);
-
-   writer->used = offset + size;
-
-   ilo_builder_writer_checked_record(builder, which,
-         ILO_BUILDER_ITEM_KERNEL, offset, size);
-
-   return offset;
-}
-
-/**
- * Reserve a region from the batch buffer.  Both the offset, in DWords, and
- * the pointer to the reserved region are returned.  The pointer is only valid
- * until the next reserve call.
- *
- * Note that \p len is in DWords.
- */
-static inline unsigned
-ilo_builder_batch_pointer(struct ilo_builder *builder,
-                          unsigned len, uint32_t **dw)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-   /*
-    * We know the batch bo is always aligned.  Using 1 here should allow the
-    * compiler to optimize away aligning.
-    */
-   const unsigned alignment = 1;
-   const unsigned size = len << 2;
-   const unsigned offset = ilo_builder_writer_reserve_bottom(builder,
-         which, alignment, size);
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   assert(offset % 4 == 0);
-   *dw = (uint32_t *) ((char *) writer->ptr + offset);
-
-   writer->used = offset + size;
-
-   return offset >> 2;
-}
-
-/**
- * Write a command to the batch buffer.
- */
-static inline unsigned
-ilo_builder_batch_write(struct ilo_builder *builder,
-                        unsigned len, const uint32_t *dw)
-{
-   unsigned pos;
-   uint32_t *dst;
-
-   pos = ilo_builder_batch_pointer(builder, len, &dst);
-   memcpy(dst, dw, len << 2);
-
-   return pos;
-}
-
-/**
- * Add a relocation entry for a DWord of a command.
- */
-static inline void
-ilo_builder_batch_reloc(struct ilo_builder *builder, unsigned pos,
-                        struct intel_bo *bo, unsigned bo_offset,
-                        unsigned reloc_flags)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-
-   ilo_builder_writer_reloc(builder, which, pos << 2,
-         bo, bo_offset, reloc_flags, false);
-}
-
-static inline void
-ilo_builder_batch_reloc64(struct ilo_builder *builder, unsigned pos,
-                          struct intel_bo *bo, unsigned bo_offset,
-                          unsigned reloc_flags)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-
-   ilo_builder_writer_reloc(builder, which, pos << 2,
-         bo, bo_offset, reloc_flags, true);
-}
-
-static inline unsigned
-ilo_builder_batch_used(const struct ilo_builder *builder)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-   const struct ilo_builder_writer *writer = &builder->writers[which];
-
-   return writer->used >> 2;
-}
-
-static inline unsigned
-ilo_builder_batch_space(const struct ilo_builder *builder)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-   const struct ilo_builder_writer *writer = &builder->writers[which];
-
-   return (writer->size - writer->stolen - writer->used) >> 2;
-}
-
-static inline void
-ilo_builder_batch_discard(struct ilo_builder *builder)
-{
-   ilo_builder_writer_discard(builder, ILO_BUILDER_WRITER_BATCH);
-}
-
-static inline void
-ilo_builder_batch_print_stats(const struct ilo_builder *builder)
-{
-   const enum ilo_builder_writer_type which = ILO_BUILDER_WRITER_BATCH;
-   const struct ilo_builder_writer *writer = &builder->writers[which];
-
-   ilo_printf("%d+%d bytes (%d%% full)\n",
-         writer->used, writer->stolen,
-         (writer->used + writer->stolen) * 100 / writer->size);
-}
-
-void
-ilo_builder_batch_snapshot(const struct ilo_builder *builder,
-                           struct ilo_builder_snapshot *snapshot);
-
-void
-ilo_builder_batch_restore(struct ilo_builder *builder,
-                          const struct ilo_builder_snapshot *snapshot);
-
-#endif /* ILO_BUILDER_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_builder_3d.h b/src/gallium/drivers/ilo/core/ilo_builder_3d.h
deleted file mode 100644 (file)
index fb8b53c..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BUILDER_3D_H
-#define ILO_BUILDER_3D_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-#include "ilo_builder_3d_top.h"
-#include "ilo_builder_3d_bottom.h"
-
-struct gen6_3dprimitive_info {
-   enum gen_3dprim_type topology;
-   bool indexed;
-
-   uint32_t vertex_count;
-   uint32_t vertex_start;
-   uint32_t instance_count;
-   uint32_t instance_start;
-   int32_t vertex_base;
-};
-
-static inline void
-gen6_3DPRIMITIVE(struct ilo_builder *builder,
-                 const struct gen6_3dprimitive_info *info)
-{
-   const uint8_t cmd_len = 6;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DPRIMITIVE) | (cmd_len - 2) |
-           info->topology << GEN6_3DPRIM_DW0_TYPE__SHIFT;
-   if (info->indexed)
-      dw[0] |= GEN6_3DPRIM_DW0_ACCESS_RANDOM;
-
-   dw[1] = info->vertex_count;
-   dw[2] = info->vertex_start;
-   dw[3] = info->instance_count;
-   dw[4] = info->instance_start;
-   dw[5] = info->vertex_base;
-}
-
-static inline void
-gen7_3DPRIMITIVE(struct ilo_builder *builder,
-                 const struct gen6_3dprimitive_info *info)
-{
-   const uint8_t cmd_len = 7;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DPRIMITIVE) | (cmd_len - 2);
-
-   dw[1] = info->topology << GEN7_3DPRIM_DW1_TYPE__SHIFT;
-   if (info->indexed)
-      dw[1] |= GEN7_3DPRIM_DW1_ACCESS_RANDOM;
-
-   dw[2] = info->vertex_count;
-   dw[3] = info->vertex_start;
-   dw[4] = info->instance_count;
-   dw[5] = info->instance_start;
-   dw[6] = info->vertex_base;
-}
-
-#endif /* ILO_BUILDER_3D_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_builder_3d_bottom.h b/src/gallium/drivers/ilo/core/ilo_builder_3d_bottom.h
deleted file mode 100644 (file)
index 2e9470e..0000000
+++ /dev/null
@@ -1,1118 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BUILDER_3D_BOTTOM_H
-#define ILO_BUILDER_3D_BOTTOM_H
-
-#include "genhw/genhw.h"
-#include "intel_winsys.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-#include "ilo_state_cc.h"
-#include "ilo_state_raster.h"
-#include "ilo_state_sbe.h"
-#include "ilo_state_shader.h"
-#include "ilo_state_viewport.h"
-#include "ilo_state_zs.h"
-#include "ilo_vma.h"
-#include "ilo_builder.h"
-#include "ilo_builder_3d_top.h"
-
-static inline void
-gen6_3DSTATE_CLIP(struct ilo_builder *builder,
-                  const struct ilo_state_raster *rs)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_CLIP) | (cmd_len - 2);
-   /* see raster_set_gen6_3DSTATE_CLIP() */
-   dw[1] = rs->clip[0];
-   dw[2] = rs->clip[1];
-   dw[3] = rs->clip[2];
-}
-
-static inline void
-gen6_3DSTATE_SF(struct ilo_builder *builder,
-                const struct ilo_state_raster *rs,
-                const struct ilo_state_sbe *sbe)
-{
-   const uint8_t cmd_len = 20;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_SF) | (cmd_len - 2);
-   /* see sbe_set_gen8_3DSTATE_SBE() */
-   dw[1] = sbe->sbe[0];
-
-   /* see raster_set_gen7_3DSTATE_SF() */
-   dw[2] = rs->sf[0];
-   dw[3] = rs->sf[1];
-   dw[4] = rs->sf[2];
-   dw[5] = rs->raster[1];
-   dw[6] = rs->raster[2];
-   dw[7] = rs->raster[3];
-
-   /* see sbe_set_gen8_3DSTATE_SBE_SWIZ() */
-   memcpy(&dw[8], sbe->swiz, sizeof(*dw) * 8);
-
-   dw[16] = sbe->sbe[1];
-   dw[17] = sbe->sbe[2];
-   /* WrapShortest enables */
-   dw[18] = 0;
-   dw[19] = 0;
-}
-
-static inline void
-gen7_3DSTATE_SF(struct ilo_builder *builder,
-                const struct ilo_state_raster *rs)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 4 : 7;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_SF) | (cmd_len - 2);
-
-   /* see raster_set_gen7_3DSTATE_SF() or raster_set_gen8_3DSTATE_SF() */
-   dw[1] = rs->sf[0];
-   dw[2] = rs->sf[1];
-   dw[3] = rs->sf[2];
-   if (ilo_dev_gen(builder->dev) < ILO_GEN(8)) {
-      dw[4] = rs->raster[1];
-      dw[5] = rs->raster[2];
-      dw[6] = rs->raster[3];
-   }
-}
-
-static inline void
-gen7_3DSTATE_SBE(struct ilo_builder *builder,
-                 const struct ilo_state_sbe *sbe)
-{
-   const uint8_t cmd_len = 14;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_SBE) | (cmd_len - 2);
-   /* see sbe_set_gen8_3DSTATE_SBE() and sbe_set_gen8_3DSTATE_SBE_SWIZ() */
-   dw[1] = sbe->sbe[0];
-   memcpy(&dw[2], sbe->swiz, sizeof(*dw) * 8);
-   dw[10] = sbe->sbe[1];
-   dw[11] = sbe->sbe[2];
-
-   /* WrapShortest enables */
-   dw[12] = 0;
-   dw[13] = 0;
-}
-
-static inline void
-gen8_3DSTATE_SBE(struct ilo_builder *builder,
-                 const struct ilo_state_sbe *sbe)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   /* see sbe_set_gen8_3DSTATE_SBE() */
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_SBE) | (cmd_len - 2);
-   dw[1] = sbe->sbe[0];
-   dw[2] = sbe->sbe[1];
-   dw[3] = sbe->sbe[2];
-}
-
-static inline void
-gen8_3DSTATE_SBE_SWIZ(struct ilo_builder *builder,
-                      const struct ilo_state_sbe *sbe)
-{
-   const uint8_t cmd_len = 11;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_SBE_SWIZ) | (cmd_len - 2);
-   /* see sbe_set_gen8_3DSTATE_SBE_SWIZ() */
-   memcpy(&dw[1], sbe->swiz, sizeof(*dw) * 8);
-   /* WrapShortest enables */
-   dw[9] = 0;
-   dw[10] = 0;
-}
-
-static inline void
-gen8_3DSTATE_RASTER(struct ilo_builder *builder,
-                    const struct ilo_state_raster *rs)
-{
-   const uint8_t cmd_len = 5;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_RASTER) | (cmd_len - 2);
-   /* see raster_set_gen8_3DSTATE_RASTER() */
-   dw[1] = rs->raster[0];
-   dw[2] = rs->raster[1];
-   dw[3] = rs->raster[2];
-   dw[4] = rs->raster[3];
-}
-
-static inline void
-gen6_3DSTATE_WM(struct ilo_builder *builder,
-                const struct ilo_state_raster *rs,
-                const struct ilo_state_ps *ps,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 9;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_WM) | (cmd_len - 2);
-   dw[1] = kernel_offset;
-   /* see raster_set_gen6_3dstate_wm() and ps_set_gen6_3dstate_wm() */
-   dw[2] = ps->ps[0];
-   dw[3] = ps->ps[1];
-   dw[4] = rs->wm[0] | ps->ps[2];
-   dw[5] = rs->wm[1] | ps->ps[3];
-   dw[6] = rs->wm[2] | ps->ps[4];
-   dw[7] = 0; /* kernel 1 */
-   dw[8] = 0; /* kernel 2 */
-
-   if (ilo_state_ps_get_scratch_size(ps)) {
-      ilo_builder_batch_reloc(builder, pos + 2, scratch_bo,
-            ps->ps[0], 0);
-   }
-}
-
-static inline void
-gen7_3DSTATE_WM(struct ilo_builder *builder,
-                const struct ilo_state_raster *rs,
-                const struct ilo_state_ps *ps)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_WM) | (cmd_len - 2);
-   /* see raster_set_gen8_3DSTATE_WM() and ps_set_gen7_3dstate_wm() */
-   dw[1] = rs->wm[0] | ps->ps[0];
-   dw[2] = ps->ps[1];
-}
-
-static inline void
-gen8_3DSTATE_WM(struct ilo_builder *builder,
-                const struct ilo_state_raster *rs)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_WM) | (cmd_len - 2);
-   /* see raster_set_gen8_3DSTATE_WM() */
-   dw[1] = rs->wm[0];
-}
-
-static inline void
-gen8_3DSTATE_WM_DEPTH_STENCIL(struct ilo_builder *builder,
-                              const struct ilo_state_cc *cc)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_WM_DEPTH_STENCIL) | (cmd_len - 2);
-   /* see cc_set_gen8_3DSTATE_WM_DEPTH_STENCIL() */
-   dw[1] = cc->ds[0];
-   dw[2] = cc->ds[1];
-}
-
-static inline void
-gen8_3DSTATE_WM_HZ_OP(struct ilo_builder *builder,
-                      const struct ilo_state_raster *rs,
-                      uint16_t width, uint16_t height)
-{
-   const uint8_t cmd_len = 5;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_WM_HZ_OP) | (cmd_len - 2);
-   /* see raster_set_gen8_3dstate_wm_hz_op() */
-   dw[1] = rs->wm[1];
-   dw[2] = 0;
-   /* exclusive */
-   dw[3] = height << 16 | width;
-   dw[4] = rs->wm[2];
-}
-
-static inline void
-gen8_disable_3DSTATE_WM_HZ_OP(struct ilo_builder *builder)
-{
-   const uint8_t cmd_len = 5;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_WM_HZ_OP) | (cmd_len - 2);
-   dw[1] = 0;
-   dw[2] = 0;
-   dw[3] = 0;
-   dw[4] = 0;
-}
-
-static inline void
-gen8_3DSTATE_WM_CHROMAKEY(struct ilo_builder *builder)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_WM_CHROMAKEY) | (cmd_len - 2);
-   dw[1] = 0;
-}
-
-static inline void
-gen7_3DSTATE_PS(struct ilo_builder *builder,
-                const struct ilo_state_ps *ps,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 8;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_PS) | (cmd_len - 2);
-   dw[1] = kernel_offset;
-   /* see ps_set_gen7_3DSTATE_PS() */
-   dw[2] = ps->ps[2];
-   dw[3] = ps->ps[3];
-   dw[4] = ps->ps[4];
-   dw[5] = ps->ps[5];
-   dw[6] = 0; /* kernel 1 */
-   dw[7] = 0; /* kernel 2 */
-
-   if (ilo_state_ps_get_scratch_size(ps)) {
-      ilo_builder_batch_reloc(builder, pos + 3, scratch_bo,
-            ps->ps[3], 0);
-   }
-}
-
-static inline void
-gen8_3DSTATE_PS(struct ilo_builder *builder,
-                const struct ilo_state_ps *ps,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 12;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_PS) | (cmd_len - 2);
-   dw[1] = kernel_offset;
-   dw[2] = 0;
-   /* see ps_set_gen8_3DSTATE_PS() */
-   dw[3] = ps->ps[0];
-   dw[4] = ps->ps[1];
-   dw[5] = 0;
-   dw[6] = ps->ps[2];
-   dw[7] = ps->ps[3];
-   dw[8] = 0; /* kernel 1 */
-   dw[9] = 0;
-   dw[10] = 0; /* kernel 2 */
-   dw[11] = 0;
-
-   if (ilo_state_ps_get_scratch_size(ps)) {
-      ilo_builder_batch_reloc64(builder, pos + 4, scratch_bo,
-            ps->ps[1], 0);
-   }
-}
-
-static inline void
-gen8_3DSTATE_PS_EXTRA(struct ilo_builder *builder,
-                      const struct ilo_state_ps *ps)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_PS_EXTRA) | (cmd_len - 2);
-   /* see ps_set_gen8_3DSTATE_PS_EXTRA() */
-   dw[1] = ps->ps[4];
-}
-
-static inline void
-gen8_3DSTATE_PS_BLEND(struct ilo_builder *builder,
-                      const struct ilo_state_cc *cc)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_PS_BLEND) | (cmd_len - 2);
-   /* see cc_set_gen8_3DSTATE_PS_BLEND() */
-   dw[1] = cc->blend[0];
-}
-
-static inline void
-gen6_3DSTATE_CONSTANT_PS(struct ilo_builder *builder,
-                         const uint32_t *bufs, const int *sizes,
-                         int num_bufs)
-{
-   gen6_3dstate_constant(builder, GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_PS,
-         bufs, sizes, num_bufs);
-}
-
-static inline void
-gen7_3DSTATE_CONSTANT_PS(struct ilo_builder *builder,
-                         const uint32_t *bufs, const int *sizes,
-                         int num_bufs)
-{
-   gen7_3dstate_constant(builder, GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_PS,
-         bufs, sizes, num_bufs);
-}
-
-static inline void
-gen7_3DSTATE_BINDING_TABLE_POINTERS_PS(struct ilo_builder *builder,
-                                       uint32_t binding_table)
-{
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_PS,
-         binding_table);
-}
-
-static inline void
-gen7_3DSTATE_SAMPLER_STATE_POINTERS_PS(struct ilo_builder *builder,
-                                       uint32_t sampler_state)
-{
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_PS,
-         sampler_state);
-}
-
-static inline void
-gen6_3DSTATE_MULTISAMPLE(struct ilo_builder *builder,
-                         const struct ilo_state_raster *rs,
-                         const struct ilo_state_sample_pattern *pattern,
-                         uint8_t sample_count)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(7)) ? 4 : 3;
-   const uint32_t *packed = (const uint32_t *)
-      ilo_state_sample_pattern_get_packed_offsets(pattern,
-            builder->dev, sample_count);
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_MULTISAMPLE) | (cmd_len - 2);
-   /* see raster_set_gen8_3DSTATE_MULTISAMPLE() */
-   dw[1] = rs->sample[0];
-
-   /* see sample_pattern_set_gen8_3DSTATE_SAMPLE_PATTERN() */
-   dw[2] = (sample_count >= 4) ? packed[0] : 0;
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(7))
-      dw[3] = (sample_count >= 8) ? packed[1] : 0;
-}
-
-static inline void
-gen8_3DSTATE_MULTISAMPLE(struct ilo_builder *builder,
-                         const struct ilo_state_raster *rs)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_MULTISAMPLE) | (cmd_len - 2);
-   /* see raster_set_gen8_3DSTATE_MULTISAMPLE() */
-   dw[1] = rs->sample[0];
-}
-
-static inline void
-gen8_3DSTATE_SAMPLE_PATTERN(struct ilo_builder *builder,
-                            const struct ilo_state_sample_pattern *pattern)
-{
-   const uint8_t cmd_len = 9;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_SAMPLE_PATTERN) | (cmd_len - 2);
-   dw[1] = 0;
-   dw[2] = 0;
-   dw[3] = 0;
-   dw[4] = 0;
-   /* see sample_pattern_set_gen8_3DSTATE_SAMPLE_PATTERN() */
-   dw[5] = ((const uint32_t *) pattern->pattern_8x)[1];
-   dw[6] = ((const uint32_t *) pattern->pattern_8x)[0];
-   dw[7] = ((const uint32_t *) pattern->pattern_4x)[0];
-   dw[8] = pattern->pattern_1x[0] << 16 |
-           ((const uint16_t *) pattern->pattern_2x)[0];
-}
-
-static inline void
-gen6_3DSTATE_SAMPLE_MASK(struct ilo_builder *builder,
-                         const struct ilo_state_raster *rs)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_SAMPLE_MASK) | (cmd_len - 2);
-   /* see raster_set_gen6_3DSTATE_SAMPLE_MASK() */
-   dw[1] = rs->sample[1];
-}
-
-static inline void
-gen6_3DSTATE_DRAWING_RECTANGLE(struct ilo_builder *builder,
-                               unsigned x, unsigned y,
-                               unsigned width, unsigned height)
-{
-   const uint8_t cmd_len = 4;
-   unsigned xmax = x + width - 1;
-   unsigned ymax = y + height - 1;
-   unsigned rect_limit;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(7)) {
-      rect_limit = 16383;
-   }
-   else {
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 230:
-       *
-       *     "[DevSNB] Errata: This field (Clipped Drawing Rectangle Y Min)
-       *      must be an even number"
-       */
-      assert(y % 2 == 0);
-
-      rect_limit = 8191;
-   }
-
-   if (x > rect_limit) x = rect_limit;
-   if (y > rect_limit) y = rect_limit;
-   if (xmax > rect_limit) xmax = rect_limit;
-   if (ymax > rect_limit) ymax = rect_limit;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_DRAWING_RECTANGLE) | (cmd_len - 2);
-   dw[1] = y << 16 | x;
-   dw[2] = ymax << 16 | xmax;
-   /*
-    * There is no need to set the origin.  It is intended to support front
-    * buffer rendering.
-    */
-   dw[3] = 0;
-}
-
-static inline void
-gen6_3DSTATE_POLY_STIPPLE_OFFSET(struct ilo_builder *builder,
-                                 const struct ilo_state_poly_stipple *stipple)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_POLY_STIPPLE_OFFSET) | (cmd_len - 2);
-   /* constant */
-   dw[1] = 0;
-}
-
-static inline void
-gen6_3DSTATE_POLY_STIPPLE_PATTERN(struct ilo_builder *builder,
-                                  const struct ilo_state_poly_stipple *stipple)
-{
-   const uint8_t cmd_len = 33;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_POLY_STIPPLE_PATTERN) | (cmd_len - 2);
-   /* see poly_stipple_set_gen6_3DSTATE_POLY_STIPPLE_PATTERN() */
-   memcpy(&dw[1], stipple->stipple, sizeof(stipple->stipple));
-}
-
-static inline void
-gen6_3DSTATE_LINE_STIPPLE(struct ilo_builder *builder,
-                          const struct ilo_state_line_stipple *stipple)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_LINE_STIPPLE) | (cmd_len - 2);
-   /* see line_stipple_set_gen6_3DSTATE_LINE_STIPPLE() */
-   dw[1] = stipple->stipple[0];
-   dw[2] = stipple->stipple[1];
-}
-
-static inline void
-gen6_3DSTATE_AA_LINE_PARAMETERS(struct ilo_builder *builder,
-                                const struct ilo_state_raster *rs)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_AA_LINE_PARAMETERS) | (cmd_len - 2);
-   /* constant */
-   dw[1] = 0 << GEN6_AA_LINE_DW1_BIAS__SHIFT |
-           0 << GEN6_AA_LINE_DW1_SLOPE__SHIFT;
-   dw[2] = 0 << GEN6_AA_LINE_DW2_CAP_BIAS__SHIFT |
-           0 << GEN6_AA_LINE_DW2_CAP_SLOPE__SHIFT;
-}
-
-static inline void
-gen6_3DSTATE_DEPTH_BUFFER(struct ilo_builder *builder,
-                          const struct ilo_state_zs *zs)
-{
-   const uint32_t cmd = (ilo_dev_gen(builder->dev) >= ILO_GEN(7)) ?
-      GEN7_RENDER_CMD(3D, 3DSTATE_DEPTH_BUFFER) :
-      GEN6_RENDER_CMD(3D, 3DSTATE_DEPTH_BUFFER);
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 8 : 7;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = cmd | (cmd_len - 2);
-
-   /*
-    * see zs_set_gen6_3DSTATE_DEPTH_BUFFER() and
-    * zs_set_gen7_3DSTATE_DEPTH_BUFFER()
-    */
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[1] = zs->depth[0];
-      dw[2] = 0;
-      dw[3] = 0;
-      dw[4] = zs->depth[2];
-      dw[5] = zs->depth[3];
-      dw[6] = 0;
-      dw[7] = zs->depth[4];
-
-      dw[5] |= builder->mocs << GEN8_DEPTH_DW5_MOCS__SHIFT;
-
-      if (zs->z_vma) {
-         ilo_builder_batch_reloc64(builder, pos + 2, zs->z_vma->bo,
-               zs->z_vma->bo_offset + zs->depth[1],
-               (zs->z_readonly) ? 0 : INTEL_RELOC_WRITE);
-      }
-   } else {
-      dw[1] = zs->depth[0];
-      dw[2] = 0;
-      dw[3] = zs->depth[2];
-      dw[4] = zs->depth[3];
-      dw[5] = 0;
-      dw[6] = zs->depth[4];
-
-      if (ilo_dev_gen(builder->dev) >= ILO_GEN(7))
-         dw[4] |= builder->mocs << GEN7_DEPTH_DW4_MOCS__SHIFT;
-      else
-         dw[6] |= builder->mocs << GEN6_DEPTH_DW6_MOCS__SHIFT;
-
-      if (zs->z_vma) {
-         ilo_builder_batch_reloc(builder, pos + 2, zs->z_vma->bo,
-               zs->z_vma->bo_offset + zs->depth[1],
-               (zs->z_readonly) ? 0 : INTEL_RELOC_WRITE);
-      }
-   }
-}
-
-static inline void
-gen6_3DSTATE_STENCIL_BUFFER(struct ilo_builder *builder,
-                            const struct ilo_state_zs *zs)
-{
-   const uint32_t cmd = (ilo_dev_gen(builder->dev) >= ILO_GEN(7)) ?
-      GEN7_RENDER_CMD(3D, 3DSTATE_STENCIL_BUFFER) :
-      GEN6_RENDER_CMD(3D, 3DSTATE_STENCIL_BUFFER);
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 5 : 3;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = cmd | (cmd_len - 2);
-
-   /* see zs_set_gen6_3DSTATE_STENCIL_BUFFER() */
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[1] = zs->stencil[0];
-      dw[2] = 0;
-      dw[3] = 0;
-      dw[4] = zs->stencil[2];
-
-      dw[1] |= builder->mocs << GEN8_STENCIL_DW1_MOCS__SHIFT;
-
-      if (zs->s_vma) {
-         ilo_builder_batch_reloc64(builder, pos + 2, zs->s_vma->bo,
-               zs->s_vma->bo_offset + zs->stencil[1],
-               (zs->s_readonly) ? 0 : INTEL_RELOC_WRITE);
-      }
-   } else {
-      dw[1] = zs->stencil[0];
-      dw[2] = 0;
-
-      dw[1] |= builder->mocs << GEN6_STENCIL_DW1_MOCS__SHIFT;
-
-      if (zs->s_vma) {
-         ilo_builder_batch_reloc(builder, pos + 2, zs->s_vma->bo,
-               zs->s_vma->bo_offset + zs->stencil[1],
-               (zs->s_readonly) ? 0 : INTEL_RELOC_WRITE);
-      }
-   }
-}
-
-static inline void
-gen6_3DSTATE_HIER_DEPTH_BUFFER(struct ilo_builder *builder,
-                               const struct ilo_state_zs *zs)
-{
-   const uint32_t cmd = (ilo_dev_gen(builder->dev) >= ILO_GEN(7)) ?
-      GEN7_RENDER_CMD(3D, 3DSTATE_HIER_DEPTH_BUFFER) :
-      GEN6_RENDER_CMD(3D, 3DSTATE_HIER_DEPTH_BUFFER);
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 5 : 3;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = cmd | (cmd_len - 2);
-
-   /* see zs_set_gen6_3DSTATE_HIER_DEPTH_BUFFER() */
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[1] = zs->hiz[0];
-      dw[2] = 0;
-      dw[3] = 0;
-      dw[4] = zs->hiz[2];
-
-      dw[1] |= builder->mocs << GEN8_HIZ_DW1_MOCS__SHIFT;
-
-      if (zs->hiz_vma) {
-         ilo_builder_batch_reloc64(builder, pos + 2, zs->hiz_vma->bo,
-               zs->hiz_vma->bo_offset + zs->hiz[1],
-               (zs->z_readonly) ? 0 : INTEL_RELOC_WRITE);
-      }
-   } else {
-      dw[1] = zs->hiz[0];
-      dw[2] = 0;
-
-      dw[1] |= builder->mocs << GEN6_HIZ_DW1_MOCS__SHIFT;
-
-      if (zs->hiz_vma) {
-         ilo_builder_batch_reloc(builder, pos + 2, zs->hiz_vma->bo,
-               zs->hiz_vma->bo_offset + zs->hiz[1],
-               (zs->z_readonly) ? 0 : INTEL_RELOC_WRITE);
-      }
-   }
-}
-
-static inline void
-gen6_3DSTATE_CLEAR_PARAMS(struct ilo_builder *builder,
-                          uint32_t clear_val)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_CLEAR_PARAMS) |
-           GEN6_CLEAR_PARAMS_DW0_VALID |
-           (cmd_len - 2);
-   dw[1] = clear_val;
-}
-
-static inline void
-gen7_3DSTATE_CLEAR_PARAMS(struct ilo_builder *builder,
-                          uint32_t clear_val)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_CLEAR_PARAMS) | (cmd_len - 2);
-   dw[1] = clear_val;
-   dw[2] = GEN7_CLEAR_PARAMS_DW2_VALID;
-}
-
-static inline void
-gen6_3DSTATE_VIEWPORT_STATE_POINTERS(struct ilo_builder *builder,
-                                     uint32_t clip_viewport,
-                                     uint32_t sf_viewport,
-                                     uint32_t cc_viewport)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_VIEWPORT_STATE_POINTERS) |
-           GEN6_VP_PTR_DW0_CLIP_CHANGED |
-           GEN6_VP_PTR_DW0_SF_CHANGED |
-           GEN6_VP_PTR_DW0_CC_CHANGED |
-           (cmd_len - 2);
-   dw[1] = clip_viewport;
-   dw[2] = sf_viewport;
-   dw[3] = cc_viewport;
-}
-
-static inline void
-gen6_3DSTATE_SCISSOR_STATE_POINTERS(struct ilo_builder *builder,
-                                    uint32_t scissor_rect)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_SCISSOR_STATE_POINTERS) |
-           (cmd_len - 2);
-   dw[1] = scissor_rect;
-}
-
-static inline void
-gen6_3DSTATE_CC_STATE_POINTERS(struct ilo_builder *builder,
-                               uint32_t blend_state,
-                               uint32_t depth_stencil_state,
-                               uint32_t color_calc_state)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_CC_STATE_POINTERS) | (cmd_len - 2);
-   dw[1] = blend_state | GEN6_CC_PTR_DW1_BLEND_CHANGED;
-   dw[2] = depth_stencil_state | GEN6_CC_PTR_DW2_ZS_CHANGED;
-   dw[3] = color_calc_state | GEN6_CC_PTR_DW3_CC_CHANGED;
-}
-
-static inline void
-gen7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP(struct ilo_builder *builder,
-                                             uint32_t sf_clip_viewport)
-{
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP,
-         sf_clip_viewport);
-}
-
-static inline void
-gen7_3DSTATE_VIEWPORT_STATE_POINTERS_CC(struct ilo_builder *builder,
-                                        uint32_t cc_viewport)
-{
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_VIEWPORT_STATE_POINTERS_CC,
-         cc_viewport);
-}
-
-static inline void
-gen7_3DSTATE_CC_STATE_POINTERS(struct ilo_builder *builder,
-                               uint32_t color_calc_state)
-{
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8))
-      color_calc_state |= 1;
-
-   gen7_3dstate_pointer(builder,
-         GEN6_RENDER_OPCODE_3DSTATE_CC_STATE_POINTERS, color_calc_state);
-}
-
-static inline void
-gen7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS(struct ilo_builder *builder,
-                                          uint32_t depth_stencil_state)
-{
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_DEPTH_STENCIL_STATE_POINTERS,
-         depth_stencil_state);
-}
-
-static inline void
-gen7_3DSTATE_BLEND_STATE_POINTERS(struct ilo_builder *builder,
-                                  uint32_t blend_state)
-{
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8))
-      blend_state |= 1;
-
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_BLEND_STATE_POINTERS,
-         blend_state);
-}
-
-static inline uint32_t
-gen6_CLIP_VIEWPORT(struct ilo_builder *builder,
-                   const struct ilo_state_viewport *vp)
-{
-   const int state_align = 32;
-   const int state_len = 4 * vp->count;
-   uint32_t state_offset, *dw;
-   int i;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   state_offset = ilo_builder_dynamic_pointer(builder,
-         ILO_BUILDER_ITEM_CLIP_VIEWPORT, state_align, state_len, &dw);
-
-   for (i = 0; i < vp->count; i++) {
-      /* see viewport_matrix_set_gen7_SF_CLIP_VIEWPORT() */
-      dw[0] = vp->sf_clip[i][8];
-      dw[1] = vp->sf_clip[i][9];
-      dw[2] = vp->sf_clip[i][10];
-      dw[3] = vp->sf_clip[i][11];
-
-      dw += 4;
-   }
-
-   return state_offset;
-}
-
-static inline uint32_t
-gen6_SF_VIEWPORT(struct ilo_builder *builder,
-                 const struct ilo_state_viewport *vp)
-{
-   const int state_align = 32;
-   const int state_len = 8 * vp->count;
-   uint32_t state_offset, *dw;
-   int i;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   state_offset = ilo_builder_dynamic_pointer(builder,
-         ILO_BUILDER_ITEM_SF_VIEWPORT, state_align, state_len, &dw);
-
-   for (i = 0; i < vp->count; i++) {
-      /* see viewport_matrix_set_gen7_SF_CLIP_VIEWPORT() */
-      memcpy(dw, vp->sf_clip[i], sizeof(*dw) * 8);
-
-      dw += 8;
-   }
-
-   return state_offset;
-}
-
-static inline uint32_t
-gen7_SF_CLIP_VIEWPORT(struct ilo_builder *builder,
-                      const struct ilo_state_viewport *vp)
-{
-   const int state_align = 64;
-   const int state_len = 16 * vp->count;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   /* see viewport_matrix_set_gen7_SF_CLIP_VIEWPORT() */
-   return ilo_builder_dynamic_write(builder, ILO_BUILDER_ITEM_SF_VIEWPORT,
-         state_align, state_len, (const uint32_t *) vp->sf_clip);
-}
-
-static inline uint32_t
-gen6_CC_VIEWPORT(struct ilo_builder *builder,
-                 const struct ilo_state_viewport *vp)
-{
-   const int state_align = 32;
-   const int state_len = 2 * vp->count;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   /* see viewport_matrix_set_gen6_CC_VIEWPORT() */
-   return ilo_builder_dynamic_write(builder, ILO_BUILDER_ITEM_CC_VIEWPORT,
-         state_align, state_len, (const uint32_t *) vp->cc);
-}
-
-static inline uint32_t
-gen6_SCISSOR_RECT(struct ilo_builder *builder,
-                  const struct ilo_state_viewport *vp)
-{
-   const int state_align = 32;
-   const int state_len = 2 * vp->count;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   /* see viewport_scissor_set_gen6_SCISSOR_RECT() */
-   return ilo_builder_dynamic_write(builder, ILO_BUILDER_ITEM_SCISSOR_RECT,
-         state_align, state_len, (const uint32_t *) vp->scissor);
-}
-
-static inline uint32_t
-gen6_COLOR_CALC_STATE(struct ilo_builder *builder,
-                      const struct ilo_state_cc *cc)
-{
-   const int state_align = 64;
-   const int state_len = 6;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   /* see cc_params_set_gen6_COLOR_CALC_STATE() */
-   return ilo_builder_dynamic_write(builder, ILO_BUILDER_ITEM_COLOR_CALC,
-         state_align, state_len, cc->cc);
-}
-
-static inline uint32_t
-gen6_DEPTH_STENCIL_STATE(struct ilo_builder *builder,
-                         const struct ilo_state_cc *cc)
-{
-   const int state_align = 64;
-   const int state_len = 3;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   /* see cc_set_gen6_DEPTH_STENCIL_STATE() */
-   return ilo_builder_dynamic_write(builder, ILO_BUILDER_ITEM_DEPTH_STENCIL,
-         state_align, state_len, cc->ds);
-}
-
-static inline uint32_t
-gen6_BLEND_STATE(struct ilo_builder *builder,
-                 const struct ilo_state_cc *cc)
-{
-   const int state_align = 64;
-   const int state_len = 2 * cc->blend_state_count;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   if (!state_len)
-      return 0;
-
-   /* see cc_set_gen6_BLEND_STATE() */
-   return ilo_builder_dynamic_write(builder, ILO_BUILDER_ITEM_BLEND,
-         state_align, state_len, cc->blend);
-}
-
-static inline uint32_t
-gen8_BLEND_STATE(struct ilo_builder *builder,
-                 const struct ilo_state_cc *cc)
-{
-   const int state_align = 64;
-   const int state_len = 1 + 2 * cc->blend_state_count;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   /* see cc_set_gen8_BLEND_STATE() */
-   return ilo_builder_dynamic_write(builder, ILO_BUILDER_ITEM_BLEND,
-         state_align, state_len, &cc->blend[1]);
-}
-
-#endif /* ILO_BUILDER_3D_BOTTOM_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_builder_3d_top.h b/src/gallium/drivers/ilo/core/ilo_builder_3d_top.h
deleted file mode 100644 (file)
index 3a44871..0000000
+++ /dev/null
@@ -1,1476 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BUILDER_3D_TOP_H
-#define ILO_BUILDER_3D_TOP_H
-
-#include "genhw/genhw.h"
-#include "intel_winsys.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-#include "ilo_state_sampler.h"
-#include "ilo_state_shader.h"
-#include "ilo_state_sol.h"
-#include "ilo_state_surface.h"
-#include "ilo_state_urb.h"
-#include "ilo_state_vf.h"
-#include "ilo_vma.h"
-#include "ilo_builder.h"
-
-static inline void
-gen6_3DSTATE_URB(struct ilo_builder *builder,
-                 const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_URB) | (cmd_len - 2);
-   /* see urb_set_gen6_3DSTATE_URB() */
-   dw[1] = urb->urb[0];
-   dw[2] = urb->urb[1];
-}
-
-static inline void
-gen7_3DSTATE_PUSH_CONSTANT_ALLOC_VS(struct ilo_builder *builder,
-                                    const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_PUSH_CONSTANT_ALLOC_VS) |
-           (cmd_len - 2);
-   /* see urb_set_gen7_3dstate_push_constant_alloc() */
-   dw[1] = urb->pcb[0];
-}
-
-static inline void
-gen7_3DSTATE_PUSH_CONSTANT_ALLOC_HS(struct ilo_builder *builder,
-                                    const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_PUSH_CONSTANT_ALLOC_HS) |
-           (cmd_len - 2);
-   /* see urb_set_gen7_3dstate_push_constant_alloc() */
-   dw[1] = urb->pcb[1];
-}
-
-static inline void
-gen7_3DSTATE_PUSH_CONSTANT_ALLOC_DS(struct ilo_builder *builder,
-                                    const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_PUSH_CONSTANT_ALLOC_DS) |
-           (cmd_len - 2);
-   /* see urb_set_gen7_3dstate_push_constant_alloc() */
-   dw[1] = urb->pcb[2];
-}
-
-static inline void
-gen7_3DSTATE_PUSH_CONSTANT_ALLOC_GS(struct ilo_builder *builder,
-                                    const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_PUSH_CONSTANT_ALLOC_GS) |
-           (cmd_len - 2);
-   /* see urb_set_gen7_3dstate_push_constant_alloc() */
-   dw[1] = urb->pcb[3];
-}
-
-static inline void
-gen7_3DSTATE_PUSH_CONSTANT_ALLOC_PS(struct ilo_builder *builder,
-                                    const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_PUSH_CONSTANT_ALLOC_PS) |
-           (cmd_len - 2);
-   /* see urb_set_gen7_3dstate_push_constant_alloc() */
-   dw[1] = urb->pcb[4];
-}
-
-static inline void
-gen7_3DSTATE_URB_VS(struct ilo_builder *builder,
-                    const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_URB_VS) | (cmd_len - 2);
-   /* see urb_set_gen7_3dstate_push_constant_alloc() */
-   dw[1] = urb->urb[0];
-}
-
-static inline void
-gen7_3DSTATE_URB_HS(struct ilo_builder *builder,
-                    const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_URB_HS) | (cmd_len - 2);
-   /* see urb_set_gen7_3dstate_push_constant_alloc() */
-   dw[1] = urb->urb[1];
-}
-
-static inline void
-gen7_3DSTATE_URB_DS(struct ilo_builder *builder,
-                    const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_URB_DS) | (cmd_len - 2);
-   /* see urb_set_gen7_3dstate_push_constant_alloc() */
-   dw[1] = urb->urb[2];
-}
-
-static inline void
-gen7_3DSTATE_URB_GS(struct ilo_builder *builder,
-                    const struct ilo_state_urb *urb)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_URB_GS) | (cmd_len - 2);
-   /* see urb_set_gen7_3dstate_push_constant_alloc() */
-   dw[1] = urb->urb[3];
-}
-
-static inline void
-gen75_3DSTATE_VF(struct ilo_builder *builder,
-                 const struct ilo_state_vf *vf)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7.5, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   /* see vf_params_set_gen75_3DSTATE_VF() */
-   dw[0] = GEN75_RENDER_CMD(3D, 3DSTATE_VF) | (cmd_len - 2) |
-           vf->cut[0];
-   dw[1] = vf->cut[1];
-}
-
-static inline void
-gen6_3DSTATE_VF_STATISTICS(struct ilo_builder *builder,
-                           bool enable)
-{
-   const uint8_t cmd_len = 1;
-   const uint32_t dw0 = GEN6_RENDER_CMD(SINGLE_DW, 3DSTATE_VF_STATISTICS) |
-                        enable;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_write(builder, cmd_len, &dw0);
-}
-
-static inline void
-gen8_3DSTATE_VF_TOPOLOGY(struct ilo_builder *builder,
-                         enum gen_3dprim_type topology)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_VF_TOPOLOGY) | (cmd_len - 2);
-   dw[1] = topology << GEN8_TOPOLOGY_DW1_TYPE__SHIFT;
-}
-
-static inline void
-gen8_3DSTATE_VF_INSTANCING(struct ilo_builder *builder,
-                           const struct ilo_state_vf *vf,
-                           uint32_t attr)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_VF_INSTANCING) | (cmd_len - 2);
-   dw[1] = attr << GEN8_INSTANCING_DW1_VE_INDEX__SHIFT;
-   dw[2] = 0;
-   /* see vf_set_gen8_3DSTATE_VF_INSTANCING() */
-   if (attr >= vf->internal_ve_count) {
-      attr -= vf->internal_ve_count;
-
-      dw[1] |= vf->user_instancing[attr][0];
-      dw[2] |= vf->user_instancing[attr][1];
-   }
-}
-
-static inline void
-gen8_3DSTATE_VF_SGVS(struct ilo_builder *builder,
-                     const struct ilo_state_vf *vf)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN8_RENDER_CMD(3D, 3DSTATE_VF_SGVS) | (cmd_len - 2);
-   /* see vf_params_set_gen8_3DSTATE_VF_SGVS() */
-   dw[1] = vf->sgvs[0];
-}
-
-static inline void
-gen6_3DSTATE_VERTEX_BUFFERS(struct ilo_builder *builder,
-                            const struct ilo_state_vf *vf,
-                            const struct ilo_state_vertex_buffer *vb,
-                            unsigned vb_count)
-{
-   uint8_t cmd_len;
-   uint32_t *dw;
-   unsigned pos, i;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 82:
-    *
-    *     "From 1 to 33 VBs can be specified..."
-    */
-   assert(vb_count <= 33);
-
-   if (!vb_count)
-      return;
-
-   cmd_len = 1 + 4 * vb_count;
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_VERTEX_BUFFERS) | (cmd_len - 2);
-   dw++;
-   pos++;
-
-   for (i = 0; i < vb_count; i++) {
-      const struct ilo_state_vertex_buffer *b = &vb[i];
-
-      /* see vertex_buffer_set_gen8_vertex_buffer_state() */
-      dw[0] = b->vb[0] |
-              i << GEN6_VB_DW0_INDEX__SHIFT;
-
-      if (ilo_dev_gen(builder->dev) >= ILO_GEN(8))
-         dw[0] |= builder->mocs << GEN8_VB_DW0_MOCS__SHIFT;
-      else
-         dw[0] |= builder->mocs << GEN6_VB_DW0_MOCS__SHIFT;
-
-      dw[1] = 0;
-      dw[2] = 0;
-      dw[3] = 0;
-
-      if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-         if (b->vma) {
-            ilo_builder_batch_reloc64(builder, pos + 1, b->vma->bo,
-                  b->vma->bo_offset + b->vb[1], 0);
-         }
-
-         dw[3] |= b->vb[2];
-      } else {
-         const int8_t elem = vf->vb_to_first_elem[i];
-
-         /* see vf_set_gen6_vertex_buffer_state() */
-         if (elem >= 0) {
-            dw[0] |= vf->user_instancing[elem][0];
-            dw[3] |= vf->user_instancing[elem][1];
-         }
-
-         if (b->vma) {
-            ilo_builder_batch_reloc(builder, pos + 1, b->vma->bo,
-                  b->vma->bo_offset + b->vb[1], 0);
-            ilo_builder_batch_reloc(builder, pos + 2, b->vma->bo,
-                  b->vma->bo_offset + b->vb[2], 0);
-         }
-      }
-
-      dw += 4;
-      pos += 4;
-   }
-}
-
-/* the user vertex buffer must be uploaded with gen6_user_vertex_buffer() */
-static inline void
-gen6_user_3DSTATE_VERTEX_BUFFERS(struct ilo_builder *builder,
-                                 uint32_t vb_begin, uint32_t vb_end,
-                                 uint32_t stride)
-{
-   const struct ilo_builder_writer *bat =
-      &builder->writers[ILO_BUILDER_WRITER_BATCH];
-   const uint8_t cmd_len = 1 + 4;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_VERTEX_BUFFERS) | (cmd_len - 2);
-   dw++;
-   pos++;
-
-   /* VERTEX_BUFFER_STATE */
-   dw[0] = 0 << GEN6_VB_DW0_INDEX__SHIFT |
-           GEN6_VB_DW0_ACCESS_VERTEXDATA |
-           stride << GEN6_VB_DW0_PITCH__SHIFT;
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(7))
-      dw[0] |= GEN7_VB_DW0_ADDR_MODIFIED;
-
-   dw[3] = 0;
-
-   ilo_builder_batch_reloc(builder, pos + 1, bat->bo, vb_begin, 0);
-   ilo_builder_batch_reloc(builder, pos + 2, bat->bo, vb_end, 0);
-}
-
-static inline void
-gen6_3DSTATE_VERTEX_ELEMENTS(struct ilo_builder *builder,
-                             const struct ilo_state_vf *vf)
-{
-   uint8_t cmd_len;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   cmd_len = 1 + 2 * (vf->internal_ve_count + vf->user_ve_count);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_VERTEX_ELEMENTS) | (cmd_len - 2);
-   dw++;
-
-   /*
-    * see vf_params_set_gen6_internal_ve() and
-    * vf_set_gen6_3DSTATE_VERTEX_ELEMENTS()
-    */
-   if (vf->internal_ve_count) {
-      memcpy(dw, vf->internal_ve,
-            sizeof(vf->internal_ve[0]) * vf->internal_ve_count);
-      dw += 2 * vf->internal_ve_count;
-   }
-
-   memcpy(dw, vf->user_ve, sizeof(vf->user_ve[0]) * vf->user_ve_count);
-}
-
-static inline void
-gen6_3DSTATE_INDEX_BUFFER(struct ilo_builder *builder,
-                          const struct ilo_state_vf *vf,
-                          const struct ilo_state_index_buffer *ib)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t dw0, *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   dw0 = GEN6_RENDER_CMD(3D, 3DSTATE_INDEX_BUFFER) | (cmd_len - 2) |
-         builder->mocs << GEN6_IB_DW0_MOCS__SHIFT;
-
-   /*
-    * see index_buffer_set_gen8_3DSTATE_INDEX_BUFFER() and
-    * vf_params_set_gen6_3dstate_index_buffer()
-    */
-   dw0 |= ib->ib[0];
-   if (ilo_dev_gen(builder->dev) <= ILO_GEN(7))
-      dw0 |= vf->cut[0];
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = dw0;
-   if (ib->vma) {
-      ilo_builder_batch_reloc(builder, pos + 1, ib->vma->bo,
-            ib->vma->bo_offset + ib->ib[1], 0);
-      ilo_builder_batch_reloc(builder, pos + 2, ib->vma->bo,
-            ib->vma->bo_offset + ib->ib[2], 0);
-   } else {
-      dw[1] = 0;
-      dw[2] = 0;
-   }
-}
-
-static inline void
-gen8_3DSTATE_INDEX_BUFFER(struct ilo_builder *builder,
-                          const struct ilo_state_vf *vf,
-                          const struct ilo_state_index_buffer *ib)
-{
-   const uint8_t cmd_len = 5;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_INDEX_BUFFER) | (cmd_len - 2);
-   /* see index_buffer_set_gen8_3DSTATE_INDEX_BUFFER() */
-   dw[1] = ib->ib[0] |
-           builder->mocs << GEN8_IB_DW1_MOCS__SHIFT;
-
-   if (ib->vma) {
-      ilo_builder_batch_reloc64(builder, pos + 2, ib->vma->bo,
-            ib->vma->bo_offset + ib->ib[1], 0);
-   } else {
-      dw[2] = 0;
-      dw[3] = 0;
-   }
-
-   dw[4] = ib->ib[2];
-}
-
-static inline void
-gen6_3DSTATE_VS(struct ilo_builder *builder,
-                const struct ilo_state_vs *vs,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 6;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_VS) | (cmd_len - 2);
-   dw[1] = kernel_offset;
-   /* see vs_set_gen6_3DSTATE_VS() */
-   dw[2] = vs->vs[0];
-   dw[3] = vs->vs[1];
-   dw[4] = vs->vs[2];
-   dw[5] = vs->vs[3];
-
-   if (ilo_state_vs_get_scratch_size(vs)) {
-      ilo_builder_batch_reloc(builder, pos + 3, scratch_bo,
-            vs->vs[1], 0);
-   }
-}
-
-static inline void
-gen8_3DSTATE_VS(struct ilo_builder *builder,
-                const struct ilo_state_vs *vs,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 9;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_VS) | (cmd_len - 2);
-   dw[1] = kernel_offset;
-   dw[2] = 0;
-   /* see vs_set_gen6_3DSTATE_VS() */
-   dw[3] = vs->vs[0];
-   dw[4] = vs->vs[1];
-   dw[5] = 0;
-   dw[6] = vs->vs[2];
-   dw[7] = vs->vs[3];
-   dw[8] = vs->vs[4];
-
-   if (ilo_state_vs_get_scratch_size(vs)) {
-      ilo_builder_batch_reloc64(builder, pos + 4, scratch_bo,
-            vs->vs[1], 0);
-   }
-}
-
-static inline void
-gen7_3DSTATE_HS(struct ilo_builder *builder,
-                const struct ilo_state_hs *hs,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 7;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_HS) | (cmd_len - 2);
-   /* see hs_set_gen7_3DSTATE_HS() */
-   dw[1] = hs->hs[0];
-   dw[2] = hs->hs[1];
-   dw[3] = kernel_offset;
-   dw[4] = hs->hs[2];
-   dw[5] = hs->hs[3];
-   dw[6] = 0;
-
-   if (ilo_state_hs_get_scratch_size(hs)) {
-      ilo_builder_batch_reloc(builder, pos + 4, scratch_bo,
-            hs->hs[2], 0);
-   }
-}
-
-static inline void
-gen8_3DSTATE_HS(struct ilo_builder *builder,
-                const struct ilo_state_hs *hs,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 9;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_HS) | (cmd_len - 2);
-   /* see hs_set_gen7_3DSTATE_HS() */
-   dw[1] = hs->hs[0];
-   dw[2] = hs->hs[1];
-   dw[3] = kernel_offset;
-   dw[4] = 0;
-   dw[5] = hs->hs[2];
-   dw[6] = 0;
-   dw[7] = hs->hs[3];
-   dw[8] = 0;
-
-   if (ilo_state_hs_get_scratch_size(hs)) {
-      ilo_builder_batch_reloc64(builder, pos + 5, scratch_bo,
-            hs->hs[2], 0);
-   }
-}
-
-static inline void
-gen7_3DSTATE_TE(struct ilo_builder *builder,
-                const struct ilo_state_ds *ds)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_TE) | (cmd_len - 2);
-   /* see ds_set_gen7_3DSTATE_TE() */
-   dw[1] = ds->te[0];
-   dw[2] = ds->te[1];
-   dw[3] = ds->te[2];
-}
-
-static inline void
-gen7_3DSTATE_DS(struct ilo_builder *builder,
-                const struct ilo_state_ds *ds,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 6;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_DS) | (cmd_len - 2);
-   /* see ds_set_gen7_3DSTATE_DS() */
-   dw[1] = kernel_offset;
-   dw[2] = ds->ds[0];
-   dw[3] = ds->ds[1];
-   dw[4] = ds->ds[2];
-   dw[5] = ds->ds[3];
-
-   if (ilo_state_ds_get_scratch_size(ds)) {
-      ilo_builder_batch_reloc(builder, pos + 3, scratch_bo,
-            ds->ds[1], 0);
-   }
-}
-
-static inline void
-gen8_3DSTATE_DS(struct ilo_builder *builder,
-                const struct ilo_state_ds *ds,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 9;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_DS) | (cmd_len - 2);
-   /* see ds_set_gen7_3DSTATE_DS() */
-   dw[1] = kernel_offset;
-   dw[2] = 0;
-   dw[3] = ds->ds[0];
-   dw[4] = ds->ds[1];
-   dw[5] = 0;
-   dw[6] = ds->ds[2];
-   dw[7] = ds->ds[3];
-   dw[8] = ds->ds[4];
-
-   if (ilo_state_ds_get_scratch_size(ds)) {
-      ilo_builder_batch_reloc64(builder, pos + 4, scratch_bo,
-            ds->ds[1], 0);
-   }
-}
-
-static inline void
-gen6_3DSTATE_GS(struct ilo_builder *builder,
-                const struct ilo_state_gs *gs,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 7;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_GS) | (cmd_len - 2);
-   dw[1] = kernel_offset;
-   /* see gs_set_gen6_3DSTATE_GS() */
-   dw[2] = gs->gs[0];
-   dw[3] = gs->gs[1];
-   dw[4] = gs->gs[2];
-   dw[5] = gs->gs[3];
-   dw[6] = gs->gs[4];
-
-   if (ilo_state_gs_get_scratch_size(gs)) {
-      ilo_builder_batch_reloc(builder, pos + 3, scratch_bo,
-            gs->gs[1], 0);
-   }
-}
-
-static inline void
-gen6_3DSTATE_GS_SVB_INDEX(struct ilo_builder *builder,
-                          int index, unsigned svbi,
-                          unsigned max_svbi,
-                          bool load_vertex_count)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-   assert(index >= 0 && index < 4);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_GS_SVB_INDEX) | (cmd_len - 2);
-
-   dw[1] = index << GEN6_SVBI_DW1_INDEX__SHIFT;
-   if (load_vertex_count)
-      dw[1] |= GEN6_SVBI_DW1_LOAD_INTERNAL_VERTEX_COUNT;
-
-   dw[2] = svbi;
-   dw[3] = max_svbi;
-}
-
-static inline void
-gen7_3DSTATE_GS(struct ilo_builder *builder,
-                const struct ilo_state_gs *gs,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 7;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_GS) | (cmd_len - 2);
-   dw[1] = kernel_offset;
-   /* see gs_set_gen7_3DSTATE_GS() */
-   dw[2] = gs->gs[0];
-   dw[3] = gs->gs[1];
-   dw[4] = gs->gs[2];
-   dw[5] = gs->gs[3];
-   dw[6] = 0;
-
-   if (ilo_state_gs_get_scratch_size(gs)) {
-      ilo_builder_batch_reloc(builder, pos + 3, scratch_bo,
-            gs->gs[1], 0);
-   }
-}
-
-static inline void
-gen8_3DSTATE_GS(struct ilo_builder *builder,
-                const struct ilo_state_gs *gs,
-                uint32_t kernel_offset,
-                struct intel_bo *scratch_bo)
-{
-   const uint8_t cmd_len = 10;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_GS) | (cmd_len - 2);
-   dw[1] = kernel_offset;
-   dw[2] = 0;
-   /* see gs_set_gen7_3DSTATE_GS() */
-   dw[3] = gs->gs[0];
-   dw[4] = gs->gs[1];
-   dw[5] = 0;
-   dw[6] = gs->gs[2];
-   dw[7] = gs->gs[3];
-   dw[8] = 0;
-   dw[9] = gs->gs[4];
-
-   if (ilo_state_gs_get_scratch_size(gs)) {
-      ilo_builder_batch_reloc64(builder, pos + 4, scratch_bo,
-            gs->gs[1], 0);
-   }
-}
-
-static inline void
-gen7_3DSTATE_STREAMOUT(struct ilo_builder *builder,
-                       const struct ilo_state_sol *sol)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 5 : 3;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_STREAMOUT) | (cmd_len - 2);
-   /* see sol_set_gen7_3DSTATE_STREAMOUT() */
-   dw[1] = sol->streamout[0];
-   dw[2] = sol->streamout[1];
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[3] = sol->strides[1] << GEN8_SO_DW3_BUFFER1_PITCH__SHIFT |
-              sol->strides[0] << GEN8_SO_DW3_BUFFER0_PITCH__SHIFT;
-      dw[4] = sol->strides[3] << GEN8_SO_DW4_BUFFER3_PITCH__SHIFT |
-              sol->strides[2] << GEN8_SO_DW4_BUFFER2_PITCH__SHIFT;
-   }
-}
-
-static inline void
-gen7_3DSTATE_SO_DECL_LIST(struct ilo_builder *builder,
-                          const struct ilo_state_sol *sol)
-{
-   /*
-    * Note that "DWord Length" has 9 bits for this command and the type of
-    * cmd_len cannot be uint8_t.
-    */
-   uint16_t cmd_len;
-   int cmd_decl_count;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(7.5)) {
-      cmd_decl_count = sol->decl_count;
-   } else {
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 201:
-       *
-       *     "Errata: All 128 decls for all four streams must be included
-       *      whenever this command is issued. The "Num Entries [n]" fields
-       *      still contain the actual numbers of valid decls."
-       */
-      cmd_decl_count = 128;
-   }
-
-   cmd_len = 3 + 2 * cmd_decl_count;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_SO_DECL_LIST) | (cmd_len - 2);
-   /* see sol_set_gen7_3DSTATE_SO_DECL_LIST() */
-   dw[1] = sol->so_decl[0];
-   dw[2] = sol->so_decl[1];
-   memcpy(&dw[3], sol->decl, sizeof(sol->decl[0]) * sol->decl_count);
-
-   if (sol->decl_count < cmd_decl_count) {
-      memset(&dw[3 + 2 * sol->decl_count], 0, sizeof(sol->decl[0]) *
-            cmd_decl_count - sol->decl_count);
-   }
-}
-
-static inline void
-gen7_3DSTATE_SO_BUFFER(struct ilo_builder *builder,
-                       const struct ilo_state_sol *sol,
-                       const struct ilo_state_sol_buffer *sb,
-                       uint8_t buffer)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   assert(buffer < ILO_STATE_SOL_MAX_BUFFER_COUNT);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_SO_BUFFER) | (cmd_len - 2);
-   /* see sol_buffer_set_gen7_3dstate_so_buffer() */
-   dw[1] = buffer << GEN7_SO_BUF_DW1_INDEX__SHIFT |
-           builder->mocs << GEN7_SO_BUF_DW1_MOCS__SHIFT |
-           sol->strides[buffer] << GEN7_SO_BUF_DW1_PITCH__SHIFT;
-
-   if (sb->vma) {
-      ilo_builder_batch_reloc(builder, pos + 2, sb->vma->bo,
-            sb->vma->bo_offset + sb->so_buf[0], INTEL_RELOC_WRITE);
-      ilo_builder_batch_reloc(builder, pos + 3, sb->vma->bo,
-            sb->vma->bo_offset + sb->so_buf[1], INTEL_RELOC_WRITE);
-   } else {
-      dw[2] = 0;
-      dw[3] = 0;
-   }
-}
-
-static inline void
-gen8_3DSTATE_SO_BUFFER(struct ilo_builder *builder,
-                       const struct ilo_state_sol *sol,
-                       const struct ilo_state_sol_buffer *sb,
-                       uint8_t buffer)
-{
-   const uint8_t cmd_len = 8;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(3D, 3DSTATE_SO_BUFFER) | (cmd_len - 2);
-   /* see sol_buffer_set_gen8_3dstate_so_buffer() */
-   dw[1] = sb->so_buf[0] |
-           buffer << GEN7_SO_BUF_DW1_INDEX__SHIFT |
-           builder->mocs << GEN8_SO_BUF_DW1_MOCS__SHIFT;
-
-   if (sb->vma) {
-      ilo_builder_batch_reloc64(builder, pos + 2, sb->vma->bo,
-            sb->vma->bo_offset + sb->so_buf[1], INTEL_RELOC_WRITE);
-   } else {
-      dw[2] = 0;
-      dw[3] = 0;
-   }
-
-   dw[4] = sb->so_buf[2];
-
-   if (sb->write_offset_vma) {
-      ilo_builder_batch_reloc64(builder, pos + 5, sb->write_offset_vma->bo,
-            sb->write_offset_vma->bo_offset + sizeof(uint32_t) * buffer,
-            INTEL_RELOC_WRITE);
-   } else {
-      dw[5] = 0;
-      dw[6] = 0;
-   }
-
-   dw[7] = sb->so_buf[3];
-}
-
-static inline void
-gen6_3DSTATE_BINDING_TABLE_POINTERS(struct ilo_builder *builder,
-                                    uint32_t vs_binding_table,
-                                    uint32_t gs_binding_table,
-                                    uint32_t ps_binding_table)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_BINDING_TABLE_POINTERS) |
-           GEN6_BINDING_TABLE_PTR_DW0_VS_CHANGED |
-           GEN6_BINDING_TABLE_PTR_DW0_GS_CHANGED |
-           GEN6_BINDING_TABLE_PTR_DW0_PS_CHANGED |
-           (cmd_len - 2);
-   dw[1] = vs_binding_table;
-   dw[2] = gs_binding_table;
-   dw[3] = ps_binding_table;
-}
-
-static inline void
-gen6_3DSTATE_SAMPLER_STATE_POINTERS(struct ilo_builder *builder,
-                                    uint32_t vs_sampler_state,
-                                    uint32_t gs_sampler_state,
-                                    uint32_t ps_sampler_state)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, 3DSTATE_SAMPLER_STATE_POINTERS) |
-           GEN6_SAMPLER_PTR_DW0_VS_CHANGED |
-           GEN6_SAMPLER_PTR_DW0_GS_CHANGED |
-           GEN6_SAMPLER_PTR_DW0_PS_CHANGED |
-           (cmd_len - 2);
-   dw[1] = vs_sampler_state;
-   dw[2] = gs_sampler_state;
-   dw[3] = ps_sampler_state;
-}
-
-static inline void
-gen7_3dstate_pointer(struct ilo_builder *builder,
-                     int subop, uint32_t pointer)
-{
-   const uint32_t cmd = GEN6_RENDER_TYPE_RENDER |
-                        GEN6_RENDER_SUBTYPE_3D |
-                        subop;
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = cmd | (cmd_len - 2);
-   dw[1] = pointer;
-}
-
-static inline void
-gen7_3DSTATE_BINDING_TABLE_POINTERS_VS(struct ilo_builder *builder,
-                                       uint32_t binding_table)
-{
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_VS,
-         binding_table);
-}
-
-static inline void
-gen7_3DSTATE_BINDING_TABLE_POINTERS_HS(struct ilo_builder *builder,
-                                       uint32_t binding_table)
-{
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_HS,
-         binding_table);
-}
-
-static inline void
-gen7_3DSTATE_BINDING_TABLE_POINTERS_DS(struct ilo_builder *builder,
-                                       uint32_t binding_table)
-{
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_DS,
-         binding_table);
-}
-
-static inline void
-gen7_3DSTATE_BINDING_TABLE_POINTERS_GS(struct ilo_builder *builder,
-                                       uint32_t binding_table)
-{
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_GS,
-         binding_table);
-}
-
-static inline void
-gen7_3DSTATE_SAMPLER_STATE_POINTERS_VS(struct ilo_builder *builder,
-                                       uint32_t sampler_state)
-{
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_VS,
-         sampler_state);
-}
-
-static inline void
-gen7_3DSTATE_SAMPLER_STATE_POINTERS_HS(struct ilo_builder *builder,
-                                       uint32_t sampler_state)
-{
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_HS,
-         sampler_state);
-}
-
-static inline void
-gen7_3DSTATE_SAMPLER_STATE_POINTERS_DS(struct ilo_builder *builder,
-                                       uint32_t sampler_state)
-{
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_DS,
-         sampler_state);
-}
-
-static inline void
-gen7_3DSTATE_SAMPLER_STATE_POINTERS_GS(struct ilo_builder *builder,
-                                       uint32_t sampler_state)
-{
-   gen7_3dstate_pointer(builder,
-         GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_GS,
-         sampler_state);
-}
-
-static inline void
-gen6_3dstate_constant(struct ilo_builder *builder, int subop,
-                      const uint32_t *bufs, const int *sizes,
-                      int num_bufs)
-{
-   const uint32_t cmd = GEN6_RENDER_TYPE_RENDER |
-                        GEN6_RENDER_SUBTYPE_3D |
-                        subop;
-   const uint8_t cmd_len = 5;
-   unsigned buf_enabled = 0x0;
-   uint32_t buf_dw[4], *dw;
-   int max_read_length, total_read_length;
-   int i;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   assert(num_bufs <= 4);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 138:
-    *
-    *     "(3DSTATE_CONSTANT_VS) The sum of all four read length fields (each
-    *      incremented to represent the actual read length) must be less than
-    *      or equal to 32"
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 161:
-    *
-    *     "(3DSTATE_CONSTANT_GS) The sum of all four read length fields (each
-    *      incremented to represent the actual read length) must be less than
-    *      or equal to 64"
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 287:
-    *
-    *     "(3DSTATE_CONSTANT_PS) The sum of all four read length fields (each
-    *      incremented to represent the actual read length) must be less than
-    *      or equal to 64"
-    */
-   switch (subop) {
-   case GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_VS:
-      max_read_length = 32;
-      break;
-   case GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_GS:
-   case GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_PS:
-      max_read_length = 64;
-      break;
-   default:
-      assert(!"unknown pcb subop");
-      max_read_length = 0;
-      break;
-   }
-
-   total_read_length = 0;
-   for (i = 0; i < 4; i++) {
-      if (i < num_bufs && sizes[i]) {
-         /* in 256-bit units */
-         const int read_len = (sizes[i] + 31) / 32;
-
-         assert(bufs[i] % 32 == 0);
-         assert(read_len <= 32);
-
-         buf_enabled |= 1 << i;
-         buf_dw[i] = bufs[i] | (read_len - 1);
-
-         total_read_length += read_len;
-      } else {
-         buf_dw[i] = 0;
-      }
-   }
-
-   assert(total_read_length <= max_read_length);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = cmd | (cmd_len - 2) |
-           buf_enabled << GEN6_CONSTANT_DW0_BUFFER_ENABLES__SHIFT |
-           builder->mocs << GEN6_CONSTANT_DW0_MOCS__SHIFT;
-
-   memcpy(&dw[1], buf_dw, sizeof(buf_dw));
-}
-
-static inline void
-gen6_3DSTATE_CONSTANT_VS(struct ilo_builder *builder,
-                         const uint32_t *bufs, const int *sizes,
-                         int num_bufs)
-{
-   gen6_3dstate_constant(builder, GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_VS,
-         bufs, sizes, num_bufs);
-}
-
-static inline void
-gen6_3DSTATE_CONSTANT_GS(struct ilo_builder *builder,
-                         const uint32_t *bufs, const int *sizes,
-                         int num_bufs)
-{
-   gen6_3dstate_constant(builder, GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_GS,
-         bufs, sizes, num_bufs);
-}
-
-static inline void
-gen7_3dstate_constant(struct ilo_builder *builder,
-                      int subop,
-                      const uint32_t *bufs, const int *sizes,
-                      int num_bufs)
-{
-   const uint32_t cmd = GEN6_RENDER_TYPE_RENDER |
-                        GEN6_RENDER_SUBTYPE_3D |
-                        subop;
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 11 : 7;
-   uint32_t payload[6], *dw;
-   int total_read_length, i;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   /* VS, HS, DS, GS, and PS variants */
-   assert(subop >= GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_VS &&
-          subop <= GEN7_RENDER_OPCODE_3DSTATE_CONSTANT_DS &&
-          subop != GEN6_RENDER_OPCODE_3DSTATE_SAMPLE_MASK);
-
-   assert(num_bufs <= 4);
-
-   payload[0] = 0;
-   payload[1] = 0;
-
-   total_read_length = 0;
-   for (i = 0; i < 4; i++) {
-      int read_len;
-
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 112:
-       *
-       *     "Constant buffers must be enabled in order from Constant Buffer 0
-       *      to Constant Buffer 3 within this command.  For example, it is
-       *      not allowed to enable Constant Buffer 1 by programming a
-       *      non-zero value in the VS Constant Buffer 1 Read Length without a
-       *      non-zero value in VS Constant Buffer 0 Read Length."
-       */
-      if (i >= num_bufs || !sizes[i]) {
-         for (; i < 4; i++) {
-            assert(i >= num_bufs || !sizes[i]);
-            payload[2 + i] = 0;
-         }
-         break;
-      }
-
-      /* read lengths are in 256-bit units */
-      read_len = (sizes[i] + 31) / 32;
-      /* the lower 5 bits are used for memory object control state */
-      assert(bufs[i] % 32 == 0);
-
-      payload[i / 2] |= read_len << ((i % 2) ? 16 : 0);
-      payload[2 + i] = bufs[i];
-
-      total_read_length += read_len;
-   }
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 113:
-    *
-    *     "The sum of all four read length fields must be less than or equal
-    *      to the size of 64"
-    */
-   assert(total_read_length <= 64);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = cmd | (cmd_len - 2);
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[1] = payload[0];
-      dw[2] = payload[1];
-      dw[3] = payload[2];
-      dw[4] = 0;
-      dw[5] = payload[3];
-      dw[6] = 0;
-      dw[7] = payload[4];
-      dw[8] = 0;
-      dw[9] = payload[5];
-      dw[10] = 0;
-   } else {
-      payload[2] |= builder->mocs << GEN7_CONSTANT_DW_ADDR_MOCS__SHIFT;
-
-      memcpy(&dw[1], payload, sizeof(payload));
-   }
-}
-
-static inline void
-gen7_3DSTATE_CONSTANT_VS(struct ilo_builder *builder,
-                         const uint32_t *bufs, const int *sizes,
-                         int num_bufs)
-{
-   gen7_3dstate_constant(builder, GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_VS,
-         bufs, sizes, num_bufs);
-}
-
-static inline void
-gen7_3DSTATE_CONSTANT_HS(struct ilo_builder *builder,
-                         const uint32_t *bufs, const int *sizes,
-                         int num_bufs)
-{
-   gen7_3dstate_constant(builder, GEN7_RENDER_OPCODE_3DSTATE_CONSTANT_HS,
-         bufs, sizes, num_bufs);
-}
-
-static inline void
-gen7_3DSTATE_CONSTANT_DS(struct ilo_builder *builder,
-                         const uint32_t *bufs, const int *sizes,
-                         int num_bufs)
-{
-   gen7_3dstate_constant(builder, GEN7_RENDER_OPCODE_3DSTATE_CONSTANT_DS,
-         bufs, sizes, num_bufs);
-}
-
-static inline void
-gen7_3DSTATE_CONSTANT_GS(struct ilo_builder *builder,
-                         const uint32_t *bufs, const int *sizes,
-                         int num_bufs)
-{
-   gen7_3dstate_constant(builder, GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_GS,
-         bufs, sizes, num_bufs);
-}
-
-static inline uint32_t
-gen6_BINDING_TABLE_STATE(struct ilo_builder *builder,
-                         const uint32_t *surface_states,
-                         int num_surface_states)
-{
-   const int state_align = 32;
-   const int state_len = num_surface_states;
-   uint32_t state_offset, *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 69:
-    *
-    *     "It is stored as an array of up to 256 elements..."
-    */
-   assert(num_surface_states <= 256);
-
-   if (!num_surface_states)
-      return 0;
-
-   state_offset = ilo_builder_surface_pointer(builder,
-         ILO_BUILDER_ITEM_BINDING_TABLE, state_align, state_len, &dw);
-   memcpy(dw, surface_states, state_len << 2);
-
-   return state_offset;
-}
-
-static inline uint32_t
-gen6_SURFACE_STATE(struct ilo_builder *builder,
-                   const struct ilo_state_surface *surf)
-{
-   int state_align, state_len;
-   uint32_t state_offset, *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      state_align = 64;
-      state_len = 13;
-
-      state_offset = ilo_builder_surface_pointer(builder,
-            ILO_BUILDER_ITEM_SURFACE, state_align, state_len, &dw);
-      memcpy(dw, surf->surface, state_len << 2);
-
-      if (surf->vma) {
-         const uint32_t mocs = (surf->scanout) ?
-            (GEN8_MOCS_MT_PTE | GEN8_MOCS_CT_L3) : builder->mocs;
-
-         dw[1] |= mocs << GEN8_SURFACE_DW1_MOCS__SHIFT;
-
-         ilo_builder_surface_reloc64(builder, state_offset, 8, surf->vma->bo,
-               surf->vma->bo_offset + surf->surface[8],
-               (surf->readonly) ? 0 : INTEL_RELOC_WRITE);
-      }
-   } else {
-      state_align = 32;
-      state_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(7)) ? 8 : 6;
-
-      state_offset = ilo_builder_surface_pointer(builder,
-            ILO_BUILDER_ITEM_SURFACE, state_align, state_len, &dw);
-      memcpy(dw, surf->surface, state_len << 2);
-
-      if (surf->vma) {
-         /*
-          * For scanouts, we should not enable caching in LLC.  Since we only
-          * enable that on Gen8+, we are fine here.
-          */
-         dw[5] |= builder->mocs << GEN6_SURFACE_DW5_MOCS__SHIFT;
-
-         ilo_builder_surface_reloc(builder, state_offset, 1, surf->vma->bo,
-               surf->vma->bo_offset + surf->surface[1],
-               (surf->readonly) ? 0 : INTEL_RELOC_WRITE);
-      }
-   }
-
-   return state_offset;
-}
-
-static inline uint32_t
-gen6_SAMPLER_STATE(struct ilo_builder *builder,
-                   const struct ilo_state_sampler *samplers,
-                   const uint32_t *sampler_border_colors,
-                   int sampler_count)
-{
-   const int state_align = 32;
-   const int state_len = 4 * sampler_count;
-   uint32_t state_offset, *dw;
-   int i;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 101:
-    *
-    *     "The sampler state is stored as an array of up to 16 elements..."
-    */
-   assert(sampler_count <= 16);
-
-   if (!sampler_count)
-      return 0;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 132:
-    *
-    *     "(Sampler Count of 3DSTATE_VS) Specifies how many samplers (in
-    *      multiples of 4) the vertex shader 0 kernel uses. Used only for
-    *      prefetching the associated sampler state entries.
-    *
-    * It also applies to other shader stages.
-    */
-   ilo_builder_dynamic_pad_top(builder, 4 * (4 - (sampler_count % 4)));
-
-   state_offset = ilo_builder_dynamic_pointer(builder,
-         ILO_BUILDER_ITEM_SAMPLER, state_align, state_len, &dw);
-
-   for (i = 0; i < sampler_count; i++) {
-      /* see sampler_set_gen6_SAMPLER_STATE() */
-      dw[0] = samplers[i].sampler[0];
-      dw[1] = samplers[i].sampler[1];
-      dw[3] = samplers[i].sampler[2];
-
-      assert(!(sampler_border_colors[i] & 0x1f));
-      dw[2] = sampler_border_colors[i];
-
-      dw += 4;
-   }
-
-   return state_offset;
-}
-
-static inline uint32_t
-gen6_SAMPLER_BORDER_COLOR_STATE(struct ilo_builder *builder,
-                                const struct ilo_state_sampler_border *border)
-{
-   const int state_align =
-      (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 64 : 32;
-   const int state_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(7)) ? 4 : 12;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   /*
-    * see border_set_gen6_SAMPLER_BORDER_COLOR_STATE() and
-    * border_set_gen7_SAMPLER_BORDER_COLOR_STATE()
-    */
-   return ilo_builder_dynamic_write(builder, ILO_BUILDER_ITEM_BLOB,
-         state_align, state_len, border->color);
-}
-
-static inline uint32_t
-gen6_push_constant_buffer(struct ilo_builder *builder,
-                          int size, void **pcb)
-{
-   /*
-    * For all VS, GS, FS, and CS push constant buffers, they must be aligned
-    * to 32 bytes, and their sizes are specified in 256-bit units.
-    */
-   const int state_align = 32;
-   const int state_len = align(size, 32) / 4;
-   uint32_t state_offset;
-   char *buf;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   state_offset = ilo_builder_dynamic_pointer(builder,
-         ILO_BUILDER_ITEM_BLOB, state_align, state_len, (uint32_t **) &buf);
-
-   /* zero out the unused range */
-   if (size < state_len * 4)
-      memset(&buf[size], 0, state_len * 4 - size);
-
-   if (pcb)
-      *pcb = buf;
-
-   return state_offset;
-}
-
-static inline uint32_t
-gen6_user_vertex_buffer(struct ilo_builder *builder,
-                        int size, const void *vertices)
-{
-   const int state_align = 8;
-   const int state_len = size / 4;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   assert(size % 4 == 0);
-
-   return ilo_builder_dynamic_write(builder, ILO_BUILDER_ITEM_BLOB,
-         state_align, state_len, vertices);
-}
-
-#endif /* ILO_BUILDER_3D_TOP_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_builder_blt.h b/src/gallium/drivers/ilo/core/ilo_builder_blt.h
deleted file mode 100644 (file)
index 4cc5598..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BUILDER_BLT_H
-#define ILO_BUILDER_BLT_H
-
-#include "genhw/genhw.h"
-#include "intel_winsys.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-#include "ilo_builder.h"
-
-enum gen6_blt_mask {
-   GEN6_BLT_MASK_8,
-   GEN6_BLT_MASK_16,
-   GEN6_BLT_MASK_32,
-   GEN6_BLT_MASK_32_LO,
-   GEN6_BLT_MASK_32_HI,
-};
-
-struct gen6_blt_bo {
-   struct intel_bo *bo;
-   uint32_t offset;
-   int16_t pitch;
-};
-
-struct gen6_blt_xy_bo {
-   struct intel_bo *bo;
-   uint32_t offset;
-   int16_t pitch;
-
-   enum gen_surface_tiling tiling;
-   int16_t x, y;
-};
-
-/*
- * From the Sandy Bridge PRM, volume 1 part 5, page 7:
- *
- *     "The BLT engine is capable of transferring very large quantities of
- *      graphics data. Any graphics data read from and written to the
- *      destination is permitted to represent a number of pixels that occupies
- *      up to 65,536 scan lines and up to 32,768 bytes per scan line at the
- *      destination. The maximum number of pixels that may be represented per
- *      scan line's worth of graphics data depends on the color depth."
- */
-static const int gen6_blt_max_bytes_per_scanline = 32768;
-static const int gen6_blt_max_scanlines = 65536;
-
-static inline uint32_t
-gen6_blt_translate_value_mask(enum gen6_blt_mask value_mask)
-{
-   switch (value_mask) {
-   case GEN6_BLT_MASK_8:  return GEN6_BLITTER_BR13_FORMAT_8;
-   case GEN6_BLT_MASK_16: return GEN6_BLITTER_BR13_FORMAT_565;
-   default:               return GEN6_BLITTER_BR13_FORMAT_8888;
-   }
-}
-
-static inline uint32_t
-gen6_blt_translate_value_cpp(enum gen6_blt_mask value_mask)
-{
-   switch (value_mask) {
-   case GEN6_BLT_MASK_8:  return 1;
-   case GEN6_BLT_MASK_16: return 2;
-   default:               return 4;
-   }
-}
-
-static inline uint32_t
-gen6_blt_translate_write_mask(enum gen6_blt_mask write_mask)
-{
-   switch (write_mask) {
-   case GEN6_BLT_MASK_32:    return GEN6_BLITTER_BR00_WRITE_RGB |
-                                    GEN6_BLITTER_BR00_WRITE_A;
-   case GEN6_BLT_MASK_32_LO: return GEN6_BLITTER_BR00_WRITE_RGB;
-   case GEN6_BLT_MASK_32_HI: return GEN6_BLITTER_BR00_WRITE_A;
-   default:                  return 0;
-   }
-}
-
-static inline void
-gen6_COLOR_BLT(struct ilo_builder *builder,
-               const struct gen6_blt_bo *dst, uint32_t pattern,
-               uint16_t width, uint16_t height, uint8_t rop,
-               enum gen6_blt_mask value_mask,
-               enum gen6_blt_mask write_mask)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 6 : 5;
-   const int cpp = gen6_blt_translate_value_cpp(value_mask);
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   assert(width < gen6_blt_max_bytes_per_scanline);
-   assert(height < gen6_blt_max_scanlines);
-   /* offsets are naturally aligned and pitches are dword-aligned */
-   assert(dst->offset % cpp == 0 && dst->pitch % 4 == 0);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_BLITTER_CMD(COLOR_BLT) |
-           gen6_blt_translate_write_mask(write_mask) |
-           (cmd_len - 2);
-   dw[1] = rop << GEN6_BLITTER_BR13_ROP__SHIFT |
-           gen6_blt_translate_value_mask(value_mask) |
-           dst->pitch;
-   dw[2] = height << 16 | width;
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[5] = pattern;
-
-      ilo_builder_batch_reloc64(builder, pos + 3,
-            dst->bo, dst->offset, INTEL_RELOC_WRITE);
-   } else {
-      dw[4] = pattern;
-
-      ilo_builder_batch_reloc(builder, pos + 3,
-            dst->bo, dst->offset, INTEL_RELOC_WRITE);
-   }
-}
-
-static inline void
-gen6_XY_COLOR_BLT(struct ilo_builder *builder,
-                  const struct gen6_blt_xy_bo *dst, uint32_t pattern,
-                  uint16_t width, uint16_t height, uint8_t rop,
-                  enum gen6_blt_mask value_mask,
-                  enum gen6_blt_mask write_mask)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 7 : 6;
-   const int cpp = gen6_blt_translate_value_cpp(value_mask);
-   int dst_align = 4, dst_pitch_shift = 0;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   assert(width * cpp < gen6_blt_max_bytes_per_scanline);
-   assert(height < gen6_blt_max_scanlines);
-   /* INT16_MAX */
-   assert(dst->x + width <= 32767 && dst->y + height <= 32767);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_BLITTER_CMD(XY_COLOR_BLT) |
-           gen6_blt_translate_write_mask(write_mask) |
-           (cmd_len - 2);
-
-   if (dst->tiling != GEN6_TILING_NONE) {
-      dw[0] |= GEN6_BLITTER_BR00_DST_TILED;
-
-      assert(dst->tiling == GEN6_TILING_X || dst->tiling == GEN6_TILING_Y);
-      dst_align = (dst->tiling == GEN6_TILING_Y) ? 128 : 512;
-      /* in dwords when tiled */
-      dst_pitch_shift = 2;
-   }
-
-   assert(dst->offset % dst_align == 0 && dst->pitch % dst_align == 0);
-
-   dw[1] = rop << GEN6_BLITTER_BR13_ROP__SHIFT |
-           gen6_blt_translate_value_mask(value_mask) |
-           dst->pitch >> dst_pitch_shift;
-   dw[2] = dst->y << 16 | dst->x;
-   dw[3] = (dst->y + height) << 16 | (dst->x + width);
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[6] = pattern;
-
-      ilo_builder_batch_reloc64(builder, pos + 4,
-            dst->bo, dst->offset, INTEL_RELOC_WRITE);
-   } else {
-      dw[5] = pattern;
-
-      ilo_builder_batch_reloc(builder, pos + 4,
-            dst->bo, dst->offset, INTEL_RELOC_WRITE);
-   }
-}
-
-static inline void
-gen6_SRC_COPY_BLT(struct ilo_builder *builder,
-                  const struct gen6_blt_bo *dst,
-                  const struct gen6_blt_bo *src,
-                  uint16_t width, uint16_t height, uint8_t rop,
-                  enum gen6_blt_mask value_mask,
-                  enum gen6_blt_mask write_mask)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 8 : 6;
-   const int cpp = gen6_blt_translate_value_cpp(value_mask);
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   assert(width < gen6_blt_max_bytes_per_scanline);
-   assert(height < gen6_blt_max_scanlines);
-   /* offsets are naturally aligned and pitches are dword-aligned */
-   assert(dst->offset % cpp == 0 && dst->pitch % 4 == 0);
-   assert(src->offset % cpp == 0 && src->pitch % 4 == 0);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_BLITTER_CMD(SRC_COPY_BLT) |
-           gen6_blt_translate_write_mask(write_mask) |
-           (cmd_len - 2);
-   dw[1] = rop << GEN6_BLITTER_BR13_ROP__SHIFT |
-           gen6_blt_translate_value_mask(value_mask) |
-           dst->pitch;
-   dw[2] = height << 16 | width;
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[5] = src->pitch;
-
-      ilo_builder_batch_reloc64(builder, pos + 3,
-            dst->bo, dst->offset, INTEL_RELOC_WRITE);
-      ilo_builder_batch_reloc64(builder, pos + 6, src->bo, src->offset, 0);
-   } else {
-      dw[4] = src->pitch;
-
-      ilo_builder_batch_reloc(builder, pos + 3,
-            dst->bo, dst->offset, INTEL_RELOC_WRITE);
-      ilo_builder_batch_reloc(builder, pos + 5, src->bo, src->offset, 0);
-   }
-}
-
-static inline void
-gen6_XY_SRC_COPY_BLT(struct ilo_builder *builder,
-                     const struct gen6_blt_xy_bo *dst,
-                     const struct gen6_blt_xy_bo *src,
-                     uint16_t width, uint16_t height, uint8_t rop,
-                     enum gen6_blt_mask value_mask,
-                     enum gen6_blt_mask write_mask)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 10 : 8;
-   const int cpp = gen6_blt_translate_value_cpp(value_mask);
-   int dst_align = 4, dst_pitch_shift = 0;
-   int src_align = 4, src_pitch_shift = 0;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   assert(width * cpp < gen6_blt_max_bytes_per_scanline);
-   assert(height < gen6_blt_max_scanlines);
-   /* INT16_MAX */
-   assert(dst->x + width <= 32767 && dst->y + height <= 32767);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_BLITTER_CMD(XY_SRC_COPY_BLT) |
-           gen6_blt_translate_write_mask(write_mask) |
-           (cmd_len - 2);
-
-   if (dst->tiling != GEN6_TILING_NONE) {
-      dw[0] |= GEN6_BLITTER_BR00_DST_TILED;
-
-      assert(dst->tiling == GEN6_TILING_X || dst->tiling == GEN6_TILING_Y);
-      dst_align = (dst->tiling == GEN6_TILING_Y) ? 128 : 512;
-      /* in dwords when tiled */
-      dst_pitch_shift = 2;
-   }
-
-   if (src->tiling != GEN6_TILING_NONE) {
-      dw[0] |= GEN6_BLITTER_BR00_SRC_TILED;
-
-      assert(src->tiling == GEN6_TILING_X || src->tiling == GEN6_TILING_Y);
-      src_align = (src->tiling == GEN6_TILING_Y) ? 128 : 512;
-      /* in dwords when tiled */
-      src_pitch_shift = 2;
-   }
-
-   assert(dst->offset % dst_align == 0 && dst->pitch % dst_align == 0);
-   assert(src->offset % src_align == 0 && src->pitch % src_align == 0);
-
-   dw[1] = rop << GEN6_BLITTER_BR13_ROP__SHIFT |
-           gen6_blt_translate_value_mask(value_mask) |
-           dst->pitch >> dst_pitch_shift;
-   dw[2] = dst->y << 16 | dst->x;
-   dw[3] = (dst->y + height) << 16 | (dst->x + width);
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[6] = src->y << 16 | src->x;
-      dw[7] = src->pitch >> src_pitch_shift;
-
-      ilo_builder_batch_reloc64(builder, pos + 4,
-            dst->bo, dst->offset, INTEL_RELOC_WRITE);
-      ilo_builder_batch_reloc64(builder, pos + 8, src->bo, src->offset, 0);
-   } else {
-      dw[5] = src->y << 16 | src->x;
-      dw[6] = src->pitch >> src_pitch_shift;
-
-      ilo_builder_batch_reloc(builder, pos + 4,
-            dst->bo, dst->offset, INTEL_RELOC_WRITE);
-      ilo_builder_batch_reloc(builder, pos + 7, src->bo, src->offset, 0);
-   }
-}
-
-#endif /* ILO_BUILDER_BLT_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_builder_decode.c b/src/gallium/drivers/ilo/core/ilo_builder_decode.c
deleted file mode 100644 (file)
index c5a98c9..0000000
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-#include "genhw/genhw.h"
-#include "../shader/toy_compiler.h"
-
-#include "intel_winsys.h"
-#include "ilo_builder.h"
-
-static const uint32_t *
-writer_pointer(const struct ilo_builder *builder,
-               enum ilo_builder_writer_type which,
-               unsigned offset)
-{
-   const struct ilo_builder_writer *writer = &builder->writers[which];
-   return (const uint32_t *) ((const char *) writer->ptr + offset);
-}
-
-static uint32_t _util_printf_format(5, 6)
-writer_dw(const struct ilo_builder *builder,
-          enum ilo_builder_writer_type which,
-          unsigned offset, unsigned dw_index,
-          const char *format, ...)
-{
-   const uint32_t *dw = writer_pointer(builder, which, offset);
-   va_list ap;
-   char desc[16];
-   int len;
-
-   ilo_printf("0x%08x:      0x%08x: ",
-         offset + (dw_index << 2), dw[dw_index]);
-
-   va_start(ap, format);
-   len = vsnprintf(desc, sizeof(desc), format, ap);
-   va_end(ap);
-
-   if (len >= sizeof(desc)) {
-      len = sizeof(desc) - 1;
-      desc[len] = '\0';
-   }
-
-   if (desc[len - 1] == '\n') {
-      desc[len - 1] = '\0';
-      ilo_printf("%8s: \n", desc);
-   } else {
-      ilo_printf("%8s: ", desc);
-   }
-
-   return dw[dw_index];
-}
-
-static void
-writer_decode_blob(const struct ilo_builder *builder,
-                   enum ilo_builder_writer_type which,
-                   const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t);
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   for (i = 0; i < count; i += 4) {
-      const uint32_t *dw = writer_pointer(builder, which, offset);
-
-      writer_dw(builder, which, offset, 0, "BLOB%d", i / 4);
-
-      switch (count - i) {
-      case 1:
-         ilo_printf("(%10.4f, %10c, %10c, %10c) "
-                    "(0x%08x, %10c, %10c, %10c)\n",
-                    uif(dw[0]), 'X', 'X', 'X',
-                        dw[0],  'X', 'X', 'X');
-         break;
-      case 2:
-         ilo_printf("(%10.4f, %10.4f, %10c, %10c) "
-                    "(0x%08x, 0x%08x, %10c, %10c)\n",
-                    uif(dw[0]), uif(dw[1]), 'X', 'X',
-                        dw[0],      dw[1],  'X', 'X');
-         break;
-      case 3:
-         ilo_printf("(%10.4f, %10.4f, %10.4f, %10c) "
-                    "(0x%08x, 0x%08x, 0x%08x, %10c)\n",
-                    uif(dw[0]), uif(dw[1]), uif(dw[2]), 'X',
-                        dw[0],      dw[1],      dw[2],  'X');
-         break;
-      default:
-         ilo_printf("(%10.4f, %10.4f, %10.4f, %10.4f) "
-                    "(0x%08x, 0x%08x, 0x%08x, 0x%08x)\n",
-                    uif(dw[0]), uif(dw[1]), uif(dw[2]), uif(dw[3]),
-                        dw[0],      dw[1],      dw[2],      dw[3]);
-         break;
-      }
-
-      offset += state_size * 4;
-   }
-}
-
-static void
-writer_decode_clip_viewport(const struct ilo_builder *builder,
-                            enum ilo_builder_writer_type which,
-                            const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t) * 4;
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   for (i = 0; i < count; i++) {
-      uint32_t dw;
-
-      dw = writer_dw(builder, which, offset, 0, "CLIP VP%d", i);
-      ilo_printf("xmin = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 1, "CLIP VP%d", i);
-      ilo_printf("xmax = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 2, "CLIP VP%d", i);
-      ilo_printf("ymin = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 3, "CLIP VP%d", i);
-      ilo_printf("ymax = %f\n", uif(dw));
-
-      offset += state_size;
-   }
-}
-
-static void
-writer_decode_sf_clip_viewport_gen7(const struct ilo_builder *builder,
-                                    enum ilo_builder_writer_type which,
-                                    const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t) * 16;
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   for (i = 0; i < count; i++) {
-      uint32_t dw;
-
-      dw = writer_dw(builder, which, offset, 0, "SF_CLIP VP%d", i);
-      ilo_printf("m00 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 1, "SF_CLIP VP%d", i);
-      ilo_printf("m11 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 2, "SF_CLIP VP%d", i);
-      ilo_printf("m22 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 3, "SF_CLIP VP%d", i);
-      ilo_printf("m30 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 4, "SF_CLIP VP%d", i);
-      ilo_printf("m31 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 5, "SF_CLIP VP%d", i);
-      ilo_printf("m32 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 8, "SF_CLIP VP%d", i);
-      ilo_printf("guardband xmin = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 9, "SF_CLIP VP%d", i);
-      ilo_printf("guardband xmax = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 10, "SF_CLIP VP%d", i);
-      ilo_printf("guardband ymin = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 11, "SF_CLIP VP%d", i);
-      ilo_printf("guardband ymax = %f\n", uif(dw));
-
-      if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-         dw = writer_dw(builder, which, offset, 12, "SF_CLIP VP%d", i);
-         ilo_printf("extent xmin = %f\n", uif(dw));
-
-         dw = writer_dw(builder, which, offset, 13, "SF_CLIP VP%d", i);
-         ilo_printf("extent xmax = %f\n", uif(dw));
-
-         dw = writer_dw(builder, which, offset, 14, "SF_CLIP VP%d", i);
-         ilo_printf("extent ymin = %f\n", uif(dw));
-
-         dw = writer_dw(builder, which, offset, 15, "SF_CLIP VP%d", i);
-         ilo_printf("extent ymax = %f\n", uif(dw));
-      }
-
-      offset += state_size;
-   }
-}
-
-static void
-writer_decode_sf_viewport_gen6(const struct ilo_builder *builder,
-                               enum ilo_builder_writer_type which,
-                               const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t) * 8;
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   for (i = 0; i < count; i++) {
-      uint32_t dw;
-
-      dw = writer_dw(builder, which, offset, 0, "SF VP%d", i);
-      ilo_printf("m00 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 1, "SF VP%d", i);
-      ilo_printf("m11 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 2, "SF VP%d", i);
-      ilo_printf("m22 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 3, "SF VP%d", i);
-      ilo_printf("m30 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 4, "SF VP%d", i);
-      ilo_printf("m31 = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 5, "SF VP%d", i);
-      ilo_printf("m32 = %f\n", uif(dw));
-
-      offset += state_size;
-   }
-}
-
-static void
-writer_decode_sf_viewport(const struct ilo_builder *builder,
-                          enum ilo_builder_writer_type which,
-                          const struct ilo_builder_item *item)
-{
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(7))
-      writer_decode_sf_clip_viewport_gen7(builder, which, item);
-   else
-      writer_decode_sf_viewport_gen6(builder, which, item);
-}
-
-static void
-writer_decode_scissor_rect(const struct ilo_builder *builder,
-                           enum ilo_builder_writer_type which,
-                           const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t) * 2;
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   for (i = 0; i < count; i++) {
-      uint32_t dw;
-
-      dw = writer_dw(builder, which, offset, 0, "SCISSOR%d", i);
-      ilo_printf("xmin %d, ymin %d\n",
-            GEN_EXTRACT(dw, GEN6_SCISSOR_DW0_MIN_X),
-            GEN_EXTRACT(dw, GEN6_SCISSOR_DW0_MIN_Y));
-
-      dw = writer_dw(builder, which, offset, 1, "SCISSOR%d", i);
-      ilo_printf("xmax %d, ymax %d\n",
-            GEN_EXTRACT(dw, GEN6_SCISSOR_DW1_MAX_X),
-            GEN_EXTRACT(dw, GEN6_SCISSOR_DW1_MAX_Y));
-
-      offset += state_size;
-   }
-}
-
-static void
-writer_decode_cc_viewport(const struct ilo_builder *builder,
-                          enum ilo_builder_writer_type which,
-                          const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t) * 2;
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   for (i = 0; i < count; i++) {
-      uint32_t dw;
-
-      dw = writer_dw(builder, which, offset, 0, "CC VP%d", i);
-      ilo_printf("min_depth = %f\n", uif(dw));
-
-      dw = writer_dw(builder, which, offset, 1, "CC VP%d", i);
-      ilo_printf("max_depth = %f\n", uif(dw));
-
-      offset += state_size;
-   }
-}
-
-static void
-writer_decode_color_calc(const struct ilo_builder *builder,
-                         enum ilo_builder_writer_type which,
-                         const struct ilo_builder_item *item)
-{
-   uint32_t dw;
-
-   dw = writer_dw(builder, which, item->offset, 0, "CC");
-   ilo_printf("alpha test format %s, round disable %d, "
-              "stencil ref %d, bf stencil ref %d\n",
-             GEN_EXTRACT(dw, GEN6_CC_DW0_ALPHATEST) ? "FLOAT32" : "UNORM8",
-             (bool) (dw & GEN6_CC_DW0_ROUND_DISABLE_DISABLE),
-             GEN_EXTRACT(dw, GEN6_CC_DW0_STENCIL_REF),
-             GEN_EXTRACT(dw, GEN6_CC_DW0_STENCIL1_REF));
-
-   writer_dw(builder, which, item->offset, 1, "CC\n");
-
-   dw = writer_dw(builder, which, item->offset, 2, "CC");
-   ilo_printf("constant red %f\n", uif(dw));
-
-   dw = writer_dw(builder, which, item->offset, 3, "CC");
-   ilo_printf("constant green %f\n", uif(dw));
-
-   dw = writer_dw(builder, which, item->offset, 4, "CC");
-   ilo_printf("constant blue %f\n", uif(dw));
-
-   dw = writer_dw(builder, which, item->offset, 5, "CC");
-   ilo_printf("constant alpha %f\n", uif(dw));
-}
-
-static void
-writer_decode_depth_stencil(const struct ilo_builder *builder,
-                            enum ilo_builder_writer_type which,
-                            const struct ilo_builder_item *item)
-{
-   uint32_t dw;
-
-   dw = writer_dw(builder, which, item->offset, 0, "D_S");
-   ilo_printf("stencil %sable, func %d, write %sable\n",
-         (dw & GEN6_ZS_DW0_STENCIL_TEST_ENABLE) ? "en" : "dis",
-         GEN_EXTRACT(dw, GEN6_ZS_DW0_STENCIL_FUNC),
-         (dw & GEN6_ZS_DW0_STENCIL_WRITE_ENABLE) ? "en" : "dis");
-
-   dw = writer_dw(builder, which, item->offset, 1, "D_S");
-   ilo_printf("stencil test mask 0x%x, write mask 0x%x\n",
-         GEN_EXTRACT(dw, GEN6_ZS_DW1_STENCIL_TEST_MASK),
-         GEN_EXTRACT(dw, GEN6_ZS_DW1_STENCIL_WRITE_MASK));
-
-   dw = writer_dw(builder, which, item->offset, 2, "D_S");
-   ilo_printf("depth test %sable, func %d, write %sable\n",
-         (dw & GEN6_ZS_DW2_DEPTH_TEST_ENABLE) ? "en" : "dis",
-         GEN_EXTRACT(dw, GEN6_ZS_DW2_DEPTH_FUNC),
-         (dw & GEN6_ZS_DW2_DEPTH_WRITE_ENABLE) ? "en" : "dis");
-}
-
-static void
-writer_decode_blend(const struct ilo_builder *builder,
-                    enum ilo_builder_writer_type which,
-                    const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t) * 2;
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      writer_dw(builder, which, offset, 0, "BLEND\n");
-      offset += 4;
-   }
-
-   for (i = 0; i < count; i++) {
-      writer_dw(builder, which, offset, 0, "BLEND%d\n", i);
-      writer_dw(builder, which, offset, 1, "BLEND%d\n", i);
-
-      offset += state_size;
-   }
-}
-
-static void
-writer_decode_sampler(const struct ilo_builder *builder,
-                      enum ilo_builder_writer_type which,
-                      const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t) * 4;
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   for (i = 0; i < count; i++) {
-      writer_dw(builder, which, offset, 0, "WM SAMP%d", i);
-      ilo_printf("filtering\n");
-
-      writer_dw(builder, which, offset, 1, "WM SAMP%d", i);
-      ilo_printf("wrapping, lod\n");
-
-      writer_dw(builder, which, offset, 2, "WM SAMP%d", i);
-      ilo_printf("default color pointer\n");
-
-      writer_dw(builder, which, offset, 3, "WM SAMP%d", i);
-      ilo_printf("chroma key, aniso\n");
-
-      offset += state_size;
-   }
-}
-
-static void
-writer_decode_interface_descriptor(const struct ilo_builder *builder,
-                                   enum ilo_builder_writer_type which,
-                                   const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t) * 8;
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   for (i = 0; i < count; i++) {
-      writer_dw(builder, which, offset, 0, "IDRT[%d]", i);
-      ilo_printf("kernel\n");
-
-      writer_dw(builder, which, offset, 1, "IDRT[%d]", i);
-      ilo_printf("spf, fp mode\n");
-
-      writer_dw(builder, which, offset, 2, "IDRT[%d]", i);
-      ilo_printf("sampler\n");
-
-      writer_dw(builder, which, offset, 3, "IDRT[%d]", i);
-      ilo_printf("binding table\n");
-
-      writer_dw(builder, which, offset, 4, "IDRT[%d]", i);
-      ilo_printf("curbe read len\n");
-
-      writer_dw(builder, which, offset, 5, "IDRT[%d]", i);
-      ilo_printf("rounding mode, slm size\n");
-
-      writer_dw(builder, which, offset, 6, "IDRT[%d]", i);
-      ilo_printf("cross-thread curbe read len\n");
-
-      writer_dw(builder, which, offset, 7, "IDRT[%d]", i);
-      ilo_printf("mbz\n");
-
-      offset += state_size;
-   }
-}
-
-static void
-writer_decode_surface_gen7(const struct ilo_builder *builder,
-                           enum ilo_builder_writer_type which,
-                           const struct ilo_builder_item *item)
-{
-   uint32_t dw;
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw = writer_dw(builder, which, item->offset, 0, "SURF");
-      ilo_printf("type 0x%x, format 0x%x, tiling %d, %s array\n",
-            GEN_EXTRACT(dw, GEN7_SURFACE_DW0_TYPE),
-            GEN_EXTRACT(dw, GEN7_SURFACE_DW0_FORMAT),
-            GEN_EXTRACT(dw, GEN8_SURFACE_DW0_TILING),
-            (dw & GEN7_SURFACE_DW0_IS_ARRAY) ? "is" : "not");
-
-      writer_dw(builder, which, item->offset, 1, "SURF");
-      ilo_printf("qpitch\n");
-   } else {
-      dw = writer_dw(builder, which, item->offset, 0, "SURF");
-      ilo_printf("type 0x%x, format 0x%x, tiling %d, %s array\n",
-            GEN_EXTRACT(dw, GEN7_SURFACE_DW0_TYPE),
-            GEN_EXTRACT(dw, GEN7_SURFACE_DW0_FORMAT),
-            GEN_EXTRACT(dw, GEN7_SURFACE_DW0_TILING),
-            (dw & GEN7_SURFACE_DW0_IS_ARRAY) ? "is" : "not");
-
-      writer_dw(builder, which, item->offset, 1, "SURF");
-      ilo_printf("offset\n");
-   }
-
-   dw = writer_dw(builder, which, item->offset, 2, "SURF");
-   ilo_printf("%dx%d size\n",
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW2_WIDTH),
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW2_HEIGHT));
-
-   dw = writer_dw(builder, which, item->offset, 3, "SURF");
-   ilo_printf("depth %d, pitch %d\n",
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW3_DEPTH),
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW3_PITCH));
-
-   dw = writer_dw(builder, which, item->offset, 4, "SURF");
-   ilo_printf("min array element %d, array extent %d\n",
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW4_MIN_ARRAY_ELEMENT),
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW4_RT_VIEW_EXTENT));
-
-   dw = writer_dw(builder, which, item->offset, 5, "SURF");
-   ilo_printf("mip base %d, mips %d, x,y offset: %d,%d\n",
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW5_MIN_LOD),
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW5_MIP_COUNT_LOD),
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW5_X_OFFSET),
-         GEN_EXTRACT(dw, GEN7_SURFACE_DW5_Y_OFFSET));
-
-   writer_dw(builder, which, item->offset, 6, "SURF\n");
-   writer_dw(builder, which, item->offset, 7, "SURF\n");
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      writer_dw(builder, which, item->offset, 8, "SURF\n");
-      writer_dw(builder, which, item->offset, 9, "SURF\n");
-      writer_dw(builder, which, item->offset, 10, "SURF\n");
-      writer_dw(builder, which, item->offset, 11, "SURF\n");
-      writer_dw(builder, which, item->offset, 12, "SURF\n");
-   }
-}
-
-static void
-writer_decode_surface_gen6(const struct ilo_builder *builder,
-                           enum ilo_builder_writer_type which,
-                           const struct ilo_builder_item *item)
-{
-   uint32_t dw;
-
-   dw = writer_dw(builder, which, item->offset, 0, "SURF");
-   ilo_printf("type 0x%x, format 0x%x\n",
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW0_TYPE),
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW0_FORMAT));
-
-   writer_dw(builder, which, item->offset, 1, "SURF");
-   ilo_printf("offset\n");
-
-   dw = writer_dw(builder, which, item->offset, 2, "SURF");
-   ilo_printf("%dx%d size, %d mips\n",
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW2_WIDTH),
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW2_HEIGHT),
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW2_MIP_COUNT_LOD));
-
-   dw = writer_dw(builder, which, item->offset, 3, "SURF");
-   ilo_printf("pitch %d, tiling %d\n",
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW3_PITCH),
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW3_TILING));
-
-   dw = writer_dw(builder, which, item->offset, 4, "SURF");
-   ilo_printf("mip base %d\n",
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW4_MIN_LOD));
-
-   dw = writer_dw(builder, which, item->offset, 5, "SURF");
-   ilo_printf("x,y offset: %d,%d\n",
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW5_X_OFFSET),
-         GEN_EXTRACT(dw, GEN6_SURFACE_DW5_Y_OFFSET));
-}
-
-static void
-writer_decode_surface(const struct ilo_builder *builder,
-                      enum ilo_builder_writer_type which,
-                      const struct ilo_builder_item *item)
-{
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(7))
-      writer_decode_surface_gen7(builder, which, item);
-   else
-      writer_decode_surface_gen6(builder, which, item);
-}
-
-static void
-writer_decode_binding_table(const struct ilo_builder *builder,
-                            enum ilo_builder_writer_type which,
-                            const struct ilo_builder_item *item)
-{
-   const unsigned state_size = sizeof(uint32_t) * 1;
-   const unsigned count = item->size / state_size;
-   unsigned offset = item->offset;
-   unsigned i;
-
-   for (i = 0; i < count; i++) {
-      writer_dw(builder, which, offset, 0, "BIND");
-      ilo_printf("BINDING_TABLE_STATE[%d]\n", i);
-
-      offset += state_size;
-   }
-}
-
-static void
-writer_decode_kernel(const struct ilo_builder *builder,
-                     enum ilo_builder_writer_type which,
-                     const struct ilo_builder_item *item)
-{
-   const void *kernel;
-
-   ilo_printf("0x%08x:\n", item->offset);
-   kernel = (const void *) writer_pointer(builder, which, item->offset);
-   toy_compiler_disassemble(builder->dev, kernel, item->size, true);
-}
-
-static const struct {
-   void (*func)(const struct ilo_builder *builder,
-                enum ilo_builder_writer_type which,
-                const struct ilo_builder_item *item);
-} writer_decode_table[ILO_BUILDER_ITEM_COUNT] = {
-   [ILO_BUILDER_ITEM_BLOB]                = { writer_decode_blob },
-   [ILO_BUILDER_ITEM_CLIP_VIEWPORT]       = { writer_decode_clip_viewport },
-   [ILO_BUILDER_ITEM_SF_VIEWPORT]         = { writer_decode_sf_viewport },
-   [ILO_BUILDER_ITEM_SCISSOR_RECT]        = { writer_decode_scissor_rect },
-   [ILO_BUILDER_ITEM_CC_VIEWPORT]         = { writer_decode_cc_viewport },
-   [ILO_BUILDER_ITEM_COLOR_CALC]          = { writer_decode_color_calc },
-   [ILO_BUILDER_ITEM_DEPTH_STENCIL]       = { writer_decode_depth_stencil },
-   [ILO_BUILDER_ITEM_BLEND]               = { writer_decode_blend },
-   [ILO_BUILDER_ITEM_SAMPLER]             = { writer_decode_sampler },
-   [ILO_BUILDER_ITEM_INTERFACE_DESCRIPTOR] = { writer_decode_interface_descriptor },
-   [ILO_BUILDER_ITEM_SURFACE]             = { writer_decode_surface },
-   [ILO_BUILDER_ITEM_BINDING_TABLE]       = { writer_decode_binding_table },
-   [ILO_BUILDER_ITEM_KERNEL]              = { writer_decode_kernel },
-};
-
-static void
-ilo_builder_writer_decode_items(struct ilo_builder *builder,
-                                enum ilo_builder_writer_type which)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-   int i;
-
-   if (!writer->item_used)
-      return;
-
-   writer->ptr = intel_bo_map(writer->bo, false);
-   if (!writer->ptr)
-      return;
-
-   for (i = 0; i < writer->item_used; i++) {
-      const struct ilo_builder_item *item = &writer->items[i];
-
-      writer_decode_table[item->type].func(builder, which, item);
-   }
-
-   intel_bo_unmap(writer->bo);
-   writer->ptr = NULL;
-}
-
-static void
-ilo_builder_writer_decode(struct ilo_builder *builder,
-                          enum ilo_builder_writer_type which)
-{
-   struct ilo_builder_writer *writer = &builder->writers[which];
-
-   assert(writer->bo && !writer->ptr);
-
-   switch (which) {
-   case ILO_BUILDER_WRITER_BATCH:
-      ilo_printf("decoding batch buffer: %d bytes\n", writer->used);
-      if (writer->used)
-         intel_winsys_decode_bo(builder->winsys, writer->bo, writer->used);
-
-      ilo_printf("decoding dynamic/surface buffer: %d states\n",
-            writer->item_used);
-      ilo_builder_writer_decode_items(builder, which);
-      break;
-   case ILO_BUILDER_WRITER_INSTRUCTION:
-      if (true) {
-         ilo_printf("skipping instruction buffer: %d kernels\n",
-               writer->item_used);
-      } else {
-         ilo_printf("decoding instruction buffer: %d kernels\n",
-               writer->item_used);
-
-         ilo_builder_writer_decode_items(builder, which);
-      }
-      break;
-   default:
-      break;
-   }
-}
-
-/**
- * Decode the builder according to the recorded items.  This can be called
- * only after a successful ilo_builder_end().
- */
-void
-ilo_builder_decode(struct ilo_builder *builder)
-{
-   int i;
-
-   assert(!builder->unrecoverable_error);
-
-   for (i = 0; i < ILO_BUILDER_WRITER_COUNT; i++)
-      ilo_builder_writer_decode(builder, i);
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_builder_media.h b/src/gallium/drivers/ilo/core/ilo_builder_media.h
deleted file mode 100644 (file)
index 7197104..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BUILDER_MEDIA_H
-#define ILO_BUILDER_MEDIA_H
-
-#include "genhw/genhw.h"
-#include "intel_winsys.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-#include "ilo_state_compute.h"
-#include "ilo_builder.h"
-
-static inline void
-gen6_MEDIA_VFE_STATE(struct ilo_builder *builder,
-                     const struct ilo_state_compute *compute)
-{
-   const uint8_t cmd_len = 8;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(MEDIA, MEDIA_VFE_STATE) | (cmd_len - 2);
-   /* see compute_set_gen6_MEDIA_VFE_STATE() */
-   dw[1] = compute->vfe[0];
-   dw[2] = compute->vfe[1];
-   dw[3] = 0;
-   dw[4] = compute->vfe[2];
-   dw[5] = 0;
-   dw[6] = 0;
-   dw[7] = 0;
-}
-
-static inline void
-gen6_MEDIA_CURBE_LOAD(struct ilo_builder *builder,
-                      uint32_t offset, unsigned size)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   assert(offset % 32 == 0 && size % 32 == 0);
-   /* GPU hangs if size is zero */
-   assert(size);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(MEDIA, MEDIA_CURBE_LOAD) | (cmd_len - 2);
-   dw[1] = 0;
-   dw[2] = size;
-   dw[3] = offset;
-}
-
-static inline void
-gen6_MEDIA_INTERFACE_DESCRIPTOR_LOAD(struct ilo_builder *builder,
-                                     uint32_t offset, unsigned size)
-{
-   const uint8_t cmd_len = 4;
-   const unsigned idrt_alloc =
-      ((ilo_dev_gen(builder->dev) >= ILO_GEN(7.5)) ? 64 : 32) * 32;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   assert(offset % 32 == 0 && size % 32 == 0);
-   assert(size && size <= idrt_alloc);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(MEDIA, MEDIA_INTERFACE_DESCRIPTOR_LOAD) |
-           (cmd_len - 2);
-   dw[1] = 0;
-   dw[2] = size;
-   dw[3] = offset;
-}
-
-static inline void
-gen6_MEDIA_STATE_FLUSH(struct ilo_builder *builder)
-{
-   const uint8_t cmd_len = 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(MEDIA, MEDIA_STATE_FLUSH) | (cmd_len - 2);
-   dw[1] = 0;
-}
-
-static inline void
-gen7_GPGPU_WALKER(struct ilo_builder *builder,
-                  const unsigned thread_group_offset[3],
-                  const unsigned thread_group_dim[3],
-                  unsigned thread_group_size,
-                  unsigned simd_size)
-{
-   const uint8_t cmd_len = 11;
-   uint32_t right_execmask, bottom_execmask;
-   unsigned thread_count;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 7.5);
-
-   assert(simd_size == 16 || simd_size == 8);
-
-   thread_count = (thread_group_size + simd_size - 1) / simd_size;
-   assert(thread_count <= 64);
-
-   right_execmask = thread_group_size % simd_size;
-   if (right_execmask)
-      right_execmask = (1 << right_execmask) - 1;
-   else
-      right_execmask = (1 << simd_size) - 1;
-
-   bottom_execmask = 0xffffffff;
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_RENDER_CMD(MEDIA, GPGPU_WALKER) | (cmd_len - 2);
-   dw[1] = 0; /* always first IDRT */
-
-   dw[2] = (thread_count - 1) << GEN7_GPGPU_DW2_THREAD_MAX_X__SHIFT;
-   if (simd_size == 16)
-      dw[2] |= GEN7_GPGPU_DW2_SIMD_SIZE_SIMD16;
-   else
-      dw[2] |= GEN7_GPGPU_DW2_SIMD_SIZE_SIMD8;
-
-   dw[3] = thread_group_offset[0];
-   dw[4] = thread_group_dim[0];
-   dw[5] = thread_group_offset[1];
-   dw[6] = thread_group_dim[1];
-   dw[7] = thread_group_offset[2];
-   dw[8] = thread_group_dim[2];
-
-   dw[9] = right_execmask;
-   dw[10] = bottom_execmask;
-}
-
-static inline uint32_t
-gen6_INTERFACE_DESCRIPTOR_DATA(struct ilo_builder *builder,
-                               const struct ilo_state_compute *compute,
-                               const uint32_t *kernel_offsets,
-                               const uint32_t *sampler_offsets,
-                               const uint32_t *binding_table_offsets)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 2, page 34:
-    *
-    *     "(Interface Descriptor Total Length) This field must have the same
-    *      alignment as the Interface Descriptor Data Start Address.
-    *
-    *      It must be DQWord (32-byte) aligned..."
-    *
-    * From the Sandy Bridge PRM, volume 2 part 2, page 35:
-    *
-    *     "(Interface Descriptor Data Start Address) Specifies the 32-byte
-    *      aligned address of the Interface Descriptor data."
-    */
-   const int state_align = 32;
-   const int state_len = (32 / 4) * compute->idrt_count;
-   uint32_t state_offset, *dw;
-   int i;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   state_offset = ilo_builder_dynamic_pointer(builder,
-         ILO_BUILDER_ITEM_INTERFACE_DESCRIPTOR, state_align, state_len, &dw);
-
-   for (i = 0; i < compute->idrt_count; i++) {
-      /* see compute_set_gen6_INTERFACE_DESCRIPTOR_DATA() */
-      dw[0] = compute->idrt[i][0] + kernel_offsets[i];
-      dw[1] = 0;
-      dw[2] = compute->idrt[i][1] |
-              sampler_offsets[i];
-      dw[3] = compute->idrt[i][2] |
-              binding_table_offsets[i];
-      dw[4] = compute->idrt[i][3];
-      dw[5] = compute->idrt[i][4];
-      dw[6] = compute->idrt[i][5];
-      dw[7] = 0;
-
-      dw += 8;
-   }
-
-   return state_offset;
-}
-
-#endif /* ILO_BUILDER_MEDIA_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_builder_mi.h b/src/gallium/drivers/ilo/core/ilo_builder_mi.h
deleted file mode 100644 (file)
index 7d1d2c9..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BUILDER_MI_H
-#define ILO_BUILDER_MI_H
-
-#include "genhw/genhw.h"
-#include "intel_winsys.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-#include "ilo_builder.h"
-
-static inline void
-gen6_MI_STORE_DATA_IMM(struct ilo_builder *builder,
-                       struct intel_bo *bo, uint32_t bo_offset,
-                       uint64_t val)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 6 : 5;
-   uint32_t reloc_flags = INTEL_RELOC_WRITE;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   assert(bo_offset % 8 == 0);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_MI_CMD(MI_STORE_DATA_IMM) | (cmd_len - 2);
-   /* must use GGTT on GEN6 as in PIPE_CONTROL */
-   if (ilo_dev_gen(builder->dev) == ILO_GEN(6)) {
-      dw[0] |= GEN6_MI_STORE_DATA_IMM_DW0_USE_GGTT;
-      reloc_flags |= INTEL_RELOC_GGTT;
-   }
-
-   dw[1] = 0; /* MBZ */
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[4] = (uint32_t) val;
-      dw[5] = (uint32_t) (val >> 32);
-
-      ilo_builder_batch_reloc64(builder, pos + 2, bo, bo_offset, reloc_flags);
-   } else {
-      dw[3] = (uint32_t) val;
-      dw[4] = (uint32_t) (val >> 32);
-
-      ilo_builder_batch_reloc(builder, pos + 2, bo, bo_offset, reloc_flags);
-   }
-}
-
-static inline void
-gen6_MI_LOAD_REGISTER_IMM(struct ilo_builder *builder,
-                          uint32_t reg, uint32_t val)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   assert(reg % 4 == 0);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_MI_CMD(MI_LOAD_REGISTER_IMM) | (cmd_len - 2);
-   dw[1] = reg;
-   dw[2] = val;
-}
-
-static inline void
-gen6_MI_STORE_REGISTER_MEM(struct ilo_builder *builder, uint32_t reg,
-                           struct intel_bo *bo, uint32_t bo_offset)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 4 : 3;
-   uint32_t reloc_flags = INTEL_RELOC_WRITE;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   assert(reg % 4 == 0 && bo_offset % 4 == 0);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_MI_CMD(MI_STORE_REGISTER_MEM) | (cmd_len - 2);
-   dw[1] = reg;
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      ilo_builder_batch_reloc64(builder, pos + 2, bo, bo_offset, reloc_flags);
-   } else {
-      /* must use GGTT on Gen6 as in PIPE_CONTROL */
-      if (ilo_dev_gen(builder->dev) == ILO_GEN(6)) {
-         dw[0] |= GEN6_MI_STORE_REGISTER_MEM_DW0_USE_GGTT;
-         reloc_flags |= INTEL_RELOC_GGTT;
-      }
-
-      ilo_builder_batch_reloc(builder, pos + 2, bo, bo_offset, reloc_flags);
-   }
-}
-
-static inline void
-gen6_MI_FLUSH_DW(struct ilo_builder *builder)
-{
-   const uint8_t cmd_len = 4;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_MI_CMD(MI_FLUSH_DW) | (cmd_len - 2);
-   dw[1] = 0;
-   dw[2] = 0;
-   dw[3] = 0;
-}
-
-static inline void
-gen6_MI_REPORT_PERF_COUNT(struct ilo_builder *builder,
-                          struct intel_bo *bo, uint32_t bo_offset,
-                          uint32_t report_id)
-{
-   const uint8_t cmd_len = 3;
-   uint32_t reloc_flags = INTEL_RELOC_WRITE;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   assert(bo_offset % 64 == 0);
-
-   /* must use GGTT on GEN6 as in PIPE_CONTROL */
-   if (ilo_dev_gen(builder->dev) == ILO_GEN(6)) {
-      bo_offset |= GEN6_MI_REPORT_PERF_COUNT_DW1_USE_GGTT;
-      reloc_flags |= INTEL_RELOC_GGTT;
-   }
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_MI_CMD(MI_REPORT_PERF_COUNT) | (cmd_len - 2);
-   dw[2] = report_id;
-
-   ilo_builder_batch_reloc(builder, pos + 1, bo, bo_offset, reloc_flags);
-}
-
-static inline void
-gen7_MI_LOAD_REGISTER_MEM(struct ilo_builder *builder, uint32_t reg,
-                          struct intel_bo *bo, uint32_t bo_offset)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 4 : 3;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 7, 8);
-
-   assert(reg % 4 == 0 && bo_offset % 4 == 0);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN7_MI_CMD(MI_LOAD_REGISTER_MEM) | (cmd_len - 2);
-   dw[1] = reg;
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8))
-      ilo_builder_batch_reloc64(builder, pos + 2, bo, bo_offset, 0);
-   else
-      ilo_builder_batch_reloc(builder, pos + 2, bo, bo_offset, 0);
-}
-
-/**
- * Add a MI_BATCH_BUFFER_END to the batch buffer.  Pad with MI_NOOP if
- * necessary.
- */
-static inline void
-gen6_mi_batch_buffer_end(struct ilo_builder *builder)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 1, page 107:
-    *
-    *     "The batch buffer must be QWord aligned and a multiple of QWords in
-    *      length."
-    */
-   const bool pad = !(builder->writers[ILO_BUILDER_WRITER_BATCH].used & 0x7);
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   if (pad) {
-      ilo_builder_batch_pointer(builder, 2, &dw);
-      dw[0] = GEN6_MI_CMD(MI_BATCH_BUFFER_END);
-      dw[1] = GEN6_MI_CMD(MI_NOOP);
-   } else {
-      ilo_builder_batch_pointer(builder, 1, &dw);
-      dw[0] = GEN6_MI_CMD(MI_BATCH_BUFFER_END);
-   }
-}
-
-#endif /* ILO_BUILDER_MI_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_builder_render.h b/src/gallium/drivers/ilo/core/ilo_builder_render.h
deleted file mode 100644 (file)
index e219149..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BUILDER_RENDER_H
-#define ILO_BUILDER_RENDER_H
-
-#include "genhw/genhw.h"
-#include "intel_winsys.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-#include "ilo_builder.h"
-
-static inline void
-gen6_STATE_SIP(struct ilo_builder *builder, uint32_t sip)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 3 : 2;
-   uint32_t *dw;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(COMMON, STATE_SIP) | (cmd_len - 2);
-   dw[1] = sip;
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8))
-      dw[2] = 0;
-}
-
-static inline void
-gen6_PIPELINE_SELECT(struct ilo_builder *builder, int pipeline)
-{
-   const uint8_t cmd_len = 1;
-   const uint32_t dw0 = GEN6_RENDER_CMD(SINGLE_DW, PIPELINE_SELECT) |
-                        pipeline;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   switch (pipeline) {
-   case GEN6_PIPELINE_SELECT_DW0_SELECT_3D:
-   case GEN6_PIPELINE_SELECT_DW0_SELECT_MEDIA:
-      break;
-   case GEN7_PIPELINE_SELECT_DW0_SELECT_GPGPU:
-      assert(ilo_dev_gen(builder->dev) >= ILO_GEN(7));
-      break;
-   default:
-      assert(!"unknown pipeline");
-      break;
-   }
-
-   ilo_builder_batch_write(builder, cmd_len, &dw0);
-}
-
-static inline void
-gen6_PIPE_CONTROL(struct ilo_builder *builder, uint32_t dw1,
-                  struct intel_bo *bo, uint32_t bo_offset,
-                  uint64_t imm)
-{
-   const uint8_t cmd_len = (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) ? 6 : 5;
-   uint32_t reloc_flags = INTEL_RELOC_WRITE;
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 8);
-
-   if (dw1 & GEN6_PIPE_CONTROL_CS_STALL) {
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 73:
-       *
-       *     "1 of the following must also be set (when CS stall is set):
-       *
-       *       * Depth Cache Flush Enable ([0] of DW1)
-       *       * Stall at Pixel Scoreboard ([1] of DW1)
-       *       * Depth Stall ([13] of DW1)
-       *       * Post-Sync Operation ([13] of DW1)
-       *       * Render Target Cache Flush Enable ([12] of DW1)
-       *       * Notify Enable ([8] of DW1)"
-       *
-       * From the Ivy Bridge PRM, volume 2 part 1, page 61:
-       *
-       *     "One of the following must also be set (when CS stall is set):
-       *
-       *       * Render Target Cache Flush Enable ([12] of DW1)
-       *       * Depth Cache Flush Enable ([0] of DW1)
-       *       * Stall at Pixel Scoreboard ([1] of DW1)
-       *       * Depth Stall ([13] of DW1)
-       *       * Post-Sync Operation ([13] of DW1)"
-       */
-      uint32_t bit_test = GEN6_PIPE_CONTROL_RENDER_CACHE_FLUSH |
-                          GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH |
-                          GEN6_PIPE_CONTROL_PIXEL_SCOREBOARD_STALL |
-                          GEN6_PIPE_CONTROL_DEPTH_STALL;
-
-      /* post-sync op */
-      bit_test |= GEN6_PIPE_CONTROL_WRITE_IMM |
-                  GEN6_PIPE_CONTROL_WRITE_PS_DEPTH_COUNT |
-                  GEN6_PIPE_CONTROL_WRITE_TIMESTAMP;
-
-      if (ilo_dev_gen(builder->dev) == ILO_GEN(6))
-         bit_test |= GEN6_PIPE_CONTROL_NOTIFY_ENABLE;
-
-      assert(dw1 & bit_test);
-   }
-
-   if (dw1 & GEN6_PIPE_CONTROL_DEPTH_STALL) {
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 73:
-       *
-       *     "Following bits must be clear (when Depth Stall is set):
-       *
-       *       * Render Target Cache Flush Enable ([12] of DW1)
-       *       * Depth Cache Flush Enable ([0] of DW1)"
-       */
-      assert(!(dw1 & (GEN6_PIPE_CONTROL_RENDER_CACHE_FLUSH |
-                      GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH)));
-   }
-
-   switch (dw1 & GEN6_PIPE_CONTROL_WRITE__MASK) {
-   case GEN6_PIPE_CONTROL_WRITE_PS_DEPTH_COUNT:
-   case GEN6_PIPE_CONTROL_WRITE_TIMESTAMP:
-      assert(!imm);
-      break;
-   default:
-      break;
-   }
-
-   assert(bo_offset % 8 == 0);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(3D, PIPE_CONTROL) | (cmd_len - 2);
-   dw[1] = dw1;
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      dw[4] = (uint32_t) imm;
-      dw[5] = (uint32_t) (imm >> 32);
-
-      if (bo) {
-         ilo_builder_batch_reloc64(builder, pos + 2,
-               bo, bo_offset, reloc_flags);
-      } else {
-         dw[2] = 0;
-         dw[3] = 0;
-      }
-
-   } else {
-      dw[3] = (uint32_t) imm;
-      dw[4] = (uint32_t) (imm >> 32);
-
-      if (bo) {
-         /*
-          * From the Sandy Bridge PRM, volume 1 part 3, page 19:
-          *
-          *     "[DevSNB] PPGTT memory writes by MI_* (such as
-          *      MI_STORE_DATA_IMM) and PIPE_CONTROL are not supported."
-          */
-         if (ilo_dev_gen(builder->dev) == ILO_GEN(6)) {
-            bo_offset |= GEN6_PIPE_CONTROL_DW2_USE_GGTT;
-            reloc_flags |= INTEL_RELOC_GGTT;
-         }
-
-         ilo_builder_batch_reloc(builder, pos + 2,
-               bo, bo_offset, reloc_flags);
-      } else {
-         dw[2] = 0;
-      }
-   }
-}
-
-static inline void
-ilo_builder_batch_patch_sba(struct ilo_builder *builder)
-{
-   const struct ilo_builder_writer *inst =
-      &builder->writers[ILO_BUILDER_WRITER_INSTRUCTION];
-
-   if (!builder->sba_instruction_pos)
-      return;
-
-   if (ilo_dev_gen(builder->dev) >= ILO_GEN(8)) {
-      ilo_builder_batch_reloc64(builder, builder->sba_instruction_pos,
-            inst->bo,
-            builder->mocs << GEN8_SBA_MOCS__SHIFT | GEN6_SBA_ADDR_MODIFIED,
-            0);
-   } else {
-      ilo_builder_batch_reloc(builder, builder->sba_instruction_pos, inst->bo,
-            builder->mocs << GEN6_SBA_MOCS__SHIFT | GEN6_SBA_ADDR_MODIFIED,
-            0);
-   }
-}
-
-/**
- * Add a STATE_BASE_ADDRESS to the batch buffer.  The relocation entry for the
- * instruction buffer is not added until ilo_builder_end() or next
- * gen6_state_base_address().
- */
-static inline void
-gen6_state_base_address(struct ilo_builder *builder, bool init_all)
-{
-   const uint8_t cmd_len = 10;
-   const struct ilo_builder_writer *bat =
-      &builder->writers[ILO_BUILDER_WRITER_BATCH];
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 7.5);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(COMMON, STATE_BASE_ADDRESS) | (cmd_len - 2);
-   dw[1] = builder->mocs << GEN6_SBA_MOCS__SHIFT |
-           builder->mocs << GEN6_SBA_DW1_GENERAL_STATELESS_MOCS__SHIFT |
-           init_all;
-
-   ilo_builder_batch_reloc(builder, pos + 2, bat->bo,
-         builder->mocs << GEN6_SBA_MOCS__SHIFT | GEN6_SBA_ADDR_MODIFIED,
-         0);
-   ilo_builder_batch_reloc(builder, pos + 3, bat->bo,
-         builder->mocs << GEN6_SBA_MOCS__SHIFT | GEN6_SBA_ADDR_MODIFIED,
-         0);
-
-   dw[4] = builder->mocs << GEN6_SBA_MOCS__SHIFT | init_all;
-
-   /*
-    * Since the instruction writer has WRITER_FLAG_APPEND set, it is tempting
-    * not to set Instruction Base Address.  The problem is that we do not know
-    * if the bo has been or will be moved by the kernel.  We need a relocation
-    * entry because of that.
-    *
-    * And since we also set WRITER_FLAG_GROW, we have to wait until
-    * ilo_builder_end(), when the final bo is known, to add the relocation
-    * entry.
-    */
-   ilo_builder_batch_patch_sba(builder);
-   builder->sba_instruction_pos = pos + 5;
-
-   /* skip range checks */
-   dw[6] = init_all;
-   dw[7] = 0xfffff000 + init_all;
-   dw[8] = 0xfffff000 + init_all;
-   dw[9] = init_all;
-}
-
-static inline void
-gen8_state_base_address(struct ilo_builder *builder, bool init_all)
-{
-   const uint8_t cmd_len = 16;
-   const struct ilo_builder_writer *bat =
-      &builder->writers[ILO_BUILDER_WRITER_BATCH];
-   uint32_t *dw;
-   unsigned pos;
-
-   ILO_DEV_ASSERT(builder->dev, 8, 8);
-
-   pos = ilo_builder_batch_pointer(builder, cmd_len, &dw);
-
-   dw[0] = GEN6_RENDER_CMD(COMMON, STATE_BASE_ADDRESS) | (cmd_len - 2);
-   dw[1] = builder->mocs << GEN8_SBA_MOCS__SHIFT | init_all;
-   dw[2] = 0;
-   dw[3] = builder->mocs << GEN8_SBA_DW3_STATELESS_MOCS__SHIFT;
-   ilo_builder_batch_reloc64(builder, pos + 4, bat->bo,
-         builder->mocs << GEN8_SBA_MOCS__SHIFT | GEN6_SBA_ADDR_MODIFIED,
-         0);
-   ilo_builder_batch_reloc64(builder, pos + 6, bat->bo,
-         builder->mocs << GEN8_SBA_MOCS__SHIFT | GEN6_SBA_ADDR_MODIFIED,
-         0);
-   dw[8] = builder->mocs << GEN8_SBA_MOCS__SHIFT | init_all;
-   dw[9] = 0;
-
-   ilo_builder_batch_patch_sba(builder);
-   builder->sba_instruction_pos = pos + 10;
-
-   /* skip range checks */
-   dw[12] = 0xfffff000 + init_all;
-   dw[13] = 0xfffff000 + init_all;
-   dw[14] = 0xfffff000 + init_all;
-   dw[15] = 0xfffff000 + init_all;
-}
-
-#endif /* ILO_BUILDER_RENDER_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_core.h b/src/gallium/drivers/ilo/core/ilo_core.h
deleted file mode 100644 (file)
index cbc568c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_CORE_H
-#define ILO_CORE_H
-
-#include "pipe/p_compiler.h"
-
-#include "util/u_math.h"
-
-#endif /* ILO_CORE_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_debug.c b/src/gallium/drivers/ilo/core/ilo_debug.c
deleted file mode 100644 (file)
index 168818b..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-
-static const struct debug_named_value ilo_debug_flags[] = {
-   { "batch",     ILO_DEBUG_BATCH,    "Dump batch/dynamic/surface/instruction buffers" },
-   { "vs",        ILO_DEBUG_VS,       "Dump vertex shaders" },
-   { "gs",        ILO_DEBUG_GS,       "Dump geometry shaders" },
-   { "fs",        ILO_DEBUG_FS,       "Dump fragment shaders" },
-   { "cs",        ILO_DEBUG_CS,       "Dump compute shaders" },
-   { "draw",      ILO_DEBUG_DRAW,     "Show draw information" },
-   { "submit",    ILO_DEBUG_SUBMIT,   "Show batch buffer submissions" },
-   { "hang",      ILO_DEBUG_HANG,     "Detect GPU hangs" },
-   { "nohw",      ILO_DEBUG_NOHW,     "Do not send commands to HW" },
-   { "nocache",   ILO_DEBUG_NOCACHE,  "Always invalidate HW caches" },
-   { "nohiz",     ILO_DEBUG_NOHIZ,    "Disable HiZ" },
-   DEBUG_NAMED_VALUE_END
-};
-
-int ilo_debug;
-
-void
-ilo_debug_init(const char *name)
-{
-   ilo_debug = debug_get_flags_option(name, ilo_debug_flags, 0);
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_debug.h b/src/gallium/drivers/ilo/core/ilo_debug.h
deleted file mode 100644 (file)
index 532a2aa..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_DEBUG_H
-#define ILO_DEBUG_H
-
-#include "util/u_debug.h"
-
-#include "ilo_core.h"
-
-/* enable debug flags affecting hot pathes only with debug builds */
-#ifdef DEBUG
-#define ILO_DEBUG_HOT 1
-#else
-#define ILO_DEBUG_HOT 0
-#endif
-
-enum ilo_debug {
-   ILO_DEBUG_BATCH     = 1 << 0,
-   ILO_DEBUG_VS        = 1 << 1,
-   ILO_DEBUG_GS        = 1 << 2,
-   ILO_DEBUG_FS        = 1 << 3,
-   ILO_DEBUG_CS        = 1 << 4,
-   ILO_DEBUG_DRAW      = ILO_DEBUG_HOT << 5,
-   ILO_DEBUG_SUBMIT    = 1 << 6,
-   ILO_DEBUG_HANG      = 1 << 7,
-
-   /* flags that affect the behaviors of the driver */
-   ILO_DEBUG_NOHW      = 1 << 20,
-   ILO_DEBUG_NOCACHE   = 1 << 21,
-   ILO_DEBUG_NOHIZ     = 1 << 22,
-};
-
-extern int ilo_debug;
-
-void
-ilo_debug_init(const char *name);
-
-/**
- * Print a message, for dumping or debugging.
- */
-static inline void _util_printf_format(1, 2)
-ilo_printf(const char *format, ...)
-{
-   va_list ap;
-
-   va_start(ap, format);
-   _debug_vprintf(format, ap);
-   va_end(ap);
-}
-
-/**
- * Print a critical error.
- */
-static inline void _util_printf_format(1, 2)
-ilo_err(const char *format, ...)
-{
-   va_list ap;
-
-   va_start(ap, format);
-   _debug_vprintf(format, ap);
-   va_end(ap);
-}
-
-/**
- * Print a warning, silenced for release builds.
- */
-static inline void _util_printf_format(1, 2)
-ilo_warn(const char *format, ...)
-{
-#ifdef DEBUG
-   va_list ap;
-
-   va_start(ap, format);
-   _debug_vprintf(format, ap);
-   va_end(ap);
-#else
-#endif
-}
-
-static inline bool
-ilo_is_zeroed(const void *ptr, size_t size)
-{
-#ifdef DEBUG
-   size_t i;
-
-   for (i = 0; i < size; i++) {
-      if (*((const char *) ptr) != 0)
-         return false;
-   }
-
-   return true;
-#else
-   return true;
-#endif
-}
-
-#endif /* ILO_DEBUG_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_dev.c b/src/gallium/drivers/ilo/core/ilo_dev.c
deleted file mode 100644 (file)
index 925322a..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h"
-#include "intel_winsys.h"
-
-#include "ilo_debug.h"
-#include "ilo_dev.h"
-
-/**
- * Initialize the \p dev from \p winsys.
- */
-bool
-ilo_dev_init(struct ilo_dev *dev, struct intel_winsys *winsys)
-{
-   const struct intel_winsys_info *info;
-
-   assert(ilo_is_zeroed(dev, sizeof(*dev)));
-
-   info = intel_winsys_get_info(winsys);
-
-   dev->winsys = winsys;
-   dev->devid = info->devid;
-   dev->aperture_total = info->aperture_total;
-   dev->aperture_mappable = info->aperture_mappable;
-   dev->has_llc = info->has_llc;
-   dev->has_address_swizzling = info->has_address_swizzling;
-   dev->has_logical_context = info->has_logical_context;
-   dev->has_ppgtt = info->has_ppgtt;
-   dev->has_timestamp = info->has_timestamp;
-   dev->has_gen7_sol_reset = info->has_gen7_sol_reset;
-
-   if (!dev->has_logical_context) {
-      ilo_err("missing hardware logical context support\n");
-      return false;
-   }
-
-   /*
-    * PIPE_CONTROL and MI_* use PPGTT writes on GEN7+ and privileged GGTT
-    * writes on GEN6.
-    *
-    * From the Sandy Bridge PRM, volume 1 part 3, page 101:
-    *
-    *     "[DevSNB] When Per-Process GTT Enable is set, it is assumed that all
-    *      code is in a secure environment, independent of address space.
-    *      Under this condition, this bit only specifies the address space
-    *      (GGTT or PPGTT). All commands are executed "as-is""
-    *
-    * We need PPGTT to be enabled on GEN6 too.
-    */
-   if (!dev->has_ppgtt) {
-      /* experiments show that it does not really matter... */
-      ilo_warn("PPGTT disabled\n");
-   }
-
-   if (gen_is_bdw(info->devid) || gen_is_chv(info->devid)) {
-      dev->gen_opaque = ILO_GEN(8);
-      dev->gt = (gen_is_bdw(info->devid)) ? gen_get_bdw_gt(info->devid) : 1;
-      /* XXX random values */
-      if (dev->gt == 3) {
-         dev->eu_count = 48;
-         dev->thread_count = 336;
-         dev->urb_size = 384 * 1024;
-      } else if (dev->gt == 2) {
-         dev->eu_count = 24;
-         dev->thread_count = 168;
-         dev->urb_size = 384 * 1024;
-      } else {
-         dev->eu_count = 12;
-         dev->thread_count = 84;
-         dev->urb_size = 192 * 1024;
-      }
-   } else if (gen_is_hsw(info->devid)) {
-      /*
-       * From the Haswell PRM, volume 4, page 8:
-       *
-       *     "Description                    GT3      GT2      GT1.5    GT1
-       *      (...)
-       *      EUs (Total)                    40       20       12       10
-       *      Threads (Total)                280      140      84       70
-       *      (...)
-       *      URB Size (max, within L3$)     512KB    256KB    256KB    128KB
-       */
-      dev->gen_opaque = ILO_GEN(7.5);
-      dev->gt = gen_get_hsw_gt(info->devid);
-      if (dev->gt == 3) {
-         dev->eu_count = 40;
-         dev->thread_count = 280;
-         dev->urb_size = 512 * 1024;
-      } else if (dev->gt == 2) {
-         dev->eu_count = 20;
-         dev->thread_count = 140;
-         dev->urb_size = 256 * 1024;
-      } else {
-         dev->eu_count = 10;
-         dev->thread_count = 70;
-         dev->urb_size = 128 * 1024;
-      }
-   } else if (gen_is_ivb(info->devid) || gen_is_vlv(info->devid)) {
-      /*
-       * From the Ivy Bridge PRM, volume 1 part 1, page 18:
-       *
-       *     "Device             # of EUs        #Threads/EU
-       *      Ivy Bridge (GT2)   16              8
-       *      Ivy Bridge (GT1)   6               6"
-       *
-       * From the Ivy Bridge PRM, volume 4 part 2, page 17:
-       *
-       *     "URB Size    URB Rows    URB Rows when SLM Enabled
-       *      128k        4096        2048
-       *      256k        8096        4096"
-       */
-      dev->gen_opaque = ILO_GEN(7);
-      dev->gt = (gen_is_ivb(info->devid)) ? gen_get_ivb_gt(info->devid) : 1;
-      if (dev->gt == 2) {
-         dev->eu_count = 16;
-         dev->thread_count = 128;
-         dev->urb_size = 256 * 1024;
-      } else {
-         dev->eu_count = 6;
-         dev->thread_count = 36;
-         dev->urb_size = 128 * 1024;
-      }
-   } else if (gen_is_snb(info->devid)) {
-      /*
-       * From the Sandy Bridge PRM, volume 1 part 1, page 22:
-       *
-       *     "Device             # of EUs        #Threads/EU
-       *      SNB GT2            12              5
-       *      SNB GT1            6               4"
-       *
-       * From the Sandy Bridge PRM, volume 4 part 2, page 18:
-       *
-       *     "[DevSNB]: The GT1 product's URB provides 32KB of storage,
-       *      arranged as 1024 256-bit rows. The GT2 product's URB provides
-       *      64KB of storage, arranged as 2048 256-bit rows. A row
-       *      corresponds in size to an EU GRF register. Read/write access to
-       *      the URB is generally supported on a row-granular basis."
-       */
-      dev->gen_opaque = ILO_GEN(6);
-      dev->gt = gen_get_snb_gt(info->devid);
-      if (dev->gt == 2) {
-         dev->eu_count = 12;
-         dev->thread_count = 60;
-         dev->urb_size = 64 * 1024;
-      } else {
-         dev->eu_count = 6;
-         dev->thread_count = 24;
-         dev->urb_size = 32 * 1024;
-      }
-   } else {
-      ilo_err("unknown GPU generation\n");
-      return false;
-   }
-
-   return true;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_dev.h b/src/gallium/drivers/ilo/core/ilo_dev.h
deleted file mode 100644 (file)
index a9f9b17..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_DEV_H
-#define ILO_DEV_H
-
-#include "ilo_core.h"
-
-#define ILO_GEN(gen) ((int) (gen * 100))
-
-#define ILO_DEV_ASSERT(dev, min_gen, max_gen) \
-   ilo_dev_assert(dev, ILO_GEN(min_gen), ILO_GEN(max_gen))
-
-struct intel_winsys;
-
-struct ilo_dev {
-   struct intel_winsys *winsys;
-
-   /* these mirror intel_winsys_info */
-   int devid;
-   size_t aperture_total;
-   size_t aperture_mappable;
-   bool has_llc;
-   bool has_address_swizzling;
-   bool has_logical_context;
-   bool has_ppgtt;
-   bool has_timestamp;
-   bool has_gen7_sol_reset;
-
-   /* use ilo_dev_gen() to access */
-   int gen_opaque;
-
-   int gt;
-   int eu_count;
-   int thread_count;
-   int urb_size;
-};
-
-bool
-ilo_dev_init(struct ilo_dev *dev, struct intel_winsys *winsys);
-
-static inline int
-ilo_dev_gen(const struct ilo_dev *dev)
-{
-   return dev->gen_opaque;
-}
-
-static inline void
-ilo_dev_assert(const struct ilo_dev *dev, int min_opqaue, int max_opqaue)
-{
-   assert(dev->gen_opaque >= min_opqaue && dev->gen_opaque <= max_opqaue);
-}
-
-#endif /* ILO_DEV_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_image.c b/src/gallium/drivers/ilo/core/ilo_image.c
deleted file mode 100644 (file)
index 6eefc8f..0000000
+++ /dev/null
@@ -1,1451 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_image.h"
-
-enum {
-   IMAGE_TILING_NONE = 1 << GEN6_TILING_NONE,
-   IMAGE_TILING_X    = 1 << GEN6_TILING_X,
-   IMAGE_TILING_Y    = 1 << GEN6_TILING_Y,
-   IMAGE_TILING_W    = 1 << GEN8_TILING_W,
-
-   IMAGE_TILING_ALL  = (IMAGE_TILING_NONE |
-                        IMAGE_TILING_X |
-                        IMAGE_TILING_Y |
-                        IMAGE_TILING_W)
-};
-
-struct ilo_image_layout {
-   enum ilo_image_walk_type walk;
-   bool interleaved_samples;
-
-   uint8_t valid_tilings;
-   enum gen_surface_tiling tiling;
-
-   enum ilo_image_aux_type aux;
-
-   int align_i;
-   int align_j;
-
-   struct ilo_image_lod *lods;
-   int walk_layer_h0;
-   int walk_layer_h1;
-   int walk_layer_height;
-   int monolithic_width;
-   int monolithic_height;
-};
-
-static enum ilo_image_walk_type
-image_get_gen6_walk(const struct ilo_dev *dev,
-                    const struct ilo_image_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   /* TODO we want LODs to be page-aligned */
-   if (info->type == GEN6_SURFTYPE_3D)
-      return ILO_IMAGE_WALK_3D;
-
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 1, page 115:
-    *
-    *     "The separate stencil buffer does not support mip mapping, thus the
-    *      storage for LODs other than LOD 0 is not needed. The following
-    *      QPitch equation applies only to the separate stencil buffer:
-    *
-    *        QPitch = h_0"
-    *
-    * Use ILO_IMAGE_WALK_LOD and manually offset to the (page-aligned) levels
-    * when bound.
-    */
-   if (info->bind_zs && info->format == GEN6_FORMAT_R8_UINT)
-      return ILO_IMAGE_WALK_LOD;
-
-   /* compact spacing is not supported otherwise */
-   return ILO_IMAGE_WALK_LAYER;
-}
-
-static enum ilo_image_walk_type
-image_get_gen7_walk(const struct ilo_dev *dev,
-                    const struct ilo_image_info *info)
-{
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (info->type == GEN6_SURFTYPE_3D)
-      return ILO_IMAGE_WALK_3D;
-
-   /*
-    * From the Ivy Bridge PRM, volume 1 part 1, page 111:
-    *
-    *     "note that the depth buffer and stencil buffer have an implied value
-    *      of ARYSPC_FULL"
-    *
-    * From the Ivy Bridge PRM, volume 4 part 1, page 66:
-    *
-    *     "If Multisampled Surface Storage Format is MSFMT_MSS and Number of
-    *      Multisamples is not MULTISAMPLECOUNT_1, this field (Surface Array
-    *      Spacing) must be set to ARYSPC_LOD0."
-    */
-   if (info->sample_count > 1)
-      assert(info->level_count == 1);
-   return (info->bind_zs || info->level_count > 1) ?
-      ILO_IMAGE_WALK_LAYER : ILO_IMAGE_WALK_LOD;
-}
-
-static bool
-image_get_gen6_interleaved_samples(const struct ilo_dev *dev,
-                                   const struct ilo_image_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * Gen6 supports only interleaved samples.  It is not explicitly stated,
-    * but on Gen7+, render targets are expected to be UMS/CMS (samples
-    * non-interleaved) and depth/stencil buffers are expected to be IMS
-    * (samples interleaved).
-    *
-    * See "Multisampled Surface Storage Format" field of SURFACE_STATE.
-    */
-   return (ilo_dev_gen(dev) == ILO_GEN(6) || info->bind_zs);
-}
-
-static uint8_t
-image_get_gen6_valid_tilings(const struct ilo_dev *dev,
-                             const struct ilo_image_info *info)
-{
-   uint8_t valid_tilings = IMAGE_TILING_ALL;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (info->valid_tilings)
-      valid_tilings &= info->valid_tilings;
-
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 2, page 32:
-    *
-    *     "Display/Overlay   Y-Major not supported.
-    *                        X-Major required for Async Flips"
-    */
-   if (unlikely(info->bind_scanout))
-      valid_tilings &= IMAGE_TILING_X;
-
-   /*
-    * From the Sandy Bridge PRM, volume 3 part 2, page 158:
-    *
-    *     "The cursor surface address must be 4K byte aligned. The cursor must
-    *      be in linear memory, it cannot be tiled."
-    */
-   if (unlikely(info->bind_cursor))
-      valid_tilings &= IMAGE_TILING_NONE;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 318:
-    *
-    *     "[DevSNB+]: This field (Tiled Surface) must be set to TRUE. Linear
-    *      Depth Buffer is not supported."
-    *
-    *     "The Depth Buffer, if tiled, must use Y-Major tiling."
-    *
-    * From the Sandy Bridge PRM, volume 1 part 2, page 22:
-    *
-    *     "W-Major Tile Format is used for separate stencil."
-    */
-   if (info->bind_zs) {
-      if (info->format == GEN6_FORMAT_R8_UINT)
-         valid_tilings &= IMAGE_TILING_W;
-      else
-         valid_tilings &= IMAGE_TILING_Y;
-   }
-
-   if (info->bind_surface_sampler ||
-       info->bind_surface_dp_render ||
-       info->bind_surface_dp_typed) {
-      /*
-       * From the Haswell PRM, volume 2d, page 233:
-       *
-       *     "If Number of Multisamples is not MULTISAMPLECOUNT_1, this field
-       *      (Tiled Surface) must be TRUE."
-       */
-      if (info->sample_count > 1)
-         valid_tilings &= ~IMAGE_TILING_NONE;
-
-      if (ilo_dev_gen(dev) < ILO_GEN(8))
-         valid_tilings &= ~IMAGE_TILING_W;
-   }
-
-   if (info->bind_surface_dp_render) {
-      /*
-       * From the Sandy Bridge PRM, volume 1 part 2, page 32:
-       *
-       *     "NOTE: 128BPE Format Color buffer ( render target ) MUST be
-       *      either TileX or Linear."
-       *
-       * From the Haswell PRM, volume 5, page 32:
-       *
-       *     "NOTE: 128 BPP format color buffer (render target) supports
-       *      Linear, TiledX and TiledY."
-       */
-      if (ilo_dev_gen(dev) < ILO_GEN(7.5) && info->block_size == 16)
-         valid_tilings &= ~IMAGE_TILING_Y;
-
-      /*
-       * From the Ivy Bridge PRM, volume 4 part 1, page 63:
-       *
-       *     "This field (Surface Vertical Aligment) must be set to VALIGN_4
-       *      for all tiled Y Render Target surfaces."
-       *
-       *     "VALIGN_4 is not supported for surface format R32G32B32_FLOAT."
-       *
-       * R32G32B32_FLOAT is not renderable and we only need an assert() here.
-       */
-      if (ilo_dev_gen(dev) >= ILO_GEN(7) && ilo_dev_gen(dev) <= ILO_GEN(7.5))
-         assert(info->format != GEN6_FORMAT_R32G32B32_FLOAT);
-   }
-
-   return valid_tilings;
-}
-
-static uint64_t
-image_get_gen6_estimated_size(const struct ilo_dev *dev,
-                              const struct ilo_image_info *info)
-{
-   /* padding not considered */
-   const uint64_t slice_size = info->width * info->height *
-      info->block_size / (info->block_width * info->block_height);
-   const uint64_t slice_count =
-      info->depth * info->array_size * info->sample_count;
-   const uint64_t estimated_size = slice_size * slice_count;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (info->level_count == 1)
-      return estimated_size;
-   else
-      return estimated_size * 4 / 3;
-}
-
-static enum gen_surface_tiling
-image_get_gen6_tiling(const struct ilo_dev *dev,
-                      const struct ilo_image_info *info,
-                      uint8_t valid_tilings)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   switch (valid_tilings) {
-   case IMAGE_TILING_NONE:
-      return GEN6_TILING_NONE;
-   case IMAGE_TILING_X:
-      return GEN6_TILING_X;
-   case IMAGE_TILING_Y:
-      return GEN6_TILING_Y;
-   case IMAGE_TILING_W:
-      return GEN8_TILING_W;
-   default:
-      break;
-   }
-
-   /*
-    * X-tiling has the property that vertically adjacent pixels are usually in
-    * the same page.  When the image size is less than a page, the image
-    * height is 1, or when the image is not accessed in blocks, there is no
-    * reason to tile.
-    *
-    * Y-tiling is similar, where vertically adjacent pixels are usually in the
-    * same cacheline.
-    */
-   if (valid_tilings & IMAGE_TILING_NONE) {
-      const uint64_t estimated_size =
-         image_get_gen6_estimated_size(dev, info);
-
-      if (info->height == 1 || !(info->bind_surface_sampler ||
-                                 info->bind_surface_dp_render ||
-                                 info->bind_surface_dp_typed))
-         return GEN6_TILING_NONE;
-
-      if (estimated_size <= 64 || (info->prefer_linear_threshold &&
-               estimated_size > info->prefer_linear_threshold))
-         return GEN6_TILING_NONE;
-
-      if (estimated_size <= 2048)
-         valid_tilings &= ~IMAGE_TILING_X;
-   }
-
-   return (valid_tilings & IMAGE_TILING_Y) ? GEN6_TILING_Y :
-          (valid_tilings & IMAGE_TILING_X) ? GEN6_TILING_X :
-          GEN6_TILING_NONE;
-}
-
-static bool
-image_get_gen6_hiz_enable(const struct ilo_dev *dev,
-                          const struct ilo_image_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* depth buffer? */
-   if (!info->bind_zs ||
-       info->format == GEN6_FORMAT_R8_UINT ||
-       info->interleaved_stencil)
-      return false;
-
-   /* we want to be able to force 8x4 alignments */
-   if (info->type == GEN6_SURFTYPE_1D)
-      return false;
-
-   if (info->aux_disable)
-      return false;
-
-   if (ilo_debug & ILO_DEBUG_NOHIZ)
-      return false;
-
-   return true;
-}
-
-static bool
-image_get_gen7_mcs_enable(const struct ilo_dev *dev,
-                          const struct ilo_image_info *info,
-                          enum gen_surface_tiling tiling)
-{
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (!info->bind_surface_sampler && !info->bind_surface_dp_render)
-      return false;
-
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 77:
-    *
-    *     "For Render Target and Sampling Engine Surfaces:If the surface is
-    *      multisampled (Number of Multisamples any value other than
-    *      MULTISAMPLECOUNT_1), this field (MCS Enable) must be enabled."
-    *
-    *     "This field must be set to 0 for all SINT MSRTs when all RT channels
-    *      are not written"
-    */
-   if (info->sample_count > 1) {
-      if (ilo_dev_gen(dev) < ILO_GEN(8))
-         assert(!info->is_integer);
-      return true;
-   }
-
-   if (info->aux_disable)
-      return false;
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 326:
-    *
-    *     "When MCS is buffer is used for color clear of non-multisampler
-    *      render target, the following restrictions apply.
-    *      - Support is limited to tiled render targets.
-    *      - Support is for non-mip-mapped and non-array surface types only.
-    *      - Clear is supported only on the full RT; i.e., no partial clear or
-    *        overlapping clears.
-    *      - MCS buffer for non-MSRT is supported only for RT formats 32bpp,
-    *        64bpp and 128bpp.
-    *      ..."
-    *
-    * How about SURFTYPE_3D?
-    */
-   if (!info->bind_surface_dp_render ||
-       tiling == GEN6_TILING_NONE ||
-       info->level_count > 1 ||
-       info->array_size > 1)
-      return false;
-
-   switch (info->block_size) {
-   case 4:
-   case 8:
-   case 16:
-      return true;
-   default:
-      return false;
-   }
-}
-
-static void
-image_get_gen6_alignments(const struct ilo_dev *dev,
-                          const struct ilo_image_info *info,
-                          int *align_i, int *align_j)
-{
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 1, page 113:
-    *
-    *     "surface format           align_i     align_j
-    *      YUV 4:2:2 formats        4           *see below
-    *      BC1-5                    4           4
-    *      FXT1                     8           4
-    *      all other formats        4           *see below"
-    *
-    *     "- align_j = 4 for any depth buffer
-    *      - align_j = 2 for separate stencil buffer
-    *      - align_j = 4 for any render target surface is multisampled (4x)
-    *      - align_j = 4 for any render target surface with Surface Vertical
-    *        Alignment = VALIGN_4
-    *      - align_j = 2 for any render target surface with Surface Vertical
-    *        Alignment = VALIGN_2
-    *      - align_j = 2 for all other render target surface
-    *      - align_j = 2 for any sampling engine surface with Surface Vertical
-    *        Alignment = VALIGN_2
-    *      - align_j = 4 for any sampling engine surface with Surface Vertical
-    *        Alignment = VALIGN_4"
-    *
-    * From the Sandy Bridge PRM, volume 4 part 1, page 86:
-    *
-    *     "This field (Surface Vertical Alignment) must be set to VALIGN_2 if
-    *      the Surface Format is 96 bits per element (BPE)."
-    *
-    * They can be rephrased as
-    *
-    *                                  align_i        align_j
-    *   compressed formats             block width    block height
-    *   GEN6_FORMAT_R8_UINT            4              2
-    *   other depth/stencil formats    4              4
-    *   4x multisampled                4              4
-    *   bpp 96                         4              2
-    *   others                         4              2 or 4
-    */
-
-   *align_i = (info->compressed) ? info->block_width : 4;
-   if (info->compressed) {
-      *align_j = info->block_height;
-   } else if (info->bind_zs) {
-      *align_j = (info->format == GEN6_FORMAT_R8_UINT) ? 2 : 4;
-   } else {
-      *align_j = (info->sample_count > 1 || info->block_size != 12) ? 4 : 2;
-   }
-}
-
-static void
-image_get_gen7_alignments(const struct ilo_dev *dev,
-                          const struct ilo_image_info *info,
-                          enum gen_surface_tiling tiling,
-                          int *align_i, int *align_j)
-{
-   int i, j;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 1 part 1, page 110:
-    *
-    *     "surface defined by      surface format     align_i     align_j
-    *      3DSTATE_DEPTH_BUFFER    D16_UNORM          8           4
-    *                              not D16_UNORM      4           4
-    *      3DSTATE_STENCIL_BUFFER  N/A                8           8
-    *      SURFACE_STATE           BC*, ETC*, EAC*    4           4
-    *                              FXT1               8           4
-    *                              all others         (set by SURFACE_STATE)"
-    *
-    * From the Ivy Bridge PRM, volume 4 part 1, page 63:
-    *
-    *     "- This field (Surface Vertical Aligment) is intended to be set to
-    *        VALIGN_4 if the surface was rendered as a depth buffer, for a
-    *        multisampled (4x) render target, or for a multisampled (8x)
-    *        render target, since these surfaces support only alignment of 4.
-    *      - Use of VALIGN_4 for other surfaces is supported, but uses more
-    *        memory.
-    *      - This field must be set to VALIGN_4 for all tiled Y Render Target
-    *        surfaces.
-    *      - Value of 1 is not supported for format YCRCB_NORMAL (0x182),
-    *        YCRCB_SWAPUVY (0x183), YCRCB_SWAPUV (0x18f), YCRCB_SWAPY (0x190)
-    *      - If Number of Multisamples is not MULTISAMPLECOUNT_1, this field
-    *        must be set to VALIGN_4."
-    *      - VALIGN_4 is not supported for surface format R32G32B32_FLOAT."
-    *
-    *     "- This field (Surface Horizontal Aligment) is intended to be set to
-    *        HALIGN_8 only if the surface was rendered as a depth buffer with
-    *        Z16 format or a stencil buffer, since these surfaces support only
-    *        alignment of 8.
-    *      - Use of HALIGN_8 for other surfaces is supported, but uses more
-    *        memory.
-    *      - This field must be set to HALIGN_4 if the Surface Format is BC*.
-    *      - This field must be set to HALIGN_8 if the Surface Format is
-    *        FXT1."
-    *
-    * They can be rephrased as
-    *
-    *                                  align_i        align_j
-    *  compressed formats              block width    block height
-    *  GEN6_FORMAT_R16_UNORM           8              4
-    *  GEN6_FORMAT_R8_UINT             8              8
-    *  other depth/stencil formats     4              4
-    *  2x or 4x multisampled           4 or 8         4
-    *  tiled Y                         4 or 8         4 (if rt)
-    *  GEN6_FORMAT_R32G32B32_FLOAT     4 or 8         2
-    *  others                          4 or 8         2 or 4
-    */
-   if (info->compressed) {
-      i = info->block_width;
-      j = info->block_height;
-   } else if (info->bind_zs) {
-      switch (info->format) {
-      case GEN6_FORMAT_R16_UNORM:
-         i = 8;
-         j = 4;
-         break;
-      case GEN6_FORMAT_R8_UINT:
-         i = 8;
-         j = 8;
-         break;
-      default:
-         i = 4;
-         j = 4;
-         break;
-      }
-   } else {
-      const bool valign_4 =
-         (info->sample_count > 1 || ilo_dev_gen(dev) >= ILO_GEN(8) ||
-          (tiling == GEN6_TILING_Y && info->bind_surface_dp_render));
-
-      if (ilo_dev_gen(dev) < ILO_GEN(8) && valign_4)
-         assert(info->format != GEN6_FORMAT_R32G32B32_FLOAT);
-
-      i = 4;
-      j = (valign_4) ? 4 : 2;
-   }
-
-   *align_i = i;
-   *align_j = j;
-}
-
-static bool
-image_init_gen6_hardware_layout(const struct ilo_dev *dev,
-                                const struct ilo_image_info *info,
-                                struct ilo_image_layout *layout)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      layout->walk = image_get_gen7_walk(dev, info);
-   else
-      layout->walk = image_get_gen6_walk(dev, info);
-
-   layout->interleaved_samples =
-      image_get_gen6_interleaved_samples(dev, info);
-
-   layout->valid_tilings = image_get_gen6_valid_tilings(dev, info);
-   if (!layout->valid_tilings)
-      return false;
-
-   layout->tiling = image_get_gen6_tiling(dev, info, layout->valid_tilings);
-
-   if (image_get_gen6_hiz_enable(dev, info))
-      layout->aux = ILO_IMAGE_AUX_HIZ;
-   else if (ilo_dev_gen(dev) >= ILO_GEN(7) &&
-            image_get_gen7_mcs_enable(dev, info, layout->tiling))
-      layout->aux = ILO_IMAGE_AUX_MCS;
-   else
-      layout->aux = ILO_IMAGE_AUX_NONE;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      image_get_gen7_alignments(dev, info, layout->tiling,
-            &layout->align_i, &layout->align_j);
-   } else {
-      image_get_gen6_alignments(dev, info,
-            &layout->align_i, &layout->align_j);
-   }
-
-   return true;
-}
-
-static bool
-image_init_gen6_transfer_layout(const struct ilo_dev *dev,
-                                const struct ilo_image_info *info,
-                                struct ilo_image_layout *layout)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* we can define our own layout to save space */
-   layout->walk = ILO_IMAGE_WALK_LOD;
-   layout->interleaved_samples = false;
-   layout->valid_tilings = IMAGE_TILING_NONE;
-   layout->tiling = GEN6_TILING_NONE;
-   layout->aux = ILO_IMAGE_AUX_NONE;
-   layout->align_i = info->block_width;
-   layout->align_j = info->block_height;
-
-   return true;
-}
-
-static void
-image_get_gen6_slice_size(const struct ilo_dev *dev,
-                          const struct ilo_image_info *info,
-                          const struct ilo_image_layout *layout,
-                          uint8_t level,
-                          int *width, int *height)
-{
-   int w, h;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   w = u_minify(info->width, level);
-   h = u_minify(info->height, level);
-
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 1, page 114:
-    *
-    *     "The dimensions of the mip maps are first determined by applying the
-    *      sizing algorithm presented in Non-Power-of-Two Mipmaps above. Then,
-    *      if necessary, they are padded out to compression block boundaries."
-    */
-   w = align(w, info->block_width);
-   h = align(h, info->block_height);
-
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 1, page 111:
-    *
-    *     "If the surface is multisampled (4x), these values must be adjusted
-    *      as follows before proceeding:
-    *
-    *        W_L = ceiling(W_L / 2) * 4
-    *        H_L = ceiling(H_L / 2) * 4"
-    *
-    * From the Ivy Bridge PRM, volume 1 part 1, page 108:
-    *
-    *     "If the surface is multisampled and it is a depth or stencil surface
-    *      or Multisampled Surface StorageFormat in SURFACE_STATE is
-    *      MSFMT_DEPTH_STENCIL, W_L and H_L must be adjusted as follows before
-    *      proceeding:
-    *
-    *        #samples  W_L =                    H_L =
-    *        2         ceiling(W_L / 2) * 4     HL [no adjustment]
-    *        4         ceiling(W_L / 2) * 4     ceiling(H_L / 2) * 4
-    *        8         ceiling(W_L / 2) * 8     ceiling(H_L / 2) * 4
-    *        16        ceiling(W_L / 2) * 8     ceiling(H_L / 2) * 8"
-    *
-    * For interleaved samples (4x), where pixels
-    *
-    *   (x, y  ) (x+1, y  )
-    *   (x, y+1) (x+1, y+1)
-    *
-    * would be is occupied by
-    *
-    *   (x, y  , si0) (x+1, y  , si0) (x, y  , si1) (x+1, y  , si1)
-    *   (x, y+1, si0) (x+1, y+1, si0) (x, y+1, si1) (x+1, y+1, si1)
-    *   (x, y  , si2) (x+1, y  , si2) (x, y  , si3) (x+1, y  , si3)
-    *   (x, y+1, si2) (x+1, y+1, si2) (x, y+1, si3) (x+1, y+1, si3)
-    *
-    * Thus the need to
-    *
-    *   w = align(w, 2) * 2;
-    *   y = align(y, 2) * 2;
-    */
-   if (layout->interleaved_samples) {
-      switch (info->sample_count) {
-      case 1:
-         break;
-      case 2:
-         w = align(w, 2) * 2;
-         break;
-      case 4:
-         w = align(w, 2) * 2;
-         h = align(h, 2) * 2;
-         break;
-      case 8:
-         w = align(w, 2) * 4;
-         h = align(h, 2) * 2;
-         break;
-      case 16:
-         w = align(w, 2) * 4;
-         h = align(h, 2) * 4;
-         break;
-      default:
-         assert(!"unsupported sample count");
-         break;
-      }
-   }
-
-   /*
-    * From the Ivy Bridge PRM, volume 1 part 1, page 108:
-    *
-    *     "For separate stencil buffer, the width must be mutiplied by 2 and
-    *      height divided by 2..."
-    *
-    * To make things easier (for transfer), we will just double the stencil
-    * stride in 3DSTATE_STENCIL_BUFFER.
-    */
-   w = align(w, layout->align_i);
-   h = align(h, layout->align_j);
-
-   *width = w;
-   *height = h;
-}
-
-static int
-image_get_gen6_layer_count(const struct ilo_dev *dev,
-                           const struct ilo_image_info *info,
-                           const struct ilo_image_layout *layout)
-{
-   int count = info->array_size;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* samples of the same index are stored in a layer */
-   if (!layout->interleaved_samples)
-      count *= info->sample_count;
-
-   return count;
-}
-
-static void
-image_get_gen6_walk_layer_heights(const struct ilo_dev *dev,
-                                  const struct ilo_image_info *info,
-                                  struct ilo_image_layout *layout)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   layout->walk_layer_h0 = layout->lods[0].slice_height;
-
-   if (info->level_count > 1) {
-      layout->walk_layer_h1 = layout->lods[1].slice_height;
-   } else {
-      int dummy;
-      image_get_gen6_slice_size(dev, info, layout, 1,
-            &dummy, &layout->walk_layer_h1);
-   }
-
-   if (image_get_gen6_layer_count(dev, info, layout) == 1) {
-      layout->walk_layer_height = 0;
-      return;
-   }
-
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 1, page 115:
-    *
-    *     "The following equation is used for surface formats other than
-    *      compressed textures:
-    *
-    *        QPitch = (h0 + h1 + 11j)"
-    *
-    *     "The equation for compressed textures (BC* and FXT1 surface formats)
-    *      follows:
-    *
-    *        QPitch = (h0 + h1 + 11j) / 4"
-    *
-    *     "[DevSNB] Errata: Sampler MSAA Qpitch will be 4 greater than the
-    *      value calculated in the equation above, for every other odd Surface
-    *      Height starting from 1 i.e. 1,5,9,13"
-    *
-    * From the Ivy Bridge PRM, volume 1 part 1, page 111-112:
-    *
-    *     "If Surface Array Spacing is set to ARYSPC_FULL (note that the depth
-    *      buffer and stencil buffer have an implied value of ARYSPC_FULL):
-    *
-    *        QPitch = (h0 + h1 + 12j)
-    *        QPitch = (h0 + h1 + 12j) / 4 (compressed)
-    *
-    *      (There are many typos or missing words here...)"
-    *
-    * To access the N-th slice, an offset of (Stride * QPitch * N) is added to
-    * the base address.  The PRM divides QPitch by 4 for compressed formats
-    * because the block height for those formats are 4, and it wants QPitch to
-    * mean the number of memory rows, as opposed to texel rows, between
-    * slices.  Since we use texel rows everywhere, we do not need to divide
-    * QPitch by 4.
-    */
-   layout->walk_layer_height = layout->walk_layer_h0 + layout->walk_layer_h1 +
-      ((ilo_dev_gen(dev) >= ILO_GEN(7)) ? 12 : 11) * layout->align_j;
-
-   if (ilo_dev_gen(dev) == ILO_GEN(6) && info->sample_count > 1 &&
-       info->height % 4 == 1)
-      layout->walk_layer_height += 4;
-}
-
-static void
-image_get_gen6_monolithic_size(const struct ilo_dev *dev,
-                               const struct ilo_image_info *info,
-                               struct ilo_image_layout *layout,
-                               int max_x, int max_y)
-{
-   int align_w = 1, align_h = 1, pad_h = 0;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 1, page 118:
-    *
-    *     "To determine the necessary padding on the bottom and right side of
-    *      the surface, refer to the table in Section 7.18.3.4 for the i and j
-    *      parameters for the surface format in use. The surface must then be
-    *      extended to the next multiple of the alignment unit size in each
-    *      dimension, and all texels contained in this extended surface must
-    *      have valid GTT entries."
-    *
-    *     "For cube surfaces, an additional two rows of padding are required
-    *      at the bottom of the surface. This must be ensured regardless of
-    *      whether the surface is stored tiled or linear.  This is due to the
-    *      potential rotation of cache line orientation from memory to cache."
-    *
-    *     "For compressed textures (BC* and FXT1 surface formats), padding at
-    *      the bottom of the surface is to an even compressed row, which is
-    *      equal to a multiple of 8 uncompressed texel rows. Thus, for padding
-    *      purposes, these surfaces behave as if j = 8 only for surface
-    *      padding purposes. The value of 4 for j still applies for mip level
-    *      alignment and QPitch calculation."
-    */
-   if (info->bind_surface_sampler) {
-      align_w = MAX2(align_w, layout->align_i);
-      align_h = MAX2(align_h, layout->align_j);
-
-      if (info->type == GEN6_SURFTYPE_CUBE)
-         pad_h += 2;
-
-      if (info->compressed)
-         align_h = MAX2(align_h, layout->align_j * 2);
-   }
-
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 1, page 118:
-    *
-    *     "If the surface contains an odd number of rows of data, a final row
-    *      below the surface must be allocated."
-    */
-   if (info->bind_surface_dp_render)
-      align_h = MAX2(align_h, 2);
-
-   /*
-    * Depth Buffer Clear/Resolve works in 8x4 sample blocks.  Pad to allow HiZ
-    * for unaligned non-mipmapped and non-array images.
-    */
-   if (layout->aux == ILO_IMAGE_AUX_HIZ &&
-       info->level_count == 1 && info->array_size == 1 && info->depth == 1) {
-      align_w = MAX2(align_w, 8);
-      align_h = MAX2(align_h, 4);
-   }
-
-   layout->monolithic_width = align(max_x, align_w);
-   layout->monolithic_height = align(max_y + pad_h, align_h);
-}
-
-static void
-image_get_gen6_lods(const struct ilo_dev *dev,
-                    const struct ilo_image_info *info,
-                    struct ilo_image_layout *layout)
-{
-   const int layer_count = image_get_gen6_layer_count(dev, info, layout);
-   int cur_x, cur_y, max_x, max_y;
-   uint8_t lv;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   cur_x = 0;
-   cur_y = 0;
-   max_x = 0;
-   max_y = 0;
-   for (lv = 0; lv < info->level_count; lv++) {
-      int slice_w, slice_h, lod_w, lod_h;
-
-      image_get_gen6_slice_size(dev, info, layout, lv, &slice_w, &slice_h);
-
-      layout->lods[lv].x = cur_x;
-      layout->lods[lv].y = cur_y;
-      layout->lods[lv].slice_width = slice_w;
-      layout->lods[lv].slice_height = slice_h;
-
-      switch (layout->walk) {
-      case ILO_IMAGE_WALK_LAYER:
-         lod_w = slice_w;
-         lod_h = slice_h;
-
-         /* MIPLAYOUT_BELOW */
-         if (lv == 1)
-            cur_x += lod_w;
-         else
-            cur_y += lod_h;
-         break;
-      case ILO_IMAGE_WALK_LOD:
-         lod_w = slice_w;
-         lod_h = slice_h * layer_count;
-
-         if (lv == 1)
-            cur_x += lod_w;
-         else
-            cur_y += lod_h;
-
-         /* every LOD begins at tile boundaries */
-         if (info->level_count > 1) {
-            assert(info->format == GEN6_FORMAT_R8_UINT);
-            cur_x = align(cur_x, 64);
-            cur_y = align(cur_y, 64);
-         }
-         break;
-      case ILO_IMAGE_WALK_3D:
-         {
-            const int slice_count = u_minify(info->depth, lv);
-            const int slice_count_per_row = 1 << lv;
-            const int row_count =
-               (slice_count + slice_count_per_row - 1) / slice_count_per_row;
-
-            lod_w = slice_w * slice_count_per_row;
-            lod_h = slice_h * row_count;
-         }
-
-         cur_y += lod_h;
-         break;
-      default:
-         assert(!"unknown walk type");
-         lod_w = 0;
-         lod_h = 0;
-         break;
-      }
-
-      if (max_x < layout->lods[lv].x + lod_w)
-         max_x = layout->lods[lv].x + lod_w;
-      if (max_y < layout->lods[lv].y + lod_h)
-         max_y = layout->lods[lv].y + lod_h;
-   }
-
-   if (layout->walk == ILO_IMAGE_WALK_LAYER) {
-      image_get_gen6_walk_layer_heights(dev, info, layout);
-      if (layer_count > 1)
-         max_y += layout->walk_layer_height * (layer_count - 1);
-   } else {
-      layout->walk_layer_h0 = 0;
-      layout->walk_layer_h1 = 0;
-      layout->walk_layer_height = 0;
-   }
-
-   image_get_gen6_monolithic_size(dev, info, layout, max_x, max_y);
-}
-
-static bool
-image_bind_gpu(const struct ilo_image_info *info)
-{
-   return (info->bind_surface_sampler ||
-           info->bind_surface_dp_render ||
-           info->bind_surface_dp_typed ||
-           info->bind_zs ||
-           info->bind_scanout ||
-           info->bind_cursor);
-}
-
-static bool
-image_validate_gen6(const struct ilo_dev *dev,
-                    const struct ilo_image_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 314:
-    *
-    *     "The separate stencil buffer is always enabled, thus the field in
-    *      3DSTATE_DEPTH_BUFFER to explicitly enable the separate stencil
-    *      buffer has been removed Surface formats with interleaved depth and
-    *      stencil are no longer supported"
-    */
-   if (ilo_dev_gen(dev) >= ILO_GEN(7) && info->bind_zs)
-      assert(!info->interleaved_stencil);
-
-   return true;
-}
-
-static bool
-image_get_gen6_layout(const struct ilo_dev *dev,
-                      const struct ilo_image_info *info,
-                      struct ilo_image_layout *layout)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!image_validate_gen6(dev, info))
-      return false;
-
-   if (image_bind_gpu(info) || info->level_count > 1) {
-      if (!image_init_gen6_hardware_layout(dev, info, layout))
-         return false;
-   } else {
-      if (!image_init_gen6_transfer_layout(dev, info, layout))
-         return false;
-   }
-
-   /*
-    * the fact that align i and j are multiples of block width and height
-    * respectively is what makes the size of the bo a multiple of the block
-    * size, slices start at block boundaries, and many of the computations
-    * work.
-    */
-   assert(layout->align_i % info->block_width == 0);
-   assert(layout->align_j % info->block_height == 0);
-
-   /* make sure align() works */
-   assert(util_is_power_of_two(layout->align_i) &&
-          util_is_power_of_two(layout->align_j));
-   assert(util_is_power_of_two(info->block_width) &&
-          util_is_power_of_two(info->block_height));
-
-   image_get_gen6_lods(dev, info, layout);
-
-   assert(layout->walk_layer_height % info->block_height == 0);
-   assert(layout->monolithic_width % info->block_width == 0);
-   assert(layout->monolithic_height % info->block_height == 0);
-
-   return true;
-}
-
-static bool
-image_set_gen6_bo_size(struct ilo_image *img,
-                       const struct ilo_dev *dev,
-                       const struct ilo_image_info *info,
-                       const struct ilo_image_layout *layout)
-{
-   int stride, height;
-   int align_w, align_h;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   stride = (layout->monolithic_width / info->block_width) * info->block_size;
-   height = layout->monolithic_height / info->block_height;
-
-   /*
-    * From the Haswell PRM, volume 5, page 163:
-    *
-    *     "For linear surfaces, additional padding of 64 bytes is required
-    *      at the bottom of the surface. This is in addition to the padding
-    *      required above."
-    */
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5) && info->bind_surface_sampler &&
-       layout->tiling == GEN6_TILING_NONE)
-      height += (64 + stride - 1) / stride;
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 81:
-    *
-    *     "- For linear render target surfaces, the pitch must be a multiple
-    *        of the element size for non-YUV surface formats.  Pitch must be a
-    *        multiple of 2 * element size for YUV surface formats.
-    *
-    *      - For other linear surfaces, the pitch can be any multiple of
-    *        bytes.
-    *      - For tiled surfaces, the pitch must be a multiple of the tile
-    *        width."
-    *
-    * Different requirements may exist when the image is used in different
-    * places, but our alignments here should be good enough that we do not
-    * need to check info->bind_x.
-    */
-   switch (layout->tiling) {
-   case GEN6_TILING_X:
-      align_w = 512;
-      align_h = 8;
-      break;
-   case GEN6_TILING_Y:
-      align_w = 128;
-      align_h = 32;
-      break;
-   case GEN8_TILING_W:
-      /*
-       * From the Sandy Bridge PRM, volume 1 part 2, page 22:
-       *
-       *     "A 4KB tile is subdivided into 8-high by 8-wide array of
-       *      Blocks for W-Major Tiles (W Tiles). Each Block is 8 rows by 8
-       *      bytes."
-       */
-      align_w = 64;
-      align_h = 64;
-      break;
-   default:
-      assert(layout->tiling == GEN6_TILING_NONE);
-      /* some good enough values */
-      align_w = 64;
-      align_h = 2;
-      break;
-   }
-
-   if (info->force_bo_stride) {
-      if (info->force_bo_stride % align_w || info->force_bo_stride < stride)
-         return false;
-
-      img->bo_stride = info->force_bo_stride;
-   } else {
-      img->bo_stride = align(stride, align_w);
-   }
-
-   img->bo_height = align(height, align_h);
-
-   return true;
-}
-
-static bool
-image_set_gen6_hiz(struct ilo_image *img,
-                   const struct ilo_dev *dev,
-                   const struct ilo_image_info *info,
-                   const struct ilo_image_layout *layout)
-{
-   const int hz_align_j = 8;
-   enum ilo_image_walk_type hz_walk;
-   int hz_width, hz_height;
-   int hz_clear_w, hz_clear_h;
-   uint8_t lv;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(layout->aux == ILO_IMAGE_AUX_HIZ);
-
-   assert(layout->walk == ILO_IMAGE_WALK_LAYER ||
-          layout->walk == ILO_IMAGE_WALK_3D);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 312:
-    *
-    *     "The hierarchical depth buffer does not support the LOD field, it is
-    *      assumed by hardware to be zero. A separate hierarachical depth
-    *      buffer is required for each LOD used, and the corresponding
-    *      buffer's state delivered to hardware each time a new depth buffer
-    *      state with modified LOD is delivered."
-    *
-    * We will put all LODs in a single bo with ILO_IMAGE_WALK_LOD.
-    */
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      hz_walk = layout->walk;
-   else
-      hz_walk = ILO_IMAGE_WALK_LOD;
-
-   /*
-    * See the Sandy Bridge PRM, volume 2 part 1, page 312, and the Ivy Bridge
-    * PRM, volume 2 part 1, page 312-313.
-    *
-    * It seems HiZ buffer is aligned to 8x8, with every two rows packed into a
-    * memory row.
-    */
-   switch (hz_walk) {
-   case ILO_IMAGE_WALK_LAYER:
-      {
-         const int h0 = align(layout->walk_layer_h0, hz_align_j);
-         const int h1 = align(layout->walk_layer_h1, hz_align_j);
-         const int htail =
-            ((ilo_dev_gen(dev) >= ILO_GEN(7)) ? 12 : 11) * hz_align_j;
-         const int hz_qpitch = h0 + h1 + htail;
-
-         hz_width = align(layout->lods[0].slice_width, 16);
-
-         hz_height = hz_qpitch * info->array_size / 2;
-         if (ilo_dev_gen(dev) >= ILO_GEN(7))
-            hz_height = align(hz_height, 8);
-
-         img->aux.walk_layer_height = hz_qpitch;
-      }
-      break;
-   case ILO_IMAGE_WALK_LOD:
-      {
-         int lod_tx[ILO_IMAGE_MAX_LEVEL_COUNT];
-         int lod_ty[ILO_IMAGE_MAX_LEVEL_COUNT];
-         int cur_tx, cur_ty;
-
-         /* figure out the tile offsets of LODs */
-         hz_width = 0;
-         hz_height = 0;
-         cur_tx = 0;
-         cur_ty = 0;
-         for (lv = 0; lv < info->level_count; lv++) {
-            int tw, th;
-
-            lod_tx[lv] = cur_tx;
-            lod_ty[lv] = cur_ty;
-
-            tw = align(layout->lods[lv].slice_width, 16);
-            th = align(layout->lods[lv].slice_height, hz_align_j) *
-               info->array_size / 2;
-            /* convert to Y-tiles */
-            tw = (tw + 127) / 128;
-            th = (th + 31) / 32;
-
-            if (hz_width < cur_tx + tw)
-               hz_width = cur_tx + tw;
-            if (hz_height < cur_ty + th)
-               hz_height = cur_ty + th;
-
-            if (lv == 1)
-               cur_tx += tw;
-            else
-               cur_ty += th;
-         }
-
-         /* convert tile offsets to memory offsets */
-         for (lv = 0; lv < info->level_count; lv++) {
-            img->aux.walk_lod_offsets[lv] =
-               (lod_ty[lv] * hz_width + lod_tx[lv]) * 4096;
-         }
-
-         hz_width *= 128;
-         hz_height *= 32;
-      }
-      break;
-   case ILO_IMAGE_WALK_3D:
-      hz_width = align(layout->lods[0].slice_width, 16);
-
-      hz_height = 0;
-      for (lv = 0; lv < info->level_count; lv++) {
-         const int h = align(layout->lods[lv].slice_height, hz_align_j);
-         /* according to the formula, slices are packed together vertically */
-         hz_height += h * u_minify(info->depth, lv);
-      }
-      hz_height /= 2;
-      break;
-   default:
-      assert(!"unknown HiZ walk");
-      hz_width = 0;
-      hz_height = 0;
-      break;
-   }
-
-   /*
-    * In hiz_align_fb(), we will align the LODs to 8x4 sample blocks.
-    * Experiments on Haswell show that aligning the RECTLIST primitive and
-    * 3DSTATE_DRAWING_RECTANGLE alone are not enough.  The LOD sizes must be
-    * aligned.
-    */
-   hz_clear_w = 8;
-   hz_clear_h = 4;
-   switch (info->sample_count) {
-   case 1:
-   default:
-      break;
-   case 2:
-      hz_clear_w /= 2;
-      break;
-   case 4:
-      hz_clear_w /= 2;
-      hz_clear_h /= 2;
-      break;
-   case 8:
-      hz_clear_w /= 4;
-      hz_clear_h /= 2;
-      break;
-   case 16:
-      hz_clear_w /= 4;
-      hz_clear_h /= 4;
-      break;
-   }
-
-   for (lv = 0; lv < info->level_count; lv++) {
-      if (u_minify(info->width, lv) % hz_clear_w ||
-          u_minify(info->height, lv) % hz_clear_h)
-         break;
-      img->aux.enables |= 1 << lv;
-   }
-
-   /* we padded to allow this in image_get_gen6_monolithic_size() */
-   if (info->level_count == 1 && info->array_size == 1 && info->depth == 1)
-      img->aux.enables |= 0x1;
-
-   /* align to Y-tile */
-   img->aux.bo_stride = align(hz_width, 128);
-   img->aux.bo_height = align(hz_height, 32);
-
-   return true;
-}
-
-static bool
-image_set_gen7_mcs(struct ilo_image *img,
-                   const struct ilo_dev *dev,
-                   const struct ilo_image_info *info,
-                   const struct ilo_image_layout *layout)
-{
-   int mcs_width, mcs_height, mcs_cpp;
-   int downscale_x, downscale_y;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   assert(layout->aux == ILO_IMAGE_AUX_MCS);
-
-   if (info->sample_count > 1) {
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 326, the clear
-       * rectangle is scaled down by 8x2 for 4X MSAA and 2x2 for 8X MSAA.  The
-       * need of scale down could be that the clear rectangle is used to clear
-       * the MCS instead of the RT.
-       *
-       * For 8X MSAA, we need 32 bits in MCS for every pixel in the RT.  The
-       * 2x2 factor could come from that the hardware writes 128 bits (an
-       * OWord) at a time, and the OWord in MCS maps to a 2x2 pixel block in
-       * the RT.  For 4X MSAA, we need 8 bits in MCS for every pixel in the
-       * RT.  Similarly, we could reason that an OWord in 4X MCS maps to a 8x2
-       * pixel block in the RT.
-       */
-      switch (info->sample_count) {
-      case 2:
-      case 4:
-         downscale_x = 8;
-         downscale_y = 2;
-         mcs_cpp = 1;
-         break;
-      case 8:
-         downscale_x = 2;
-         downscale_y = 2;
-         mcs_cpp = 4;
-         break;
-      case 16:
-         downscale_x = 2;
-         downscale_y = 1;
-         mcs_cpp = 8;
-         break;
-      default:
-         assert(!"unsupported sample count");
-         return false;
-         break;
-      }
-
-      /*
-       * It also appears that the 2x2 subspans generated by the scaled-down
-       * clear rectangle cannot be masked.  The scale-down clear rectangle
-       * thus must be aligned to 2x2, and we need to pad.
-       */
-      mcs_width = align(info->width, downscale_x * 2);
-      mcs_height = align(info->height, downscale_y * 2);
-   } else {
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 327:
-       *
-       *     "              Pixels  Lines
-       *      TiledY RT CL
-       *          bpp
-       *          32          8        4
-       *          64          4        4
-       *          128         2        4
-       *
-       *      TiledX RT CL
-       *          bpp
-       *          32          16       2
-       *          64          8        2
-       *          128         4        2"
-       *
-       * This table and the two following tables define the RT alignments, the
-       * clear rectangle alignments, and the clear rectangle scale factors.
-       * Viewing the RT alignments as the sizes of 128-byte blocks, we can see
-       * that the clear rectangle alignments are 16x32 blocks, and the clear
-       * rectangle scale factors are 8x16 blocks.
-       *
-       * For non-MSAA RT, we need 1 bit in MCS for every 128-byte block in the
-       * RT.  Similar to the MSAA cases, we can argue that an OWord maps to
-       * 8x16 blocks.
-       *
-       * One problem with this reasoning is that a Y-tile in MCS has 8x32
-       * OWords and maps to 64x512 128-byte blocks.  This differs from i965,
-       * which says that a Y-tile maps to 128x256 blocks (\see
-       * intel_get_non_msrt_mcs_alignment).  It does not really change
-       * anything except for the size of the allocated MCS.  Let's see if we
-       * hit out-of-bound access.
-       */
-      switch (layout->tiling) {
-      case GEN6_TILING_X:
-         downscale_x = 64 / info->block_size;
-         downscale_y = 2;
-         break;
-      case GEN6_TILING_Y:
-         downscale_x = 32 / info->block_size;
-         downscale_y = 4;
-         break;
-      default:
-         assert(!"unsupported tiling mode");
-         return false;
-         break;
-      }
-
-      downscale_x *= 8;
-      downscale_y *= 16;
-
-      /*
-       * From the Haswell PRM, volume 7, page 652:
-       *
-       *     "Clear rectangle must be aligned to two times the number of
-       *      pixels in the table shown below due to 16X16 hashing across the
-       *      slice."
-       *
-       * The scaled-down clear rectangle must be aligned to 4x4 instead of
-       * 2x2, and we need to pad.
-       */
-      mcs_width = align(info->width, downscale_x * 4) / downscale_x;
-      mcs_height = align(info->height, downscale_y * 4) / downscale_y;
-      mcs_cpp = 16; /* an OWord */
-   }
-
-   img->aux.enables = (1 << info->level_count) - 1;
-   /* align to Y-tile */
-   img->aux.bo_stride = align(mcs_width * mcs_cpp, 128);
-   img->aux.bo_height = align(mcs_height, 32);
-
-   return true;
-}
-
-bool
-ilo_image_init(struct ilo_image *img,
-               const struct ilo_dev *dev,
-               const struct ilo_image_info *info)
-{
-   struct ilo_image_layout layout;
-
-   assert(ilo_is_zeroed(img, sizeof(*img)));
-
-   memset(&layout, 0, sizeof(layout));
-   layout.lods = img->lods;
-
-   if (!image_get_gen6_layout(dev, info, &layout))
-      return false;
-
-   img->type = info->type;
-
-   img->format = info->format;
-   img->block_width = info->block_width;
-   img->block_height = info->block_height;
-   img->block_size = info->block_size;
-
-   img->width0 = info->width;
-   img->height0 = info->height;
-   img->depth0 = info->depth;
-   img->array_size = info->array_size;
-   img->level_count = info->level_count;
-   img->sample_count = info->sample_count;
-
-   img->walk = layout.walk;
-   img->interleaved_samples = layout.interleaved_samples;
-
-   img->tiling = layout.tiling;
-
-   img->aux.type = layout.aux;
-
-   img->align_i = layout.align_i;
-   img->align_j = layout.align_j;
-
-   img->walk_layer_height = layout.walk_layer_height;
-
-   if (!image_set_gen6_bo_size(img, dev, info, &layout))
-      return false;
-
-   img->scanout = info->bind_scanout;
-
-   switch (layout.aux) {
-   case ILO_IMAGE_AUX_HIZ:
-      image_set_gen6_hiz(img, dev, info, &layout);
-      break;
-   case ILO_IMAGE_AUX_MCS:
-      image_set_gen7_mcs(img, dev, info, &layout);
-      break;
-   default:
-      break;
-   }
-
-   return true;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_image.h b/src/gallium/drivers/ilo/core/ilo_image.h
deleted file mode 100644 (file)
index 546e0ff..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_IMAGE_H
-#define ILO_IMAGE_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-/*
- * From the Ivy Bridge PRM, volume 4 part 1, page 75:
- *
- *     "(MIP Count / LOD) representing [1,15] MIP levels"
- */
-#define ILO_IMAGE_MAX_LEVEL_COUNT 15
-
-enum ilo_image_aux_type {
-   ILO_IMAGE_AUX_NONE,
-   ILO_IMAGE_AUX_HIZ,
-   ILO_IMAGE_AUX_MCS,
-};
-
-enum ilo_image_walk_type {
-   /*
-    * LODs of each array layer are first packed together in MIPLAYOUT_BELOW.
-    * Array layers are then stacked together vertically.
-    *
-    * This can be used for mipmapped 2D textures.
-    */
-   ILO_IMAGE_WALK_LAYER,
-
-   /*
-    * Array layers of each LOD are first stacked together vertically and
-    * tightly.  LODs are then packed together in MIPLAYOUT_BELOW with each LOD
-    * starting at page boundaries.
-    *
-    * This is usually used for non-mipmapped 2D textures, as multiple LODs are
-    * not supported natively.
-    */
-   ILO_IMAGE_WALK_LOD,
-
-   /*
-    * 3D slices of each LOD are first packed together horizontally and tightly
-    * with wrapping.  LODs are then stacked together vertically and tightly.
-    *
-    * This is used for 3D textures.
-    */
-   ILO_IMAGE_WALK_3D,
-};
-
-struct ilo_image_info {
-   enum gen_surface_type type;
-
-   enum gen_surface_format format;
-   bool interleaved_stencil;
-   bool is_integer;
-   /* width, height and size of pixel blocks */
-   bool compressed;
-   unsigned block_width;
-   unsigned block_height;
-   unsigned block_size;
-
-   /* image size */
-   uint16_t width;
-   uint16_t height;
-   uint16_t depth;
-   uint16_t array_size;
-   uint8_t level_count;
-   uint8_t sample_count;
-
-   /* disable optional aux */
-   bool aux_disable;
-
-   /* tilings to consider, if any bit is set */
-   uint8_t valid_tilings;
-
-   /*
-    * prefer GEN6_TILING_NONE when the (estimated) image size exceeds the
-    * threshold; ignored when zero
-    */
-   uint32_t prefer_linear_threshold;
-
-   /* force a stride when non-zero */
-   uint32_t force_bo_stride;
-
-   bool bind_surface_sampler;
-   bool bind_surface_dp_render;
-   bool bind_surface_dp_typed;
-   bool bind_zs;
-   bool bind_scanout;
-   bool bind_cursor;
-};
-
-/*
- * When the walk type is ILO_IMAGE_WALK_LAYER, there is only a slice in each
- * LOD and this is used to describe LODs in the first array layer.  Otherwise,
- * there can be multiple slices in each LOD and this is used to describe the
- * first slice in each LOD.
- */
-struct ilo_image_lod {
-   /* physical position in pixels */
-   unsigned x;
-   unsigned y;
-
-   /* physical size of a slice in pixels */
-   unsigned slice_width;
-   unsigned slice_height;
-};
-
-/**
- * Texture layout.
- */
-struct ilo_image {
-   enum gen_surface_type type;
-
-   enum gen_surface_format format;
-   bool interleaved_stencil;
-
-   /* size, format, etc for programming hardware states */
-   unsigned width0;
-   unsigned height0;
-   unsigned depth0;
-   unsigned array_size;
-   unsigned level_count;
-   unsigned sample_count;
-
-   /*
-    * width, height, and size of pixel blocks for conversion between pixel
-    * positions and memory offsets
-    */
-   unsigned block_width;
-   unsigned block_height;
-   unsigned block_size;
-
-   enum ilo_image_walk_type walk;
-   bool interleaved_samples;
-
-   enum gen_surface_tiling tiling;
-
-   /* physical LOD slice alignments */
-   unsigned align_i;
-   unsigned align_j;
-
-   struct ilo_image_lod lods[ILO_IMAGE_MAX_LEVEL_COUNT];
-
-   /* physical layer height for ILO_IMAGE_WALK_LAYER */
-   unsigned walk_layer_height;
-
-   /* distance in bytes between two pixel block rows */
-   unsigned bo_stride;
-   /* number of pixel block rows */
-   unsigned bo_height;
-
-   bool scanout;
-
-   struct {
-      enum ilo_image_aux_type type;
-
-      /* bitmask of levels that can use aux */
-      unsigned enables;
-
-      /* LOD offsets for ILO_IMAGE_WALK_LOD */
-      unsigned walk_lod_offsets[ILO_IMAGE_MAX_LEVEL_COUNT];
-
-      unsigned walk_layer_height;
-      unsigned bo_stride;
-      unsigned bo_height;
-   } aux;
-};
-
-bool
-ilo_image_init(struct ilo_image *img,
-               const struct ilo_dev *dev,
-               const struct ilo_image_info *info);
-
-static inline bool
-ilo_image_can_enable_aux(const struct ilo_image *img, unsigned level)
-{
-   return (img->aux.enables & (1 << level));
-}
-
-/**
- * Convert from pixel position to 2D memory offset.
- */
-static inline void
-ilo_image_pos_to_mem(const struct ilo_image *img,
-                     unsigned pos_x, unsigned pos_y,
-                     unsigned *mem_x, unsigned *mem_y)
-{
-   assert(pos_x % img->block_width == 0);
-   assert(pos_y % img->block_height == 0);
-
-   *mem_x = pos_x / img->block_width * img->block_size;
-   *mem_y = pos_y / img->block_height;
-}
-
-/**
- * Convert from 2D memory offset to linear offset.
- */
-static inline unsigned
-ilo_image_mem_to_linear(const struct ilo_image *img,
-                        unsigned mem_x, unsigned mem_y)
-{
-   return mem_y * img->bo_stride + mem_x;
-}
-
-/**
- * Convert from 2D memory offset to raw offset.
- */
-static inline unsigned
-ilo_image_mem_to_raw(const struct ilo_image *img,
-                     unsigned mem_x, unsigned mem_y)
-{
-   unsigned tile_w, tile_h;
-
-   switch (img->tiling) {
-   case GEN6_TILING_NONE:
-      tile_w = 1;
-      tile_h = 1;
-      break;
-   case GEN6_TILING_X:
-      tile_w = 512;
-      tile_h = 8;
-      break;
-   case GEN6_TILING_Y:
-      tile_w = 128;
-      tile_h = 32;
-      break;
-   case GEN8_TILING_W:
-      tile_w = 64;
-      tile_h = 64;
-      break;
-   default:
-      assert(!"unknown tiling");
-      tile_w = 1;
-      tile_h = 1;
-      break;
-   }
-
-   assert(mem_x % tile_w == 0);
-   assert(mem_y % tile_h == 0);
-
-   return mem_y * img->bo_stride + mem_x * tile_h;
-}
-
-/**
- * Return the stride, in bytes, between slices within a level.
- */
-static inline unsigned
-ilo_image_get_slice_stride(const struct ilo_image *img, unsigned level)
-{
-   unsigned h;
-
-   switch (img->walk) {
-   case ILO_IMAGE_WALK_LAYER:
-      h = img->walk_layer_height;
-      break;
-   case ILO_IMAGE_WALK_LOD:
-      h = img->lods[level].slice_height;
-      break;
-   case ILO_IMAGE_WALK_3D:
-      if (level == 0) {
-         h = img->lods[0].slice_height;
-         break;
-      }
-      /* fall through */
-   default:
-      assert(!"no single stride to walk across slices");
-      h = 0;
-      break;
-   }
-
-   assert(h % img->block_height == 0);
-
-   return (h / img->block_height) * img->bo_stride;
-}
-
-/**
- * Return the physical size, in bytes, of a slice in a level.
- */
-static inline unsigned
-ilo_image_get_slice_size(const struct ilo_image *img, unsigned level)
-{
-   const unsigned w = img->lods[level].slice_width;
-   const unsigned h = img->lods[level].slice_height;
-
-   assert(w % img->block_width == 0);
-   assert(h % img->block_height == 0);
-
-   return (w / img->block_width * img->block_size) *
-      (h / img->block_height);
-}
-
-/**
- * Return the pixel position of a slice.
- */
-static inline void
-ilo_image_get_slice_pos(const struct ilo_image *img,
-                        unsigned level, unsigned slice,
-                        unsigned *x, unsigned *y)
-{
-   switch (img->walk) {
-   case ILO_IMAGE_WALK_LAYER:
-      *x = img->lods[level].x;
-      *y = img->lods[level].y + img->walk_layer_height * slice;
-      break;
-   case ILO_IMAGE_WALK_LOD:
-      *x = img->lods[level].x;
-      *y = img->lods[level].y + img->lods[level].slice_height * slice;
-      break;
-   case ILO_IMAGE_WALK_3D:
-      {
-         /* slices are packed horizontally with wrapping */
-         const unsigned sx = slice & ((1 << level) - 1);
-         const unsigned sy = slice >> level;
-
-         assert(slice < u_minify(img->depth0, level));
-
-         *x = img->lods[level].x + img->lods[level].slice_width * sx;
-         *y = img->lods[level].y + img->lods[level].slice_height * sy;
-      }
-      break;
-   default:
-      assert(!"unknown img walk type");
-      *x = 0;
-      *y = 0;
-      break;
-   }
-
-   /* should not exceed the bo size */
-   assert(*y + img->lods[level].slice_height <=
-         img->bo_height * img->block_height);
-}
-
-#endif /* ILO_IMAGE_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_cc.c b/src/gallium/drivers/ilo/core/ilo_state_cc.c
deleted file mode 100644 (file)
index 1f2456e..0000000
+++ /dev/null
@@ -1,890 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_state_cc.h"
-
-static bool
-cc_validate_gen6_stencil(const struct ilo_dev *dev,
-                         const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_stencil_info *stencil = &info->stencil;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 359:
-    *
-    *     "If the Depth Buffer is either undefined or does not have a surface
-    *      format of D32_FLOAT_S8X24_UINT or D24_UNORM_S8_UINT and separate
-    *      stencil buffer is disabled, Stencil Test Enable must be DISABLED"
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 370:
-    *
-    *     "This field (Stencil Test Enable) cannot be enabled if Surface
-    *      Format in 3DSTATE_DEPTH_BUFFER is set to D16_UNORM."
-    */
-   if (stencil->test_enable)
-      assert(stencil->cv_has_buffer);
-
-   return true;
-}
-
-static bool
-cc_validate_gen6_depth(const struct ilo_dev *dev,
-                       const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_depth_info *depth = &info->depth;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 360:
-    *
-    *     "Enabling the Depth Test function without defining a Depth Buffer is
-    *      UNDEFINED."
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 375:
-    *
-    *     "A Depth Buffer must be defined before enabling writes to it, or
-    *      operation is UNDEFINED."
-    */
-   if (depth->test_enable || depth->write_enable)
-      assert(depth->cv_has_buffer);
-
-   return true;
-}
-
-static bool
-cc_set_gen6_DEPTH_STENCIL_STATE(struct ilo_state_cc *cc,
-                                const struct ilo_dev *dev,
-                                const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_stencil_info *stencil = &info->stencil;
-   const struct ilo_state_cc_depth_info *depth = &info->depth;
-   const struct ilo_state_cc_params_info *params = &info->params;
-   uint32_t dw0, dw1, dw2;
-
-   ILO_DEV_ASSERT(dev, 6, 7.5);
-
-   if (!cc_validate_gen6_stencil(dev, info) ||
-       !cc_validate_gen6_depth(dev, info))
-      return false;
-
-   dw0 = 0;
-   dw1 = 0;
-   if (stencil->test_enable) {
-      const struct ilo_state_cc_stencil_op_info *front = &stencil->front;
-      const struct ilo_state_cc_stencil_params_info *front_p =
-         &params->stencil_front;
-      const struct ilo_state_cc_stencil_op_info *back;
-      const struct ilo_state_cc_stencil_params_info *back_p;
-
-      dw0 |= GEN6_ZS_DW0_STENCIL_TEST_ENABLE;
-
-      if (stencil->twosided_enable) {
-         dw0 |= GEN6_ZS_DW0_STENCIL1_ENABLE;
-
-         back = &stencil->back;
-         back_p = &params->stencil_back;
-      } else {
-         back = &stencil->front;
-         back_p = &params->stencil_front;
-      }
-
-      dw0 |= front->test_func << GEN6_ZS_DW0_STENCIL_FUNC__SHIFT |
-             front->fail_op << GEN6_ZS_DW0_STENCIL_FAIL_OP__SHIFT |
-             front->zfail_op << GEN6_ZS_DW0_STENCIL_ZFAIL_OP__SHIFT |
-             front->zpass_op << GEN6_ZS_DW0_STENCIL_ZPASS_OP__SHIFT |
-             back->test_func << GEN6_ZS_DW0_STENCIL1_FUNC__SHIFT |
-             back->fail_op << GEN6_ZS_DW0_STENCIL1_FAIL_OP__SHIFT |
-             back->zfail_op << GEN6_ZS_DW0_STENCIL1_ZFAIL_OP__SHIFT |
-             back->zpass_op << GEN6_ZS_DW0_STENCIL1_ZPASS_OP__SHIFT;
-
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 363:
-       *
-       *     "If this field (Stencil Buffer Write Enable) is enabled, Stencil
-       *      Test Enable must also be enabled."
-       *
-       * This is different from depth write enable, which is independent from
-       * depth test enable.
-       */
-      if (front_p->write_mask || back_p->write_mask)
-         dw0 |= GEN6_ZS_DW0_STENCIL_WRITE_ENABLE;
-
-      dw1 |= front_p->test_mask << GEN6_ZS_DW1_STENCIL_TEST_MASK__SHIFT |
-             front_p->write_mask << GEN6_ZS_DW1_STENCIL_WRITE_MASK__SHIFT |
-             back_p->test_mask << GEN6_ZS_DW1_STENCIL1_TEST_MASK__SHIFT |
-             back_p->write_mask << GEN6_ZS_DW1_STENCIL1_WRITE_MASK__SHIFT;
-   }
-
-   dw2 = 0;
-   if (depth->test_enable) {
-      dw2 |= GEN6_ZS_DW2_DEPTH_TEST_ENABLE |
-             depth->test_func << GEN6_ZS_DW2_DEPTH_FUNC__SHIFT;
-   } else {
-      dw2 |= GEN6_COMPAREFUNCTION_ALWAYS << GEN6_ZS_DW2_DEPTH_FUNC__SHIFT;
-   }
-
-   /* independent from depth->test_enable */
-   if (depth->write_enable)
-      dw2 |= GEN6_ZS_DW2_DEPTH_WRITE_ENABLE;
-
-   STATIC_ASSERT(ARRAY_SIZE(cc->ds) >= 3);
-   cc->ds[0] = dw0;
-   cc->ds[1] = dw1;
-   cc->ds[2] = dw2;
-
-   return true;
-}
-
-static bool
-cc_set_gen8_3DSTATE_WM_DEPTH_STENCIL(struct ilo_state_cc *cc,
-                                     const struct ilo_dev *dev,
-                                     const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_stencil_info *stencil = &info->stencil;
-   const struct ilo_state_cc_depth_info *depth = &info->depth;
-   const struct ilo_state_cc_params_info *params = &info->params;
-   uint32_t dw1, dw2;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   if (!cc_validate_gen6_stencil(dev, info) ||
-       !cc_validate_gen6_depth(dev, info))
-      return false;
-
-   dw1 = 0;
-   dw2 = 0;
-   if (stencil->test_enable) {
-      const struct ilo_state_cc_stencil_op_info *front = &stencil->front;
-      const struct ilo_state_cc_stencil_params_info *front_p =
-         &params->stencil_front;
-      const struct ilo_state_cc_stencil_op_info *back;
-      const struct ilo_state_cc_stencil_params_info *back_p;
-
-      dw1 |= GEN8_ZS_DW1_STENCIL_TEST_ENABLE;
-
-      if (stencil->twosided_enable) {
-         dw1 |= GEN8_ZS_DW1_STENCIL1_ENABLE;
-
-         back = &stencil->back;
-         back_p = &params->stencil_back;
-      } else {
-         back = &stencil->front;
-         back_p = &params->stencil_front;
-      }
-
-      dw1 |= front->fail_op << GEN8_ZS_DW1_STENCIL_FAIL_OP__SHIFT |
-             front->zfail_op << GEN8_ZS_DW1_STENCIL_ZFAIL_OP__SHIFT |
-             front->zpass_op << GEN8_ZS_DW1_STENCIL_ZPASS_OP__SHIFT |
-             back->test_func << GEN8_ZS_DW1_STENCIL1_FUNC__SHIFT |
-             back->fail_op << GEN8_ZS_DW1_STENCIL1_FAIL_OP__SHIFT |
-             back->zfail_op << GEN8_ZS_DW1_STENCIL1_ZFAIL_OP__SHIFT |
-             back->zpass_op << GEN8_ZS_DW1_STENCIL1_ZPASS_OP__SHIFT |
-             front->test_func << GEN8_ZS_DW1_STENCIL_FUNC__SHIFT;
-
-      if (front_p->write_mask || back_p->write_mask)
-         dw1 |= GEN8_ZS_DW1_STENCIL_WRITE_ENABLE;
-
-      dw2 |= front_p->test_mask << GEN8_ZS_DW2_STENCIL_TEST_MASK__SHIFT |
-             front_p->write_mask << GEN8_ZS_DW2_STENCIL_WRITE_MASK__SHIFT |
-             back_p->test_mask << GEN8_ZS_DW2_STENCIL1_TEST_MASK__SHIFT |
-             back_p->write_mask << GEN8_ZS_DW2_STENCIL1_WRITE_MASK__SHIFT;
-   }
-
-   if (depth->test_enable) {
-      dw1 |= GEN8_ZS_DW1_DEPTH_TEST_ENABLE |
-             depth->test_func << GEN8_ZS_DW1_DEPTH_FUNC__SHIFT;
-   } else {
-      dw1 |= GEN6_COMPAREFUNCTION_ALWAYS << GEN8_ZS_DW1_DEPTH_FUNC__SHIFT;
-   }
-
-   if (depth->write_enable)
-      dw1 |= GEN8_ZS_DW1_DEPTH_WRITE_ENABLE;
-
-   STATIC_ASSERT(ARRAY_SIZE(cc->ds) >= 2);
-   cc->ds[0] = dw1;
-   cc->ds[1] = dw2;
-
-   return true;
-}
-
-static bool
-is_dual_source_blend_factor(enum gen_blend_factor factor)
-{
-   switch (factor) {
-   case GEN6_BLENDFACTOR_SRC1_COLOR:
-   case GEN6_BLENDFACTOR_SRC1_ALPHA:
-   case GEN6_BLENDFACTOR_INV_SRC1_COLOR:
-   case GEN6_BLENDFACTOR_INV_SRC1_ALPHA:
-      return true;
-   default:
-      return false;
-   }
-}
-
-static bool
-cc_get_gen6_dual_source_blending(const struct ilo_dev *dev,
-                                 const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_blend_info *blend = &info->blend;
-   bool dual_source_blending;
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   dual_source_blending = (blend->rt_count &&
-         (is_dual_source_blend_factor(blend->rt[0].rgb_src) ||
-          is_dual_source_blend_factor(blend->rt[0].rgb_dst) ||
-          is_dual_source_blend_factor(blend->rt[0].a_src) ||
-          is_dual_source_blend_factor(blend->rt[0].a_dst)));
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 356:
-    *
-    *     "Dual Source Blending: When using "Dual Source" Render Target
-    *      Write messages, the Source1 pixel color+alpha passed in the
-    *      message can be selected as a src/dst blend factor. See Color
-    *      Buffer Blending.  In single-source mode, those blend factor
-    *      selections are invalid. If SRC1 is included in a src/dst blend
-    *      factor and a DualSource RT Write message is not utilized,
-    *      results are UNDEFINED. (This reflects the same restriction in DX
-    *      APIs, where undefined results are produced if "o1" is not
-    *      written by a PS - there are no default values defined). If SRC1
-    *      is not included in a src/dst blend factor, dual source blending
-    *      must be disabled."
-    *
-    * From the Ivy Bridge PRM, volume 4 part 1, page 356:
-    *
-    *     "The single source message will not cause a write to the render
-    *      target if Dual Source Blend Enable in 3DSTATE_WM is enabled."
-    *
-    *     "The dual source message will revert to a single source message
-    *      using source 0 if Dual Source Blend Enable in 3DSTATE_WM is
-    *      disabled."
-    *
-    * Dual source blending must be enabled or disabled universally.
-    */
-   for (i = 1; i < blend->rt_count; i++) {
-      assert(dual_source_blending ==
-         (is_dual_source_blend_factor(blend->rt[i].rgb_src) ||
-          is_dual_source_blend_factor(blend->rt[i].rgb_dst) ||
-          is_dual_source_blend_factor(blend->rt[i].a_src) ||
-          is_dual_source_blend_factor(blend->rt[i].a_dst)));
-   }
-
-   return dual_source_blending;
-}
-
-static bool
-cc_validate_gen6_alpha(const struct ilo_dev *dev,
-                       const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_alpha_info *alpha = &info->alpha;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 356:
-    *
-    *     "Alpha values from the pixel shader are treated as FLOAT32 format
-    *      for computing the AlphaToCoverage Mask."
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 378:
-    *
-    *     "If set (AlphaToCoverage Enable), Source0 Alpha is converted to a
-    *      temporary 1/2/4-bit coverage mask and the mask bit corresponding to
-    *      the sample# ANDed with the sample mask bit. If set, sample coverage
-    *      is computed based on src0 alpha value. Value of 0 disables all
-    *      samples and value of 1 enables all samples for that pixel. The same
-    *      coverage needs to apply to all the RTs in MRT case. Further, any
-    *      value of src0 alpha between 0 and 1 monotonically increases the
-    *      number of enabled pixels.
-    *
-    *      The same coverage needs to be applied to all the RTs in MRT case."
-    *
-    *     "If set (AlphaToOne Enable), Source0 Alpha is set to 1.0f after
-    *      (possibly) being used to generate the AlphaToCoverage coverage
-    *      mask.
-    *
-    *      The same coverage needs to be applied to all the RTs in MRT case.
-    *
-    *      If Dual Source Blending is enabled, this bit must be disabled."
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 382:
-    *
-    *     "Alpha Test can only be enabled if Pixel Shader outputs a float
-    *      alpha value.
-    *
-    *      Alpha Test is applied independently on each render target by
-    *      comparing that render target's alpha value against the alpha
-    *      reference value. If the alpha test fails, the corresponding pixel
-    *      write will be supressed only for that render target. The
-    *      depth/stencil update will occur if alpha test passes for any render
-    *      target."
-    *
-    * From the Sandy Bridge PRM, volume 4 part 1, page 194:
-    *
-    *     "Multiple render targets are supported with the single source and
-    *      replicate data messages. Each render target is accessed with a
-    *      separate Render Target Write message, each with a different surface
-    *      indicated (different binding table index). The depth buffer is
-    *      written only by the message(s) to the last render target, indicated
-    *      by the Last Render Target Select bit set to clear the pixel
-    *      scoreboard bits."
-    *
-    * When AlphaToCoverage/AlphaToOne/AlphaTest is enabled, it is
-    * required/desirable for the RT write messages to set "Source0 Alpha
-    * Present to RenderTarget" in the MRT case.  It is also required/desirable
-    * for the alpha values to be FLOAT32.
-    */
-   if (alpha->alpha_to_coverage || alpha->alpha_to_one || alpha->test_enable)
-      assert(alpha->cv_float_source0_alpha);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 356:
-    *
-    *     "[DevSNB]: When NumSamples = 1, AlphaToCoverage and AlphaTo
-    *      Coverage Dither both must be disabled."
-    */
-   if (ilo_dev_gen(dev) == ILO_GEN(6) && alpha->alpha_to_coverage)
-      assert(alpha->cv_sample_count_one);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 378:
-    *
-    *     "If Dual Source Blending is enabled, this bit (AlphaToOne Enable)
-    *      must be disabled."
-    */
-   if (alpha->alpha_to_one)
-      assert(!cc_get_gen6_dual_source_blending(dev, info));
-
-   return true;
-}
-
-static bool
-cc_validate_gen6_blend(const struct ilo_dev *dev,
-                       const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_blend_info *blend = &info->blend;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(blend->rt_count <= ILO_STATE_CC_BLEND_MAX_RT_COUNT);
-
-   return true;
-}
-
-static enum gen_blend_factor
-get_dst_alpha_one_blend_factor(enum gen_blend_factor factor, bool is_rgb)
-{
-   switch (factor) {
-   case GEN6_BLENDFACTOR_DST_ALPHA:
-      return GEN6_BLENDFACTOR_ONE;
-   case GEN6_BLENDFACTOR_INV_DST_ALPHA:
-      return GEN6_BLENDFACTOR_ZERO;
-   case GEN6_BLENDFACTOR_SRC_ALPHA_SATURATE:
-      return (is_rgb) ? GEN6_BLENDFACTOR_ZERO : GEN6_BLENDFACTOR_ONE;
-   default:
-      return factor;
-   }
-}
-
-static void
-cc_get_gen6_effective_rt(const struct ilo_dev *dev,
-                         const struct ilo_state_cc_info *info,
-                         uint8_t rt_index,
-                         struct ilo_state_cc_blend_rt_info *dst)
-{
-   const struct ilo_state_cc_blend_rt_info *rt = &info->blend.rt[rt_index];
-
-   if (rt->logicop_enable || rt->blend_enable ||
-       rt->argb_write_disables != 0xf)
-      assert(rt->cv_has_buffer);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 365:
-    *
-    *     "Logic Ops are only supported on *_UNORM surfaces (excluding _SRGB
-    *      variants), otherwise Logic Ops must be DISABLED."
-    *
-    * From the Broadwell PRM, volume 7, page 671:
-    *
-    *     "Logic Ops are supported on all blendable render targets and render
-    *      targets with *INT formats."
-    */
-   if (ilo_dev_gen(dev) < ILO_GEN(8) && rt->logicop_enable)
-      assert(rt->cv_is_unorm);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 361:
-    *
-    *     "Only certain surface formats support Color Buffer Blending.  Refer
-    *      to the Surface Format tables in Sampling Engine. Blending must be
-    *      disabled on a RenderTarget if blending is not supported."
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 365:
-    *
-    *     "Color Buffer Blending and Logic Ops must not be enabled
-    *      simultaneously, or behavior is UNDEFINED."
-    */
-   if (rt->blend_enable)
-      assert(!rt->cv_is_integer && !rt->logicop_enable);
-
-   *dst = *rt;
-   if (rt->blend_enable) {
-      /* 0x0 is reserved in enum gen_blend_factor */
-      assert(rt->rgb_src && rt->rgb_dst && rt->a_src && rt->a_dst);
-
-      if (rt->force_dst_alpha_one) {
-         dst->rgb_src = get_dst_alpha_one_blend_factor(rt->rgb_src, true);
-         dst->rgb_dst = get_dst_alpha_one_blend_factor(rt->rgb_dst, true);
-         dst->a_src = get_dst_alpha_one_blend_factor(rt->a_src, false);
-         dst->a_dst = get_dst_alpha_one_blend_factor(rt->a_dst, false);
-         dst->force_dst_alpha_one = false;
-      }
-   } else {
-      dst->rgb_src = GEN6_BLENDFACTOR_ONE;
-      dst->rgb_dst = GEN6_BLENDFACTOR_ZERO;
-      dst->rgb_func = GEN6_BLENDFUNCTION_ADD;
-      dst->a_src = dst->rgb_src;
-      dst->a_dst = dst->rgb_dst;
-      dst->a_func = dst->rgb_func;
-   }
-}
-
-static bool
-cc_set_gen6_BLEND_STATE(struct ilo_state_cc *cc,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_alpha_info *alpha = &info->alpha;
-   const struct ilo_state_cc_blend_info *blend = &info->blend;
-   uint32_t dw_rt[2 * ILO_STATE_CC_BLEND_MAX_RT_COUNT], dw1_invariant;
-   uint32_t dw0, dw1;
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 7.5);
-
-   if (!cc_validate_gen6_alpha(dev, info) ||
-       !cc_validate_gen6_blend(dev, info))
-      return false;
-
-   /*
-    * According to the Sandy Bridge PRM, volume 2 part 1, page 360, pre-blend
-    * and post-blend color clamps must be enabled in most cases.  For the
-    * other cases, they are either desirable or ignored.  We can enable them
-    * unconditionally.
-    */
-   dw1 = GEN6_RT_DW1_COLORCLAMP_RTFORMAT |
-         GEN6_RT_DW1_PRE_BLEND_CLAMP |
-         GEN6_RT_DW1_POST_BLEND_CLAMP;
-
-   if (alpha->alpha_to_coverage) {
-      dw1 |= GEN6_RT_DW1_ALPHA_TO_COVERAGE;
-
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 379:
-       *
-       *     "[DevSNB]: This bit (AlphaToCoverage Dither Enable) must be
-       *      disabled."
-       */
-      if (ilo_dev_gen(dev) >= ILO_GEN(7))
-         dw1 |= GEN6_RT_DW1_ALPHA_TO_COVERAGE_DITHER;
-   }
-
-   if (alpha->alpha_to_one)
-      dw1 |= GEN6_RT_DW1_ALPHA_TO_ONE;
-
-   if (alpha->test_enable) {
-      dw1 |= GEN6_RT_DW1_ALPHA_TEST_ENABLE |
-             alpha->test_func << GEN6_RT_DW1_ALPHA_TEST_FUNC__SHIFT;
-   } else {
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 371:
-       *
-       *     "When Alpha Test is disabled, Alpha Test Function must be
-       *      COMPAREFUNCTION_ALWAYS."
-       */
-      dw1 |= GEN6_COMPAREFUNCTION_ALWAYS <<
-         GEN6_RT_DW1_ALPHA_TEST_FUNC__SHIFT;
-   }
-
-   if (blend->dither_enable)
-      dw1 |= GEN6_RT_DW1_DITHER_ENABLE;
-
-   dw1_invariant = dw1;
-
-   for (i = 0; i < blend->rt_count; i++) {
-      struct ilo_state_cc_blend_rt_info rt;
-
-      cc_get_gen6_effective_rt(dev, info, i, &rt);
-
-      /* 0x0 is reserved for blend factors and we have to set them all */
-      dw0 = rt.a_func << GEN6_RT_DW0_ALPHA_FUNC__SHIFT |
-            rt.a_src << GEN6_RT_DW0_SRC_ALPHA_FACTOR__SHIFT |
-            rt.a_dst << GEN6_RT_DW0_DST_ALPHA_FACTOR__SHIFT |
-            rt.rgb_func << GEN6_RT_DW0_COLOR_FUNC__SHIFT |
-            rt.rgb_src << GEN6_RT_DW0_SRC_COLOR_FACTOR__SHIFT |
-            rt.rgb_dst << GEN6_RT_DW0_DST_COLOR_FACTOR__SHIFT;
-
-      if (rt.blend_enable) {
-         dw0 |= GEN6_RT_DW0_BLEND_ENABLE;
-
-         if (rt.a_src != rt.rgb_src ||
-             rt.a_dst != rt.rgb_dst ||
-             rt.a_func != rt.rgb_func)
-            dw0 |= GEN6_RT_DW0_INDEPENDENT_ALPHA_ENABLE;
-      }
-
-      dw1 = dw1_invariant |
-            rt.argb_write_disables << GEN6_RT_DW1_WRITE_DISABLES__SHIFT;
-
-      if (rt.logicop_enable) {
-         dw1 |= GEN6_RT_DW1_LOGICOP_ENABLE |
-                rt.logicop_func << GEN6_RT_DW1_LOGICOP_FUNC__SHIFT;
-      }
-
-      dw_rt[2 * i + 0] = dw0;
-      dw_rt[2 * i + 1] = dw1;
-   }
-
-
-   STATIC_ASSERT(ARRAY_SIZE(cc->blend) >= ARRAY_SIZE(dw_rt));
-   memcpy(&cc->blend[0], dw_rt, sizeof(uint32_t) * 2 * blend->rt_count);
-   cc->blend_state_count = info->blend.rt_count;
-
-   return true;
-}
-
-static bool
-cc_set_gen8_BLEND_STATE(struct ilo_state_cc *cc,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_alpha_info *alpha = &info->alpha;
-   const struct ilo_state_cc_blend_info *blend = &info->blend;
-   uint32_t dw_rt[2 * ILO_STATE_CC_BLEND_MAX_RT_COUNT], dw0, dw1;
-   bool indep_alpha_enable;
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   if (!cc_validate_gen6_alpha(dev, info) ||
-       !cc_validate_gen6_blend(dev, info))
-      return false;
-
-   indep_alpha_enable = false;
-   for (i = 0; i < blend->rt_count; i++) {
-      struct ilo_state_cc_blend_rt_info rt;
-
-      cc_get_gen6_effective_rt(dev, info, i, &rt);
-
-      dw0 = rt.rgb_src << GEN8_RT_DW0_SRC_COLOR_FACTOR__SHIFT |
-            rt.rgb_dst << GEN8_RT_DW0_DST_COLOR_FACTOR__SHIFT |
-            rt.rgb_func << GEN8_RT_DW0_COLOR_FUNC__SHIFT |
-            rt.a_src << GEN8_RT_DW0_SRC_ALPHA_FACTOR__SHIFT |
-            rt.a_dst << GEN8_RT_DW0_DST_ALPHA_FACTOR__SHIFT |
-            rt.a_func << GEN8_RT_DW0_ALPHA_FUNC__SHIFT |
-            rt.argb_write_disables << GEN8_RT_DW0_WRITE_DISABLES__SHIFT;
-
-      if (rt.blend_enable) {
-         dw0 |= GEN8_RT_DW0_BLEND_ENABLE;
-
-         if (rt.a_src != rt.rgb_src ||
-             rt.a_dst != rt.rgb_dst ||
-             rt.a_func != rt.rgb_func)
-            indep_alpha_enable = true;
-      }
-
-      dw1 = GEN8_RT_DW1_COLORCLAMP_RTFORMAT |
-            GEN8_RT_DW1_PRE_BLEND_CLAMP |
-            GEN8_RT_DW1_POST_BLEND_CLAMP;
-
-      if (rt.logicop_enable) {
-         dw1 |= GEN8_RT_DW1_LOGICOP_ENABLE |
-                rt.logicop_func << GEN8_RT_DW1_LOGICOP_FUNC__SHIFT;
-      }
-
-      dw_rt[2 * i + 0] = dw0;
-      dw_rt[2 * i + 1] = dw1;
-   }
-
-   dw0 = 0;
-
-   if (alpha->alpha_to_coverage) {
-      dw0 |= GEN8_BLEND_DW0_ALPHA_TO_COVERAGE |
-             GEN8_BLEND_DW0_ALPHA_TO_COVERAGE_DITHER;
-   }
-
-   if (indep_alpha_enable)
-      dw0 |= GEN8_BLEND_DW0_INDEPENDENT_ALPHA_ENABLE;
-
-   if (alpha->alpha_to_one)
-      dw0 |= GEN8_BLEND_DW0_ALPHA_TO_ONE;
-
-   if (alpha->test_enable) {
-      dw0 |= GEN8_BLEND_DW0_ALPHA_TEST_ENABLE |
-             alpha->test_func << GEN8_BLEND_DW0_ALPHA_TEST_FUNC__SHIFT;
-   } else {
-      dw0 |= GEN6_COMPAREFUNCTION_ALWAYS <<
-         GEN8_BLEND_DW0_ALPHA_TEST_FUNC__SHIFT;
-   }
-
-   if (blend->dither_enable)
-      dw0 |= GEN8_BLEND_DW0_DITHER_ENABLE;
-
-   STATIC_ASSERT(ARRAY_SIZE(cc->blend) >= 2 + ARRAY_SIZE(dw_rt));
-   cc->blend[1] = dw0;
-   memcpy(&cc->blend[2], dw_rt, sizeof(uint32_t) * 2 * blend->rt_count);
-   cc->blend_state_count = info->blend.rt_count;
-
-   return true;
-}
-
-static bool
-cc_set_gen8_3DSTATE_PS_BLEND(struct ilo_state_cc *cc,
-                             const struct ilo_dev *dev,
-                             const struct ilo_state_cc_info *info)
-{
-   const struct ilo_state_cc_alpha_info *alpha = &info->alpha;
-   const struct ilo_state_cc_blend_info *blend = &info->blend;
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   dw1 = 0;
-
-   if (alpha->alpha_to_coverage)
-      dw1 |= GEN8_PS_BLEND_DW1_ALPHA_TO_COVERAGE;
-
-   if (alpha->test_enable)
-      dw1 |= GEN8_PS_BLEND_DW1_ALPHA_TEST_ENABLE;
-
-   if (blend->rt_count) {
-      struct ilo_state_cc_blend_rt_info rt0;
-      uint8_t i;
-
-      cc_get_gen6_effective_rt(dev, info, 0, &rt0);
-
-      /* 0x0 is reserved for blend factors and we have to set them all */
-      dw1 |= rt0.a_src << GEN8_PS_BLEND_DW1_RT0_SRC_ALPHA_FACTOR__SHIFT |
-             rt0.a_dst << GEN8_PS_BLEND_DW1_RT0_DST_ALPHA_FACTOR__SHIFT |
-             rt0.rgb_src << GEN8_PS_BLEND_DW1_RT0_SRC_COLOR_FACTOR__SHIFT |
-             rt0.rgb_dst << GEN8_PS_BLEND_DW1_RT0_DST_COLOR_FACTOR__SHIFT;
-
-      for (i = 0; i < blend->rt_count; i++) {
-         if (blend->rt[i].argb_write_disables != 0xf) {
-            dw1 |= GEN8_PS_BLEND_DW1_WRITABLE_RT;
-            break;
-         }
-      }
-
-      if (rt0.blend_enable) {
-         dw1 |= GEN8_PS_BLEND_DW1_RT0_BLEND_ENABLE;
-
-         if (rt0.a_src != rt0.rgb_src || rt0.a_dst != rt0.rgb_dst)
-            dw1 |= GEN8_PS_BLEND_DW1_RT0_INDEPENDENT_ALPHA_ENABLE;
-      }
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(cc->blend) >= 1);
-   cc->blend[0] = dw1;
-
-   return true;
-}
-
-static bool
-cc_params_set_gen6_COLOR_CALC_STATE(struct ilo_state_cc *cc,
-                                    const struct ilo_dev *dev,
-                                    const struct ilo_state_cc_params_info *params)
-{
-   uint32_t dw0;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   dw0 = params->stencil_front.test_ref << GEN6_CC_DW0_STENCIL_REF__SHIFT |
-         params->stencil_back.test_ref << GEN6_CC_DW0_STENCIL1_REF__SHIFT |
-         GEN6_CC_DW0_ALPHATEST_FLOAT32;
-
-   STATIC_ASSERT(ARRAY_SIZE(cc->cc) >= 6);
-   cc->cc[0] = dw0;
-   cc->cc[1] = fui(params->alpha_ref);
-   cc->cc[2] = fui(params->blend_rgba[0]);
-   cc->cc[3] = fui(params->blend_rgba[1]);
-   cc->cc[4] = fui(params->blend_rgba[2]);
-   cc->cc[5] = fui(params->blend_rgba[3]);
-
-   return true;
-}
-
-bool
-ilo_state_cc_init(struct ilo_state_cc *cc,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_cc_info *info)
-{
-   assert(ilo_is_zeroed(cc, sizeof(*cc)));
-   return ilo_state_cc_set_info(cc, dev, info);
-}
-
-bool
-ilo_state_cc_set_info(struct ilo_state_cc *cc,
-                      const struct ilo_dev *dev,
-                      const struct ilo_state_cc_info *info)
-{
-   bool ret = true;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      ret &= cc_set_gen8_3DSTATE_WM_DEPTH_STENCIL(cc, dev, info);
-      ret &= cc_set_gen8_BLEND_STATE(cc, dev, info);
-      ret &= cc_set_gen8_3DSTATE_PS_BLEND(cc, dev, info);
-   } else {
-      ret &= cc_set_gen6_DEPTH_STENCIL_STATE(cc, dev, info);
-      ret &= cc_set_gen6_BLEND_STATE(cc, dev, info);
-   }
-
-   ret &= cc_params_set_gen6_COLOR_CALC_STATE(cc, dev, &info->params);
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_cc_set_params(struct ilo_state_cc *cc,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_cc_params_info *params)
-{
-   /* modify stencil masks */
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      uint32_t dw1 = cc->ds[0];
-      uint32_t dw2 = cc->ds[1];
-
-      if (dw1 & GEN8_ZS_DW1_STENCIL_TEST_ENABLE) {
-         const bool twosided_enable = (dw1 & GEN8_ZS_DW1_STENCIL1_ENABLE);
-         const struct ilo_state_cc_stencil_params_info *front_p =
-            &params->stencil_front;
-         const struct ilo_state_cc_stencil_params_info *back_p =
-            (twosided_enable) ? &params->stencil_back :
-                                &params->stencil_front;
-
-         if (front_p->write_mask || back_p->write_mask)
-            dw1 |= GEN8_ZS_DW1_STENCIL_WRITE_ENABLE;
-         else
-            dw1 &= ~GEN8_ZS_DW1_STENCIL_WRITE_ENABLE;
-
-         dw2 =
-            front_p->test_mask << GEN8_ZS_DW2_STENCIL_TEST_MASK__SHIFT |
-            front_p->write_mask << GEN8_ZS_DW2_STENCIL_WRITE_MASK__SHIFT |
-            back_p->test_mask << GEN8_ZS_DW2_STENCIL1_TEST_MASK__SHIFT |
-            back_p->write_mask << GEN8_ZS_DW2_STENCIL1_WRITE_MASK__SHIFT;
-      }
-
-      cc->ds[0] = dw1;
-      cc->ds[1] = dw2;
-   } else {
-      uint32_t dw0 = cc->ds[0];
-      uint32_t dw1 = cc->ds[1];
-
-      if (dw0 & GEN6_ZS_DW0_STENCIL_TEST_ENABLE) {
-         const bool twosided_enable = (dw0 & GEN6_ZS_DW0_STENCIL1_ENABLE);
-         const struct ilo_state_cc_stencil_params_info *front_p =
-            &params->stencil_front;
-         const struct ilo_state_cc_stencil_params_info *back_p =
-            (twosided_enable) ? &params->stencil_back :
-                                &params->stencil_front;
-
-         if (front_p->write_mask || back_p->write_mask)
-            dw0 |= GEN6_ZS_DW0_STENCIL_WRITE_ENABLE;
-         else
-            dw0 &= ~GEN6_ZS_DW0_STENCIL_WRITE_ENABLE;
-
-         dw1 =
-            front_p->test_mask << GEN6_ZS_DW1_STENCIL_TEST_MASK__SHIFT |
-            front_p->write_mask << GEN6_ZS_DW1_STENCIL_WRITE_MASK__SHIFT |
-            back_p->test_mask << GEN6_ZS_DW1_STENCIL1_TEST_MASK__SHIFT |
-            back_p->write_mask << GEN6_ZS_DW1_STENCIL1_WRITE_MASK__SHIFT;
-      }
-
-      cc->ds[0] = dw0;
-      cc->ds[1] = dw1;
-   }
-
-   /* modify COLOR_CALC_STATE */
-   cc_params_set_gen6_COLOR_CALC_STATE(cc, dev, params);
-
-   return true;
-}
-
-void
-ilo_state_cc_full_delta(const struct ilo_state_cc *cc,
-                        const struct ilo_dev *dev,
-                        struct ilo_state_cc_delta *delta)
-{
-   delta->dirty = ILO_STATE_CC_BLEND_STATE |
-                  ILO_STATE_CC_COLOR_CALC_STATE;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      delta->dirty |= ILO_STATE_CC_3DSTATE_WM_DEPTH_STENCIL |
-                      ILO_STATE_CC_3DSTATE_PS_BLEND;
-   } else {
-      delta->dirty |= ILO_STATE_CC_DEPTH_STENCIL_STATE;
-   }
-}
-
-void
-ilo_state_cc_get_delta(const struct ilo_state_cc *cc,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_cc *old,
-                       struct ilo_state_cc_delta *delta)
-{
-   delta->dirty = 0;
-
-   if (memcmp(cc->ds, old->ds, sizeof(cc->ds))) {
-      if (ilo_dev_gen(dev) >= ILO_GEN(8))
-         delta->dirty |= ILO_STATE_CC_3DSTATE_WM_DEPTH_STENCIL;
-      else
-         delta->dirty |= ILO_STATE_CC_DEPTH_STENCIL_STATE;
-   }
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      if (cc->blend[0] != old->blend[0])
-         delta->dirty |= ILO_STATE_CC_3DSTATE_PS_BLEND;
-
-      if (memcmp(&cc->blend[1], &old->blend[1],
-               sizeof(uint32_t) * (1 + 2 * cc->blend_state_count)))
-         delta->dirty |= ILO_STATE_CC_BLEND_STATE;
-   } else if (memcmp(cc->blend, old->blend,
-            sizeof(uint32_t) * 2 * cc->blend_state_count)) {
-      delta->dirty |= ILO_STATE_CC_BLEND_STATE;
-   }
-
-   if (memcmp(cc->cc, old->cc, sizeof(cc->cc)))
-      delta->dirty |= ILO_STATE_CC_COLOR_CALC_STATE;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_cc.h b/src/gallium/drivers/ilo/core/ilo_state_cc.h
deleted file mode 100644 (file)
index 5b96a60..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_CC_H
-#define ILO_STATE_CC_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-/*
- * From the Sandy Bridge PRM, volume 2 part 1, page 38:
- *
- *     "Render Target Index. Specifies the render target index that will be
- *      used to select blend state from BLEND_STATE.
- *      Format = U3"
- */
-#define ILO_STATE_CC_BLEND_MAX_RT_COUNT 8
-
-enum ilo_state_cc_dirty_bits {
-   ILO_STATE_CC_3DSTATE_WM_DEPTH_STENCIL           = (1 << 0),
-   ILO_STATE_CC_3DSTATE_PS_BLEND                   = (1 << 1),
-   ILO_STATE_CC_DEPTH_STENCIL_STATE                = (1 << 2),
-   ILO_STATE_CC_BLEND_STATE                        = (1 << 3),
-   ILO_STATE_CC_COLOR_CALC_STATE                   = (1 << 4),
-};
-
-/**
- * AlphaCoverage and AlphaTest.
- */
-struct ilo_state_cc_alpha_info {
-   bool cv_sample_count_one;
-   bool cv_float_source0_alpha;
-
-   bool alpha_to_coverage;
-   bool alpha_to_one;
-
-   bool test_enable;
-   enum gen_compare_function test_func;
-};
-
-struct ilo_state_cc_stencil_op_info {
-   enum gen_compare_function test_func;
-   enum gen_stencil_op fail_op;
-   enum gen_stencil_op zfail_op;
-   enum gen_stencil_op zpass_op;
-};
-
-/**
- * StencilTest.
- */
-struct ilo_state_cc_stencil_info {
-   bool cv_has_buffer;
-
-   bool test_enable;
-   bool twosided_enable;
-
-   struct ilo_state_cc_stencil_op_info front;
-   struct ilo_state_cc_stencil_op_info back;
-};
-
-/**
- * DepthTest.
- */
-struct ilo_state_cc_depth_info {
-   bool cv_has_buffer;
-
-   bool test_enable;
-   /* independent from test_enable */
-   bool write_enable;
-
-   enum gen_compare_function test_func;
-};
-
-struct ilo_state_cc_blend_rt_info {
-   bool cv_has_buffer;
-   bool cv_is_unorm;
-   bool cv_is_integer;
-
-   uint8_t argb_write_disables;
-
-   bool logicop_enable;
-   enum gen_logic_op logicop_func;
-
-   bool blend_enable;
-   bool force_dst_alpha_one;
-   enum gen_blend_factor rgb_src;
-   enum gen_blend_factor rgb_dst;
-   enum gen_blend_function rgb_func;
-   enum gen_blend_factor a_src;
-   enum gen_blend_factor a_dst;
-   enum gen_blend_function a_func;
-};
-
-/**
- * ColorBufferBlending, Dithering, and LogicOps.
- */
-struct ilo_state_cc_blend_info {
-   const struct ilo_state_cc_blend_rt_info *rt;
-   uint8_t rt_count;
-
-   bool dither_enable;
-};
-
-struct ilo_state_cc_stencil_params_info {
-   uint8_t test_ref;
-   uint8_t test_mask;
-   uint8_t write_mask;
-};
-
-/**
- * CC parameters.
- */
-struct ilo_state_cc_params_info {
-   float alpha_ref;
-
-   struct ilo_state_cc_stencil_params_info stencil_front;
-   struct ilo_state_cc_stencil_params_info stencil_back;
-
-   float blend_rgba[4];
-};
-
-/**
- * Pixel processing.
- */
-struct ilo_state_cc_info {
-   struct ilo_state_cc_alpha_info alpha;
-   struct ilo_state_cc_stencil_info stencil;
-   struct ilo_state_cc_depth_info depth;
-   struct ilo_state_cc_blend_info blend;
-
-   struct ilo_state_cc_params_info params;
-};
-
-struct ilo_state_cc {
-   uint32_t ds[3];
-
-   uint8_t blend_state_count;
-   uint32_t blend[1 + 1 + 2 * ILO_STATE_CC_BLEND_MAX_RT_COUNT];
-
-   uint32_t cc[6];
-};
-
-struct ilo_state_cc_delta {
-   uint32_t dirty;
-};
-
-bool
-ilo_state_cc_init(struct ilo_state_cc *cc,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_cc_info *info);
-
-bool
-ilo_state_cc_set_info(struct ilo_state_cc *cc,
-                      const struct ilo_dev *dev,
-                      const struct ilo_state_cc_info *info);
-
-bool
-ilo_state_cc_set_params(struct ilo_state_cc *cc,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_cc_params_info *params);
-
-void
-ilo_state_cc_full_delta(const struct ilo_state_cc *cc,
-                        const struct ilo_dev *dev,
-                        struct ilo_state_cc_delta *delta);
-
-void
-ilo_state_cc_get_delta(const struct ilo_state_cc *cc,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_cc *old,
-                       struct ilo_state_cc_delta *delta);
-
-#endif /* ILO_STATE_CC_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_compute.c b/src/gallium/drivers/ilo/core/ilo_state_compute.c
deleted file mode 100644 (file)
index ba3ff90..0000000
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_state_compute.h"
-
-struct compute_urb_configuration {
-   int idrt_entry_count;
-   int curbe_entry_count;
-
-   int urb_entry_count;
-   /* in 256-bit register increments */
-   int urb_entry_size;
-};
-
-static int
-get_gen6_rob_entry_count(const struct ilo_dev *dev)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 2, page 60:
-    *
-    *     "ROB has 64KB of storage; 2048 entries."
-    *
-    * From the valid ranges of "CURBE Allocation Size", we can also conclude
-    * that interface entries and CURBE data must be in ROB.  And that ROB
-    * should be 16KB, or 512 entries, on Gen7 GT1.
-    */
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-      return 2048;
-   else if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      return (dev->gt == 2) ? 2048 : 512;
-   else
-      return (dev->gt == 2) ? 2048 : 1024;
-}
-
-static int
-get_gen6_idrt_entry_count(const struct ilo_dev *dev)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 2, page 21:
-    *
-    *     "The first 32 URB entries are reserved for the interface
-    *      descriptor..."
-    *
-    * From the Haswell PRM, volume 7, page 836:
-    *
-    *     "The first 64 URB entries are reserved for the interface
-    *      description..."
-    */
-   return (ilo_dev_gen(dev) >= ILO_GEN(7.5)) ? 64 : 32;
-}
-
-static int
-get_gen6_curbe_entry_count(const struct ilo_dev *dev, uint32_t curbe_size)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 2, page 21:
-    *
-    *     "(CURBE Allocation Size) Specifies the total length allocated for
-    *      CURBE, in 256-bit register increments.
-    */
-   const int entry_count = (curbe_size + 31) / 32;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(get_gen6_idrt_entry_count(dev) + entry_count <=
-         get_gen6_rob_entry_count(dev));
-
-   return entry_count;
-}
-
-static bool
-compute_get_gen6_urb_configuration(const struct ilo_dev *dev,
-                                   const struct ilo_state_compute_info *info,
-                                   struct compute_urb_configuration *urb)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   urb->idrt_entry_count = get_gen6_idrt_entry_count(dev);
-   urb->curbe_entry_count =
-      get_gen6_curbe_entry_count(dev, info->curbe_alloc_size);
-
-   /*
-    * From the Broadwell PRM, volume 2b, page 451:
-    *
-    *     "Please note that 0 is not allowed for this field (Number of URB
-    *      Entries)."
-    */
-   urb->urb_entry_count = (ilo_dev_gen(dev) >= ILO_GEN(8)) ? 1 : 0;
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 2, page 52:
-    *
-    *     "(URB Entry Allocation Size) Specifies the length of each URB entry
-    *      used by the unit, in 256-bit register increments - 1."
-    */
-   urb->urb_entry_size = 1;
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 2, page 22:
-    *
-    *      MEDIA_VFE_STATE specifies the amount of CURBE space, the URB handle
-    *      size and the number of URB handles. The driver must ensure that
-    *      ((URB_handle_size * URB_num_handle) - CURBE - 32) <=
-    *      URB_allocation_in_L3."
-    */
-   assert(urb->idrt_entry_count + urb->curbe_entry_count +
-         urb->urb_entry_count * urb->urb_entry_size <=
-         info->cv_urb_alloc_size / 32);
-
-   return true;
-}
-
-static int
-compute_interface_get_gen6_read_end(const struct ilo_dev *dev,
-                                    const struct ilo_state_compute_interface_info *interface)
-{
-   const int per_thread_read = (interface->curbe_read_length + 31) / 32;
-   const int cross_thread_read =
-      (interface->cross_thread_curbe_read_length + 31) / 32;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(interface->curbe_read_offset % 32 == 0);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 2, page 60:
-    *
-    *     "(Constant URB Entry Read Length) [0,63]"
-    */
-   assert(per_thread_read <= 63);
-
-   /*
-    * From the Haswell PRM, volume 2d, page 199:
-    *
-    *     "(Cross-Thread Constant Data Read Length) [0,127]"
-    */
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-      assert(cross_thread_read <= 127);
-   else
-      assert(!cross_thread_read);
-
-   if (per_thread_read || cross_thread_read) {
-      return interface->curbe_read_offset / 32 + cross_thread_read +
-         per_thread_read * interface->thread_group_size;
-   } else {
-      return 0;
-   }
-}
-
-static bool
-compute_validate_gen6(const struct ilo_dev *dev,
-                      const struct ilo_state_compute_info *info,
-                      const struct compute_urb_configuration *urb)
-{
-   int min_curbe_entry_count;
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(info->interface_count <= urb->idrt_entry_count);
-
-   min_curbe_entry_count = 0;
-   for (i = 0; i < info->interface_count; i++) {
-      const int read_end =
-         compute_interface_get_gen6_read_end(dev, &info->interfaces[i]);
-
-      if (min_curbe_entry_count < read_end)
-         min_curbe_entry_count = read_end;
-   }
-
-   assert(min_curbe_entry_count <= urb->curbe_entry_count);
-
-   /*
-    * From the Broadwell PRM, volume 2b, page 452:
-    *
-    *     "CURBE Allocation Size should be 0 for GPGPU workloads that uses
-    *      indirect instead of CURBE."
-    */
-   if (!min_curbe_entry_count)
-      assert(!urb->curbe_entry_count);
-
-   return true;
-}
-
-static uint32_t
-compute_get_gen6_per_thread_scratch_size(const struct ilo_dev *dev,
-                                         const struct ilo_state_compute_info *info,
-                                         uint8_t *per_thread_space)
-{
-   ILO_DEV_ASSERT(dev, 6, 7);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 2, page 30:
-    *
-    *     "(Per Thread Scratch Space)
-    *      Range = [0,11] indicating [1k bytes, 12k bytes] [DevSNB]"
-    */
-   assert(info->per_thread_scratch_size <= 12 * 1024);
-
-   if (!info->per_thread_scratch_size) {
-      *per_thread_space = 0;
-      return 0;
-   }
-
-   *per_thread_space = (info->per_thread_scratch_size > 1024) ?
-      (info->per_thread_scratch_size - 1) / 1024 : 0;
-
-   return 1024 * (1 + *per_thread_space);
-}
-
-static uint32_t
-compute_get_gen75_per_thread_scratch_size(const struct ilo_dev *dev,
-                                          const struct ilo_state_compute_info *info,
-                                          uint8_t *per_thread_space)
-{
-   ILO_DEV_ASSERT(dev, 7.5, 8);
-
-   /*
-    * From the Haswell PRM, volume 2b, page 407:
-    *
-    *     "(Per Thread Scratch Space)
-    *      [0,10]  Indicating [2k bytes, 2 Mbytes]"
-    *
-    *     "Note: The scratch space should be declared as 2x the desired
-    *      scratch space. The stack will start at the half-way point instead
-    *      of the end. The upper half of scratch space will not be accessed
-    *      and so does not have to be allocated in memory."
-    *
-    * From the Broadwell PRM, volume 2a, page 450:
-    *
-    *     "(Per Thread Scratch Space)
-    *      [0,11]  indicating [1k bytes, 2 Mbytes]"
-    */
-   assert(info->per_thread_scratch_size <=
-         ((ilo_dev_gen(dev) >= ILO_GEN(8)) ? 2 : 1) * 1024 * 1024);
-
-   if (!info->per_thread_scratch_size) {
-      *per_thread_space = 0;
-      return 0;
-   }
-
-   /* next power of two, starting from 1KB */
-   *per_thread_space = (info->per_thread_scratch_size > 1024) ?
-      (util_last_bit(info->per_thread_scratch_size - 1) - 10) : 0;
-
-   return 1 << (10 + *per_thread_space);
-}
-
-static bool
-compute_set_gen6_MEDIA_VFE_STATE(struct ilo_state_compute *compute,
-                                 const struct ilo_dev *dev,
-                                 const struct ilo_state_compute_info *info)
-{
-   struct compute_urb_configuration urb;
-   uint32_t per_thread_size;
-   uint8_t per_thread_space;
-
-   uint32_t dw1, dw2, dw4;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!compute_get_gen6_urb_configuration(dev, info, &urb) ||
-       !compute_validate_gen6(dev, info, &urb))
-      return false;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5)) {
-      per_thread_size = compute_get_gen75_per_thread_scratch_size(dev,
-            info, &per_thread_space);
-   } else {
-      per_thread_size = compute_get_gen6_per_thread_scratch_size(dev,
-            info, &per_thread_space);
-   }
-
-   dw1 = per_thread_space << GEN6_VFE_DW1_SCRATCH_SPACE_PER_THREAD__SHIFT;
-
-   dw2 = (dev->thread_count - 1) << GEN6_VFE_DW2_MAX_THREADS__SHIFT |
-         urb.urb_entry_count << GEN6_VFE_DW2_URB_ENTRY_COUNT__SHIFT |
-         GEN6_VFE_DW2_RESET_GATEWAY_TIMER |
-         GEN6_VFE_DW2_BYPASS_GATEWAY_CONTROL;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7) && ilo_dev_gen(dev) <= ILO_GEN(7.5))
-      dw2 |= GEN7_VFE_DW2_GPGPU_MODE;
-
-   assert(urb.urb_entry_size);
-
-   dw4 = (urb.urb_entry_size - 1) << GEN6_VFE_DW4_URB_ENTRY_SIZE__SHIFT |
-         urb.curbe_entry_count << GEN6_VFE_DW4_CURBE_SIZE__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(compute->vfe) >= 3);
-   compute->vfe[0] = dw1;
-   compute->vfe[1] = dw2;
-   compute->vfe[2] = dw4;
-
-   compute->scratch_size = per_thread_size * dev->thread_count;
-
-   return true;
-}
-
-static uint8_t
-compute_interface_get_gen6_sampler_count(const struct ilo_dev *dev,
-                                         const struct ilo_state_compute_interface_info *interface)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-   return (interface->sampler_count <= 12) ?
-      (interface->sampler_count + 3) / 4 : 4;
-}
-
-static uint8_t
-compute_interface_get_gen6_surface_count(const struct ilo_dev *dev,
-                                         const struct ilo_state_compute_interface_info *interface)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-   return (interface->surface_count <= 31) ? interface->surface_count : 31;
-}
-
-static uint8_t
-compute_interface_get_gen7_slm_size(const struct ilo_dev *dev,
-                                    const struct ilo_state_compute_interface_info *interface)
-{
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 2, page 61:
-    *
-    *     "The amount is specified in 4k blocks, but only powers of 2 are
-    *      allowed: 0, 4k, 8k, 16k, 32k and 64k per half-slice."
-    */
-   assert(interface->slm_size <= 64 * 1024);
-
-   return util_next_power_of_two((interface->slm_size + 4095) / 4096);
-}
-
-static bool
-compute_set_gen6_INTERFACE_DESCRIPTOR_DATA(struct ilo_state_compute *compute,
-                                           const struct ilo_dev *dev,
-                                           const struct ilo_state_compute_info *info)
-{
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   for (i = 0; i < info->interface_count; i++) {
-      const struct ilo_state_compute_interface_info *interface =
-         &info->interfaces[i];
-      uint16_t read_offset, per_thread_read_len, cross_thread_read_len;
-      uint8_t sampler_count, surface_count;
-      uint32_t dw0, dw2, dw3, dw4, dw5, dw6;
-
-      assert(interface->kernel_offset % 64 == 0);
-      assert(interface->thread_group_size);
-
-      read_offset = interface->curbe_read_offset / 32;
-      per_thread_read_len = (interface->curbe_read_length + 31) / 32;
-      cross_thread_read_len =
-         (interface->cross_thread_curbe_read_length + 31) / 32;
-
-      sampler_count =
-         compute_interface_get_gen6_sampler_count(dev, interface);
-      surface_count =
-         compute_interface_get_gen6_surface_count(dev, interface);
-
-      dw0 = interface->kernel_offset;
-      dw2 = sampler_count << GEN6_IDRT_DW2_SAMPLER_COUNT__SHIFT;
-      dw3 = surface_count << GEN6_IDRT_DW3_BINDING_TABLE_SIZE__SHIFT;
-      dw4 = per_thread_read_len << GEN6_IDRT_DW4_CURBE_READ_LEN__SHIFT |
-            read_offset << GEN6_IDRT_DW4_CURBE_READ_OFFSET__SHIFT;
-
-      dw5 = 0;
-      dw6 = 0;
-      if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-         const uint8_t slm_size =
-            compute_interface_get_gen7_slm_size(dev, interface);
-
-         dw5 |= GEN7_IDRT_DW5_ROUNDING_MODE_RTNE;
-
-         if (slm_size) {
-            dw5 |= GEN7_IDRT_DW5_BARRIER_ENABLE |
-                   slm_size << GEN7_IDRT_DW5_SLM_SIZE__SHIFT;
-         }
-
-         /*
-          * From the Haswell PRM, volume 2d, page 199:
-          *
-          *     "(Number of Threads in GPGPU Thread Group) Specifies the
-          *      number of threads that are in this thread group.  Used to
-          *      program the barrier for the number of messages to expect. The
-          *      minimum value is 0 (which will disable the barrier), while
-          *      the maximum value is the number of threads in a subslice for
-          *      local barriers."
-          *
-          * From the Broadwell PRM, volume 2d, page 183:
-          *
-          *     "(Number of Threads in GPGPU Thread Group) Specifies the
-          *      number of threads that are in this thread group.  The minimum
-          *      value is 1, while the maximum value is the number of threads
-          *      in a subslice for local barriers. See vol1b Configurations
-          *      for the number of threads per subslice for different
-          *      products.  The maximum value for global barriers is limited
-          *      by the number of threads in the system, or by 511, whichever
-          *      is lower. This field should not be set to 0 even if the
-          *      barrier is disabled, since an accurate value is needed for
-          *      proper pre-emption."
-          */
-         if (slm_size || ilo_dev_gen(dev) >= ILO_GEN(8)) {
-            dw5 |= interface->thread_group_size <<
-               GEN7_IDRT_DW5_THREAD_GROUP_SIZE__SHIFT;
-         }
-
-         if (ilo_dev_gen(dev) >= ILO_GEN(7.5)) {
-            dw6 |= cross_thread_read_len <<
-               GEN75_IDRT_DW6_CROSS_THREAD_CURBE_READ_LEN__SHIFT;
-         }
-      }
-
-      STATIC_ASSERT(ARRAY_SIZE(compute->idrt[i]) >= 6);
-      compute->idrt[i][0] = dw0;
-      compute->idrt[i][1] = dw2;
-      compute->idrt[i][2] = dw3;
-      compute->idrt[i][3] = dw4;
-      compute->idrt[i][4] = dw5;
-      compute->idrt[i][5] = dw6;
-   }
-
-   return true;
-}
-
-bool
-ilo_state_compute_init(struct ilo_state_compute *compute,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_compute_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(compute, sizeof(*compute)));
-   assert(ilo_is_zeroed(info->data, info->data_size));
-
-   assert(ilo_state_compute_data_size(dev, info->interface_count) <=
-         info->data_size);
-   compute->idrt = (uint32_t (*)[6]) info->data;
-
-   ret &= compute_set_gen6_MEDIA_VFE_STATE(compute, dev, info);
-   ret &= compute_set_gen6_INTERFACE_DESCRIPTOR_DATA(compute, dev, info);
-
-   assert(ret);
-
-   return ret;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_compute.h b/src/gallium/drivers/ilo/core/ilo_state_compute.h
deleted file mode 100644 (file)
index bd56bba..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_COMPUTE_H
-#define ILO_STATE_COMPUTE_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-/*
- * From the Haswell PRM, volume 7, page 836:
- *
- *     "The first 64 URB entries are reserved for the interface
- *      description..."
- */
-#define ILO_STATE_COMPUTE_MAX_INTERFACE_COUNT 64
-
-struct ilo_state_compute_interface_info {
-   /* usually 0 unless there are multiple interfaces */
-   uint32_t kernel_offset;
-
-   uint8_t sampler_count;
-   uint8_t surface_count;
-
-   uint16_t thread_group_size;
-   uint32_t slm_size;
-
-   uint16_t curbe_read_offset;
-   uint16_t curbe_read_length;
-   uint16_t cross_thread_curbe_read_length;
-};
-
-struct ilo_state_compute_info {
-   void *data;
-   size_t data_size;
-
-   const struct ilo_state_compute_interface_info *interfaces;
-   uint8_t interface_count;
-
-   uint32_t per_thread_scratch_size;
-
-   uint32_t cv_urb_alloc_size;
-   uint32_t curbe_alloc_size;
-};
-
-struct ilo_state_compute {
-   uint32_t vfe[3];
-
-   uint32_t (*idrt)[6];
-   uint8_t idrt_count;
-
-   uint32_t scratch_size;
-};
-
-static inline size_t
-ilo_state_compute_data_size(const struct ilo_dev *dev,
-                            uint8_t interface_count)
-{
-   const struct ilo_state_compute *compute = NULL;
-   return sizeof(compute->idrt[0]) * interface_count;
-}
-
-bool
-ilo_state_compute_init(struct ilo_state_compute *compute,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_compute_info *info);
-
-static inline uint32_t
-ilo_state_compute_get_scratch_size(const struct ilo_state_compute *compute)
-{
-   return compute->scratch_size;
-}
-
-#endif /* ILO_STATE_COMPUTE_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_raster.c b/src/gallium/drivers/ilo/core/ilo_state_raster.c
deleted file mode 100644 (file)
index a694f71..0000000
+++ /dev/null
@@ -1,1248 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_state_raster.h"
-
-static bool
-raster_validate_gen6_clip(const struct ilo_dev *dev,
-                          const struct ilo_state_raster_info *info)
-{
-   const struct ilo_state_raster_clip_info *clip = &info->clip;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(clip->viewport_count);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 188:
-    *
-    *     ""Clip Distance Cull Test Enable Bitmask" and "Clip Distance Clip
-    *      Test Enable Bitmask" should not have overlapping bits in the mask,
-    *      else the results are undefined."
-    */
-   assert(!(clip->user_cull_enables & clip->user_clip_enables));
-
-   if (ilo_dev_gen(dev) < ILO_GEN(9))
-      assert(clip->z_near_enable == clip->z_far_enable);
-
-   return true;
-}
-
-static bool
-raster_set_gen6_3DSTATE_CLIP(struct ilo_state_raster *rs,
-                             const struct ilo_dev *dev,
-                             const struct ilo_state_raster_info *info)
-{
-   const struct ilo_state_raster_clip_info *clip = &info->clip;
-   const struct ilo_state_raster_setup_info *setup = &info->setup;
-   const struct ilo_state_raster_tri_info *tri = &info->tri;
-   const struct ilo_state_raster_scan_info *scan = &info->scan;
-   uint32_t dw1, dw2, dw3;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!raster_validate_gen6_clip(dev, info))
-      return false;
-
-   dw1 = clip->user_cull_enables << GEN6_CLIP_DW1_UCP_CULL_ENABLES__SHIFT;
-
-   if (clip->stats_enable)
-      dw1 |= GEN6_CLIP_DW1_STATISTICS;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 219:
-       *
-       *     "Workaround : Due to Hardware issue "EarlyCull" needs to be
-       *      enabled only for the cases where the incoming primitive topology
-       *      into the clipper guaranteed to be Trilist."
-       *
-       * What does this mean?
-       */
-      dw1 |= GEN7_CLIP_DW1_SUBPIXEL_8BITS |
-             GEN7_CLIP_DW1_EARLY_CULL_ENABLE;
-
-      if (ilo_dev_gen(dev) <= ILO_GEN(7.5)) {
-         dw1 |= tri->front_winding << GEN7_CLIP_DW1_FRONT_WINDING__SHIFT |
-                tri->cull_mode << GEN7_CLIP_DW1_CULL_MODE__SHIFT;
-      }
-   }
-
-   dw2 = clip->user_clip_enables << GEN6_CLIP_DW2_UCP_CLIP_ENABLES__SHIFT |
-         GEN6_CLIPMODE_NORMAL << GEN6_CLIP_DW2_CLIP_MODE__SHIFT;
-
-   if (clip->clip_enable)
-      dw2 |= GEN6_CLIP_DW2_CLIP_ENABLE;
-
-   if (clip->z_near_zero)
-      dw2 |= GEN6_CLIP_DW2_APIMODE_D3D;
-   else
-      dw2 |= GEN6_CLIP_DW2_APIMODE_OGL;
-
-   if (clip->xy_test_enable)
-      dw2 |= GEN6_CLIP_DW2_XY_TEST_ENABLE;
-
-   if (ilo_dev_gen(dev) < ILO_GEN(8) && clip->z_near_enable)
-      dw2 |= GEN6_CLIP_DW2_Z_TEST_ENABLE;
-
-   if (clip->gb_test_enable)
-      dw2 |= GEN6_CLIP_DW2_GB_TEST_ENABLE;
-
-   if (scan->barycentric_interps & (GEN6_INTERP_NONPERSPECTIVE_PIXEL |
-                                    GEN6_INTERP_NONPERSPECTIVE_CENTROID |
-                                    GEN6_INTERP_NONPERSPECTIVE_SAMPLE))
-      dw2 |= GEN6_CLIP_DW2_NONPERSPECTIVE_BARYCENTRIC_ENABLE;
-
-   if (setup->first_vertex_provoking) {
-      dw2 |= 0 << GEN6_CLIP_DW2_TRI_PROVOKE__SHIFT |
-             0 << GEN6_CLIP_DW2_LINE_PROVOKE__SHIFT |
-             1 << GEN6_CLIP_DW2_TRIFAN_PROVOKE__SHIFT;
-   } else {
-      dw2 |= 2 << GEN6_CLIP_DW2_TRI_PROVOKE__SHIFT |
-             1 << GEN6_CLIP_DW2_LINE_PROVOKE__SHIFT |
-             2 << GEN6_CLIP_DW2_TRIFAN_PROVOKE__SHIFT;
-   }
-
-   dw3 = 0x1 << GEN6_CLIP_DW3_MIN_POINT_WIDTH__SHIFT |
-         0x7ff << GEN6_CLIP_DW3_MAX_POINT_WIDTH__SHIFT |
-         (clip->viewport_count - 1) << GEN6_CLIP_DW3_MAX_VPINDEX__SHIFT;
-
-   if (clip->force_rtaindex_zero)
-      dw3 |= GEN6_CLIP_DW3_FORCE_RTAINDEX_ZERO;
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->clip) >= 3);
-   rs->clip[0] = dw1;
-   rs->clip[1] = dw2;
-   rs->clip[2] = dw3;
-
-   return true;
-}
-
-static bool
-raster_params_is_gen6_line_aa_allowed(const struct ilo_dev *dev,
-                                      const struct ilo_state_raster_params_info *params)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 251:
-    *
-    *     "This field (Anti-aliasing Enable) must be disabled if any of the
-    *      render targets have integer (UINT or SINT) surface format."
-    */
-   if (params->any_integer_rt)
-      return false;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 321:
-    *
-    *     "[DevSNB+]: This field (Hierarchical Depth Buffer Enable) must be
-    *      disabled if Anti-aliasing Enable in 3DSTATE_SF is enabled.
-    */
-   if (ilo_dev_gen(dev) == ILO_GEN(6) && params->hiz_enable)
-      return false;
-
-   return true;
-}
-
-static void
-raster_get_gen6_effective_line(const struct ilo_dev *dev,
-                               const struct ilo_state_raster_info *info,
-                               struct ilo_state_raster_line_info *line)
-{
-   const struct ilo_state_raster_setup_info *setup = &info->setup;
-   const struct ilo_state_raster_params_info *params = &info->params;
-
-   *line = info->line;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 251:
-    *
-    *     "This field (Anti-aliasing Enable) is ignored when Multisample
-    *      Rasterization Mode is MSRASTMODE_ON_xx."
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 251:
-    *
-    *     "Setting a Line Width of 0.0 specifies the rasterization of the
-    *      "thinnest" (one-pixel-wide), non-antialiased lines. Note that
-    *      this effectively overrides the effect of AAEnable (though the
-    *      AAEnable state variable is not modified). Lines rendered with
-    *      zero Line Width are rasterized using GIQ (Grid Intersection
-    *      Quantization) rules as specified by the GDI and Direct3D APIs."
-    *
-    *     "Software must not program a value of 0.0 when running in
-    *      MSRASTMODE_ON_xxx modes - zero-width lines are not available
-    *      when multisampling rasterization is enabled."
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 294:
-    *
-    *     "Line stipple, controlled via the Line Stipple Enable state variable
-    *      in WM_STATE, discards certain pixels that are produced by non-AA
-    *      line rasterization."
-    */
-   if (setup->line_msaa_enable ||
-       !raster_params_is_gen6_line_aa_allowed(dev, params))
-      line->aa_enable = false;
-   if (setup->line_msaa_enable || line->aa_enable) {
-      line->stipple_enable = false;
-      line->giq_enable = false;
-      line->giq_last_pixel = false;
-   }
-}
-
-static bool
-raster_validate_gen8_raster(const struct ilo_dev *dev,
-                            const struct ilo_state_raster_info *info)
-{
-   const struct ilo_state_raster_setup_info *setup = &info->setup;
-   const struct ilo_state_raster_tri_info *tri = &info->tri;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 249:
-    *
-    *     "This setting (SOLID) is required when rendering rectangle
-    *      (RECTLIST) objects.
-    */
-   if (tri->fill_mode_front != GEN6_FILLMODE_SOLID ||
-       tri->fill_mode_back != GEN6_FILLMODE_SOLID)
-      assert(!setup->cv_is_rectangle);
-
-   return true;
-}
-
-static enum gen_msrast_mode
-raster_setup_get_gen6_msrast_mode(const struct ilo_dev *dev,
-                                  const struct ilo_state_raster_setup_info *setup)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (setup->line_msaa_enable) {
-      return (setup->msaa_enable) ? GEN6_MSRASTMODE_ON_PATTERN :
-                                    GEN6_MSRASTMODE_ON_PIXEL;
-   } else {
-      return (setup->msaa_enable) ? GEN6_MSRASTMODE_OFF_PATTERN :
-                                    GEN6_MSRASTMODE_OFF_PIXEL;
-   }
-}
-
-static int
-get_gen6_line_width(const struct ilo_dev *dev, float fwidth,
-                    bool line_aa_enable, bool line_giq_enable)
-{
-   int line_width;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* in U3.7 */
-   line_width = (int) (fwidth * 128.0f + 0.5f);
-
-   /*
-    * Smooth lines should intersect ceil(line_width) or (ceil(line_width) + 1)
-    * pixels in the minor direction.  We have to make the lines slightly
-    * thicker, 0.5 pixel on both sides, so that they intersect that many
-    * pixels.
-    */
-   if (line_aa_enable)
-      line_width += 128;
-
-   line_width = CLAMP(line_width, 1, 1023);
-
-   if (line_giq_enable && line_width == 128)
-      line_width = 0;
-
-   return line_width;
-}
-
-static int
-get_gen6_point_width(const struct ilo_dev *dev, float fwidth)
-{
-   int point_width;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* in U8.3 */
-   point_width = (int) (fwidth * 8.0f + 0.5f);
-   point_width = CLAMP(point_width, 1, 2047);
-
-   return point_width;
-}
-
-static bool
-raster_set_gen7_3DSTATE_SF(struct ilo_state_raster *rs,
-                           const struct ilo_dev *dev,
-                           const struct ilo_state_raster_info *info,
-                           const struct ilo_state_raster_line_info *line)
-{
-   const struct ilo_state_raster_clip_info *clip = &info->clip;
-   const struct ilo_state_raster_setup_info *setup = &info->setup;
-   const struct ilo_state_raster_point_info *point = &info->point;
-   const struct ilo_state_raster_tri_info *tri = &info->tri;
-   const struct ilo_state_raster_params_info *params = &info->params;
-   const enum gen_msrast_mode msrast =
-      raster_setup_get_gen6_msrast_mode(dev, setup);
-   const int line_width = get_gen6_line_width(dev, params->line_width,
-         line->aa_enable, line->giq_enable);
-   const int point_width = get_gen6_point_width(dev, params->point_width);
-   uint32_t dw1, dw2, dw3;
-
-   ILO_DEV_ASSERT(dev, 6, 7.5);
-
-   if (!raster_validate_gen8_raster(dev, info))
-      return false;
-
-   dw1 = tri->fill_mode_front << GEN7_SF_DW1_FILL_MODE_FRONT__SHIFT |
-         tri->fill_mode_back << GEN7_SF_DW1_FILL_MODE_BACK__SHIFT |
-         tri->front_winding << GEN7_SF_DW1_FRONT_WINDING__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7) && ilo_dev_gen(dev) <= ILO_GEN(7.5)) {
-      enum gen_depth_format format;
-
-      /* do it here as we want 0x0 to be valid */
-      switch (tri->depth_offset_format) {
-      case GEN6_ZFORMAT_D32_FLOAT_S8X24_UINT:
-         format = GEN6_ZFORMAT_D32_FLOAT;
-         break;
-      case GEN6_ZFORMAT_D24_UNORM_S8_UINT:
-         format = GEN6_ZFORMAT_D24_UNORM_X8_UINT;
-         break;
-      default:
-         format = tri->depth_offset_format;
-         break;
-      }
-
-      dw1 |= format << GEN7_SF_DW1_DEPTH_FORMAT__SHIFT;
-   }
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 248:
-    *
-    *     "This bit (Statistics Enable) should be set whenever clipping is
-    *      enabled and the Statistics Enable bit is set in CLIP_STATE. It
-    *      should be cleared if clipping is disabled or Statistics Enable in
-    *      CLIP_STATE is clear."
-    */
-   if (clip->stats_enable && clip->clip_enable)
-      dw1 |= GEN7_SF_DW1_STATISTICS;
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 258:
-    *
-    *     "This bit (Legacy Global Depth Bias Enable, Global Depth Offset
-    *      Enable Solid , Global Depth Offset Enable Wireframe, and Global
-    *      Depth Offset Enable Point) should be set whenever non zero depth
-    *      bias (Slope, Bias) values are used. Setting this bit may have some
-    *      degradation of performance for some workloads."
-    *
-    * But it seems fine to ignore that.
-    */
-   if (tri->depth_offset_solid)
-      dw1 |= GEN7_SF_DW1_DEPTH_OFFSET_SOLID;
-   if (tri->depth_offset_wireframe)
-      dw1 |= GEN7_SF_DW1_DEPTH_OFFSET_WIREFRAME;
-   if (tri->depth_offset_point)
-      dw1 |= GEN7_SF_DW1_DEPTH_OFFSET_POINT;
-
-   if (setup->viewport_transform)
-      dw1 |= GEN7_SF_DW1_VIEWPORT_TRANSFORM;
-
-   dw2 = tri->cull_mode << GEN7_SF_DW2_CULL_MODE__SHIFT |
-         line_width << GEN7_SF_DW2_LINE_WIDTH__SHIFT |
-         GEN7_SF_DW2_AA_LINE_CAP_1_0 |
-         msrast << GEN7_SF_DW2_MSRASTMODE__SHIFT;
-
-   if (line->aa_enable)
-      dw2 |= GEN7_SF_DW2_AA_LINE_ENABLE;
-
-   if (ilo_dev_gen(dev) == ILO_GEN(7.5) && line->stipple_enable)
-      dw2 |= GEN75_SF_DW2_LINE_STIPPLE_ENABLE;
-
-   if (setup->scissor_enable)
-      dw2 |= GEN7_SF_DW2_SCISSOR_ENABLE;
-
-   dw3 = GEN7_SF_DW3_TRUE_AA_LINE_DISTANCE |
-         GEN7_SF_DW3_SUBPIXEL_8BITS;
-
-   /* this has no effect when line_width != 0 */
-   if (line->giq_last_pixel)
-      dw3 |= GEN7_SF_DW3_LINE_LAST_PIXEL_ENABLE;
-
-   if (setup->first_vertex_provoking) {
-      dw3 |= 0 << GEN7_SF_DW3_TRI_PROVOKE__SHIFT |
-             0 << GEN7_SF_DW3_LINE_PROVOKE__SHIFT |
-             1 << GEN7_SF_DW3_TRIFAN_PROVOKE__SHIFT;
-   } else {
-      dw3 |= 2 << GEN7_SF_DW3_TRI_PROVOKE__SHIFT |
-             1 << GEN7_SF_DW3_LINE_PROVOKE__SHIFT |
-             2 << GEN7_SF_DW3_TRIFAN_PROVOKE__SHIFT;
-   }
-
-   /* setup->point_aa_enable is ignored */
-   if (!point->programmable_width) {
-      dw3 |= GEN7_SF_DW3_USE_POINT_WIDTH |
-             point_width << GEN7_SF_DW3_POINT_WIDTH__SHIFT;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->sf) >= 3);
-   rs->sf[0] = dw1;
-   rs->sf[1] = dw2;
-   rs->sf[2] = dw3;
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->raster) >= 4);
-   rs->raster[0] = 0;
-   rs->raster[1] = fui(params->depth_offset_const);
-   rs->raster[2] = fui(params->depth_offset_scale);
-   rs->raster[3] = fui(params->depth_offset_clamp);
-
-   rs->line_aa_enable = line->aa_enable;
-   rs->line_giq_enable = line->giq_enable;
-
-   return true;
-}
-
-static bool
-raster_set_gen8_3DSTATE_SF(struct ilo_state_raster *rs,
-                           const struct ilo_dev *dev,
-                           const struct ilo_state_raster_info *info,
-                           const struct ilo_state_raster_line_info *line)
-{
-   const struct ilo_state_raster_clip_info *clip = &info->clip;
-   const struct ilo_state_raster_setup_info *setup = &info->setup;
-   const struct ilo_state_raster_point_info *point = &info->point;
-   const struct ilo_state_raster_params_info *params = &info->params;
-   const int line_width = get_gen6_line_width(dev, params->line_width,
-         line->aa_enable, line->giq_enable);
-   const int point_width = get_gen6_point_width(dev, params->point_width);
-   uint32_t dw1, dw2, dw3;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   dw1 = 0;
-
-   if (clip->stats_enable && clip->clip_enable)
-      dw1 |= GEN7_SF_DW1_STATISTICS;
-
-   if (setup->viewport_transform)
-      dw1 |= GEN7_SF_DW1_VIEWPORT_TRANSFORM;
-
-   dw2 = line_width << GEN7_SF_DW2_LINE_WIDTH__SHIFT |
-         GEN7_SF_DW2_AA_LINE_CAP_1_0;
-
-   dw3 = GEN7_SF_DW3_TRUE_AA_LINE_DISTANCE |
-         GEN7_SF_DW3_SUBPIXEL_8BITS;
-
-   /* this has no effect when line_width != 0 */
-   if (line->giq_last_pixel)
-      dw3 |= GEN7_SF_DW3_LINE_LAST_PIXEL_ENABLE;
-
-   if (setup->first_vertex_provoking) {
-      dw3 |= 0 << GEN7_SF_DW3_TRI_PROVOKE__SHIFT |
-             0 << GEN7_SF_DW3_LINE_PROVOKE__SHIFT |
-             1 << GEN7_SF_DW3_TRIFAN_PROVOKE__SHIFT;
-   } else {
-      dw3 |= 2 << GEN7_SF_DW3_TRI_PROVOKE__SHIFT |
-             1 << GEN7_SF_DW3_LINE_PROVOKE__SHIFT |
-             2 << GEN7_SF_DW3_TRIFAN_PROVOKE__SHIFT;
-   }
-
-   if (!point->programmable_width) {
-      dw3 |= GEN7_SF_DW3_USE_POINT_WIDTH |
-             point_width << GEN7_SF_DW3_POINT_WIDTH__SHIFT;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->sf) >= 3);
-   rs->sf[0] = dw1;
-   rs->sf[1] = dw2;
-   rs->sf[2] = dw3;
-
-   return true;
-}
-
-static bool
-raster_set_gen8_3DSTATE_RASTER(struct ilo_state_raster *rs,
-                               const struct ilo_dev *dev,
-                               const struct ilo_state_raster_info *info,
-                               const struct ilo_state_raster_line_info *line)
-{
-   const struct ilo_state_raster_clip_info *clip = &info->clip;
-   const struct ilo_state_raster_setup_info *setup = &info->setup;
-   const struct ilo_state_raster_point_info *point = &info->point;
-   const struct ilo_state_raster_tri_info *tri = &info->tri;
-   const struct ilo_state_raster_params_info *params = &info->params;
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   if (!raster_validate_gen8_raster(dev, info))
-      return false;
-
-   dw1 = tri->front_winding << GEN8_RASTER_DW1_FRONT_WINDING__SHIFT |
-         tri->cull_mode << GEN8_RASTER_DW1_CULL_MODE__SHIFT |
-         tri->fill_mode_front << GEN8_RASTER_DW1_FILL_MODE_FRONT__SHIFT |
-         tri->fill_mode_back << GEN8_RASTER_DW1_FILL_MODE_BACK__SHIFT;
-
-   if (point->aa_enable)
-      dw1 |= GEN8_RASTER_DW1_SMOOTH_POINT_ENABLE;
-
-   /* where should line_msaa_enable be set? */
-   if (setup->msaa_enable)
-      dw1 |= GEN8_RASTER_DW1_DX_MULTISAMPLE_ENABLE;
-
-   if (tri->depth_offset_solid)
-      dw1 |= GEN8_RASTER_DW1_DEPTH_OFFSET_SOLID;
-   if (tri->depth_offset_wireframe)
-      dw1 |= GEN8_RASTER_DW1_DEPTH_OFFSET_WIREFRAME;
-   if (tri->depth_offset_point)
-      dw1 |= GEN8_RASTER_DW1_DEPTH_OFFSET_POINT;
-
-   if (line->aa_enable)
-      dw1 |= GEN8_RASTER_DW1_AA_LINE_ENABLE;
-
-   if (setup->scissor_enable)
-      dw1 |= GEN8_RASTER_DW1_SCISSOR_ENABLE;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(9)) {
-      if (clip->z_far_enable)
-         dw1 |= GEN9_RASTER_DW1_Z_TEST_FAR_ENABLE;
-      if (clip->z_near_enable)
-         dw1 |= GEN9_RASTER_DW1_Z_TEST_NEAR_ENABLE;
-   } else {
-      if (clip->z_near_enable)
-         dw1 |= GEN8_RASTER_DW1_Z_TEST_ENABLE;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->raster) >= 4);
-   rs->raster[0] = dw1;
-   rs->raster[1] = fui(params->depth_offset_const);
-   rs->raster[2] = fui(params->depth_offset_scale);
-   rs->raster[3] = fui(params->depth_offset_clamp);
-
-   rs->line_aa_enable = line->aa_enable;
-   rs->line_giq_enable = line->giq_enable;
-
-   return true;
-}
-
-static enum gen_sample_count
-get_gen6_sample_count(const struct ilo_dev *dev, uint8_t sample_count)
-{
-   enum gen_sample_count c;
-   int min_gen;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   switch (sample_count) {
-   case 1:
-      c = GEN6_NUMSAMPLES_1;
-      min_gen = ILO_GEN(6);
-      break;
-   case 2:
-      c = GEN8_NUMSAMPLES_2;
-      min_gen = ILO_GEN(8);
-      break;
-   case 4:
-      c = GEN6_NUMSAMPLES_4;
-      min_gen = ILO_GEN(6);
-      break;
-   case 8:
-      c = GEN7_NUMSAMPLES_8;
-      min_gen = ILO_GEN(7);
-      break;
-   default:
-      assert(!"unexpected sample count");
-      c = GEN6_NUMSAMPLES_1;
-      break;
-   }
-
-   assert(ilo_dev_gen(dev) >= min_gen);
-
-   return c;
-}
-
-static bool
-raster_set_gen8_3DSTATE_MULTISAMPLE(struct ilo_state_raster *rs,
-                                    const struct ilo_dev *dev,
-                                    const struct ilo_state_raster_info *info)
-{
-   const struct ilo_state_raster_setup_info *setup = &info->setup;
-   const struct ilo_state_raster_scan_info *scan = &info->scan;
-   const enum gen_sample_count count =
-      get_gen6_sample_count(dev, scan->sample_count);
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 307:
-    *
-    *     "Setting Multisample Rasterization Mode to MSRASTMODE_xxx_PATTERN
-    *      when Number of Multisamples == NUMSAMPLES_1 is UNDEFINED."
-    */
-   if (setup->msaa_enable)
-      assert(scan->sample_count > 1);
-
-   dw1 = scan->pixloc << GEN6_MULTISAMPLE_DW1_PIXEL_LOCATION__SHIFT |
-         count << GEN6_MULTISAMPLE_DW1_NUM_SAMPLES__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->sample) >= 1);
-   rs->sample[0] = dw1;
-
-   return true;
-}
-
-static bool
-raster_set_gen6_3DSTATE_SAMPLE_MASK(struct ilo_state_raster *rs,
-                                    const struct ilo_dev *dev,
-                                    const struct ilo_state_raster_info *info)
-{
-   const struct ilo_state_raster_scan_info *scan = &info->scan;
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 294:
-    *
-    *     "If Number of Multisamples is NUMSAMPLES_1, bits 7:1 of this field
-    *      (Sample Mask) must be zero.
-    *
-    *      If Number of Multisamples is NUMSAMPLES_4, bits 7:4 of this field
-    *      must be zero."
-    */
-   const uint32_t mask = (1 << scan->sample_count) - 1;
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   dw1 = (scan->sample_mask & mask) << GEN6_SAMPLE_MASK_DW1_VAL__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->sample) >= 2);
-   rs->sample[1] = dw1;
-
-   return true;
-}
-
-static bool
-raster_validate_gen6_wm(const struct ilo_dev *dev,
-                        const struct ilo_state_raster_info *info)
-{
-   const struct ilo_state_raster_scan_info *scan = &info->scan;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (ilo_dev_gen(dev) == ILO_GEN(6))
-      assert(scan->earlyz_control == GEN7_EDSC_NORMAL);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 272:
-    *
-    *     "This bit (Statistics Enable) must be disabled if either of these
-    *      bits is set: Depth Buffer Clear , Hierarchical Depth Buffer Resolve
-    *      Enable or Depth Buffer Resolve Enable."
-    */
-   if (scan->earlyz_op != ILO_STATE_RASTER_EARLYZ_NORMAL)
-      assert(!scan->stats_enable);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 273:
-    *
-    *     "If this field (Depth Buffer Resolve Enable) is enabled, the Depth
-    *      Buffer Clear and Hierarchical Depth Buffer Resolve Enable fields
-    *      must both be disabled."
-    *
-    *     "If this field (Hierarchical Depth Buffer Resolve Enable) is
-    *      enabled, the Depth Buffer Clear and Depth Buffer Resolve Enable
-    *      fields must both be disabled."
-    *
-    * This is guaranteed.
-    */
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 314-315:
-    *
-    *     "Stencil buffer clear can be performed at the same time by enabling
-    *      Stencil Buffer Write Enable."
-    *
-    *     "Note also that stencil buffer clear can be performed without depth
-    *      buffer clear."
-    */
-   if (scan->earlyz_stencil_clear) {
-      assert(scan->earlyz_op == ILO_STATE_RASTER_EARLYZ_NORMAL ||
-             scan->earlyz_op == ILO_STATE_RASTER_EARLYZ_DEPTH_CLEAR);
-   }
-
-   return true;
-}
-
-static bool
-raster_set_gen6_3dstate_wm(struct ilo_state_raster *rs,
-                           const struct ilo_dev *dev,
-                           const struct ilo_state_raster_info *info,
-                           const struct ilo_state_raster_line_info *line)
-{
-   const struct ilo_state_raster_tri_info *tri = &info->tri;
-   const struct ilo_state_raster_setup_info *setup = &info->setup;
-   const struct ilo_state_raster_scan_info *scan = &info->scan;
-   const enum gen_msrast_mode msrast =
-      raster_setup_get_gen6_msrast_mode(dev, setup);
-   /* only scan conversion states are set, as in Gen8+ */
-   uint32_t dw4, dw5, dw6;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   if (!raster_validate_gen6_wm(dev, info))
-      return false;
-
-   dw4 = 0;
-
-   if (scan->stats_enable)
-      dw4 |= GEN6_WM_DW4_STATISTICS;
-
-   switch (scan->earlyz_op) {
-   case ILO_STATE_RASTER_EARLYZ_DEPTH_CLEAR:
-      dw4 |= GEN6_WM_DW4_DEPTH_CLEAR;
-      break;
-   case ILO_STATE_RASTER_EARLYZ_DEPTH_RESOLVE:
-      dw4 |= GEN6_WM_DW4_DEPTH_RESOLVE;
-      break;
-   case ILO_STATE_RASTER_EARLYZ_HIZ_RESOLVE:
-      dw4 |= GEN6_WM_DW4_HIZ_RESOLVE;
-      break;
-   default:
-      if (scan->earlyz_stencil_clear)
-         dw4 |= GEN6_WM_DW4_DEPTH_CLEAR;
-      break;
-   }
-
-   dw5 = GEN6_WM_DW5_AA_LINE_CAP_1_0 | /* same as in 3DSTATE_SF */
-         GEN6_WM_DW5_AA_LINE_WIDTH_2_0;
-
-   if (tri->poly_stipple_enable)
-      dw5 |= GEN6_WM_DW5_POLY_STIPPLE_ENABLE;
-   if (line->stipple_enable)
-      dw5 |= GEN6_WM_DW5_LINE_STIPPLE_ENABLE;
-
-   dw6 = scan->zw_interp << GEN6_WM_DW6_ZW_INTERP__SHIFT |
-         scan->barycentric_interps << GEN6_WM_DW6_BARYCENTRIC_INTERP__SHIFT |
-         GEN6_WM_DW6_POINT_RASTRULE_UPPER_RIGHT |
-         msrast << GEN6_WM_DW6_MSRASTMODE__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->wm) >= 3);
-   rs->wm[0] = dw4;
-   rs->wm[1] = dw5;
-   rs->wm[2] = dw6;
-
-   return true;
-}
-
-static bool
-raster_set_gen8_3DSTATE_WM(struct ilo_state_raster *rs,
-                           const struct ilo_dev *dev,
-                           const struct ilo_state_raster_info *info,
-                           const struct ilo_state_raster_line_info *line)
-{
-   const struct ilo_state_raster_tri_info *tri = &info->tri;
-   const struct ilo_state_raster_setup_info *setup = &info->setup;
-   const struct ilo_state_raster_scan_info *scan = &info->scan;
-   const enum gen_msrast_mode msrast =
-      raster_setup_get_gen6_msrast_mode(dev, setup);
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (!raster_validate_gen6_wm(dev, info))
-      return false;
-
-   dw1 = scan->earlyz_control << GEN7_WM_DW1_EDSC__SHIFT |
-         scan->zw_interp << GEN7_WM_DW1_ZW_INTERP__SHIFT |
-         scan->barycentric_interps << GEN7_WM_DW1_BARYCENTRIC_INTERP__SHIFT |
-         GEN7_WM_DW1_AA_LINE_CAP_1_0 | /* same as in 3DSTATE_SF */
-         GEN7_WM_DW1_AA_LINE_WIDTH_2_0 |
-         GEN7_WM_DW1_POINT_RASTRULE_UPPER_RIGHT;
-
-   if (scan->stats_enable)
-      dw1 |= GEN7_WM_DW1_STATISTICS;
-
-   if (ilo_dev_gen(dev) < ILO_GEN(8)) {
-      switch (scan->earlyz_op) {
-      case ILO_STATE_RASTER_EARLYZ_DEPTH_CLEAR:
-         dw1 |= GEN7_WM_DW1_LEGACY_DEPTH_CLEAR;
-         break;
-      case ILO_STATE_RASTER_EARLYZ_DEPTH_RESOLVE:
-         dw1 |= GEN7_WM_DW1_LEGACY_DEPTH_RESOLVE;
-         break;
-      case ILO_STATE_RASTER_EARLYZ_HIZ_RESOLVE:
-         dw1 |= GEN7_WM_DW1_LEGACY_HIZ_RESOLVE;
-         break;
-      default:
-         if (scan->earlyz_stencil_clear)
-            dw1 |= GEN7_WM_DW1_LEGACY_DEPTH_CLEAR;
-         break;
-      }
-   }
-
-   if (tri->poly_stipple_enable)
-      dw1 |= GEN7_WM_DW1_POLY_STIPPLE_ENABLE;
-   if (line->stipple_enable)
-      dw1 |= GEN7_WM_DW1_LINE_STIPPLE_ENABLE;
-
-   if (ilo_dev_gen(dev) < ILO_GEN(8))
-      dw1 |= msrast << GEN7_WM_DW1_MSRASTMODE__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->wm) >= 1);
-   rs->wm[0] = dw1;
-
-   return true;
-}
-
-static bool
-raster_set_gen8_3dstate_wm_hz_op(struct ilo_state_raster *rs,
-                                 const struct ilo_dev *dev,
-                                 const struct ilo_state_raster_info *info)
-{
-   const struct ilo_state_raster_scan_info *scan = &info->scan;
-   const enum gen_sample_count count =
-      get_gen6_sample_count(dev, scan->sample_count);
-   const uint32_t mask = (1 << scan->sample_count) - 1;
-   uint32_t dw1, dw4;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   dw1 = count << GEN8_WM_HZ_DW1_NUM_SAMPLES__SHIFT;
-
-   if (scan->earlyz_stencil_clear)
-      dw1 |= GEN8_WM_HZ_DW1_STENCIL_CLEAR;
-
-   switch (scan->earlyz_op) {
-   case ILO_STATE_RASTER_EARLYZ_DEPTH_CLEAR:
-      dw1 |= GEN8_WM_HZ_DW1_DEPTH_CLEAR;
-      break;
-   case ILO_STATE_RASTER_EARLYZ_DEPTH_RESOLVE:
-      dw1 |= GEN8_WM_HZ_DW1_DEPTH_RESOLVE;
-      break;
-   case ILO_STATE_RASTER_EARLYZ_HIZ_RESOLVE:
-      dw1 |= GEN8_WM_HZ_DW1_HIZ_RESOLVE;
-      break;
-   default:
-      break;
-   }
-
-   dw4 = (scan->sample_mask & mask) << GEN8_WM_HZ_DW4_SAMPLE_MASK__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(rs->wm) >= 3);
-   rs->wm[1] = dw1;
-   rs->wm[2] = dw4;
-
-   return true;
-}
-
-static bool
-sample_pattern_get_gen6_packed_offsets(const struct ilo_dev *dev,
-                                       uint8_t sample_count,
-                                       const struct ilo_state_sample_pattern_offset_info *in,
-                                       uint8_t *out)
-{
-   uint8_t max_dist, i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   max_dist = 0;
-   for (i = 0; i < sample_count; i++) {
-      const int8_t dist_x = (int8_t) in[i].x - 8;
-      const int8_t dist_y = (int8_t) in[i].y - 8;
-      const uint8_t dist = dist_x * dist_x + dist_y * dist_y;
-
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 305:
-       *
-       *     "Programming Note: When programming the sample offsets (for
-       *      NUMSAMPLES_4 or _8 and MSRASTMODE_xxx_PATTERN), the order of the
-       *      samples 0 to 3 (or 7 for 8X) must have monotonically increasing
-       *      distance from the pixel center. This is required to get the
-       *      correct centroid computation in the device."
-       */
-      assert(dist >= max_dist);
-      max_dist = dist;
-
-      assert(in[i].x < 16);
-      assert(in[i].y < 16);
-
-      out[i] = in[i].x << 4 | in[i].y;
-   }
-
-   return true;
-}
-
-static bool
-line_stipple_set_gen6_3DSTATE_LINE_STIPPLE(struct ilo_state_line_stipple *stipple,
-                                           const struct ilo_dev *dev,
-                                           const struct ilo_state_line_stipple_info *info)
-{
-   uint32_t dw1, dw2;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(info->repeat_count >= 1 && info->repeat_count <= 256);
-
-   dw1 = info->pattern;
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      /* in U1.16 */
-      const uint32_t inverse = 65536 / info->repeat_count;
-      dw2 = inverse << GEN7_LINE_STIPPLE_DW2_INVERSE_REPEAT_COUNT__SHIFT |
-            info->repeat_count << GEN6_LINE_STIPPLE_DW2_REPEAT_COUNT__SHIFT;
-   } else {
-      /* in U1.13 */
-      const uint16_t inverse = 8192 / info->repeat_count;
-      dw2 = inverse << GEN6_LINE_STIPPLE_DW2_INVERSE_REPEAT_COUNT__SHIFT |
-            info->repeat_count << GEN6_LINE_STIPPLE_DW2_REPEAT_COUNT__SHIFT;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(stipple->stipple) >= 2);
-   stipple->stipple[0] = dw1;
-   stipple->stipple[1] = dw2;
-
-   return true;
-}
-
-static bool
-sample_pattern_set_gen8_3DSTATE_SAMPLE_PATTERN(struct ilo_state_sample_pattern *pattern,
-                                               const struct ilo_dev *dev,
-                                               const struct ilo_state_sample_pattern_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   STATIC_ASSERT(ARRAY_SIZE(pattern->pattern_1x) >= 1);
-   STATIC_ASSERT(ARRAY_SIZE(pattern->pattern_2x) >= 2);
-   STATIC_ASSERT(ARRAY_SIZE(pattern->pattern_4x) >= 4);
-   STATIC_ASSERT(ARRAY_SIZE(pattern->pattern_8x) >= 8);
-   STATIC_ASSERT(ARRAY_SIZE(pattern->pattern_16x) >= 16);
-
-   return (sample_pattern_get_gen6_packed_offsets(dev, 1,
-              info->pattern_1x, pattern->pattern_1x) &&
-           sample_pattern_get_gen6_packed_offsets(dev, 2,
-              info->pattern_2x, pattern->pattern_2x) &&
-           sample_pattern_get_gen6_packed_offsets(dev, 4,
-              info->pattern_4x, pattern->pattern_4x) &&
-           sample_pattern_get_gen6_packed_offsets(dev, 8,
-              info->pattern_8x, pattern->pattern_8x) &&
-           sample_pattern_get_gen6_packed_offsets(dev, 16,
-              info->pattern_16x, pattern->pattern_16x));
-
-}
-
-static bool
-poly_stipple_set_gen6_3DSTATE_POLY_STIPPLE_PATTERN(struct ilo_state_poly_stipple *stipple,
-                                                   const struct ilo_dev *dev,
-                                                   const struct ilo_state_poly_stipple_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   STATIC_ASSERT(ARRAY_SIZE(stipple->stipple) >= 32);
-   memcpy(stipple->stipple, info->pattern, sizeof(info->pattern));
-
-   return true;
-}
-
-bool
-ilo_state_raster_init(struct ilo_state_raster *rs,
-                      const struct ilo_dev *dev,
-                      const struct ilo_state_raster_info *info)
-{
-   assert(ilo_is_zeroed(rs, sizeof(*rs)));
-   return ilo_state_raster_set_info(rs, dev, info);
-}
-
-bool
-ilo_state_raster_init_for_rectlist(struct ilo_state_raster *rs,
-                                   const struct ilo_dev *dev,
-                                   uint8_t sample_count,
-                                   enum ilo_state_raster_earlyz_op earlyz_op,
-                                   bool earlyz_stencil_clear)
-{
-   struct ilo_state_raster_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   info.clip.viewport_count = 1;
-   info.setup.cv_is_rectangle = true;
-   info.setup.msaa_enable = (sample_count > 1);
-   info.scan.sample_count = sample_count;
-   info.scan.sample_mask = ~0u;
-   info.scan.earlyz_op = earlyz_op;
-   info.scan.earlyz_stencil_clear = earlyz_stencil_clear;
-
-   return ilo_state_raster_init(rs, dev, &info);
-}
-
-bool
-ilo_state_raster_set_info(struct ilo_state_raster *rs,
-                          const struct ilo_dev *dev,
-                          const struct ilo_state_raster_info *info)
-{
-   struct ilo_state_raster_line_info line;
-   bool ret = true;
-
-   ret &= raster_set_gen6_3DSTATE_CLIP(rs, dev, info);
-
-   raster_get_gen6_effective_line(dev, info, &line);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      ret &= raster_set_gen8_3DSTATE_SF(rs, dev, info, &line);
-      ret &= raster_set_gen8_3DSTATE_RASTER(rs, dev, info, &line);
-   } else {
-      ret &= raster_set_gen7_3DSTATE_SF(rs, dev, info, &line);
-   }
-
-   ret &= raster_set_gen8_3DSTATE_MULTISAMPLE(rs, dev, info);
-   ret &= raster_set_gen6_3DSTATE_SAMPLE_MASK(rs, dev, info);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      ret &= raster_set_gen8_3DSTATE_WM(rs, dev, info, &line);
-
-      if (ilo_dev_gen(dev) >= ILO_GEN(8))
-         ret &= raster_set_gen8_3dstate_wm_hz_op(rs, dev, info);
-   } else {
-      ret &= raster_set_gen6_3dstate_wm(rs, dev, info, &line);
-   }
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_raster_set_params(struct ilo_state_raster *rs,
-                            const struct ilo_dev *dev,
-                            const struct ilo_state_raster_params_info *params)
-{
-   const bool line_aa_enable = (rs->line_aa_enable &&
-         raster_params_is_gen6_line_aa_allowed(dev, params));
-   const int line_width = get_gen6_line_width(dev, params->line_width,
-         line_aa_enable, rs->line_giq_enable);
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* modify line AA enable */
-   if (rs->line_aa_enable) {
-      if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-         if (line_aa_enable)
-            rs->raster[0] |= GEN8_RASTER_DW1_AA_LINE_ENABLE;
-         else
-            rs->raster[0] &= ~GEN8_RASTER_DW1_AA_LINE_ENABLE;
-      } else {
-         if (line_aa_enable)
-            rs->sf[1] |= GEN7_SF_DW2_AA_LINE_ENABLE;
-         else
-            rs->sf[1] &= ~GEN7_SF_DW2_AA_LINE_ENABLE;
-      }
-   }
-
-   /* modify line width */
-   rs->sf[1] = (rs->sf[1] & ~GEN7_SF_DW2_LINE_WIDTH__MASK) |
-               line_width << GEN7_SF_DW2_LINE_WIDTH__SHIFT;
-
-   /* modify point width */
-   if (rs->sf[2] & GEN7_SF_DW3_USE_POINT_WIDTH) {
-      const int point_width = get_gen6_point_width(dev, params->point_width);
-
-      rs->sf[2] = (rs->sf[2] & ~GEN7_SF_DW3_POINT_WIDTH__MASK) |
-                  point_width << GEN7_SF_DW3_POINT_WIDTH__SHIFT;
-   }
-
-   /* modify depth offset */
-   rs->raster[1] = fui(params->depth_offset_const);
-   rs->raster[2] = fui(params->depth_offset_scale);
-   rs->raster[3] = fui(params->depth_offset_clamp);
-
-   return true;
-}
-
-void
-ilo_state_raster_full_delta(const struct ilo_state_raster *rs,
-                            const struct ilo_dev *dev,
-                            struct ilo_state_raster_delta *delta)
-{
-   delta->dirty = ILO_STATE_RASTER_3DSTATE_CLIP |
-                  ILO_STATE_RASTER_3DSTATE_SF |
-                  ILO_STATE_RASTER_3DSTATE_MULTISAMPLE |
-                  ILO_STATE_RASTER_3DSTATE_SAMPLE_MASK |
-                  ILO_STATE_RASTER_3DSTATE_WM |
-                  ILO_STATE_RASTER_3DSTATE_AA_LINE_PARAMETERS;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      delta->dirty |= ILO_STATE_RASTER_3DSTATE_RASTER |
-                      ILO_STATE_RASTER_3DSTATE_WM_HZ_OP;
-   }
-}
-
-void
-ilo_state_raster_get_delta(const struct ilo_state_raster *rs,
-                           const struct ilo_dev *dev,
-                           const struct ilo_state_raster *old,
-                           struct ilo_state_raster_delta *delta)
-{
-   delta->dirty = 0;
-
-   if (memcmp(rs->clip, old->clip, sizeof(rs->clip)))
-      delta->dirty |= ILO_STATE_RASTER_3DSTATE_CLIP;
-
-   if (memcmp(rs->sf, old->sf, sizeof(rs->sf)))
-      delta->dirty |= ILO_STATE_RASTER_3DSTATE_SF;
-
-   if (memcmp(rs->raster, old->raster, sizeof(rs->raster))) {
-      if (ilo_dev_gen(dev) >= ILO_GEN(8))
-         delta->dirty |= ILO_STATE_RASTER_3DSTATE_RASTER;
-      else
-         delta->dirty |= ILO_STATE_RASTER_3DSTATE_SF;
-   }
-
-   if (memcmp(rs->sample, old->sample, sizeof(rs->sample))) {
-      delta->dirty |= ILO_STATE_RASTER_3DSTATE_MULTISAMPLE |
-                      ILO_STATE_RASTER_3DSTATE_SAMPLE_MASK;
-   }
-
-   if (memcmp(rs->wm, old->wm, sizeof(rs->wm))) {
-      delta->dirty |= ILO_STATE_RASTER_3DSTATE_WM;
-
-      if (ilo_dev_gen(dev) >= ILO_GEN(8))
-         delta->dirty |= ILO_STATE_RASTER_3DSTATE_WM_HZ_OP;
-   }
-}
-
-bool
-ilo_state_sample_pattern_init(struct ilo_state_sample_pattern *pattern,
-                              const struct ilo_dev *dev,
-                              const struct ilo_state_sample_pattern_info *info)
-{
-   bool ret = true;
-
-   ret &= sample_pattern_set_gen8_3DSTATE_SAMPLE_PATTERN(pattern, dev, info);
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_sample_pattern_init_default(struct ilo_state_sample_pattern *pattern,
-                                      const struct ilo_dev *dev)
-{
-   static const struct ilo_state_sample_pattern_info default_info = {
-      .pattern_1x = {
-         {  8,  8 },
-      },
-
-      .pattern_2x = {
-         {  4,  4 }, { 12, 12 },
-      },
-
-      .pattern_4x = {
-         {  6,  2 }, { 14,  6 }, {  2, 10 }, { 10, 14 },
-      },
-
-      /* \see brw_multisample_positions_8x */
-      .pattern_8x = {
-         {  7,  9 }, {  9, 13 }, { 11,  3 }, { 13, 11 },
-         {  1,  7 }, {  5,  1 }, { 15,  5 }, {  3, 15 },
-      },
-
-      .pattern_16x = {
-         {  8, 10 }, { 11,  8 }, {  5,  6 }, {  6,  4 },
-         { 12, 11 }, { 13,  9 }, { 14,  7 }, { 10,  2 },
-         {  4, 13 }, {  3,  3 }, {  7,  1 }, { 15,  5 },
-         {  1, 12 }, {  9,  0 }, {  2, 14 }, {  0, 15 },
-      },
-   };
-
-   return ilo_state_sample_pattern_init(pattern, dev, &default_info);
-}
-
-const uint8_t *
-ilo_state_sample_pattern_get_packed_offsets(const struct ilo_state_sample_pattern *pattern,
-                                            const struct ilo_dev *dev,
-                                            uint8_t sample_count)
-{
-   switch (sample_count) {
-   case 1:  return pattern->pattern_1x;
-   case 2:  return pattern->pattern_2x;
-   case 4:  return pattern->pattern_4x;
-   case 8:  return pattern->pattern_8x;
-   case 16: return pattern->pattern_16x;
-   default:
-      assert(!"unknown sample count");
-      return NULL;
-   }
-}
-
-void
-ilo_state_sample_pattern_get_offset(const struct ilo_state_sample_pattern *pattern,
-                                    const struct ilo_dev *dev,
-                                    uint8_t sample_count, uint8_t sample_index,
-                                    uint8_t *x, uint8_t *y)
-{
-   const const uint8_t *packed =
-      ilo_state_sample_pattern_get_packed_offsets(pattern, dev, sample_count);
-
-   assert(sample_index < sample_count);
-
-   *x = (packed[sample_index] >> 4) & 0xf;
-   *y = packed[sample_index] & 0xf;
-}
-
-/**
- * No need to initialize first.
- */
-bool
-ilo_state_line_stipple_set_info(struct ilo_state_line_stipple *stipple,
-                                const struct ilo_dev *dev,
-                                const struct ilo_state_line_stipple_info *info)
-{
-   bool ret = true;
-
-   ret &= line_stipple_set_gen6_3DSTATE_LINE_STIPPLE(stipple,
-         dev, info);
-
-   assert(ret);
-
-   return ret;
-}
-
-/**
- * No need to initialize first.
- */
-bool
-ilo_state_poly_stipple_set_info(struct ilo_state_poly_stipple *stipple,
-                                const struct ilo_dev *dev,
-                                const struct ilo_state_poly_stipple_info *info)
-{
-   bool ret = true;
-
-   ret &= poly_stipple_set_gen6_3DSTATE_POLY_STIPPLE_PATTERN(stipple,
-         dev, info);
-
-   assert(ret);
-
-   return ret;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_raster.h b/src/gallium/drivers/ilo/core/ilo_state_raster.h
deleted file mode 100644 (file)
index fc90b49..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_RASTER_H
-#define ILO_STATE_RASTER_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-enum ilo_state_raster_dirty_bits {
-   ILO_STATE_RASTER_3DSTATE_CLIP                   = (1 << 0),
-   ILO_STATE_RASTER_3DSTATE_SF                     = (1 << 1),
-   ILO_STATE_RASTER_3DSTATE_RASTER                 = (1 << 2),
-   ILO_STATE_RASTER_3DSTATE_MULTISAMPLE            = (1 << 3),
-   ILO_STATE_RASTER_3DSTATE_SAMPLE_MASK            = (1 << 4),
-   ILO_STATE_RASTER_3DSTATE_WM                     = (1 << 5),
-   ILO_STATE_RASTER_3DSTATE_WM_HZ_OP               = (1 << 6),
-   ILO_STATE_RASTER_3DSTATE_AA_LINE_PARAMETERS     = (1 << 7),
-};
-
-enum ilo_state_raster_earlyz_op {
-   ILO_STATE_RASTER_EARLYZ_NORMAL,
-   ILO_STATE_RASTER_EARLYZ_DEPTH_CLEAR,
-   ILO_STATE_RASTER_EARLYZ_DEPTH_RESOLVE,
-   ILO_STATE_RASTER_EARLYZ_HIZ_RESOLVE,
-};
-
-/**
- * VUE readback, VertexClipTest, ClipDetermination, and primitive output.
- */
-struct ilo_state_raster_clip_info {
-   bool clip_enable;
-   /* CL_INVOCATION_COUNT and CL_PRIMITIVES_COUNT */
-   bool stats_enable;
-
-   uint8_t viewport_count;
-   bool force_rtaindex_zero;
-
-   /* these should be mutually exclusive */
-   uint8_t user_cull_enables;
-   uint8_t user_clip_enables;
-
-   bool gb_test_enable;
-   bool xy_test_enable;
-
-   /* far/near must be enabled together prior to Gen9 */
-   bool z_far_enable;
-   bool z_near_enable;
-   bool z_near_zero;
-};
-
-/**
- * Primitive assembly, viewport transformation, scissoring, MSAA, etc.
- */
-struct ilo_state_raster_setup_info {
-   bool cv_is_rectangle;
-
-   bool first_vertex_provoking;
-   bool viewport_transform;
-
-   bool scissor_enable;
-
-   /* MSAA enables for lines and non-lines */
-   bool msaa_enable;
-   bool line_msaa_enable;
-};
-
-/**
- * 3DOBJ_POINT rasterization rules.
- */
-struct ilo_state_raster_point_info {
-   /* ignored when msaa_enable is set */
-   bool aa_enable;
-
-   bool programmable_width;
-};
-
-/**
- * 3DOBJ_LINE rasterization rules.
- */
-struct ilo_state_raster_line_info {
-   /* ignored when line_msaa_enable is set */
-   bool aa_enable;
-
-   /* ignored when line_msaa_enable or aa_enable is set */
-   bool stipple_enable;
-   bool giq_enable;
-   bool giq_last_pixel;
-};
-
-/**
- * 3DOBJ_TRIANGLE rasterization rules.
- */
-struct ilo_state_raster_tri_info {
-   enum gen_front_winding front_winding;
-   enum gen_cull_mode cull_mode;
-   enum gen_fill_mode fill_mode_front;
-   enum gen_fill_mode fill_mode_back;
-
-   enum gen_depth_format depth_offset_format;
-   bool depth_offset_solid;
-   bool depth_offset_wireframe;
-   bool depth_offset_point;
-
-   bool poly_stipple_enable;
-};
-
-/**
- * Scan conversion.
- */
-struct ilo_state_raster_scan_info {
-   /* PS_DEPTH_COUNT and PS_INVOCATION_COUNT */
-   bool stats_enable;
-
-   uint8_t sample_count;
-
-   /* pixel location for non-MSAA or 1x-MSAA */
-   enum gen_pixel_location pixloc;
-
-   uint32_t sample_mask;
-
-   /* interpolations */
-   enum gen_zw_interp zw_interp;
-   uint8_t barycentric_interps;
-
-   /* Gen7+ only */
-   enum gen_edsc_mode earlyz_control;
-   enum ilo_state_raster_earlyz_op earlyz_op;
-   bool earlyz_stencil_clear;
-};
-
-/**
- * Raster parameters.
- */
-struct ilo_state_raster_params_info {
-   bool any_integer_rt;
-   bool hiz_enable;
-
-   float point_width;
-   float line_width;
-
-   /* const term will be scaled by 'r' */
-   float depth_offset_const;
-   float depth_offset_scale;
-   float depth_offset_clamp;
-};
-
-struct ilo_state_raster_info {
-   struct ilo_state_raster_clip_info clip;
-   struct ilo_state_raster_setup_info setup;
-   struct ilo_state_raster_point_info point;
-   struct ilo_state_raster_line_info line;
-   struct ilo_state_raster_tri_info tri;
-   struct ilo_state_raster_scan_info scan;
-
-   struct ilo_state_raster_params_info params;
-};
-
-struct ilo_state_raster {
-   uint32_t clip[3];
-   uint32_t sf[3];
-   uint32_t raster[4];
-   uint32_t sample[2];
-   uint32_t wm[3];
-
-   bool line_aa_enable;
-   bool line_giq_enable;
-};
-
-struct ilo_state_raster_delta {
-   uint32_t dirty;
-};
-
-struct ilo_state_sample_pattern_offset_info {
-   /* in U0.4 */
-   uint8_t x;
-   uint8_t y;
-};
-
-struct ilo_state_sample_pattern_info {
-   struct ilo_state_sample_pattern_offset_info pattern_1x[1];
-   struct ilo_state_sample_pattern_offset_info pattern_2x[2];
-   struct ilo_state_sample_pattern_offset_info pattern_4x[4];
-   struct ilo_state_sample_pattern_offset_info pattern_8x[8];
-   struct ilo_state_sample_pattern_offset_info pattern_16x[16];
-};
-
-struct ilo_state_sample_pattern {
-   uint8_t pattern_1x[1];
-   uint8_t pattern_2x[2];
-   uint8_t pattern_4x[4];
-   uint8_t pattern_8x[8];
-   uint8_t pattern_16x[16];
-};
-
-struct ilo_state_line_stipple_info {
-   uint16_t pattern;
-   uint16_t repeat_count;
-};
-
-struct ilo_state_line_stipple {
-   uint32_t stipple[2];
-};
-
-struct ilo_state_poly_stipple_info {
-   uint32_t pattern[32];
-};
-
-struct ilo_state_poly_stipple {
-   uint32_t stipple[32];
-};
-
-bool
-ilo_state_raster_init(struct ilo_state_raster *rs,
-                      const struct ilo_dev *dev,
-                      const struct ilo_state_raster_info *info);
-
-bool
-ilo_state_raster_init_for_rectlist(struct ilo_state_raster *rs,
-                                   const struct ilo_dev *dev,
-                                   uint8_t sample_count,
-                                   enum ilo_state_raster_earlyz_op earlyz_op,
-                                   bool earlyz_stencil_clear);
-
-bool
-ilo_state_raster_set_info(struct ilo_state_raster *rs,
-                          const struct ilo_dev *dev,
-                          const struct ilo_state_raster_info *info);
-
-bool
-ilo_state_raster_set_params(struct ilo_state_raster *rs,
-                            const struct ilo_dev *dev,
-                            const struct ilo_state_raster_params_info *params);
-
-void
-ilo_state_raster_full_delta(const struct ilo_state_raster *rs,
-                            const struct ilo_dev *dev,
-                            struct ilo_state_raster_delta *delta);
-
-void
-ilo_state_raster_get_delta(const struct ilo_state_raster *rs,
-                           const struct ilo_dev *dev,
-                           const struct ilo_state_raster *old,
-                           struct ilo_state_raster_delta *delta);
-
-bool
-ilo_state_sample_pattern_init(struct ilo_state_sample_pattern *pattern,
-                              const struct ilo_dev *dev,
-                              const struct ilo_state_sample_pattern_info *info);
-
-bool
-ilo_state_sample_pattern_init_default(struct ilo_state_sample_pattern *pattern,
-                                      const struct ilo_dev *dev);
-
-const uint8_t *
-ilo_state_sample_pattern_get_packed_offsets(const struct ilo_state_sample_pattern *pattern,
-                                            const struct ilo_dev *dev,
-                                            uint8_t sample_count);
-
-void
-ilo_state_sample_pattern_get_offset(const struct ilo_state_sample_pattern *pattern,
-                                    const struct ilo_dev *dev,
-                                    uint8_t sample_count, uint8_t sample_index,
-                                    uint8_t *x, uint8_t *y);
-bool
-ilo_state_line_stipple_set_info(struct ilo_state_line_stipple *stipple,
-                                const struct ilo_dev *dev,
-                                const struct ilo_state_line_stipple_info *info);
-
-bool
-ilo_state_poly_stipple_set_info(struct ilo_state_poly_stipple *stipple,
-                                const struct ilo_dev *dev,
-                                const struct ilo_state_poly_stipple_info *info);
-
-#endif /* ILO_STATE_RASTER_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_sampler.c b/src/gallium/drivers/ilo/core/ilo_state_sampler.c
deleted file mode 100644 (file)
index 3787f68..0000000
+++ /dev/null
@@ -1,742 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_half.h"
-
-#include "ilo_debug.h"
-#include "ilo_state_surface.h"
-#include "ilo_state_sampler.h"
-
-static bool
-sampler_validate_gen6_non_normalized(const struct ilo_dev *dev,
-                                     const struct ilo_state_sampler_info *info)
-{
-   const enum gen_texcoord_mode addr_ctrls[3] = {
-      info->tcx_ctrl, info->tcy_ctrl, info->tcz_ctrl,
-   };
-   int i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 98:
-    *
-    *     "The following state must be set as indicated if this field
-    *      (Non-normalized Coordinate Enable) is enabled:
-    *
-    *      - TCX/Y/Z Address Control Mode must be TEXCOORDMODE_CLAMP,
-    *        TEXCOORDMODE_HALF_BORDER, or TEXCOORDMODE_CLAMP_BORDER.
-    *      - Surface Type must be SURFTYPE_2D or SURFTYPE_3D.
-    *      - Mag Mode Filter must be MAPFILTER_NEAREST or
-    *        MAPFILTER_LINEAR.
-    *      - Min Mode Filter must be MAPFILTER_NEAREST or
-    *        MAPFILTER_LINEAR.
-    *      - Mip Mode Filter must be MIPFILTER_NONE.
-    *      - Min LOD must be 0.
-    *      - Max LOD must be 0.
-    *      - MIP Count must be 0.
-    *      - Surface Min LOD must be 0.
-    *      - Texture LOD Bias must be 0."
-    */
-   for (i = 0; i < 3; i++) {
-      switch (addr_ctrls[i]) {
-      case GEN6_TEXCOORDMODE_CLAMP:
-      case GEN6_TEXCOORDMODE_CLAMP_BORDER:
-      case GEN8_TEXCOORDMODE_HALF_BORDER:
-         break;
-      default:
-         assert(!"bad non-normalized coordinate wrap mode");
-         break;
-      }
-   }
-
-   assert(info->mip_filter == GEN6_MIPFILTER_NONE);
-
-   assert((info->min_filter == GEN6_MAPFILTER_NEAREST ||
-           info->min_filter == GEN6_MAPFILTER_LINEAR) &&
-          (info->mag_filter == GEN6_MAPFILTER_NEAREST ||
-           info->mag_filter == GEN6_MAPFILTER_LINEAR));
-
-   assert(info->min_lod == 0.0f &&
-          info->max_lod == 0.0f &&
-          info->lod_bias == 0.0f);
-
-   return true;
-}
-
-static bool
-sampler_validate_gen6_sampler(const struct ilo_dev *dev,
-                              const struct ilo_state_sampler_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (info->non_normalized &&
-       !sampler_validate_gen6_non_normalized(dev, info))
-      return false;
-
-   if (ilo_dev_gen(dev) < ILO_GEN(8)) {
-       assert(info->tcx_ctrl != GEN8_TEXCOORDMODE_HALF_BORDER &&
-              info->tcy_ctrl != GEN8_TEXCOORDMODE_HALF_BORDER &&
-              info->tcz_ctrl != GEN8_TEXCOORDMODE_HALF_BORDER);
-   }
-
-   return true;
-}
-
-static uint32_t
-sampler_get_gen6_integer_filters(const struct ilo_dev *dev,
-                                 const struct ilo_state_sampler_info *info)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 103:
-    *
-    *     "MIPFILTER_LINEAR is not supported for surface formats that do not
-    *      support "Sampling Engine Filtering" as indicated in the Surface
-    *      Formats table unless using the sample_c message type."
-    *
-    *     "Only MAPFILTER_NEAREST is supported for surface formats that do not
-    *      support "Sampling Engine Filtering" as indicated in the Surface
-    *      Formats table unless using the sample_c message type.
-    */
-   const enum gen_mip_filter mip_filter =
-      (info->mip_filter == GEN6_MIPFILTER_LINEAR) ?
-      GEN6_MIPFILTER_NEAREST : info->mip_filter;
-   const enum gen_map_filter min_filter = GEN6_MAPFILTER_NEAREST;
-   const enum gen_map_filter mag_filter = GEN6_MAPFILTER_NEAREST;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   return mip_filter << GEN6_SAMPLER_DW0_MIP_FILTER__SHIFT |
-          mag_filter << GEN6_SAMPLER_DW0_MAG_FILTER__SHIFT |
-          min_filter << GEN6_SAMPLER_DW0_MIN_FILTER__SHIFT;
-}
-
-static uint32_t
-sampler_get_gen6_3d_filters(const struct ilo_dev *dev,
-                            const struct ilo_state_sampler_info *info)
-{
-   const enum gen_mip_filter mip_filter = info->mip_filter;
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 103:
-    *
-    *     "Only MAPFILTER_NEAREST and MAPFILTER_LINEAR are supported for
-    *      surfaces of type SURFTYPE_3D."
-    */
-   const enum gen_map_filter min_filter =
-      (info->min_filter == GEN6_MAPFILTER_NEAREST ||
-       info->min_filter == GEN6_MAPFILTER_LINEAR) ?
-      info->min_filter : GEN6_MAPFILTER_LINEAR;
-   const enum gen_map_filter mag_filter =
-      (info->mag_filter == GEN6_MAPFILTER_NEAREST ||
-       info->mag_filter == GEN6_MAPFILTER_LINEAR) ?
-       info->mag_filter : GEN6_MAPFILTER_LINEAR;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   return mip_filter << GEN6_SAMPLER_DW0_MIP_FILTER__SHIFT |
-          mag_filter << GEN6_SAMPLER_DW0_MAG_FILTER__SHIFT |
-          min_filter << GEN6_SAMPLER_DW0_MIN_FILTER__SHIFT;
-}
-
-static uint32_t
-get_gen6_addr_controls(const struct ilo_dev *dev,
-                       enum gen_texcoord_mode tcx_ctrl,
-                       enum gen_texcoord_mode tcy_ctrl,
-                       enum gen_texcoord_mode tcz_ctrl)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      return tcx_ctrl << GEN7_SAMPLER_DW3_U_WRAP__SHIFT |
-             tcy_ctrl << GEN7_SAMPLER_DW3_V_WRAP__SHIFT |
-             tcz_ctrl << GEN7_SAMPLER_DW3_R_WRAP__SHIFT;
-   } else {
-      return tcx_ctrl << GEN6_SAMPLER_DW1_U_WRAP__SHIFT |
-             tcy_ctrl << GEN6_SAMPLER_DW1_V_WRAP__SHIFT |
-             tcz_ctrl << GEN6_SAMPLER_DW1_R_WRAP__SHIFT;
-   }
-}
-
-static uint32_t
-sampler_get_gen6_1d_addr_controls(const struct ilo_dev *dev,
-                                  const struct ilo_state_sampler_info *info)
-{
-   const enum gen_texcoord_mode tcx_ctrl =
-      (info->tcx_ctrl == GEN6_TEXCOORDMODE_CUBE) ?
-      GEN6_TEXCOORDMODE_CLAMP : info->tcx_ctrl;
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 100:
-    *
-    *     "If this field (TCY Address Control Mode) is set to
-    *      TEXCOORDMODE_CLAMP_BORDER or TEXCOORDMODE_HALF_BORDER and a 1D
-    *      surface is sampled, incorrect blending with the border color in the
-    *      vertical direction may occur."
-    */
-   const enum gen_texcoord_mode tcy_ctrl = GEN6_TEXCOORDMODE_CLAMP;
-   const enum gen_texcoord_mode tcz_ctrl = GEN6_TEXCOORDMODE_CLAMP;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   return get_gen6_addr_controls(dev, tcx_ctrl, tcy_ctrl, tcz_ctrl);
-}
-
-static uint32_t
-sampler_get_gen6_2d_3d_addr_controls(const struct ilo_dev *dev,
-                                     const struct ilo_state_sampler_info *info)
-{
-   const enum gen_texcoord_mode tcx_ctrl =
-      (info->tcx_ctrl == GEN6_TEXCOORDMODE_CUBE) ?
-      GEN6_TEXCOORDMODE_CLAMP : info->tcx_ctrl;
-   const enum gen_texcoord_mode tcy_ctrl =
-      (info->tcy_ctrl == GEN6_TEXCOORDMODE_CUBE) ?
-      GEN6_TEXCOORDMODE_CLAMP : info->tcy_ctrl;
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 108:
-    *
-    *     "[DevSNB]: if this field (TCZ Address Control Mode) is set to
-    *      TEXCOORDMODE_CLAMP_BORDER samples outside the map will clamp to 0
-    *      instead of boarder color"
-    *
-    * From the Ivy Bridge PRM, volume 4 part 1, page 100:
-    *
-    *     "If this field is set to TEXCOORDMODE_CLAMP_BORDER for 3D maps on
-    *      formats without an alpha channel, samples straddling the map in the
-    *      Z direction may have their alpha channels off by 1."
-    *
-    * Do we want to do something here?
-    */
-   const enum gen_texcoord_mode tcz_ctrl =
-      (info->tcz_ctrl == GEN6_TEXCOORDMODE_CUBE) ?
-      GEN6_TEXCOORDMODE_CLAMP : info->tcz_ctrl;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   return get_gen6_addr_controls(dev, tcx_ctrl, tcy_ctrl, tcz_ctrl);
-}
-
-static uint32_t
-sampler_get_gen6_cube_addr_controls(const struct ilo_dev *dev,
-                                    const struct ilo_state_sampler_info *info)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 99:
-    *
-    *     "When using cube map texture coordinates, only TEXCOORDMODE_CLAMP
-    *      and TEXCOORDMODE_CUBE settings are valid, and each TC component
-    *      must have the same Address Control mode.
-    *
-    *      When TEXCOORDMODE_CUBE is not used accessing a cube map, the map's
-    *      Cube Face Enable field must be programmed to 111111b (all faces
-    *      enabled)."
-    *
-    * From the Haswell PRM, volume 2d, page 278:
-    *
-    *     "When using cube map texture coordinates, each TC component must
-    *      have the same Address Control Mode.
-    *
-    *      When TEXCOORDMODE_CUBE is not used accessing a cube map, the map's
-    *      Cube Face Enable field must be programmed to 111111b (all faces
-    *      enabled)."
-    *
-    * We always enable all cube faces and only need to make sure all address
-    * control modes are the same.
-    */
-   const enum gen_texcoord_mode tcx_ctrl =
-      (ilo_dev_gen(dev) >= ILO_GEN(7.5) ||
-       info->tcx_ctrl == GEN6_TEXCOORDMODE_CUBE ||
-       info->tcx_ctrl == GEN6_TEXCOORDMODE_CLAMP) ?
-      info->tcx_ctrl : GEN6_TEXCOORDMODE_CLAMP;
-   const enum gen_texcoord_mode tcy_ctrl = tcx_ctrl;
-   const enum gen_texcoord_mode tcz_ctrl = tcx_ctrl;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   return get_gen6_addr_controls(dev, tcx_ctrl, tcy_ctrl, tcz_ctrl);
-}
-
-static uint16_t
-get_gen6_lod_bias(const struct ilo_dev *dev, float bias)
-{
-   /* [-16.0, 16.0) in S4.6 or S4.8 */
-   const int fbits = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 8 : 6;
-   const float max = 16.0f;
-   const float scale = (float) (1 << fbits);
-   const int mask = (1 << (1 + 4 + fbits)) - 1;
-   const int scaled_max = (16 << fbits) - 1;
-   int scaled;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (bias > max)
-      bias = max;
-   else if (bias < -max)
-      bias = -max;
-
-   scaled = (int) (bias * scale);
-   if (scaled > scaled_max)
-      scaled = scaled_max;
-
-   return (scaled & mask);
-}
-
-static uint16_t
-get_gen6_lod_clamp(const struct ilo_dev *dev, float clamp)
-{
-   /* [0.0, 13.0] in U4.6 or [0.0, 14.0] in U4.8 */
-   const int fbits = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 8 : 6;
-   const float max = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 14.0f : 13.0f;
-   const float scale = (float) (1 << fbits);
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (clamp > max)
-      clamp = max;
-   else if (clamp < 0.0f)
-      clamp = 0.0f;
-
-   return (int) (clamp * scale);
-}
-
-static bool
-sampler_set_gen6_SAMPLER_STATE(struct ilo_state_sampler *sampler,
-                               const struct ilo_dev *dev,
-                               const struct ilo_state_sampler_info *info)
-{
-   uint16_t lod_bias, max_lod, min_lod;
-   uint32_t dw0, dw1, dw3;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!sampler_validate_gen6_sampler(dev, info))
-      return false;
-
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 15:
-    *
-    *     "The per-pixel LOD is computed in an implementation-dependent manner
-    *      and approximates the log2 of the texel/pixel ratio at the given
-    *      pixel. The computation is typically based on the differential
-    *      texel-space distances associated with a one-pixel differential
-    *      distance along the screen x- and y-axes. These texel-space
-    *      distances are computed by evaluating neighboring pixel texture
-    *      coordinates, these coordinates being in units of texels on the base
-    *      MIP level (multiplied by the corresponding surface size in
-    *      texels)."
-    *
-    * Judging from the LOD computation pseudocode on page 16-18, the "base MIP
-    * level" should be given by SurfMinLod.  To summarize, for the "sample"
-    * message,
-    *
-    *   1) LOD is set to log2(texel/pixel ratio).  The number of texels is
-    *      measured against level SurfMinLod.
-    *   2) Bias is added to LOD.
-    *   3) if pre-clamp is enabled, LOD is clamped to [MinLod, MaxLod] first
-    *   4) LOD is compared with Base to determine whether magnification or
-    *      minification is needed.
-    *   5) If magnification is needed, or no mipmapping is requested, LOD is
-    *      set to floor(MinLod).
-    *   6) LOD is clamped to [0, MIPCnt], and SurfMinLod is added to LOD.
-    *
-    * As an example, we could set SurfMinLod to GL_TEXTURE_BASE_LEVEL and Base
-    * to 0 to match GL.  But GL expects LOD to be set to 0, instead of
-    * floor(MinLod), in 5).  Since this is only an issue when MinLod is
-    * greater than or equal to one, and, with Base being 0, a non-zero MinLod
-    * implies minification, we only need to deal with the case when mipmapping
-    * is disabled.  We can thus do:
-    *
-    *   if (MipFilter == MIPFILTER_NONE && MinLod) {
-    *     MinLod = 0;
-    *     MagFilter = MinFilter;
-    *   }
-    */
-
-   lod_bias = get_gen6_lod_bias(dev, info->lod_bias);
-   min_lod = get_gen6_lod_clamp(dev, info->min_lod);
-   max_lod = get_gen6_lod_clamp(dev, info->max_lod);
-
-   dw0 = GEN6_SAMPLER_DW0_LOD_PRECLAMP_ENABLE |
-         0 << GEN6_SAMPLER_DW0_BASE_LOD__SHIFT |
-         info->mip_filter << GEN6_SAMPLER_DW0_MIP_FILTER__SHIFT |
-         info->mag_filter << GEN6_SAMPLER_DW0_MAG_FILTER__SHIFT |
-         info->min_filter << GEN6_SAMPLER_DW0_MIN_FILTER__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      dw0 |= GEN7_SAMPLER_DW0_BORDER_COLOR_MODE_DX10_OGL |
-             lod_bias << GEN7_SAMPLER_DW0_LOD_BIAS__SHIFT;
-
-      if (info->min_filter == GEN6_MAPFILTER_ANISOTROPIC ||
-          info->mag_filter == GEN6_MAPFILTER_ANISOTROPIC)
-         dw0 |= GEN7_SAMPLER_DW0_ANISO_ALGO_EWA;
-   } else {
-      dw0 |= lod_bias << GEN6_SAMPLER_DW0_LOD_BIAS__SHIFT |
-             info->shadow_func << GEN6_SAMPLER_DW0_SHADOW_FUNC__SHIFT;
-
-      /*
-       * From the Sandy Bridge PRM, volume 4 part 1, page 102:
-       *
-       *     "(Min and Mag State Not Equal) Must be set to 1 if any of the
-       *      following are true:
-       *
-       *      - Mag Mode Filter and Min Mode Filter are not the same
-       *      - Address Rounding Enable: U address mag filter and U address
-       *        min filter are not the same
-       *      - Address Rounding Enable: V address mag filter and V address
-       *        min filter are not the same
-       *      - Address Rounding Enable: R address mag filter and R address
-       *        min filter are not the same"
-       *
-       * We set address rounding for U, V, and R uniformly.  Only need to
-       * check the filters.
-       */
-      if (info->min_filter != info->mag_filter)
-         dw0 |= GEN6_SAMPLER_DW0_MIN_MAG_NOT_EQUAL;
-   }
-
-   dw1 = 0;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      /*
-       * From the Ivy Bridge PRM, volume 4 part 1, page 96:
-       *
-       *     "This field (Cube Surface Control Mode) must be set to
-       *      CUBECTRLMODE_PROGRAMMED"
-       */
-      dw1 |= min_lod << GEN7_SAMPLER_DW1_MIN_LOD__SHIFT |
-             max_lod << GEN7_SAMPLER_DW1_MAX_LOD__SHIFT |
-             info->shadow_func << GEN7_SAMPLER_DW1_SHADOW_FUNC__SHIFT |
-             GEN7_SAMPLER_DW1_CUBECTRLMODE_PROGRAMMED;
-   } else {
-      dw1 |= min_lod << GEN6_SAMPLER_DW1_MIN_LOD__SHIFT |
-             max_lod << GEN6_SAMPLER_DW1_MAX_LOD__SHIFT |
-             GEN6_SAMPLER_DW1_CUBECTRLMODE_PROGRAMMED |
-             info->tcx_ctrl << GEN6_SAMPLER_DW1_U_WRAP__SHIFT |
-             info->tcy_ctrl << GEN6_SAMPLER_DW1_V_WRAP__SHIFT |
-             info->tcz_ctrl << GEN6_SAMPLER_DW1_R_WRAP__SHIFT;
-   }
-
-   dw3 = info->max_anisotropy << GEN6_SAMPLER_DW3_MAX_ANISO__SHIFT;
-
-   /* round the coordinates for linear filtering */
-   if (info->min_filter != GEN6_MAPFILTER_NEAREST) {
-      dw3 |= GEN6_SAMPLER_DW3_U_MIN_ROUND |
-             GEN6_SAMPLER_DW3_V_MIN_ROUND |
-             GEN6_SAMPLER_DW3_R_MIN_ROUND;
-   }
-   if (info->mag_filter != GEN6_MAPFILTER_NEAREST) {
-      dw3 |= GEN6_SAMPLER_DW3_U_MAG_ROUND |
-             GEN6_SAMPLER_DW3_V_MAG_ROUND |
-             GEN6_SAMPLER_DW3_R_MAG_ROUND;
-   }
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      dw3 |= GEN7_SAMPLER_DW3_TRIQUAL_FULL |
-             info->tcx_ctrl << GEN7_SAMPLER_DW3_U_WRAP__SHIFT |
-             info->tcy_ctrl << GEN7_SAMPLER_DW3_V_WRAP__SHIFT |
-             info->tcz_ctrl << GEN7_SAMPLER_DW3_R_WRAP__SHIFT;
-
-      if (info->non_normalized)
-         dw3 |= GEN7_SAMPLER_DW3_NON_NORMALIZED_COORD;
-   } else {
-      if (info->non_normalized)
-         dw3 |= GEN6_SAMPLER_DW3_NON_NORMALIZED_COORD;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(sampler->sampler) >= 3);
-   sampler->sampler[0] = dw0;
-   sampler->sampler[1] = dw1;
-   sampler->sampler[2] = dw3;
-
-   sampler->filter_integer = sampler_get_gen6_integer_filters(dev, info);
-   sampler->filter_3d = sampler_get_gen6_3d_filters(dev, info);
-   sampler->addr_ctrl_1d = sampler_get_gen6_1d_addr_controls(dev, info);
-   sampler->addr_ctrl_2d_3d = sampler_get_gen6_2d_3d_addr_controls(dev, info);
-   sampler->addr_ctrl_cube = sampler_get_gen6_cube_addr_controls(dev, info);
-
-   sampler->non_normalized = info->non_normalized;
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 21:
-    *
-    *     "[DevSNB] Errata: Incorrect behavior is observed in cases where the
-    *      min and mag mode filters are different and SurfMinLOD is nonzero.
-    *      The determination of MagMode uses the following equation instead of
-    *      the one in the above pseudocode:
-    *
-    *      MagMode = (LOD + SurfMinLOD - Base <= 0)"
-    *
-    * As a way to work around that, request Base to be set to SurfMinLod.
-    */
-   if (ilo_dev_gen(dev) == ILO_GEN(6) &&
-       info->min_filter != info->mag_filter)
-      sampler->base_to_surf_min_lod = true;
-
-   return true;
-}
-
-static bool
-sampler_border_set_gen6_SAMPLER_BORDER_COLOR_STATE(struct ilo_state_sampler_border *border,
-                                                   const struct ilo_dev *dev,
-                                                   const struct ilo_state_sampler_border_info *info)
-{
-   uint32_t dw[12];
-   float rgba[4];
-
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 117:
-    *
-    *     "For ([DevSNB]), if border color is used, all formats must be
-    *      provided.  Hardware will choose the appropriate format based on
-    *      Surface Format and Texture Border Color Mode. The values
-    *      represented by each format should be the same (other than being
-    *      subject to range-based clamping and precision) to avoid unexpected
-    *      behavior."
-    *
-    * XXX We do not honor info->is_integer yet.
-    */
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   /* make a copy so that we can clamp for SNORM and UNORM */
-   memcpy(rgba, info->rgba.f, sizeof(rgba));
-
-   /* IEEE_FP */
-   dw[1] = fui(rgba[0]);
-   dw[2] = fui(rgba[1]);
-   dw[3] = fui(rgba[2]);
-   dw[4] = fui(rgba[3]);
-
-   /* FLOAT_16 */
-   dw[5] = util_float_to_half(rgba[0]) |
-           util_float_to_half(rgba[1]) << 16;
-   dw[6] = util_float_to_half(rgba[2]) |
-           util_float_to_half(rgba[3]) << 16;
-
-   /* clamp to [-1.0f, 1.0f] */
-   rgba[0] = CLAMP(rgba[0], -1.0f, 1.0f);
-   rgba[1] = CLAMP(rgba[1], -1.0f, 1.0f);
-   rgba[2] = CLAMP(rgba[2], -1.0f, 1.0f);
-   rgba[3] = CLAMP(rgba[3], -1.0f, 1.0f);
-
-   /* SNORM16 */
-   dw[9] =  (int16_t) util_iround(rgba[0] * 32767.0f) |
-            (int16_t) util_iround(rgba[1] * 32767.0f) << 16;
-   dw[10] = (int16_t) util_iround(rgba[2] * 32767.0f) |
-            (int16_t) util_iround(rgba[3] * 32767.0f) << 16;
-
-   /* SNORM8 */
-   dw[11] = (int8_t) util_iround(rgba[0] * 127.0f) |
-            (int8_t) util_iround(rgba[1] * 127.0f) << 8 |
-            (int8_t) util_iround(rgba[2] * 127.0f) << 16 |
-            (int8_t) util_iround(rgba[3] * 127.0f) << 24;
-
-   /* clamp to [0.0f, 1.0f] */
-   rgba[0] = CLAMP(rgba[0], 0.0f, 1.0f);
-   rgba[1] = CLAMP(rgba[1], 0.0f, 1.0f);
-   rgba[2] = CLAMP(rgba[2], 0.0f, 1.0f);
-   rgba[3] = CLAMP(rgba[3], 0.0f, 1.0f);
-
-   /* UNORM8 */
-   dw[0] = (uint8_t) util_iround(rgba[0] * 255.0f) |
-           (uint8_t) util_iround(rgba[1] * 255.0f) << 8 |
-           (uint8_t) util_iround(rgba[2] * 255.0f) << 16 |
-           (uint8_t) util_iround(rgba[3] * 255.0f) << 24;
-
-   /* UNORM16 */
-   dw[7] = (uint16_t) util_iround(rgba[0] * 65535.0f) |
-           (uint16_t) util_iround(rgba[1] * 65535.0f) << 16;
-   dw[8] = (uint16_t) util_iround(rgba[2] * 65535.0f) |
-           (uint16_t) util_iround(rgba[3] * 65535.0f) << 16;
-
-   STATIC_ASSERT(ARRAY_SIZE(border->color) >= 12);
-   memcpy(border->color, dw, sizeof(dw));
-
-   return true;
-}
-
-static bool
-sampler_border_set_gen7_SAMPLER_BORDER_COLOR_STATE(struct ilo_state_sampler_border *border,
-                                                   const struct ilo_dev *dev,
-                                                   const struct ilo_state_sampler_border_info *info)
-{
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 116:
-    *
-    *     "In DX10/OGL mode, the format of the border color is
-    *      R32G32B32A32_FLOAT, regardless of the surface format chosen."
-    *
-    * From the Haswell PRM, volume 2d, page 240:
-    *
-    *     "So, SW will have to program the table in SAMPLER_BORDER_COLOR_STATE
-    *      at offsets DWORD16 to 19, as per the integer surface format type."
-    *
-    * From the Broadwell PRM, volume 2d, page 297:
-    *
-    *     "DX10/OGL mode: the format of the border color depends on the format
-    *      of the surface being sampled. If the map format is UINT, then the
-    *      border color format is R32G32B32A32_UINT. If the map format is
-    *      SINT, then the border color format is R32G32B32A32_SINT. Otherwise,
-    *      the border color format is R32G32B32A32_FLOAT."
-    *
-    * XXX every Gen is different
-    */
-
-   STATIC_ASSERT(ARRAY_SIZE(border->color) >= 4);
-   memcpy(border->color, info->rgba.f, sizeof(info->rgba.f));
-
-   return true;
-}
-
-bool
-ilo_state_sampler_init(struct ilo_state_sampler *sampler,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_sampler_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(sampler, sizeof(*sampler)));
-
-   ret &= sampler_set_gen6_SAMPLER_STATE(sampler, dev, info);
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_sampler_init_disabled(struct ilo_state_sampler *sampler,
-                                const struct ilo_dev *dev)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(ilo_is_zeroed(sampler, sizeof(*sampler)));
-
-   sampler->sampler[0] = GEN6_SAMPLER_DW0_DISABLE;
-   sampler->sampler[1] = 0;
-   sampler->sampler[2] = 0;
-
-   return true;
-}
-
-/**
- * Modify \p sampler to work with \p surf.  There will be loss of information.
- * Callers should make a copy of the orignal sampler first.
- */
-bool
-ilo_state_sampler_set_surface(struct ilo_state_sampler *sampler,
-                              const struct ilo_dev *dev,
-                              const struct ilo_state_surface *surf)
-{
-   uint32_t addr_ctrl;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (sampler->non_normalized) {
-      /* see sampler_validate_gen6_non_normalized() */
-      assert(surf->type == GEN6_SURFTYPE_2D ||
-             surf->type == GEN6_SURFTYPE_3D);
-      assert(!surf->min_lod && !surf->mip_count);
-   }
-
-   if (sampler->base_to_surf_min_lod) {
-      const uint8_t base = surf->min_lod << GEN6_SAMPLER_DW0_BASE_LOD__RADIX;
-
-      sampler->sampler[0] =
-         (sampler->sampler[0] & ~GEN6_SAMPLER_DW0_BASE_LOD__MASK) |
-         base << GEN6_SAMPLER_DW0_BASE_LOD__SHIFT;
-   }
-
-   if (surf->is_integer || surf->type == GEN6_SURFTYPE_3D) {
-      const uint32_t mask = (GEN6_SAMPLER_DW0_MIP_FILTER__MASK |
-                             GEN6_SAMPLER_DW0_MIN_FILTER__MASK |
-                             GEN6_SAMPLER_DW0_MAG_FILTER__MASK);
-      const uint32_t filter = (surf->is_integer) ?
-         sampler->filter_integer : sampler->filter_3d;
-
-      assert((filter & mask) == filter);
-      sampler->sampler[0] = (sampler->sampler[0] & ~mask) |
-                            filter;
-   }
-
-   switch (surf->type) {
-   case GEN6_SURFTYPE_1D:
-      addr_ctrl = sampler->addr_ctrl_1d;
-      break;
-   case GEN6_SURFTYPE_2D:
-   case GEN6_SURFTYPE_3D:
-      addr_ctrl = sampler->addr_ctrl_2d_3d;
-      break;
-   case GEN6_SURFTYPE_CUBE:
-      addr_ctrl = sampler->addr_ctrl_cube;
-      break;
-   default:
-      assert(!"unexpected surface type");
-      addr_ctrl = 0;
-      break;
-   }
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      const uint32_t mask = (GEN7_SAMPLER_DW3_U_WRAP__MASK |
-                             GEN7_SAMPLER_DW3_V_WRAP__MASK |
-                             GEN7_SAMPLER_DW3_R_WRAP__MASK);
-
-      assert((addr_ctrl & mask) == addr_ctrl);
-      sampler->sampler[2] = (sampler->sampler[2] & ~mask) |
-                            addr_ctrl;
-   } else {
-      const uint32_t mask = (GEN6_SAMPLER_DW1_U_WRAP__MASK |
-                             GEN6_SAMPLER_DW1_V_WRAP__MASK |
-                             GEN6_SAMPLER_DW1_R_WRAP__MASK);
-
-      assert((addr_ctrl & mask) == addr_ctrl);
-      sampler->sampler[1] = (sampler->sampler[1] & ~mask) |
-                            addr_ctrl;
-   }
-
-   return true;
-}
-
-bool
-ilo_state_sampler_border_init(struct ilo_state_sampler_border *border,
-                              const struct ilo_dev *dev,
-                              const struct ilo_state_sampler_border_info *info)
-{
-   bool ret = true;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      ret &= sampler_border_set_gen7_SAMPLER_BORDER_COLOR_STATE(border,
-            dev, info);
-   } else {
-      ret &= sampler_border_set_gen6_SAMPLER_BORDER_COLOR_STATE(border,
-            dev, info);
-   }
-
-   assert(ret);
-
-   return ret;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_sampler.h b/src/gallium/drivers/ilo/core/ilo_state_sampler.h
deleted file mode 100644 (file)
index 75c7620..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_SAMPLER_H
-#define ILO_STATE_SAMPLER_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-struct ilo_state_surface;
-
-struct ilo_state_sampler_info {
-   bool non_normalized;
-
-   float lod_bias;
-   float min_lod;
-   float max_lod;
-
-   enum gen_mip_filter mip_filter;
-   enum gen_map_filter min_filter;
-   enum gen_map_filter mag_filter;
-   enum gen_aniso_ratio max_anisotropy;
-
-   enum gen_texcoord_mode tcx_ctrl;
-   enum gen_texcoord_mode tcy_ctrl;
-   enum gen_texcoord_mode tcz_ctrl;
-
-   enum gen_prefilter_op shadow_func;
-};
-
-struct ilo_state_sampler_border_info {
-   union {
-      float f[4];
-      uint32_t ui[4];
-   } rgba;
-
-   bool is_integer;
-};
-
-struct ilo_state_sampler {
-   uint32_t sampler[3];
-
-   uint32_t filter_integer;
-   uint32_t filter_3d;
-
-   uint32_t addr_ctrl_1d;
-   uint32_t addr_ctrl_2d_3d;
-   uint32_t addr_ctrl_cube;
-
-   bool non_normalized;
-   bool base_to_surf_min_lod;
-};
-
-struct ilo_state_sampler_border {
-   uint32_t color[12];
-};
-
-bool
-ilo_state_sampler_init(struct ilo_state_sampler *sampler,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_sampler_info *info);
-
-bool
-ilo_state_sampler_init_disabled(struct ilo_state_sampler *sampler,
-                                const struct ilo_dev *dev);
-
-bool
-ilo_state_sampler_set_surface(struct ilo_state_sampler *sampler,
-                              const struct ilo_dev *dev,
-                              const struct ilo_state_surface *surf);
-
-bool
-ilo_state_sampler_border_init(struct ilo_state_sampler_border *border,
-                              const struct ilo_dev *dev,
-                              const struct ilo_state_sampler_border_info *info);
-
-#endif /* ILO_STATE_SAMPLER_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_sbe.c b/src/gallium/drivers/ilo/core/ilo_state_sbe.c
deleted file mode 100644 (file)
index 1b4ca06..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_state_sbe.h"
-
-static bool
-sbe_validate_gen8(const struct ilo_dev *dev,
-                  const struct ilo_state_sbe_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(info->attr_count <= ILO_STATE_SBE_MAX_ATTR_COUNT);
-
-   assert(info->vue_read_base + info->vue_read_count <=
-         info->cv_vue_attr_count);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 248:
-    *
-    *     "(Vertex URB Entry Read Length)
-    *      Format: U5
-    *      Range [1,16]
-    *
-    *      Specifies the amount of URB data read for each Vertex URB entry, in
-    *      256-bit register increments.
-    *
-    *      Programming Notes
-    *      It is UNDEFINED to set this field to 0 indicating no Vertex URB
-    *      data to be read."
-    *
-    *     "(Vertex URB Entry Read Offset)
-    *      Format: U6
-    *      Range [0,63]
-    *
-    *      Specifies the offset (in 256-bit units) at which Vertex URB data is
-    *      to be read from the URB."
-    */
-   assert(info->vue_read_base % 2 == 0 && info->vue_read_base <= 126);
-   assert(info->vue_read_count <= 32);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 268:
-    *
-    *     "This field (Point Sprite Texture Coordinate Enable) must be
-    *      programmed to 0 when non-point primitives are rendered."
-    */
-   if (ilo_dev_gen(dev) < ILO_GEN(7.5) && info->point_sprite_enables)
-      assert(info->cv_is_point);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 246:
-    *
-    *     "(Number of SF Output Attributes) 33-48: Specifies 17-32 attributes
-    *      (# attributes = field value - 16). Swizzling performed on
-    *      Attributes 16-31 (as required) only. Attributes 0-15 passed through
-    *      unmodified.
-    *
-    *      Note :
-    *
-    *      Attribute n Component Override and Constant Source states apply to
-    *      Attributes 16-31 (as required) instead of Attributes 0-15. E.g.,
-    *      this allows an Attribute 16-31 component to be overridden with the
-    *      PrimitiveID value.
-    *
-    *      Attribute n WrapShortest Enables still apply to Attributes 0-15.
-    *
-    *      Attribute n Swizzle Select and Attribute n Source Attribute states
-    *      are ignored and none of the swizzling functions available through
-    *      these controls are performed."
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 247:
-    *
-    *     "This bit (Attribute Swizzle Enable) controls the use of the
-    *      Attribute n Swizzle Select and Attribute n Source Attribute fields
-    *      only. If ENABLED, those fields are used as described below. If
-    *      DISABLED, attributes are copied from their corresponding source
-    *      attributes, for the purposes of Swizzle Select only.
-    *
-    *      Note that the following fields are unaffected by this bit, and are
-    *      therefore always used to control their respective fields:
-    *      Attribute n Component Override X/Y/Z/W
-    *      Attribute n Constant Source
-    *      Attribute n WrapShortest Enables"
-    *
-    * From the Ivy Bridge PRM, volume 2 part 1, page 264:
-    *
-    *     "When Attribute Swizzle Enable is ENABLED, this bit (Attribute
-    *      Swizzle Control Mode) controls whether attributes 0-15 or 16-31 are
-    *      subject to the following swizzle controls:
-    *
-    *      - Attribute n Component Override X/Y/Z/W
-    *      - Attribute n Constant Source
-    *      - Attribute n Swizzle Select
-    *      - Attribute n Source Attribute
-    *      - Attribute n Wrap Shortest Enables"
-    *
-    *     "SWIZ_16_31... Only valid when 16 or more attributes are output."
-    */
-   assert(info->swizzle_count <= ILO_STATE_SBE_MAX_SWIZZLE_COUNT);
-   if (info->swizzle_16_31) {
-      assert(ilo_dev_gen(dev) >= ILO_GEN(7) &&
-             info->swizzle_enable &&
-             info->attr_count > 16);
-   }
-
-   return true;
-}
-
-static uint8_t
-sbe_get_gen8_min_read_count(const struct ilo_dev *dev,
-                            const struct ilo_state_sbe_info *info)
-{
-   uint8_t min_count = 0;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* minimum read count for non-swizzled attributes */
-   if (!info->swizzle_enable || info->swizzle_count < info->attr_count) {
-      if (info->swizzle_16_31 && info->swizzle_count + 16 == info->attr_count)
-         min_count = 16;
-      else
-         min_count = info->attr_count;
-   }
-
-   if (info->swizzle_enable) {
-      uint8_t i;
-
-      for (i = 0; i < info->swizzle_count; i++) {
-         const struct ilo_state_sbe_swizzle_info *swizzle =
-            &info->swizzles[i];
-         bool inputattr_facing;
-
-         switch (swizzle->attr_select) {
-         case GEN6_INPUTATTR_FACING:
-         case GEN6_INPUTATTR_FACING_W:
-            inputattr_facing = true;
-            break;
-         default:
-            inputattr_facing = false;
-            break;
-         }
-
-         if (min_count < swizzle->attr + inputattr_facing + 1)
-            min_count = swizzle->attr + inputattr_facing + 1;
-      }
-   }
-
-   return min_count;
-}
-
-static uint8_t
-sbe_get_gen8_read_length(const struct ilo_dev *dev,
-                         const struct ilo_state_sbe_info *info)
-{
-   uint8_t read_len;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 248:
-    *
-    *     "(Vertex URB Entry Read Length)
-    *      This field should be set to the minimum length required to read the
-    *      maximum source attribute. The maximum source attribute is indicated
-    *      by the maximum value of the enabled Attribute # Source Attribute if
-    *      Attribute Swizzle Enable is set, Number of Output Attributes -1 if
-    *      enable is not set.
-    *      read_length = ceiling((max_source_attr+1)/2)
-    *
-    *      [errata] Corruption/Hang possible if length programmed larger than
-    *      recommended"
-    */
-   if (info->has_min_read_count) {
-      read_len = info->vue_read_count;
-      assert(read_len == sbe_get_gen8_min_read_count(dev, info));
-   } else {
-      read_len = sbe_get_gen8_min_read_count(dev, info);
-      assert(read_len <= info->vue_read_count);
-   }
-
-   /*
-    * In pairs.  URB entries are aligned to 1024-bits or 512-bits.  There is
-    * no need to worry about reading past entries.
-    */
-   read_len = (read_len + 1) / 2;
-   if (!read_len)
-      read_len = 1;
-
-   return read_len;
-}
-
-static bool
-sbe_set_gen8_3DSTATE_SBE(struct ilo_state_sbe *sbe,
-                         const struct ilo_dev *dev,
-                         const struct ilo_state_sbe_info *info)
-{
-   uint8_t vue_read_offset, vue_read_len;
-   uint8_t attr_count;
-   uint32_t dw1, dw2, dw3;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!sbe_validate_gen8(dev, info))
-      return false;
-
-   vue_read_offset = info->vue_read_base / 2;
-   vue_read_len = sbe_get_gen8_read_length(dev, info);
-
-   attr_count = info->attr_count;
-   if (ilo_dev_gen(dev) == ILO_GEN(6) && info->swizzle_16_31)
-      attr_count += 16;
-
-   dw1 = attr_count << GEN7_SBE_DW1_ATTR_COUNT__SHIFT |
-         vue_read_len << GEN7_SBE_DW1_URB_READ_LEN__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      dw1 |= GEN8_SBE_DW1_FORCE_URB_READ_LEN |
-             GEN8_SBE_DW1_FORCE_URB_READ_OFFSET |
-             vue_read_offset << GEN8_SBE_DW1_URB_READ_OFFSET__SHIFT;
-   } else {
-      dw1 |= vue_read_offset << GEN7_SBE_DW1_URB_READ_OFFSET__SHIFT;
-   }
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7) && info->swizzle_16_31)
-      dw1 |= GEN7_SBE_DW1_ATTR_SWIZZLE_16_31;
-
-   if (info->swizzle_enable)
-      dw1 |= GEN7_SBE_DW1_ATTR_SWIZZLE_ENABLE;
-
-   dw1 |= (info->point_sprite_origin_lower_left) ?
-      GEN7_SBE_DW1_POINT_SPRITE_TEXCOORD_LOWERLEFT :
-      GEN7_SBE_DW1_POINT_SPRITE_TEXCOORD_UPPERLEFT;
-
-   dw2 = info->point_sprite_enables;
-   dw3 = info->const_interp_enables;
-
-   STATIC_ASSERT(ARRAY_SIZE(sbe->sbe) >= 3);
-   sbe->sbe[0] = dw1;
-   sbe->sbe[1] = dw2;
-   sbe->sbe[2] = dw3;
-
-   return true;
-}
-
-static bool
-sbe_set_gen8_3DSTATE_SBE_SWIZ(struct ilo_state_sbe *sbe,
-                              const struct ilo_dev *dev,
-                              const struct ilo_state_sbe_info *info)
-{
-   uint16_t swiz[ILO_STATE_SBE_MAX_SWIZZLE_COUNT];
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   for (i = 0; i < info->swizzle_count; i++) {
-      const struct ilo_state_sbe_swizzle_info *swizzle = &info->swizzles[i];
-
-      /* U5 */
-      assert(swizzle->attr < 32);
-      swiz[i] = swizzle->attr_select << GEN8_SBE_SWIZ_SWIZZLE_SELECT__SHIFT |
-                swizzle->attr << GEN8_SBE_SWIZ_SRC_ATTR__SHIFT;
-
-      if (swizzle->force_zeros) {
-         swiz[i] |= GEN8_SBE_SWIZ_CONST_OVERRIDE_W |
-                    GEN8_SBE_SWIZ_CONST_OVERRIDE_Z |
-                    GEN8_SBE_SWIZ_CONST_OVERRIDE_Y |
-                    GEN8_SBE_SWIZ_CONST_OVERRIDE_X |
-                    GEN8_SBE_SWIZ_CONST_0000;
-      }
-   }
-
-   for (; i < ARRAY_SIZE(swiz); i++) {
-      swiz[i] = GEN6_INPUTATTR_NORMAL << GEN8_SBE_SWIZ_SWIZZLE_SELECT__SHIFT |
-                i << GEN8_SBE_SWIZ_SRC_ATTR__SHIFT;
-   }
-
-   STATIC_ASSERT(sizeof(sbe->swiz) == sizeof(swiz));
-   memcpy(sbe->swiz, swiz, sizeof(swiz));
-
-   return true;
-}
-
-bool
-ilo_state_sbe_init(struct ilo_state_sbe *sbe,
-                   const struct ilo_dev *dev,
-                   const struct ilo_state_sbe_info *info)
-{
-   assert(ilo_is_zeroed(sbe, sizeof(*sbe)));
-   return ilo_state_sbe_set_info(sbe, dev, info);
-}
-
-bool
-ilo_state_sbe_init_for_rectlist(struct ilo_state_sbe *sbe,
-                                const struct ilo_dev *dev,
-                                uint8_t read_base,
-                                uint8_t read_count)
-{
-   struct ilo_state_sbe_info info;
-
-   memset(&info, 0, sizeof(info));
-   info.attr_count = read_count;
-   info.cv_vue_attr_count = read_base + read_count;
-   info.vue_read_base = read_base;
-   info.vue_read_count = read_count;
-   info.has_min_read_count = true;
-
-   return ilo_state_sbe_set_info(sbe, dev, &info);
-}
-
-bool
-ilo_state_sbe_set_info(struct ilo_state_sbe *sbe,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_sbe_info *info)
-{
-   bool ret = true;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   ret &= sbe_set_gen8_3DSTATE_SBE(sbe, dev, info);
-   ret &= sbe_set_gen8_3DSTATE_SBE_SWIZ(sbe, dev, info);
-
-   assert(ret);
-
-   return true;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_sbe.h b/src/gallium/drivers/ilo/core/ilo_state_sbe.h
deleted file mode 100644 (file)
index 122999a..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_SBE_H
-#define ILO_STATE_SBE_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-/*
- * From the Sandy Bridge PRM, volume 2 part 1, page 264:
- *
- *     "Number of SF Output Attributes sets the number of attributes that will
- *      be output from the SF stage, not including position. This can be used
- *      to specify up to 32, and may differ from the number of input
- *      attributes."
- *
- *     "The first or last set of 16 attributes can be swizzled according to
- *      certain state fields."
- */
-#define ILO_STATE_SBE_MAX_ATTR_COUNT 32
-#define ILO_STATE_SBE_MAX_SWIZZLE_COUNT 16
-
-struct ilo_state_sbe_swizzle_info {
-   /* select an attribute from read ones */
-   enum gen_inputattr_select attr_select;
-   uint8_t attr;
-
-   bool force_zeros;
-};
-
-struct ilo_state_sbe_info {
-   uint8_t attr_count;
-
-   /* which VUE attributes to read */
-   uint8_t cv_vue_attr_count;
-   uint8_t vue_read_base;
-   uint8_t vue_read_count;
-   bool has_min_read_count;
-
-   bool cv_is_point;
-   bool point_sprite_origin_lower_left;
-   /* force sprite coordinates to the four corner vertices of the point */
-   uint32_t point_sprite_enables;
-
-   /* force attr at the provoking vertex to a0 and zero to a1/a2 */
-   uint32_t const_interp_enables;
-
-   bool swizzle_enable;
-   /* swizzle attribute 16 to 31 instead; Gen7+ only */
-   bool swizzle_16_31;
-   uint8_t swizzle_count;
-   const struct ilo_state_sbe_swizzle_info *swizzles;
-};
-
-struct ilo_state_sbe {
-   uint32_t sbe[3];
-   uint32_t swiz[8];
-};
-
-bool
-ilo_state_sbe_init(struct ilo_state_sbe *sbe,
-                   const struct ilo_dev *dev,
-                   const struct ilo_state_sbe_info *info);
-
-bool
-ilo_state_sbe_init_for_rectlist(struct ilo_state_sbe *sbe,
-                                const struct ilo_dev *dev,
-                                uint8_t read_base,
-                                uint8_t read_count);
-
-bool
-ilo_state_sbe_set_info(struct ilo_state_sbe *sbe,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_sbe_info *info);
-
-#endif /* ILO_STATE_SBE_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_shader.c b/src/gallium/drivers/ilo/core/ilo_state_shader.c
deleted file mode 100644 (file)
index aec4fd6..0000000
+++ /dev/null
@@ -1,763 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_state_shader.h"
-
-enum vertex_stage {
-   STAGE_VS,
-   STAGE_HS,
-   STAGE_DS,
-   STAGE_GS,
-};
-
-struct vertex_ff {
-   uint8_t grf_start;
-
-   uint8_t per_thread_scratch_space;
-   uint32_t per_thread_scratch_size;
-
-   uint8_t sampler_count;
-   uint8_t surface_count;
-   bool has_uav;
-
-   uint8_t vue_read_offset;
-   uint8_t vue_read_len;
-
-   uint8_t user_clip_enables;
-};
-
-static bool
-vertex_validate_gen6_kernel(const struct ilo_dev *dev,
-                            enum vertex_stage stage,
-                            const struct ilo_state_shader_kernel_info *kernel)
-{
-   /*
-    * "Dispatch GRF Start Register for URB Data" is U4 for GS and U5 for
-    * others.
-    */
-   const uint8_t max_grf_start = (stage == STAGE_GS) ? 16 : 32;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* we do not want to save it */
-   assert(!kernel->offset);
-
-   assert(kernel->grf_start < max_grf_start);
-
-   return true;
-}
-
-static bool
-vertex_validate_gen6_urb(const struct ilo_dev *dev,
-                         enum vertex_stage stage,
-                         const struct ilo_state_shader_urb_info *urb)
-{
-   /* "Vertex/Patch URB Entry Read Offset" is U6, in pairs */
-   const uint8_t max_read_base = 63 * 2;
-   /*
-    * "Vertex/Patch URB Entry Read Length" is limited to 64 for DS and U6 for
-    * others, in pairs
-    */
-   const uint8_t max_read_count = ((stage == STAGE_DS) ? 64 : 63) * 2;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(urb->read_base + urb->read_count <= urb->cv_input_attr_count);
-
-   assert(urb->read_base % 2 == 0 && urb->read_base <= max_read_base);
-
-   /*
-    * There is no need to worry about reading past entries, as URB entries are
-    * aligned to 1024-bits (Gen6) or 512-bits (Gen7+).
-    */
-   assert(urb->read_count <= max_read_count);
-
-   return true;
-}
-
-static bool
-vertex_get_gen6_ff(const struct ilo_dev *dev,
-                   enum vertex_stage stage,
-                   const struct ilo_state_shader_kernel_info *kernel,
-                   const struct ilo_state_shader_resource_info *resource,
-                   const struct ilo_state_shader_urb_info *urb,
-                   uint32_t per_thread_scratch_size,
-                   struct vertex_ff *ff)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   memset(ff, 0, sizeof(*ff));
-
-   if (!vertex_validate_gen6_kernel(dev, stage, kernel) ||
-       !vertex_validate_gen6_urb(dev, stage, urb))
-      return false;
-
-   ff->grf_start = kernel->grf_start;
-
-   if (per_thread_scratch_size) {
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 134:
-       *
-       *     "(Per-Thread Scratch Space)
-       *      Range    [0,11] indicating [1K Bytes, 2M Bytes]"
-       */
-      assert(per_thread_scratch_size <= 2 * 1024 * 1024);
-
-      /* next power of two, starting from 1KB */
-      ff->per_thread_scratch_space = (per_thread_scratch_size > 1024) ?
-         (util_last_bit(per_thread_scratch_size - 1) - 10) : 0;
-      ff->per_thread_scratch_size = 1 << (10 + ff->per_thread_scratch_space);
-   }
-
-   ff->sampler_count = (resource->sampler_count <= 12) ?
-      (resource->sampler_count + 3) / 4 : 4;
-   ff->surface_count = resource->surface_count;
-   ff->has_uav = resource->has_uav;
-
-   ff->vue_read_offset = urb->read_base / 2;
-   ff->vue_read_len = (urb->read_count + 1) / 2;
-
-   /* need to read something unless VUE handles are included */
-   switch (stage) {
-   case STAGE_VS:
-      if (!ff->vue_read_len)
-         ff->vue_read_len = 1;
-
-      /* one GRF per attribute */
-      assert(kernel->grf_start + urb->read_count * 2 <= 128);
-      break;
-   case STAGE_GS:
-      if (ilo_dev_gen(dev) == ILO_GEN(6) && !ff->vue_read_len)
-         ff->vue_read_len = 1;
-      break;
-   default:
-      break;
-   }
-
-   ff->user_clip_enables = urb->user_clip_enables;
-
-   return true;
-}
-
-static uint16_t
-vs_get_gen6_thread_count(const struct ilo_dev *dev,
-                         const struct ilo_state_vs_info *info)
-{
-   uint16_t thread_count;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* Maximum Number of Threads of 3DSTATE_VS */
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-      thread_count = 504;
-      break;
-   case ILO_GEN(7.5):
-      thread_count = (dev->gt >= 2) ? 280 : 70;
-      break;
-   case ILO_GEN(7):
-   case ILO_GEN(6):
-   default:
-      thread_count = dev->thread_count;
-      break;
-   }
-
-   return thread_count - 1;
-}
-
-static bool
-vs_set_gen6_3DSTATE_VS(struct ilo_state_vs *vs,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_vs_info *info)
-{
-   struct vertex_ff ff;
-   uint16_t thread_count;
-   uint32_t dw2, dw3, dw4, dw5;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!vertex_get_gen6_ff(dev, STAGE_VS, &info->kernel, &info->resource,
-            &info->urb, info->per_thread_scratch_size, &ff))
-      return false;
-
-   thread_count = vs_get_gen6_thread_count(dev, info);
-
-   dw2 = ff.sampler_count << GEN6_THREADDISP_SAMPLER_COUNT__SHIFT |
-         ff.surface_count << GEN6_THREADDISP_BINDING_TABLE_SIZE__SHIFT;
-
-   if (false)
-      dw2 |= GEN6_THREADDISP_FP_MODE_ALT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5) && ff.has_uav)
-      dw2 |= GEN75_THREADDISP_ACCESS_UAV;
-
-   dw3 = ff.per_thread_scratch_space <<
-      GEN6_THREADSCRATCH_SPACE_PER_THREAD__SHIFT;
-
-   dw4 = ff.grf_start << GEN6_VS_DW4_URB_GRF_START__SHIFT |
-         ff.vue_read_len << GEN6_VS_DW4_URB_READ_LEN__SHIFT |
-         ff.vue_read_offset << GEN6_VS_DW4_URB_READ_OFFSET__SHIFT;
-
-   dw5 = 0;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-      dw5 |= thread_count << GEN75_VS_DW5_MAX_THREADS__SHIFT;
-   else
-      dw5 |= thread_count << GEN6_VS_DW5_MAX_THREADS__SHIFT;
-
-   if (info->stats_enable)
-      dw5 |= GEN6_VS_DW5_STATISTICS;
-   if (info->dispatch_enable)
-      dw5 |= GEN6_VS_DW5_VS_ENABLE;
-
-   STATIC_ASSERT(ARRAY_SIZE(vs->vs) >= 5);
-   vs->vs[0] = dw2;
-   vs->vs[1] = dw3;
-   vs->vs[2] = dw4;
-   vs->vs[3] = dw5;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      vs->vs[4] = ff.user_clip_enables << GEN8_VS_DW8_UCP_CLIP_ENABLES__SHIFT;
-
-   vs->scratch_size = ff.per_thread_scratch_size * thread_count;
-
-   return true;
-}
-
-static uint16_t
-hs_get_gen7_thread_count(const struct ilo_dev *dev,
-                         const struct ilo_state_hs_info *info)
-{
-   uint16_t thread_count;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   /* Maximum Number of Threads of 3DSTATE_HS */
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-      thread_count = 504;
-      break;
-   case ILO_GEN(7.5):
-      thread_count = (dev->gt >= 2) ? 256 : 70;
-      break;
-   case ILO_GEN(7):
-   default:
-      thread_count = dev->thread_count;
-      break;
-   }
-
-   return thread_count - 1;
-}
-
-static bool
-hs_set_gen7_3DSTATE_HS(struct ilo_state_hs *hs,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_hs_info *info)
-{
-   struct vertex_ff ff;
-   uint16_t thread_count;
-   uint32_t dw1, dw2, dw4, dw5;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (!vertex_get_gen6_ff(dev, STAGE_HS, &info->kernel, &info->resource,
-            &info->urb, info->per_thread_scratch_size, &ff))
-      return false;
-
-   thread_count = hs_get_gen7_thread_count(dev, info);
-
-   dw1 = ff.sampler_count << GEN6_THREADDISP_SAMPLER_COUNT__SHIFT |
-         ff.surface_count << GEN6_THREADDISP_BINDING_TABLE_SIZE__SHIFT;
-
-   dw2 = 0 << GEN7_HS_DW2_INSTANCE_COUNT__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      dw2 |= thread_count << GEN8_HS_DW2_MAX_THREADS__SHIFT;
-   else if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-      dw1 |= thread_count << GEN75_HS_DW1_DISPATCH_MAX_THREADS__SHIFT;
-   else
-      dw1 |= thread_count << GEN7_HS_DW1_DISPATCH_MAX_THREADS__SHIFT;
-
-   if (info->dispatch_enable)
-      dw2 |= GEN7_HS_DW2_HS_ENABLE;
-   if (info->stats_enable)
-      dw2 |= GEN7_HS_DW2_STATISTICS;
-
-   dw4 = ff.per_thread_scratch_space <<
-      GEN6_THREADSCRATCH_SPACE_PER_THREAD__SHIFT;
-
-   dw5 = GEN7_HS_DW5_INCLUDE_VERTEX_HANDLES |
-         ff.grf_start << GEN7_HS_DW5_URB_GRF_START__SHIFT |
-         ff.vue_read_len << GEN7_HS_DW5_URB_READ_LEN__SHIFT |
-         ff.vue_read_offset << GEN7_HS_DW5_URB_READ_OFFSET__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5) && ff.has_uav)
-      dw5 |= GEN75_HS_DW5_ACCESS_UAV;
-
-   STATIC_ASSERT(ARRAY_SIZE(hs->hs) >= 4);
-   hs->hs[0] = dw1;
-   hs->hs[1] = dw2;
-   hs->hs[2] = dw4;
-   hs->hs[3] = dw5;
-
-   hs->scratch_size = ff.per_thread_scratch_size * thread_count;
-
-   return true;
-}
-
-static bool
-ds_set_gen7_3DSTATE_TE(struct ilo_state_ds *ds,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_ds_info *info)
-{
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   dw1 = 0;
-
-   if (info->dispatch_enable) {
-      dw1 |= GEN7_TE_DW1_MODE_HW |
-             GEN7_TE_DW1_TE_ENABLE;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(ds->te) >= 3);
-   ds->te[0] = dw1;
-   ds->te[1] = fui(63.0f);
-   ds->te[2] = fui(64.0f);
-
-   return true;
-}
-
-static uint16_t
-ds_get_gen7_thread_count(const struct ilo_dev *dev,
-                         const struct ilo_state_ds_info *info)
-{
-   uint16_t thread_count;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   /* Maximum Number of Threads of 3DSTATE_DS */
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-      thread_count = 504;
-      break;
-   case ILO_GEN(7.5):
-      thread_count = (dev->gt >= 2) ? 280 : 70;
-      break;
-   case ILO_GEN(7):
-   default:
-      thread_count = dev->thread_count;
-      break;
-   }
-
-   return thread_count - 1;
-}
-
-static bool
-ds_set_gen7_3DSTATE_DS(struct ilo_state_ds *ds,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_ds_info *info)
-{
-   struct vertex_ff ff;
-   uint16_t thread_count;
-   uint32_t dw2, dw3, dw4, dw5;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (!vertex_get_gen6_ff(dev, STAGE_DS, &info->kernel, &info->resource,
-            &info->urb, info->per_thread_scratch_size, &ff))
-      return false;
-
-   thread_count = ds_get_gen7_thread_count(dev, info);
-
-   dw2 = ff.sampler_count << GEN6_THREADDISP_SAMPLER_COUNT__SHIFT |
-         ff.surface_count << GEN6_THREADDISP_BINDING_TABLE_SIZE__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5) && ff.has_uav)
-      dw2 |= GEN75_THREADDISP_ACCESS_UAV;
-
-   dw3 = ff.per_thread_scratch_space <<
-      GEN6_THREADSCRATCH_SPACE_PER_THREAD__SHIFT;
-
-   dw4 = ff.grf_start << GEN7_DS_DW4_URB_GRF_START__SHIFT |
-         ff.vue_read_len << GEN7_DS_DW4_URB_READ_LEN__SHIFT |
-         ff.vue_read_offset << GEN7_DS_DW4_URB_READ_OFFSET__SHIFT;
-
-   dw5 = 0;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-      dw5 |= thread_count << GEN75_DS_DW5_MAX_THREADS__SHIFT;
-   else
-      dw5 |= thread_count << GEN7_DS_DW5_MAX_THREADS__SHIFT;
-
-   if (info->stats_enable)
-      dw5 |= GEN7_DS_DW5_STATISTICS;
-   if (info->dispatch_enable)
-      dw5 |= GEN7_DS_DW5_DS_ENABLE;
-
-   STATIC_ASSERT(ARRAY_SIZE(ds->ds) >= 5);
-   ds->ds[0] = dw2;
-   ds->ds[1] = dw3;
-   ds->ds[2] = dw4;
-   ds->ds[3] = dw5;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      ds->ds[4] = ff.user_clip_enables << GEN8_DS_DW8_UCP_CLIP_ENABLES__SHIFT;
-
-   ds->scratch_size = ff.per_thread_scratch_size * thread_count;
-
-   return true;
-}
-
-static bool
-gs_get_gen6_ff(const struct ilo_dev *dev,
-               const struct ilo_state_gs_info *info,
-               struct vertex_ff *ff)
-{
-   const struct ilo_state_shader_urb_info *urb = &info->urb;
-   const struct ilo_state_gs_sol_info *sol = &info->sol;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!vertex_get_gen6_ff(dev, STAGE_GS, &info->kernel, &info->resource,
-            &info->urb, info->per_thread_scratch_size, ff))
-      return false;
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 168-169:
-    *
-    *     "[0,62] indicating [1,63] 16B units"
-    *
-    *     "Programming Restrictions: The vertex size must be programmed as a
-    *      multiple of 32B units with the following exception: Rendering is
-    *      disabled (as per SOL stage state) and the vertex size output by the
-    *      GS thread is 16B.
-    *
-    *      If rendering is enabled (as per SOL state) the vertex size must be
-    *      programmed as a multiple of 32B units. In other words, the only
-    *      time software can program a vertex size with an odd number of 16B
-    *      units is when rendering is disabled."
-    */
-   assert(urb->output_attr_count <= 63);
-   if (!sol->render_disable)
-      assert(urb->output_attr_count % 2 == 0);
-
-   return true;
-}
-
-static uint16_t
-gs_get_gen6_thread_count(const struct ilo_dev *dev,
-                         const struct ilo_state_gs_info *info)
-{
-   const struct ilo_state_gs_sol_info *sol = &info->sol;
-   uint16_t thread_count;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* Maximum Number of Threads of 3DSTATE_GS */
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-      thread_count = 504;
-      break;
-   case ILO_GEN(7.5):
-      thread_count = (dev->gt >= 2) ? 256 : 70;
-      break;
-   case ILO_GEN(7):
-   case ILO_GEN(6):
-   default:
-      thread_count = dev->thread_count;
-
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 154:
-       *
-       *     "Maximum Number of Threads valid range is [0,27] when Rendering
-       *      Enabled bit is set."
-       *
-       * According to the classic driver, [0, 20] for GT1.
-       */
-      if (!sol->render_disable)
-         thread_count = (dev->gt == 2) ? 27 : 20;
-      break;
-   }
-
-   return thread_count - 1;
-}
-
-static bool
-gs_set_gen6_3DSTATE_GS(struct ilo_state_gs *gs,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_gs_info *info)
-{
-   const struct ilo_state_gs_sol_info *sol = &info->sol;
-   struct vertex_ff ff;
-   uint16_t thread_count;
-   uint32_t dw2, dw3, dw4, dw5, dw6;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   if (!gs_get_gen6_ff(dev, info, &ff))
-      return false;
-
-   thread_count = gs_get_gen6_thread_count(dev, info);
-
-   dw2 = GEN6_THREADDISP_SPF |
-         ff.sampler_count << GEN6_THREADDISP_SAMPLER_COUNT__SHIFT |
-         ff.surface_count << GEN6_THREADDISP_BINDING_TABLE_SIZE__SHIFT;
-
-   dw3 = ff.per_thread_scratch_space <<
-      GEN6_THREADSCRATCH_SPACE_PER_THREAD__SHIFT;
-
-   dw4 = ff.vue_read_len << GEN6_GS_DW4_URB_READ_LEN__SHIFT |
-         ff.vue_read_offset << GEN6_GS_DW4_URB_READ_OFFSET__SHIFT |
-         ff.grf_start << GEN6_GS_DW4_URB_GRF_START__SHIFT;
-
-   dw5 = thread_count << GEN6_GS_DW5_MAX_THREADS__SHIFT;
-
-   if (info->stats_enable)
-      dw5 |= GEN6_GS_DW5_STATISTICS;
-   if (sol->stats_enable)
-      dw5 |= GEN6_GS_DW5_SO_STATISTICS;
-   if (!sol->render_disable)
-      dw5 |= GEN6_GS_DW5_RENDER_ENABLE;
-
-   dw6 = 0;
-
-   /* GEN7_REORDER_TRAILING is handled by the kernel */
-   if (sol->tristrip_reorder == GEN7_REORDER_LEADING)
-      dw6 |= GEN6_GS_DW6_REORDER_LEADING_ENABLE;
-
-   if (sol->sol_enable) {
-      dw6 |= GEN6_GS_DW6_SVBI_PAYLOAD_ENABLE;
-
-      if (sol->svbi_post_inc) {
-         dw6 |= GEN6_GS_DW6_SVBI_POST_INC_ENABLE |
-                sol->svbi_post_inc << GEN6_GS_DW6_SVBI_POST_INC_VAL__SHIFT;
-      }
-   }
-
-   if (info->dispatch_enable)
-      dw6 |= GEN6_GS_DW6_GS_ENABLE;
-
-   STATIC_ASSERT(ARRAY_SIZE(gs->gs) >= 5);
-   gs->gs[0] = dw2;
-   gs->gs[1] = dw3;
-   gs->gs[2] = dw4;
-   gs->gs[3] = dw5;
-   gs->gs[4] = dw6;
-
-   gs->scratch_size = ff.per_thread_scratch_size * thread_count;
-
-   return true;
-}
-
-static uint8_t
-gs_get_gen7_vertex_size(const struct ilo_dev *dev,
-                        const struct ilo_state_gs_info *info)
-{
-   const struct ilo_state_shader_urb_info *urb = &info->urb;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   return (urb->output_attr_count) ? urb->output_attr_count - 1 : 0;
-}
-
-static bool
-gs_set_gen7_3DSTATE_GS(struct ilo_state_gs *gs,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_gs_info *info)
-{
-   struct vertex_ff ff;
-   uint16_t thread_count;
-   uint8_t vertex_size;
-   uint32_t dw2, dw3, dw4, dw5;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (!gs_get_gen6_ff(dev, info, &ff))
-      return false;
-
-   thread_count = gs_get_gen6_thread_count(dev, info);
-   vertex_size = gs_get_gen7_vertex_size(dev, info);
-
-   dw2 = ff.sampler_count << GEN6_THREADDISP_SAMPLER_COUNT__SHIFT |
-         ff.surface_count << GEN6_THREADDISP_BINDING_TABLE_SIZE__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5) && ff.has_uav)
-      dw2 |= GEN75_THREADDISP_ACCESS_UAV;
-
-   dw3 = ff.per_thread_scratch_space <<
-      GEN6_THREADSCRATCH_SPACE_PER_THREAD__SHIFT;
-
-   dw4 = vertex_size << GEN7_GS_DW4_OUTPUT_SIZE__SHIFT |
-         0 << GEN7_GS_DW4_OUTPUT_TOPO__SHIFT |
-         ff.vue_read_len << GEN7_GS_DW4_URB_READ_LEN__SHIFT |
-         GEN7_GS_DW4_INCLUDE_VERTEX_HANDLES |
-         ff.vue_read_offset << GEN7_GS_DW4_URB_READ_OFFSET__SHIFT |
-         ff.grf_start << GEN7_GS_DW4_URB_GRF_START__SHIFT;
-
-   dw5 = 0;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-      dw5 = thread_count << GEN75_GS_DW5_MAX_THREADS__SHIFT;
-   else
-      dw5 = thread_count << GEN7_GS_DW5_MAX_THREADS__SHIFT;
-
-   if (info->stats_enable)
-      dw5 |= GEN7_GS_DW5_STATISTICS;
-   if (info->dispatch_enable)
-      dw5 |= GEN7_GS_DW5_GS_ENABLE;
-
-   STATIC_ASSERT(ARRAY_SIZE(gs->gs) >= 5);
-   gs->gs[0] = dw2;
-   gs->gs[1] = dw3;
-   gs->gs[2] = dw4;
-   gs->gs[3] = dw5;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      gs->gs[4] = ff.user_clip_enables << GEN8_GS_DW9_UCP_CLIP_ENABLES__SHIFT;
-
-   gs->scratch_size = ff.per_thread_scratch_size * thread_count;
-
-   return true;
-}
-
-bool
-ilo_state_vs_init(struct ilo_state_vs *vs,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_vs_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(vs, sizeof(*vs)));
-
-   ret &= vs_set_gen6_3DSTATE_VS(vs, dev, info);
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_vs_init_disabled(struct ilo_state_vs *vs,
-                           const struct ilo_dev *dev)
-{
-   struct ilo_state_vs_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   return ilo_state_vs_init(vs, dev, &info);
-}
-
-bool
-ilo_state_hs_init(struct ilo_state_hs *hs,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_hs_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(hs, sizeof(*hs)));
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      ret &= hs_set_gen7_3DSTATE_HS(hs, dev, info);
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_hs_init_disabled(struct ilo_state_hs *hs,
-                           const struct ilo_dev *dev)
-{
-   struct ilo_state_hs_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   return ilo_state_hs_init(hs, dev, &info);
-}
-
-bool
-ilo_state_ds_init(struct ilo_state_ds *ds,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_ds_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(ds, sizeof(*ds)));
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      ret &= ds_set_gen7_3DSTATE_TE(ds, dev, info);
-      ret &= ds_set_gen7_3DSTATE_DS(ds, dev, info);
-   }
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_ds_init_disabled(struct ilo_state_ds *ds,
-                           const struct ilo_dev *dev)
-{
-   struct ilo_state_ds_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   return ilo_state_ds_init(ds, dev, &info);
-}
-
-bool
-ilo_state_gs_init(struct ilo_state_gs *gs,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_gs_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(gs, sizeof(*gs)));
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      ret &= gs_set_gen7_3DSTATE_GS(gs, dev, info);
-   else
-      ret &= gs_set_gen6_3DSTATE_GS(gs, dev, info);
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_gs_init_disabled(struct ilo_state_gs *gs,
-                           const struct ilo_dev *dev)
-{
-   struct ilo_state_gs_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   return ilo_state_gs_init(gs, dev, &info);
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_shader.h b/src/gallium/drivers/ilo/core/ilo_state_shader.h
deleted file mode 100644 (file)
index 3565109..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_SHADER_H
-#define ILO_STATE_SHADER_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-/**
- * Kernel information.
- */
-struct ilo_state_shader_kernel_info {
-   /* usually 0 unless the shader has multiple kernels */
-   uint32_t offset;
-
-   uint8_t grf_start;
-   uint8_t pcb_attr_count;
-};
-
-/**
- * Shader resources.
- */
-struct ilo_state_shader_resource_info {
-   /* for prefetches */
-   uint8_t sampler_count;
-   uint8_t surface_count;
-
-   bool has_uav;
-};
-
-/**
- * URB inputs/outputs.
- */
-struct ilo_state_shader_urb_info {
-   uint8_t cv_input_attr_count;
-
-   uint8_t read_base;
-   uint8_t read_count;
-
-   uint8_t output_attr_count;
-
-   uint8_t user_cull_enables;
-   uint8_t user_clip_enables;
-};
-
-struct ilo_state_vs_info {
-   struct ilo_state_shader_kernel_info kernel;
-   struct ilo_state_shader_resource_info resource;
-   struct ilo_state_shader_urb_info urb;
-
-   uint32_t per_thread_scratch_size;
-   bool dispatch_enable;
-   bool stats_enable;
-};
-
-struct ilo_state_hs_info {
-   struct ilo_state_shader_kernel_info kernel;
-   struct ilo_state_shader_resource_info resource;
-   struct ilo_state_shader_urb_info urb;
-
-   uint32_t per_thread_scratch_size;
-   bool dispatch_enable;
-   bool stats_enable;
-};
-
-struct ilo_state_ds_info {
-   struct ilo_state_shader_kernel_info kernel;
-   struct ilo_state_shader_resource_info resource;
-   struct ilo_state_shader_urb_info urb;
-
-   uint32_t per_thread_scratch_size;
-   bool dispatch_enable;
-   bool stats_enable;
-};
-
-/**
- * Stream output.  Must be consistent with ilo_state_sol_info.
- */
-struct ilo_state_gs_sol_info {
-   bool sol_enable;
-   bool stats_enable;
-   bool render_disable;
-
-   uint16_t svbi_post_inc;
-
-   enum gen_reorder_mode tristrip_reorder;
-};
-
-struct ilo_state_gs_info {
-   struct ilo_state_shader_kernel_info kernel;
-   struct ilo_state_shader_resource_info resource;
-   struct ilo_state_shader_urb_info urb;
-
-   struct ilo_state_gs_sol_info sol;
-
-   uint32_t per_thread_scratch_size;
-   bool dispatch_enable;
-   bool stats_enable;
-};
-
-struct ilo_state_ps_io_info {
-   /* inputs */
-   enum gen_position_offset posoffset;
-   uint8_t attr_count;
-   bool use_z;
-   bool use_w;
-   bool use_coverage_mask;
-
-   /* outputs */
-   enum gen_pscdepth_mode pscdepth;
-   bool has_rt_write;
-   bool write_pixel_mask;
-   bool write_omask;
-};
-
-struct ilo_state_ps_params_info {
-   /* compatibility with raster states */
-   uint32_t sample_mask;
-   bool earlyz_control_psexec;
-
-   /* compatibility with cc states */
-   bool alpha_may_kill;
-   bool dual_source_blending;
-   bool has_writeable_rt;
-};
-
-struct ilo_state_ps_info {
-   struct ilo_state_shader_kernel_info kernel_8;
-   struct ilo_state_shader_kernel_info kernel_16;
-   struct ilo_state_shader_kernel_info kernel_32;
-   struct ilo_state_shader_resource_info resource;
-
-   struct ilo_state_ps_io_info io;
-   struct ilo_state_ps_params_info params;
-
-   uint32_t per_thread_scratch_size;
-
-   /* bitmask of GEN6_PS_DISPATCH_x */
-   uint8_t valid_kernels;
-   bool per_sample_dispatch;
-   bool sample_count_one;
-   bool cv_per_sample_interp;
-   bool cv_has_earlyz_op;
-
-   bool rt_clear_enable;
-   bool rt_resolve_enable;
-
-   bool cv_has_depth_buffer;
-};
-
-struct ilo_state_vs {
-   uint32_t vs[5];
-   uint32_t scratch_size;
-};
-
-struct ilo_state_hs {
-   uint32_t hs[4];
-   uint32_t scratch_size;
-};
-
-struct ilo_state_ds {
-   uint32_t te[3];
-   uint32_t ds[5];
-   uint32_t scratch_size;
-};
-
-struct ilo_state_gs {
-   uint32_t gs[5];
-   uint32_t scratch_size;
-};
-
-struct ilo_state_ps {
-   uint32_t ps[8];
-   uint32_t scratch_size;
-
-   struct ilo_state_ps_dispatch_conds {
-      bool ps_valid;
-
-      bool has_rt_write;
-      bool write_odepth;
-      bool write_ostencil;
-      bool has_uav_write;
-      bool ps_may_kill;
-   } conds;
-};
-
-bool
-ilo_state_vs_init(struct ilo_state_vs *vs,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_vs_info *info);
-
-bool
-ilo_state_vs_init_disabled(struct ilo_state_vs *vs,
-                           const struct ilo_dev *dev);
-
-static inline uint32_t
-ilo_state_vs_get_scratch_size(const struct ilo_state_vs *vs)
-{
-   return vs->scratch_size;
-}
-
-bool
-ilo_state_hs_init(struct ilo_state_hs *hs,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_hs_info *info);
-
-bool
-ilo_state_hs_init_disabled(struct ilo_state_hs *hs,
-                           const struct ilo_dev *dev);
-
-
-static inline uint32_t
-ilo_state_hs_get_scratch_size(const struct ilo_state_hs *hs)
-{
-   return hs->scratch_size;
-}
-
-bool
-ilo_state_ds_init(struct ilo_state_ds *ds,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_ds_info *info);
-
-bool
-ilo_state_ds_init_disabled(struct ilo_state_ds *ds,
-                           const struct ilo_dev *dev);
-
-static inline uint32_t
-ilo_state_ds_get_scratch_size(const struct ilo_state_ds *ds)
-{
-   return ds->scratch_size;
-}
-
-bool
-ilo_state_gs_init(struct ilo_state_gs *gs,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_gs_info *info);
-
-bool
-ilo_state_gs_init_disabled(struct ilo_state_gs *gs,
-                           const struct ilo_dev *dev);
-
-static inline uint32_t
-ilo_state_gs_get_scratch_size(const struct ilo_state_gs *gs)
-{
-   return gs->scratch_size;
-}
-
-bool
-ilo_state_ps_init(struct ilo_state_ps *ps,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_ps_info *info);
-
-bool
-ilo_state_ps_init_disabled(struct ilo_state_ps *ps,
-                           const struct ilo_dev *dev);
-
-bool
-ilo_state_ps_set_params(struct ilo_state_ps *ps,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_ps_params_info *params);
-
-static inline uint32_t
-ilo_state_ps_get_scratch_size(const struct ilo_state_ps *ps)
-{
-   return ps->scratch_size;
-}
-
-#endif /* ILO_STATE_SHADER_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_shader_ps.c b/src/gallium/drivers/ilo/core/ilo_state_shader_ps.c
deleted file mode 100644 (file)
index 5c3ca1e..0000000
+++ /dev/null
@@ -1,772 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_state_shader.h"
-
-struct pixel_ff {
-   uint8_t dispatch_modes;
-
-   uint32_t kernel_offsets[3];
-   uint8_t grf_starts[3];
-   bool pcb_enable;
-   uint8_t per_thread_scratch_space;
-   uint32_t per_thread_scratch_size;
-
-   uint8_t sampler_count;
-   uint8_t surface_count;
-   bool has_uav;
-
-   uint16_t thread_count;
-
-   struct ilo_state_ps_dispatch_conds conds;
-
-   bool kill_pixel;
-   bool dispatch_enable;
-   bool dual_source_blending;
-   uint32_t sample_mask;
-};
-
-static bool
-ps_kernel_validate_gen6(const struct ilo_dev *dev,
-                        const struct ilo_state_shader_kernel_info *kernel)
-{
-   /* "Dispatch GRF Start Register for Constant/Setup Data" is U7 */
-   const uint8_t max_grf_start = 128;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* "Kernel Start Pointer" is 64-byte aligned */
-   assert(kernel->offset % 64 == 0);
-
-   assert(kernel->grf_start < max_grf_start);
-
-   return true;
-}
-
-static bool
-ps_validate_gen6(const struct ilo_dev *dev,
-                 const struct ilo_state_ps_info *info)
-{
-   const struct ilo_state_shader_kernel_info *kernel_8 = &info->kernel_8;
-   const struct ilo_state_shader_kernel_info *kernel_16 = &info->kernel_16;
-   const struct ilo_state_shader_kernel_info *kernel_32 = &info->kernel_32;
-   const struct ilo_state_ps_io_info *io = &info->io;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!ps_kernel_validate_gen6(dev, kernel_8) ||
-       !ps_kernel_validate_gen6(dev, kernel_16) ||
-       !ps_kernel_validate_gen6(dev, kernel_32))
-      return false;
-
-   /* unsupported on Gen6 */
-   if (ilo_dev_gen(dev) == ILO_GEN(6))
-      assert(!io->use_coverage_mask);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 275:
-    *
-    *     "If a NULL Depth Buffer is selected, the Pixel Shader Computed Depth
-    *      field must be set to disabled."
-    */
-   if (ilo_dev_gen(dev) == ILO_GEN(6) && io->pscdepth != GEN7_PSCDEPTH_OFF)
-      assert(info->cv_has_depth_buffer);
-
-   if (!info->per_sample_dispatch) {
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 281:
-       *
-       *     "MSDISPMODE_PERSAMPLE is required in order to select
-       *      POSOFFSET_SAMPLE."
-       */
-      assert(io->posoffset != GEN6_POSOFFSET_SAMPLE);
-
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 282:
-       *
-       *     "MSDISPMODE_PERSAMPLE is required in order to select
-       *      INTERP_SAMPLE."
-       *
-       * From the Sandy Bridge PRM, volume 2 part 1, page 283:
-       *
-       *     "MSDISPMODE_PERSAMPLE is required in order to select Perspective
-       *      Sample or Non-perspective Sample barycentric coordinates."
-       */
-      assert(!info->cv_per_sample_interp);
-   }
-
-   /*
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 314:
-    *
-    *     "Pixel Shader Dispatch, Alpha... must all be disabled."
-    *
-    * Simply disallow any valid kernel when there is early-z op.  Also, when
-    * there is no valid kernel, io should be zeroed.
-    */
-   if (info->valid_kernels)
-      assert(!info->cv_has_earlyz_op);
-   else
-      assert(ilo_is_zeroed(io, sizeof(*io)));
-
-   return true;
-}
-
-static uint8_t
-ps_get_gen6_dispatch_modes(const struct ilo_dev *dev,
-                           const struct ilo_state_ps_info *info)
-{
-   const struct ilo_state_ps_io_info *io = &info->io;
-   uint8_t dispatch_modes = info->valid_kernels;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!dispatch_modes)
-      return 0;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 334:
-    *
-    *     "Not valid on [DevSNB] if 4x PERPIXEL mode with pixel shader
-    *      computed depth."
-    *
-    *     "Valid on all products, except when in non-1x PERSAMPLE mode
-    *      (applies to [DevSNB+] only)"
-    *
-    * From the Sandy Bridge PRM, volume 4 part 1, page 239:
-    *
-    *     "[DevSNB]: When Pixel Shader outputs oDepth and PS invocation mode
-    *      is PERPIXEL, Message Type for Render Target Write must be SIMD8.
-    *
-    *      Errata: [DevSNB+]: When Pixel Shader outputs oMask, this message
-    *      type is not supported: SIMD8 (including SIMD8_DUALSRC_xx)."
-    *
-    * It is really hard to follow what combinations are valid on what
-    * platforms.  Judging from the restrictions on RT write messages on Gen6,
-    * oDepth and oMask related issues should be Gen6-specific.  PERSAMPLE
-    * issue should be universal, and disallows multiple dispatch modes.
-    */
-   if (ilo_dev_gen(dev) == ILO_GEN(6)) {
-      if (io->pscdepth != GEN7_PSCDEPTH_OFF && !info->per_sample_dispatch)
-         dispatch_modes &= GEN6_PS_DISPATCH_8;
-      if (io->write_omask)
-         dispatch_modes &= ~GEN6_PS_DISPATCH_8;
-   }
-   if (info->per_sample_dispatch && !info->sample_count_one) {
-      /* prefer 32 over 16 over 8 */
-      if (dispatch_modes & GEN6_PS_DISPATCH_32)
-         dispatch_modes &= GEN6_PS_DISPATCH_32;
-      else if (dispatch_modes & GEN6_PS_DISPATCH_16)
-         dispatch_modes &= GEN6_PS_DISPATCH_16;
-      else
-         dispatch_modes &= GEN6_PS_DISPATCH_8;
-   }
-
-   /*
-    * From the Broadwell PRM, volume 2b, page 149:
-    *
-    *     "When Render Target Fast Clear Enable is ENABLED or Render Target
-    *      Resolve Type = RESOLVE_PARTIAL or RESOLVE_FULL, this bit (8 Pixel
-    *      Dispatch or Dual-8 Pixel Dispatch Enable) must be DISABLED."
-    */
-   if (info->rt_clear_enable || info->rt_resolve_enable)
-      dispatch_modes &= ~GEN6_PS_DISPATCH_8;
-
-   assert(dispatch_modes);
-
-   return dispatch_modes;
-}
-
-static uint16_t
-ps_get_gen6_thread_count(const struct ilo_dev *dev,
-                         const struct ilo_state_ps_info *info)
-{
-   uint16_t thread_count;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* Maximum Number of Threads of 3DSTATE_PS */
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-      /* scaled automatically */
-      thread_count = 64 - 1;
-      break;
-   case ILO_GEN(7.5):
-      thread_count = (dev->gt == 3) ? 408 :
-                     (dev->gt == 2) ? 204 : 102;
-      break;
-   case ILO_GEN(7):
-      thread_count = (dev->gt == 2) ? 172 : 48;
-      break;
-   case ILO_GEN(6):
-   default:
-      /* from the classic driver instead of the PRM */
-      thread_count = (dev->gt == 2) ? 80 : 40;
-      break;
-   }
-
-   return thread_count - 1;
-}
-
-static bool
-ps_params_get_gen6_kill_pixel(const struct ilo_dev *dev,
-                              const struct ilo_state_ps_params_info *params,
-                              const struct ilo_state_ps_dispatch_conds *conds)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 275:
-    *
-    *     "This bit (Pixel Shader Kill Pixel), if ENABLED, indicates that the
-    *      PS kernel or color calculator has the ability to kill (discard)
-    *      pixels or samples, other than due to depth or stencil testing.
-    *      This bit is required to be ENABLED in the following situations:
-    *
-    *      The API pixel shader program contains "killpix" or "discard"
-    *      instructions, or other code in the pixel shader kernel that can
-    *      cause the final pixel mask to differ from the pixel mask received
-    *      on dispatch.
-    *
-    *      A sampler with chroma key enabled with kill pixel mode is used by
-    *      the pixel shader.
-    *
-    *      Any render target has Alpha Test Enable or AlphaToCoverage Enable
-    *      enabled.
-    *
-    *      The pixel shader kernel generates and outputs oMask.
-    *
-    *      Note: As ClipDistance clipping is fully supported in hardware and
-    *      therefore not via PS instructions, there should be no need to
-    *      ENABLE this bit due to ClipDistance clipping."
-    */
-   return (conds->ps_may_kill || params->alpha_may_kill);
-}
-
-static bool
-ps_params_get_gen6_dispatch_enable(const struct ilo_dev *dev,
-                                   const struct ilo_state_ps_params_info *params,
-                                   const struct ilo_state_ps_dispatch_conds *conds)
-{
-   /*
-    * We want to skip dispatching when EarlyZ suffices.  The conditions that
-    * require dispatching are
-    *
-    *  - PS writes RTs and RTs are writeable
-    *  - PS changes depth value and depth test/write is enabled
-    *  - PS changes stencil value and stencil test is enabled
-    *  - PS writes UAVs
-    *  - PS or CC kills pixels
-    *  - EDSC is PSEXEC, and depth test/write or stencil test is enabled
-    */
-   bool dispatch_required =
-      ((conds->has_rt_write && params->has_writeable_rt) ||
-       conds->write_odepth ||
-       conds->write_ostencil ||
-       conds->has_uav_write ||
-       ps_params_get_gen6_kill_pixel(dev, params, conds) ||
-       params->earlyz_control_psexec);
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 280:
-    *
-    *     "If EDSC_PSEXEC mode is selected, Thread Dispatch Enable must be
-    *      set."
-    */
-   if (ilo_dev_gen(dev) < ILO_GEN(8) && params->earlyz_control_psexec)
-      dispatch_required = true;
-
-   /* assert it is valid to dispatch */
-   if (dispatch_required)
-      assert(conds->ps_valid);
-
-   return dispatch_required;
-}
-
-static bool
-ps_get_gen6_ff_kernels(const struct ilo_dev *dev,
-                       const struct ilo_state_ps_info *info,
-                       struct pixel_ff *ff)
-{
-   const struct ilo_state_shader_kernel_info *kernel_8 = &info->kernel_8;
-   const struct ilo_state_shader_kernel_info *kernel_16 = &info->kernel_16;
-   const struct ilo_state_shader_kernel_info *kernel_32 = &info->kernel_32;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   ff->dispatch_modes = ps_get_gen6_dispatch_modes(dev, info);
-
-   /* initialize kernel offsets and GRF starts */
-   if (util_is_power_of_two(ff->dispatch_modes)) {
-      if (ff->dispatch_modes & GEN6_PS_DISPATCH_8) {
-         ff->kernel_offsets[0] = kernel_8->offset;
-         ff->grf_starts[0] = kernel_8->grf_start;
-      } else if (ff->dispatch_modes & GEN6_PS_DISPATCH_16) {
-         ff->kernel_offsets[0] = kernel_16->offset;
-         ff->grf_starts[0] = kernel_16->grf_start;
-      } else if (ff->dispatch_modes & GEN6_PS_DISPATCH_32) {
-         ff->kernel_offsets[0] = kernel_32->offset;
-         ff->grf_starts[0] = kernel_32->grf_start;
-      }
-   } else {
-      ff->kernel_offsets[0] = kernel_8->offset;
-      ff->kernel_offsets[1] = kernel_32->offset;
-      ff->kernel_offsets[2] = kernel_16->offset;
-
-      ff->grf_starts[0] = kernel_8->grf_start;
-      ff->grf_starts[1] = kernel_32->grf_start;
-      ff->grf_starts[2] = kernel_16->grf_start;
-   }
-
-   /* we do not want to save it */
-   assert(ff->kernel_offsets[0] == 0);
-
-   ff->pcb_enable = (((ff->dispatch_modes & GEN6_PS_DISPATCH_8) &&
-                      kernel_8->pcb_attr_count) ||
-                     ((ff->dispatch_modes & GEN6_PS_DISPATCH_16) &&
-                      kernel_16->pcb_attr_count) ||
-                     ((ff->dispatch_modes & GEN6_PS_DISPATCH_32) &&
-                      kernel_32->pcb_attr_count));
-
-   /* GPU hangs on Haswell if none of the dispatch mode bits is set */
-   if (ilo_dev_gen(dev) == ILO_GEN(7.5) && !ff->dispatch_modes)
-      ff->dispatch_modes |= GEN6_PS_DISPATCH_8;
-
-   return true;
-}
-
-static bool
-ps_get_gen6_ff(const struct ilo_dev *dev,
-               const struct ilo_state_ps_info *info,
-               struct pixel_ff *ff)
-{
-   const struct ilo_state_shader_resource_info *resource = &info->resource;
-   const struct ilo_state_ps_io_info *io = &info->io;
-   const struct ilo_state_ps_params_info *params = &info->params;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   memset(ff, 0, sizeof(*ff));
-
-   if (!ps_validate_gen6(dev, info) || !ps_get_gen6_ff_kernels(dev, info, ff))
-      return false;
-
-   if (info->per_thread_scratch_size) {
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 271:
-       *
-       *     "(Per-Thread Scratch Space)
-       *      Range  [0,11] indicating [1k bytes, 2M bytes] in powers of two"
-       */
-      assert(info->per_thread_scratch_size <= 2 * 1024 * 1024);
-
-      /* next power of two, starting from 1KB */
-      ff->per_thread_scratch_space = (info->per_thread_scratch_size > 1024) ?
-         (util_last_bit(info->per_thread_scratch_size - 1) - 10) : 0;
-      ff->per_thread_scratch_size = 1 << (10 + ff->per_thread_scratch_space);
-   }
-
-   ff->sampler_count = (resource->sampler_count <= 12) ?
-      (resource->sampler_count + 3) / 4 : 4;
-   ff->surface_count = resource->surface_count;
-   ff->has_uav = resource->has_uav;
-
-   ff->thread_count = ps_get_gen6_thread_count(dev, info);
-
-   ff->conds.ps_valid = (info->valid_kernels != 0x0);
-   ff->conds.has_rt_write = io->has_rt_write;
-   ff->conds.write_odepth = (io->pscdepth != GEN7_PSCDEPTH_OFF);
-   ff->conds.write_ostencil = false;
-   ff->conds.has_uav_write = resource->has_uav;
-   ff->conds.ps_may_kill = (io->write_pixel_mask || io->write_omask);
-
-   ff->kill_pixel = ps_params_get_gen6_kill_pixel(dev, params, &ff->conds);
-   ff->dispatch_enable =
-      ps_params_get_gen6_dispatch_enable(dev, params, &ff->conds);
-   ff->dual_source_blending = params->dual_source_blending;
-   ff->sample_mask = params->sample_mask;
-
-   return true;
-}
-
-static bool
-ps_set_gen6_3dstate_wm(struct ilo_state_ps *ps,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_ps_info *info,
-                       const struct pixel_ff *ff)
-{
-   const struct ilo_state_ps_io_info *io = &info->io;
-   uint32_t dw2, dw3, dw4, dw5, dw6;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   dw2 = ff->sampler_count << GEN6_THREADDISP_SAMPLER_COUNT__SHIFT |
-         ff->surface_count << GEN6_THREADDISP_BINDING_TABLE_SIZE__SHIFT;
-
-   if (false)
-      dw2 |= GEN6_THREADDISP_FP_MODE_ALT;
-
-   dw3 = ff->per_thread_scratch_space <<
-      GEN6_THREADSCRATCH_SPACE_PER_THREAD__SHIFT;
-
-   dw4 = ff->grf_starts[0] << GEN6_WM_DW4_URB_GRF_START0__SHIFT |
-         ff->grf_starts[1] << GEN6_WM_DW4_URB_GRF_START1__SHIFT |
-         ff->grf_starts[2] << GEN6_WM_DW4_URB_GRF_START2__SHIFT;
-
-   dw5 = ff->thread_count << GEN6_WM_DW5_MAX_THREADS__SHIFT |
-         ff->dispatch_modes << GEN6_WM_DW5_PS_DISPATCH_MODE__SHIFT;
-
-   if (ff->kill_pixel)
-      dw5 |= GEN6_WM_DW5_PS_KILL_PIXEL;
-
-   if (io->pscdepth != GEN7_PSCDEPTH_OFF)
-      dw5 |= GEN6_WM_DW5_PS_COMPUTE_DEPTH;
-   if (io->use_z)
-      dw5 |= GEN6_WM_DW5_PS_USE_DEPTH;
-
-   if (ff->dispatch_enable)
-      dw5 |= GEN6_WM_DW5_PS_DISPATCH_ENABLE;
-
-   if (io->write_omask)
-      dw5 |= GEN6_WM_DW5_PS_COMPUTE_OMASK;
-   if (io->use_w)
-      dw5 |= GEN6_WM_DW5_PS_USE_W;
-
-   if (ff->dual_source_blending)
-      dw5 |= GEN6_WM_DW5_PS_DUAL_SOURCE_BLEND;
-
-   dw6 = io->attr_count << GEN6_WM_DW6_SF_ATTR_COUNT__SHIFT |
-         io->posoffset << GEN6_WM_DW6_PS_POSOFFSET__SHIFT;
-
-   dw6 |= (info->per_sample_dispatch) ?
-      GEN6_WM_DW6_MSDISPMODE_PERSAMPLE : GEN6_WM_DW6_MSDISPMODE_PERPIXEL;
-
-   STATIC_ASSERT(ARRAY_SIZE(ps->ps) >= 7);
-   ps->ps[0] = dw2;
-   ps->ps[1] = dw3;
-   ps->ps[2] = dw4;
-   ps->ps[3] = dw5;
-   ps->ps[4] = dw6;
-   ps->ps[5] = ff->kernel_offsets[1];
-   ps->ps[6] = ff->kernel_offsets[2];
-
-   return true;
-}
-
-static bool
-ps_set_gen7_3dstate_wm(struct ilo_state_ps *ps,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_ps_info *info,
-                       const struct pixel_ff *ff)
-{
-   const struct ilo_state_ps_io_info *io = &info->io;
-   uint32_t dw1, dw2;
-
-   ILO_DEV_ASSERT(dev, 7, 7.5);
-
-   dw1 = io->pscdepth << GEN7_WM_DW1_PSCDEPTH__SHIFT;
-
-   if (ff->dispatch_enable)
-      dw1 |= GEN7_WM_DW1_PS_DISPATCH_ENABLE;
-   if (ff->kill_pixel)
-      dw1 |= GEN7_WM_DW1_PS_KILL_PIXEL;
-
-   if (io->use_z)
-      dw1 |= GEN7_WM_DW1_PS_USE_DEPTH;
-   if (io->use_w)
-      dw1 |= GEN7_WM_DW1_PS_USE_W;
-   if (io->use_coverage_mask)
-      dw1 |= GEN7_WM_DW1_PS_USE_COVERAGE_MASK;
-
-   dw2 = (info->per_sample_dispatch) ?
-      GEN7_WM_DW2_MSDISPMODE_PERSAMPLE : GEN7_WM_DW2_MSDISPMODE_PERPIXEL;
-
-   STATIC_ASSERT(ARRAY_SIZE(ps->ps) >= 2);
-   ps->ps[0] = dw1;
-   ps->ps[1] = dw2;
-
-   return true;
-}
-
-static bool
-ps_set_gen7_3DSTATE_PS(struct ilo_state_ps *ps,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_ps_info *info,
-                       const struct pixel_ff *ff)
-{
-   const struct ilo_state_ps_io_info *io = &info->io;
-   uint32_t dw2, dw3, dw4, dw5;
-
-   ILO_DEV_ASSERT(dev, 7, 7.5);
-
-   dw2 = ff->sampler_count << GEN6_THREADDISP_SAMPLER_COUNT__SHIFT |
-         ff->surface_count << GEN6_THREADDISP_BINDING_TABLE_SIZE__SHIFT;
-
-   if (false)
-      dw2 |= GEN6_THREADDISP_FP_MODE_ALT;
-
-   dw3 = ff->per_thread_scratch_space <<
-      GEN6_THREADSCRATCH_SPACE_PER_THREAD__SHIFT;
-
-   dw4 = io->posoffset << GEN7_PS_DW4_POSOFFSET__SHIFT |
-         ff->dispatch_modes << GEN7_PS_DW4_DISPATCH_MODE__SHIFT;
-
-   if (ilo_dev_gen(dev) == ILO_GEN(7.5)) {
-      dw4 |= ff->thread_count << GEN75_PS_DW4_MAX_THREADS__SHIFT |
-             (ff->sample_mask & 0xff) << GEN75_PS_DW4_SAMPLE_MASK__SHIFT;
-   } else {
-      dw4 |= ff->thread_count << GEN7_PS_DW4_MAX_THREADS__SHIFT;
-   }
-
-   if (ff->pcb_enable)
-      dw4 |= GEN7_PS_DW4_PUSH_CONSTANT_ENABLE;
-   if (io->attr_count)
-      dw4 |= GEN7_PS_DW4_ATTR_ENABLE;
-   if (io->write_omask)
-      dw4 |= GEN7_PS_DW4_COMPUTE_OMASK;
-   if (info->rt_clear_enable)
-      dw4 |= GEN7_PS_DW4_RT_FAST_CLEAR;
-   if (ff->dual_source_blending)
-      dw4 |= GEN7_PS_DW4_DUAL_SOURCE_BLEND;
-   if (info->rt_resolve_enable)
-      dw4 |= GEN7_PS_DW4_RT_RESOLVE;
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5) && ff->has_uav)
-      dw4 |= GEN75_PS_DW4_ACCESS_UAV;
-
-   dw5 = ff->grf_starts[0] << GEN7_PS_DW5_URB_GRF_START0__SHIFT |
-         ff->grf_starts[1] << GEN7_PS_DW5_URB_GRF_START1__SHIFT |
-         ff->grf_starts[2] << GEN7_PS_DW5_URB_GRF_START2__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(ps->ps) >= 8);
-   ps->ps[2] = dw2;
-   ps->ps[3] = dw3;
-   ps->ps[4] = dw4;
-   ps->ps[5] = dw5;
-   ps->ps[6] = ff->kernel_offsets[1];
-   ps->ps[7] = ff->kernel_offsets[2];
-
-   return true;
-}
-
-static bool
-ps_set_gen8_3DSTATE_PS(struct ilo_state_ps *ps,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_ps_info *info,
-                       const struct pixel_ff *ff)
-{
-   const struct ilo_state_ps_io_info *io = &info->io;
-   uint32_t dw3, dw4, dw6, dw7;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   /*
-    * Set VME here for correct computation of LODs and others.  Not sure why
-    * it is needed now.
-    */
-   dw3 = GEN6_THREADDISP_VME |
-         ff->sampler_count << GEN6_THREADDISP_SAMPLER_COUNT__SHIFT |
-         ff->surface_count << GEN6_THREADDISP_BINDING_TABLE_SIZE__SHIFT;
-
-   if (false)
-      dw3 |= GEN6_THREADDISP_FP_MODE_ALT;
-
-   dw4 = ff->per_thread_scratch_space <<
-      GEN6_THREADSCRATCH_SPACE_PER_THREAD__SHIFT;
-
-   dw6 = ff->thread_count << GEN8_PS_DW6_MAX_THREADS__SHIFT |
-         io->posoffset << GEN8_PS_DW6_POSOFFSET__SHIFT |
-         ff->dispatch_modes << GEN8_PS_DW6_DISPATCH_MODE__SHIFT;
-
-   if (ff->pcb_enable)
-      dw6 |= GEN8_PS_DW6_PUSH_CONSTANT_ENABLE;
-
-   if (info->rt_clear_enable)
-      dw6 |= GEN8_PS_DW6_RT_FAST_CLEAR;
-   if (info->rt_resolve_enable)
-      dw6 |= GEN8_PS_DW6_RT_RESOLVE;
-
-   dw7 = ff->grf_starts[0] << GEN8_PS_DW7_URB_GRF_START0__SHIFT |
-         ff->grf_starts[1] << GEN8_PS_DW7_URB_GRF_START1__SHIFT |
-         ff->grf_starts[2] << GEN8_PS_DW7_URB_GRF_START2__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(ps->ps) >= 6);
-   ps->ps[0] = dw3;
-   ps->ps[1] = dw4;
-   ps->ps[2] = dw6;
-   ps->ps[3] = dw7;
-   ps->ps[4] = ff->kernel_offsets[1];
-   ps->ps[5] = ff->kernel_offsets[2];
-
-   return true;
-}
-
-static bool
-ps_set_gen8_3DSTATE_PS_EXTRA(struct ilo_state_ps *ps,
-                             const struct ilo_dev *dev,
-                             const struct ilo_state_ps_info *info,
-                             const struct pixel_ff *ff)
-{
-   const struct ilo_state_ps_io_info *io = &info->io;
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   dw1 = io->pscdepth << GEN8_PSX_DW1_PSCDEPTH__SHIFT;
-
-   if (info->valid_kernels)
-      dw1 |= GEN8_PSX_DW1_VALID;
-   if (!io->has_rt_write)
-      dw1 |= GEN8_PSX_DW1_UAV_ONLY;
-   if (io->write_omask)
-      dw1 |= GEN8_PSX_DW1_COMPUTE_OMASK;
-   if (io->write_pixel_mask)
-      dw1 |= GEN8_PSX_DW1_KILL_PIXEL;
-
-   if (io->use_z)
-      dw1 |= GEN8_PSX_DW1_USE_DEPTH;
-   if (io->use_w)
-      dw1 |= GEN8_PSX_DW1_USE_W;
-   if (io->attr_count)
-      dw1 |= GEN8_PSX_DW1_ATTR_ENABLE;
-
-   if (info->per_sample_dispatch)
-      dw1 |= GEN8_PSX_DW1_PER_SAMPLE;
-   if (ff->has_uav)
-      dw1 |= GEN8_PSX_DW1_ACCESS_UAV;
-   if (io->use_coverage_mask)
-      dw1 |= GEN8_PSX_DW1_USE_COVERAGE_MASK;
-
-   /*
-    * From the Broadwell PRM, volume 2b, page 151:
-    *
-    *     "When this bit (Pixel Shader Valid) clear the rest of this command
-    *      should also be clear.
-    */
-   if (!info->valid_kernels)
-      dw1 = 0;
-
-   STATIC_ASSERT(ARRAY_SIZE(ps->ps) >= 5);
-   ps->ps[4] = dw1;
-
-   return true;
-}
-
-bool
-ilo_state_ps_init(struct ilo_state_ps *ps,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_ps_info *info)
-{
-   struct pixel_ff ff;
-   bool ret = true;
-
-   assert(ilo_is_zeroed(ps, sizeof(*ps)));
-
-   ret &= ps_get_gen6_ff(dev, info, &ff);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      ret &= ps_set_gen8_3DSTATE_PS(ps, dev, info, &ff);
-      ret &= ps_set_gen8_3DSTATE_PS_EXTRA(ps, dev, info, &ff);
-   } else if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      ret &= ps_set_gen7_3dstate_wm(ps, dev, info, &ff);
-      ret &= ps_set_gen7_3DSTATE_PS(ps, dev, info, &ff);
-   } else {
-      ret &= ps_set_gen6_3dstate_wm(ps, dev, info, &ff);
-   }
-
-   ps->scratch_size = ff.per_thread_scratch_size * ff.thread_count;
-   /* save conditions */
-   ps->conds = ff.conds;
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_ps_init_disabled(struct ilo_state_ps *ps,
-                           const struct ilo_dev *dev)
-{
-   struct ilo_state_ps_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   return ilo_state_ps_init(ps, dev, &info);
-}
-
-bool
-ilo_state_ps_set_params(struct ilo_state_ps *ps,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_ps_params_info *params)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* modify sample mask */
-   if (ilo_dev_gen(dev) == ILO_GEN(7.5)) {
-      ps->ps[4] = (ps->ps[4] & ~GEN75_PS_DW4_SAMPLE_MASK__MASK) |
-         (params->sample_mask & 0xff) << GEN75_PS_DW4_SAMPLE_MASK__SHIFT;
-   }
-
-   /* modify dispatch enable, pixel kill, and dual source blending */
-   if (ilo_dev_gen(dev) < ILO_GEN(8)) {
-      if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-         if (ps_params_get_gen6_dispatch_enable(dev, params, &ps->conds))
-            ps->ps[0] |= GEN7_WM_DW1_PS_DISPATCH_ENABLE;
-         else
-            ps->ps[0] &= ~GEN7_WM_DW1_PS_DISPATCH_ENABLE;
-
-         if (ps_params_get_gen6_kill_pixel(dev, params, &ps->conds))
-            ps->ps[0] |= GEN7_WM_DW1_PS_KILL_PIXEL;
-         else
-            ps->ps[0] &= ~GEN7_WM_DW1_PS_KILL_PIXEL;
-
-         if (params->dual_source_blending)
-            ps->ps[4] |= GEN7_PS_DW4_DUAL_SOURCE_BLEND;
-         else
-            ps->ps[4] &= ~GEN7_PS_DW4_DUAL_SOURCE_BLEND;
-      } else {
-         if (ps_params_get_gen6_dispatch_enable(dev, params, &ps->conds))
-            ps->ps[3] |= GEN6_WM_DW5_PS_DISPATCH_ENABLE;
-         else
-            ps->ps[3] &= ~GEN6_WM_DW5_PS_DISPATCH_ENABLE;
-
-         if (ps_params_get_gen6_kill_pixel(dev, params, &ps->conds))
-            ps->ps[3] |= GEN6_WM_DW5_PS_KILL_PIXEL;
-         else
-            ps->ps[3] &= ~GEN6_WM_DW5_PS_KILL_PIXEL;
-
-         if (params->dual_source_blending)
-            ps->ps[3] |= GEN6_WM_DW5_PS_DUAL_SOURCE_BLEND;
-         else
-            ps->ps[3] &= ~GEN6_WM_DW5_PS_DUAL_SOURCE_BLEND;
-      }
-   }
-
-   return true;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_sol.c b/src/gallium/drivers/ilo/core/ilo_state_sol.c
deleted file mode 100644 (file)
index 6ef2c91..0000000
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_vma.h"
-#include "ilo_state_sol.h"
-
-static bool
-sol_stream_validate_gen7(const struct ilo_dev *dev,
-                         const struct ilo_state_sol_stream_info *stream)
-{
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   assert(stream->vue_read_base + stream->vue_read_count <=
-         stream->cv_vue_attr_count);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 200:
-    *
-    *     "(Stream 0 Vertex Read Offset)
-    *      Format: U1 count of 256-bit units
-    *
-    *      Specifies amount of data to skip over before reading back Stream 0
-    *      vertex data. Must be zero if the GS is enabled and the Output
-    *      Vertex Size field in 3DSTATE_GS is programmed to 0 (i.e., one 16B
-    *      unit)."
-    *
-    *     "(Stream 0 Vertex Read Length)
-    *      Format: U5-1 count of 256-bit units
-    *
-    *      Specifies amount of vertex data to read back for Stream 0 vertices,
-    *      starting at the Stream 0 Vertex Read Offset location. Maximum
-    *      readback is 17 256-bit units (34 128-bit vertex attributes). Read
-    *      data past the end of the valid vertex data has undefined contents,
-    *      and therefore shouldn't be used to source stream out data.  Must be
-    *      zero (i.e., read length = 256b) if the GS is enabled and the Output
-    *      Vertex Size field in 3DSTATE_GS is programmed to 0 (i.e., one 16B
-    *      unit)."
-    */
-   assert(stream->vue_read_base == 0 || stream->vue_read_base == 2);
-   assert(stream->vue_read_count <= 34);
-
-   assert(stream->decl_count <= ILO_STATE_SOL_MAX_DECL_COUNT);
-
-   for (i = 0; i < stream->decl_count; i++) {
-      const struct ilo_state_sol_decl_info *decl = &stream->decls[i];
-
-      assert(decl->is_hole || decl->attr < stream->vue_read_count);
-
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 205:
-       *
-       *     "There is only enough internal storage for the 128-bit vertex
-       *      header and 32 128-bit vertex attributes."
-       */
-      assert(decl->attr < 33);
-
-      assert(decl->component_base < 4 &&
-             decl->component_base + decl->component_count <= 4);
-      assert(decl->buffer < ILO_STATE_SOL_MAX_BUFFER_COUNT);
-   }
-
-   return true;
-}
-
-static bool
-sol_validate_gen7(const struct ilo_dev *dev,
-                  const struct ilo_state_sol_info *info)
-{
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 198:
-    *
-    *     "This bit (Render Stream Select) is used even if SO Function Enable
-    *      is DISABLED."
-    *
-    * From the Haswell PRM, volume 2b, page 796:
-    *
-    *     "SO Function Enable must also be ENABLED in order for thiis field
-    *      (Render Stream Select) to select a stream for rendering. When SO
-    *      Function Enable is DISABLED and Rendering Disable is cleared (i.e.,
-    *      rendering is enabled), StreamID is ignored downstream of the SO
-    *      stage, allowing any stream to be rendered."
-    *
-    * We want Gen7 behavior, but we have to require users to follow Gen7.5
-    * behavior: info->sol_enable must be set for info->render_stream to work.
-    */
-
-   for (i = 0; i < ARRAY_SIZE(info->streams); i++) {
-      if (!sol_stream_validate_gen7(dev, &info->streams[i]))
-         return false;
-   }
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 208:
-    *
-    *     "(Surface Pitch)
-    *      [0,2048]  Must be 0 or a multiple of 4 Bytes."
-    */
-   for (i = 0; i < ARRAY_SIZE(info->buffer_strides); i++) {
-      assert(info->buffer_strides[i] <= 2048 &&
-             info->buffer_strides[i] % 4 == 0);
-   }
-
-   return true;
-}
-
-static bool
-sol_set_gen7_3DSTATE_STREAMOUT(struct ilo_state_sol *sol,
-                               const struct ilo_dev *dev,
-                               const struct ilo_state_sol_info *info)
-{
-   struct {
-      uint8_t offset;
-      uint8_t len;
-   } vue_read[ILO_STATE_SOL_MAX_STREAM_COUNT];
-   uint8_t i;
-   uint32_t dw1, dw2;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (!sol_validate_gen7(dev, info))
-      return false;
-
-   for (i = 0; i < ARRAY_SIZE(info->streams); i++) {
-      const struct ilo_state_sol_stream_info *stream = &info->streams[i];
-
-      vue_read[i].offset = stream->vue_read_base / 2;
-      /*
-       * In pairs minus 1.  URB entries are aligned to 512-bits.  There is no
-       * need to worry about reading past entries.
-       */
-      vue_read[i].len = (stream->vue_read_count + 1) / 2;
-      if (vue_read[i].len)
-         vue_read[i].len--;
-   }
-
-   dw1 = info->render_stream << GEN7_SO_DW1_RENDER_STREAM_SELECT__SHIFT |
-         info->tristrip_reorder << GEN7_SO_DW1_REORDER_MODE__SHIFT;
-
-   if (info->sol_enable)
-      dw1 |= GEN7_SO_DW1_SO_ENABLE;
-
-   if (info->render_disable)
-      dw1 |= GEN7_SO_DW1_RENDER_DISABLE;
-
-   if (info->stats_enable)
-      dw1 |= GEN7_SO_DW1_STATISTICS;
-
-   if (ilo_dev_gen(dev) < ILO_GEN(8)) {
-      const uint8_t buffer_enables = ((bool) info->buffer_strides[3]) << 3 |
-                                     ((bool) info->buffer_strides[2]) << 2 |
-                                     ((bool) info->buffer_strides[1]) << 1 |
-                                     ((bool) info->buffer_strides[0]);
-      dw1 |= buffer_enables << GEN7_SO_DW1_BUFFER_ENABLES__SHIFT;
-   }
-
-   dw2 = vue_read[3].offset << GEN7_SO_DW2_STREAM3_READ_OFFSET__SHIFT |
-         vue_read[3].len << GEN7_SO_DW2_STREAM3_READ_LEN__SHIFT |
-         vue_read[2].offset << GEN7_SO_DW2_STREAM2_READ_OFFSET__SHIFT |
-         vue_read[2].len << GEN7_SO_DW2_STREAM2_READ_LEN__SHIFT |
-         vue_read[1].offset << GEN7_SO_DW2_STREAM1_READ_OFFSET__SHIFT |
-         vue_read[1].len << GEN7_SO_DW2_STREAM1_READ_LEN__SHIFT |
-         vue_read[0].offset << GEN7_SO_DW2_STREAM0_READ_OFFSET__SHIFT |
-         vue_read[0].len << GEN7_SO_DW2_STREAM0_READ_LEN__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(sol->streamout) >= 2);
-   sol->streamout[0] = dw1;
-   sol->streamout[1] = dw2;
-
-   memcpy(sol->strides, info->buffer_strides, sizeof(sol->strides));
-
-   return true;
-}
-
-static bool
-sol_set_gen7_3DSTATE_SO_DECL_LIST(struct ilo_state_sol *sol,
-                                  const struct ilo_dev *dev,
-                                  const struct ilo_state_sol_info *info,
-                                  uint8_t max_decl_count)
-{
-   uint64_t decl_list[ILO_STATE_SOL_MAX_DECL_COUNT];
-   uint8_t decl_counts[ILO_STATE_SOL_MAX_STREAM_COUNT];
-   uint8_t buffer_selects[ILO_STATE_SOL_MAX_STREAM_COUNT];
-   uint32_t dw1, dw2;
-   uint8_t i, j;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   memset(decl_list, 0, sizeof(decl_list[0]) * max_decl_count);
-
-   for (i = 0; i < ARRAY_SIZE(info->streams); i++) {
-      const struct ilo_state_sol_stream_info *stream = &info->streams[i];
-
-      assert(stream->decl_count <= max_decl_count);
-      decl_counts[i] = stream->decl_count;
-      buffer_selects[i] = 0;
-
-      for (j = 0; j < stream->decl_count; j++) {
-         const struct ilo_state_sol_decl_info *decl = &stream->decls[j];
-         const uint8_t mask = ((1 << decl->component_count) - 1) <<
-            decl->component_base;
-         uint16_t val;
-
-         val = decl->buffer << GEN7_SO_DECL_OUTPUT_SLOT__SHIFT |
-               mask << GEN7_SO_DECL_COMPONENT_MASK__SHIFT;
-
-         if (decl->is_hole)
-            val |= GEN7_SO_DECL_HOLE_FLAG;
-         else
-            val |= decl->attr << GEN7_SO_DECL_REG_INDEX__SHIFT;
-
-         decl_list[j] |= (uint64_t) val << (16 * i);
-         buffer_selects[i] |= 1 << decl->buffer;
-      }
-   }
-
-   dw1 = buffer_selects[3] << GEN7_SO_DECL_DW1_STREAM3_BUFFER_SELECTS__SHIFT |
-         buffer_selects[2] << GEN7_SO_DECL_DW1_STREAM2_BUFFER_SELECTS__SHIFT |
-         buffer_selects[1] << GEN7_SO_DECL_DW1_STREAM1_BUFFER_SELECTS__SHIFT |
-         buffer_selects[0] << GEN7_SO_DECL_DW1_STREAM0_BUFFER_SELECTS__SHIFT;
-   dw2 = decl_counts[3] << GEN7_SO_DECL_DW2_STREAM3_ENTRY_COUNT__SHIFT |
-         decl_counts[2] << GEN7_SO_DECL_DW2_STREAM2_ENTRY_COUNT__SHIFT |
-         decl_counts[1] << GEN7_SO_DECL_DW2_STREAM1_ENTRY_COUNT__SHIFT |
-         decl_counts[0] << GEN7_SO_DECL_DW2_STREAM0_ENTRY_COUNT__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(sol->so_decl) >= 2);
-   sol->so_decl[0] = dw1;
-   sol->so_decl[1] = dw2;
-
-   STATIC_ASSERT(ARRAY_SIZE(sol->decl[0]) == 2);
-   memcpy(sol->decl, decl_list, sizeof(sol->decl[0]) * max_decl_count);
-   sol->decl_count = max_decl_count;
-
-   return true;
-}
-
-static bool
-sol_buffer_validate_gen7(const struct ilo_dev *dev,
-                         const struct ilo_state_sol_buffer_info *info)
-{
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 208:
-    *
-    *     "(Surface Base Address) This field specifies the starting DWord
-    *      address..."
-    */
-   assert(info->offset % 4 == 0);
-
-   if (info->vma) {
-      assert(info->vma->vm_alignment % 4 == 0);
-      assert(info->size && info->offset + info->size <= info->vma->vm_size);
-   }
-
-   /* Gen8+ only */
-   if (info->write_offset_load || info->write_offset_save) {
-      assert(ilo_dev_gen(dev) >= ILO_GEN(8) && info->write_offset_vma);
-      assert(info->write_offset_offset + sizeof(uint32_t) <=
-            info->write_offset_vma->vm_size);
-   }
-
-   /*
-    * From the Broadwell PRM, volume 2b, page 206:
-    *
-    *     "This field (Stream Offset) specifies the Offset in stream output
-    *      buffer to start at, or whether to append to the end of an existing
-    *      buffer. The Offset must be DWORD aligned."
-    */
-   if (info->write_offset_imm_enable) {
-      assert(info->write_offset_load);
-      assert(info->write_offset_imm % 4 == 0);
-   }
-
-   return true;
-}
-
-static uint32_t
-sol_buffer_get_gen6_size(const struct ilo_dev *dev,
-                         const struct ilo_state_sol_buffer_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 208:
-    *
-    *     "(Surface End Address) This field specifies the ending DWord
-    *      address..."
-    */
-   return (info->vma) ? info->size & ~3 : 0;
-}
-
-static bool
-sol_buffer_set_gen7_3dstate_so_buffer(struct ilo_state_sol_buffer *sb,
-                                      const struct ilo_dev *dev,
-                                      const struct ilo_state_sol_buffer_info *info)
-{
-   const uint32_t size = sol_buffer_get_gen6_size(dev, info);
-
-   ILO_DEV_ASSERT(dev, 7, 7.5);
-
-   if (!sol_buffer_validate_gen7(dev, info))
-      return false;
-
-   STATIC_ASSERT(ARRAY_SIZE(sb->so_buf) >= 2);
-   sb->so_buf[0] = info->offset;
-   sb->so_buf[1] = (size) ? info->offset + size : 0;
-
-   return true;
-}
-
-static bool
-sol_buffer_set_gen8_3dstate_so_buffer(struct ilo_state_sol_buffer *sb,
-                                      const struct ilo_dev *dev,
-                                      const struct ilo_state_sol_buffer_info *info)
-{
-   const uint32_t size = sol_buffer_get_gen6_size(dev, info);
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   if (!sol_buffer_validate_gen7(dev, info))
-      return false;
-
-   dw1 = 0;
-
-   if (info->vma)
-      dw1 |= GEN8_SO_BUF_DW1_ENABLE;
-   if (info->write_offset_load)
-      dw1 |= GEN8_SO_BUF_DW1_OFFSET_WRITE_ENABLE;
-   if (info->write_offset_save)
-      dw1 |= GEN8_SO_BUF_DW1_OFFSET_ENABLE;
-
-   STATIC_ASSERT(ARRAY_SIZE(sb->so_buf) >= 4);
-   sb->so_buf[0] = dw1;
-   sb->so_buf[1] = info->offset;
-
-   /*
-    * From the Broadwell PRM, volume 2b, page 205:
-    *
-    *     "This field (Surface Size) specifies the size of buffer in number
-    *      DWords minus 1 of the buffer in Graphics Memory."
-    */
-   sb->so_buf[2] = (size) ? size / 4 - 1 : 0;
-
-   /* load from imm or sb->write_offset_bo */
-   sb->so_buf[3] = (info->write_offset_imm_enable) ?
-      info->write_offset_imm : ~0u;
-
-   return true;
-}
-
-bool
-ilo_state_sol_init(struct ilo_state_sol *sol,
-                   const struct ilo_dev *dev,
-                   const struct ilo_state_sol_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(sol, sizeof(*sol)));
-   assert(ilo_is_zeroed(info->data, info->data_size));
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      uint8_t max_decl_count, i;
-
-      max_decl_count = info->streams[0].decl_count;
-      for (i = 1; i < ARRAY_SIZE(info->streams); i++) {
-         if (max_decl_count < info->streams[i].decl_count)
-            max_decl_count = info->streams[i].decl_count;
-      }
-
-      assert(ilo_state_sol_data_size(dev, max_decl_count) <= info->data_size);
-      sol->decl = (uint32_t (*)[2]) info->data;
-
-      ret &= sol_set_gen7_3DSTATE_STREAMOUT(sol, dev, info);
-      ret &= sol_set_gen7_3DSTATE_SO_DECL_LIST(sol, dev, info, max_decl_count);
-   }
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_sol_init_disabled(struct ilo_state_sol *sol,
-                            const struct ilo_dev *dev,
-                            bool render_disable)
-{
-   struct ilo_state_sol_info info;
-
-   memset(&info, 0, sizeof(info));
-   info.render_disable = render_disable;
-
-   return ilo_state_sol_init(sol, dev, &info);
-}
-
-uint32_t
-ilo_state_sol_buffer_size(const struct ilo_dev *dev, uint32_t size,
-                          uint32_t *alignment)
-{
-   /* DWord aligned without padding */
-   *alignment = 4;
-   return size;
-}
-
-bool
-ilo_state_sol_buffer_init(struct ilo_state_sol_buffer *sb,
-                          const struct ilo_dev *dev,
-                          const struct ilo_state_sol_buffer_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(sb, sizeof(*sb)));
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      ret &= sol_buffer_set_gen8_3dstate_so_buffer(sb, dev, info);
-   else
-      ret &= sol_buffer_set_gen7_3dstate_so_buffer(sb, dev, info);
-
-   sb->vma = info->vma;
-   sb->write_offset_vma = info->write_offset_vma;
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_sol_buffer_init_disabled(struct ilo_state_sol_buffer *sb,
-                                   const struct ilo_dev *dev)
-{
-   struct ilo_state_sol_buffer_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   return ilo_state_sol_buffer_init(sb, dev, &info);
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_sol.h b/src/gallium/drivers/ilo/core/ilo_state_sol.h
deleted file mode 100644 (file)
index 92c5f94..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_SOL_H
-#define ILO_STATE_SOL_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-/*
- * From the Ivy Bridge PRM, volume 2 part 1, page 193:
- *
- *     "Incoming topologies are tagged with a 2-bit StreamID."
- */
-#define ILO_STATE_SOL_MAX_STREAM_COUNT 4
-
-/*
- * From the Ivy Bridge PRM, volume 2 part 1, page 195:
- *
- *     "Up to four SO buffers are supported."
- */
-#define ILO_STATE_SOL_MAX_BUFFER_COUNT 4
-
-/*
- * From the Ivy Bridge PRM, volume 2 part 1, page 201:
- *
- *     "All 128 decls..."
- */
-#define ILO_STATE_SOL_MAX_DECL_COUNT 128
-
-/**
- * Output a vertex attribute.
- */
-struct ilo_state_sol_decl_info {
-   /* select an attribute from read ones */
-   uint8_t attr;
-   bool is_hole;
-
-   /* which components to write */
-   uint8_t component_base;
-   uint8_t component_count;
-
-   /* destination buffer */
-   uint8_t buffer;
-};
-
-struct ilo_state_sol_stream_info {
-   /* which VUE attributes to read */
-   uint8_t cv_vue_attr_count;
-   uint8_t vue_read_base;
-   uint8_t vue_read_count;
-
-   uint8_t decl_count;
-   const struct ilo_state_sol_decl_info *decls;
-};
-
-struct ilo_state_sol_info {
-   void *data;
-   size_t data_size;
-
-   bool sol_enable;
-   bool stats_enable;
-   enum gen_reorder_mode tristrip_reorder;
-
-   bool render_disable;
-   /* ignored when SOL is disabled */
-   uint8_t render_stream;
-
-   /* a buffer is disabled when its stride is zero */
-   uint16_t buffer_strides[ILO_STATE_SOL_MAX_BUFFER_COUNT];
-
-   struct ilo_state_sol_stream_info streams[ILO_STATE_SOL_MAX_STREAM_COUNT];
-};
-
-struct ilo_state_sol {
-   uint32_t streamout[2];
-   uint16_t strides[4];
-
-   uint32_t so_decl[2];
-   uint32_t (*decl)[2];
-   uint8_t decl_count;
-};
-
-struct ilo_vma;
-
-struct ilo_state_sol_buffer_info {
-   const struct ilo_vma *vma;
-   uint32_t offset;
-   uint32_t size;
-
-   /* Gen8+ only; at least sizeof(uint32_t) bytes */
-   const struct ilo_vma *write_offset_vma;
-   uint32_t write_offset_offset;
-
-   bool write_offset_load;
-   bool write_offset_save;
-
-   bool write_offset_imm_enable;
-   uint32_t write_offset_imm;
-};
-
-struct ilo_state_sol_buffer {
-   uint32_t so_buf[5];
-
-   const struct ilo_vma *vma;
-   const struct ilo_vma *write_offset_vma;
-};
-
-static inline size_t
-ilo_state_sol_data_size(const struct ilo_dev *dev, uint8_t max_decl_count)
-{
-   const struct ilo_state_sol *so = NULL;
-   return (ilo_dev_gen(dev) >= ILO_GEN(7)) ?
-      sizeof(so->decl[0]) * max_decl_count : 0;
-}
-
-bool
-ilo_state_sol_init(struct ilo_state_sol *sol,
-                   const struct ilo_dev *dev,
-                   const struct ilo_state_sol_info *info);
-
-bool
-ilo_state_sol_init_disabled(struct ilo_state_sol *sol,
-                            const struct ilo_dev *dev,
-                            bool render_disable);
-
-uint32_t
-ilo_state_sol_buffer_size(const struct ilo_dev *dev, uint32_t size,
-                          uint32_t *alignment);
-
-bool
-ilo_state_sol_buffer_init(struct ilo_state_sol_buffer *sb,
-                          const struct ilo_dev *dev,
-                          const struct ilo_state_sol_buffer_info *info);
-
-bool
-ilo_state_sol_buffer_init_disabled(struct ilo_state_sol_buffer *sb,
-                                   const struct ilo_dev *dev);
-
-#endif /* ILO_STATE_SOL_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_surface.c b/src/gallium/drivers/ilo/core/ilo_state_surface.c
deleted file mode 100644 (file)
index 27c3753..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_image.h"
-#include "ilo_vma.h"
-#include "ilo_state_surface.h"
-
-static bool
-surface_set_gen6_null_SURFACE_STATE(struct ilo_state_surface *surf,
-                                    const struct ilo_dev *dev)
-{
-   uint32_t dw0, dw3;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 71:
-    *
-    *     "All of the remaining fields in surface state are ignored for null
-    *      surfaces, with the following exceptions:
-    *
-    *        - [DevSNB+]: Width, Height, Depth, and LOD fields must match the
-    *          depth buffer's corresponding state for all render target
-    *          surfaces, including null.
-    *        - Surface Format must be R8G8B8A8_UNORM."
-    *
-    * From the Sandy Bridge PRM, volume 4 part 1, page 82:
-    *
-    *     "If Surface Type is SURFTYPE_NULL, this field (Tiled Surface) must
-    *      be true"
-    *
-    * Note that we ignore the first exception for all surface types.
-    */
-   dw0 = GEN6_SURFTYPE_NULL << GEN6_SURFACE_DW0_TYPE__SHIFT |
-         GEN6_FORMAT_R8G8B8A8_UNORM << GEN6_SURFACE_DW0_FORMAT__SHIFT;
-   dw3 = GEN6_TILING_X << GEN6_SURFACE_DW3_TILING__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(surf->surface) >= 6);
-   surf->surface[0] = dw0;
-   surf->surface[1] = 0;
-   surf->surface[2] = 0;
-   surf->surface[3] = dw3;
-   surf->surface[4] = 0;
-   surf->surface[5] = 0;
-
-   return true;
-}
-
-static bool
-surface_set_gen7_null_SURFACE_STATE(struct ilo_state_surface *surf,
-                                    const struct ilo_dev *dev)
-{
-   uint32_t dw0;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   dw0 = GEN6_SURFTYPE_NULL << GEN7_SURFACE_DW0_TYPE__SHIFT |
-         GEN6_FORMAT_R8G8B8A8_UNORM << GEN7_SURFACE_DW0_FORMAT__SHIFT;
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      dw0 |= GEN6_TILING_X << GEN8_SURFACE_DW0_TILING__SHIFT;
-   else
-      dw0 |= GEN6_TILING_X << GEN7_SURFACE_DW0_TILING__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(surf->surface) >= 13);
-   surf->surface[0] = dw0;
-   memset(&surf->surface[1], 0, sizeof(uint32_t) *
-         (((ilo_dev_gen(dev) >= ILO_GEN(8)) ? 13 : 8) - 1));
-
-   return true;
-}
-
-static uint32_t
-surface_get_gen6_buffer_offset_alignment(const struct ilo_dev *dev,
-                                         const struct ilo_state_surface_buffer_info *info)
-{
-   uint32_t alignment;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 68:
-    *
-    *     "The Base Address for linear render target surfaces and surfaces
-    *      accessed with the typed surface read/write data port messages must
-    *      be element-size aligned, for non-YUV surface formats, or a multiple
-    *      of 2 element-sizes for YUV surface formats.  Other linear surfaces
-    *      have no alignment requirements (byte alignment is sufficient)."
-    *
-    *     "Certain message types used to access surfaces have more stringent
-    *      alignment requirements. Please refer to the specific message
-    *      documentation for additional restrictions."
-    */
-   switch (info->access) {
-   case ILO_STATE_SURFACE_ACCESS_SAMPLER:
-      /* no alignment requirements */
-      alignment = 1;
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_RENDER:
-   case ILO_STATE_SURFACE_ACCESS_DP_TYPED:
-      /* element-size aligned */
-      alignment = info->format_size;
-
-      assert(info->struct_size % alignment == 0);
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_UNTYPED:
-      /*
-       * Nothing is said about Untyped* messages, but I think they require the
-       * base address to be DWord aligned.
-       */
-      alignment = 4;
-
-      /*
-       * From the Ivy Bridge PRM, volume 4 part 1, page 70:
-       *
-       *     "For linear surfaces with Surface Type of SURFTYPE_STRBUF, the
-       *      pitch must be a multiple of 4 bytes."
-       */
-      if (info->struct_size > 1)
-         assert(info->struct_size % alignment == 0);
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_DATA:
-      /*
-       * From the Ivy Bridge PRM, volume 4 part 1, page 233, 235, and 237:
-       *
-       *     "the surface base address must be OWord aligned"
-       *
-       * for OWord Block Read/Write, Unaligned OWord Block Read, and OWord
-       * Dual Block Read/Write.
-       *
-       * From the Ivy Bridge PRM, volume 4 part 1, page 246 and 249:
-       *
-       *     "The surface base address must be DWord aligned"
-       *
-       * for DWord Scattered Read/Write and Byte Scattered Read/Write.
-       */
-      alignment = (info->format_size > 4) ? 16 : 4;
-
-      /*
-       * From the Ivy Bridge PRM, volume 4 part 1, page 233, 235, 237, and
-       * 246:
-       *
-       *     "the surface pitch is ignored, the surface is treated as a
-       *      1-dimensional surface. An element size (pitch) of 16 bytes is
-       *      used to determine the size of the buffer for out-of-bounds
-       *      checking if using the surface state model."
-       *
-       * for OWord Block Read/Write, Unaligned OWord Block Read, OWord
-       * Dual Block Read/Write, and DWord Scattered Read/Write.
-       *
-       * From the Ivy Bridge PRM, volume 4 part 1, page 248:
-       *
-       *     "The surface pitch is ignored, the surface is treated as a
-       *      1-dimensional surface. An element size (pitch) of 4 bytes is
-       *      used to determine the size of the buffer for out-of-bounds
-       *      checking if using the surface state model."
-       *
-       * for Byte Scattered Read/Write.
-       *
-       * It is programmable on Gen7.5+.
-       */
-      if (ilo_dev_gen(dev) < ILO_GEN(7.5)) {
-         const int fixed = (info->format_size > 1) ? 16 : 4;
-         assert(info->struct_size == fixed);
-      }
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_SVB:
-      /*
-       * From the Sandy Bridge PRM, volume 4 part 1, page 259:
-       *
-       *     "Both the surface base address and surface pitch must be DWord
-       *      aligned."
-       */
-      alignment = 4;
-
-      assert(info->struct_size % alignment == 0);
-      break;
-   default:
-      assert(!"unknown access");
-      alignment = 1;
-      break;
-   }
-
-   return alignment;
-}
-
-static bool
-surface_validate_gen6_buffer(const struct ilo_dev *dev,
-                             const struct ilo_state_surface_buffer_info *info)
-{
-   uint32_t alignment;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (info->offset + info->size > info->vma->vm_size) {
-      ilo_warn("invalid buffer range\n");
-      return false;
-   }
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 81:
-    *
-    *     "For surfaces of type SURFTYPE_BUFFER: [0,2047] -> [1B, 2048B]
-    *      For surfaces of type SURFTYPE_STRBUF: [0,2047] -> [1B, 2048B]"
-    */
-   if (!info->struct_size || info->struct_size > 2048) {
-      ilo_warn("invalid buffer struct size\n");
-      return false;
-   }
-
-   alignment = surface_get_gen6_buffer_offset_alignment(dev, info);
-   if (info->offset % alignment || info->vma->vm_alignment % alignment) {
-      ilo_warn("bad buffer offset\n");
-      return false;
-   }
-
-   /* no STRBUF on Gen6 */
-   if (info->format == GEN6_FORMAT_RAW && info->struct_size > 1)
-      assert(ilo_dev_gen(dev) >= ILO_GEN(7));
-
-   /* SVB writes are Gen6 only */
-   if (info->access == ILO_STATE_SURFACE_ACCESS_DP_SVB)
-      assert(ilo_dev_gen(dev) == ILO_GEN(6));
-
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 83:
-    *
-    *     "NOTE: "RAW" is supported only with buffers and structured buffers
-    *      accessed via the untyped surface read/write and untyped atomic
-    *      operation messages, which do not have a column in the table."
-    *
-    * From the Ivy Bridge PRM, volume 4 part 1, page 252:
-    *
-    *     "For untyped messages, the Surface Format must be RAW and the
-    *      Surface Type must be SURFTYPE_BUFFER or SURFTYPE_STRBUF."
-    */
-   assert((info->access == ILO_STATE_SURFACE_ACCESS_DP_UNTYPED) ==
-          (info->format == GEN6_FORMAT_RAW));
-
-   return true;
-}
-
-static bool
-surface_get_gen6_buffer_struct_count(const struct ilo_dev *dev,
-                                     const struct ilo_state_surface_buffer_info *info,
-                                     uint32_t *count)
-{
-   uint32_t max_struct, c;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   c = info->size / info->struct_size;
-   if (info->format_size < info->size - info->struct_size * c)
-      c++;
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 77:
-    *
-    *     "For buffer surfaces, the number of entries in the buffer ranges
-    *      from 1 to 2^27."
-    *
-    * From the Ivy Bridge PRM, volume 4 part 1, page 68:
-    *
-    *     "For typed buffer and structured buffer surfaces, the number of
-    *      entries in the buffer ranges from 1 to 2^27.  For raw buffer
-    *      surfaces, the number of entries in the buffer is the number of
-    *      bytes which can range from 1 to 2^30."
-    *
-    * From the Ivy Bridge PRM, volume 4 part 1, page 69:
-    *
-    *      For SURFTYPE_BUFFER: The low two bits of this field (Width) must be
-    *      11 if the Surface Format is RAW (the size of the buffer must be a
-    *      multiple of 4 bytes)."
-    */
-   max_struct = 1 << 27;
-   if (info->format == GEN6_FORMAT_RAW && info->struct_size == 1) {
-      if (ilo_dev_gen(dev) >= ILO_GEN(7))
-         max_struct = 1 << 30;
-
-      c &= ~3;
-   }
-
-   if (!c || c > max_struct) {
-      ilo_warn("too many or zero buffer structs\n");
-      return false;
-   }
-
-   *count = c - 1;
-
-   return true;
-}
-
-static bool
-surface_set_gen6_buffer_SURFACE_STATE(struct ilo_state_surface *surf,
-                                     const struct ilo_dev *dev,
-                                     const struct ilo_state_surface_buffer_info *info)
-{
-   uint32_t dw0, dw1, dw2, dw3;
-   uint32_t struct_count;
-   int width, height, depth;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   if (!surface_validate_gen6_buffer(dev, info) ||
-       !surface_get_gen6_buffer_struct_count(dev, info, &struct_count))
-      return false;
-
-   /* bits [6:0] */
-   width  = (struct_count & 0x0000007f);
-   /* bits [19:7] */
-   height = (struct_count & 0x000fff80) >> 7;
-   /* bits [26:20] */
-   depth  = (struct_count & 0x07f00000) >> 20;
-
-   dw0 = GEN6_SURFTYPE_BUFFER << GEN6_SURFACE_DW0_TYPE__SHIFT |
-         info->format << GEN6_SURFACE_DW0_FORMAT__SHIFT;
-   dw1 = info->offset;
-   dw2 = height << GEN6_SURFACE_DW2_HEIGHT__SHIFT |
-         width << GEN6_SURFACE_DW2_WIDTH__SHIFT;
-   dw3 = depth << GEN6_SURFACE_DW3_DEPTH__SHIFT |
-         (info->struct_size - 1) << GEN6_SURFACE_DW3_PITCH__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(surf->surface) >= 6);
-   surf->surface[0] = dw0;
-   surf->surface[1] = dw1;
-   surf->surface[2] = dw2;
-   surf->surface[3] = dw3;
-   surf->surface[4] = 0;
-   surf->surface[5] = 0;
-
-   surf->type = GEN6_SURFTYPE_BUFFER;
-   surf->min_lod = 0;
-   surf->mip_count = 0;
-
-   return true;
-}
-
-static bool
-surface_set_gen7_buffer_SURFACE_STATE(struct ilo_state_surface *surf,
-                                     const struct ilo_dev *dev,
-                                     const struct ilo_state_surface_buffer_info *info)
-{
-   uint32_t dw0, dw1, dw2, dw3, dw7;
-   enum gen_surface_type type;
-   uint32_t struct_count;
-   int width, height, depth;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (!surface_validate_gen6_buffer(dev, info) ||
-       !surface_get_gen6_buffer_struct_count(dev, info, &struct_count))
-      return false;
-
-   type = (info->format == GEN6_FORMAT_RAW && info->struct_size > 1) ?
-      GEN7_SURFTYPE_STRBUF : GEN6_SURFTYPE_BUFFER;
-
-   /* bits [6:0] */
-   width  = (struct_count & 0x0000007f);
-   /* bits [20:7] */
-   height = (struct_count & 0x001fff80) >> 7;
-   /* bits [30:21] */
-   depth  = (struct_count & 0x7fe00000) >> 21;
-
-   dw0 = type << GEN7_SURFACE_DW0_TYPE__SHIFT |
-         info->format << GEN7_SURFACE_DW0_FORMAT__SHIFT;
-   dw1 = (ilo_dev_gen(dev) >= ILO_GEN(8)) ? 0 : info->offset;
-   dw2 = GEN_SHIFT32(height, GEN7_SURFACE_DW2_HEIGHT) |
-         GEN_SHIFT32(width, GEN7_SURFACE_DW2_WIDTH);
-   dw3 = GEN_SHIFT32(depth, GEN7_SURFACE_DW3_DEPTH) |
-         GEN_SHIFT32(info->struct_size - 1, GEN7_SURFACE_DW3_PITCH);
-
-   dw7 = 0;
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5)) {
-      dw7 |= GEN_SHIFT32(GEN75_SCS_RED,   GEN75_SURFACE_DW7_SCS_R) |
-             GEN_SHIFT32(GEN75_SCS_GREEN, GEN75_SURFACE_DW7_SCS_G) |
-             GEN_SHIFT32(GEN75_SCS_BLUE,  GEN75_SURFACE_DW7_SCS_B) |
-             GEN_SHIFT32(GEN75_SCS_ALPHA, GEN75_SURFACE_DW7_SCS_A);
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(surf->surface) >= 13);
-   surf->surface[0] = dw0;
-   surf->surface[1] = dw1;
-   surf->surface[2] = dw2;
-   surf->surface[3] = dw3;
-   surf->surface[4] = 0;
-   surf->surface[5] = 0;
-   surf->surface[6] = 0;
-   surf->surface[7] = dw7;
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      surf->surface[8] = info->offset;
-      surf->surface[9] = 0;
-      surf->surface[10] = 0;
-      surf->surface[11] = 0;
-      surf->surface[12] = 0;
-   }
-
-   surf->type = type;
-   surf->min_lod = 0;
-   surf->mip_count = 0;
-
-   return true;
-}
-
-static bool
-surface_validate_gen6_image(const struct ilo_dev *dev,
-                            const struct ilo_state_surface_image_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   switch (info->access) {
-   case ILO_STATE_SURFACE_ACCESS_SAMPLER:
-   case ILO_STATE_SURFACE_ACCESS_DP_RENDER:
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_TYPED:
-      assert(ilo_dev_gen(dev) >= ILO_GEN(7));
-      break;
-   default:
-      assert(!"unsupported surface access");
-      break;
-   }
-
-   assert(info->img && info->vma);
-
-   if (info->img->tiling != GEN6_TILING_NONE)
-      assert(info->vma->vm_alignment % 4096 == 0);
-
-   if (info->aux_vma) {
-      assert(ilo_image_can_enable_aux(info->img, info->level_base));
-      /* always tiled */
-      assert(info->aux_vma->vm_alignment % 4096 == 0);
-   }
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 78:
-    *
-    *     "For surface types other than SURFTYPE_BUFFER, the Width specified
-    *      by this field must be less than or equal to the surface pitch
-    *      (specified in bytes via the Surface Pitch field)."
-    */
-   assert(info->img->bo_stride && info->img->bo_stride <= 512 * 1024 &&
-          info->img->width0 <= info->img->bo_stride);
-
-   if (info->type != info->img->type) {
-      assert(info->type == GEN6_SURFTYPE_2D &&
-             info->img->type == GEN6_SURFTYPE_CUBE);
-   }
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 78:
-    *
-    *     "For cube maps, Width must be set equal to the Height."
-    */
-   if (info->type == GEN6_SURFTYPE_CUBE)
-      assert(info->img->width0 == info->img->height0);
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 72:
-    *
-    *     "Tile Walk TILEWALK_YMAJOR is UNDEFINED for render target formats
-    *      that have 128 bits-per-element (BPE)."
-    *
-    *     "If Number of Multisamples is set to a value other than
-    *      MULTISAMPLECOUNT_1, this field cannot be set to the following
-    *      formats:
-    *
-    *      - any format with greater than 64 bits per element
-    *      - any compressed texture format (BC*)
-    *      - any YCRCB* format"
-    *
-    * From the Ivy Bridge PRM, volume 4 part 1, page 63:
-    *
-    *      If Number of Multisamples is set to a value other than
-    *      MULTISAMPLECOUNT_1, this field cannot be set to the following
-    *      formats: any format with greater than 64 bits per element, if
-    *      Number of Multisamples is MULTISAMPLECOUNT_8, any compressed
-    *      texture format (BC*), and any YCRCB* format.
-    *
-    * TODO
-    */
-
-   if (ilo_dev_gen(dev) < ILO_GEN(8) && info->img->tiling == GEN8_TILING_W) {
-      ilo_warn("tiling W is not supported\n");
-      return false;
-   }
-
-   return true;
-}
-
-static void
-surface_get_gen6_image_max_extent(const struct ilo_dev *dev,
-                                  const struct ilo_state_surface_image_info *info,
-                                  uint16_t *max_w, uint16_t *max_h)
-{
-   const uint16_t max_size = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 16384 : 8192;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   switch (info->type) {
-   case GEN6_SURFTYPE_1D:
-      *max_w = max_size;
-      *max_h = 1;
-      break;
-   case GEN6_SURFTYPE_2D:
-   case GEN6_SURFTYPE_CUBE:
-      *max_w = max_size;
-      *max_h = max_size;
-      break;
-   case GEN6_SURFTYPE_3D:
-      *max_w = 2048;
-      *max_h = 2048;
-      break;
-   default:
-      assert(!"invalid surface type");
-      *max_w = 1;
-      *max_h = 1;
-      break;
-   }
-}
-
-static bool
-surface_get_gen6_image_extent(const struct ilo_dev *dev,
-                              const struct ilo_state_surface_image_info *info,
-                              uint16_t *width, uint16_t *height)
-{
-   uint16_t w, h, max_w, max_h;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   w = info->img->width0;
-   h = info->img->height0;
-
-   surface_get_gen6_image_max_extent(dev, info, &max_w, &max_h);
-   assert(w && h && w <= max_w && h <= max_h);
-
-   *width = w - 1;
-   *height = h - 1;
-
-   return true;
-}
-
-static bool
-surface_get_gen6_image_slices(const struct ilo_dev *dev,
-                              const struct ilo_state_surface_image_info *info,
-                              uint16_t *depth, uint16_t *min_array_elem,
-                              uint16_t *rt_view_extent)
-{
-   uint16_t max_slice, d;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 63:
-    *
-    *     "If this field (Surface Array) is enabled, the Surface Type must be
-    *      SURFTYPE_1D, SURFTYPE_2D, or SURFTYPE_CUBE. If this field is
-    *      disabled and Surface Type is SURFTYPE_1D, SURFTYPE_2D, or
-    *      SURFTYPE_CUBE, the Depth field must be set to zero."
-    *
-    * From the Ivy Bridge PRM, volume 4 part 1, page 69:
-    *
-    *     "This field (Depth) specifies the total number of levels for a
-    *      volume texture or the number of array elements allowed to be
-    *      accessed starting at the Minimum Array Element for arrayed
-    *      surfaces.  If the volume texture is MIP-mapped, this field
-    *      specifies the depth of the base MIP level."
-    *
-    *     "For SURFTYPE_CUBE:For Sampling Engine Surfaces, the range of this
-    *      field is [0,340], indicating the number of cube array elements
-    *      (equal to the number of underlying 2D array elements divided by 6).
-    *      For other surfaces, this field must be zero."
-    *
-    *     "Errata: For SURFTYPE_CUBE sampling engine surfaces, the range of
-    *      this field is limited to [0,85].
-    *
-    *      Errata: If Surface Array is enabled, and Depth is between 1024 and
-    *      2047, an incorrect array slice may be accessed if the requested
-    *      array index in the message is greater than or equal to 4096."
-    *
-    * The errata are for Gen7-specific, and they limit the number of useable
-    * layers to (86 * 6), about 512.
-    */
-
-   switch (info->type) {
-   case GEN6_SURFTYPE_1D:
-   case GEN6_SURFTYPE_2D:
-   case GEN6_SURFTYPE_CUBE:
-      max_slice = (ilo_dev_gen(dev) >= ILO_GEN(7.5)) ? 2048 : 512;
-
-      assert(info->img->array_size <= max_slice);
-      max_slice = info->img->array_size;
-
-      d = info->slice_count;
-      if (info->type == GEN6_SURFTYPE_CUBE) {
-         if (info->access == ILO_STATE_SURFACE_ACCESS_SAMPLER) {
-            if (!d || d % 6) {
-               ilo_warn("invalid cube slice count\n");
-               return false;
-            }
-
-            if (ilo_dev_gen(dev) == ILO_GEN(7) && d > 86 * 6) {
-               ilo_warn("cube slice count exceeds Gen7 limit\n");
-               return false;
-            }
-         } else {
-            /*
-             * Minumum Array Element and Depth must be 0; Render Target View
-             * Extent is ignored.
-             */
-            if (info->slice_base || d != 6) {
-               ilo_warn("no cube RT array support in data port\n");
-               return false;
-            }
-         }
-
-         d /= 6;
-      }
-
-      if (!info->is_array && d > 1) {
-         ilo_warn("non-array surface with non-zero depth\n");
-         return false;
-      }
-      break;
-   case GEN6_SURFTYPE_3D:
-      max_slice = 2048;
-
-      assert(info->img->depth0 <= max_slice);
-      max_slice = u_minify(info->img->depth0, info->level_base);
-
-      d = info->img->depth0;
-
-      if (info->is_array) {
-         ilo_warn("3D surfaces cannot be arrays\n");
-         return false;
-      }
-      break;
-   default:
-      assert(!"invalid surface type");
-      return false;
-      break;
-   }
-
-   if (!info->slice_count ||
-       info->slice_base + info->slice_count > max_slice) {
-      ilo_warn("invalid slice range\n");
-      return false;
-   }
-
-   assert(d);
-   *depth = d - 1;
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 84:
-    *
-    *     "For Sampling Engine and Render Target 1D and 2D Surfaces:
-    *      This field (Minimum Array Element) indicates the minimum array
-    *      element that can be accessed as part of this surface.  This field
-    *      is added to the delivered array index before it is used to address
-    *      the surface.
-    *
-    *      For Render Target 3D Surfaces:
-    *      This field indicates the minimum `R' coordinate on the LOD
-    *      currently being rendered to.  This field is added to the delivered
-    *      array index before it is used to address the surface.
-    *
-    *      For Sampling Engine Cube Surfaces on [DevSNB+] only:
-    *      This field indicates the minimum array element in the underlying 2D
-    *      surface array that can be accessed as part of this surface (the
-    *      cube array index is multipled by 6 to compute this value, although
-    *      this field is not restricted to only multiples of 6). This field is
-    *      added to the delivered array index before it is used to address the
-    *      surface.
-    *
-    *      For Other Surfaces:
-    *      This field must be set to zero."
-    *
-    * On Gen7+, typed sufaces are treated like sampling engine 1D and 2D
-    * surfaces.
-    */
-   *min_array_elem = info->slice_base;
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 84:
-    *
-    *     "For Render Target 3D Surfaces:
-    *      This field (Render Target View Extent) indicates the extent of the
-    *      accessible `R' coordinates minus 1 on the LOD currently being
-    *      rendered to.
-    *
-    *      For Render Target 1D and 2D Surfaces:
-    *      This field must be set to the same value as the Depth field.
-    *
-    *      For Other Surfaces:
-    *      This field is ignored."
-    */
-   *rt_view_extent = info->slice_count - 1;
-
-   return true;
-}
-
-static bool
-surface_get_gen6_image_levels(const struct ilo_dev *dev,
-                              const struct ilo_state_surface_image_info *info,
-                              uint8_t *min_lod, uint8_t *mip_count)
-{
-   uint8_t max_level = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 15 : 14;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(info->img->level_count <= max_level);
-   max_level = info->img->level_count;
-
-   if (!info->level_count ||
-       info->level_base + info->level_count > max_level) {
-      ilo_warn("invalid level range\n");
-      return false;
-   }
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 79:
-    *
-    *     "For Sampling Engine Surfaces:
-    *      This field (MIP Count / LOD) indicates the number of MIP levels
-    *      allowed to be accessed starting at Surface Min LOD, which must be
-    *      less than or equal to the number of MIP levels actually stored in
-    *      memory for this surface.
-    *
-    *      Force the mip map access to be between the mipmap specified by the
-    *      integer bits of the Min LOD and the ceiling of the value specified
-    *      here.
-    *
-    *      For Render Target Surfaces:
-    *      This field defines the MIP level that is currently being rendered
-    *      into. This is the absolute MIP level on the surface and is not
-    *      relative to the Surface Min LOD field, which is ignored for render
-    *      target surfaces.
-    *
-    *      For Other Surfaces:
-    *      This field is reserved : MBZ"
-    *
-    * From the Sandy Bridge PRM, volume 4 part 1, page 83:
-    *
-    *     "For Sampling Engine Surfaces:
-    *
-    *      This field (Surface Min LOD) indicates the most detailed LOD that
-    *      can be accessed as part of this surface.  This field is added to
-    *      the delivered LOD (sample_l, ld, or resinfo message types) before
-    *      it is used to address the surface.
-    *
-    *      For Other Surfaces:
-    *      This field is ignored."
-    *
-    * On Gen7+, typed sufaces are treated like sampling engine surfaces.
-    */
-   if (info->access == ILO_STATE_SURFACE_ACCESS_DP_RENDER) {
-      assert(info->level_count == 1);
-
-      *min_lod = 0;
-      *mip_count = info->level_base;
-   } else {
-      *min_lod = info->level_base;
-      *mip_count = info->level_count - 1;
-   }
-
-   return true;
-}
-
-static bool
-surface_get_gen6_image_sample_count(const struct ilo_dev *dev,
-                                    const struct ilo_state_surface_image_info *info,
-                                    enum gen_sample_count *sample_count)
-{
-   int min_gen;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   switch (info->img->sample_count) {
-   case 1:
-      *sample_count = GEN6_NUMSAMPLES_1;
-      min_gen = ILO_GEN(6);
-      break;
-   case 2:
-      *sample_count = GEN8_NUMSAMPLES_2;
-      min_gen = ILO_GEN(8);
-      break;
-   case 4:
-      *sample_count = GEN6_NUMSAMPLES_4;
-      min_gen = ILO_GEN(6);
-      break;
-   case 8:
-      *sample_count = GEN7_NUMSAMPLES_8;
-      min_gen = ILO_GEN(7);
-      break;
-   default:
-      assert(!"invalid sample count");
-      *sample_count = GEN6_NUMSAMPLES_1;
-      break;
-   }
-
-   assert(ilo_dev_gen(dev) >= min_gen);
-
-   return true;
-}
-
-static bool
-surface_get_gen6_image_alignments(const struct ilo_dev *dev,
-                                  const struct ilo_state_surface_image_info *info,
-                                  uint32_t *alignments)
-{
-   uint32_t a = 0;
-   bool err = false;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      switch (info->img->align_i) {
-      case 4:
-         a |= GEN8_SURFACE_DW0_HALIGN_4;
-         break;
-      case 8:
-         a |= GEN8_SURFACE_DW0_HALIGN_8;
-         break;
-      case 16:
-         a |= GEN8_SURFACE_DW0_HALIGN_16;
-         break;
-      default:
-         err = true;
-         break;
-      }
-
-      switch (info->img->align_j) {
-      case 4:
-         a |= GEN7_SURFACE_DW0_VALIGN_4;
-         break;
-      case 8:
-         a |= GEN8_SURFACE_DW0_VALIGN_8;
-         break;
-      case 16:
-         a |= GEN8_SURFACE_DW0_VALIGN_16;
-         break;
-      default:
-         err = true;
-         break;
-      }
-   } else if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      switch (info->img->align_i) {
-      case 4:
-         a |= GEN7_SURFACE_DW0_HALIGN_4;
-         break;
-      case 8:
-         a |= GEN7_SURFACE_DW0_HALIGN_8;
-         break;
-      default:
-         err = true;
-         break;
-      }
-
-      switch (info->img->align_j) {
-      case 2:
-         a |= GEN7_SURFACE_DW0_VALIGN_2;
-         break;
-      case 4:
-         a |= GEN7_SURFACE_DW0_VALIGN_4;
-         break;
-      default:
-         err = true;
-         break;
-      }
-   } else {
-      if (info->img->align_i != 4)
-         err = true;
-
-      switch (info->img->align_j) {
-      case 2:
-         a |= GEN6_SURFACE_DW5_VALIGN_2;
-         break;
-      case 4:
-         a |= GEN6_SURFACE_DW5_VALIGN_4;
-         break;
-      default:
-         err = true;
-         break;
-      }
-   }
-
-   if (err)
-      assert(!"invalid HALIGN or VALIGN");
-
-   *alignments = a;
-
-   return true;
-}
-
-static bool
-surface_set_gen6_image_SURFACE_STATE(struct ilo_state_surface *surf,
-                                     const struct ilo_dev *dev,
-                                     const struct ilo_state_surface_image_info *info)
-{
-   uint16_t width, height, depth, array_base, view_extent;
-   uint8_t min_lod, mip_count;
-   enum gen_sample_count sample_count;
-   uint32_t alignments;
-   uint32_t dw0, dw2, dw3, dw4, dw5;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   if (!surface_validate_gen6_image(dev, info) ||
-       !surface_get_gen6_image_extent(dev, info, &width, &height) ||
-       !surface_get_gen6_image_slices(dev, info, &depth, &array_base,
-                                      &view_extent) ||
-       !surface_get_gen6_image_levels(dev, info, &min_lod, &mip_count) ||
-       !surface_get_gen6_image_sample_count(dev, info, &sample_count) ||
-       !surface_get_gen6_image_alignments(dev, info, &alignments))
-      return false;
-
-   /* no ARYSPC_LOD0 */
-   assert(info->img->walk != ILO_IMAGE_WALK_LOD);
-   /* no UMS/CMS */
-   if (info->img->sample_count > 1)
-      assert(info->img->interleaved_samples);
-
-   dw0 = info->type << GEN6_SURFACE_DW0_TYPE__SHIFT |
-         info->format << GEN6_SURFACE_DW0_FORMAT__SHIFT |
-         GEN6_SURFACE_DW0_MIPLAYOUT_BELOW;
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 74:
-    *
-    *     "CUBE_AVERAGE may only be selected if all of the Cube Face Enable
-    *      fields are equal to one."
-    *
-    * From the Sandy Bridge PRM, volume 4 part 1, page 75-76:
-    *
-    *     "For SURFTYPE_CUBE Surfaces accessed via the Sampling Engine:
-    *      Bits 5:0 of this field (Cube Face Enables) enable the individual
-    *      faces of a cube map.  Enabling a face indicates that the face is
-    *      present in the cube map, while disabling it indicates that that
-    *      face is represented by the texture map's border color. Refer to
-    *      Memory Data Formats for the correlation between faces and the cube
-    *      map memory layout. Note that storage for disabled faces must be
-    *      provided.
-    *
-    *      For other surfaces:
-    *      This field is reserved : MBZ"
-    *
-    *     "When TEXCOORDMODE_CLAMP is used when accessing a cube map, this
-    *      field must be programmed to 111111b (all faces enabled)."
-    */
-   if (info->type == GEN6_SURFTYPE_CUBE &&
-       info->access == ILO_STATE_SURFACE_ACCESS_SAMPLER) {
-      dw0 |= GEN6_SURFACE_DW0_CUBE_MAP_CORNER_MODE_AVERAGE |
-             GEN6_SURFACE_DW0_CUBE_FACE_ENABLES__MASK;
-   }
-
-   dw2 = height << GEN6_SURFACE_DW2_HEIGHT__SHIFT |
-         width << GEN6_SURFACE_DW2_WIDTH__SHIFT |
-         mip_count << GEN6_SURFACE_DW2_MIP_COUNT_LOD__SHIFT;
-
-   dw3 = depth << GEN6_SURFACE_DW3_DEPTH__SHIFT |
-         (info->img->bo_stride - 1) << GEN6_SURFACE_DW3_PITCH__SHIFT |
-         info->img->tiling << GEN6_SURFACE_DW3_TILING__SHIFT;
-
-   dw4 = min_lod << GEN6_SURFACE_DW4_MIN_LOD__SHIFT |
-         array_base << GEN6_SURFACE_DW4_MIN_ARRAY_ELEMENT__SHIFT |
-         view_extent << GEN6_SURFACE_DW4_RT_VIEW_EXTENT__SHIFT |
-         sample_count << GEN6_SURFACE_DW4_MULTISAMPLECOUNT__SHIFT;
-
-   dw5 = alignments;
-
-   STATIC_ASSERT(ARRAY_SIZE(surf->surface) >= 6);
-   surf->surface[0] = dw0;
-   surf->surface[1] = 0;
-   surf->surface[2] = dw2;
-   surf->surface[3] = dw3;
-   surf->surface[4] = dw4;
-   surf->surface[5] = dw5;
-
-   surf->type = info->type;
-   surf->min_lod = min_lod;
-   surf->mip_count = mip_count;
-
-   return true;
-}
-
-static bool
-surface_set_gen7_image_SURFACE_STATE(struct ilo_state_surface *surf,
-                                     const struct ilo_dev *dev,
-                                     const struct ilo_state_surface_image_info *info)
-{
-   uint16_t width, height, depth, array_base, view_extent;
-   uint8_t min_lod, mip_count;
-   uint32_t alignments;
-   enum gen_sample_count sample_count;
-   uint32_t dw0, dw1, dw2, dw3, dw4, dw5, dw7;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (!surface_validate_gen6_image(dev, info) ||
-       !surface_get_gen6_image_extent(dev, info, &width, &height) ||
-       !surface_get_gen6_image_slices(dev, info, &depth, &array_base,
-                                      &view_extent) ||
-       !surface_get_gen6_image_levels(dev, info, &min_lod, &mip_count) ||
-       !surface_get_gen6_image_sample_count(dev, info, &sample_count) ||
-       !surface_get_gen6_image_alignments(dev, info, &alignments))
-      return false;
-
-   dw0 = info->type << GEN7_SURFACE_DW0_TYPE__SHIFT |
-         info->format << GEN7_SURFACE_DW0_FORMAT__SHIFT |
-         alignments;
-
-   if (info->is_array)
-      dw0 |= GEN7_SURFACE_DW0_IS_ARRAY;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      dw0 |= info->img->tiling << GEN8_SURFACE_DW0_TILING__SHIFT;
-   } else {
-      dw0 |= info->img->tiling << GEN7_SURFACE_DW0_TILING__SHIFT;
-
-      if (info->img->walk == ILO_IMAGE_WALK_LOD)
-         dw0 |= GEN7_SURFACE_DW0_ARYSPC_LOD0;
-      else
-         dw0 |= GEN7_SURFACE_DW0_ARYSPC_FULL;
-   }
-
-   /*
-    * From the Ivy Bridge PRM, volume 4 part 1, page 67:
-    *
-    *     "For SURFTYPE_CUBE Surfaces accessed via the Sampling Engine: Bits
-    *      5:0 of this field (Cube Face Enables) enable the individual faces
-    *      of a cube map. Enabling a face indicates that the face is present
-    *      in the cube map, while disabling it indicates that that face is
-    *      represented by the texture map's border color. Refer to Memory Data
-    *      Formats for the correlation between faces and the cube map memory
-    *      layout. Note that storage for disabled faces must be provided. For
-    *      other surfaces this field is reserved and MBZ."
-    *
-    *     "When TEXCOORDMODE_CLAMP is used when accessing a cube map, this
-    *      field must be programmed to 111111b (all faces enabled). This field
-    *      is ignored unless the Surface Type is SURFTYPE_CUBE."
-    */
-   if (info->type == GEN6_SURFTYPE_CUBE &&
-       info->access == ILO_STATE_SURFACE_ACCESS_SAMPLER)
-      dw0 |= GEN7_SURFACE_DW0_CUBE_FACE_ENABLES__MASK;
-
-   dw1 = 0;
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      assert(info->img->walk_layer_height % 4 == 0);
-      dw1 |= info->img->walk_layer_height / 4 <<
-         GEN8_SURFACE_DW1_QPITCH__SHIFT;
-   }
-
-   dw2 = height << GEN7_SURFACE_DW2_HEIGHT__SHIFT |
-         width << GEN7_SURFACE_DW2_WIDTH__SHIFT;
-
-   dw3 = depth << GEN7_SURFACE_DW3_DEPTH__SHIFT |
-         (info->img->bo_stride - 1) << GEN7_SURFACE_DW3_PITCH__SHIFT;
-
-   if (ilo_dev_gen(dev) == ILO_GEN(7.5))
-      dw3 |= 0 << GEN75_SURFACE_DW3_INTEGER_SURFACE_FORMAT__SHIFT;
-
-   dw4 = array_base << GEN7_SURFACE_DW4_MIN_ARRAY_ELEMENT__SHIFT |
-         view_extent << GEN7_SURFACE_DW4_RT_VIEW_EXTENT__SHIFT |
-         sample_count << GEN7_SURFACE_DW4_MULTISAMPLECOUNT__SHIFT;
-
-   /*
-    * MSFMT_MSS means the samples are not interleaved and MSFMT_DEPTH_STENCIL
-    * means the samples are interleaved.  The layouts are the same when the
-    * number of samples is 1.
-    */
-   if (info->img->interleaved_samples && info->img->sample_count > 1) {
-      assert(info->access != ILO_STATE_SURFACE_ACCESS_DP_RENDER);
-      dw4 |= GEN7_SURFACE_DW4_MSFMT_DEPTH_STENCIL;
-   } else {
-      dw4 |= GEN7_SURFACE_DW4_MSFMT_MSS;
-   }
-
-   dw5 = min_lod << GEN7_SURFACE_DW5_MIN_LOD__SHIFT |
-         mip_count << GEN7_SURFACE_DW5_MIP_COUNT_LOD__SHIFT;
-
-   dw7 = 0;
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5)) {
-      dw7 |= GEN_SHIFT32(GEN75_SCS_RED,   GEN75_SURFACE_DW7_SCS_R) |
-             GEN_SHIFT32(GEN75_SCS_GREEN, GEN75_SURFACE_DW7_SCS_G) |
-             GEN_SHIFT32(GEN75_SCS_BLUE,  GEN75_SURFACE_DW7_SCS_B) |
-             GEN_SHIFT32(GEN75_SCS_ALPHA, GEN75_SURFACE_DW7_SCS_A);
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(surf->surface) >= 13);
-   surf->surface[0] = dw0;
-   surf->surface[1] = dw1;
-   surf->surface[2] = dw2;
-   surf->surface[3] = dw3;
-   surf->surface[4] = dw4;
-   surf->surface[5] = dw5;
-   surf->surface[6] = 0;
-   surf->surface[7] = dw7;
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      surf->surface[8] = 0;
-      surf->surface[9] = 0;
-      surf->surface[10] = 0;
-      surf->surface[11] = 0;
-      surf->surface[12] = 0;
-   }
-
-   surf->type = info->type;
-   surf->min_lod = min_lod;
-   surf->mip_count = mip_count;
-
-   return true;
-}
-
-uint32_t
-ilo_state_surface_buffer_size(const struct ilo_dev *dev,
-                              enum ilo_state_surface_access access,
-                              uint32_t size, uint32_t *alignment)
-{
-   switch (access) {
-   case ILO_STATE_SURFACE_ACCESS_SAMPLER:
-      /*
-       * From the Sandy Bridge PRM, volume 1 part 1, page 118:
-       *
-       *     "For buffers, which have no inherent "height," padding
-       *      requirements are different. A buffer must be padded to the next
-       *      multiple of 256 array elements, with an additional 16 bytes
-       *      added beyond that to account for the L1 cache line."
-       *
-       * Assuming tightly packed GEN6_FORMAT_R32G32B32A32_FLOAT, the size
-       * needs to be padded to 4096 (= 16 * 256).
-       */
-      *alignment = 1;
-      size = align(size, 4096) + 16;
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_RENDER:
-   case ILO_STATE_SURFACE_ACCESS_DP_TYPED:
-      /* element-size aligned for worst cases */
-      *alignment = 16;
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_UNTYPED:
-      /* DWord aligned? */
-      *alignment = 4;
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_DATA:
-      /* OWord aligned */
-      *alignment = 16;
-      size = align(size, 16);
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_SVB:
-      /* always DWord aligned */
-      *alignment = 4;
-      break;
-   default:
-      assert(!"unknown access");
-      *alignment = 1;
-      break;
-   }
-
-   return size;
-}
-
-bool
-ilo_state_surface_init_for_null(struct ilo_state_surface *surf,
-                                const struct ilo_dev *dev)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(surf, sizeof(*surf)));
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      ret &= surface_set_gen7_null_SURFACE_STATE(surf, dev);
-   else
-      ret &= surface_set_gen6_null_SURFACE_STATE(surf, dev);
-
-   surf->vma = NULL;
-   surf->type = GEN6_SURFTYPE_NULL;
-   surf->readonly = true;
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_surface_init_for_buffer(struct ilo_state_surface *surf,
-                                  const struct ilo_dev *dev,
-                                  const struct ilo_state_surface_buffer_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(surf, sizeof(*surf)));
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      ret &= surface_set_gen7_buffer_SURFACE_STATE(surf, dev, info);
-   else
-      ret &= surface_set_gen6_buffer_SURFACE_STATE(surf, dev, info);
-
-   surf->vma = info->vma;
-   surf->readonly = info->readonly;
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_surface_init_for_image(struct ilo_state_surface *surf,
-                                 const struct ilo_dev *dev,
-                                 const struct ilo_state_surface_image_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(surf, sizeof(*surf)));
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      ret &= surface_set_gen7_image_SURFACE_STATE(surf, dev, info);
-   else
-      ret &= surface_set_gen6_image_SURFACE_STATE(surf, dev, info);
-
-   surf->vma = info->vma;
-   surf->aux_vma = info->aux_vma;
-
-   surf->is_integer = info->is_integer;
-   surf->readonly = info->readonly;
-   surf->scanout = info->img->scanout;
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_surface_set_scs(struct ilo_state_surface *surf,
-                          const struct ilo_dev *dev,
-                          enum gen_surface_scs rgba[4])
-{
-   const uint32_t scs = GEN_SHIFT32(rgba[0], GEN75_SURFACE_DW7_SCS_R) |
-                        GEN_SHIFT32(rgba[1], GEN75_SURFACE_DW7_SCS_G) |
-                        GEN_SHIFT32(rgba[2], GEN75_SURFACE_DW7_SCS_B) |
-                        GEN_SHIFT32(rgba[3], GEN75_SURFACE_DW7_SCS_A);
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(ilo_dev_gen(dev) >= ILO_GEN(7.5));
-
-   surf->surface[7] = (surf->surface[7] & ~GEN75_SURFACE_DW7_SCS__MASK) | scs;
-
-   return true;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_surface.h b/src/gallium/drivers/ilo/core/ilo_state_surface.h
deleted file mode 100644 (file)
index e78c7c9..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_SURFACE_H
-#define ILO_STATE_SURFACE_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-enum ilo_state_surface_access {
-   ILO_STATE_SURFACE_ACCESS_SAMPLER,      /* sampling engine surfaces */
-   ILO_STATE_SURFACE_ACCESS_DP_RENDER,    /* render target surfaces */
-   ILO_STATE_SURFACE_ACCESS_DP_TYPED,     /* typed surfaces */
-   ILO_STATE_SURFACE_ACCESS_DP_UNTYPED,   /* untyped surfaces */
-   ILO_STATE_SURFACE_ACCESS_DP_DATA,
-   ILO_STATE_SURFACE_ACCESS_DP_SVB,
-};
-
-struct ilo_vma;
-struct ilo_image;
-
-struct ilo_state_surface_buffer_info {
-   const struct ilo_vma *vma;
-   uint32_t offset;
-   uint32_t size;
-
-   enum ilo_state_surface_access access;
-
-   /* format_size may be less than, equal to, or greater than struct_size */
-   enum gen_surface_format format;
-   uint8_t format_size;
-
-   bool readonly;
-   uint16_t struct_size;
-};
-
-struct ilo_state_surface_image_info {
-   const struct ilo_image *img;
-   uint8_t level_base;
-   uint8_t level_count;
-   uint16_t slice_base;
-   uint16_t slice_count;
-
-   const struct ilo_vma *vma;
-   const struct ilo_vma *aux_vma;
-
-   enum ilo_state_surface_access access;
-
-   enum gen_surface_type type;
-
-   enum gen_surface_format format;
-   bool is_integer;
-
-   bool readonly;
-   bool is_array;
-};
-
-struct ilo_state_surface {
-   uint32_t surface[13];
-
-   const struct ilo_vma *vma;
-   const struct ilo_vma *aux_vma;
-
-   enum gen_surface_type type;
-   uint8_t min_lod;
-   uint8_t mip_count;
-   bool is_integer;
-
-   bool readonly;
-   bool scanout;
-};
-
-bool
-ilo_state_surface_valid_format(const struct ilo_dev *dev,
-                               enum ilo_state_surface_access access,
-                               enum gen_surface_format format);
-
-uint32_t
-ilo_state_surface_buffer_size(const struct ilo_dev *dev,
-                              enum ilo_state_surface_access access,
-                              uint32_t size, uint32_t *alignment);
-
-bool
-ilo_state_surface_init_for_null(struct ilo_state_surface *surf,
-                                const struct ilo_dev *dev);
-
-bool
-ilo_state_surface_init_for_buffer(struct ilo_state_surface *surf,
-                                  const struct ilo_dev *dev,
-                                  const struct ilo_state_surface_buffer_info *info);
-
-bool
-ilo_state_surface_init_for_image(struct ilo_state_surface *surf,
-                                 const struct ilo_dev *dev,
-                                 const struct ilo_state_surface_image_info *info);
-
-bool
-ilo_state_surface_set_scs(struct ilo_state_surface *surf,
-                          const struct ilo_dev *dev,
-                          enum gen_surface_scs rgba[4]);
-
-#endif /* ILO_STATE_SURFACE_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_surface_format.c b/src/gallium/drivers/ilo/core/ilo_state_surface_format.c
deleted file mode 100644 (file)
index a40c1b8..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h"
-#include "ilo_state_surface.h"
-
-static bool
-surface_valid_sampler_format(const struct ilo_dev *dev,
-                             enum ilo_state_surface_access access,
-                             enum gen_surface_format format)
-{
-   /*
-    * This table is based on:
-    *
-    *  - the Sandy Bridge PRM, volume 4 part 1, page 88-97
-    *  - the Ivy Bridge PRM, volume 4 part 1, page 84-87
-    */
-   static const struct sampler_cap {
-      int sampling;
-      int filtering;
-      int shadow_map;
-      int chroma_key;
-   } caps[] = {
-#define CAP(sampling, filtering, shadow_map, chroma_key) \
-      { ILO_GEN(sampling), ILO_GEN(filtering), ILO_GEN(shadow_map), ILO_GEN(chroma_key) }
-      [GEN6_FORMAT_R32G32B32A32_FLOAT]       = CAP(  1,   5,   0,   0),
-      [GEN6_FORMAT_R32G32B32A32_SINT]        = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R32G32B32A32_UINT]        = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R32G32B32X32_FLOAT]       = CAP(  1,   5,   0,   0),
-      [GEN6_FORMAT_R32G32B32_FLOAT]          = CAP(  1,   5,   0,   0),
-      [GEN6_FORMAT_R32G32B32_SINT]           = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R32G32B32_UINT]           = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R16G16B16A16_UNORM]       = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R16G16B16A16_SNORM]       = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R16G16B16A16_SINT]        = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R16G16B16A16_UINT]        = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R16G16B16A16_FLOAT]       = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R32G32_FLOAT]             = CAP(  1,   5,   0,   0),
-      [GEN6_FORMAT_R32G32_SINT]              = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R32G32_UINT]              = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R32_FLOAT_X8X24_TYPELESS] = CAP(  1,   5,   1,   0),
-      [GEN6_FORMAT_X32_TYPELESS_G8X24_UINT]  = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_L32A32_FLOAT]             = CAP(  1,   5,   0,   0),
-      [GEN6_FORMAT_R16G16B16X16_UNORM]       = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R16G16B16X16_FLOAT]       = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_A32X32_FLOAT]             = CAP(  1,   5,   0,   0),
-      [GEN6_FORMAT_L32X32_FLOAT]             = CAP(  1,   5,   0,   0),
-      [GEN6_FORMAT_I32X32_FLOAT]             = CAP(  1,   5,   0,   0),
-      [GEN6_FORMAT_B8G8R8A8_UNORM]           = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_B8G8R8A8_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R10G10B10A2_UNORM]        = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R10G10B10A2_UNORM_SRGB]   = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R10G10B10A2_UINT]         = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R10G10B10_SNORM_A2_UNORM] = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8G8B8A8_UNORM]           = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8G8B8A8_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8G8B8A8_SNORM]           = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8G8B8A8_SINT]            = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R8G8B8A8_UINT]            = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R16G16_UNORM]             = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R16G16_SNORM]             = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R16G16_SINT]              = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R16G16_UINT]              = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R16G16_FLOAT]             = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_B10G10R10A2_UNORM]        = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_B10G10R10A2_UNORM_SRGB]   = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R11G11B10_FLOAT]          = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R32_SINT]                 = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R32_UINT]                 = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R32_FLOAT]                = CAP(  1,   5,   1,   0),
-      [GEN6_FORMAT_R24_UNORM_X8_TYPELESS]    = CAP(  1,   5,   1,   0),
-      [GEN6_FORMAT_X24_TYPELESS_G8_UINT]     = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_L16A16_UNORM]             = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_I24X8_UNORM]              = CAP(  1,   5,   1,   0),
-      [GEN6_FORMAT_L24X8_UNORM]              = CAP(  1,   5,   1,   0),
-      [GEN6_FORMAT_A24X8_UNORM]              = CAP(  1,   5,   1,   0),
-      [GEN6_FORMAT_I32_FLOAT]                = CAP(  1,   5,   1,   0),
-      [GEN6_FORMAT_L32_FLOAT]                = CAP(  1,   5,   1,   0),
-      [GEN6_FORMAT_A32_FLOAT]                = CAP(  1,   5,   1,   0),
-      [GEN6_FORMAT_B8G8R8X8_UNORM]           = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_B8G8R8X8_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8G8B8X8_UNORM]           = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8G8B8X8_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R9G9B9E5_SHAREDEXP]       = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_B10G10R10X2_UNORM]        = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_L16A16_FLOAT]             = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_B5G6R5_UNORM]             = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_B5G6R5_UNORM_SRGB]        = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_B5G5R5A1_UNORM]           = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_B5G5R5A1_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_B4G4R4A4_UNORM]           = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_B4G4R4A4_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8G8_UNORM]               = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8G8_SNORM]               = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_R8G8_SINT]                = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R8G8_UINT]                = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R16_UNORM]                = CAP(  1,   1,   1,   0),
-      [GEN6_FORMAT_R16_SNORM]                = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R16_SINT]                 = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R16_UINT]                 = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R16_FLOAT]                = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_A8P8_UNORM_PALETTE0]      = CAP(  5,   5,   0,   0),
-      [GEN6_FORMAT_A8P8_UNORM_PALETTE1]      = CAP(  5,   5,   0,   0),
-      [GEN6_FORMAT_I16_UNORM]                = CAP(  1,   1,   1,   0),
-      [GEN6_FORMAT_L16_UNORM]                = CAP(  1,   1,   1,   0),
-      [GEN6_FORMAT_A16_UNORM]                = CAP(  1,   1,   1,   0),
-      [GEN6_FORMAT_L8A8_UNORM]               = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_I16_FLOAT]                = CAP(  1,   1,   1,   0),
-      [GEN6_FORMAT_L16_FLOAT]                = CAP(  1,   1,   1,   0),
-      [GEN6_FORMAT_A16_FLOAT]                = CAP(  1,   1,   1,   0),
-      [GEN6_FORMAT_L8A8_UNORM_SRGB]          = CAP(4.5, 4.5,   0,   0),
-      [GEN6_FORMAT_R5G5_SNORM_B6_UNORM]      = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_P8A8_UNORM_PALETTE0]      = CAP(  5,   5,   0,   0),
-      [GEN6_FORMAT_P8A8_UNORM_PALETTE1]      = CAP(  5,   5,   0,   0),
-      [GEN6_FORMAT_R8_UNORM]                 = CAP(  1,   1,   0, 4.5),
-      [GEN6_FORMAT_R8_SNORM]                 = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8_SINT]                  = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_R8_UINT]                  = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_A8_UNORM]                 = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_I8_UNORM]                 = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_L8_UNORM]                 = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_P4A4_UNORM_PALETTE0]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_A4P4_UNORM_PALETTE0]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_P8_UNORM_PALETTE0]        = CAP(4.5, 4.5,   0,   0),
-      [GEN6_FORMAT_L8_UNORM_SRGB]            = CAP(4.5, 4.5,   0,   0),
-      [GEN6_FORMAT_P8_UNORM_PALETTE1]        = CAP(4.5, 4.5,   0,   0),
-      [GEN6_FORMAT_P4A4_UNORM_PALETTE1]      = CAP(4.5, 4.5,   0,   0),
-      [GEN6_FORMAT_A4P4_UNORM_PALETTE1]      = CAP(4.5, 4.5,   0,   0),
-      [GEN6_FORMAT_DXT1_RGB_SRGB]            = CAP(4.5, 4.5,   0,   0),
-      [GEN6_FORMAT_R1_UNORM]                 = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_YCRCB_NORMAL]             = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_YCRCB_SWAPUVY]            = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_P2_UNORM_PALETTE0]        = CAP(4.5, 4.5,   0,   0),
-      [GEN6_FORMAT_P2_UNORM_PALETTE1]        = CAP(4.5, 4.5,   0,   0),
-      [GEN6_FORMAT_BC1_UNORM]                = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_BC2_UNORM]                = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_BC3_UNORM]                = CAP(  1,   1,   0,   1),
-      [GEN6_FORMAT_BC4_UNORM]                = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_BC5_UNORM]                = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_BC1_UNORM_SRGB]           = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_BC2_UNORM_SRGB]           = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_BC3_UNORM_SRGB]           = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_MONO8]                    = CAP(  1,   0,   0,   0),
-      [GEN6_FORMAT_YCRCB_SWAPUV]             = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_YCRCB_SWAPY]              = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_DXT1_RGB]                 = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_FXT1]                     = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_BC4_SNORM]                = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_BC5_SNORM]                = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R16G16B16_FLOAT]          = CAP(  5,   5,   0,   0),
-      [GEN6_FORMAT_BC6H_SF16]                = CAP(  7,   7,   0,   0),
-      [GEN6_FORMAT_BC7_UNORM]                = CAP(  7,   7,   0,   0),
-      [GEN6_FORMAT_BC7_UNORM_SRGB]           = CAP(  7,   7,   0,   0),
-      [GEN6_FORMAT_BC6H_UF16]                = CAP(  7,   7,   0,   0),
-#undef CAP
-   };
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   return (format < ARRAY_SIZE(caps) && caps[format].sampling &&
-           ilo_dev_gen(dev) >= caps[format].sampling);
-}
-
-static bool
-surface_valid_dp_format(const struct ilo_dev *dev,
-                        enum ilo_state_surface_access access,
-                        enum gen_surface_format format)
-{
-   /*
-    * This table is based on:
-    *
-    *  - the Sandy Bridge PRM, volume 4 part 1, page 88-97
-    *  - the Ivy Bridge PRM, volume 4 part 1, page 172, 252-253, and 277-278
-    *  - the Haswell PRM, volume 7, page 262-264
-    */
-   static const struct dp_cap {
-      int rt_write;
-      int rt_write_blending;
-      int typed_write;
-      int media_color_processing;
-   } caps[] = {
-#define CAP(rt_write, rt_write_blending, typed_write, media_color_processing) \
-      { ILO_GEN(rt_write), ILO_GEN(rt_write_blending), ILO_GEN(typed_write), ILO_GEN(media_color_processing) }
-      [GEN6_FORMAT_R32G32B32A32_FLOAT]       = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_R32G32B32A32_SINT]        = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R32G32B32A32_UINT]        = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R16G16B16A16_UNORM]       = CAP(  1, 4.5,   7,   6),
-      [GEN6_FORMAT_R16G16B16A16_SNORM]       = CAP(  1,   6,   7,   0),
-      [GEN6_FORMAT_R16G16B16A16_SINT]        = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R16G16B16A16_UINT]        = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R16G16B16A16_FLOAT]       = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_R32G32_FLOAT]             = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_R32G32_SINT]              = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R32G32_UINT]              = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_B8G8R8A8_UNORM]           = CAP(  1,   1,   7,   6),
-      [GEN6_FORMAT_B8G8R8A8_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R10G10B10A2_UNORM]        = CAP(  1,   1,   7,   6),
-      [GEN6_FORMAT_R10G10B10A2_UNORM_SRGB]   = CAP(  0,   0,   0,   6),
-      [GEN6_FORMAT_R10G10B10A2_UINT]         = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R8G8B8A8_UNORM]           = CAP(  1,   1,   7,   6),
-      [GEN6_FORMAT_R8G8B8A8_UNORM_SRGB]      = CAP(  1,   1,   0,   6),
-      [GEN6_FORMAT_R8G8B8A8_SNORM]           = CAP(  1,   6,   7,   0),
-      [GEN6_FORMAT_R8G8B8A8_SINT]            = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R8G8B8A8_UINT]            = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R16G16_UNORM]             = CAP(  1, 4.5,   7,   0),
-      [GEN6_FORMAT_R16G16_SNORM]             = CAP(  1,   6,   7,   0),
-      [GEN6_FORMAT_R16G16_SINT]              = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R16G16_UINT]              = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R16G16_FLOAT]             = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_B10G10R10A2_UNORM]        = CAP(  1,   1,   7,   6),
-      [GEN6_FORMAT_B10G10R10A2_UNORM_SRGB]   = CAP(  1,   1,   0,   6),
-      [GEN6_FORMAT_R11G11B10_FLOAT]          = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_R32_SINT]                 = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R32_UINT]                 = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R32_FLOAT]                = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_B8G8R8X8_UNORM]           = CAP(  0,   0,   0,   6),
-      [GEN6_FORMAT_B5G6R5_UNORM]             = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_B5G6R5_UNORM_SRGB]        = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_B5G5R5A1_UNORM]           = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_B5G5R5A1_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_B4G4R4A4_UNORM]           = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_B4G4R4A4_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8G8_UNORM]               = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_R8G8_SNORM]               = CAP(  1,   6,   7,   0),
-      [GEN6_FORMAT_R8G8_SINT]                = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R8G8_UINT]                = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R16_UNORM]                = CAP(  1, 4.5,   7,   7),
-      [GEN6_FORMAT_R16_SNORM]                = CAP(  1,   6,   7,   0),
-      [GEN6_FORMAT_R16_SINT]                 = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R16_UINT]                 = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R16_FLOAT]                = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_B5G5R5X1_UNORM]           = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_B5G5R5X1_UNORM_SRGB]      = CAP(  1,   1,   0,   0),
-      [GEN6_FORMAT_R8_UNORM]                 = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_R8_SNORM]                 = CAP(  1,   6,   7,   0),
-      [GEN6_FORMAT_R8_SINT]                  = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_R8_UINT]                  = CAP(  1,   0,   7,   0),
-      [GEN6_FORMAT_A8_UNORM]                 = CAP(  1,   1,   7,   0),
-      [GEN6_FORMAT_YCRCB_NORMAL]             = CAP(  1,   0,   0,   6),
-      [GEN6_FORMAT_YCRCB_SWAPUVY]            = CAP(  1,   0,   0,   6),
-      [GEN6_FORMAT_YCRCB_SWAPUV]             = CAP(  1,   0,   0,   6),
-      [GEN6_FORMAT_YCRCB_SWAPY]              = CAP(  1,   0,   0,   6),
-#undef CAP
-   };
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (format >= ARRAY_SIZE(caps))
-      return false;
-
-   switch (access) {
-   case ILO_STATE_SURFACE_ACCESS_DP_RENDER:
-      return (caps[format].rt_write &&
-              ilo_dev_gen(dev) >= caps[format].rt_write);
-   case ILO_STATE_SURFACE_ACCESS_DP_TYPED:
-      return (caps[format].typed_write &&
-              ilo_dev_gen(dev) >= caps[format].typed_write);
-   case ILO_STATE_SURFACE_ACCESS_DP_UNTYPED:
-      return (format == GEN6_FORMAT_RAW);
-   case ILO_STATE_SURFACE_ACCESS_DP_DATA:
-      /* ignored, but can it be raw? */
-      assert(format != GEN6_FORMAT_RAW);
-      return true;
-   default:
-      return false;
-   }
-}
-
-static bool
-surface_valid_svb_format(const struct ilo_dev *dev,
-                         enum gen_surface_format format)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * This table is based on:
-    *
-    *  - the Sandy Bridge PRM, volume 4 part 1, page 88-97
-    *  - the Ivy Bridge PRM, volume 2 part 1, page 195
-    *  - the Haswell PRM, volume 7, page 535
-    */
-   switch (format) {
-   case GEN6_FORMAT_R32G32B32A32_FLOAT:
-   case GEN6_FORMAT_R32G32B32A32_SINT:
-   case GEN6_FORMAT_R32G32B32A32_UINT:
-   case GEN6_FORMAT_R32G32B32_FLOAT:
-   case GEN6_FORMAT_R32G32B32_SINT:
-   case GEN6_FORMAT_R32G32B32_UINT:
-   case GEN6_FORMAT_R32G32_FLOAT:
-   case GEN6_FORMAT_R32G32_SINT:
-   case GEN6_FORMAT_R32G32_UINT:
-   case GEN6_FORMAT_R32_SINT:
-   case GEN6_FORMAT_R32_UINT:
-   case GEN6_FORMAT_R32_FLOAT:
-      return true;
-   default:
-      return false;
-   }
-}
-
-bool
-ilo_state_surface_valid_format(const struct ilo_dev *dev,
-                               enum ilo_state_surface_access access,
-                               enum gen_surface_format format)
-{
-   bool valid;
-
-   switch (access) {
-   case ILO_STATE_SURFACE_ACCESS_SAMPLER:
-      valid = surface_valid_sampler_format(dev, access, format);
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_RENDER:
-   case ILO_STATE_SURFACE_ACCESS_DP_TYPED:
-   case ILO_STATE_SURFACE_ACCESS_DP_UNTYPED:
-   case ILO_STATE_SURFACE_ACCESS_DP_DATA:
-      valid = surface_valid_dp_format(dev, access, format);
-      break;
-   case ILO_STATE_SURFACE_ACCESS_DP_SVB:
-      valid = surface_valid_svb_format(dev, format);
-      break;
-   default:
-      valid = false;
-      break;
-   }
-
-   return valid;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_urb.c b/src/gallium/drivers/ilo/core/ilo_state_urb.c
deleted file mode 100644 (file)
index cbd150c..0000000
+++ /dev/null
@@ -1,769 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_state_urb.h"
-
-struct urb_configuration {
-   uint8_t vs_pcb_alloc_kb;
-   uint8_t hs_pcb_alloc_kb;
-   uint8_t ds_pcb_alloc_kb;
-   uint8_t gs_pcb_alloc_kb;
-   uint8_t ps_pcb_alloc_kb;
-
-   uint8_t urb_offset_8kb;
-
-   uint8_t vs_urb_alloc_8kb;
-   uint8_t hs_urb_alloc_8kb;
-   uint8_t ds_urb_alloc_8kb;
-   uint8_t gs_urb_alloc_8kb;
-
-   uint8_t vs_entry_rows;
-   uint8_t hs_entry_rows;
-   uint8_t ds_entry_rows;
-   uint8_t gs_entry_rows;
-
-   int vs_entry_count;
-   int hs_entry_count;
-   int ds_entry_count;
-   int gs_entry_count;
-};
-
-static void
-urb_alloc_gen7_pcb(const struct ilo_dev *dev,
-                   const struct ilo_state_urb_info *info,
-                   struct urb_configuration *conf)
-{
-   /*
-    * From the Haswell PRM, volume 2b, page 940:
-    *
-    *     "[0,16] (0KB - 16KB) Increments of 1KB DevHSW:GT1, DevHSW:GT2
-    *      [0,32] (0KB - 32KB) Increments of 2KB DevHSW:GT3"
-    */
-   const uint8_t increment_kb =
-      (ilo_dev_gen(dev) >= ILO_GEN(8) ||
-       (ilo_dev_gen(dev) == ILO_GEN(7.5) && dev->gt == 3)) ? 2 : 1;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   /*
-    * Keep the strategy simple as we do not know the workloads and how
-    * expensive it is to change the configuration frequently.
-    */
-   if (info->hs_const_data || info->ds_const_data) {
-      conf->vs_pcb_alloc_kb = increment_kb * 4;
-      conf->hs_pcb_alloc_kb = increment_kb * 3;
-      conf->ds_pcb_alloc_kb = increment_kb * 3;
-      conf->gs_pcb_alloc_kb = increment_kb * 3;
-      conf->ps_pcb_alloc_kb = increment_kb * 3;
-   } else if (info->gs_const_data) {
-      conf->vs_pcb_alloc_kb = increment_kb * 6;
-      conf->gs_pcb_alloc_kb = increment_kb * 5;
-      conf->ps_pcb_alloc_kb = increment_kb * 5;
-   } else {
-      conf->vs_pcb_alloc_kb = increment_kb * 8;
-      conf->ps_pcb_alloc_kb = increment_kb * 8;
-   }
-
-   conf->urb_offset_8kb = increment_kb * 16 / 8;
-}
-
-static void
-urb_alloc_gen6_urb(const struct ilo_dev *dev,
-                   const struct ilo_state_urb_info *info,
-                   struct urb_configuration *conf)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 34:
-    *
-    *     "(VS URB Starting Address) Offset from the start of the URB memory
-    *      where VS starts its allocation, specified in multiples of 8 KB."
-    *
-    * Same for other stages.
-    */
-   const int space_avail_8kb = dev->urb_size / 8192 - conf->urb_offset_8kb;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 173:
-    *
-    *     "Programming Note: If the GS stage is enabled, software must always
-    *      allocate at least one GS URB Entry. This is true even if the GS
-    *      thread never needs to output vertices to the urb, e.g., when only
-    *      performing stream output. This is an artifact of the need to pass
-    *      the GS thread an initial destination URB handle."
-    */
-   const bool force_gs_alloc =
-      (ilo_dev_gen(dev) == ILO_GEN(6) && info->gs_enable);
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (info->hs_entry_size || info->ds_entry_size) {
-      conf->vs_urb_alloc_8kb = space_avail_8kb / 4;
-      conf->hs_urb_alloc_8kb = space_avail_8kb / 4;
-      conf->ds_urb_alloc_8kb = space_avail_8kb / 4;
-      conf->gs_urb_alloc_8kb = space_avail_8kb / 4;
-
-      if (space_avail_8kb % 4) {
-         assert(space_avail_8kb % 2 == 0);
-         conf->vs_urb_alloc_8kb++;
-         conf->gs_urb_alloc_8kb++;
-      }
-   } else if (info->gs_entry_size || force_gs_alloc) {
-      assert(space_avail_8kb % 2 == 0);
-      conf->vs_urb_alloc_8kb = space_avail_8kb / 2;
-      conf->gs_urb_alloc_8kb = space_avail_8kb / 2;
-   } else {
-      conf->vs_urb_alloc_8kb = space_avail_8kb;
-   }
-}
-
-static bool
-urb_init_gen6_vs_entry(const struct ilo_dev *dev,
-                       const struct ilo_state_urb_info *info,
-                       struct urb_configuration *conf)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 28:
-    *
-    *     "(VS URB Entry Allocation Size)
-    *      Range [0,4] = [1,5] 1024-bit URB rows"
-    *
-    *     "(VS Number of URB Entries)
-    *      Range [24,256] in multiples of 4
-    *            [24, 128] in multiples of 4[DevSNBGT1]"
-    */
-   const int max_entry_count = (dev->gt == 2) ? 256 : 252;
-   const int row_size = 1024 / 8;
-   int row_count, entry_count;
-   int entry_size;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   /* VE and VS share the same VUE for each vertex */
-   entry_size = info->vs_entry_size;
-   if (entry_size < info->ve_entry_size)
-      entry_size = info->ve_entry_size;
-
-   row_count = (entry_size + row_size - 1) / row_size;
-   if (row_count > 5)
-      return false;
-   else if (!row_count)
-      row_count++;
-
-   entry_count = conf->vs_urb_alloc_8kb * 8192 / (row_size * row_count);
-   if (entry_count > max_entry_count)
-      entry_count = max_entry_count;
-   entry_count &= ~3;
-   assert(entry_count >= 24);
-
-   conf->vs_entry_rows = row_count;
-   conf->vs_entry_count = entry_count;
-
-   return true;
-}
-
-static bool
-urb_init_gen6_gs_entry(const struct ilo_dev *dev,
-                       const struct ilo_state_urb_info *info,
-                       struct urb_configuration *conf)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 29:
-    *
-    *     "(GS Number of URB Entries)
-    *      Range [0,256] in multiples of 4
-    *            [0, 254] in multiples of 4[DevSNBGT1]"
-    *
-    *     "(GS URB Entry Allocation Size)
-    *      Range [0,4] = [1,5] 1024-bit URB rows"
-    */
-   const int max_entry_count = (dev->gt == 2) ? 256 : 252;
-   const int row_size = 1024 / 8;
-   int row_count, entry_count;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   row_count = (info->gs_entry_size + row_size - 1) / row_size;
-   if (row_count > 5)
-      return false;
-   else if (!row_count)
-      row_count++;
-
-   entry_count = conf->gs_urb_alloc_8kb * 8192 / (row_size * row_count);
-   if (entry_count > max_entry_count)
-      entry_count = max_entry_count;
-   entry_count &= ~3;
-
-   conf->gs_entry_rows = row_count;
-   conf->gs_entry_count = entry_count;
-
-   return true;
-}
-
-static bool
-urb_init_gen7_vs_entry(const struct ilo_dev *dev,
-                       const struct ilo_state_urb_info *info,
-                       struct urb_configuration *conf)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 34-35:
-    *
-    *     "VS URB Entry Allocation Size equal to 4(5 512-bit URB rows) may
-    *      cause performance to decrease due to banking in the URB. Element
-    *      sizes of 16 to 20 should be programmed with six 512-bit URB rows."
-    *
-    *     "(VS URB Entry Allocation Size)
-    *      Format: U9-1 count of 512-bit units"
-    *
-    *     "(VS Number of URB Entries)
-    *      [32,704]
-    *      [32,512]
-    *
-    *      Programming Restriction: VS Number of URB Entries must be divisible
-    *      by 8 if the VS URB Entry Allocation Size is less than 9 512-bit URB
-    *      entries."2:0" = reserved "000b""
-    *
-    * From the Haswell PRM, volume 2b, page 847:
-    *
-    *     "(VS Number of URB Entries)
-    *      [64,1664] DevHSW:GT3
-    *      [64,1664] DevHSW:GT2
-    *      [32,640]  DevHSW:GT1"
-    */
-   const int row_size = 512 / 8;
-   int row_count, entry_count;
-   int entry_size;
-   int max_entry_count, min_entry_count;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 35:
-    *
-    *     "Programming Restriction: As the VS URB entry serves as both the
-    *      per-vertex input and output of the VS shader, the VS URB Allocation
-    *      Size must be sized to the maximum of the vertex input and output
-    *      structures."
-    *
-    * From the Ivy Bridge PRM, volume 2 part 1, page 42:
-    *
-    *     "If the VS function is enabled, the VF-written VUEs are not required
-    *      to have Vertex Headers, as the VS-incoming vertices are guaranteed
-    *      to be consumed by the VS (i.e., the VS thread is responsible for
-    *      overwriting the input vertex data)."
-    *
-    * VE and VS share the same VUE for each vertex.
-    */
-   entry_size = info->vs_entry_size;
-   if (entry_size < info->ve_entry_size)
-      entry_size = info->ve_entry_size;
-
-   row_count = (entry_size + row_size - 1) / row_size;
-   if (row_count == 5 || !row_count)
-      row_count++;
-
-   entry_count = conf->vs_urb_alloc_8kb * 8192 / (row_size * row_count);
-   if (row_count < 9)
-      entry_count &= ~7;
-
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-   case ILO_GEN(7.5):
-      max_entry_count = (dev->gt >= 2) ? 1664 : 640;
-      min_entry_count = (dev->gt >= 2) ? 64 : 32;
-      break;
-   case ILO_GEN(7):
-      max_entry_count = (dev->gt == 2) ? 704 : 512;
-      min_entry_count = 32;
-      break;
-   default:
-      assert(!"unexpected gen");
-      return false;
-      break;
-   }
-
-   if (entry_count > max_entry_count)
-      entry_count = max_entry_count;
-   else if (entry_count < min_entry_count)
-      return false;
-
-   conf->vs_entry_rows = row_count;
-   conf->vs_entry_count = entry_count;
-
-   return true;
-}
-
-static bool
-urb_init_gen7_hs_entry(const struct ilo_dev *dev,
-                       const struct ilo_state_urb_info *info,
-                       struct urb_configuration *conf)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 37:
-    *
-    *     "HS Number of URB Entries must be divisible by 8 if the HS URB Entry
-    *      Allocation Size is less than 9 512-bit URB
-    *      entries."2:0" = reserved "000"
-    *
-    *      [0,64]
-    *      [0,32]"
-    *
-    * From the Haswell PRM, volume 2b, page 849:
-    *
-    *     "(HS Number of URB Entries)
-    *      [0,128] DevHSW:GT2
-    *      [0,64]  DevHSW:GT1"
-    */
-   const int row_size = 512 / 8;
-   int row_count, entry_count;
-   int max_entry_count;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   row_count = (info->hs_entry_size + row_size - 1) / row_size;
-   if (!row_count)
-      row_count++;
-
-   entry_count = conf->hs_urb_alloc_8kb * 8192 / (row_size * row_count);
-   if (row_count < 9)
-      entry_count &= ~7;
-
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-   case ILO_GEN(7.5):
-      max_entry_count = (dev->gt >= 2) ? 128 : 64;
-      break;
-   case ILO_GEN(7):
-      max_entry_count = (dev->gt == 2) ? 64 : 32;
-      break;
-   default:
-      assert(!"unexpected gen");
-      return false;
-      break;
-   }
-
-   if (entry_count > max_entry_count)
-      entry_count = max_entry_count;
-   else if (info->hs_entry_size && !entry_count)
-      return false;
-
-   conf->hs_entry_rows = row_count;
-   conf->hs_entry_count = entry_count;
-
-   return true;
-}
-
-static bool
-urb_init_gen7_ds_entry(const struct ilo_dev *dev,
-                       const struct ilo_state_urb_info *info,
-                       struct urb_configuration *conf)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 38:
-    *
-    *     "(DS URB Entry Allocation Size)
-    *      [0,9]"
-    *
-    *     "(DS Number of URB Entries) If Domain Shader Thread Dispatch is
-    *      Enabled then the minimum number handles that must be allocated is
-    *      138 URB entries.
-    *      "2:0" = reserved "000"
-    *
-    *      [0,448]
-    *      [0,288]
-    *
-    *      DS Number of URB Entries must be divisible by 8 if the DS URB Entry
-    *      Allocation Size is less than 9 512-bit URB entries.If Domain Shader
-    *      Thread Dispatch is Enabled then the minimum number of handles that
-    *      must be allocated is 10 URB entries."
-    *
-    * From the Haswell PRM, volume 2b, page 851:
-    *
-    *     "(DS Number of URB Entries)
-    *      [0,960] DevHSW:GT2
-    *      [0,384] DevHSW:GT1"
-    */
-   const int row_size = 512 / 8;
-   int row_count, entry_count;
-   int max_entry_count;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   row_count = (info->ds_entry_size + row_size - 1) / row_size;
-   if (row_count > 10)
-      return false;
-   else if (!row_count)
-      row_count++;
-
-   entry_count = conf->ds_urb_alloc_8kb * 8192 / (row_size * row_count);
-   if (row_count < 9)
-      entry_count &= ~7;
-
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-   case ILO_GEN(7.5):
-      max_entry_count = (dev->gt >= 2) ? 960 : 384;
-      break;
-   case ILO_GEN(7):
-      max_entry_count = (dev->gt == 2) ? 448 : 288;
-      break;
-   default:
-      assert(!"unexpected gen");
-      return false;
-      break;
-   }
-
-   if (entry_count > max_entry_count)
-      entry_count = max_entry_count;
-   else if (info->ds_entry_size && entry_count < 10)
-      return false;
-
-   conf->ds_entry_rows = row_count;
-   conf->ds_entry_count = entry_count;
-
-   return true;
-}
-
-static bool
-urb_init_gen7_gs_entry(const struct ilo_dev *dev,
-                       const struct ilo_state_urb_info *info,
-                       struct urb_configuration *conf)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 40:
-    *
-    *     "(GS Number of URB Entries) GS Number of URB Entries must be
-    *      divisible by 8 if the GS URB Entry Allocation Size is less than 9
-    *      512-bit URB entries.
-    *      "2:0" = reserved "000"
-    *
-    *      [0,320]
-    *      [0,192]"
-    *
-    * From the Ivy Bridge PRM, volume 2 part 1, page 171:
-    *
-    *     "(DUAL_INSTANCE and DUAL_OBJECT) The GS must be allocated at least
-    *      two URB handles or behavior is UNDEFINED."
-    *
-    * From the Haswell PRM, volume 2b, page 853:
-    *
-    *     "(GS Number of URB Entries)
-    *      [0,640] DevHSW:GT2
-    *      [0,256] DevHSW:GT1
-    *
-    *      Only if GS is disabled can this field be programmed to 0.  If GS is
-    *      enabled this field shall be programmed to a value greater than 0.
-    *      For GS Dispatch Mode "Single", this field shall be programmed to a
-    *      value greater than or equal to 1. For other GS Dispatch Modes,
-    *      refer to the definition of Dispatch Mode (3DSTATE_GS) for minimum
-    *      values of this field."
-    */
-   const int row_size = 512 / 8;
-   int row_count, entry_count;
-   int max_entry_count;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   row_count = (info->gs_entry_size + row_size - 1) / row_size;
-   if (!row_count)
-      row_count++;
-
-   entry_count = conf->gs_urb_alloc_8kb * 8192 / (row_size * row_count);
-   if (row_count < 9)
-      entry_count &= ~7;
-
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-   case ILO_GEN(7.5):
-      max_entry_count = (dev->gt >= 2) ? 640 : 256;
-      break;
-   case ILO_GEN(7):
-      max_entry_count = (dev->gt == 2) ? 320 : 192;
-      break;
-   default:
-      assert(!"unexpected gen");
-      return false;
-      break;
-   }
-
-   if (entry_count > max_entry_count)
-      entry_count = max_entry_count;
-   else if (info->gs_entry_size && entry_count < 2)
-      return false;
-
-   conf->gs_entry_rows = row_count;
-   conf->gs_entry_count = entry_count;
-
-   return true;
-}
-
-static bool
-urb_get_gen6_configuration(const struct ilo_dev *dev,
-                           const struct ilo_state_urb_info *info,
-                           struct urb_configuration *conf)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   memset(conf, 0, sizeof(*conf));
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      urb_alloc_gen7_pcb(dev, info, conf);
-
-   urb_alloc_gen6_urb(dev, info, conf);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      if (!urb_init_gen7_vs_entry(dev, info, conf) ||
-          !urb_init_gen7_hs_entry(dev, info, conf) ||
-          !urb_init_gen7_ds_entry(dev, info, conf) ||
-          !urb_init_gen7_gs_entry(dev, info, conf))
-         return false;
-   } else {
-      if (!urb_init_gen6_vs_entry(dev, info, conf) ||
-          !urb_init_gen6_gs_entry(dev, info, conf))
-         return false;
-   }
-
-   return true;
-}
-
-static bool
-urb_set_gen7_3dstate_push_constant_alloc(struct ilo_state_urb *urb,
-                                         const struct ilo_dev *dev,
-                                         const struct ilo_state_urb_info *info,
-                                         const struct urb_configuration *conf)
-{
-   uint32_t dw1[5];
-   uint8_t sizes_kb[5], offset_kb;
-   int i;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   sizes_kb[0] = conf->vs_pcb_alloc_kb;
-   sizes_kb[1] = conf->hs_pcb_alloc_kb;
-   sizes_kb[2] = conf->ds_pcb_alloc_kb;
-   sizes_kb[3] = conf->gs_pcb_alloc_kb;
-   sizes_kb[4] = conf->ps_pcb_alloc_kb;
-   offset_kb = 0;
-
-   for (i = 0; i < 5; i++) {
-      /* careful for the valid range of offsets */
-      if (sizes_kb[i]) {
-         dw1[i] = offset_kb << GEN7_PCB_ALLOC_DW1_OFFSET__SHIFT |
-                  sizes_kb[i] << GEN7_PCB_ALLOC_DW1_SIZE__SHIFT;
-         offset_kb += sizes_kb[i];
-      } else {
-         dw1[i] = 0;
-      }
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(urb->pcb) >= 5);
-   memcpy(urb->pcb, dw1, sizeof(dw1));
-
-   return true;
-}
-
-static bool
-urb_set_gen6_3DSTATE_URB(struct ilo_state_urb *urb,
-                         const struct ilo_dev *dev,
-                         const struct ilo_state_urb_info *info,
-                         const struct urb_configuration *conf)
-{
-   uint32_t dw1, dw2;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   assert(conf->vs_entry_rows && conf->gs_entry_rows);
-
-   dw1 = (conf->vs_entry_rows - 1) << GEN6_URB_DW1_VS_ENTRY_SIZE__SHIFT |
-         conf->vs_entry_count << GEN6_URB_DW1_VS_ENTRY_COUNT__SHIFT;
-   dw2 = conf->gs_entry_count << GEN6_URB_DW2_GS_ENTRY_COUNT__SHIFT |
-         (conf->gs_entry_rows - 1) << GEN6_URB_DW2_GS_ENTRY_SIZE__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(urb->urb) >= 2);
-   urb->urb[0] = dw1;
-   urb->urb[1] = dw2;
-
-   return true;
-}
-
-static bool
-urb_set_gen7_3dstate_urb(struct ilo_state_urb *urb,
-                         const struct ilo_dev *dev,
-                         const struct ilo_state_urb_info *info,
-                         const struct urb_configuration *conf)
-{
-   uint32_t dw1[4];
-   struct {
-      uint8_t alloc_8kb;
-      uint8_t entry_rows;
-      int entry_count;
-   } stages[4];
-   uint8_t offset_8kb;
-   int i;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   stages[0].alloc_8kb = conf->vs_urb_alloc_8kb;
-   stages[1].alloc_8kb = conf->hs_urb_alloc_8kb;
-   stages[2].alloc_8kb = conf->ds_urb_alloc_8kb;
-   stages[3].alloc_8kb = conf->gs_urb_alloc_8kb;
-
-   stages[0].entry_rows = conf->vs_entry_rows;
-   stages[1].entry_rows = conf->hs_entry_rows;
-   stages[2].entry_rows = conf->ds_entry_rows;
-   stages[3].entry_rows = conf->gs_entry_rows;
-
-   stages[0].entry_count = conf->vs_entry_count;
-   stages[1].entry_count = conf->hs_entry_count;
-   stages[2].entry_count = conf->ds_entry_count;
-   stages[3].entry_count = conf->gs_entry_count;
-
-   offset_8kb = conf->urb_offset_8kb;
-
-   for (i = 0; i < 4; i++) {
-      /* careful for the valid range of offsets */
-      if (stages[i].alloc_8kb) {
-         assert(stages[i].entry_rows);
-         dw1[i] =
-            offset_8kb << GEN7_URB_DW1_OFFSET__SHIFT |
-            (stages[i].entry_rows - 1) << GEN7_URB_DW1_ENTRY_SIZE__SHIFT |
-            stages[i].entry_count << GEN7_URB_DW1_ENTRY_COUNT__SHIFT;
-         offset_8kb += stages[i].alloc_8kb;
-      } else {
-         dw1[i] = 0;
-      }
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(urb->urb) >= 4);
-   memcpy(urb->urb, dw1, sizeof(dw1));
-
-   return true;
-}
-
-bool
-ilo_state_urb_init(struct ilo_state_urb *urb,
-                   const struct ilo_dev *dev,
-                   const struct ilo_state_urb_info *info)
-{
-   assert(ilo_is_zeroed(urb, sizeof(*urb)));
-   return ilo_state_urb_set_info(urb, dev, info);
-}
-
-bool
-ilo_state_urb_init_for_rectlist(struct ilo_state_urb *urb,
-                                const struct ilo_dev *dev,
-                                uint8_t vf_attr_count)
-{
-   struct ilo_state_urb_info info;
-
-   memset(&info, 0, sizeof(info));
-   info.ve_entry_size = sizeof(uint32_t) * 4 * vf_attr_count;
-
-   return ilo_state_urb_init(urb, dev, &info);
-}
-
-bool
-ilo_state_urb_set_info(struct ilo_state_urb *urb,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_urb_info *info)
-{
-   struct urb_configuration conf;
-   bool ret = true;
-
-   ret &= urb_get_gen6_configuration(dev, info, &conf);
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      ret &= urb_set_gen7_3dstate_push_constant_alloc(urb, dev, info, &conf);
-      ret &= urb_set_gen7_3dstate_urb(urb, dev, info, &conf);
-   } else {
-      ret &= urb_set_gen6_3DSTATE_URB(urb, dev, info, &conf);
-   }
-
-   assert(ret);
-
-   return ret;
-}
-
-void
-ilo_state_urb_full_delta(const struct ilo_state_urb *urb,
-                         const struct ilo_dev *dev,
-                         struct ilo_state_urb_delta *delta)
-{
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      delta->dirty = ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_VS |
-                     ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_HS |
-                     ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_DS |
-                     ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_GS |
-                     ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_PS |
-                     ILO_STATE_URB_3DSTATE_URB_VS |
-                     ILO_STATE_URB_3DSTATE_URB_HS |
-                     ILO_STATE_URB_3DSTATE_URB_DS |
-                     ILO_STATE_URB_3DSTATE_URB_GS;
-   } else {
-      delta->dirty = ILO_STATE_URB_3DSTATE_URB_VS |
-                     ILO_STATE_URB_3DSTATE_URB_GS;
-   }
-}
-
-void
-ilo_state_urb_get_delta(const struct ilo_state_urb *urb,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_urb *old,
-                        struct ilo_state_urb_delta *delta)
-{
-   delta->dirty = 0;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      if (memcmp(urb->pcb, old->pcb, sizeof(urb->pcb))) {
-         delta->dirty |= ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_VS |
-                         ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_HS |
-                         ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_DS |
-                         ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_GS |
-                         ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_PS;
-      }
-
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 34:
-       *
-       *     "3DSTATE_URB_HS, 3DSTATE_URB_DS, and 3DSTATE_URB_GS must also be
-       *      programmed in order for the programming of this state
-       *      (3DSTATE_URB_VS) to be valid."
-       *
-       * The same is true for the other three states.
-       */
-      if (memcmp(urb->urb, old->urb, sizeof(urb->urb))) {
-         delta->dirty |= ILO_STATE_URB_3DSTATE_URB_VS |
-                         ILO_STATE_URB_3DSTATE_URB_HS |
-                         ILO_STATE_URB_3DSTATE_URB_DS |
-                         ILO_STATE_URB_3DSTATE_URB_GS;
-      }
-   } else {
-      if (memcmp(urb->urb, old->urb, sizeof(uint32_t) * 2)) {
-         delta->dirty |= ILO_STATE_URB_3DSTATE_URB_VS |
-                         ILO_STATE_URB_3DSTATE_URB_GS;
-      }
-   }
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_urb.h b/src/gallium/drivers/ilo/core/ilo_state_urb.h
deleted file mode 100644 (file)
index 9522b3b..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_URB_H
-#define ILO_STATE_URB_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-enum ilo_state_urb_dirty_bits {
-   ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_VS = (1 << 0),
-   ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_HS = (1 << 1),
-   ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_DS = (1 << 2),
-   ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_GS = (1 << 3),
-   ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_PS = (1 << 4),
-   ILO_STATE_URB_3DSTATE_URB_VS                 = (1 << 5),
-   ILO_STATE_URB_3DSTATE_URB_HS                 = (1 << 6),
-   ILO_STATE_URB_3DSTATE_URB_DS                 = (1 << 7),
-   ILO_STATE_URB_3DSTATE_URB_GS                 = (1 << 8),
-};
-
-/**
- * URB entry allocation sizes and sizes of constant data extracted from PCBs
- * to threads.
- */
-struct ilo_state_urb_info {
-   bool gs_enable;
-
-   bool vs_const_data;
-   bool hs_const_data;
-   bool ds_const_data;
-   bool gs_const_data;
-   bool ps_const_data;
-
-   uint16_t ve_entry_size;
-   uint16_t vs_entry_size;
-   uint16_t hs_entry_size;
-   uint16_t ds_entry_size;
-   uint16_t gs_entry_size;
-};
-
-struct ilo_state_urb {
-   uint32_t pcb[5];
-   uint32_t urb[4];
-};
-
-struct ilo_state_urb_delta {
-   uint32_t dirty;
-};
-
-bool
-ilo_state_urb_init(struct ilo_state_urb *urb,
-                   const struct ilo_dev *dev,
-                   const struct ilo_state_urb_info *info);
-
-bool
-ilo_state_urb_init_for_rectlist(struct ilo_state_urb *urb,
-                                const struct ilo_dev *dev,
-                                uint8_t vf_attr_count);
-
-bool
-ilo_state_urb_set_info(struct ilo_state_urb *urb,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_urb_info *info);
-
-void
-ilo_state_urb_full_delta(const struct ilo_state_urb *urb,
-                         const struct ilo_dev *dev,
-                         struct ilo_state_urb_delta *delta);
-
-void
-ilo_state_urb_get_delta(const struct ilo_state_urb *urb,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_urb *old,
-                        struct ilo_state_urb_delta *delta);
-
-#endif /* ILO_STATE_URB_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_vf.c b/src/gallium/drivers/ilo/core/ilo_state_vf.c
deleted file mode 100644 (file)
index 8f091e2..0000000
+++ /dev/null
@@ -1,1000 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_vma.h"
-#include "ilo_state_vf.h"
-
-static bool
-vf_validate_gen6_elements(const struct ilo_dev *dev,
-                          const struct ilo_state_vf_info *info)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 95:
-    *
-    *     "(Source Element Offset (in bytes))
-    *      Format: U11
-    *      Range [0,2047"
-    *
-    * From the Haswell PRM, volume 2d, page 415:
-    *
-    *     "(Source Element Offset)
-    *      Format: U12 byte offset
-    *      ...
-    *      [0,4095]"
-    *
-    * From the Broadwell PRM, volume 2d, page 469:
-    *
-    *     "(Source Element Offset)
-    *      Format: U12 byte offset
-    *      ...
-    *      [0,2047]"
-    */
-   const uint16_t max_vertex_offset =
-      (ilo_dev_gen(dev) == ILO_GEN(7.5)) ? 4096 : 2048;
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(info->element_count <= ILO_STATE_VF_MAX_ELEMENT_COUNT);
-
-   for (i = 0; i < info->element_count; i++) {
-      const struct ilo_state_vf_element_info *elem = &info->elements[i];
-
-      assert(elem->buffer < ILO_STATE_VF_MAX_BUFFER_COUNT);
-      assert(elem->vertex_offset < max_vertex_offset);
-      assert(ilo_state_vf_valid_element_format(dev, elem->format));
-   }
-
-   return true;
-}
-
-static uint32_t
-get_gen6_component_controls(const struct ilo_dev *dev,
-                            enum gen_vf_component comp_x,
-                            enum gen_vf_component comp_y,
-                            enum gen_vf_component comp_z,
-                            enum gen_vf_component comp_w)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   return comp_x << GEN6_VE_DW1_COMP0__SHIFT |
-          comp_y << GEN6_VE_DW1_COMP1__SHIFT |
-          comp_z << GEN6_VE_DW1_COMP2__SHIFT |
-          comp_w << GEN6_VE_DW1_COMP3__SHIFT;
-}
-
-static bool
-get_gen6_edge_flag_format(const struct ilo_dev *dev,
-                          const struct ilo_state_vf_element_info *elem,
-                          enum gen_surface_format *format)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 94:
-    *
-    *     "The Source Element Format must be set to the UINT format."
-    *
-    * From the Haswell PRM, volume 2d, page 413:
-    *
-    *     "The SourceElementFormat needs to be a single-component format with
-    *      an element which has edge flag enabled."
-    */
-   if (elem->component_count != 1)
-      return false;
-
-   /* pick the format we like */
-   switch (elem->format_size) {
-   case 1:
-      *format = GEN6_FORMAT_R8_UINT;
-      break;
-   case 2:
-      *format = GEN6_FORMAT_R16_UINT;
-      break;
-   case 4:
-      *format = GEN6_FORMAT_R32_UINT;
-      break;
-   default:
-      return false;
-      break;
-   }
-
-   return true;
-}
-
-static bool
-vf_set_gen6_3DSTATE_VERTEX_ELEMENTS(struct ilo_state_vf *vf,
-                                    const struct ilo_dev *dev,
-                                    const struct ilo_state_vf_info *info)
-{
-   enum gen_surface_format edge_flag_format;
-   uint32_t dw0, dw1;
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!vf_validate_gen6_elements(dev, info))
-      return false;
-
-   for (i = 0; i < info->element_count; i++) {
-      const struct ilo_state_vf_element_info *elem = &info->elements[i];
-      enum gen_vf_component components[4] = {
-         GEN6_VFCOMP_STORE_0,
-         GEN6_VFCOMP_STORE_0,
-         GEN6_VFCOMP_STORE_0,
-         (elem->is_integer) ? GEN6_VFCOMP_STORE_1_INT :
-                              GEN6_VFCOMP_STORE_1_FP,
-      };
-
-      switch (elem->component_count) {
-      case 4: components[3] = GEN6_VFCOMP_STORE_SRC; /* fall through */
-      case 3: components[2] = GEN6_VFCOMP_STORE_SRC; /* fall through */
-      case 2: components[1] = GEN6_VFCOMP_STORE_SRC; /* fall through */
-      case 1: components[0] = GEN6_VFCOMP_STORE_SRC; break;
-      default:
-              assert(!"unexpected component count");
-              break;
-      }
-
-      dw0 = elem->buffer << GEN6_VE_DW0_VB_INDEX__SHIFT |
-            GEN6_VE_DW0_VALID |
-            elem->format << GEN6_VE_DW0_FORMAT__SHIFT |
-            elem->vertex_offset << GEN6_VE_DW0_VB_OFFSET__SHIFT;
-      dw1 = get_gen6_component_controls(dev,
-            components[0], components[1],
-            components[2], components[3]);
-
-      STATIC_ASSERT(ARRAY_SIZE(vf->user_ve[i]) >= 2);
-      vf->user_ve[i][0] = dw0;
-      vf->user_ve[i][1] = dw1;
-   }
-
-   vf->user_ve_count = i;
-
-   vf->edge_flag_supported = (i && get_gen6_edge_flag_format(dev,
-         &info->elements[i - 1], &edge_flag_format));
-   if (vf->edge_flag_supported) {
-      const struct ilo_state_vf_element_info *elem = &info->elements[i - 1];
-
-      /* without edge flag enable */
-      vf->last_user_ve[0][0] = dw0;
-      vf->last_user_ve[0][1] = dw1;
-
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 94:
-       *
-       *     "This bit (Edge Flag Enable) must only be ENABLED on the last
-       *      valid VERTEX_ELEMENT structure.
-       *
-       *      When set, Component 0 Control must be set to
-       *      VFCOMP_STORE_SRC, and Component 1-3 Control must be set to
-       *      VFCOMP_NOSTORE."
-       */
-      dw0 = elem->buffer << GEN6_VE_DW0_VB_INDEX__SHIFT |
-            GEN6_VE_DW0_VALID |
-            edge_flag_format << GEN6_VE_DW0_FORMAT__SHIFT |
-            GEN6_VE_DW0_EDGE_FLAG_ENABLE |
-            elem->vertex_offset << GEN6_VE_DW0_VB_OFFSET__SHIFT;
-      dw1 = get_gen6_component_controls(dev, GEN6_VFCOMP_STORE_SRC,
-            GEN6_VFCOMP_NOSTORE, GEN6_VFCOMP_NOSTORE, GEN6_VFCOMP_NOSTORE);
-
-      /* with edge flag enable */
-      vf->last_user_ve[1][0] = dw0;
-      vf->last_user_ve[1][1] = dw1;
-   }
-
-   return true;
-}
-
-static bool
-vf_set_gen6_vertex_buffer_state(struct ilo_state_vf *vf,
-                                const struct ilo_dev *dev,
-                                const struct ilo_state_vf_info *info)
-{
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 7.5);
-
-   memset(vf->vb_to_first_elem, -1, sizeof(vf->vb_to_first_elem));
-
-   for (i = 0; i < info->element_count; i++) {
-      const struct ilo_state_vf_element_info *elem = &info->elements[i];
-
-      STATIC_ASSERT(ARRAY_SIZE(vf->user_instancing[i]) >= 2);
-      /* instancing enable only */
-      vf->user_instancing[i][0] = (elem->instancing_enable) ?
-         GEN6_VB_DW0_ACCESS_INSTANCEDATA :
-         GEN6_VB_DW0_ACCESS_VERTEXDATA;
-      vf->user_instancing[i][1] = elem->instancing_step_rate;
-
-      /*
-       * Instancing is per VB, not per VE, before Gen8.  Set up a VB-to-VE
-       * mapping as well.
-       */
-      if (vf->vb_to_first_elem[elem->buffer] < 0) {
-         vf->vb_to_first_elem[elem->buffer] = i;
-      } else {
-         const struct ilo_state_vf_element_info *first =
-            &info->elements[vf->vb_to_first_elem[elem->buffer]];
-
-         assert(elem->instancing_enable == first->instancing_enable &&
-                elem->instancing_step_rate == first->instancing_step_rate);
-      }
-   }
-
-   return true;
-}
-
-static bool
-vf_set_gen8_3DSTATE_VF_INSTANCING(struct ilo_state_vf *vf,
-                                  const struct ilo_dev *dev,
-                                  const struct ilo_state_vf_info *info)
-{
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   for (i = 0; i < info->element_count; i++) {
-      const struct ilo_state_vf_element_info *elem = &info->elements[i];
-
-      STATIC_ASSERT(ARRAY_SIZE(vf->user_instancing[i]) >= 2);
-      vf->user_instancing[i][0] = (elem->instancing_enable) ?
-         GEN8_INSTANCING_DW1_ENABLE : 0;
-      vf->user_instancing[i][1] = elem->instancing_step_rate;
-   }
-
-   return true;
-}
-
-static uint32_t
-get_gen6_component_zeros(const struct ilo_dev *dev)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   return get_gen6_component_controls(dev,
-         GEN6_VFCOMP_STORE_0,
-         GEN6_VFCOMP_STORE_0,
-         GEN6_VFCOMP_STORE_0,
-         GEN6_VFCOMP_STORE_0);
-}
-
-static uint32_t
-get_gen6_component_ids(const struct ilo_dev *dev,
-                       bool vertexid, bool instanceid)
-{
-   ILO_DEV_ASSERT(dev, 6, 7.5);
-
-   return get_gen6_component_controls(dev,
-      (vertexid) ? GEN6_VFCOMP_STORE_VID : GEN6_VFCOMP_STORE_0,
-      (instanceid) ? GEN6_VFCOMP_STORE_IID : GEN6_VFCOMP_STORE_0,
-      GEN6_VFCOMP_STORE_0,
-      GEN6_VFCOMP_STORE_0);
-}
-
-static bool
-vf_params_set_gen6_internal_ve(struct ilo_state_vf *vf,
-                               const struct ilo_dev *dev,
-                               const struct ilo_state_vf_params_info *params,
-                               uint8_t user_ve_count)
-{
-   const bool prepend_ids =
-      (params->prepend_vertexid || params->prepend_instanceid);
-   uint8_t internal_ve_count = 0, i;
-   uint32_t dw1[2];
-
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 92:
-    *
-    *     "- At least one VERTEX_ELEMENT_STATE structure must be included.
-    *
-    *      - Inclusion of partial VERTEX_ELEMENT_STATE structures is
-    *        UNDEFINED.
-    *
-    *      - SW must ensure that at least one vertex element is defined prior
-    *        to issuing a 3DPRIMTIVE command, or operation is UNDEFINED.
-    *
-    *      - There are no "holes" allowed in the destination vertex: NOSTORE
-    *        components must be overwritten by subsequent components unless
-    *        they are the trailing DWords of the vertex.  Software must
-    *        explicitly chose some value (probably 0) to be written into
-    *        DWords that would otherwise be "holes"."
-    *
-    *      - ...
-    *
-    *      - [DevILK+] Element[0] must be valid."
-    */
-   if (params->prepend_zeros || (!user_ve_count && !prepend_ids))
-      dw1[internal_ve_count++] = get_gen6_component_zeros(dev);
-
-   if (prepend_ids) {
-      if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-         /* placeholder for 3DSTATE_VF_SGVS */
-         dw1[internal_ve_count++] = get_gen6_component_zeros(dev);
-      } else {
-         dw1[internal_ve_count++] = get_gen6_component_ids(dev,
-               params->prepend_vertexid, params->prepend_instanceid);
-      }
-   }
-
-   for (i = 0; i < internal_ve_count; i++) {
-      STATIC_ASSERT(ARRAY_SIZE(vf->internal_ve[i]) >= 2);
-      vf->internal_ve[i][0] = GEN6_VE_DW0_VALID;
-      vf->internal_ve[i][1] = dw1[i];
-   }
-
-   vf->internal_ve_count = internal_ve_count;
-
-   return true;
-}
-
-static bool
-vf_params_set_gen8_3DSTATE_VF_SGVS(struct ilo_state_vf *vf,
-                                   const struct ilo_dev *dev,
-                                   const struct ilo_state_vf_params_info *params)
-{
-   const uint8_t attr = (params->prepend_zeros) ? 1 : 0;
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   dw1 = 0;
-
-   if (params->prepend_instanceid) {
-      dw1 |= GEN8_SGVS_DW1_IID_ENABLE |
-             1 << GEN8_SGVS_DW1_IID_COMP__SHIFT |
-             attr << GEN8_SGVS_DW1_IID_OFFSET__SHIFT;
-   }
-
-   if (params->prepend_vertexid) {
-      dw1 |= GEN8_SGVS_DW1_VID_ENABLE |
-             0 << GEN8_SGVS_DW1_VID_COMP__SHIFT |
-             attr << GEN8_SGVS_DW1_VID_OFFSET__SHIFT;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(vf->sgvs) >= 1);
-   vf->sgvs[0] = dw1;
-
-   return true;
-}
-
-static uint32_t
-get_gen6_fixed_cut_index(const struct ilo_dev *dev,
-                         enum gen_index_format format)
-{
-   const uint32_t fixed = ~0u;
-
-   ILO_DEV_ASSERT(dev, 6, 7);
-
-   switch (format) {
-   case GEN6_INDEX_BYTE:   return (uint8_t)  fixed;
-   case GEN6_INDEX_WORD:   return (uint16_t) fixed;
-   case GEN6_INDEX_DWORD:  return (uint32_t) fixed;
-   default:
-      assert(!"unknown index format");
-      return fixed;
-   }
-}
-
-static bool
-get_gen6_cut_index_supported(const struct ilo_dev *dev,
-                             enum gen_3dprim_type topology)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * See the Sandy Bridge PRM, volume 2 part 1, page 80 and the Haswell PRM,
-    * volume 7, page 456.
-    */
-   switch (topology) {
-   case GEN6_3DPRIM_TRIFAN:
-   case GEN6_3DPRIM_QUADLIST:
-   case GEN6_3DPRIM_QUADSTRIP:
-   case GEN6_3DPRIM_POLYGON:
-   case GEN6_3DPRIM_LINELOOP:
-      return (ilo_dev_gen(dev) >= ILO_GEN(7.5));
-   case GEN6_3DPRIM_RECTLIST:
-   case GEN6_3DPRIM_TRIFAN_NOSTIPPLE:
-      return false;
-   default:
-      return true;
-   }
-}
-
-static bool
-vf_params_set_gen6_3dstate_index_buffer(struct ilo_state_vf *vf,
-                                        const struct ilo_dev *dev,
-                                        const struct ilo_state_vf_params_info *params)
-{
-   uint32_t dw0 = 0;
-
-   ILO_DEV_ASSERT(dev, 6, 7);
-
-   /* cut index only, as in 3DSTATE_VF */
-   if (params->cut_index_enable) {
-      assert(get_gen6_cut_index_supported(dev, params->cv_topology));
-      assert(get_gen6_fixed_cut_index(dev, params->cv_index_format) ==
-            params->cut_index);
-
-      dw0 |= GEN6_IB_DW0_CUT_INDEX_ENABLE;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(vf->cut) >= 1);
-   vf->cut[0] = dw0;
-
-   return true;
-}
-
-static bool
-vf_params_set_gen75_3DSTATE_VF(struct ilo_state_vf *vf,
-                               const struct ilo_dev *dev,
-                               const struct ilo_state_vf_params_info *params)
-{
-   uint32_t dw0 = 0;
-
-   ILO_DEV_ASSERT(dev, 7.5, 8);
-
-   if (params->cut_index_enable) {
-      assert(get_gen6_cut_index_supported(dev, params->cv_topology));
-      dw0 |= GEN75_VF_DW0_CUT_INDEX_ENABLE;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(vf->cut) >= 2);
-   vf->cut[0] = dw0;
-   vf->cut[1] = params->cut_index;
-
-   return true;
-}
-
-static bool
-vertex_buffer_validate_gen6(const struct ilo_dev *dev,
-                            const struct ilo_state_vertex_buffer_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (info->vma)
-      assert(info->size && info->offset + info->size <= info->vma->vm_size);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 86:
-    *
-    *     "(Buffer Pitch)
-    *      Range  [DevCTG+]: [0,2048] Bytes"
-    */
-   assert(info->stride <= 2048);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 86:
-    *
-    *     "64-bit floating point values must be 64-bit aligned in memory, or
-    *      UNPREDICTABLE data will be fetched. When accessing an element
-    *      containing 64-bit floating point values, the Buffer Starting
-    *      Address and Source Element Offset values must add to a 64-bit
-    *      aligned address, and BufferPitch must be a multiple of 64-bits."
-    */
-   if (info->cv_has_double) {
-      if (info->vma)
-         assert(info->vma->vm_alignment % 8 == 0);
-
-      assert(info->stride % 8 == 0);
-      assert((info->offset + info->cv_double_vertex_offset_mod_8) % 8 == 0);
-   }
-
-   return true;
-}
-
-static uint32_t
-vertex_buffer_get_gen6_size(const struct ilo_dev *dev,
-                            const struct ilo_state_vertex_buffer_info *info)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-   return (info->vma) ? info->size : 0;
-}
-
-static bool
-vertex_buffer_set_gen8_vertex_buffer_state(struct ilo_state_vertex_buffer *vb,
-                                           const struct ilo_dev *dev,
-                                           const struct ilo_state_vertex_buffer_info *info)
-{
-   const uint32_t size = vertex_buffer_get_gen6_size(dev, info);
-   uint32_t dw0;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!vertex_buffer_validate_gen6(dev, info))
-      return false;
-
-   dw0 = info->stride << GEN6_VB_DW0_PITCH__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      dw0 |= GEN7_VB_DW0_ADDR_MODIFIED;
-   if (!info->vma)
-      dw0 |= GEN6_VB_DW0_IS_NULL;
-
-   STATIC_ASSERT(ARRAY_SIZE(vb->vb) >= 3);
-   vb->vb[0] = dw0;
-   vb->vb[1] = info->offset;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      vb->vb[2] = size;
-   } else {
-      /* address of the last valid byte */
-      vb->vb[2] = (size) ? info->offset + size - 1 : 0;
-   }
-
-   vb->vma = info->vma;
-
-   return true;
-}
-
-static uint32_t
-get_index_format_size(enum gen_index_format format)
-{
-   switch (format) {
-   case GEN6_INDEX_BYTE:   return 1;
-   case GEN6_INDEX_WORD:   return 2;
-   case GEN6_INDEX_DWORD:  return 4;
-   default:
-      assert(!"unknown index format");
-      return 1;
-   }
-}
-
-static bool
-index_buffer_validate_gen6(const struct ilo_dev *dev,
-                           const struct ilo_state_index_buffer_info *info)
-{
-   const uint32_t format_size = get_index_format_size(info->format);
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 79:
-    *
-    *     "This field (Buffer Starting Address) contains the size-aligned (as
-    *      specified by Index Format) Graphics Address of the first element of
-    *      interest within the index buffer."
-    */
-   assert(info->offset % format_size == 0);
-
-   if (info->vma) {
-      assert(info->vma->vm_alignment % format_size == 0);
-      assert(info->size && info->offset + info->size <= info->vma->vm_size);
-   }
-
-   return true;
-}
-
-static uint32_t
-index_buffer_get_gen6_size(const struct ilo_dev *dev,
-                           const struct ilo_state_index_buffer_info *info)
-{
-   uint32_t size;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!info->vma)
-      return 0;
-
-   size = info->size;
-   if (ilo_dev_gen(dev) < ILO_GEN(8)) {
-      const uint32_t format_size = get_index_format_size(info->format);
-      size -= (size % format_size);
-   }
-
-   return size;
-}
-
-static bool
-index_buffer_set_gen8_3DSTATE_INDEX_BUFFER(struct ilo_state_index_buffer *ib,
-                                           const struct ilo_dev *dev,
-                                           const struct ilo_state_index_buffer_info *info)
-{
-   const uint32_t size = index_buffer_get_gen6_size(dev, info);
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (!index_buffer_validate_gen6(dev, info))
-      return false;
-
-   STATIC_ASSERT(ARRAY_SIZE(ib->ib) >= 3);
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      ib->ib[0] = info->format << GEN8_IB_DW1_FORMAT__SHIFT;
-      ib->ib[1] = info->offset;
-      ib->ib[2] = size;
-   } else {
-      ib->ib[0] = info->format << GEN6_IB_DW0_FORMAT__SHIFT;
-      ib->ib[1] = info->offset;
-      /* address of the last valid byte, or 0 */
-      ib->ib[2] = (size) ? info->offset + size - 1 : 0;
-   }
-
-   ib->vma = info->vma;
-
-   return true;
-}
-
-bool
-ilo_state_vf_valid_element_format(const struct ilo_dev *dev,
-                                  enum gen_surface_format format)
-{
-   /*
-    * This table is based on:
-    *
-    *  - the Sandy Bridge PRM, volume 4 part 1, page 88-97
-    *  - the Ivy Bridge PRM, volume 2 part 1, page 97-99
-    *  - the Haswell PRM, volume 7, page 467-470
-    */
-   static const int vf_element_formats[] = {
-      [GEN6_FORMAT_R32G32B32A32_FLOAT]       = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32A32_SINT]        = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32A32_UINT]        = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32A32_UNORM]       = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32A32_SNORM]       = ILO_GEN(  1),
-      [GEN6_FORMAT_R64G64_FLOAT]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32A32_SSCALED]     = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32A32_USCALED]     = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32A32_SFIXED]      = ILO_GEN(7.5),
-      [GEN6_FORMAT_R32G32B32_FLOAT]          = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32_SINT]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32_UINT]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32_UNORM]          = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32_SNORM]          = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32_SSCALED]        = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32_USCALED]        = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32B32_SFIXED]         = ILO_GEN(7.5),
-      [GEN6_FORMAT_R16G16B16A16_UNORM]       = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16A16_SNORM]       = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16A16_SINT]        = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16A16_UINT]        = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16A16_FLOAT]       = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32_FLOAT]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32_SINT]              = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32_UINT]              = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32_UNORM]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32_SNORM]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R64_FLOAT]                = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16A16_SSCALED]     = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16A16_USCALED]     = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32_SSCALED]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32_USCALED]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R32G32_SFIXED]            = ILO_GEN(7.5),
-      [GEN6_FORMAT_B8G8R8A8_UNORM]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R10G10B10A2_UNORM]        = ILO_GEN(  1),
-      [GEN6_FORMAT_R10G10B10A2_UINT]         = ILO_GEN(  1),
-      [GEN6_FORMAT_R10G10B10_SNORM_A2_UNORM] = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8A8_UNORM]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8A8_SNORM]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8A8_SINT]            = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8A8_UINT]            = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16_UNORM]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16_SNORM]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16_SINT]              = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16_UINT]              = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16_FLOAT]             = ILO_GEN(  1),
-      [GEN6_FORMAT_B10G10R10A2_UNORM]        = ILO_GEN(7.5),
-      [GEN6_FORMAT_R11G11B10_FLOAT]          = ILO_GEN(  1),
-      [GEN6_FORMAT_R32_SINT]                 = ILO_GEN(  1),
-      [GEN6_FORMAT_R32_UINT]                 = ILO_GEN(  1),
-      [GEN6_FORMAT_R32_FLOAT]                = ILO_GEN(  1),
-      [GEN6_FORMAT_R32_UNORM]                = ILO_GEN(  1),
-      [GEN6_FORMAT_R32_SNORM]                = ILO_GEN(  1),
-      [GEN6_FORMAT_R10G10B10X2_USCALED]      = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8A8_SSCALED]         = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8A8_USCALED]         = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16_SSCALED]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16_USCALED]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R32_SSCALED]              = ILO_GEN(  1),
-      [GEN6_FORMAT_R32_USCALED]              = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8_UNORM]               = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8_SNORM]               = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8_SINT]                = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8_UINT]                = ILO_GEN(  1),
-      [GEN6_FORMAT_R16_UNORM]                = ILO_GEN(  1),
-      [GEN6_FORMAT_R16_SNORM]                = ILO_GEN(  1),
-      [GEN6_FORMAT_R16_SINT]                 = ILO_GEN(  1),
-      [GEN6_FORMAT_R16_UINT]                 = ILO_GEN(  1),
-      [GEN6_FORMAT_R16_FLOAT]                = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8_SSCALED]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8_USCALED]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R16_SSCALED]              = ILO_GEN(  1),
-      [GEN6_FORMAT_R16_USCALED]              = ILO_GEN(  1),
-      [GEN6_FORMAT_R8_UNORM]                 = ILO_GEN(  1),
-      [GEN6_FORMAT_R8_SNORM]                 = ILO_GEN(  1),
-      [GEN6_FORMAT_R8_SINT]                  = ILO_GEN(  1),
-      [GEN6_FORMAT_R8_UINT]                  = ILO_GEN(  1),
-      [GEN6_FORMAT_R8_SSCALED]               = ILO_GEN(  1),
-      [GEN6_FORMAT_R8_USCALED]               = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8_UNORM]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8_SNORM]             = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8_SSCALED]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R8G8B8_USCALED]           = ILO_GEN(  1),
-      [GEN6_FORMAT_R64G64B64A64_FLOAT]       = ILO_GEN(  1),
-      [GEN6_FORMAT_R64G64B64_FLOAT]          = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16_FLOAT]          = ILO_GEN(  6),
-      [GEN6_FORMAT_R16G16B16_UNORM]          = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16_SNORM]          = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16_SSCALED]        = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16_USCALED]        = ILO_GEN(  1),
-      [GEN6_FORMAT_R16G16B16_UINT]           = ILO_GEN(7.5),
-      [GEN6_FORMAT_R16G16B16_SINT]           = ILO_GEN(7.5),
-      [GEN6_FORMAT_R32_SFIXED]               = ILO_GEN(7.5),
-      [GEN6_FORMAT_R10G10B10A2_SNORM]        = ILO_GEN(7.5),
-      [GEN6_FORMAT_R10G10B10A2_USCALED]      = ILO_GEN(7.5),
-      [GEN6_FORMAT_R10G10B10A2_SSCALED]      = ILO_GEN(7.5),
-      [GEN6_FORMAT_R10G10B10A2_SINT]         = ILO_GEN(7.5),
-      [GEN6_FORMAT_B10G10R10A2_SNORM]        = ILO_GEN(7.5),
-      [GEN6_FORMAT_B10G10R10A2_USCALED]      = ILO_GEN(7.5),
-      [GEN6_FORMAT_B10G10R10A2_SSCALED]      = ILO_GEN(7.5),
-      [GEN6_FORMAT_B10G10R10A2_UINT]         = ILO_GEN(7.5),
-      [GEN6_FORMAT_B10G10R10A2_SINT]         = ILO_GEN(7.5),
-      [GEN6_FORMAT_R8G8B8_UINT]              = ILO_GEN(7.5),
-      [GEN6_FORMAT_R8G8B8_SINT]              = ILO_GEN(7.5),
-   };
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   return (format < ARRAY_SIZE(vf_element_formats) &&
-           vf_element_formats[format] &&
-           ilo_dev_gen(dev) >= vf_element_formats[format]);
-}
-
-bool
-ilo_state_vf_init(struct ilo_state_vf *vf,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_vf_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(vf, sizeof(*vf)));
-   assert(ilo_is_zeroed(info->data, info->data_size));
-
-   assert(ilo_state_vf_data_size(dev, info->element_count) <=
-         info->data_size);
-   vf->user_ve = (uint32_t (*)[2]) info->data;
-   vf->user_instancing =
-      (uint32_t (*)[2]) (vf->user_ve + info->element_count);
-
-   ret &= vf_set_gen6_3DSTATE_VERTEX_ELEMENTS(vf, dev, info);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      ret &= vf_set_gen8_3DSTATE_VF_INSTANCING(vf, dev, info);
-   else
-      ret &= vf_set_gen6_vertex_buffer_state(vf, dev, info);
-
-   ret &= ilo_state_vf_set_params(vf, dev, &info->params);
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_vf_init_for_rectlist(struct ilo_state_vf *vf,
-                               const struct ilo_dev *dev,
-                               void *data, size_t data_size,
-                               const struct ilo_state_vf_element_info *elements,
-                               uint8_t element_count)
-{
-   struct ilo_state_vf_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   info.data = data;
-   info.data_size = data_size;
-
-   info.elements = elements;
-   info.element_count = element_count;
-
-   /*
-    * For VUE header,
-    *
-    *   DW0: Reserved: MBZ
-    *   DW1: Render Target Array Index
-    *   DW2: Viewport Index
-    *   DW3: Point Width
-    */
-   info.params.prepend_zeros = true;
-
-   return ilo_state_vf_init(vf, dev, &info);
-}
-
-bool
-ilo_state_vf_set_params(struct ilo_state_vf *vf,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_vf_params_info *params)
-{
-   bool ret = true;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   ret &= vf_params_set_gen6_internal_ve(vf, dev, params, vf->user_ve_count);
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      ret &= vf_params_set_gen8_3DSTATE_VF_SGVS(vf, dev, params);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 94:
-    *
-    *     "Edge flags are supported for the following primitive topology types
-    *      only, otherwise EdgeFlagEnable must not be ENABLED.
-    *
-    *      - 3DPRIM_TRILIST*
-    *      - 3DPRIM_TRISTRIP*
-    *      - 3DPRIM_TRIFAN*
-    *      - 3DPRIM_POLYGON"
-    *
-    *     "[DevSNB]: Edge Flags are not supported for QUADLIST primitives.
-    *      Software may elect to convert QUADLIST primitives to some set of
-    *      corresponding edge-flag-supported primitive types (e.g., POLYGONs)
-    *      prior to submission to the 3D vf."
-    *
-    * From the Ivy Bridge PRM, volume 2 part 1, page 86:
-    *
-    *     "Edge flags are supported for all primitive topology types."
-    *
-    * Both PRMs are confusing...
-    */
-   if (params->last_element_edge_flag) {
-      assert(vf->edge_flag_supported);
-      if (ilo_dev_gen(dev) == ILO_GEN(6))
-         assert(params->cv_topology != GEN6_3DPRIM_QUADLIST);
-   }
-
-   if (vf->edge_flag_supported) {
-      assert(vf->user_ve_count);
-      memcpy(vf->user_ve[vf->user_ve_count - 1],
-            vf->last_user_ve[params->last_element_edge_flag],
-            sizeof(vf->user_ve[vf->user_ve_count - 1]));
-   }
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-      ret &= vf_params_set_gen75_3DSTATE_VF(vf, dev, params);
-   else
-      ret &= vf_params_set_gen6_3dstate_index_buffer(vf, dev, params);
-
-   assert(ret);
-
-   return ret;
-}
-
-void
-ilo_state_vf_full_delta(const struct ilo_state_vf *vf,
-                        const struct ilo_dev *dev,
-                        struct ilo_state_vf_delta *delta)
-{
-   delta->dirty = ILO_STATE_VF_3DSTATE_VERTEX_ELEMENTS;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      delta->dirty |= ILO_STATE_VF_3DSTATE_VF_SGVS |
-                      ILO_STATE_VF_3DSTATE_VF_INSTANCING;
-   } else {
-      delta->dirty |= ILO_STATE_VF_3DSTATE_VERTEX_BUFFERS;
-   }
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-      delta->dirty |= ILO_STATE_VF_3DSTATE_VF;
-   else
-      delta->dirty |= ILO_STATE_VF_3DSTATE_INDEX_BUFFER;
-}
-
-void
-ilo_state_vf_get_delta(const struct ilo_state_vf *vf,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_vf *old,
-                       struct ilo_state_vf_delta *delta)
-{
-   /* no shallow copying */
-   assert(vf->user_ve != old->user_ve &&
-          vf->user_instancing != old->user_instancing);
-
-   delta->dirty = 0;
-
-   if (vf->internal_ve_count != old->internal_ve_count ||
-       vf->user_ve_count != old->user_ve_count ||
-       memcmp(vf->internal_ve, old->internal_ve,
-          sizeof(vf->internal_ve[0]) * vf->internal_ve_count) ||
-       memcmp(vf->user_ve, old->user_ve,
-          sizeof(vf->user_ve[0]) * vf->user_ve_count))
-      delta->dirty |= ILO_STATE_VF_3DSTATE_VERTEX_ELEMENTS;
-
-   if (vf->user_ve_count != old->user_ve_count ||
-       memcmp(vf->user_instancing, old->user_instancing,
-          sizeof(vf->user_instancing[0]) * vf->user_ve_count)) {
-      if (ilo_dev_gen(dev) >= ILO_GEN(8))
-         delta->dirty |= ILO_STATE_VF_3DSTATE_VF_INSTANCING;
-      else
-         delta->dirty |= ILO_STATE_VF_3DSTATE_VERTEX_BUFFERS;
-   }
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      if (vf->sgvs[0] != old->sgvs[0])
-         delta->dirty |= ILO_STATE_VF_3DSTATE_VF_SGVS;
-   }
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5)) {
-      if (memcmp(vf->cut, old->cut, sizeof(vf->cut)))
-         delta->dirty |= ILO_STATE_VF_3DSTATE_VF;
-   } else {
-      if (vf->cut[0] != old->cut[0])
-         delta->dirty |= ILO_STATE_VF_3DSTATE_INDEX_BUFFER;
-   }
-}
-
-uint32_t
-ilo_state_vertex_buffer_size(const struct ilo_dev *dev, uint32_t size,
-                             uint32_t *alignment)
-{
-   /* align for doubles without padding */
-   *alignment = 8;
-   return size;
-}
-
-/**
- * No need to initialize first.
- */
-bool
-ilo_state_vertex_buffer_set_info(struct ilo_state_vertex_buffer *vb,
-                                 const struct ilo_dev *dev,
-                                 const struct ilo_state_vertex_buffer_info *info)
-{
-   bool ret = true;
-
-   ret &= vertex_buffer_set_gen8_vertex_buffer_state(vb, dev, info);
-
-   assert(ret);
-
-   return ret;
-}
-
-uint32_t
-ilo_state_index_buffer_size(const struct ilo_dev *dev, uint32_t size,
-                            uint32_t *alignment)
-{
-   /* align for the worst case without padding */
-   *alignment = get_index_format_size(GEN6_INDEX_DWORD);
-   return size;
-}
-
-/**
- * No need to initialize first.
- */
-bool
-ilo_state_index_buffer_set_info(struct ilo_state_index_buffer *ib,
-                                const struct ilo_dev *dev,
-                                const struct ilo_state_index_buffer_info *info)
-{
-   bool ret = true;
-
-   ret &= index_buffer_set_gen8_3DSTATE_INDEX_BUFFER(ib, dev, info);
-
-   assert(ret);
-
-   return ret;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_vf.h b/src/gallium/drivers/ilo/core/ilo_state_vf.h
deleted file mode 100644 (file)
index 16b128b..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_VF_H
-#define ILO_STATE_VF_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-/*
- * From the Sandy Bridge PRM, volume 2 part 1, page 93:
- *
- *     "Up to 34 (DevSNB+) vertex elements are supported."
- *
- *     "Up to 33 VBs are supported"
- *
- * Reserve two VEs and one VB for internal use.
- */
-#define ILO_STATE_VF_MAX_ELEMENT_COUNT (34 - 2)
-#define ILO_STATE_VF_MAX_BUFFER_COUNT (33 - 1)
-
-enum ilo_state_vf_dirty_bits {
-   ILO_STATE_VF_3DSTATE_VERTEX_ELEMENTS            = (1 << 0),
-   ILO_STATE_VF_3DSTATE_VF_SGVS                    = (1 << 1),
-   ILO_STATE_VF_3DSTATE_VF_INSTANCING              = (1 << 2),
-   ILO_STATE_VF_3DSTATE_VERTEX_BUFFERS             = (1 << 3),
-   ILO_STATE_VF_3DSTATE_VF                         = (1 << 4),
-   ILO_STATE_VF_3DSTATE_INDEX_BUFFER               = (1 << 5),
-};
-
-/**
- * Fetch a 128-bit vertex attribute.
- */
-struct ilo_state_vf_element_info {
-   uint8_t buffer;
-   uint16_t vertex_offset;
-   enum gen_surface_format format;
-
-   uint8_t format_size;
-   uint8_t component_count;
-   bool is_integer;
-
-   /* must be the same for those share the same buffer before Gen8 */
-   bool instancing_enable;
-   uint32_t instancing_step_rate;
-};
-
-/**
- * VF parameters.
- */
-struct ilo_state_vf_params_info {
-   enum gen_3dprim_type cv_topology;
-
-   /* prepend an attribute of zeros */
-   bool prepend_zeros;
-
-   /* prepend an attribute of VertexID and/or InstanceID */
-   bool prepend_vertexid;
-   bool prepend_instanceid;
-
-   bool last_element_edge_flag;
-
-   enum gen_index_format cv_index_format;
-   bool cut_index_enable;
-   uint32_t cut_index;
-};
-
-/**
- * Vertex fetch.
- */
-struct ilo_state_vf_info {
-   void *data;
-   size_t data_size;
-
-   const struct ilo_state_vf_element_info *elements;
-   uint8_t element_count;
-
-   struct ilo_state_vf_params_info params;
-};
-
-struct ilo_state_vf {
-   uint32_t (*user_ve)[2];
-   uint32_t (*user_instancing)[2];
-   int8_t vb_to_first_elem[ILO_STATE_VF_MAX_BUFFER_COUNT];
-   uint8_t user_ve_count;
-
-   bool edge_flag_supported;
-   uint32_t last_user_ve[2][2];
-
-   /* two VEs are reserved for internal use */
-   uint32_t internal_ve[2][2];
-   uint8_t internal_ve_count;
-
-   uint32_t sgvs[1];
-
-   uint32_t cut[2];
-};
-
-struct ilo_state_vf_delta {
-   uint32_t dirty;
-};
-
-struct ilo_vma;
-
-struct ilo_state_vertex_buffer_info {
-   const struct ilo_vma *vma;
-   uint32_t offset;
-   uint32_t size;
-
-   uint16_t stride;
-
-   /* doubles must be at 64-bit aligned addresses */
-   bool cv_has_double;
-   uint8_t cv_double_vertex_offset_mod_8;
-};
-
-struct ilo_state_vertex_buffer {
-   uint32_t vb[3];
-
-   const struct ilo_vma *vma;
-};
-
-struct ilo_state_index_buffer_info {
-   const struct ilo_vma *vma;
-   uint32_t offset;
-   uint32_t size;
-
-   enum gen_index_format format;
-};
-
-struct ilo_state_index_buffer {
-   uint32_t ib[3];
-
-   const struct ilo_vma *vma;
-};
-
-static inline size_t
-ilo_state_vf_data_size(const struct ilo_dev *dev, uint8_t element_count)
-{
-   const struct ilo_state_vf *vf = NULL;
-   return (sizeof(vf->user_ve[0]) +
-           sizeof(vf->user_instancing[0])) * element_count;
-}
-
-bool
-ilo_state_vf_valid_element_format(const struct ilo_dev *dev,
-                                  enum gen_surface_format format);
-
-bool
-ilo_state_vf_init(struct ilo_state_vf *vf,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_vf_info *info);
-
-bool
-ilo_state_vf_init_for_rectlist(struct ilo_state_vf *vf,
-                               const struct ilo_dev *dev,
-                               void *data, size_t data_size,
-                               const struct ilo_state_vf_element_info *elements,
-                               uint8_t element_count);
-
-bool
-ilo_state_vf_set_params(struct ilo_state_vf *vf,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_vf_params_info *params);
-
-/**
- * Return the number of attributes in the VUE.
- */
-static inline uint8_t
-ilo_state_vf_get_attr_count(const struct ilo_state_vf *vf)
-{
-   return vf->internal_ve_count + vf->user_ve_count;
-}
-
-void
-ilo_state_vf_full_delta(const struct ilo_state_vf *vf,
-                        const struct ilo_dev *dev,
-                        struct ilo_state_vf_delta *delta);
-
-void
-ilo_state_vf_get_delta(const struct ilo_state_vf *vf,
-                       const struct ilo_dev *dev,
-                       const struct ilo_state_vf *old,
-                       struct ilo_state_vf_delta *delta);
-
-uint32_t
-ilo_state_vertex_buffer_size(const struct ilo_dev *dev, uint32_t size,
-                             uint32_t *alignment);
-
-bool
-ilo_state_vertex_buffer_set_info(struct ilo_state_vertex_buffer *vb,
-                                 const struct ilo_dev *dev,
-                                 const struct ilo_state_vertex_buffer_info *info);
-
-uint32_t
-ilo_state_index_buffer_size(const struct ilo_dev *dev, uint32_t size,
-                            uint32_t *alignment);
-
-bool
-ilo_state_index_buffer_set_info(struct ilo_state_index_buffer *ib,
-                                const struct ilo_dev *dev,
-                                const struct ilo_state_index_buffer_info *info);
-
-#endif /* ILO_STATE_VF_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_viewport.c b/src/gallium/drivers/ilo/core/ilo_state_viewport.c
deleted file mode 100644 (file)
index aae5733..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_state_viewport.h"
-
-static void
-viewport_matrix_get_gen6_guardband(const struct ilo_dev *dev,
-                                   const struct ilo_state_viewport_matrix_info *mat,
-                                   float *min_gbx, float *max_gbx,
-                                   float *min_gby, float *max_gby)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 234:
-    *
-    *     "Per-Device Guardband Extents
-    *
-    *       - Supported X,Y ScreenSpace "Guardband" Extent: [-16K,16K-1]
-    *       - Maximum Post-Clamp Delta (X or Y): 16K"
-    *
-    *     "In addition, in order to be correctly rendered, objects must have a
-    *      screenspace bounding box not exceeding 8K in the X or Y direction.
-    *      This additional restriction must also be comprehended by software,
-    *      i.e., enforced by use of clipping."
-    *
-    * From the Ivy Bridge PRM, volume 2 part 1, page 248:
-    *
-    *     "Per-Device Guardband Extents
-    *
-    *       - Supported X,Y ScreenSpace "Guardband" Extent: [-32K,32K-1]
-    *       - Maximum Post-Clamp Delta (X or Y): N/A"
-    *
-    *     "In addition, in order to be correctly rendered, objects must have a
-    *      screenspace bounding box not exceeding 8K in the X or Y direction.
-    *      This additional restriction must also be comprehended by software,
-    *      i.e., enforced by use of clipping."
-    *
-    * Combined, the bounding box of any object can not exceed 8K in both
-    * width and height.
-    *
-    * Below we set the guardband as a squre of length 8K, centered at where
-    * the viewport is.  This makes sure all objects passing the GB test are
-    * valid to the renderer, and those failing the XY clipping have a
-    * better chance of passing the GB test.
-    */
-   const int max_extent = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 32768 : 16384;
-   const int half_len = 8192 / 2;
-   int center_x = (int) mat->translate[0];
-   int center_y = (int) mat->translate[1];
-   float scale_x, scale_y;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /* make sure the guardband is within the valid range */
-   if (center_x - half_len < -max_extent)
-      center_x = -max_extent + half_len;
-   else if (center_x + half_len > max_extent - 1)
-      center_x = max_extent - half_len;
-
-   if (center_y - half_len < -max_extent)
-      center_y = -max_extent + half_len;
-   else if (center_y + half_len > max_extent - 1)
-      center_y = max_extent - half_len;
-
-   scale_x = fabsf(mat->scale[0]);
-   scale_y = fabsf(mat->scale[1]);
-   /*
-    * From the Haswell PRM, volume 2d, page 292-293:
-    *
-    *     "Note: Minimum allowed value for this field (X/Y Min Clip Guardband)
-    *      is -16384."
-    *
-    *     "Note: Maximum allowed value for this field (X/Y Max Clip Guardband)
-    *      is 16383."
-    *
-    * Avoid small scales.
-    */
-   if (scale_x < 1.0f)
-      scale_x = 1.0f;
-   if (scale_y < 1.0f)
-      scale_y = 1.0f;
-
-   /* in NDC space */
-   *min_gbx = ((float) (center_x - half_len) - mat->translate[0]) / scale_x;
-   *max_gbx = ((float) (center_x + half_len) - mat->translate[0]) / scale_x;
-   *min_gby = ((float) (center_y - half_len) - mat->translate[1]) / scale_y;
-   *max_gby = ((float) (center_y + half_len) - mat->translate[1]) / scale_y;
-}
-
-static void
-viewport_matrix_get_extent(const struct ilo_state_viewport_matrix_info *mat,
-                           int axis, float *min, float *max)
-{
-   const float scale_abs = fabsf(mat->scale[axis]);
-
-   *min = -1.0f * scale_abs + mat->translate[axis];
-   *max =  1.0f * scale_abs + mat->translate[axis];
-}
-
-static bool
-viewport_matrix_set_gen7_SF_CLIP_VIEWPORT(struct ilo_state_viewport *vp,
-                                          const struct ilo_dev *dev,
-                                          const struct ilo_state_viewport_matrix_info *matrices,
-                                          uint8_t count)
-{
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   for (i = 0; i < count; i++) {
-      const struct ilo_state_viewport_matrix_info *mat = &matrices[i];
-      float min_gbx, max_gbx, min_gby, max_gby;
-      uint32_t dw[16];
-
-      viewport_matrix_get_gen6_guardband(dev, mat,
-            &min_gbx, &max_gbx, &min_gby, &max_gby);
-
-      dw[0] = fui(mat->scale[0]);
-      dw[1] = fui(mat->scale[1]);
-      dw[2] = fui(mat->scale[2]);
-      dw[3] = fui(mat->translate[0]);
-      dw[4] = fui(mat->translate[1]);
-      dw[5] = fui(mat->translate[2]);
-      dw[6] = 0;
-      dw[7] = 0;
-
-      dw[8] = fui(min_gbx);
-      dw[9] = fui(max_gbx);
-      dw[10] = fui(min_gby);
-      dw[11] = fui(max_gby);
-
-      if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-         float min_x, max_x, min_y, max_y;
-
-         viewport_matrix_get_extent(mat, 0, &min_x, &max_x);
-         viewport_matrix_get_extent(mat, 1, &min_y, &max_y);
-
-         dw[12] = fui(min_x);
-         dw[13] = fui(max_x - 1.0f);
-         dw[14] = fui(min_y);
-         dw[15] = fui(max_y - 1.0f);
-      } else {
-         dw[12] = 0;
-         dw[13] = 0;
-         dw[14] = 0;
-         dw[15] = 0;
-      }
-
-      STATIC_ASSERT(ARRAY_SIZE(vp->sf_clip[i]) >= 16);
-      memcpy(vp->sf_clip[i], dw, sizeof(dw));
-   }
-
-   return true;
-}
-
-static bool
-viewport_matrix_set_gen6_CC_VIEWPORT(struct ilo_state_viewport *vp,
-                                     const struct ilo_dev *dev,
-                                     const struct ilo_state_viewport_matrix_info *matrices,
-                                     uint8_t count)
-{
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   for (i = 0; i < count; i++) {
-      const struct ilo_state_viewport_matrix_info *mat = &matrices[i];
-      float min_z, max_z;
-
-      viewport_matrix_get_extent(mat, 2, &min_z, &max_z);
-
-      STATIC_ASSERT(ARRAY_SIZE(vp->cc[i]) >= 2);
-      vp->cc[i][0] = fui(min_z);
-      vp->cc[i][1] = fui(max_z);
-   }
-
-   return true;
-}
-
-static bool
-viewport_scissor_set_gen6_SCISSOR_RECT(struct ilo_state_viewport *vp,
-                                       const struct ilo_dev *dev,
-                                       const struct ilo_state_viewport_scissor_info *scissors,
-                                       uint8_t count)
-{
-   const uint16_t max_size = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 16384 : 8192;
-   uint8_t i;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   for (i = 0; i < count; i++) {
-      const struct ilo_state_viewport_scissor_info *scissor = &scissors[i];
-      uint16_t min_x, min_y, max_x, max_y;
-      uint32_t dw0, dw1;
-
-      min_x = (scissor->min_x < max_size) ? scissor->min_x : max_size - 1;
-      min_y = (scissor->min_y < max_size) ? scissor->min_y : max_size - 1;
-      max_x = (scissor->max_x < max_size) ? scissor->max_x : max_size - 1;
-      max_y = (scissor->max_y < max_size) ? scissor->max_y : max_size - 1;
-
-      dw0 = min_y << GEN6_SCISSOR_DW0_MIN_Y__SHIFT |
-            min_x << GEN6_SCISSOR_DW0_MIN_X__SHIFT;
-      dw1 = max_y << GEN6_SCISSOR_DW1_MAX_Y__SHIFT |
-            max_x << GEN6_SCISSOR_DW1_MAX_X__SHIFT;
-
-      STATIC_ASSERT(ARRAY_SIZE(vp->scissor[i]) >= 2);
-      vp->scissor[i][0] = dw0;
-      vp->scissor[i][1] = dw1;
-   }
-
-   return true;
-}
-
-bool
-ilo_state_viewport_init(struct ilo_state_viewport *vp,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_viewport_info *info)
-{
-   const size_t elem_size = ilo_state_viewport_data_size(dev, 1);
-
-   assert(ilo_is_zeroed(vp, sizeof(*vp)));
-   assert(ilo_is_zeroed(info->data, info->data_size));
-
-   vp->data = info->data;
-
-   if (info->data_size / elem_size < ILO_STATE_VIEWPORT_MAX_COUNT)
-      vp->array_size = info->data_size / elem_size;
-   else
-      vp->array_size = ILO_STATE_VIEWPORT_MAX_COUNT;
-
-   return ilo_state_viewport_set_params(vp, dev, &info->params, false);
-}
-
-bool
-ilo_state_viewport_init_data_only(struct ilo_state_viewport *vp,
-                                  const struct ilo_dev *dev,
-                                  void *data, size_t data_size)
-{
-   struct ilo_state_viewport_info info;
-
-   memset(&info, 0, sizeof(info));
-   info.data = data;
-   info.data_size = data_size;
-
-   return ilo_state_viewport_init(vp, dev, &info);
-}
-
-bool
-ilo_state_viewport_init_for_rectlist(struct ilo_state_viewport *vp,
-                                     const struct ilo_dev *dev,
-                                     void *data, size_t data_size)
-{
-   struct ilo_state_viewport_info info;
-   struct ilo_state_viewport_matrix_info mat;
-   struct ilo_state_viewport_scissor_info sci;
-
-   memset(&info, 0, sizeof(info));
-   memset(&mat, 0, sizeof(mat));
-   memset(&sci, 0, sizeof(sci));
-
-   info.data = data;
-   info.data_size = data_size;
-   info.params.matrices = &mat;
-   info.params.scissors = &sci;
-   info.params.count = 1;
-
-   mat.scale[0] = 1.0f;
-   mat.scale[1] = 1.0f;
-   mat.scale[2] = 1.0f;
-
-   return ilo_state_viewport_init(vp, dev, &info);
-}
-
-static void
-viewport_set_count(struct ilo_state_viewport *vp,
-                   const struct ilo_dev *dev,
-                   uint8_t count)
-{
-   assert(count <= vp->array_size);
-
-   vp->count = count;
-   vp->sf_clip = (uint32_t (*)[16]) vp->data;
-   vp->cc =      (uint32_t (*)[ 2]) (vp->sf_clip + count);
-   vp->scissor = (uint32_t (*)[ 2]) (vp->cc + count);
-}
-
-bool
-ilo_state_viewport_set_params(struct ilo_state_viewport *vp,
-                              const struct ilo_dev *dev,
-                              const struct ilo_state_viewport_params_info *params,
-                              bool scissors_only)
-{
-   bool ret = true;
-
-   if (scissors_only) {
-      assert(vp->count == params->count);
-
-      ret &= viewport_scissor_set_gen6_SCISSOR_RECT(vp, dev,
-            params->scissors, params->count);
-   } else {
-      viewport_set_count(vp, dev, params->count);
-
-      ret &= viewport_matrix_set_gen7_SF_CLIP_VIEWPORT(vp, dev,
-            params->matrices, params->count);
-      ret &= viewport_matrix_set_gen6_CC_VIEWPORT(vp, dev,
-            params->matrices, params->count);
-      ret &= viewport_scissor_set_gen6_SCISSOR_RECT(vp, dev,
-            params->scissors, params->count);
-   }
-
-   assert(ret);
-
-   return ret;
-}
-
-void
-ilo_state_viewport_full_delta(const struct ilo_state_viewport *vp,
-                              const struct ilo_dev *dev,
-                              struct ilo_state_viewport_delta *delta)
-{
-   delta->dirty = ILO_STATE_VIEWPORT_SF_CLIP_VIEWPORT |
-                  ILO_STATE_VIEWPORT_CC_VIEWPORT |
-                  ILO_STATE_VIEWPORT_SCISSOR_RECT;
-}
-
-void
-ilo_state_viewport_get_delta(const struct ilo_state_viewport *vp,
-                             const struct ilo_dev *dev,
-                             const struct ilo_state_viewport *old,
-                             struct ilo_state_viewport_delta *delta)
-{
-   const size_t sf_clip_size = sizeof(vp->sf_clip[0]) * vp->count;
-   const size_t cc_size = sizeof(vp->cc[0]) * vp->count;
-   const size_t scissor_size = sizeof(vp->scissor[0]) * vp->count;
-
-   /* no shallow copying */
-   assert(vp->data != old->data);
-
-   if (vp->count != old->count) {
-      ilo_state_viewport_full_delta(vp, dev, delta);
-      return;
-   }
-
-   delta->dirty = 0;
-
-   if (memcmp(vp->sf_clip, old->sf_clip, sf_clip_size))
-      delta->dirty |= ILO_STATE_VIEWPORT_SF_CLIP_VIEWPORT;
-
-   if (memcmp(vp->cc, old->cc, cc_size))
-      delta->dirty |= ILO_STATE_VIEWPORT_CC_VIEWPORT;
-
-   if (memcmp(vp->scissor, old->scissor, scissor_size))
-      delta->dirty |= ILO_STATE_VIEWPORT_SCISSOR_RECT;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_viewport.h b/src/gallium/drivers/ilo/core/ilo_state_viewport.h
deleted file mode 100644 (file)
index b42ad65..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_VIEWPORT_H
-#define ILO_STATE_VIEWPORT_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-/*
- * From the Sandy Bridge PRM, volume 2 part 1, page 38:
- *
- *     "... 16 sets of viewport (VP) state parameters in the Clip unit's
- *      VertexClipTest function and in the SF unit's ViewportMapping and
- *      Scissor functions."
- */
-#define ILO_STATE_VIEWPORT_MAX_COUNT 16
-
-enum ilo_state_viewport_dirty_bits {
-   ILO_STATE_VIEWPORT_SF_CLIP_VIEWPORT             = (1 << 0),
-   ILO_STATE_VIEWPORT_CC_VIEWPORT                  = (1 << 1),
-   ILO_STATE_VIEWPORT_SCISSOR_RECT                 = (1 << 2),
-};
-
-struct ilo_state_viewport_matrix_info {
-   float scale[3];
-   float translate[3];
-};
-
-struct ilo_state_viewport_scissor_info {
-   /* all inclusive */
-   uint16_t min_x;
-   uint16_t min_y;
-   uint16_t max_x;
-   uint16_t max_y;
-};
-
-struct ilo_state_viewport_params_info {
-   const struct ilo_state_viewport_matrix_info *matrices;
-   const struct ilo_state_viewport_scissor_info *scissors;
-   uint8_t count;
-};
-
-struct ilo_state_viewport_info {
-   void *data;
-   size_t data_size;
-
-   struct ilo_state_viewport_params_info params;
-};
-
-struct ilo_state_viewport {
-   void *data;
-   uint8_t array_size;
-
-   uint8_t count;
-   uint32_t (*sf_clip)[16];
-   uint32_t (*cc)[2];
-   uint32_t (*scissor)[2];
-};
-
-struct ilo_state_viewport_delta {
-   uint32_t dirty;
-};
-
-static inline size_t
-ilo_state_viewport_data_size(const struct ilo_dev *dev, uint8_t array_size)
-{
-   const struct ilo_state_viewport *vp = NULL;
-   return (sizeof(vp->sf_clip[0]) +
-           sizeof(vp->cc[0]) +
-           sizeof(vp->scissor[0])) * array_size;
-}
-
-bool
-ilo_state_viewport_init(struct ilo_state_viewport *vp,
-                        const struct ilo_dev *dev,
-                        const struct ilo_state_viewport_info *info);
-
-bool
-ilo_state_viewport_init_data_only(struct ilo_state_viewport *vp,
-                                  const struct ilo_dev *dev,
-                                  void *data, size_t data_size);
-
-bool
-ilo_state_viewport_init_for_rectlist(struct ilo_state_viewport *vp,
-                                     const struct ilo_dev *dev,
-                                     void *data, size_t data_size);
-
-bool
-ilo_state_viewport_set_params(struct ilo_state_viewport *vp,
-                              const struct ilo_dev *dev,
-                              const struct ilo_state_viewport_params_info *params,
-                              bool scissors_only);
-
-void
-ilo_state_viewport_full_delta(const struct ilo_state_viewport *vp,
-                              const struct ilo_dev *dev,
-                              struct ilo_state_viewport_delta *delta);
-
-void
-ilo_state_viewport_get_delta(const struct ilo_state_viewport *vp,
-                             const struct ilo_dev *dev,
-                             const struct ilo_state_viewport *old,
-                             struct ilo_state_viewport_delta *delta);
-
-#endif /* ILO_STATE_VIEWPORT_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_state_zs.c b/src/gallium/drivers/ilo/core/ilo_state_zs.c
deleted file mode 100644 (file)
index 8276327..0000000
+++ /dev/null
@@ -1,677 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "ilo_debug.h"
-#include "ilo_image.h"
-#include "ilo_vma.h"
-#include "ilo_state_zs.h"
-
-static bool
-zs_set_gen6_null_3DSTATE_DEPTH_BUFFER(struct ilo_state_zs *zs,
-                                      const struct ilo_dev *dev)
-{
-   const enum gen_depth_format format = GEN6_ZFORMAT_D32_FLOAT;
-   uint32_t dw1;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      dw1 = GEN6_SURFTYPE_NULL << GEN7_DEPTH_DW1_TYPE__SHIFT |
-            format << GEN7_DEPTH_DW1_FORMAT__SHIFT;
-   } else {
-      dw1 = GEN6_SURFTYPE_NULL << GEN6_DEPTH_DW1_TYPE__SHIFT |
-            GEN6_TILING_Y << GEN6_DEPTH_DW1_TILING__SHIFT |
-            format << GEN6_DEPTH_DW1_FORMAT__SHIFT;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(zs->depth) >= 5);
-   zs->depth[0] = dw1;
-   zs->depth[1] = 0;
-   zs->depth[2] = 0;
-   zs->depth[3] = 0;
-   zs->depth[4] = 0;
-
-   return true;
-}
-
-static bool
-zs_validate_gen6(const struct ilo_dev *dev,
-                 const struct ilo_state_zs_info *info)
-{
-   const struct ilo_image *img = (info->z_img) ? info->z_img : info->s_img;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(!info->z_img == !info->z_vma);
-   assert(!info->s_img == !info->s_vma);
-
-   /* all tiled */
-   if (info->z_img) {
-      assert(info->z_img->tiling == GEN6_TILING_Y);
-      assert(info->z_vma->vm_alignment % 4096 == 0);
-   }
-   if (info->s_img) {
-      assert(info->s_img->tiling == GEN8_TILING_W);
-      assert(info->s_vma->vm_alignment % 4096 == 0);
-   }
-   if (info->hiz_vma) {
-      assert(info->z_img &&
-             ilo_image_can_enable_aux(info->z_img, info->level));
-      assert(info->z_vma->vm_alignment % 4096 == 0);
-   }
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 315:
-    *
-    *     "The stencil buffer has a format of S8_UINT, and shares Surface
-    *      Type, Height, Width, and Depth, Minimum Array Element, Render
-    *      Target View Extent, Depth Coordinate Offset X/Y, LOD, and Depth
-    *      Buffer Object Control State fields of the depth buffer."
-    */
-   if (info->z_img && info->s_img && info->z_img != info->s_img) {
-      assert(info->z_img->type == info->s_img->type &&
-             info->z_img->height0 == info->s_img->height0 &&
-             info->z_img->depth0 == info->s_img->depth0);
-   }
-
-   if (info->type != img->type) {
-      assert(info->type == GEN6_SURFTYPE_2D &&
-             img->type == GEN6_SURFTYPE_CUBE);
-   }
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      switch (info->format) {
-      case GEN6_ZFORMAT_D32_FLOAT:
-      case GEN6_ZFORMAT_D24_UNORM_X8_UINT:
-      case GEN6_ZFORMAT_D16_UNORM:
-         break;
-      default:
-         assert(!"unknown depth format");
-         break;
-      }
-   } else {
-      /*
-       * From the Ironlake PRM, volume 2 part 1, page 330:
-       *
-       *     "If this field (Separate Stencil Buffer Enable) is disabled, the
-       *      Surface Format of the depth buffer cannot be D24_UNORM_X8_UINT."
-       *
-       * From the Sandy Bridge PRM, volume 2 part 1, page 321:
-       *
-       *     "[DevSNB]: This field (Separate Stencil Buffer Enable) must be
-       *      set to the same value (enabled or disabled) as Hierarchical
-       *      Depth Buffer Enable."
-       */
-      if (info->hiz_vma)
-         assert(info->format != GEN6_ZFORMAT_D24_UNORM_S8_UINT);
-      else
-         assert(info->format != GEN6_ZFORMAT_D24_UNORM_X8_UINT);
-   }
-
-   assert(info->level < img->level_count);
-   assert(img->bo_stride);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 323:
-    *
-    *     "For cube maps, Width must be set equal to Height."
-    */
-   if (info->type == GEN6_SURFTYPE_CUBE)
-      assert(img->width0 == img->height0);
-
-   return true;
-}
-
-static void
-zs_get_gen6_max_extent(const struct ilo_dev *dev,
-                       const struct ilo_state_zs_info *info,
-                       uint16_t *max_w, uint16_t *max_h)
-{
-   const uint16_t max_size = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 16384 : 8192;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   switch (info->type) {
-   case GEN6_SURFTYPE_1D:
-      *max_w = max_size;
-      *max_h = 1;
-      break;
-   case GEN6_SURFTYPE_2D:
-   case GEN6_SURFTYPE_CUBE:
-      *max_w = max_size;
-      *max_h = max_size;
-      break;
-   case GEN6_SURFTYPE_3D:
-      *max_w = 2048;
-      *max_h = 2048;
-      break;
-   default:
-      assert(!"invalid surface type");
-      *max_w = 1;
-      *max_h = 1;
-      break;
-   }
-}
-
-static void
-get_gen6_hiz_alignments(const struct ilo_dev *dev,
-                        const struct ilo_image *img,
-                        uint16_t *align_w, uint16_t *align_h)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 313:
-    *
-    *     "A rectangle primitive representing the clear area is delivered. The
-    *      primitive must adhere to the following restrictions on size:
-    *
-    *      - If Number of Multisamples is NUMSAMPLES_1, the rectangle must be
-    *        aligned to an 8x4 pixel block relative to the upper left corner
-    *        of the depth buffer, and contain an integer number of these pixel
-    *        blocks, and all 8x4 pixels must be lit.
-    *      - If Number of Multisamples is NUMSAMPLES_4, the rectangle must be
-    *        aligned to a 4x2 pixel block (8x4 sample block) relative to the
-    *        upper left corner of the depth buffer, and contain an integer
-    *        number of these pixel blocks, and all samples of the 4x2 pixels
-    *        must be lit
-    *      - If Number of Multisamples is NUMSAMPLES_8, the rectangle must be
-    *        aligned to a 2x2 pixel block (8x4 sample block) relative to the
-    *        upper left corner of the depth buffer, and contain an integer
-    *        number of these pixel blocks, and all samples of the 2x2 pixels
-    *        must be list."
-    *
-    * Experiments on Gen7.5 show that HiZ resolve also requires the rectangle
-    * to be aligned to 8x4 sample blocks.  But to be on the safe side, we
-    * always require a level to be aligned when HiZ is enabled.
-    */
-   switch (img->sample_count) {
-   case 1:
-      *align_w = 8;
-      *align_h = 4;
-      break;
-   case 2:
-      *align_w = 4;
-      *align_h = 4;
-      break;
-   case 4:
-      *align_w = 4;
-      *align_h = 2;
-      break;
-   case 8:
-      *align_w = 2;
-      *align_h = 2;
-      break;
-   case 16:
-      *align_w = 2;
-      *align_h = 1;
-      break;
-   default:
-      assert(!"unknown sample count");
-      *align_w = 1;
-      *align_h = 1;
-      break;
-   }
-}
-
-static bool
-zs_get_gen6_depth_extent(const struct ilo_dev *dev,
-                         const struct ilo_state_zs_info *info,
-                         uint16_t *width, uint16_t *height)
-{
-   const struct ilo_image *img = (info->z_img) ? info->z_img : info->s_img;
-   uint16_t w, h, max_w, max_h;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   w = img->width0;
-   h = img->height0;
-
-   if (info->hiz_vma) {
-      uint16_t align_w, align_h;
-
-      get_gen6_hiz_alignments(dev, info->z_img, &align_w, &align_h);
-
-      /*
-       * We want to force 8x4 alignment, but we can do so only for level 0 and
-       * only when it is padded.  ilo_image should know all these.
-       */
-      if (info->level)
-         assert(w % align_w == 0 && h % align_h == 0);
-
-      w = align(w, align_w);
-      h = align(h, align_h);
-   }
-
-   zs_get_gen6_max_extent(dev, info, &max_w, &max_h);
-   assert(w && h && w <= max_w && h <= max_h);
-
-   *width = w - 1;
-   *height = h - 1;
-
-   return true;
-}
-
-static bool
-zs_get_gen6_depth_slices(const struct ilo_dev *dev,
-                         const struct ilo_state_zs_info *info,
-                         uint16_t *depth, uint16_t *min_array_elem,
-                         uint16_t *rt_view_extent)
-{
-   const struct ilo_image *img = (info->z_img) ? info->z_img : info->s_img;
-   uint16_t max_slice, d;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 325:
-    *
-    *     "This field (Depth) specifies the total number of levels for a
-    *      volume texture or the number of array elements allowed to be
-    *      accessed starting at the Minimum Array Element for arrayed
-    *      surfaces. If the volume texture is MIP-mapped, this field specifies
-    *      the depth of the base MIP level."
-    */
-   switch (info->type) {
-   case GEN6_SURFTYPE_1D:
-   case GEN6_SURFTYPE_2D:
-   case GEN6_SURFTYPE_CUBE:
-      max_slice = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 2048 : 512;
-
-      assert(img->array_size <= max_slice);
-      max_slice = img->array_size;
-
-      d = info->slice_count;
-      if (info->type == GEN6_SURFTYPE_CUBE) {
-         /*
-          * Minumum Array Element and Depth must be 0; Render Target View
-          * Extent is ignored.
-          */
-         if (info->slice_base || d != 6) {
-            ilo_warn("no cube array dpeth buffer\n");
-            return false;
-         }
-
-         d /= 6;
-      }
-      break;
-   case GEN6_SURFTYPE_3D:
-      max_slice = 2048;
-
-      assert(img->depth0 <= max_slice);
-      max_slice = u_minify(img->depth0, info->level);
-
-      d = img->depth0;
-      break;
-   default:
-      assert(!"invalid surface type");
-      return false;
-      break;
-   }
-
-   if (!info->slice_count ||
-       info->slice_base + info->slice_count > max_slice) {
-      ilo_warn("invalid slice range\n");
-      return false;
-   }
-
-   assert(d);
-   *depth = d - 1;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 325:
-    *
-    *     "For 1D and 2D Surfaces:
-    *      This field (Minimum Array Element) indicates the minimum array
-    *      element that can be accessed as part of this surface. The delivered
-    *      array index is added to this field before being used to address the
-    *      surface.
-    *
-    *      For 3D Surfaces:
-    *      This field indicates the minimum `R' coordinate on the LOD
-    *      currently being rendered to.  This field is added to the delivered
-    *      array index before it is used to address the surface.
-    *
-    *      For Other Surfaces:
-    *      This field is ignored."
-    */
-   *min_array_elem = info->slice_base;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 326:
-    *
-    *     "For 3D Surfaces:
-    *      This field (Render Target View Extent) indicates the extent of the
-    *      accessible `R' coordinates minus 1 on the LOD currently being
-    *      rendered to.
-    *
-    *      For 1D and 2D Surfaces:
-    *      This field must be set to the same value as the Depth field.
-    *
-    *      For Other Surfaces:
-    *      This field is ignored."
-    */
-   *rt_view_extent = info->slice_count - 1;
-
-   return true;
-}
-
-static bool
-zs_set_gen6_3DSTATE_DEPTH_BUFFER(struct ilo_state_zs *zs,
-                                 const struct ilo_dev *dev,
-                                 const struct ilo_state_zs_info *info)
-{
-   uint16_t width, height, depth, array_base, view_extent;
-   uint32_t dw1, dw2, dw3, dw4;
-
-   ILO_DEV_ASSERT(dev, 6, 6);
-
-   if (!zs_validate_gen6(dev, info) ||
-       !zs_get_gen6_depth_extent(dev, info, &width, &height) ||
-       !zs_get_gen6_depth_slices(dev, info, &depth, &array_base,
-                                 &view_extent))
-      return false;
-
-   /* info->z_readonly and info->s_readonly are ignored on Gen6 */
-   dw1 = info->type << GEN6_DEPTH_DW1_TYPE__SHIFT |
-         GEN6_TILING_Y << GEN6_DEPTH_DW1_TILING__SHIFT |
-         info->format << GEN6_DEPTH_DW1_FORMAT__SHIFT;
-
-   if (info->z_img)
-      dw1 |= (info->z_img->bo_stride - 1) << GEN6_DEPTH_DW1_PITCH__SHIFT;
-
-   if (info->hiz_vma || !info->z_img) {
-      dw1 |= GEN6_DEPTH_DW1_HIZ_ENABLE |
-             GEN6_DEPTH_DW1_SEPARATE_STENCIL;
-   }
-
-   dw2 = 0;
-   dw3 = height << GEN6_DEPTH_DW3_HEIGHT__SHIFT |
-         width << GEN6_DEPTH_DW3_WIDTH__SHIFT |
-         info->level << GEN6_DEPTH_DW3_LOD__SHIFT |
-         GEN6_DEPTH_DW3_MIPLAYOUT_BELOW;
-   dw4 = depth << GEN6_DEPTH_DW4_DEPTH__SHIFT |
-         array_base << GEN6_DEPTH_DW4_MIN_ARRAY_ELEMENT__SHIFT |
-         view_extent << GEN6_DEPTH_DW4_RT_VIEW_EXTENT__SHIFT;
-
-   STATIC_ASSERT(ARRAY_SIZE(zs->depth) >= 5);
-   zs->depth[0] = dw1;
-   zs->depth[1] = dw2;
-   zs->depth[2] = dw3;
-   zs->depth[3] = dw4;
-   zs->depth[4] = 0;
-
-   return true;
-}
-
-static bool
-zs_set_gen7_3DSTATE_DEPTH_BUFFER(struct ilo_state_zs *zs,
-                                 const struct ilo_dev *dev,
-                                 const struct ilo_state_zs_info *info)
-{
-   uint16_t width, height, depth;
-   uint16_t array_base, view_extent;
-   uint32_t dw1, dw2, dw3, dw4, dw6;
-
-   ILO_DEV_ASSERT(dev, 7, 8);
-
-   if (!zs_validate_gen6(dev, info) ||
-       !zs_get_gen6_depth_extent(dev, info, &width, &height) ||
-       !zs_get_gen6_depth_slices(dev, info, &depth, &array_base,
-                                 &view_extent))
-      return false;
-
-   dw1 = info->type << GEN7_DEPTH_DW1_TYPE__SHIFT |
-         info->format << GEN7_DEPTH_DW1_FORMAT__SHIFT;
-
-   if (info->z_img) {
-      if (!info->z_readonly)
-         dw1 |= GEN7_DEPTH_DW1_DEPTH_WRITE_ENABLE;
-      if (info->hiz_vma)
-         dw1 |= GEN7_DEPTH_DW1_HIZ_ENABLE;
-
-      dw1 |= (info->z_img->bo_stride - 1) << GEN7_DEPTH_DW1_PITCH__SHIFT;
-   }
-
-   if (info->s_img && !info->s_readonly)
-      dw1 |= GEN7_DEPTH_DW1_STENCIL_WRITE_ENABLE;
-
-   dw2 = 0;
-   dw3 = height << GEN7_DEPTH_DW3_HEIGHT__SHIFT |
-         width << GEN7_DEPTH_DW3_WIDTH__SHIFT |
-         info->level << GEN7_DEPTH_DW3_LOD__SHIFT;
-   dw4 = depth << GEN7_DEPTH_DW4_DEPTH__SHIFT |
-         array_base << GEN7_DEPTH_DW4_MIN_ARRAY_ELEMENT__SHIFT;
-   dw6 = view_extent << GEN7_DEPTH_DW6_RT_VIEW_EXTENT__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8) && info->z_img) {
-      assert(info->z_img->walk_layer_height % 4 == 0);
-      /* note that DW is off-by-one for Gen8+ */
-      dw6 |= (info->z_img->walk_layer_height / 4) <<
-         GEN8_DEPTH_DW7_QPITCH__SHIFT;
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(zs->depth) >= 5);
-   zs->depth[0] = dw1;
-   zs->depth[1] = dw2;
-   zs->depth[2] = dw3;
-   zs->depth[3] = dw4;
-   zs->depth[4] = dw6;
-
-   return true;
-}
-
-static bool
-zs_set_gen6_null_3DSTATE_STENCIL_BUFFER(struct ilo_state_zs *zs,
-                                        const struct ilo_dev *dev)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   STATIC_ASSERT(ARRAY_SIZE(zs->stencil) >= 3);
-   zs->stencil[0] = 0;
-   zs->stencil[1] = 0;
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      zs->stencil[2] = 0;
-
-   return true;
-}
-
-static bool
-zs_set_gen6_3DSTATE_STENCIL_BUFFER(struct ilo_state_zs *zs,
-                                   const struct ilo_dev *dev,
-                                   const struct ilo_state_zs_info *info)
-{
-   const struct ilo_image *img = info->s_img;
-   uint32_t dw1, dw2;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(img->bo_stride);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 329:
-    *
-    *     "The pitch must be set to 2x the value computed based on width, as
-    *      the stencil buffer is stored with two rows interleaved."
-    *
-    * For Gen7+, we still dobule the stride because we did not double the
-    * slice widths when initializing ilo_image.
-    */
-   dw1 = (img->bo_stride * 2 - 1) << GEN6_STENCIL_DW1_PITCH__SHIFT;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-      dw1 |= GEN75_STENCIL_DW1_STENCIL_BUFFER_ENABLE;
-
-   dw2 = 0;
-   /* offset to the level as Gen6 does not support mipmapped stencil */
-   if (ilo_dev_gen(dev) == ILO_GEN(6)) {
-      unsigned x, y;
-
-      ilo_image_get_slice_pos(img, info->level, 0, &x, &y);
-      ilo_image_pos_to_mem(img, x, y, &x, &y);
-      dw2 |= ilo_image_mem_to_raw(img, x, y);
-   }
-
-   STATIC_ASSERT(ARRAY_SIZE(zs->stencil) >= 3);
-   zs->stencil[0] = dw1;
-   zs->stencil[1] = dw2;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      uint32_t dw4;
-
-      assert(img->walk_layer_height % 4 == 0);
-      dw4 = (img->walk_layer_height / 4) << GEN8_STENCIL_DW4_QPITCH__SHIFT;
-
-      zs->stencil[2] = dw4;
-   }
-
-   return true;
-}
-
-static bool
-zs_set_gen6_null_3DSTATE_HIER_DEPTH_BUFFER(struct ilo_state_zs *zs,
-                                           const struct ilo_dev *dev)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   STATIC_ASSERT(ARRAY_SIZE(zs->hiz) >= 3);
-   zs->hiz[0] = 0;
-   zs->hiz[1] = 0;
-   if (ilo_dev_gen(dev) >= ILO_GEN(8))
-      zs->hiz[2] = 0;
-
-   return true;
-}
-
-static bool
-zs_set_gen6_3DSTATE_HIER_DEPTH_BUFFER(struct ilo_state_zs *zs,
-                                      const struct ilo_dev *dev,
-                                      const struct ilo_state_zs_info *info)
-{
-   const struct ilo_image *img = info->z_img;
-   uint32_t dw1, dw2;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   assert(img->aux.bo_stride);
-
-   dw1 = (img->aux.bo_stride - 1) << GEN6_HIZ_DW1_PITCH__SHIFT;
-
-   dw2 = 0;
-   /* offset to the level as Gen6 does not support mipmapped HiZ */
-   if (ilo_dev_gen(dev) == ILO_GEN(6))
-      dw2 |= img->aux.walk_lod_offsets[info->level];
-
-   STATIC_ASSERT(ARRAY_SIZE(zs->hiz) >= 3);
-   zs->hiz[0] = dw1;
-   zs->hiz[1] = dw2;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(8)) {
-      uint32_t dw4;
-
-      assert(img->aux.walk_layer_height % 4 == 0);
-      dw4 = (img->aux.walk_layer_height / 4) << GEN8_HIZ_DW4_QPITCH__SHIFT;
-
-      zs->hiz[2] = dw4;
-   }
-
-   return true;
-}
-
-bool
-ilo_state_zs_init(struct ilo_state_zs *zs, const struct ilo_dev *dev,
-                  const struct ilo_state_zs_info *info)
-{
-   bool ret = true;
-
-   assert(ilo_is_zeroed(zs, sizeof(*zs)));
-
-   if (info->z_img || info->s_img) {
-      if (ilo_dev_gen(dev) >= ILO_GEN(7))
-         ret &= zs_set_gen7_3DSTATE_DEPTH_BUFFER(zs, dev, info);
-      else
-         ret &= zs_set_gen6_3DSTATE_DEPTH_BUFFER(zs, dev, info);
-   } else {
-      ret &= zs_set_gen6_null_3DSTATE_DEPTH_BUFFER(zs, dev);
-   }
-
-   if (info->s_img)
-      ret &= zs_set_gen6_3DSTATE_STENCIL_BUFFER(zs, dev, info);
-   else
-      ret &= zs_set_gen6_null_3DSTATE_STENCIL_BUFFER(zs, dev);
-
-   if (info->z_img && info->hiz_vma)
-      ret &= zs_set_gen6_3DSTATE_HIER_DEPTH_BUFFER(zs, dev, info);
-   else
-      ret &= zs_set_gen6_null_3DSTATE_HIER_DEPTH_BUFFER(zs, dev);
-
-   zs->z_vma = info->z_vma;
-   zs->s_vma = info->s_vma;
-   zs->hiz_vma = info->hiz_vma;
-
-   zs->z_readonly = info->z_readonly;
-   zs->s_readonly = info->s_readonly;
-
-   assert(ret);
-
-   return ret;
-}
-
-bool
-ilo_state_zs_init_for_null(struct ilo_state_zs *zs,
-                           const struct ilo_dev *dev)
-{
-   struct ilo_state_zs_info info;
-
-   memset(&info, 0, sizeof(info));
-   info.type = GEN6_SURFTYPE_NULL;
-   info.format = GEN6_ZFORMAT_D32_FLOAT;
-
-   return ilo_state_zs_init(zs, dev, &info);
-}
-
-bool
-ilo_state_zs_disable_hiz(struct ilo_state_zs *zs,
-                         const struct ilo_dev *dev)
-{
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   /*
-    * Separate stencil must be disabled simultaneously on Gen6.  We can make
-    * it work when there is no stencil buffer, but it is probably not worth
-    * it.
-    */
-   assert(ilo_dev_gen(dev) >= ILO_GEN(7));
-
-   if (zs->hiz_vma) {
-      zs->depth[0] &= ~GEN7_DEPTH_DW1_HIZ_ENABLE;
-      zs_set_gen6_null_3DSTATE_HIER_DEPTH_BUFFER(zs, dev);
-      zs->hiz_vma = NULL;
-   }
-
-   return true;
-}
diff --git a/src/gallium/drivers/ilo/core/ilo_state_zs.h b/src/gallium/drivers/ilo/core/ilo_state_zs.h
deleted file mode 100644 (file)
index 6a25a87..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_ZS_H
-#define ILO_STATE_ZS_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_core.h"
-#include "ilo_dev.h"
-
-struct ilo_vma;
-struct ilo_image;
-
-struct ilo_state_zs_info {
-   /* both optional */
-   const struct ilo_image *z_img;
-   const struct ilo_image *s_img;
-   uint8_t level;
-   uint16_t slice_base;
-   uint16_t slice_count;
-
-   const struct ilo_vma *z_vma;
-   const struct ilo_vma *s_vma;
-   const struct ilo_vma *hiz_vma;
-
-   enum gen_surface_type type;
-   enum gen_depth_format format;
-
-   /* ignored prior to Gen7 */
-   bool z_readonly;
-   bool s_readonly;
-};
-
-struct ilo_state_zs {
-   uint32_t depth[5];
-   uint32_t stencil[3];
-   uint32_t hiz[3];
-
-   const struct ilo_vma *z_vma;
-   const struct ilo_vma *s_vma;
-   const struct ilo_vma *hiz_vma;
-
-   bool z_readonly;
-   bool s_readonly;
-};
-
-bool
-ilo_state_zs_init(struct ilo_state_zs *zs,
-                  const struct ilo_dev *dev,
-                  const struct ilo_state_zs_info *info);
-
-bool
-ilo_state_zs_init_for_null(struct ilo_state_zs *zs,
-                           const struct ilo_dev *dev);
-
-bool
-ilo_state_zs_disable_hiz(struct ilo_state_zs *zs,
-                         const struct ilo_dev *dev);
-
-#endif /* ILO_STATE_ZS_H */
diff --git a/src/gallium/drivers/ilo/core/ilo_vma.h b/src/gallium/drivers/ilo/core/ilo_vma.h
deleted file mode 100644 (file)
index ad2a1d4..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2015 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_VMA_H
-#define ILO_VMA_H
-
-#include "ilo_core.h"
-#include "ilo_debug.h"
-#include "ilo_dev.h"
-
-struct intel_bo;
-
-/**
- * A virtual memory area.
- */
-struct ilo_vma {
-   /* address space */
-   uint32_t vm_size;
-   uint32_t vm_alignment;
-
-   /* backing storage */
-   struct intel_bo *bo;
-   uint32_t bo_offset;
-};
-
-static inline bool
-ilo_vma_init(struct ilo_vma *vma, const struct ilo_dev *dev,
-             uint32_t size, uint32_t alignment)
-{
-   assert(ilo_is_zeroed(vma, sizeof(*vma)));
-   assert(size && alignment);
-
-   vma->vm_alignment = alignment;
-   vma->vm_size = size;
-
-   return true;
-}
-
-static inline void
-ilo_vma_set_bo(struct ilo_vma *vma, const struct ilo_dev *dev,
-               struct intel_bo *bo, uint32_t offset)
-{
-   assert(offset % vma->vm_alignment == 0);
-
-   vma->bo = bo;
-   vma->bo_offset = offset;
-}
-
-#endif /* ILO_VMA_H */
diff --git a/src/gallium/drivers/ilo/core/intel_winsys.h b/src/gallium/drivers/ilo/core/intel_winsys.h
deleted file mode 100644 (file)
index afd038c..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef INTEL_WINSYS_H
-#define INTEL_WINSYS_H
-
-#include "pipe/p_compiler.h"
-
-/* this is compatible with i915_drm.h's definitions */
-enum intel_ring_type {
-   INTEL_RING_RENDER    = 1,
-   INTEL_RING_BSD       = 2,
-   INTEL_RING_BLT       = 3,
-   INTEL_RING_VEBOX     = 4,
-};
-
-/* this is compatible with i915_drm.h's definitions */
-enum intel_exec_flag {
-   INTEL_EXEC_GEN7_SOL_RESET  = 1 << 8,
-};
-
-/* this is compatible with i915_drm.h's definitions */
-enum intel_reloc_flag {
-   INTEL_RELOC_FENCE          = 1 << 0,
-   INTEL_RELOC_GGTT           = 1 << 1,
-   INTEL_RELOC_WRITE          = 1 << 2,
-};
-
-/* this is compatible with i915_drm.h's definitions */
-enum intel_tiling_mode {
-   INTEL_TILING_NONE = 0,
-   INTEL_TILING_X    = 1,
-   INTEL_TILING_Y    = 2,
-};
-
-struct winsys_handle;
-struct intel_winsys;
-struct intel_context;
-struct intel_bo;
-
-struct intel_winsys_info {
-   int devid;
-
-   /* the sizes of the aperture in bytes */
-   size_t aperture_total;
-   size_t aperture_mappable;
-
-   bool has_llc;
-   bool has_address_swizzling;
-   bool has_logical_context;
-   bool has_ppgtt;
-
-   /* valid registers for intel_winsys_read_reg() */
-   bool has_timestamp;
-
-   /* valid flags for intel_winsys_submit_bo() */
-   bool has_gen7_sol_reset;
-};
-
-void
-intel_winsys_destroy(struct intel_winsys *winsys);
-
-const struct intel_winsys_info *
-intel_winsys_get_info(const struct intel_winsys *winsys);
-
-/**
- * Create a logical context for use with the render ring.
- */
-struct intel_context *
-intel_winsys_create_context(struct intel_winsys *winsys);
-
-/**
- * Destroy a logical context.
- */
-void
-intel_winsys_destroy_context(struct intel_winsys *winsys,
-                             struct intel_context *ctx);
-
-/**
- * Read a register.  Only registers that are considered safe, such as
- *
- *   TIMESTAMP (0x2358)
- *
- * can be read.
- */
-int
-intel_winsys_read_reg(struct intel_winsys *winsys,
-                      uint32_t reg, uint64_t *val);
-
-/**
- * Return the numbers of submissions lost due to GPU reset.
- *
- * \param active_lost      Number of lost active/guilty submissions
- * \param pending_lost     Number of lost pending/innocent submissions
- */
-int
-intel_winsys_get_reset_stats(struct intel_winsys *winsys,
-                             struct intel_context *ctx,
-                             uint32_t *active_lost,
-                             uint32_t *pending_lost);
-/**
- * Allocate a buffer object.
- *
- * \param name             Informative description of the bo.
- * \param size             Size of the bo.
- * \param cpu_init         Will be initialized by CPU.
- */
-struct intel_bo *
-intel_winsys_alloc_bo(struct intel_winsys *winsys,
-                      const char *name,
-                      unsigned long size,
-                      bool cpu_init);
-
-/**
- * Create a bo from a user memory pointer.  Both \p userptr and \p size must
- * be page aligned.
- */
-struct intel_bo *
-intel_winsys_import_userptr(struct intel_winsys *winsys,
-                            const char *name,
-                            void *userptr,
-                            unsigned long size,
-                            unsigned long flags);
-
-/**
- * Create a bo from a winsys handle.
- */
-struct intel_bo *
-intel_winsys_import_handle(struct intel_winsys *winsys,
-                           const char *name,
-                           const struct winsys_handle *handle,
-                           unsigned long height,
-                           enum intel_tiling_mode *tiling,
-                           unsigned long *pitch);
-
-/**
- * Export \p bo as a winsys handle for inter-process sharing.  \p tiling and
- * \p pitch must match those set by \p intel_bo_set_tiling().
- */
-int
-intel_winsys_export_handle(struct intel_winsys *winsys,
-                           struct intel_bo *bo,
-                           enum intel_tiling_mode tiling,
-                           unsigned long pitch,
-                           unsigned long height,
-                           struct winsys_handle *handle);
-
-/**
- * Return true when buffer objects directly specified in \p bo_array, and
- * those indirectly referenced by them, can fit in the aperture space.
- */
-bool
-intel_winsys_can_submit_bo(struct intel_winsys *winsys,
-                           struct intel_bo **bo_array,
-                           int count);
-
-/**
- * Submit \p bo for execution.
- *
- * \p bo and all bos referenced by \p bo will be considered busy until all
- * commands are parsed and executed.  \p ctx is ignored when the bo is not
- * submitted to the render ring.
- */
-int
-intel_winsys_submit_bo(struct intel_winsys *winsys,
-                       enum intel_ring_type ring,
-                       struct intel_bo *bo, int used,
-                       struct intel_context *ctx,
-                       unsigned long flags);
-
-/**
- * Decode the commands contained in \p bo.  For debugging.
- *
- * \param bo      Batch buffer to decode.
- * \param used    Size of the commands in bytes.
- */
-void
-intel_winsys_decode_bo(struct intel_winsys *winsys,
-                       struct intel_bo *bo, int used);
-
-/**
- * Increase the reference count of \p bo.  No-op when \p bo is NULL.
- */
-struct intel_bo *
-intel_bo_ref(struct intel_bo *bo);
-
-/**
- * Decrease the reference count of \p bo.  When the reference count reaches
- * zero, \p bo is destroyed.  No-op when \p bo is NULL.
- */
-void
-intel_bo_unref(struct intel_bo *bo);
-
-/**
- * Set the tiling of \p bo.  The info is used by GTT mapping and bo export.
- */
-int
-intel_bo_set_tiling(struct intel_bo *bo,
-                    enum intel_tiling_mode tiling,
-                    unsigned long pitch);
-
-/**
- * Map \p bo for CPU access.  Recursive mapping is allowed.
- *
- * map() maps the backing store into CPU address space, cached.  It will block
- * if the bo is busy.  This variant allows fastest random reads and writes,
- * but the caller needs to handle tiling or swizzling manually if the bo is
- * tiled or swizzled.  If write is enabled and there is no shared last-level
- * cache (LLC), the CPU cache will be flushed, which is expensive.
- *
- * map_gtt() maps the bo for MMIO access, uncached but write-combined.  It
- * will block if the bo is busy.  This variant promises a reasonable speed for
- * sequential writes, but reads would be very slow.  Callers always have a
- * linear view of the bo.
- *
- * map_async() and map_gtt_async() work similar to map() and map_gtt()
- * respectively, except that they do not block.
- */
-void *
-intel_bo_map(struct intel_bo *bo, bool write_enable);
-
-void *
-intel_bo_map_async(struct intel_bo *bo);
-
-void *
-intel_bo_map_gtt(struct intel_bo *bo);
-
-void *
-intel_bo_map_gtt_async(struct intel_bo *bo);
-
-/**
- * Unmap \p bo.
- */
-void
-intel_bo_unmap(struct intel_bo *bo);
-
-/**
- * Write data to \p bo.
- */
-int
-intel_bo_pwrite(struct intel_bo *bo, unsigned long offset,
-                unsigned long size, const void *data);
-
-/**
- * Read data from the bo.
- */
-int
-intel_bo_pread(struct intel_bo *bo, unsigned long offset,
-               unsigned long size, void *data);
-
-/**
- * Add \p target_bo to the relocation list.
- *
- * When \p bo is submitted for execution, and if \p target_bo has moved,
- * the kernel will patch \p bo at \p offset to \p target_bo->offset plus
- * \p target_offset.
- *
- * \p presumed_offset should be written to \p bo at \p offset.
- */
-int
-intel_bo_add_reloc(struct intel_bo *bo, uint32_t offset,
-                   struct intel_bo *target_bo, uint32_t target_offset,
-                   uint32_t flags, uint64_t *presumed_offset);
-
-/**
- * Return the current number of relocations.
- */
-int
-intel_bo_get_reloc_count(struct intel_bo *bo);
-
-/**
- * Truncate all relocations except the first \p start ones.
- *
- * Combined with \p intel_bo_get_reloc_count(), they can be used to undo the
- * \p intel_bo_add_reloc() calls that were just made.
- */
-void
-intel_bo_truncate_relocs(struct intel_bo *bo, int start);
-
-/**
- * Return true if \p target_bo is on the relocation list of \p bo, or on
- * the relocation list of some bo that is referenced by \p bo.
- */
-bool
-intel_bo_has_reloc(struct intel_bo *bo, struct intel_bo *target_bo);
-
-/**
- * Wait until \bo is idle, or \p timeout nanoseconds have passed.  A
- * negative timeout means to wait indefinitely.
- *
- * \return 0 only when \p bo is idle
- */
-int
-intel_bo_wait(struct intel_bo *bo, int64_t timeout);
-
-/**
- * Return true if \p bo is busy.
- */
-static inline bool
-intel_bo_is_busy(struct intel_bo *bo)
-{
-   return (intel_bo_wait(bo, 0) != 0);
-}
-
-#endif /* INTEL_WINSYS_H */
diff --git a/src/gallium/drivers/ilo/genhw/gen_blitter.xml.h b/src/gallium/drivers/ilo/genhw/gen_blitter.xml.h
deleted file mode 100644 (file)
index 6d58e02..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-#ifndef GEN_BLITTER_XML
-#define GEN_BLITTER_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-#define GEN6_BLITTER_TYPE__MASK                                        0xe0000000
-#define GEN6_BLITTER_TYPE__SHIFT                               29
-#define GEN6_BLITTER_TYPE_BLITTER                              (0x2 << 29)
-#define GEN6_BLITTER_OPCODE__MASK                              0x1fc00000
-#define GEN6_BLITTER_OPCODE__SHIFT                             22
-#define GEN6_BLITTER_OPCODE_COLOR_BLT                          (0x40 << 22)
-#define GEN6_BLITTER_OPCODE_SRC_COPY_BLT                       (0x43 << 22)
-#define GEN6_BLITTER_OPCODE_XY_COLOR_BLT                       (0x50 << 22)
-#define GEN6_BLITTER_OPCODE_XY_SRC_COPY_BLT                    (0x53 << 22)
-#define GEN6_BLITTER_BR00_WRITE_A                              (0x1 << 21)
-#define GEN6_BLITTER_BR00_WRITE_RGB                            (0x1 << 20)
-#define GEN6_BLITTER_BR00_SRC_TILED                            (0x1 << 15)
-#define GEN6_BLITTER_BR00_DST_TILED                            (0x1 << 11)
-#define GEN6_BLITTER_LENGTH__MASK                              0x0000003f
-#define GEN6_BLITTER_LENGTH__SHIFT                             0
-#define GEN6_BLITTER_BR13_DIR_RTL                              (0x1 << 30)
-#define GEN6_BLITTER_BR13_CLIP_ENABLE                          (0x1 << 30)
-#define GEN6_BLITTER_BR13_FORMAT__MASK                         0x03000000
-#define GEN6_BLITTER_BR13_FORMAT__SHIFT                                24
-#define GEN6_BLITTER_BR13_FORMAT_8                             (0x0 << 24)
-#define GEN6_BLITTER_BR13_FORMAT_565                           (0x1 << 24)
-#define GEN6_BLITTER_BR13_FORMAT_1555                          (0x2 << 24)
-#define GEN6_BLITTER_BR13_FORMAT_8888                          (0x3 << 24)
-#define GEN6_BLITTER_BR13_ROP__MASK                            0x00ff0000
-#define GEN6_BLITTER_BR13_ROP__SHIFT                           16
-#define GEN6_BLITTER_BR13_ROP_SRCCOPY                          (0xcc << 16)
-#define GEN6_BLITTER_BR13_ROP_PATCOPY                          (0xf0 << 16)
-#define GEN6_BLITTER_BR13_DST_PITCH__MASK                      0x0000ffff
-#define GEN6_BLITTER_BR13_DST_PITCH__SHIFT                     0
-#define GEN6_BLITTER_BR11_SRC_PITCH__MASK                      0x0000ffff
-#define GEN6_BLITTER_BR11_SRC_PITCH__SHIFT                     0
-#define GEN6_BLITTER_BR14_DST_HEIGHT__MASK                     0xffff0000
-#define GEN6_BLITTER_BR14_DST_HEIGHT__SHIFT                    16
-#define GEN6_BLITTER_BR14_DST_WIDTH__MASK                      0x0000ffff
-#define GEN6_BLITTER_BR14_DST_WIDTH__SHIFT                     0
-#define GEN6_BLITTER_BR22_DST_Y1__MASK                         0xffff0000
-#define GEN6_BLITTER_BR22_DST_Y1__SHIFT                                16
-#define GEN6_BLITTER_BR22_DST_X1__MASK                         0x0000ffff
-#define GEN6_BLITTER_BR22_DST_X1__SHIFT                                0
-#define GEN6_BLITTER_BR23_DST_Y2__MASK                         0xffff0000
-#define GEN6_BLITTER_BR23_DST_Y2__SHIFT                                16
-#define GEN6_BLITTER_BR23_DST_X2__MASK                         0x0000ffff
-#define GEN6_BLITTER_BR23_DST_X2__SHIFT                                0
-#define GEN6_BLITTER_BR26_SRC_Y1__MASK                         0xffff0000
-#define GEN6_BLITTER_BR26_SRC_Y1__SHIFT                                16
-#define GEN6_BLITTER_BR26_SRC_X1__MASK                         0x0000ffff
-#define GEN6_BLITTER_BR26_SRC_X1__SHIFT                                0
-#define GEN6_COLOR_BLT__SIZE                                   6
-
-
-
-
-
-
-
-
-#define GEN6_SRC_COPY_BLT__SIZE                                        8
-
-
-
-
-
-
-
-
-
-
-
-#define GEN6_XY_COLOR_BLT__SIZE                                        7
-
-
-
-
-
-
-
-
-
-#define GEN6_XY_SRC_COPY_BLT__SIZE                             10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#endif /* GEN_BLITTER_XML */
diff --git a/src/gallium/drivers/ilo/genhw/gen_eu_isa.xml.h b/src/gallium/drivers/ilo/genhw/gen_eu_isa.xml.h
deleted file mode 100644 (file)
index f91fa5f..0000000
+++ /dev/null
@@ -1,563 +0,0 @@
-#ifndef GEN_EU_ISA_XML
-#define GEN_EU_ISA_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-enum gen_eu_opcode {
-    GEN6_OPCODE_ILLEGAL                                              = 0x0,
-    GEN6_OPCODE_MOV                                          = 0x1,
-    GEN6_OPCODE_SEL                                          = 0x2,
-    GEN6_OPCODE_MOVI                                         = 0x3,
-    GEN6_OPCODE_NOT                                          = 0x4,
-    GEN6_OPCODE_AND                                          = 0x5,
-    GEN6_OPCODE_OR                                           = 0x6,
-    GEN6_OPCODE_XOR                                          = 0x7,
-    GEN6_OPCODE_SHR                                          = 0x8,
-    GEN6_OPCODE_SHL                                          = 0x9,
-    GEN6_OPCODE_DIM                                          = 0xa,
-    GEN6_OPCODE_ASR                                          = 0xc,
-    GEN6_OPCODE_CMP                                          = 0x10,
-    GEN6_OPCODE_CMPN                                         = 0x11,
-    GEN7_OPCODE_CSEL                                         = 0x12,
-    GEN7_OPCODE_F32TO16                                              = 0x13,
-    GEN7_OPCODE_F16TO32                                              = 0x14,
-    GEN7_OPCODE_BFREV                                        = 0x17,
-    GEN7_OPCODE_BFE                                          = 0x18,
-    GEN7_OPCODE_BFI1                                         = 0x19,
-    GEN7_OPCODE_BFI2                                         = 0x1a,
-    GEN6_OPCODE_JMPI                                         = 0x20,
-    GEN7_OPCODE_BRD                                          = 0x21,
-    GEN6_OPCODE_IF                                           = 0x22,
-    GEN7_OPCODE_BRC                                          = 0x23,
-    GEN6_OPCODE_ELSE                                         = 0x24,
-    GEN6_OPCODE_ENDIF                                        = 0x25,
-    GEN6_OPCODE_CASE                                         = 0x26,
-    GEN6_OPCODE_WHILE                                        = 0x27,
-    GEN6_OPCODE_BREAK                                        = 0x28,
-    GEN6_OPCODE_CONT                                         = 0x29,
-    GEN6_OPCODE_HALT                                         = 0x2a,
-    GEN75_OPCODE_CALLA                                       = 0x2b,
-    GEN6_OPCODE_CALL                                         = 0x2c,
-    GEN6_OPCODE_RETURN                                       = 0x2d,
-    GEN8_OPCODE_GOTO                                         = 0x2e,
-    GEN6_OPCODE_WAIT                                         = 0x30,
-    GEN6_OPCODE_SEND                                         = 0x31,
-    GEN6_OPCODE_SENDC                                        = 0x32,
-    GEN6_OPCODE_MATH                                         = 0x38,
-    GEN6_OPCODE_ADD                                          = 0x40,
-    GEN6_OPCODE_MUL                                          = 0x41,
-    GEN6_OPCODE_AVG                                          = 0x42,
-    GEN6_OPCODE_FRC                                          = 0x43,
-    GEN6_OPCODE_RNDU                                         = 0x44,
-    GEN6_OPCODE_RNDD                                         = 0x45,
-    GEN6_OPCODE_RNDE                                         = 0x46,
-    GEN6_OPCODE_RNDZ                                         = 0x47,
-    GEN6_OPCODE_MAC                                          = 0x48,
-    GEN6_OPCODE_MACH                                         = 0x49,
-    GEN6_OPCODE_LZD                                          = 0x4a,
-    GEN7_OPCODE_FBH                                          = 0x4b,
-    GEN7_OPCODE_FBL                                          = 0x4c,
-    GEN7_OPCODE_CBIT                                         = 0x4d,
-    GEN7_OPCODE_ADDC                                         = 0x4e,
-    GEN7_OPCODE_SUBB                                         = 0x4f,
-    GEN6_OPCODE_SAD2                                         = 0x50,
-    GEN6_OPCODE_SADA2                                        = 0x51,
-    GEN6_OPCODE_DP4                                          = 0x54,
-    GEN6_OPCODE_DPH                                          = 0x55,
-    GEN6_OPCODE_DP3                                          = 0x56,
-    GEN6_OPCODE_DP2                                          = 0x57,
-    GEN6_OPCODE_LINE                                         = 0x59,
-    GEN6_OPCODE_PLN                                          = 0x5a,
-    GEN6_OPCODE_MAD                                          = 0x5b,
-    GEN6_OPCODE_LRP                                          = 0x5c,
-    GEN6_OPCODE_NOP                                          = 0x7e,
-};
-
-enum gen_eu_access_mode {
-    GEN6_ALIGN_1                                             = 0x0,
-    GEN6_ALIGN_16                                            = 0x1,
-};
-
-enum gen_eu_mask_control {
-    GEN6_MASKCTRL_NORMAL                                     = 0x0,
-    GEN6_MASKCTRL_NOMASK                                     = 0x1,
-};
-
-enum gen_eu_dependency_control {
-    GEN6_DEPCTRL_NORMAL                                              = 0x0,
-    GEN6_DEPCTRL_NODDCLR                                     = 0x1,
-    GEN6_DEPCTRL_NODDCHK                                     = 0x2,
-    GEN6_DEPCTRL_NEITHER                                     = 0x3,
-};
-
-enum gen_eu_quarter_control {
-    GEN6_QTRCTRL_1Q                                          = 0x0,
-    GEN6_QTRCTRL_2Q                                          = 0x1,
-    GEN6_QTRCTRL_3Q                                          = 0x2,
-    GEN6_QTRCTRL_4Q                                          = 0x3,
-    GEN6_QTRCTRL_1H                                          = 0x0,
-    GEN6_QTRCTRL_2H                                          = 0x2,
-};
-
-enum gen_eu_thread_control {
-    GEN6_THREADCTRL_NORMAL                                   = 0x0,
-    GEN6_THREADCTRL_ATOMIC                                   = 0x1,
-    GEN6_THREADCTRL_SWITCH                                   = 0x2,
-};
-
-enum gen_eu_predicate_control {
-    GEN6_PREDCTRL_NONE                                       = 0x0,
-    GEN6_PREDCTRL_NORMAL                                     = 0x1,
-    GEN6_PREDCTRL_ANYV                                       = 0x2,
-    GEN6_PREDCTRL_ALLV                                       = 0x3,
-    GEN6_PREDCTRL_ANY2H                                              = 0x4,
-    GEN6_PREDCTRL_ALL2H                                              = 0x5,
-    GEN6_PREDCTRL_X                                          = 0x2,
-    GEN6_PREDCTRL_Y                                          = 0x3,
-    GEN6_PREDCTRL_Z                                          = 0x4,
-    GEN6_PREDCTRL_W                                          = 0x5,
-    GEN6_PREDCTRL_ANY4H                                              = 0x6,
-    GEN6_PREDCTRL_ALL4H                                              = 0x7,
-    GEN6_PREDCTRL_ANY8H                                              = 0x8,
-    GEN6_PREDCTRL_ALL8H                                              = 0x9,
-    GEN6_PREDCTRL_ANY16H                                     = 0xa,
-    GEN6_PREDCTRL_ALL16H                                     = 0xb,
-    GEN7_PREDCTRL_ANY32H                                     = 0xc,
-    GEN7_PREDCTRL_ALL32H                                     = 0xd,
-};
-
-enum gen_eu_exec_size {
-    GEN6_EXECSIZE_1                                          = 0x0,
-    GEN6_EXECSIZE_2                                          = 0x1,
-    GEN6_EXECSIZE_4                                          = 0x2,
-    GEN6_EXECSIZE_8                                          = 0x3,
-    GEN6_EXECSIZE_16                                         = 0x4,
-    GEN6_EXECSIZE_32                                         = 0x5,
-};
-
-enum gen_eu_condition_modifier {
-    GEN6_COND_NONE                                           = 0x0,
-    GEN6_COND_Z                                                      = 0x1,
-    GEN6_COND_NZ                                             = 0x2,
-    GEN6_COND_G                                                      = 0x3,
-    GEN6_COND_GE                                             = 0x4,
-    GEN6_COND_L                                                      = 0x5,
-    GEN6_COND_LE                                             = 0x6,
-    GEN6_COND_O                                                      = 0x8,
-    GEN6_COND_U                                                      = 0x9,
-};
-
-enum gen_eu_math_function_control {
-    GEN6_MATH_INV                                            = 0x1,
-    GEN6_MATH_LOG                                            = 0x2,
-    GEN6_MATH_EXP                                            = 0x3,
-    GEN6_MATH_SQRT                                           = 0x4,
-    GEN6_MATH_RSQ                                            = 0x5,
-    GEN6_MATH_SIN                                            = 0x6,
-    GEN6_MATH_COS                                            = 0x7,
-    GEN6_MATH_FDIV                                           = 0x9,
-    GEN6_MATH_POW                                            = 0xa,
-    GEN6_MATH_INT_DIV                                        = 0xb,
-    GEN6_MATH_INT_DIV_QUOTIENT                               = 0xc,
-    GEN6_MATH_INT_DIV_REMAINDER                                      = 0xd,
-    GEN8_MATH_INVM                                           = 0xe,
-    GEN8_MATH_RSQRTM                                         = 0xf,
-};
-
-enum gen_eu_shared_function_id {
-    GEN6_SFID_NULL                                           = 0x0,
-    GEN6_SFID_SAMPLER                                        = 0x2,
-    GEN6_SFID_GATEWAY                                        = 0x3,
-    GEN6_SFID_DP_SAMPLER                                     = 0x4,
-    GEN6_SFID_DP_RC                                          = 0x5,
-    GEN6_SFID_URB                                            = 0x6,
-    GEN6_SFID_SPAWNER                                        = 0x7,
-    GEN6_SFID_VME                                            = 0x8,
-    GEN6_SFID_DP_CC                                          = 0x9,
-    GEN7_SFID_DP_DC0                                         = 0xa,
-    GEN7_SFID_PI                                             = 0xb,
-    GEN75_SFID_DP_DC1                                        = 0xc,
-};
-
-enum gen_eu_reg_file {
-    GEN6_FILE_ARF                                            = 0x0,
-    GEN6_FILE_GRF                                            = 0x1,
-    GEN6_FILE_MRF                                            = 0x2,
-    GEN6_FILE_IMM                                            = 0x3,
-};
-
-enum gen_eu_reg_type {
-    GEN6_TYPE_UD                                             = 0x0,
-    GEN6_TYPE_D                                                      = 0x1,
-    GEN6_TYPE_UW                                             = 0x2,
-    GEN6_TYPE_W                                                      = 0x3,
-    GEN6_TYPE_UB                                             = 0x4,
-    GEN6_TYPE_B                                                      = 0x5,
-    GEN7_TYPE_DF                                             = 0x6,
-    GEN6_TYPE_F                                                      = 0x7,
-    GEN8_TYPE_UQ                                             = 0x8,
-    GEN8_TYPE_Q                                                      = 0x9,
-    GEN8_TYPE_HF                                             = 0xa,
-    GEN6_TYPE_UV_IMM                                         = 0x4,
-    GEN6_TYPE_VF_IMM                                         = 0x5,
-    GEN6_TYPE_V_IMM                                          = 0x6,
-    GEN8_TYPE_DF_IMM                                         = 0xa,
-    GEN8_TYPE_HF_IMM                                         = 0xb,
-    GEN7_TYPE_F_3SRC                                         = 0x0,
-    GEN7_TYPE_D_3SRC                                         = 0x1,
-    GEN7_TYPE_UD_3SRC                                        = 0x2,
-    GEN7_TYPE_DF_3SRC                                        = 0x3,
-};
-
-enum gen_eu_vertical_stride {
-    GEN6_VERTSTRIDE_0                                        = 0x0,
-    GEN6_VERTSTRIDE_1                                        = 0x1,
-    GEN6_VERTSTRIDE_2                                        = 0x2,
-    GEN6_VERTSTRIDE_4                                        = 0x3,
-    GEN6_VERTSTRIDE_8                                        = 0x4,
-    GEN6_VERTSTRIDE_16                                       = 0x5,
-    GEN6_VERTSTRIDE_32                                       = 0x6,
-    GEN6_VERTSTRIDE_VXH                                              = 0xf,
-};
-
-enum gen_eu_width {
-    GEN6_WIDTH_1                                             = 0x0,
-    GEN6_WIDTH_2                                             = 0x1,
-    GEN6_WIDTH_4                                             = 0x2,
-    GEN6_WIDTH_8                                             = 0x3,
-    GEN6_WIDTH_16                                            = 0x4,
-};
-
-enum gen_eu_horizontal_stride {
-    GEN6_HORZSTRIDE_0                                        = 0x0,
-    GEN6_HORZSTRIDE_1                                        = 0x1,
-    GEN6_HORZSTRIDE_2                                        = 0x2,
-    GEN6_HORZSTRIDE_4                                        = 0x3,
-};
-
-enum gen_eu_addressing_mode {
-    GEN6_ADDRMODE_DIRECT                                     = 0x0,
-    GEN6_ADDRMODE_INDIRECT                                   = 0x1,
-};
-
-enum gen_eu_swizzle {
-    GEN6_SWIZZLE_X                                           = 0x0,
-    GEN6_SWIZZLE_Y                                           = 0x1,
-    GEN6_SWIZZLE_Z                                           = 0x2,
-    GEN6_SWIZZLE_W                                           = 0x3,
-};
-
-enum gen_eu_arf_reg {
-    GEN6_ARF_NULL                                            = 0x0,
-    GEN6_ARF_A0                                                      = 0x10,
-    GEN6_ARF_ACC0                                            = 0x20,
-    GEN6_ARF_F0                                                      = 0x30,
-    GEN6_ARF_SR0                                             = 0x70,
-    GEN6_ARF_CR0                                             = 0x80,
-    GEN6_ARF_N0                                                      = 0x90,
-    GEN6_ARF_IP                                                      = 0xa0,
-    GEN6_ARF_TDR                                             = 0xb0,
-    GEN7_ARF_TM0                                             = 0xc0,
-};
-
-#define GEN6_INST_SATURATE                                     (0x1 << 31)
-#define GEN6_INST_DEBUGCTRL                                    (0x1 << 30)
-#define GEN6_INST_CMPTCTRL                                     (0x1 << 29)
-#define GEN8_INST_BRANCHCTRL                                   (0x1 << 28)
-#define GEN6_INST_ACCWRCTRL                                    (0x1 << 28)
-#define GEN6_INST_CONDMODIFIER__MASK                           0x0f000000
-#define GEN6_INST_CONDMODIFIER__SHIFT                          24
-#define GEN6_INST_SFID__MASK                                   0x0f000000
-#define GEN6_INST_SFID__SHIFT                                  24
-#define GEN6_INST_FC__MASK                                     0x0f000000
-#define GEN6_INST_FC__SHIFT                                    24
-#define GEN6_INST_EXECSIZE__MASK                               0x00e00000
-#define GEN6_INST_EXECSIZE__SHIFT                              21
-#define GEN6_INST_PREDINV                                      (0x1 << 20)
-#define GEN6_INST_PREDCTRL__MASK                               0x000f0000
-#define GEN6_INST_PREDCTRL__SHIFT                              16
-#define GEN6_INST_THREADCTRL__MASK                             0x0000c000
-#define GEN6_INST_THREADCTRL__SHIFT                            14
-#define GEN6_INST_QTRCTRL__MASK                                        0x00003000
-#define GEN6_INST_QTRCTRL__SHIFT                               12
-#define GEN6_INST_DEPCTRL__MASK                                        0x00000c00
-#define GEN6_INST_DEPCTRL__SHIFT                               10
-#define GEN6_INST_MASKCTRL__MASK                               0x00000200
-#define GEN6_INST_MASKCTRL__SHIFT                              9
-#define GEN8_INST_NIBCTRL                                      (0x1 << 11)
-#define GEN8_INST_DEPCTRL__MASK                                        0x00000600
-#define GEN8_INST_DEPCTRL__SHIFT                               9
-#define GEN6_INST_ACCESSMODE__MASK                             0x00000100
-#define GEN6_INST_ACCESSMODE__SHIFT                            8
-#define GEN6_INST_OPCODE__MASK                                 0x0000007f
-#define GEN6_INST_OPCODE__SHIFT                                        0
-#define GEN6_INST_DST_ADDRMODE__MASK                           0x80000000
-#define GEN6_INST_DST_ADDRMODE__SHIFT                          31
-#define GEN6_INST_DST_HORZSTRIDE__MASK                         0x60000000
-#define GEN6_INST_DST_HORZSTRIDE__SHIFT                                29
-#define GEN6_INST_DST_REG__MASK                                        0x1fe00000
-#define GEN6_INST_DST_REG__SHIFT                               21
-#define GEN6_INST_DST_SUBREG__MASK                             0x001f0000
-#define GEN6_INST_DST_SUBREG__SHIFT                            16
-#define GEN6_INST_DST_ADDR_SUBREG__MASK                                0x1c000000
-#define GEN6_INST_DST_ADDR_SUBREG__SHIFT                       26
-#define GEN6_INST_DST_ADDR_IMM__MASK                           0x03ff0000
-#define GEN6_INST_DST_ADDR_IMM__SHIFT                          16
-#define GEN8_INST_DST_ADDR_SUBREG__MASK                                0x1e000000
-#define GEN8_INST_DST_ADDR_SUBREG__SHIFT                       25
-#define GEN8_INST_DST_ADDR_IMM__MASK                           0x01ff0000
-#define GEN8_INST_DST_ADDR_IMM__SHIFT                          16
-#define GEN6_INST_DST_SUBREG_ALIGN16__MASK                     0x00100000
-#define GEN6_INST_DST_SUBREG_ALIGN16__SHIFT                    20
-#define GEN6_INST_DST_SUBREG_ALIGN16__SHR                      4
-#define GEN6_INST_DST_ADDR_IMM_ALIGN16__MASK                   0x03f00000
-#define GEN6_INST_DST_ADDR_IMM_ALIGN16__SHIFT                  20
-#define GEN6_INST_DST_ADDR_IMM_ALIGN16__SHR                    4
-#define GEN8_INST_DST_ADDR_IMM_ALIGN16__MASK                   0x01f00000
-#define GEN8_INST_DST_ADDR_IMM_ALIGN16__SHIFT                  20
-#define GEN8_INST_DST_ADDR_IMM_ALIGN16__SHR                    4
-#define GEN6_INST_DST_WRITEMASK__MASK                          0x000f0000
-#define GEN6_INST_DST_WRITEMASK__SHIFT                         16
-#define GEN7_INST_NIBCTRL                                      (0x1 << 15)
-#define GEN6_INST_SRC1_TYPE__MASK                              0x00007000
-#define GEN6_INST_SRC1_TYPE__SHIFT                             12
-#define GEN6_INST_SRC1_FILE__MASK                              0x00000c00
-#define GEN6_INST_SRC1_FILE__SHIFT                             10
-#define GEN6_INST_SRC0_TYPE__MASK                              0x00000380
-#define GEN6_INST_SRC0_TYPE__SHIFT                             7
-#define GEN6_INST_SRC0_FILE__MASK                              0x00000060
-#define GEN6_INST_SRC0_FILE__SHIFT                             5
-#define GEN6_INST_DST_TYPE__MASK                               0x0000001c
-#define GEN6_INST_DST_TYPE__SHIFT                              2
-#define GEN6_INST_DST_FILE__MASK                               0x00000003
-#define GEN6_INST_DST_FILE__SHIFT                              0
-#define GEN8_INST_DST_ADDR_IMM_BIT9__MASK                      0x00008000
-#define GEN8_INST_DST_ADDR_IMM_BIT9__SHIFT                     15
-#define GEN8_INST_DST_ADDR_IMM_BIT9__SHR                       9
-#define GEN8_INST_SRC0_TYPE__MASK                              0x00007800
-#define GEN8_INST_SRC0_TYPE__SHIFT                             11
-#define GEN8_INST_SRC0_FILE__MASK                              0x00000600
-#define GEN8_INST_SRC0_FILE__SHIFT                             9
-#define GEN8_INST_DST_TYPE__MASK                               0x000001e0
-#define GEN8_INST_DST_TYPE__SHIFT                              5
-#define GEN8_INST_DST_FILE__MASK                               0x00000018
-#define GEN8_INST_DST_FILE__SHIFT                              3
-#define GEN8_INST_MASKCTRL__MASK                               0x00000004
-#define GEN8_INST_MASKCTRL__SHIFT                              2
-#define GEN8_INST_FLAG_REG__MASK                               0x00000002
-#define GEN8_INST_FLAG_REG__SHIFT                              1
-#define GEN8_INST_FLAG_SUBREG__MASK                            0x00000001
-#define GEN8_INST_FLAG_SUBREG__SHIFT                           0
-#define GEN7_INST_FLAG_REG__MASK                               0x04000000
-#define GEN7_INST_FLAG_REG__SHIFT                              26
-#define GEN6_INST_FLAG_SUBREG__MASK                            0x02000000
-#define GEN6_INST_FLAG_SUBREG__SHIFT                           25
-#define GEN8_INST_SRC0_ADDR_IMM_BIT9__MASK                     0x80000000
-#define GEN8_INST_SRC0_ADDR_IMM_BIT9__SHIFT                    31
-#define GEN8_INST_SRC0_ADDR_IMM_BIT9__SHR                      9
-#define GEN8_INST_SRC1_TYPE__MASK                              0x78000000
-#define GEN8_INST_SRC1_TYPE__SHIFT                             27
-#define GEN8_INST_SRC1_FILE__MASK                              0x06000000
-#define GEN8_INST_SRC1_FILE__SHIFT                             25
-#define GEN8_INST_SRC1_ADDR_IMM_BIT9__MASK                     0x02000000
-#define GEN8_INST_SRC1_ADDR_IMM_BIT9__SHIFT                    25
-#define GEN8_INST_SRC1_ADDR_IMM_BIT9__SHR                      9
-#define GEN6_INST_SRC_VERTSTRIDE__MASK                         0x01e00000
-#define GEN6_INST_SRC_VERTSTRIDE__SHIFT                                21
-#define GEN6_INST_SRC_WIDTH__MASK                              0x001c0000
-#define GEN6_INST_SRC_WIDTH__SHIFT                             18
-#define GEN6_INST_SRC_HORZSTRIDE__MASK                         0x00030000
-#define GEN6_INST_SRC_HORZSTRIDE__SHIFT                                16
-#define GEN6_INST_SRC_SWIZZLE_W__MASK                          0x000c0000
-#define GEN6_INST_SRC_SWIZZLE_W__SHIFT                         18
-#define GEN6_INST_SRC_SWIZZLE_Z__MASK                          0x00030000
-#define GEN6_INST_SRC_SWIZZLE_Z__SHIFT                         16
-#define GEN6_INST_SRC_ADDRMODE__MASK                           0x00008000
-#define GEN6_INST_SRC_ADDRMODE__SHIFT                          15
-#define GEN6_INST_SRC_NEGATE                                   (0x1 << 14)
-#define GEN6_INST_SRC_ABSOLUTE                                 (0x1 << 13)
-#define GEN6_INST_SRC_REG__MASK                                        0x00001fe0
-#define GEN6_INST_SRC_REG__SHIFT                               5
-#define GEN6_INST_SRC_SUBREG__MASK                             0x0000001f
-#define GEN6_INST_SRC_SUBREG__SHIFT                            0
-#define GEN6_INST_SRC_ADDR_SUBREG__MASK                                0x00001c00
-#define GEN6_INST_SRC_ADDR_SUBREG__SHIFT                       10
-#define GEN6_INST_SRC_ADDR_IMM__MASK                           0x000003ff
-#define GEN6_INST_SRC_ADDR_IMM__SHIFT                          0
-#define GEN8_INST_SRC_ADDR_SUBREG__MASK                                0x00001e00
-#define GEN8_INST_SRC_ADDR_SUBREG__SHIFT                       9
-#define GEN8_INST_SRC_ADDR_IMM__MASK                           0x000001ff
-#define GEN8_INST_SRC_ADDR_IMM__SHIFT                          0
-#define GEN6_INST_SRC_SUBREG_ALIGN16__MASK                     0x00000010
-#define GEN6_INST_SRC_SUBREG_ALIGN16__SHIFT                    4
-#define GEN6_INST_SRC_SUBREG_ALIGN16__SHR                      4
-#define GEN6_INST_SRC_ADDR_IMM_ALIGN16__MASK                   0x000003f0
-#define GEN6_INST_SRC_ADDR_IMM_ALIGN16__SHIFT                  4
-#define GEN6_INST_SRC_ADDR_IMM_ALIGN16__SHR                    4
-#define GEN8_INST_SRC_ADDR_IMM_ALIGN16__MASK                   0x000001f0
-#define GEN8_INST_SRC_ADDR_IMM_ALIGN16__SHIFT                  4
-#define GEN8_INST_SRC_ADDR_IMM_ALIGN16__SHR                    4
-#define GEN6_INST_SRC_SWIZZLE_Y__MASK                          0x0000000c
-#define GEN6_INST_SRC_SWIZZLE_Y__SHIFT                         2
-#define GEN6_INST_SRC_SWIZZLE_X__MASK                          0x00000003
-#define GEN6_INST_SRC_SWIZZLE_X__SHIFT                         0
-#define GEN6_3SRC_DST_REG__MASK                                        0xff000000
-#define GEN6_3SRC_DST_REG__SHIFT                               24
-#define GEN6_3SRC_DST_SUBREG__MASK                             0x00e00000
-#define GEN6_3SRC_DST_SUBREG__SHIFT                            21
-#define GEN6_3SRC_DST_SUBREG__SHR                              2
-#define GEN6_3SRC_DST_WRITEMASK__MASK                          0x001e0000
-#define GEN6_3SRC_DST_WRITEMASK__SHIFT                         17
-#define GEN7_3SRC_NIBCTRL                                      (0x1 << 15)
-#define GEN7_3SRC_DST_TYPE__MASK                               0x00003000
-#define GEN7_3SRC_DST_TYPE__SHIFT                              12
-#define GEN7_3SRC_SRC_TYPE__MASK                               0x00000c00
-#define GEN7_3SRC_SRC_TYPE__SHIFT                              10
-#define GEN6_3SRC_SRC2_NEGATE                                  (0x1 << 9)
-#define GEN6_3SRC_SRC2_ABSOLUTE                                        (0x1 << 8)
-#define GEN6_3SRC_SRC1_NEGATE                                  (0x1 << 7)
-#define GEN6_3SRC_SRC1_ABSOLUTE                                        (0x1 << 6)
-#define GEN6_3SRC_SRC0_NEGATE                                  (0x1 << 5)
-#define GEN6_3SRC_SRC0_ABSOLUTE                                        (0x1 << 4)
-#define GEN7_3SRC_FLAG_REG__MASK                               0x00000004
-#define GEN7_3SRC_FLAG_REG__SHIFT                              2
-#define GEN6_3SRC_FLAG_SUBREG__MASK                            0x00000002
-#define GEN6_3SRC_FLAG_SUBREG__SHIFT                           1
-#define GEN6_3SRC_DST_FILE_MRF                                 (0x1 << 0)
-#define GEN8_3SRC_DST_TYPE__MASK                               0x0001c000
-#define GEN8_3SRC_DST_TYPE__SHIFT                              14
-#define GEN8_3SRC_SRC_TYPE__MASK                               0x00003800
-#define GEN8_3SRC_SRC_TYPE__SHIFT                              11
-#define GEN8_3SRC_SRC2_NEGATE                                  (0x1 << 10)
-#define GEN8_3SRC_SRC2_ABSOLUTE                                        (0x1 << 9)
-#define GEN8_3SRC_SRC1_NEGATE                                  (0x1 << 8)
-#define GEN8_3SRC_SRC1_ABSOLUTE                                        (0x1 << 7)
-#define GEN8_3SRC_SRC0_NEGATE                                  (0x1 << 6)
-#define GEN8_3SRC_SRC0_ABSOLUTE                                        (0x1 << 5)
-#define GEN8_3SRC_MASKCTRL__MASK                               0x00000004
-#define GEN8_3SRC_MASKCTRL__SHIFT                              2
-#define GEN8_3SRC_FLAG_REG__MASK                               0x00000002
-#define GEN8_3SRC_FLAG_REG__SHIFT                              1
-#define GEN8_3SRC_FLAG_SUBREG__MASK                            0x00000001
-#define GEN8_3SRC_FLAG_SUBREG__SHIFT                           0
-#define GEN6_3SRC_SRC_REG__MASK                                        0x000ff000
-#define GEN6_3SRC_SRC_REG__SHIFT                               12
-#define GEN6_3SRC_SRC_SUBREG__MASK                             0x00000e00
-#define GEN6_3SRC_SRC_SUBREG__SHIFT                            9
-#define GEN6_3SRC_SRC_SUBREG__SHR                              2
-#define GEN6_3SRC_SRC_SWIZZLE_W__MASK                          0x00000180
-#define GEN6_3SRC_SRC_SWIZZLE_W__SHIFT                         7
-#define GEN6_3SRC_SRC_SWIZZLE_Z__MASK                          0x00000060
-#define GEN6_3SRC_SRC_SWIZZLE_Z__SHIFT                         5
-#define GEN6_3SRC_SRC_SWIZZLE_Y__MASK                          0x00000018
-#define GEN6_3SRC_SRC_SWIZZLE_Y__SHIFT                         3
-#define GEN6_3SRC_SRC_SWIZZLE_X__MASK                          0x00000006
-#define GEN6_3SRC_SRC_SWIZZLE_X__SHIFT                         1
-#define GEN6_3SRC_SRC_REPCTRL                                  (0x1 << 0)
-#define GEN6_COMPACT_SRC1_REG__MASK                    0xff00000000000000ULL
-#define GEN6_COMPACT_SRC1_REG__SHIFT                           56
-#define GEN6_COMPACT_SRC0_REG__MASK                    0x00ff000000000000ULL
-#define GEN6_COMPACT_SRC0_REG__SHIFT                           48
-#define GEN6_COMPACT_DST_REG__MASK                     0x0000ff0000000000ULL
-#define GEN6_COMPACT_DST_REG__SHIFT                            40
-#define GEN6_COMPACT_SRC1_INDEX__MASK                  0x000000f800000000ULL
-#define GEN6_COMPACT_SRC1_INDEX__SHIFT                         35
-#define GEN6_COMPACT_SRC0_INDEX__MASK                  0x00000007c0000000ULL
-#define GEN6_COMPACT_SRC0_INDEX__SHIFT                         30
-#define GEN6_COMPACT_CMPTCTRL                                  (0x1 << 29)
-#define GEN6_COMPACT_FLAG_SUBREG__MASK                         0x10000000
-#define GEN6_COMPACT_FLAG_SUBREG__SHIFT                                28
-#define GEN6_COMPACT_CONDMODIFIER__MASK                                0x0f000000
-#define GEN6_COMPACT_CONDMODIFIER__SHIFT                       24
-#define GEN6_COMPACT_ACCWRCTRL                                 (0x1 << 23)
-#define GEN6_COMPACT_SUBREG_INDEX__MASK                                0x007c0000
-#define GEN6_COMPACT_SUBREG_INDEX__SHIFT                       18
-#define GEN6_COMPACT_DATATYPE_INDEX__MASK                      0x0003e000
-#define GEN6_COMPACT_DATATYPE_INDEX__SHIFT                     13
-#define GEN6_COMPACT_CONTROL_INDEX__MASK                       0x00001f00
-#define GEN6_COMPACT_CONTROL_INDEX__SHIFT                      8
-#define GEN6_COMPACT_DEBUGCTRL                                 (0x1 << 7)
-#define GEN6_COMPACT_OPCODE__MASK                              0x0000007f
-#define GEN6_COMPACT_OPCODE__SHIFT                             0
-#define GEN8_COMPACT_3SRC_SRC2_REG__MASK               0xfe00000000000000ULL
-#define GEN8_COMPACT_3SRC_SRC2_REG__SHIFT                      57
-#define GEN8_COMPACT_3SRC_SRC2_REG__SHR                                1
-#define GEN8_COMPACT_3SRC_SRC1_REG__MASK               0x01fc000000000000ULL
-#define GEN8_COMPACT_3SRC_SRC1_REG__SHIFT                      50
-#define GEN8_COMPACT_3SRC_SRC1_REG__SHR                                1
-#define GEN8_COMPACT_3SRC_SRC0_REG__MASK               0x0003f80000000000ULL
-#define GEN8_COMPACT_3SRC_SRC0_REG__SHIFT                      43
-#define GEN8_COMPACT_3SRC_SRC0_REG__SHR                                1
-#define GEN8_COMPACT_3SRC_SRC2_SUBREG__MASK            0x0000070000000000ULL
-#define GEN8_COMPACT_3SRC_SRC2_SUBREG__SHIFT                   40
-#define GEN8_COMPACT_3SRC_SRC2_SUBREG__SHR                     2
-#define GEN8_COMPACT_3SRC_SRC1_SUBREG__MASK            0x000000e000000000ULL
-#define GEN8_COMPACT_3SRC_SRC1_SUBREG__SHIFT                   37
-#define GEN8_COMPACT_3SRC_SRC1_SUBREG__SHR                     2
-#define GEN8_COMPACT_3SRC_SRC0_SUBREG__MASK            0x0000001c00000000ULL
-#define GEN8_COMPACT_3SRC_SRC0_SUBREG__SHIFT                   34
-#define GEN8_COMPACT_3SRC_SRC0_SUBREG__SHR                     2
-#define GEN8_COMPACT_3SRC_SRC2_REPCTRL                         (0x1ULL << 33)
-#define GEN8_COMPACT_3SRC_SRC1_REPCTRL                         (0x1ULL << 32)
-#define GEN8_COMPACT_3SRC_SATURATE                             (0x1 << 31)
-#define GEN8_COMPACT_3SRC_DEBUGCTRL                            (0x1 << 30)
-#define GEN8_COMPACT_3SRC_CMPTCTRL                             (0x1 << 29)
-#define GEN8_COMPACT_3SRC_SRC0_REPCTRL                         (0x1 << 28)
-#define GEN8_COMPACT_3SRC_DST_REG__MASK                                0x0007f000
-#define GEN8_COMPACT_3SRC_DST_REG__SHIFT                       12
-#define GEN8_COMPACT_3SRC_SOURCE_INDEX__MASK                   0x00000c00
-#define GEN8_COMPACT_3SRC_SOURCE_INDEX__SHIFT                  10
-#define GEN8_COMPACT_3SRC_CONTROL_INDEX__MASK                  0x00000300
-#define GEN8_COMPACT_3SRC_CONTROL_INDEX__SHIFT                 8
-#define GEN8_COMPACT_3SRC_OPCODE__MASK                         0x0000007f
-#define GEN8_COMPACT_3SRC_OPCODE__SHIFT                                0
-
-
-
-
-
-
-
-
-#define GEN6_3SRC_SRC_2__MASK                          0x7ffffc0000000000ULL
-#define GEN6_3SRC_SRC_2__SHIFT                                 42
-#define GEN6_3SRC_SRC_1__MASK                          0x000003ffffe00000ULL
-#define GEN6_3SRC_SRC_1__SHIFT                                 21
-#define GEN6_3SRC_SRC_0__MASK                                  0x001fffff
-#define GEN6_3SRC_SRC_0__SHIFT                                 0
-
-
-
-
-
-
-#endif /* GEN_EU_ISA_XML */
diff --git a/src/gallium/drivers/ilo/genhw/gen_eu_message.xml.h b/src/gallium/drivers/ilo/genhw/gen_eu_message.xml.h
deleted file mode 100644 (file)
index 96cf543..0000000
+++ /dev/null
@@ -1,332 +0,0 @@
-#ifndef GEN_EU_MESSAGE_XML
-#define GEN_EU_MESSAGE_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-enum gen_eu_urb_op {
-    GEN6_MSG_URB_WRITE                                       = 0x0,
-    GEN6_MSG_URB_FF_SYNC                                     = 0x1,
-    GEN7_MSG_URB_WRITE_HWORD                                 = 0x0,
-    GEN7_MSG_URB_WRITE_OWORD                                 = 0x1,
-    GEN7_MSG_URB_READ_HWORD                                  = 0x2,
-    GEN7_MSG_URB_READ_OWORD                                  = 0x3,
-    GEN7_MSG_URB_ATOMIC_MOV                                  = 0x4,
-    GEN7_MSG_URB_ATOMIC_INC                                  = 0x5,
-    GEN75_MSG_URB_ATOMIC_ADD                                 = 0x6,
-    GEN8_MSG_URB_SIMD8_WRITE                                 = 0x7,
-    GEN8_MSG_URB_SIMD8_READ                                  = 0x8,
-};
-
-enum gen_eu_pi_simd {
-    GEN7_MSG_PI_SIMD8                                        = 0x0,
-    GEN7_MSG_PI_SIMD16                                       = 0x1,
-};
-
-enum gen_eu_pi_op {
-    GEN7_MSG_PI_EVAL_SNAPPED_IMM                             = 0x0,
-    GEN7_MSG_PI_EVAL_SINDEX                                  = 0x1,
-    GEN7_MSG_PI_EVAL_CENTROID                                = 0x2,
-    GEN7_MSG_PI_EVAL_SNAPPED                                 = 0x3,
-};
-
-enum gen_eu_sampler_simd {
-    GEN6_MSG_SAMPLER_SIMD4X2                                 = 0x0,
-    GEN9_MSG_SAMPLER_SIMD8D                                  = 0x0,
-    GEN6_MSG_SAMPLER_SIMD8                                   = 0x1,
-    GEN6_MSG_SAMPLER_SIMD16                                  = 0x2,
-    GEN6_MSG_SAMPLER_SIMD32_64                               = 0x3,
-};
-
-enum gen_eu_sampler_op {
-    GEN6_MSG_SAMPLER_SAMPLE                                  = 0x0,
-    GEN6_MSG_SAMPLER_SAMPLE_B                                = 0x1,
-    GEN6_MSG_SAMPLER_SAMPLE_L                                = 0x2,
-    GEN6_MSG_SAMPLER_SAMPLE_C                                = 0x3,
-    GEN6_MSG_SAMPLER_SAMPLE_D                                = 0x4,
-    GEN6_MSG_SAMPLER_SAMPLE_B_C                                      = 0x5,
-    GEN6_MSG_SAMPLER_SAMPLE_L_C                                      = 0x6,
-    GEN6_MSG_SAMPLER_LD                                              = 0x7,
-    GEN6_MSG_SAMPLER_GATHER4                                 = 0x8,
-    GEN6_MSG_SAMPLER_LOD                                     = 0x9,
-    GEN6_MSG_SAMPLER_RESINFO                                 = 0xa,
-    GEN6_MSG_SAMPLER_SAMPLEINFO                                      = 0xb,
-    GEN7_MSG_SAMPLER_GATHER4_C                               = 0x10,
-    GEN7_MSG_SAMPLER_GATHER4_PO                                      = 0x11,
-    GEN7_MSG_SAMPLER_GATHER4_PO_C                            = 0x12,
-    GEN7_MSG_SAMPLER_SAMPLE_D_C                                      = 0x14,
-    GEN7_MSG_SAMPLER_SAMPLE_LZ                               = 0x18,
-    GEN7_MSG_SAMPLER_SAMPLE_C_LC                             = 0x19,
-    GEN7_MSG_SAMPLER_LD_LZ                                   = 0x1a,
-    GEN7_MSG_SAMPLER_LD_MCS                                  = 0x1d,
-    GEN7_MSG_SAMPLER_LD2DMS                                  = 0x1e,
-    GEN7_MSG_SAMPLER_LD2DSS                                  = 0x1f,
-};
-
-enum gen_eu_dp_op {
-    GEN6_MSG_DP_OWORD_BLOCK_READ                             = 0x0,
-    GEN6_MSG_DP_RT_UNORM_READ                                = 0x1,
-    GEN6_MSG_DP_OWORD_DUAL_BLOCK_READ                        = 0x2,
-    GEN6_MSG_DP_MEDIA_BLOCK_READ                             = 0x4,
-    GEN6_MSG_DP_UNALIGNED_OWORD_BLOCK_READ                   = 0x5,
-    GEN6_MSG_DP_DWORD_SCATTERED_READ                         = 0x6,
-    GEN6_MSG_DP_DWORD_ATOMIC_WRITE                           = 0x7,
-    GEN6_MSG_DP_OWORD_BLOCK_WRITE                            = 0x8,
-    GEN6_MSG_DP_OWORD_DUAL_BLOCK_WRITE                       = 0x9,
-    GEN6_MSG_DP_MEDIA_BLOCK_WRITE                            = 0xa,
-    GEN6_MSG_DP_DWORD_SCATTERED_WRITE                        = 0xb,
-    GEN6_MSG_DP_RT_WRITE                                     = 0xc,
-    GEN6_MSG_DP_SVB_WRITE                                    = 0xd,
-    GEN6_MSG_DP_RT_UNORM_WRITE                               = 0xe,
-    GEN7_MSG_DP_SAMPLER_UNALIGNED_OWORD_BLOCK_READ           = 0x1,
-    GEN7_MSG_DP_SAMPLER_MEDIA_BLOCK_READ                     = 0x4,
-    GEN7_MSG_DP_RC_MEDIA_BLOCK_READ                          = 0x4,
-    GEN7_MSG_DP_RC_TYPED_SURFACE_READ                        = 0x5,
-    GEN7_MSG_DP_RC_TYPED_ATOMIC_OP                           = 0x6,
-    GEN7_MSG_DP_RC_MEMORY_FENCE                                      = 0x7,
-    GEN7_MSG_DP_RC_MEDIA_BLOCK_WRITE                         = 0xa,
-    GEN7_MSG_DP_RC_RT_WRITE                                  = 0xc,
-    GEN7_MSG_DP_RC_TYPED_SURFACE_WRITE                       = 0xd,
-    GEN7_MSG_DP_CC_OWORD_BLOCK_READ                          = 0x0,
-    GEN7_MSG_DP_CC_UNALIGNED_OWORD_BLOCK_READ                = 0x1,
-    GEN7_MSG_DP_CC_OWORD_DUAL_BLOCK_READ                     = 0x2,
-    GEN7_MSG_DP_CC_DWORD_SCATTERED_READ                              = 0x3,
-    GEN7_MSG_DP_DC0_OWORD_BLOCK_READ                         = 0x0,
-    GEN7_MSG_DP_DC0_UNALIGNED_OWORD_BLOCK_READ               = 0x1,
-    GEN7_MSG_DP_DC0_OWORD_DUAL_BLOCK_READ                    = 0x2,
-    GEN7_MSG_DP_DC0_DWORD_SCATTERED_READ                     = 0x3,
-    GEN7_MSG_DP_DC0_BYTE_SCATTERED_READ                              = 0x4,
-    GEN7_MSG_DP_DC0_UNTYPED_SURFACE_READ                     = 0x5,
-    GEN7_MSG_DP_DC0_UNTYPED_ATOMIC_OP                        = 0x6,
-    GEN7_MSG_DP_DC0_MEMORY_FENCE                             = 0x7,
-    GEN7_MSG_DP_DC0_OWORD_BLOCK_WRITE                        = 0x8,
-    GEN7_MSG_DP_DC0_OWORD_DUAL_BLOCK_WRITE                   = 0xa,
-    GEN7_MSG_DP_DC0_DWORD_SCATTERED_WRITE                    = 0xb,
-    GEN7_MSG_DP_DC0_BYTE_SCATTERED_WRITE                     = 0xc,
-    GEN7_MSG_DP_DC0_UNTYPED_SURFACE_WRITE                    = 0xd,
-    GEN75_MSG_DP_SAMPLER_READ_SURFACE_INFO                   = 0x0,
-    GEN75_MSG_DP_SAMPLER_UNALIGNED_OWORD_BLOCK_READ          = 0x1,
-    GEN75_MSG_DP_SAMPLER_MEDIA_BLOCK_READ                    = 0x4,
-    GEN75_MSG_DP_RC_MEDIA_BLOCK_READ                         = 0x4,
-    GEN75_MSG_DP_RC_MEMORY_FENCE                             = 0x7,
-    GEN75_MSG_DP_RC_MEDIA_BLOCK_WRITE                        = 0xa,
-    GEN75_MSG_DP_RC_RT_WRITE                                 = 0xc,
-    GEN8_MSG_DP_RC_RT_READ                                   = 0xd,
-    GEN75_MSG_DP_CC_OWORD_BLOCK_READ                         = 0x0,
-    GEN75_MSG_DP_CC_UNALIGNED_OWORD_BLOCK_READ               = 0x1,
-    GEN75_MSG_DP_CC_OWORD_DUAL_BLOCK_READ                    = 0x2,
-    GEN75_MSG_DP_CC_DWORD_SCATTERED_READ                     = 0x3,
-    GEN75_MSG_DP_DC0_OWORD_BLOCK_READ                        = 0x0,
-    GEN75_MSG_DP_DC0_UNALIGNED_OWORD_BLOCK_READ                      = 0x1,
-    GEN75_MSG_DP_DC0_OWORD_DUAL_BLOCK_READ                   = 0x2,
-    GEN75_MSG_DP_DC0_DWORD_SCATTERED_READ                    = 0x3,
-    GEN75_MSG_DP_DC0_BYTE_SCATTERED_READ                     = 0x4,
-    GEN75_MSG_DP_DC0_MEMORY_FENCE                            = 0x7,
-    GEN75_MSG_DP_DC0_OWORD_BLOCK_WRITE                       = 0x8,
-    GEN75_MSG_DP_DC0_OWORD_DUAL_BLOCK_WRITE                  = 0xa,
-    GEN75_MSG_DP_DC0_DWORD_SCATTERED_WRITE                   = 0xb,
-    GEN75_MSG_DP_DC0_BYTE_SCATTERED_WRITE                    = 0xc,
-    GEN75_MSG_DP_DC1_UNTYPED_SURFACE_READ                    = 0x1,
-    GEN75_MSG_DP_DC1_UNTYPED_ATOMIC_OP                       = 0x2,
-    GEN75_MSG_DP_DC1_UNTYPED_ATOMIC_OP_SIMD4X2               = 0x3,
-    GEN75_MSG_DP_DC1_MEDIA_BLOCK_READ                        = 0x4,
-    GEN75_MSG_DP_DC1_TYPED_SURFACE_READ                              = 0x5,
-    GEN75_MSG_DP_DC1_TYPED_ATOMIC_OP                         = 0x6,
-    GEN75_MSG_DP_DC1_TYPED_ATOMIC_OP_SIMD4X2                 = 0x7,
-    GEN75_MSG_DP_DC1_UNTYPED_SURFACE_WRITE                   = 0x9,
-    GEN75_MSG_DP_DC1_MEDIA_BLOCK_WRITE                       = 0xa,
-    GEN75_MSG_DP_DC1_ATOMIC_COUNTER_OP                       = 0xb,
-    GEN75_MSG_DP_DC1_ATOMIC_COUNTER_OP_SIMD4X2               = 0xc,
-    GEN75_MSG_DP_DC1_TYPED_SURFACE_WRITE                     = 0xd,
-};
-
-enum gen_eu_dp_aop {
-    GEN7_MSG_DP_AOP_CMPWR8B                                  = 0x0,
-    GEN7_MSG_DP_AOP_AND                                              = 0x1,
-    GEN7_MSG_DP_AOP_OR                                       = 0x2,
-    GEN7_MSG_DP_AOP_XOR                                              = 0x3,
-    GEN7_MSG_DP_AOP_MOV                                              = 0x4,
-    GEN7_MSG_DP_AOP_INC                                              = 0x5,
-    GEN7_MSG_DP_AOP_DEC                                              = 0x6,
-    GEN7_MSG_DP_AOP_ADD                                              = 0x7,
-    GEN7_MSG_DP_AOP_SUB                                              = 0x8,
-    GEN7_MSG_DP_AOP_REVSUB                                   = 0x9,
-    GEN7_MSG_DP_AOP_IMAX                                     = 0xa,
-    GEN7_MSG_DP_AOP_IMIN                                     = 0xb,
-    GEN7_MSG_DP_AOP_UMAX                                     = 0xc,
-    GEN7_MSG_DP_AOP_UMIN                                     = 0xd,
-    GEN7_MSG_DP_AOP_CMPWR                                    = 0xe,
-    GEN7_MSG_DP_AOP_PREDEC                                   = 0xf,
-};
-
-#define GEN6_MSG_EOT                                           (0x1 << 31)
-#define GEN6_MSG_MLEN__MASK                                    0x1e000000
-#define GEN6_MSG_MLEN__SHIFT                                   25
-#define GEN6_MSG_RLEN__MASK                                    0x01f00000
-#define GEN6_MSG_RLEN__SHIFT                                   20
-#define GEN6_MSG_HEADER_PRESENT                                        (0x1 << 19)
-#define GEN6_MSG_FUNCTION_CONTROL__MASK                                0x0007ffff
-#define GEN6_MSG_FUNCTION_CONTROL__SHIFT                       0
-#define GEN6_MSG_URB_COMPLETE                                  (0x1 << 15)
-#define GEN6_MSG_URB_USED                                      (0x1 << 14)
-#define GEN6_MSG_URB_ALLOCATE                                  (0x1 << 13)
-#define GEN6_MSG_URB_INTERLEAVED                               (0x1 << 10)
-#define GEN6_MSG_URB_OFFSET__MASK                              0x000003f0
-#define GEN6_MSG_URB_OFFSET__SHIFT                             4
-#define GEN6_MSG_URB_OP__MASK                                  0x0000000f
-#define GEN6_MSG_URB_OP__SHIFT                                 0
-#define GEN7_MSG_URB_PER_SLOT_OFFSET                           (0x1 << 16)
-#define GEN7_MSG_URB_COMPLETE                                  (0x1 << 15)
-#define GEN7_MSG_URB_INTERLEAVED                               (0x1 << 14)
-#define GEN7_MSG_URB_GLOBAL_OFFSET__MASK                       0x00003ff8
-#define GEN7_MSG_URB_GLOBAL_OFFSET__SHIFT                      3
-#define GEN7_MSG_URB_OP__MASK                                  0x00000007
-#define GEN7_MSG_URB_OP__SHIFT                                 0
-#define GEN8_MSG_URB_PER_SLOT_OFFSET                           (0x1 << 17)
-#define GEN8_MSG_URB_INTERLEAVED                               (0x1 << 15)
-#define GEN8_MSG_URB_GLOBAL_OFFSET__MASK                       0x00007ff0
-#define GEN8_MSG_URB_GLOBAL_OFFSET__SHIFT                      4
-#define GEN8_MSG_URB_OP__MASK                                  0x0000000f
-#define GEN8_MSG_URB_OP__SHIFT                                 0
-#define GEN7_MSG_PI_SIMD__MASK                                 0x00010000
-#define GEN7_MSG_PI_SIMD__SHIFT                                        16
-#define GEN7_MSG_PI_LINEAR_INTERP                              (0x1 << 14)
-#define GEN7_MSG_PI_OP__MASK                                   0x00003000
-#define GEN7_MSG_PI_OP__SHIFT                                  12
-#define GEN7_MSG_PI_SLOTGRP_HI                                 (0x1 << 11)
-#define GEN7_MSG_PI_OFFSET_Y__MASK                             0x000000f0
-#define GEN7_MSG_PI_OFFSET_Y__SHIFT                            4
-#define GEN7_MSG_PI_OFFSET_X__MASK                             0x0000000f
-#define GEN7_MSG_PI_OFFSET_X__SHIFT                            0
-#define GEN7_MSG_PI_SAMPLE_INDEX__MASK                         0x000000f0
-#define GEN7_MSG_PI_SAMPLE_INDEX__SHIFT                                4
-#define GEN6_MSG_SAMPLER_SIMD__MASK                            0x00030000
-#define GEN6_MSG_SAMPLER_SIMD__SHIFT                           16
-#define GEN6_MSG_SAMPLER_OP__MASK                              0x0000f000
-#define GEN6_MSG_SAMPLER_OP__SHIFT                             12
-#define GEN7_MSG_SAMPLER_SIMD__MASK                            0x00060000
-#define GEN7_MSG_SAMPLER_SIMD__SHIFT                           17
-#define GEN7_MSG_SAMPLER_OP__MASK                              0x0001f000
-#define GEN7_MSG_SAMPLER_OP__SHIFT                             12
-#define GEN6_MSG_SAMPLER_INDEX__MASK                           0x00000f00
-#define GEN6_MSG_SAMPLER_INDEX__SHIFT                          8
-#define GEN6_MSG_SAMPLER_SURFACE__MASK                         0x000000ff
-#define GEN6_MSG_SAMPLER_SURFACE__SHIFT                                0
-#define GEN6_MSG_DP_SEND_WRITE_COMMIT                          (0x1 << 17)
-#define GEN6_MSG_DP_OP__MASK                                   0x0001e000
-#define GEN6_MSG_DP_OP__SHIFT                                  13
-#define GEN6_MSG_DP_CTRL__MASK                                 0x00001f00
-#define GEN6_MSG_DP_CTRL__SHIFT                                        8
-#define GEN7_MSG_DP_CATEGORY                                   (0x1 << 18)
-#define GEN7_MSG_DP_OP__MASK                                   0x0003c000
-#define GEN7_MSG_DP_OP__SHIFT                                  14
-#define GEN7_MSG_DP_CTRL__MASK                                 0x00003f00
-#define GEN7_MSG_DP_CTRL__SHIFT                                        8
-#define GEN7_MSG_DP_OWORD_BLOCK_READ_INVALIDATE                        (0x1 << 13)
-#define GEN6_MSG_DP_OWORD_BLOCK_SIZE__MASK                     0x00000700
-#define GEN6_MSG_DP_OWORD_BLOCK_SIZE__SHIFT                    8
-#define GEN6_MSG_DP_OWORD_BLOCK_SIZE_1_LO                      (0x0 << 8)
-#define GEN6_MSG_DP_OWORD_BLOCK_SIZE_1_HI                      (0x1 << 8)
-#define GEN6_MSG_DP_OWORD_BLOCK_SIZE_2                         (0x2 << 8)
-#define GEN6_MSG_DP_OWORD_BLOCK_SIZE_4                         (0x3 << 8)
-#define GEN6_MSG_DP_OWORD_BLOCK_SIZE_8                         (0x4 << 8)
-#define GEN6_MSG_DP_UNALIGNED_OWORD_BLOCK_SIZE__MASK           0x00000700
-#define GEN6_MSG_DP_UNALIGNED_OWORD_BLOCK_SIZE__SHIFT          8
-#define GEN6_MSG_DP_UNALIGNED_OWORD_BLOCK_SIZE_1_LO            (0x0 << 8)
-#define GEN6_MSG_DP_UNALIGNED_OWORD_BLOCK_SIZE_1_HI            (0x1 << 8)
-#define GEN6_MSG_DP_UNALIGNED_OWORD_BLOCK_SIZE_2               (0x2 << 8)
-#define GEN6_MSG_DP_UNALIGNED_OWORD_BLOCK_SIZE_4               (0x3 << 8)
-#define GEN6_MSG_DP_UNALIGNED_OWORD_BLOCK_SIZE_8               (0x4 << 8)
-#define GEN7_MSG_DP_OWORD_DUAL_BLOCK_READ_INVALIDATE           (0x1 << 13)
-#define GEN6_MSG_DP_OWORD_DUAL_BLOCK_SIZE__MASK                        0x00000300
-#define GEN6_MSG_DP_OWORD_DUAL_BLOCK_SIZE__SHIFT               8
-#define GEN6_MSG_DP_OWORD_DUAL_BLOCK_SIZE_1                    (0x0 << 8)
-#define GEN6_MSG_DP_OWORD_DUAL_BLOCK_SIZE_4                    (0x2 << 8)
-#define GEN7_MSG_DP_DWORD_SCATTERED_READ_INVALIDATE            (0x1 << 13)
-#define GEN6_MSG_DP_DWORD_SCATTERED_BLOCK_SIZE__MASK           0x00000300
-#define GEN6_MSG_DP_DWORD_SCATTERED_BLOCK_SIZE__SHIFT          8
-#define GEN6_MSG_DP_DWORD_SCATTERED_BLOCK_SIZE_8               (0x2 << 8)
-#define GEN6_MSG_DP_DWORD_SCATTERED_BLOCK_SIZE_16              (0x3 << 8)
-#define GEN6_MSG_DP_BYTE_SCATTERED_DATA_SIZE__MASK             0x00000600
-#define GEN6_MSG_DP_BYTE_SCATTERED_DATA_SIZE__SHIFT            9
-#define GEN6_MSG_DP_BYTE_SCATTERED_DATA_SIZE_1                 (0x0 << 9)
-#define GEN6_MSG_DP_BYTE_SCATTERED_DATA_SIZE_2                 (0x1 << 9)
-#define GEN6_MSG_DP_BYTE_SCATTERED_DATA_SIZE_4                 (0x2 << 9)
-#define GEN6_MSG_DP_BYTE_SCATTERED_MODE__MASK                  0x00000100
-#define GEN6_MSG_DP_BYTE_SCATTERED_MODE__SHIFT                 8
-#define GEN6_MSG_DP_BYTE_SCATTERED_MODE_SIMD8                  (0x0 << 8)
-#define GEN6_MSG_DP_BYTE_SCATTERED_MODE_SIMD16                 (0x1 << 8)
-#define GEN6_MSG_DP_RT_LAST                                    (0x1 << 12)
-#define GEN6_MSG_DP_RT_SLOTGRP_HI                              (0x1 << 11)
-#define GEN6_MSG_DP_RT_MODE__MASK                              0x00000700
-#define GEN6_MSG_DP_RT_MODE__SHIFT                             8
-#define GEN6_MSG_DP_RT_MODE_SIMD16                             (0x0 << 8)
-#define GEN6_MSG_DP_RT_MODE_SIMD16_REPDATA                     (0x1 << 8)
-#define GEN6_MSG_DP_RT_MODE_SIMD8_DUALSRC_LO                   (0x2 << 8)
-#define GEN6_MSG_DP_RT_MODE_SIMD8_DUALSRC_HI                   (0x3 << 8)
-#define GEN6_MSG_DP_RT_MODE_SIMD8_LO                           (0x4 << 8)
-#define GEN6_MSG_DP_RT_MODE_SIMD8_IMAGE_WR                     (0x5 << 8)
-#define GEN7_MSG_DP_TYPED_SLOTGRP_HI                           (0x1 << 13)
-#define GEN7_MSG_DP_TYPED_MASK__MASK                           0x00000f00
-#define GEN7_MSG_DP_TYPED_MASK__SHIFT                          8
-#define GEN7_MSG_DP_UNTYPED_MODE__MASK                         0x00003000
-#define GEN7_MSG_DP_UNTYPED_MODE__SHIFT                                12
-#define GEN7_MSG_DP_UNTYPED_MODE_SIMD4X2                       (0x0 << 12)
-#define GEN7_MSG_DP_UNTYPED_MODE_SIMD16                                (0x1 << 12)
-#define GEN7_MSG_DP_UNTYPED_MODE_SIMD8                         (0x2 << 12)
-#define GEN7_MSG_DP_UNTYPED_MASK__MASK                         0x00000f00
-#define GEN7_MSG_DP_UNTYPED_MASK__SHIFT                                8
-#define GEN7_MSG_DP_ATOMIC_RETURN_DATA_ENABLE                  (0x1 << 13)
-#define GEN7_MSG_DP_ATOMIC_TYPED_SLOTGRP_HI                    (0x1 << 12)
-#define GEN7_MSG_DP_ATOMIC_UNTYPED_MODE__MASK                  0x00001000
-#define GEN7_MSG_DP_ATOMIC_UNTYPED_MODE__SHIFT                 12
-#define GEN7_MSG_DP_ATOMIC_UNTYPED_MODE_SIMD16                 (0x0 << 12)
-#define GEN7_MSG_DP_ATOMIC_UNTYPED_MODE_SIMD8                  (0x1 << 12)
-#define GEN7_MSG_DP_ATOMIC_OP__MASK                            0x00000f00
-#define GEN7_MSG_DP_ATOMIC_OP__SHIFT                           8
-#define GEN6_MSG_DP_SURFACE__MASK                              0x000000ff
-#define GEN6_MSG_DP_SURFACE__SHIFT                             0
-#define GEN6_MSG_TS_RESOURCE_SELECT__MASK                      0x00000010
-#define GEN6_MSG_TS_RESOURCE_SELECT__SHIFT                     4
-#define GEN6_MSG_TS_RESOURCE_SELECT_CHILD                      (0x0 << 4)
-#define GEN6_MSG_TS_RESOURCE_SELECT_ROOT                       (0x1 << 4)
-#define GEN6_MSG_TS_RESOURCE_SELECT_DEREF                      (0x0 << 4)
-#define GEN6_MSG_TS_RESOURCE_SELECT_NO_DEREF                   (0x1 << 4)
-#define GEN6_MSG_TS_REQUESTER_TYPE__MASK                       0x00000002
-#define GEN6_MSG_TS_REQUESTER_TYPE__SHIFT                      1
-#define GEN6_MSG_TS_REQUESTER_TYPE_ROOT                                (0x0 << 1)
-#define GEN6_MSG_TS_REQUESTER_TYPE_CHILD                       (0x1 << 1)
-#define GEN6_MSG_TS_OPCODE__MASK                               0x00000001
-#define GEN6_MSG_TS_OPCODE__SHIFT                              0
-#define GEN6_MSG_TS_OPCODE_DEREF                               0x0
-#define GEN6_MSG_TS_OPCODE_SPAWN                               0x1
-
-#endif /* GEN_EU_MESSAGE_XML */
diff --git a/src/gallium/drivers/ilo/genhw/gen_mi.xml.h b/src/gallium/drivers/ilo/genhw/gen_mi.xml.h
deleted file mode 100644 (file)
index 36f9618..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-#ifndef GEN_MI_XML
-#define GEN_MI_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-enum gen_mi_alu_opcode {
-    GEN75_MI_ALU_NOOP                                        = 0x0,
-    GEN75_MI_ALU_LOAD                                        = 0x80,
-    GEN75_MI_ALU_LOADINV                                     = 0x480,
-    GEN75_MI_ALU_LOAD0                                       = 0x81,
-    GEN75_MI_ALU_LOAD1                                       = 0x481,
-    GEN75_MI_ALU_ADD                                         = 0x100,
-    GEN75_MI_ALU_SUB                                         = 0x101,
-    GEN75_MI_ALU_AND                                         = 0x102,
-    GEN75_MI_ALU_OR                                          = 0x103,
-    GEN75_MI_ALU_XOR                                         = 0x104,
-    GEN75_MI_ALU_STORE                                       = 0x180,
-    GEN75_MI_ALU_STOREINV                                    = 0x580,
-};
-
-enum gen_mi_alu_operand {
-    GEN75_MI_ALU_R0                                          = 0x0,
-    GEN75_MI_ALU_R1                                          = 0x1,
-    GEN75_MI_ALU_R2                                          = 0x2,
-    GEN75_MI_ALU_R3                                          = 0x3,
-    GEN75_MI_ALU_R4                                          = 0x4,
-    GEN75_MI_ALU_R5                                          = 0x5,
-    GEN75_MI_ALU_R6                                          = 0x6,
-    GEN75_MI_ALU_R7                                          = 0x7,
-    GEN75_MI_ALU_R8                                          = 0x8,
-    GEN75_MI_ALU_R9                                          = 0x9,
-    GEN75_MI_ALU_R10                                         = 0xa,
-    GEN75_MI_ALU_R11                                         = 0xb,
-    GEN75_MI_ALU_R12                                         = 0xc,
-    GEN75_MI_ALU_R13                                         = 0xd,
-    GEN75_MI_ALU_R14                                         = 0xe,
-    GEN75_MI_ALU_R15                                         = 0xf,
-    GEN75_MI_ALU_SRCA                                        = 0x20,
-    GEN75_MI_ALU_SRCB                                        = 0x21,
-    GEN75_MI_ALU_ACCU                                        = 0x31,
-    GEN75_MI_ALU_ZF                                          = 0x32,
-    GEN75_MI_ALU_CF                                          = 0x33,
-};
-
-#define GEN6_MI_TYPE__MASK                                     0xe0000000
-#define GEN6_MI_TYPE__SHIFT                                    29
-#define GEN6_MI_TYPE_MI                                                (0x0 << 29)
-#define GEN6_MI_OPCODE__MASK                                   0x1f800000
-#define GEN6_MI_OPCODE__SHIFT                                  23
-#define GEN6_MI_OPCODE_MI_NOOP                                 (0x0 << 23)
-#define GEN75_MI_OPCODE_MI_SET_PREDICATE                       (0x1 << 23)
-#define GEN75_MI_OPCODE_MI_RS_CONTROL                          (0x6 << 23)
-#define GEN75_MI_OPCODE_MI_URB_ATOMIC_ALLOC                    (0x9 << 23)
-#define GEN6_MI_OPCODE_MI_BATCH_BUFFER_END                     (0xa << 23)
-#define GEN7_MI_OPCODE_MI_PREDICATE                            (0xc << 23)
-#define GEN7_MI_OPCODE_MI_URB_CLEAR                            (0x19 << 23)
-#define GEN75_MI_OPCODE_MI_MATH                                        (0x1a << 23)
-#define GEN8_MI_OPCODE_MI_SEMAPHORE_SIGNAL                     (0x1b << 23)
-#define GEN8_MI_OPCODE_MI_SEMAPHORE_WAIT                       (0x1c << 23)
-#define GEN6_MI_OPCODE_MI_STORE_DATA_IMM                       (0x20 << 23)
-#define GEN6_MI_OPCODE_MI_LOAD_REGISTER_IMM                    (0x22 << 23)
-#define GEN6_MI_OPCODE_MI_STORE_REGISTER_MEM                   (0x24 << 23)
-#define GEN6_MI_OPCODE_MI_FLUSH_DW                             (0x26 << 23)
-#define GEN6_MI_OPCODE_MI_REPORT_PERF_COUNT                    (0x28 << 23)
-#define GEN7_MI_OPCODE_MI_LOAD_REGISTER_MEM                    (0x29 << 23)
-#define GEN75_MI_OPCODE_MI_LOAD_REGISTER_REG                   (0x2a << 23)
-#define GEN75_MI_OPCODE_MI_RS_STORE_DATA_IMM                   (0x2b << 23)
-#define GEN75_MI_OPCODE_MI_LOAD_URB_MEM                                (0x2c << 23)
-#define GEN75_MI_OPCODE_MI_STORE_URB_MEM                       (0x2d << 23)
-#define GEN8_MI_OPCODE_MI_COPY_MEM_MEM                         (0x2e << 23)
-#define GEN8_MI_OPCODE_MI_ATOMIC                               (0x2f << 23)
-#define GEN6_MI_OPCODE_MI_BATCH_BUFFER_START                   (0x31 << 23)
-#define GEN6_MI_LENGTH__MASK                                   0x0000003f
-#define GEN6_MI_LENGTH__SHIFT                                  0
-#define GEN6_MI_NOOP__SIZE                                     1
-#define GEN6_MI_NOOP_DW0_WRITE_NOPID                           (0x1 << 22)
-#define GEN6_MI_NOOP_DW0_VALUE__MASK                           0x003fffff
-#define GEN6_MI_NOOP_DW0_VALUE__SHIFT                          0
-
-#define GEN75_MI_SET_PREDICATE__SIZE                           1
-#define GEN75_MI_SET_PREDICATE_DW0_PREDICATE__MASK             0x00000003
-#define GEN75_MI_SET_PREDICATE_DW0_PREDICATE__SHIFT            0
-#define GEN75_MI_SET_PREDICATE_DW0_PREDICATE_ALWAYS            0x0
-#define GEN75_MI_SET_PREDICATE_DW0_PREDICATE_ON_CLEAR          0x1
-#define GEN75_MI_SET_PREDICATE_DW0_PREDICATE_ON_SET            0x2
-#define GEN75_MI_SET_PREDICATE_DW0_PREDICATE_DISABLE           0x3
-
-#define GEN75_MI_RS_CONTROL__SIZE                              1
-#define GEN75_MI_RS_CONTROL_DW0_ENABLE                         (0x1 << 0)
-
-#define GEN75_MI_URB_ATOMIC_ALLOC__SIZE                                1
-#define GEN75_MI_URB_ATOMIC_ALLOC_DW0_OFFSET__MASK             0x000ff000
-#define GEN75_MI_URB_ATOMIC_ALLOC_DW0_OFFSET__SHIFT            12
-#define GEN75_MI_URB_ATOMIC_ALLOC_DW0_SIZE__MASK               0x000001ff
-#define GEN75_MI_URB_ATOMIC_ALLOC_DW0_SIZE__SHIFT              0
-
-#define GEN6_MI_BATCH_BUFFER_END__SIZE                         1
-
-#define GEN7_MI_PREDICATE__SIZE                                        1
-#define GEN7_MI_PREDICATE_DW0_LOADOP__MASK                     0x000000c0
-#define GEN7_MI_PREDICATE_DW0_LOADOP__SHIFT                    6
-#define GEN7_MI_PREDICATE_DW0_LOADOP_KEEP                      (0x0 << 6)
-#define GEN7_MI_PREDICATE_DW0_LOADOP_LOAD                      (0x2 << 6)
-#define GEN7_MI_PREDICATE_DW0_LOADOP_LOADINV                   (0x3 << 6)
-#define GEN7_MI_PREDICATE_DW0_COMBINEOP__MASK                  0x00000018
-#define GEN7_MI_PREDICATE_DW0_COMBINEOP__SHIFT                 3
-#define GEN7_MI_PREDICATE_DW0_COMBINEOP_SET                    (0x0 << 3)
-#define GEN7_MI_PREDICATE_DW0_COMBINEOP_AND                    (0x1 << 3)
-#define GEN7_MI_PREDICATE_DW0_COMBINEOP_OR                     (0x2 << 3)
-#define GEN7_MI_PREDICATE_DW0_COMBINEOP_XOR                    (0x3 << 3)
-#define GEN7_MI_PREDICATE_DW0_COMPAREOP__MASK                  0x00000003
-#define GEN7_MI_PREDICATE_DW0_COMPAREOP__SHIFT                 0
-#define GEN7_MI_PREDICATE_DW0_COMPAREOP_TRUE                   0x0
-#define GEN7_MI_PREDICATE_DW0_COMPAREOP_FALSE                  0x1
-#define GEN7_MI_PREDICATE_DW0_COMPAREOP_SRCS_EQUAL             0x2
-#define GEN7_MI_PREDICATE_DW0_COMPAREOP_DELTAS_EQUAL           0x3
-
-#define GEN7_MI_URB_CLEAR__SIZE                                        2
-
-#define GEN7_MI_URB_CLEAR_DW1_LENGTH__MASK                     0x3fff0000
-#define GEN7_MI_URB_CLEAR_DW1_LENGTH__SHIFT                    16
-#define GEN7_MI_URB_CLEAR_DW1_OFFSET__MASK                     0x00007fff
-#define GEN7_MI_URB_CLEAR_DW1_OFFSET__SHIFT                    0
-
-#define GEN75_MI_MATH__SIZE                                    65
-
-#define GEN75_MI_MATH_DW_OP__MASK                              0xfff00000
-#define GEN75_MI_MATH_DW_OP__SHIFT                             20
-#define GEN75_MI_MATH_DW_SRC1__MASK                            0x000ffc00
-#define GEN75_MI_MATH_DW_SRC1__SHIFT                           10
-#define GEN75_MI_MATH_DW_SRC2__MASK                            0x000007ff
-#define GEN75_MI_MATH_DW_SRC2__SHIFT                           0
-
-#define GEN8_MI_SEMAPHORE_SIGNAL__SIZE                         2
-#define GEN8_MI_SEMAPHORE_SIGNAL_DW0_POST_SYNC_OP              (0x1 << 21)
-#define GEN8_MI_SEMAPHORE_SIGNAL_DW0_ENGINE__MASK              0x00038000
-#define GEN8_MI_SEMAPHORE_SIGNAL_DW0_ENGINE__SHIFT             15
-#define GEN8_MI_SEMAPHORE_SIGNAL_DW0_ENGINE_RCS                        (0x0 << 15)
-#define GEN8_MI_SEMAPHORE_SIGNAL_DW0_ENGINE_VCS0               (0x1 << 15)
-#define GEN8_MI_SEMAPHORE_SIGNAL_DW0_ENGINE_BCS                        (0x2 << 15)
-#define GEN8_MI_SEMAPHORE_SIGNAL_DW0_ENGINE_VECS               (0x3 << 15)
-#define GEN8_MI_SEMAPHORE_SIGNAL_DW0_ENGINE_VCS1               (0x4 << 15)
-
-
-#define GEN8_MI_SEMAPHORE_WAIT__SIZE                           4
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_USE_GGTT                    (0x1 << 22)
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_WAIT_MODE__MASK             0x00008000
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_WAIT_MODE__SHIFT            15
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_WAIT_MODE_SIGNAL            (0x0 << 15)
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_WAIT_MODE_POLL              (0x1 << 15)
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_OP__MASK                    0x00007000
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_OP__SHIFT                   12
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_OP_SAD_GREATER_THAN_SDD     (0x0 << 12)
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_OP_SAD_GREATER_THAN_OR_EQUAL_SDD    (0x1 << 12)
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_OP_SAD_LESS_THAN_SDD                (0x2 << 12)
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_OP_SAD_LESS_THAN_OR_EQUAL_SDD       (0x3 << 12)
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_OP_SAD_EQUAL_SDD            (0x4 << 12)
-#define GEN8_MI_SEMAPHORE_WAIT_DW0_OP_SAD_NO_EQUAL_SDD         (0x5 << 12)
-
-
-#define GEN8_MI_SEMAPHORE_WAIT_DW2_ADDR_ADDR__MASK             0xfffffffc
-#define GEN8_MI_SEMAPHORE_WAIT_DW2_ADDR_ADDR__SHIFT            2
-#define GEN8_MI_SEMAPHORE_WAIT_DW2_ADDR_ADDR__SHR              2
-
-
-#define GEN6_MI_STORE_DATA_IMM__SIZE                           6
-#define GEN6_MI_STORE_DATA_IMM_DW0_USE_GGTT                    (0x1 << 22)
-#define GEN8_MI_STORE_DATA_IMM_DW0_STORE_QWORD                 (0x1 << 21)
-
-
-#define GEN6_MI_STORE_DATA_IMM_DW2_ADDR__MASK                  0xfffffffc
-#define GEN6_MI_STORE_DATA_IMM_DW2_ADDR__SHIFT                 2
-#define GEN6_MI_STORE_DATA_IMM_DW2_ADDR__SHR                   2
-
-
-
-
-#define GEN6_MI_LOAD_REGISTER_IMM__SIZE                                3
-#define GEN6_MI_LOAD_REGISTER_IMM_DW0_WRITE_DISABLES__MASK     0x00000f00
-#define GEN6_MI_LOAD_REGISTER_IMM_DW0_WRITE_DISABLES__SHIFT    8
-
-#define GEN6_MI_LOAD_REGISTER_IMM_DW1_REG__MASK                        0x007ffffc
-#define GEN6_MI_LOAD_REGISTER_IMM_DW1_REG__SHIFT               2
-#define GEN6_MI_LOAD_REGISTER_IMM_DW1_REG__SHR                 2
-
-
-#define GEN6_MI_STORE_REGISTER_MEM__SIZE                       4
-#define GEN6_MI_STORE_REGISTER_MEM_DW0_USE_GGTT                        (0x1 << 22)
-#define GEN75_MI_STORE_REGISTER_MEM_DW0_PREDICATE_ENABLE       (0x1 << 21)
-
-#define GEN6_MI_STORE_REGISTER_MEM_DW1_REG__MASK               0x007ffffc
-#define GEN6_MI_STORE_REGISTER_MEM_DW1_REG__SHIFT              2
-#define GEN6_MI_STORE_REGISTER_MEM_DW1_REG__SHR                        2
-
-#define GEN6_MI_STORE_REGISTER_MEM_DW2_ADDR__MASK              0xfffffffc
-#define GEN6_MI_STORE_REGISTER_MEM_DW2_ADDR__SHIFT             2
-#define GEN6_MI_STORE_REGISTER_MEM_DW2_ADDR__SHR               2
-
-
-#define GEN6_MI_FLUSH_DW__SIZE                                 5
-#define GEN6_MI_FLUSH_DW_DW0_WRITE__MASK                       0x0000c000
-#define GEN6_MI_FLUSH_DW_DW0_WRITE__SHIFT                      14
-#define GEN6_MI_FLUSH_DW_DW0_WRITE_NONE                                (0x0 << 14)
-#define GEN6_MI_FLUSH_DW_DW0_WRITE_IMM                         (0x1 << 14)
-#define GEN6_MI_FLUSH_DW_DW0_WRITE_TIMESTAMP                   (0x3 << 14)
-
-#define GEN6_MI_FLUSH_DW_DW1_USE_GGTT                          (0x1 << 2)
-#define GEN6_MI_FLUSH_DW_DW1_ADDR__MASK                                0xfffffff8
-#define GEN6_MI_FLUSH_DW_DW1_ADDR__SHIFT                       3
-#define GEN6_MI_FLUSH_DW_DW1_ADDR__SHR                         3
-
-
-
-
-#define GEN6_MI_REPORT_PERF_COUNT__SIZE                                3
-
-#define GEN6_MI_REPORT_PERF_COUNT_DW1_CORE_MODE_ENABLE         (0x1 << 4)
-#define GEN6_MI_REPORT_PERF_COUNT_DW1_USE_GGTT                 (0x1 << 0)
-#define GEN6_MI_REPORT_PERF_COUNT_DW1_ADDR__MASK               0xffffffc0
-#define GEN6_MI_REPORT_PERF_COUNT_DW1_ADDR__SHIFT              6
-#define GEN6_MI_REPORT_PERF_COUNT_DW1_ADDR__SHR                        6
-
-
-#define GEN7_MI_LOAD_REGISTER_MEM__SIZE                                4
-#define GEN7_MI_LOAD_REGISTER_MEM_DW0_USE_GGTT                 (0x1 << 22)
-#define GEN7_MI_LOAD_REGISTER_MEM_DW0_ASYNC_MODE_ENABLE                (0x1 << 21)
-
-#define GEN7_MI_LOAD_REGISTER_MEM_DW1_REG__MASK                        0x007ffffc
-#define GEN7_MI_LOAD_REGISTER_MEM_DW1_REG__SHIFT               2
-#define GEN7_MI_LOAD_REGISTER_MEM_DW1_REG__SHR                 2
-
-#define GEN7_MI_LOAD_REGISTER_MEM_DW2_ADDR__MASK               0xfffffffc
-#define GEN7_MI_LOAD_REGISTER_MEM_DW2_ADDR__SHIFT              2
-#define GEN7_MI_LOAD_REGISTER_MEM_DW2_ADDR__SHR                        2
-
-
-#define GEN75_MI_LOAD_REGISTER_REG__SIZE                       3
-
-#define GEN75_MI_LOAD_REGISTER_REG_DW1_SRC_REG__MASK           0x007ffffc
-#define GEN75_MI_LOAD_REGISTER_REG_DW1_SRC_REG__SHIFT          2
-#define GEN75_MI_LOAD_REGISTER_REG_DW1_SRC_REG__SHR            2
-
-#define GEN75_MI_LOAD_REGISTER_REG_DW2_DST_REG__MASK           0x007ffffc
-#define GEN75_MI_LOAD_REGISTER_REG_DW2_DST_REG__SHIFT          2
-#define GEN75_MI_LOAD_REGISTER_REG_DW2_DST_REG__SHR            2
-
-#define GEN75_MI_RS_STORE_DATA_IMM__SIZE                       6
-#define GEN75_MI_RS_STORE_DATA_IMM_DW0_USE_GGTT                        (0x1 << 22)
-
-
-#define GEN75_MI_RS_STORE_DATA_IMM_DW2_ADDR__MASK              0xfffffffc
-#define GEN75_MI_RS_STORE_DATA_IMM_DW2_ADDR__SHIFT             2
-#define GEN75_MI_RS_STORE_DATA_IMM_DW2_ADDR__SHR               2
-
-
-
-
-#define GEN75_MI_LOAD_URB_MEM__SIZE                            4
-
-#define GEN75_MI_LOAD_URB_MEM_DW1_ADDR__MASK                   0x00007ffc
-#define GEN75_MI_LOAD_URB_MEM_DW1_ADDR__SHIFT                  2
-#define GEN75_MI_LOAD_URB_MEM_DW1_ADDR__SHR                    2
-
-#define GEN75_MI_LOAD_URB_MEM_DW2_ADDR__MASK                   0xffffffc0
-#define GEN75_MI_LOAD_URB_MEM_DW2_ADDR__SHIFT                  6
-#define GEN75_MI_LOAD_URB_MEM_DW2_ADDR__SHR                    6
-
-
-#define GEN75_MI_STORE_URB_MEM__SIZE                           4
-
-#define GEN75_MI_STORE_URB_MEM_DW1_ADDR__MASK                  0x00007ffc
-#define GEN75_MI_STORE_URB_MEM_DW1_ADDR__SHIFT                 2
-#define GEN75_MI_STORE_URB_MEM_DW1_ADDR__SHR                   2
-
-#define GEN75_MI_STORE_URB_MEM_DW2_ADDR__MASK                  0xffffffc0
-#define GEN75_MI_STORE_URB_MEM_DW2_ADDR__SHIFT                 6
-#define GEN75_MI_STORE_URB_MEM_DW2_ADDR__SHR                   6
-
-
-#define GEN8_MI_COPY_MEM_MEM__SIZE                             5
-#define GEN8_MI_COPY_MEM_MEM_DW0_USE_GGTT_SRC                  (0x1 << 22)
-#define GEN8_MI_COPY_MEM_MEM_DW0_USE_GGTT_DST                  (0x1 << 21)
-
-#define GEN8_MI_COPY_MEM_MEM_DW1_DST_ADDR__MASK                        0xfffffffc
-#define GEN8_MI_COPY_MEM_MEM_DW1_DST_ADDR__SHIFT               2
-#define GEN8_MI_COPY_MEM_MEM_DW1_DST_ADDR__SHR                 2
-
-
-#define GEN8_MI_COPY_MEM_MEM_DW3_SRC_ADDR__MASK                        0xfffffffc
-#define GEN8_MI_COPY_MEM_MEM_DW3_SRC_ADDR__SHIFT               2
-#define GEN8_MI_COPY_MEM_MEM_DW3_SRC_ADDR__SHR                 2
-
-
-#define GEN8_MI_ATOMIC__SIZE                                   11
-#define GEN8_MI_ATOMIC_DW0_USE_GGTT                            (0x1 << 22)
-#define GEN8_MI_ATOMIC_DW0_POST_SYNC_OP                                (0x1 << 21)
-#define GEN8_MI_ATOMIC_DW0_SIZE__MASK                          0x00180000
-#define GEN8_MI_ATOMIC_DW0_SIZE__SHIFT                         19
-#define GEN8_MI_ATOMIC_DW0_SIZE_DWORD                          (0x0 << 19)
-#define GEN8_MI_ATOMIC_DW0_SIZE_QWORD                          (0x1 << 19)
-#define GEN8_MI_ATOMIC_DW0_SIZE_OWORD                          (0x2 << 19)
-#define GEN8_MI_ATOMIC_DW0_INLINE_DATA                         (0x1 << 18)
-#define GEN8_MI_ATOMIC_DW0_CS_STALL                            (0x1 << 17)
-#define GEN8_MI_ATOMIC_DW0_RETURN_DATA_CONTROL                 (0x1 << 16)
-#define GEN8_MI_ATOMIC_DW0_OP__MASK                            0x0000ff00
-#define GEN8_MI_ATOMIC_DW0_OP__SHIFT                           8
-
-#define GEN8_MI_ATOMIC_DW1_ADDR__MASK                          0xfffffffc
-#define GEN8_MI_ATOMIC_DW1_ADDR__SHIFT                         2
-#define GEN8_MI_ATOMIC_DW1_ADDR__SHR                           2
-
-
-
-#define GEN6_MI_BATCH_BUFFER_START__SIZE                       3
-#define GEN75_MI_BATCH_BUFFER_START_DW0_SECOND_LEVEL           (0x1 << 22)
-#define GEN75_MI_BATCH_BUFFER_START_DW0_ADD_OFFSET_ENABLE      (0x1 << 16)
-#define GEN75_MI_BATCH_BUFFER_START_DW0_PREDICATION_ENABLE     (0x1 << 15)
-#define GEN75_MI_BATCH_BUFFER_START_DW0_NON_PRIVILEGED         (0x1 << 13)
-#define GEN6_MI_BATCH_BUFFER_START_DW0_CLEAR_COMMAND_BUFFER    (0x1 << 11)
-#define GEN75_MI_BATCH_BUFFER_START_DW0_RS_ENABLE              (0x1 << 10)
-#define GEN6_MI_BATCH_BUFFER_START_DW0_USE_PPGTT               (0x1 << 8)
-
-#define GEN6_MI_BATCH_BUFFER_START_DW1_ADDR__MASK              0xfffffffc
-#define GEN6_MI_BATCH_BUFFER_START_DW1_ADDR__SHIFT             2
-#define GEN6_MI_BATCH_BUFFER_START_DW1_ADDR__SHR               2
-
-
-
-#endif /* GEN_MI_XML */
diff --git a/src/gallium/drivers/ilo/genhw/gen_regs.xml.h b/src/gallium/drivers/ilo/genhw/gen_regs.xml.h
deleted file mode 100644 (file)
index 54ec13e..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-#ifndef GEN_REGS_XML
-#define GEN_REGS_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-#define GEN6_REG_MASK__MASK                                    0xffff0000
-#define GEN6_REG_MASK__SHIFT                                   16
-#define GEN6_REG__SIZE                                         0x400000
-#define GEN6_REG_NOPID                                         0x2094
-
-
-#define GEN6_REG_SO_PRIM_STORAGE_NEEDED                                0x2280
-
-#define GEN6_REG_SO_NUM_PRIMS_WRITTEN                          0x2288
-
-
-#define GEN7_REG_TS_GPGPU_THREADS_DISPATCHED                   0x2290
-
-#define GEN7_REG_HS_INVOCATION_COUNT                           0x2300
-
-#define GEN7_REG_DS_INVOCATION_COUNT                           0x2308
-
-#define GEN6_REG_IA_VERTICES_COUNT                             0x2310
-
-#define GEN6_REG_IA_PRIMITIVES_COUNT                           0x2318
-
-#define GEN6_REG_VS_INVOCATION_COUNT                           0x2320
-
-#define GEN6_REG_GS_INVOCATION_COUNT                           0x2328
-
-#define GEN6_REG_GS_PRIMITIVES_COUNT                           0x2330
-
-#define GEN6_REG_CL_INVOCATION_COUNT                           0x2338
-
-#define GEN6_REG_CL_PRIMITIVES_COUNT                           0x2340
-
-#define GEN6_REG_PS_INVOCATION_COUNT                           0x2348
-
-#define GEN6_REG_PS_DEPTH_COUNT                                        0x2350
-
-#define GEN6_REG_TIMESTAMP                                     0x2358
-
-#define GEN6_REG_OACONTROL                                     0x2360
-#define GEN6_REG_OACONTROL_COUNTER_SELECT__MASK                        0x0000001c
-#define GEN6_REG_OACONTROL_COUNTER_SELECT__SHIFT               2
-#define GEN6_REG_OACONTROL_PERFORMANCE_COUNTER_ENABLE          (0x1 << 0)
-
-
-#define GEN7_REG_MI_PREDICATE_SRC0                             0x2400
-
-#define GEN7_REG_MI_PREDICATE_SRC1                             0x2408
-
-#define GEN7_REG_MI_PREDICATE_DATA                             0x2410
-
-#define GEN7_REG_MI_PREDICATE_RESULT                           0x2418
-
-#define GEN75_REG_MI_PREDICATE_RESULT_1                                0x241c
-
-#define GEN75_REG_MI_PREDICATE_RESULT_2                                0x2214
-
-#define GEN7_REG_3DPRIM_END_OFFSET                             0x2420
-
-#define GEN7_REG_3DPRIM_START_VERTEX                           0x2430
-
-#define GEN7_REG_3DPRIM_VERTEX_COUNT                           0x2434
-
-#define GEN7_REG_3DPRIM_INSTANCE_COUNT                         0x2438
-
-#define GEN7_REG_3DPRIM_START_INSTANCE                         0x243c
-
-#define GEN7_REG_3DPRIM_BASE_VERTEX                            0x2440
-
-#define GEN75_REG_CS_GPR(i0)                                   (0x2600 + 0x8*(i0))
-#define GEN75_REG_CS_GPR__ESIZE                                        0x8
-#define GEN75_REG_CS_GPR__LEN                                  0x10
-
-#define GEN7_REG_GPGPU_DISPATCHDIMX                            0x2500
-
-#define GEN7_REG_GPGPU_DISPATCHDIMY                            0x2504
-
-#define GEN7_REG_GPGPU_DISPATCHDIMZ                            0x2508
-
-
-#define GEN7_REG_SO_NUM_PRIMS_WRITTEN(i0)                      (0x5200 + 0x8*(i0))
-#define GEN7_REG_SO_NUM_PRIMS_WRITTEN__ESIZE                   0x8
-#define GEN7_REG_SO_NUM_PRIMS_WRITTEN__LEN                     0x4
-
-#define GEN7_REG_SO_PRIM_STORAGE_NEEDED(i0)                    (0x5240 + 0x8*(i0))
-#define GEN7_REG_SO_PRIM_STORAGE_NEEDED__ESIZE                 0x8
-#define GEN7_REG_SO_PRIM_STORAGE_NEEDED__LEN                   0x4
-
-#define GEN7_REG_SO_WRITE_OFFSET(i0)                           (0x5280 + 0x8*(i0))
-#define GEN7_REG_SO_WRITE_OFFSET__ESIZE                                0x8
-#define GEN7_REG_SO_WRITE_OFFSET__LEN                          0x4
-
-
-#define GEN7_REG_CACHE_MODE_0                                  0x7000
-#define GEN7_REG_CACHE_MODE_0_HIZ_RAW_STALL_OPT_DISABLE                (0x1 << 2)
-
-#define GEN7_REG_CACHE_MODE_1                                  0x7004
-#define GEN8_REG_CACHE_MODE_1_NP_EARLY_Z_FAILS_DISABLE         (0x1 << 13)
-#define GEN8_REG_CACHE_MODE_1_NP_PMA_FIX_ENABLE                        (0x1 << 11)
-
-
-#define GEN8_REG_L3CNTLREG                                     0x7034
-
-
-#define GEN7_REG_L3SQCREG1                                     0xb010
-#define GEN7_REG_L3SQCREG1_CON4DCUNC                           (0x1 << 24)
-#define GEN7_REG_L3SQCREG1_SQGHPCI__MASK                       0x00ff0000
-#define GEN7_REG_L3SQCREG1_SQGHPCI__SHIFT                      16
-#define GEN7_REG_L3SQCREG1_SQGHPCI_18_6                                (0x73 << 16)
-#define GEN75_REG_L3SQCREG1_SQGPCI__MASK                       0x00f80000
-#define GEN75_REG_L3SQCREG1_SQGPCI__SHIFT                      19
-#define GEN75_REG_L3SQCREG1_SQGPCI_24                          (0xc << 19)
-#define GEN75_REG_L3SQCREG1_SQHPCI__MASK                       0x0007c000
-#define GEN75_REG_L3SQCREG1_SQHPCI__SHIFT                      14
-#define GEN75_REG_L3SQCREG1_SQHPCI_8                           (0x4 << 14)
-
-#define GEN7_REG_L3SQCREG2                                     0xb014
-
-#define GEN7_REG_L3SQCREG3                                     0xb018
-
-#define GEN7_REG_L3CNTLREG1                                    0xb01c
-
-#define GEN7_REG_L3CNTLREG2                                    0xb020
-#define GEN7_REG_L3CNTLREG2_DCWASLMB                           (0x1 << 27)
-#define GEN7_REG_L3CNTLREG2_DCWASS__MASK                       0x07e00000
-#define GEN7_REG_L3CNTLREG2_DCWASS__SHIFT                      21
-#define GEN7_REG_L3CNTLREG2_ROCPSLMB                           (0x1 << 20)
-#define GEN7_REG_L3CNTLREG2_RDOCPL__MASK                       0x000fc000
-#define GEN7_REG_L3CNTLREG2_RDOCPL__SHIFT                      14
-#define GEN7_REG_L3CNTLREG2_URBSLMB                            (0x1 << 7)
-#define GEN7_REG_L3CNTLREG2_URBALL__MASK                       0x0000007e
-#define GEN7_REG_L3CNTLREG2_URBALL__SHIFT                      1
-#define GEN7_REG_L3CNTLREG2_SLMMENB                            (0x1 << 0)
-
-#define GEN7_REG_L3CNTLREG3                                    0xb024
-#define GEN7_REG_L3CNTLREG3_TWALSLMB                           (0x1 << 21)
-#define GEN7_REG_L3CNTLREG3_TXWYALL__MASK                      0x001f8000
-#define GEN7_REG_L3CNTLREG3_TXWYALL__SHIFT                     15
-#define GEN7_REG_L3CNTLREG3_CWASLMB                            (0x1 << 14)
-#define GEN7_REG_L3CNTLREG3_CTWYALL__MASK                      0x00003f00
-#define GEN7_REG_L3CNTLREG3_CTWYALL__SHIFT                     8
-#define GEN7_REG_L3CNTLREG3_ISWYSLMB                           (0x1 << 7)
-#define GEN7_REG_L3CNTLREG3_ISWYALL__MASK                      0x0000007e
-#define GEN7_REG_L3CNTLREG3_ISWYALL__SHIFT                     1
-
-#define GEN6_REG_BCS_SWCTRL                                    0x22200
-#define GEN6_REG_BCS_SWCTRL_DST_TILING_Y                       (0x1 << 1)
-#define GEN6_REG_BCS_SWCTRL_SRC_TILING_Y                       (0x1 << 0)
-
-
-#endif /* GEN_REGS_XML */
diff --git a/src/gallium/drivers/ilo/genhw/gen_render.xml.h b/src/gallium/drivers/ilo/genhw/gen_render.xml.h
deleted file mode 100644 (file)
index 43d271d..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-#ifndef GEN_RENDER_XML
-#define GEN_RENDER_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-#define GEN6_RENDER_TYPE__MASK                                 0xe0000000
-#define GEN6_RENDER_TYPE__SHIFT                                        29
-#define GEN6_RENDER_TYPE_RENDER                                        (0x3 << 29)
-#define GEN6_RENDER_SUBTYPE__MASK                              0x18000000
-#define GEN6_RENDER_SUBTYPE__SHIFT                             27
-#define GEN6_RENDER_SUBTYPE_COMMON                             (0x0 << 27)
-#define GEN6_RENDER_SUBTYPE_SINGLE_DW                          (0x1 << 27)
-#define GEN6_RENDER_SUBTYPE_MEDIA                              (0x2 << 27)
-#define GEN6_RENDER_SUBTYPE_3D                                 (0x3 << 27)
-#define GEN6_RENDER_OPCODE__MASK                               0x07ff0000
-#define GEN6_RENDER_OPCODE__SHIFT                              16
-#define GEN6_RENDER_OPCODE_STATE_BASE_ADDRESS                  (0x101 << 16)
-#define GEN6_RENDER_OPCODE_STATE_SIP                           (0x102 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_VF_STATISTICS               (0xb << 16)
-#define GEN6_RENDER_OPCODE_PIPELINE_SELECT                     (0x104 << 16)
-#define GEN6_RENDER_OPCODE_MEDIA_VFE_STATE                     (0x0 << 16)
-#define GEN6_RENDER_OPCODE_MEDIA_CURBE_LOAD                    (0x1 << 16)
-#define GEN6_RENDER_OPCODE_MEDIA_INTERFACE_DESCRIPTOR_LOAD     (0x2 << 16)
-#define GEN6_RENDER_OPCODE_MEDIA_STATE_FLUSH                   (0x4 << 16)
-#define GEN7_RENDER_OPCODE_GPGPU_WALKER                                (0x105 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS      (0x1 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS      (0x2 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_CLEAR_PARAMS                        (0x4 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_URB                         (0x5 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_DEPTH_BUFFER                        (0x5 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_STENCIL_BUFFER              (0x6 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_HIER_DEPTH_BUFFER           (0x7 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_VERTEX_BUFFERS              (0x8 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_VERTEX_ELEMENTS             (0x9 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_INDEX_BUFFER                        (0xa << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_VF                         (0xc << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_VIEWPORT_STATE_POINTERS     (0xd << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_MULTISAMPLE                 (0xd << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_CC_STATE_POINTERS           (0xe << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_SCISSOR_STATE_POINTERS      (0xf << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_VS                          (0x10 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_GS                          (0x11 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_CLIP                                (0x12 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_SF                          (0x13 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_WM                          (0x14 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_VS                 (0x15 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_GS                 (0x16 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_CONSTANT_PS                 (0x17 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_SAMPLE_MASK                 (0x18 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_CONSTANT_HS                 (0x19 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_CONSTANT_DS                 (0x1a << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_HS                          (0x1b << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_TE                          (0x1c << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_DS                          (0x1d << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_STREAMOUT                   (0x1e << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_SBE                         (0x1f << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_PS                          (0x20 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP     (0x21 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_VIEWPORT_STATE_POINTERS_CC  (0x23 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_BLEND_STATE_POINTERS                (0x24 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_DEPTH_STENCIL_STATE_POINTERS        (0x25 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_VS   (0x26 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_HS   (0x27 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_DS   (0x28 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_GS   (0x29 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POINTERS_PS   (0x2a << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_VS   (0x2b << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_HS   (0x2c << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_DS   (0x2d << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_GS   (0x2e << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_SAMPLER_STATE_POINTERS_PS   (0x2f << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_URB_VS                      (0x30 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_URB_HS                      (0x31 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_URB_DS                      (0x32 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_URB_GS                      (0x33 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_GATHER_CONSTANT_VS         (0x34 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_GATHER_CONSTANT_GS         (0x35 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_GATHER_CONSTANT_HS         (0x36 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_GATHER_CONSTANT_DS         (0x37 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_GATHER_CONSTANT_PS         (0x38 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_BINDING_TABLE_EDIT_VS      (0x43 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_BINDING_TABLE_EDIT_GS      (0x44 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_BINDING_TABLE_EDIT_HS      (0x45 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_BINDING_TABLE_EDIT_DS      (0x45 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_BINDING_TABLE_EDIT_PS      (0x46 << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_VF_INSTANCING               (0x49 << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_VF_SGVS                     (0x4a << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_VF_TOPOLOGY                 (0x4b << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_WM_CHROMAKEY                        (0x4c << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_PS_BLEND                    (0x4d << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_WM_DEPTH_STENCIL            (0x4e << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_PS_EXTRA                    (0x4f << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_RASTER                      (0x50 << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_SBE_SWIZ                    (0x51 << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_WM_HZ_OP                    (0x52 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_DRAWING_RECTANGLE           (0x100 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_DEPTH_BUFFER                        (0x105 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_POLY_STIPPLE_OFFSET         (0x106 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_POLY_STIPPLE_PATTERN                (0x107 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_LINE_STIPPLE                        (0x108 << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_AA_LINE_PARAMETERS          (0x10a << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_GS_SVB_INDEX                        (0x10b << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_MULTISAMPLE                 (0x10d << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_STENCIL_BUFFER              (0x10e << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_HIER_DEPTH_BUFFER           (0x10f << 16)
-#define GEN6_RENDER_OPCODE_3DSTATE_CLEAR_PARAMS                        (0x110 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_PUSH_CONSTANT_ALLOC_VS      (0x112 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_PUSH_CONSTANT_ALLOC_HS      (0x113 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_PUSH_CONSTANT_ALLOC_DS      (0x114 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_PUSH_CONSTANT_ALLOC_GS      (0x115 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_PUSH_CONSTANT_ALLOC_PS      (0x116 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_SO_DECL_LIST                        (0x117 << 16)
-#define GEN7_RENDER_OPCODE_3DSTATE_SO_BUFFER                   (0x118 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_BINDING_TABLE_POOL_ALLOC   (0x119 << 16)
-#define GEN75_RENDER_OPCODE_3DSTATE_GATHER_POOL_ALLOC          (0x11a << 16)
-#define GEN8_RENDER_OPCODE_3DSTATE_SAMPLE_PATTERN              (0x11c << 16)
-#define GEN6_RENDER_OPCODE_PIPE_CONTROL                                (0x200 << 16)
-#define GEN6_RENDER_OPCODE_3DPRIMITIVE                         (0x300 << 16)
-#define GEN6_RENDER_LENGTH__MASK                               0x000000ff
-#define GEN6_RENDER_LENGTH__SHIFT                              0
-#define GEN6_MOCS_LLC__MASK                                    0x00000003
-#define GEN6_MOCS_LLC__SHIFT                                   0
-#define GEN6_MOCS_LLC_PTE                                      0x0
-#define GEN6_MOCS_LLC_UC                                       0x1
-#define GEN6_MOCS_LLC_WB                                       0x2
-#define GEN7_MOCS_LLC__MASK                                    0x00000002
-#define GEN7_MOCS_LLC__SHIFT                                   1
-#define GEN7_MOCS_LLC_PTE                                      (0x0 << 1)
-#define GEN7_MOCS_LLC_WB                                       (0x1 << 1)
-#define GEN75_MOCS_LLC__MASK                                   0x00000006
-#define GEN75_MOCS_LLC__SHIFT                                  1
-#define GEN75_MOCS_LLC_PTE                                     (0x0 << 1)
-#define GEN75_MOCS_LLC_UC                                      (0x1 << 1)
-#define GEN75_MOCS_LLC_WB                                      (0x2 << 1)
-#define GEN75_MOCS_LLC_ELLC                                    (0x3 << 1)
-#define GEN7_MOCS_L3__MASK                                     0x00000001
-#define GEN7_MOCS_L3__SHIFT                                    0
-#define GEN7_MOCS_L3_UC                                                0x0
-#define GEN7_MOCS_L3_WB                                                0x1
-#define GEN8_MOCS_MT__MASK                                     0x00000060
-#define GEN8_MOCS_MT__SHIFT                                    5
-#define GEN8_MOCS_MT_PTE                                       (0x0 << 5)
-#define GEN8_MOCS_MT_UC                                                (0x1 << 5)
-#define GEN8_MOCS_MT_WT                                                (0x2 << 5)
-#define GEN8_MOCS_MT_WB                                                (0x3 << 5)
-#define GEN8_MOCS_CT__MASK                                     0x00000018
-#define GEN8_MOCS_CT__SHIFT                                    3
-#define GEN8_MOCS_CT_ELLC                                      (0x0 << 3)
-#define GEN8_MOCS_CT_LLC_ONLY                                  (0x1 << 3)
-#define GEN8_MOCS_CT_LLC                                       (0x2 << 3)
-#define GEN8_MOCS_CT_L3                                                (0x3 << 3)
-#define GEN9_MOCS__MASK                                                0x0000007f
-#define GEN9_MOCS__SHIFT                                       0
-#define GEN9_MOCS_MT_WT_CT_L3                                  0x5
-#define GEN9_MOCS_MT_WB_CT_L3                                  0x9
-#define GEN6_SBA_ADDR__MASK                                    0xfffff000
-#define GEN6_SBA_ADDR__SHIFT                                   12
-#define GEN6_SBA_ADDR__SHR                                     12
-#define GEN6_SBA_MOCS__MASK                                    0x00000f00
-#define GEN6_SBA_MOCS__SHIFT                                   8
-#define GEN8_SBA_MOCS__MASK                                    0x000007f0
-#define GEN8_SBA_MOCS__SHIFT                                   4
-#define GEN6_SBA_ADDR_MODIFIED                                 (0x1 << 0)
-#define GEN8_SBA_SIZE__MASK                                    0xfffff000
-#define GEN8_SBA_SIZE__SHIFT                                   12
-#define GEN8_SBA_SIZE__SHR                                     12
-#define GEN8_SBA_SIZE_MODIFIED                                 (0x1 << 0)
-#define GEN6_BINDING_TABLE_ADDR__MASK                          0x0000ffe0
-#define GEN6_BINDING_TABLE_ADDR__SHIFT                         5
-#define GEN6_BINDING_TABLE_ADDR__SHR                           5
-#define GEN6_STATE_BASE_ADDRESS__SIZE                          19
-
-
-#define GEN6_SBA_DW1_GENERAL_STATELESS_MOCS__MASK              0x000000f0
-#define GEN6_SBA_DW1_GENERAL_STATELESS_MOCS__SHIFT             4
-#define GEN6_SBA_DW1_GENERAL_STATELESS_FORCE_WRITE_THRU                (0x1 << 3)
-
-
-
-
-
-
-
-
-
-
-
-
-
-#define GEN8_SBA_DW3_STATELESS_MOCS__MASK                      0x007f0000
-#define GEN8_SBA_DW3_STATELESS_MOCS__SHIFT                     16
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#define GEN6_STATE_SIP__SIZE                                   3
-
-
-#define GEN6_SIP_DW1_KERNEL_ADDR__MASK                         0xfffffff0
-#define GEN6_SIP_DW1_KERNEL_ADDR__SHIFT                                4
-#define GEN6_SIP_DW1_KERNEL_ADDR__SHR                          4
-
-
-#define GEN6_PIPELINE_SELECT__SIZE                             1
-
-#define GEN6_PIPELINE_SELECT_DW0_SELECT__MASK                  0x00000003
-#define GEN6_PIPELINE_SELECT_DW0_SELECT__SHIFT                 0
-#define GEN6_PIPELINE_SELECT_DW0_SELECT_3D                     0x0
-#define GEN6_PIPELINE_SELECT_DW0_SELECT_MEDIA                  0x1
-#define GEN7_PIPELINE_SELECT_DW0_SELECT_GPGPU                  0x2
-#define GEN9_PIPELINE_SELECT_DW0_SELECT__MASK                  0x00000700
-#define GEN9_PIPELINE_SELECT_DW0_SELECT__SHIFT                 8
-#define GEN9_PIPELINE_SELECT_DW0_SELECT_3D                     (0x3 << 8)
-
-#define GEN6_PIPE_CONTROL__SIZE                                        6
-
-
-#define GEN7_PIPE_CONTROL_USE_GGTT                             (0x1 << 24)
-#define GEN7_PIPE_CONTROL_LRI_WRITE__MASK                      0x00800000
-#define GEN7_PIPE_CONTROL_LRI_WRITE__SHIFT                     23
-#define GEN7_PIPE_CONTROL_LRI_WRITE_NONE                       (0x0 << 23)
-#define GEN7_PIPE_CONTROL_LRI_WRITE_IMM                                (0x1 << 23)
-#define GEN6_PIPE_CONTROL_PROTECTED_MEMORY_ENABLE              (0x1 << 22)
-#define GEN6_PIPE_CONTROL_STORE_DATA_INDEX                     (0x1 << 21)
-#define GEN6_PIPE_CONTROL_CS_STALL                             (0x1 << 20)
-#define GEN6_PIPE_CONTROL_GLOBAL_SNAPSHOT_COUNT_RESET          (0x1 << 19)
-#define GEN6_PIPE_CONTROL_TLB_INVALIDATE                       (0x1 << 18)
-#define GEN6_PIPE_CONTROL_SYNC_GFDT_SURFACE                    (0x1 << 17)
-#define GEN6_PIPE_CONTROL_GENERIC_MEDIA_STATE_CLEAR            (0x1 << 16)
-#define GEN6_PIPE_CONTROL_WRITE__MASK                          0x0000c000
-#define GEN6_PIPE_CONTROL_WRITE__SHIFT                         14
-#define GEN6_PIPE_CONTROL_WRITE_NONE                           (0x0 << 14)
-#define GEN6_PIPE_CONTROL_WRITE_IMM                            (0x1 << 14)
-#define GEN6_PIPE_CONTROL_WRITE_PS_DEPTH_COUNT                 (0x2 << 14)
-#define GEN6_PIPE_CONTROL_WRITE_TIMESTAMP                      (0x3 << 14)
-#define GEN6_PIPE_CONTROL_DEPTH_STALL                          (0x1 << 13)
-#define GEN6_PIPE_CONTROL_RENDER_CACHE_FLUSH                   (0x1 << 12)
-#define GEN6_PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE         (0x1 << 11)
-#define GEN6_PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE             (0x1 << 10)
-#define GEN6_PIPE_CONTROL_INDIRECT_STATE_POINTERS_DISABLE      (0x1 << 9)
-#define GEN6_PIPE_CONTROL_NOTIFY_ENABLE                                (0x1 << 8)
-#define GEN7_PIPE_CONTROL_WRITE_IMM_FLUSH                      (0x1 << 7)
-#define GEN6_PIPE_CONTROL_PROTECTED_MEMORY_APP_ID__MASK                0x00000040
-#define GEN6_PIPE_CONTROL_PROTECTED_MEMORY_APP_ID__SHIFT       6
-#define GEN7_PIPE_CONTROL_DC_FLUSH                             (0x1 << 5)
-#define GEN6_PIPE_CONTROL_VF_CACHE_INVALIDATE                  (0x1 << 4)
-#define GEN6_PIPE_CONTROL_CONSTANT_CACHE_INVALIDATE            (0x1 << 3)
-#define GEN6_PIPE_CONTROL_STATE_CACHE_INVALIDATE               (0x1 << 2)
-#define GEN6_PIPE_CONTROL_PIXEL_SCOREBOARD_STALL               (0x1 << 1)
-#define GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH                    (0x1 << 0)
-
-#define GEN6_PIPE_CONTROL_DW2_USE_GGTT                         (0x1 << 2)
-#define GEN6_PIPE_CONTROL_DW2_ADDR__MASK                       0xfffffff8
-#define GEN6_PIPE_CONTROL_DW2_ADDR__SHIFT                      3
-#define GEN6_PIPE_CONTROL_DW2_ADDR__SHR                                3
-
-#define GEN7_PIPE_CONTROL_DW2_ADDR__MASK                       0xfffffffc
-#define GEN7_PIPE_CONTROL_DW2_ADDR__SHIFT                      2
-#define GEN7_PIPE_CONTROL_DW2_ADDR__SHR                                2
-
-#define GEN8_PIPE_CONTROL_DW2_ADDR__MASK                       0xfffffffc
-#define GEN8_PIPE_CONTROL_DW2_ADDR__SHIFT                      2
-#define GEN8_PIPE_CONTROL_DW2_ADDR__SHR                                2
-
-
-
-
-
-#endif /* GEN_RENDER_XML */
diff --git a/src/gallium/drivers/ilo/genhw/gen_render_3d.xml.h b/src/gallium/drivers/ilo/genhw/gen_render_3d.xml.h
deleted file mode 100644 (file)
index c79a4f3..0000000
+++ /dev/null
@@ -1,1945 +0,0 @@
-#ifndef GEN_RENDER_3D_XML
-#define GEN_RENDER_3D_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-enum gen_3dprim_type {
-    GEN6_3DPRIM_POINTLIST                                    = 0x1,
-    GEN6_3DPRIM_LINELIST                                     = 0x2,
-    GEN6_3DPRIM_LINESTRIP                                    = 0x3,
-    GEN6_3DPRIM_TRILIST                                              = 0x4,
-    GEN6_3DPRIM_TRISTRIP                                     = 0x5,
-    GEN6_3DPRIM_TRIFAN                                       = 0x6,
-    GEN6_3DPRIM_QUADLIST                                     = 0x7,
-    GEN6_3DPRIM_QUADSTRIP                                    = 0x8,
-    GEN6_3DPRIM_LINELIST_ADJ                                 = 0x9,
-    GEN6_3DPRIM_LINESTRIP_ADJ                                = 0xa,
-    GEN6_3DPRIM_TRILIST_ADJ                                  = 0xb,
-    GEN6_3DPRIM_TRISTRIP_ADJ                                 = 0xc,
-    GEN6_3DPRIM_TRISTRIP_REVERSE                             = 0xd,
-    GEN6_3DPRIM_POLYGON                                              = 0xe,
-    GEN6_3DPRIM_RECTLIST                                     = 0xf,
-    GEN6_3DPRIM_LINELOOP                                     = 0x10,
-    GEN6_3DPRIM_POINTLIST_BF                                 = 0x11,
-    GEN6_3DPRIM_LINESTRIP_CONT                               = 0x12,
-    GEN6_3DPRIM_LINESTRIP_BF                                 = 0x13,
-    GEN6_3DPRIM_LINESTRIP_CONT_BF                            = 0x14,
-    GEN6_3DPRIM_TRIFAN_NOSTIPPLE                             = 0x16,
-    GEN7_3DPRIM_PATCHLIST_1                                  = 0x20,
-    GEN7_3DPRIM_PATCHLIST_2                                  = 0x21,
-    GEN7_3DPRIM_PATCHLIST_3                                  = 0x22,
-    GEN7_3DPRIM_PATCHLIST_4                                  = 0x23,
-    GEN7_3DPRIM_PATCHLIST_5                                  = 0x24,
-    GEN7_3DPRIM_PATCHLIST_6                                  = 0x25,
-    GEN7_3DPRIM_PATCHLIST_7                                  = 0x26,
-    GEN7_3DPRIM_PATCHLIST_8                                  = 0x27,
-    GEN7_3DPRIM_PATCHLIST_9                                  = 0x28,
-    GEN7_3DPRIM_PATCHLIST_10                                 = 0x29,
-    GEN7_3DPRIM_PATCHLIST_11                                 = 0x2a,
-    GEN7_3DPRIM_PATCHLIST_12                                 = 0x2b,
-    GEN7_3DPRIM_PATCHLIST_13                                 = 0x2c,
-    GEN7_3DPRIM_PATCHLIST_14                                 = 0x2d,
-    GEN7_3DPRIM_PATCHLIST_15                                 = 0x2e,
-    GEN7_3DPRIM_PATCHLIST_16                                 = 0x2f,
-    GEN7_3DPRIM_PATCHLIST_17                                 = 0x30,
-    GEN7_3DPRIM_PATCHLIST_18                                 = 0x31,
-    GEN7_3DPRIM_PATCHLIST_19                                 = 0x32,
-    GEN7_3DPRIM_PATCHLIST_20                                 = 0x33,
-    GEN7_3DPRIM_PATCHLIST_21                                 = 0x34,
-    GEN7_3DPRIM_PATCHLIST_22                                 = 0x35,
-    GEN7_3DPRIM_PATCHLIST_23                                 = 0x36,
-    GEN7_3DPRIM_PATCHLIST_24                                 = 0x37,
-    GEN7_3DPRIM_PATCHLIST_25                                 = 0x38,
-    GEN7_3DPRIM_PATCHLIST_26                                 = 0x39,
-    GEN7_3DPRIM_PATCHLIST_27                                 = 0x3a,
-    GEN7_3DPRIM_PATCHLIST_28                                 = 0x3b,
-    GEN7_3DPRIM_PATCHLIST_29                                 = 0x3c,
-    GEN7_3DPRIM_PATCHLIST_30                                 = 0x3d,
-    GEN7_3DPRIM_PATCHLIST_31                                 = 0x3e,
-    GEN7_3DPRIM_PATCHLIST_32                                 = 0x3f,
-};
-
-enum gen_state_alignment {
-    GEN6_ALIGNMENT_COLOR_CALC_STATE                          = 0x40,
-    GEN6_ALIGNMENT_DEPTH_STENCIL_STATE                       = 0x40,
-    GEN6_ALIGNMENT_BLEND_STATE                               = 0x40,
-    GEN6_ALIGNMENT_CLIP_VIEWPORT                             = 0x20,
-    GEN6_ALIGNMENT_SF_VIEWPORT                               = 0x20,
-    GEN7_ALIGNMENT_SF_CLIP_VIEWPORT                          = 0x40,
-    GEN6_ALIGNMENT_CC_VIEWPORT                               = 0x20,
-    GEN6_ALIGNMENT_SCISSOR_RECT                                      = 0x20,
-    GEN6_ALIGNMENT_BINDING_TABLE_STATE                       = 0x20,
-    GEN6_ALIGNMENT_SAMPLER_BORDER_COLOR_STATE                = 0x20,
-    GEN8_ALIGNMENT_SAMPLER_BORDER_COLOR_STATE                = 0x40,
-    GEN6_ALIGNMENT_SAMPLER_STATE                             = 0x20,
-    GEN6_ALIGNMENT_SURFACE_STATE                             = 0x20,
-    GEN8_ALIGNMENT_SURFACE_STATE                             = 0x40,
-};
-
-enum gen_index_format {
-    GEN6_INDEX_BYTE                                          = 0x0,
-    GEN6_INDEX_WORD                                          = 0x1,
-    GEN6_INDEX_DWORD                                         = 0x2,
-};
-
-enum gen_vf_component {
-    GEN6_VFCOMP_NOSTORE                                              = 0x0,
-    GEN6_VFCOMP_STORE_SRC                                    = 0x1,
-    GEN6_VFCOMP_STORE_0                                              = 0x2,
-    GEN6_VFCOMP_STORE_1_FP                                   = 0x3,
-    GEN6_VFCOMP_STORE_1_INT                                  = 0x4,
-    GEN6_VFCOMP_STORE_VID                                    = 0x5,
-    GEN6_VFCOMP_STORE_IID                                    = 0x6,
-};
-
-enum gen_depth_format {
-    GEN6_ZFORMAT_D32_FLOAT_S8X24_UINT                        = 0x0,
-    GEN6_ZFORMAT_D32_FLOAT                                   = 0x1,
-    GEN6_ZFORMAT_D24_UNORM_S8_UINT                           = 0x2,
-    GEN6_ZFORMAT_D24_UNORM_X8_UINT                           = 0x3,
-    GEN6_ZFORMAT_D16_UNORM                                   = 0x5,
-};
-
-enum gen_reorder_mode {
-    GEN7_REORDER_LEADING                                     = 0x0,
-    GEN7_REORDER_TRAILING                                    = 0x1,
-};
-
-enum gen_clip_mode {
-    GEN6_CLIPMODE_NORMAL                                     = 0x0,
-    GEN6_CLIPMODE_REJECT_ALL                                 = 0x3,
-    GEN6_CLIPMODE_ACCEPT_ALL                                 = 0x4,
-};
-
-enum gen_front_winding {
-    GEN6_FRONTWINDING_CW                                     = 0x0,
-    GEN6_FRONTWINDING_CCW                                    = 0x1,
-};
-
-enum gen_fill_mode {
-    GEN6_FILLMODE_SOLID                                              = 0x0,
-    GEN6_FILLMODE_WIREFRAME                                  = 0x1,
-    GEN6_FILLMODE_POINT                                              = 0x2,
-};
-
-enum gen_cull_mode {
-    GEN6_CULLMODE_BOTH                                       = 0x0,
-    GEN6_CULLMODE_NONE                                       = 0x1,
-    GEN6_CULLMODE_FRONT                                              = 0x2,
-    GEN6_CULLMODE_BACK                                       = 0x3,
-};
-
-enum gen_pixel_location {
-    GEN6_PIXLOC_CENTER                                       = 0x0,
-    GEN6_PIXLOC_UL_CORNER                                    = 0x1,
-};
-
-enum gen_sample_count {
-    GEN6_NUMSAMPLES_1                                        = 0x0,
-    GEN8_NUMSAMPLES_2                                        = 0x1,
-    GEN6_NUMSAMPLES_4                                        = 0x2,
-    GEN7_NUMSAMPLES_8                                        = 0x3,
-};
-
-enum gen_inputattr_select {
-    GEN6_INPUTATTR_NORMAL                                    = 0x0,
-    GEN6_INPUTATTR_FACING                                    = 0x1,
-    GEN6_INPUTATTR_W                                         = 0x2,
-    GEN6_INPUTATTR_FACING_W                                  = 0x3,
-};
-
-enum gen_zw_interp {
-    GEN6_ZW_INTERP_PIXEL                                     = 0x0,
-    GEN6_ZW_INTERP_CENTROID                                  = 0x2,
-    GEN6_ZW_INTERP_SAMPLE                                    = 0x3,
-};
-
-enum gen_position_offset {
-    GEN6_POSOFFSET_NONE                                              = 0x0,
-    GEN6_POSOFFSET_CENTROID                                  = 0x2,
-    GEN6_POSOFFSET_SAMPLE                                    = 0x3,
-};
-
-enum gen_edsc_mode {
-    GEN7_EDSC_NORMAL                                         = 0x0,
-    GEN7_EDSC_PSEXEC                                         = 0x1,
-    GEN7_EDSC_PREPS                                          = 0x2,
-};
-
-enum gen_pscdepth_mode {
-    GEN7_PSCDEPTH_OFF                                        = 0x0,
-    GEN7_PSCDEPTH_ON                                         = 0x1,
-    GEN7_PSCDEPTH_ON_GE                                              = 0x2,
-    GEN7_PSCDEPTH_ON_LE                                              = 0x3,
-};
-
-enum gen_msrast_mode {
-    GEN6_MSRASTMODE_OFF_PIXEL                                = 0x0,
-    GEN6_MSRASTMODE_OFF_PATTERN                                      = 0x1,
-    GEN6_MSRASTMODE_ON_PIXEL                                 = 0x2,
-    GEN6_MSRASTMODE_ON_PATTERN                               = 0x3,
-};
-
-#define GEN6_INTERP_NONPERSPECTIVE_SAMPLE                      (0x1 << 5)
-#define GEN6_INTERP_NONPERSPECTIVE_CENTROID                    (0x1 << 4)
-#define GEN6_INTERP_NONPERSPECTIVE_PIXEL                       (0x1 << 3)
-#define GEN6_INTERP_PERSPECTIVE_SAMPLE                         (0x1 << 2)
-#define GEN6_INTERP_PERSPECTIVE_CENTROID                       (0x1 << 1)
-#define GEN6_INTERP_PERSPECTIVE_PIXEL                          (0x1 << 0)
-#define GEN6_PS_DISPATCH_32                                    (0x1 << 2)
-#define GEN6_PS_DISPATCH_16                                    (0x1 << 1)
-#define GEN6_PS_DISPATCH_8                                     (0x1 << 0)
-#define GEN6_THREADDISP_SPF                                    (0x1 << 31)
-#define GEN6_THREADDISP_VME                                    (0x1 << 30)
-#define GEN6_THREADDISP_SAMPLER_COUNT__MASK                    0x38000000
-#define GEN6_THREADDISP_SAMPLER_COUNT__SHIFT                   27
-#define GEN7_THREADDISP_DENORMAL__MASK                         0x04000000
-#define GEN7_THREADDISP_DENORMAL__SHIFT                                26
-#define GEN7_THREADDISP_DENORMAL_FTZ                           (0x0 << 26)
-#define GEN7_THREADDISP_DENORMAL_RET                           (0x1 << 26)
-#define GEN6_THREADDISP_BINDING_TABLE_SIZE__MASK               0x03fc0000
-#define GEN6_THREADDISP_BINDING_TABLE_SIZE__SHIFT              18
-#define GEN6_THREADDISP_PRIORITY_HIGH                          (0x1 << 17)
-#define GEN6_THREADDISP_FP_MODE_ALT                            (0x1 << 16)
-#define GEN7_ROUNDING_MODE__MASK                               0x0000c000
-#define GEN7_ROUNDING_MODE__SHIFT                              14
-#define GEN7_ROUNDING_MODE_RTNE                                        (0x0 << 14)
-#define GEN7_ROUNDING_MODE_RU                                  (0x1 << 14)
-#define GEN7_ROUNDING_MODE_RD                                  (0x2 << 14)
-#define GEN7_ROUNDING_MODE_RTZ                                 (0x3 << 14)
-#define GEN6_THREADDISP_ILLEGAL_CODE_EXCEPTION                 (0x1 << 13)
-#define GEN75_THREADDISP_ACCESS_UAV                            (0x1 << 12)
-#define GEN6_THREADDISP_MASK_STACK_EXCEPTION                   (0x1 << 11)
-#define GEN6_THREADDISP_SOFTWARE_EXCEPTION                     (0x1 << 7)
-#define GEN6_THREADSCRATCH_ADDR__MASK                          0xfffffc00
-#define GEN6_THREADSCRATCH_ADDR__SHIFT                         10
-#define GEN6_THREADSCRATCH_ADDR__SHR                           10
-#define GEN6_THREADSCRATCH_SPACE_PER_THREAD__MASK              0x0000000f
-#define GEN6_THREADSCRATCH_SPACE_PER_THREAD__SHIFT             0
-#define GEN6_3DSTATE_VF_STATISTICS__SIZE                       1
-
-#define GEN6_VF_STATS_DW0_ENABLE                               (0x1 << 0)
-
-#define GEN6_3DSTATE_BINDING_TABLE_POINTERS__SIZE              4
-
-#define GEN6_BINDING_TABLE_PTR_DW0_PS_CHANGED                  (0x1 << 12)
-#define GEN6_BINDING_TABLE_PTR_DW0_GS_CHANGED                  (0x1 << 9)
-#define GEN6_BINDING_TABLE_PTR_DW0_VS_CHANGED                  (0x1 << 8)
-
-
-
-
-#define GEN6_3DSTATE_SAMPLER_STATE_POINTERS__SIZE              4
-
-#define GEN6_SAMPLER_PTR_DW0_PS_CHANGED                                (0x1 << 12)
-#define GEN6_SAMPLER_PTR_DW0_GS_CHANGED                                (0x1 << 9)
-#define GEN6_SAMPLER_PTR_DW0_VS_CHANGED                                (0x1 << 8)
-
-#define GEN6_SAMPLER_PTR_DW1_VS_ADDR__MASK                     0xffffffe0
-#define GEN6_SAMPLER_PTR_DW1_VS_ADDR__SHIFT                    5
-#define GEN6_SAMPLER_PTR_DW1_VS_ADDR__SHR                      5
-
-#define GEN6_SAMPLER_PTR_DW2_GS_ADDR__MASK                     0xffffffe0
-#define GEN6_SAMPLER_PTR_DW2_GS_ADDR__SHIFT                    5
-#define GEN6_SAMPLER_PTR_DW2_GS_ADDR__SHR                      5
-
-#define GEN6_SAMPLER_PTR_DW3_PS_ADDR__MASK                     0xffffffe0
-#define GEN6_SAMPLER_PTR_DW3_PS_ADDR__SHIFT                    5
-#define GEN6_SAMPLER_PTR_DW3_PS_ADDR__SHR                      5
-
-#define GEN6_3DSTATE_URB__SIZE                                 3
-
-
-#define GEN6_URB_DW1_VS_ENTRY_SIZE__MASK                       0x00ff0000
-#define GEN6_URB_DW1_VS_ENTRY_SIZE__SHIFT                      16
-#define GEN6_URB_DW1_VS_ENTRY_COUNT__MASK                      0x0000ffff
-#define GEN6_URB_DW1_VS_ENTRY_COUNT__SHIFT                     0
-#define GEN6_URB_DW1_VS_ENTRY_COUNT__ALIGN                     4
-
-#define GEN6_URB_DW2_GS_ENTRY_COUNT__MASK                      0x0003ff00
-#define GEN6_URB_DW2_GS_ENTRY_COUNT__SHIFT                     8
-#define GEN6_URB_DW2_GS_ENTRY_COUNT__ALIGN                     4
-#define GEN6_URB_DW2_GS_ENTRY_SIZE__MASK                       0x00000007
-#define GEN6_URB_DW2_GS_ENTRY_SIZE__SHIFT                      0
-
-#define GEN7_3DSTATE_URB_ANY__SIZE                             2
-
-
-#define GEN7_URB_DW1_OFFSET__MASK                              0x3e000000
-#define GEN7_URB_DW1_OFFSET__SHIFT                             25
-#define GEN75_URB_DW1_OFFSET__MASK                             0x7e000000
-#define GEN75_URB_DW1_OFFSET__SHIFT                            25
-#define GEN8_URB_DW1_OFFSET__MASK                              0xfe000000
-#define GEN8_URB_DW1_OFFSET__SHIFT                             25
-#define GEN7_URB_DW1_ENTRY_SIZE__MASK                          0x01ff0000
-#define GEN7_URB_DW1_ENTRY_SIZE__SHIFT                         16
-#define GEN7_URB_DW1_ENTRY_COUNT__MASK                         0x0000ffff
-#define GEN7_URB_DW1_ENTRY_COUNT__SHIFT                                0
-
-#define GEN75_3DSTATE_GATHER_CONSTANT_ANY__SIZE                        130
-
-
-#define GEN75_GATHER_CONST_DW1_BT_VALID__MASK                  0xffff0000
-#define GEN75_GATHER_CONST_DW1_BT_VALID__SHIFT                 16
-#define GEN75_GATHER_CONST_DW1_BT_BLOCK__MASK                  0x0000f000
-#define GEN75_GATHER_CONST_DW1_BT_BLOCK__SHIFT                 12
-
-#define GEN75_GATHER_CONST_DW2_GATHER_BUFFER_OFFSET__MASK      0x007fffc0
-#define GEN75_GATHER_CONST_DW2_GATHER_BUFFER_OFFSET__SHIFT     6
-#define GEN75_GATHER_CONST_DW2_GATHER_BUFFER_OFFSET__SHR       6
-#define GEN8_GATHER_CONST_DW2_DX9_STALL                                (0x1 << 5)
-#define GEN75_GATHER_CONST_DW2_DX9_ENABLE                      (0x1 << 4)
-
-#define GEN75_GATHER_CONST_DW_ENTRY_HIGH__MASK                 0xffff0000
-#define GEN75_GATHER_CONST_DW_ENTRY_HIGH__SHIFT                        16
-#define GEN75_GATHER_CONST_DW_ENTRY_OFFSET__MASK               0x0000ff00
-#define GEN75_GATHER_CONST_DW_ENTRY_OFFSET__SHIFT              8
-#define GEN75_GATHER_CONST_DW_ENTRY_CHANNEL_MASK__MASK         0x000000f0
-#define GEN75_GATHER_CONST_DW_ENTRY_CHANNEL_MASK__SHIFT                4
-#define GEN75_GATHER_CONST_DW_ENTRY_BT_INDEX__MASK             0x0000001f
-#define GEN75_GATHER_CONST_DW_ENTRY_BT_INDEX__SHIFT            0
-
-#define GEN75_3DSTATE_BINDING_TABLE_EDIT_ANY__SIZE             258
-
-
-#define GEN75_BT_EDIT_DW1_BT_BLOCK_CLEAR__MASK                 0xffff0000
-#define GEN75_BT_EDIT_DW1_BT_BLOCK_CLEAR__SHIFT                        16
-#define GEN75_BT_EDIT_DW1_TARGET__MASK                         0x00000003
-#define GEN75_BT_EDIT_DW1_TARGET__SHIFT                                0
-#define GEN75_BT_EDIT_DW1_TARGET_CORE0                         0x1
-#define GEN75_BT_EDIT_DW1_TARGET_CORE1                         0x2
-#define GEN75_BT_EDIT_DW1_TARGET_ALL                           0x3
-
-#define GEN75_BT_EDIT_DW_ENTRY_BT_INDEX__MASK                  0x00ff0000
-#define GEN75_BT_EDIT_DW_ENTRY_BT_INDEX__SHIFT                 16
-#define GEN75_BT_EDIT_DW_ENTRY_SURFACE_STATE_ADDR__MASK                0x0000ffff
-#define GEN75_BT_EDIT_DW_ENTRY_SURFACE_STATE_ADDR__SHIFT       0
-#define GEN75_BT_EDIT_DW_ENTRY_SURFACE_STATE_ADDR__SHR         5
-#define GEN8_BT_EDIT_DW_ENTRY_SURFACE_STATE_ADDR__MASK         0x0000ffff
-#define GEN8_BT_EDIT_DW_ENTRY_SURFACE_STATE_ADDR__SHIFT                0
-#define GEN8_BT_EDIT_DW_ENTRY_SURFACE_STATE_ADDR__SHR          6
-
-#define GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_ANY__SIZE             2
-
-
-#define GEN7_PCB_ALLOC_DW1_OFFSET__MASK                                0x000f0000
-#define GEN7_PCB_ALLOC_DW1_OFFSET__SHIFT                       16
-#define GEN7_PCB_ALLOC_DW1_SIZE__MASK                          0x0000001f
-#define GEN7_PCB_ALLOC_DW1_SIZE__SHIFT                         0
-
-#define GEN75_PCB_ALLOC_DW1_OFFSET__MASK                       0x001f0000
-#define GEN75_PCB_ALLOC_DW1_OFFSET__SHIFT                      16
-#define GEN75_PCB_ALLOC_DW1_SIZE__MASK                         0x0000003f
-#define GEN75_PCB_ALLOC_DW1_SIZE__SHIFT                                0
-
-#define GEN75_3DSTATE_BINDING_TABLE_POOL_ALLOC__SIZE           3
-
-
-#define GEN75_BT_POOL_ALLOC_DW1_ADDR__MASK                     0xfffff000
-#define GEN75_BT_POOL_ALLOC_DW1_ADDR__SHIFT                    12
-#define GEN75_BT_POOL_ALLOC_DW1_ADDR__SHR                      12
-#define GEN75_BT_POOL_ALLOC_DW1_ENABLE                         (0x1 << 11)
-#define GEN75_BT_POOL_ALLOC_DW1_MOCS__MASK                     0x00000780
-#define GEN75_BT_POOL_ALLOC_DW1_MOCS__SHIFT                    7
-#define GEN8_BT_POOL_ALLOC_DW1_MOCS__MASK                      0x0000007f
-#define GEN8_BT_POOL_ALLOC_DW1_MOCS__SHIFT                     0
-
-#define GEN75_BT_POOL_ALLOC_DW2_END_ADDR__MASK                 0xfffff000
-#define GEN75_BT_POOL_ALLOC_DW2_END_ADDR__SHIFT                        12
-#define GEN75_BT_POOL_ALLOC_DW2_END_ADDR__SHR                  12
-
-
-#define GEN8_BT_POOL_ALLOC_DW3_SIZE__MASK                      0xfffff000
-#define GEN8_BT_POOL_ALLOC_DW3_SIZE__SHIFT                     12
-#define GEN8_BT_POOL_ALLOC_DW3_SIZE__SHR                       12
-
-#define GEN75_3DSTATE_GATHER_POOL_ALLOC__SIZE                  3
-
-
-#define GEN75_GATHER_POOL_ALLOC_DW1_ADDR__MASK                 0xfffff000
-#define GEN75_GATHER_POOL_ALLOC_DW1_ADDR__SHIFT                        12
-#define GEN75_GATHER_POOL_ALLOC_DW1_ADDR__SHR                  12
-#define GEN75_GATHER_POOL_ALLOC_DW1_ENABLE                     (0x1 << 11)
-#define GEN75_GATHER_POOL_ALLOC_DW1_MOCS__MASK                 0x0000000f
-#define GEN75_GATHER_POOL_ALLOC_DW1_MOCS__SHIFT                        0
-#define GEN8_GATHER_POOL_ALLOC_DW1_MOCS__MASK                  0x0000007f
-#define GEN8_GATHER_POOL_ALLOC_DW1_MOCS__SHIFT                 0
-
-#define GEN75_GATHER_POOL_ALLOC_DW2_END_ADDR__MASK             0xfffff000
-#define GEN75_GATHER_POOL_ALLOC_DW2_END_ADDR__SHIFT            12
-#define GEN75_GATHER_POOL_ALLOC_DW2_END_ADDR__SHR              12
-
-
-#define GEN8_GATHER_POOL_ALLOC_DW3_SIZE__MASK                  0xfffff000
-#define GEN8_GATHER_POOL_ALLOC_DW3_SIZE__SHIFT                 12
-#define GEN8_GATHER_POOL_ALLOC_DW3_SIZE__SHR                   12
-
-#define GEN6_3DSTATE_VERTEX_BUFFERS__SIZE                      133
-
-
-
-#define GEN6_VB_DW0_INDEX__MASK                                        0xfc000000
-#define GEN6_VB_DW0_INDEX__SHIFT                               26
-#define GEN8_VB_DW0_MOCS__MASK                                 0x007f0000
-#define GEN8_VB_DW0_MOCS__SHIFT                                        16
-#define GEN6_VB_DW0_ACCESS__MASK                               0x00100000
-#define GEN6_VB_DW0_ACCESS__SHIFT                              20
-#define GEN6_VB_DW0_ACCESS_VERTEXDATA                          (0x0 << 20)
-#define GEN6_VB_DW0_ACCESS_INSTANCEDATA                                (0x1 << 20)
-#define GEN6_VB_DW0_MOCS__MASK                                 0x000f0000
-#define GEN6_VB_DW0_MOCS__SHIFT                                        16
-#define GEN7_VB_DW0_ADDR_MODIFIED                              (0x1 << 14)
-#define GEN6_VB_DW0_IS_NULL                                    (0x1 << 13)
-#define GEN6_VB_DW0_CACHE_INVALIDATE                           (0x1 << 12)
-#define GEN6_VB_DW0_PITCH__MASK                                        0x00000fff
-#define GEN6_VB_DW0_PITCH__SHIFT                               0
-
-
-
-
-
-
-
-#define GEN6_3DSTATE_VERTEX_ELEMENTS__SIZE                     69
-
-
-
-#define GEN6_VE_DW0_VB_INDEX__MASK                             0xfc000000
-#define GEN6_VE_DW0_VB_INDEX__SHIFT                            26
-#define GEN6_VE_DW0_VALID                                      (0x1 << 25)
-#define GEN6_VE_DW0_FORMAT__MASK                               0x01ff0000
-#define GEN6_VE_DW0_FORMAT__SHIFT                              16
-#define GEN6_VE_DW0_EDGE_FLAG_ENABLE                           (0x1 << 15)
-#define GEN6_VE_DW0_VB_OFFSET__MASK                            0x000007ff
-#define GEN6_VE_DW0_VB_OFFSET__SHIFT                           0
-#define GEN75_VE_DW0_VB_OFFSET__MASK                           0x00000fff
-#define GEN75_VE_DW0_VB_OFFSET__SHIFT                          0
-
-#define GEN6_VE_DW1_COMP0__MASK                                        0x70000000
-#define GEN6_VE_DW1_COMP0__SHIFT                               28
-#define GEN6_VE_DW1_COMP1__MASK                                        0x07000000
-#define GEN6_VE_DW1_COMP1__SHIFT                               24
-#define GEN6_VE_DW1_COMP2__MASK                                        0x00700000
-#define GEN6_VE_DW1_COMP2__SHIFT                               20
-#define GEN6_VE_DW1_COMP3__MASK                                        0x00070000
-#define GEN6_VE_DW1_COMP3__SHIFT                               16
-
-#define GEN6_3DSTATE_INDEX_BUFFER__SIZE                                5
-
-#define GEN6_IB_DW0_MOCS__MASK                                 0x0000f000
-#define GEN6_IB_DW0_MOCS__SHIFT                                        12
-#define GEN6_IB_DW0_CUT_INDEX_ENABLE                           (0x1 << 10)
-#define GEN6_IB_DW0_FORMAT__MASK                               0x00000300
-#define GEN6_IB_DW0_FORMAT__SHIFT                              8
-
-
-
-
-
-#define GEN8_IB_DW1_FORMAT__MASK                               0x00000300
-#define GEN8_IB_DW1_FORMAT__SHIFT                              8
-#define GEN8_IB_DW1_MOCS__MASK                                 0x0000007f
-#define GEN8_IB_DW1_MOCS__SHIFT                                        0
-
-
-
-
-#define GEN75_3DSTATE_VF__SIZE                                 2
-
-#define GEN75_VF_DW0_CUT_INDEX_ENABLE                          (0x1 << 8)
-
-
-#define GEN8_3DSTATE_VF_INSTANCING__SIZE                       3
-
-
-#define GEN8_INSTANCING_DW1_ENABLE                             (0x1 << 8)
-#define GEN8_INSTANCING_DW1_VE_INDEX__MASK                     0x0000003f
-#define GEN8_INSTANCING_DW1_VE_INDEX__SHIFT                    0
-
-
-#define GEN8_3DSTATE_VF_SGVS__SIZE                             2
-
-
-#define GEN8_SGVS_DW1_IID_ENABLE                               (0x1 << 31)
-#define GEN8_SGVS_DW1_IID_COMP__MASK                           0x60000000
-#define GEN8_SGVS_DW1_IID_COMP__SHIFT                          29
-#define GEN8_SGVS_DW1_IID_OFFSET__MASK                         0x003f0000
-#define GEN8_SGVS_DW1_IID_OFFSET__SHIFT                                16
-#define GEN8_SGVS_DW1_VID_ENABLE                               (0x1 << 15)
-#define GEN8_SGVS_DW1_VID_COMP__MASK                           0x00006000
-#define GEN8_SGVS_DW1_VID_COMP__SHIFT                          13
-#define GEN8_SGVS_DW1_VID_OFFSET__MASK                         0x0000003f
-#define GEN8_SGVS_DW1_VID_OFFSET__SHIFT                                0
-
-#define GEN8_3DSTATE_VF_TOPOLOGY__SIZE                         2
-
-
-#define GEN8_TOPOLOGY_DW1_TYPE__MASK                           0x0000003f
-#define GEN8_TOPOLOGY_DW1_TYPE__SHIFT                          0
-
-#define GEN6_3DSTATE_VIEWPORT_STATE_POINTERS__SIZE             4
-
-#define GEN6_VP_PTR_DW0_CC_CHANGED                             (0x1 << 12)
-#define GEN6_VP_PTR_DW0_SF_CHANGED                             (0x1 << 11)
-#define GEN6_VP_PTR_DW0_CLIP_CHANGED                           (0x1 << 10)
-
-#define GEN6_VP_PTR_DW1_CLIP_ADDR__MASK                                0xffffffe0
-#define GEN6_VP_PTR_DW1_CLIP_ADDR__SHIFT                       5
-#define GEN6_VP_PTR_DW1_CLIP_ADDR__SHR                         5
-
-#define GEN6_VP_PTR_DW2_SF_ADDR__MASK                          0xffffffe0
-#define GEN6_VP_PTR_DW2_SF_ADDR__SHIFT                         5
-#define GEN6_VP_PTR_DW2_SF_ADDR__SHR                           5
-
-#define GEN6_VP_PTR_DW3_CC_ADDR__MASK                          0xffffffe0
-#define GEN6_VP_PTR_DW3_CC_ADDR__SHIFT                         5
-#define GEN6_VP_PTR_DW3_CC_ADDR__SHR                           5
-
-#define GEN6_3DSTATE_CC_STATE_POINTERS__SIZE                   4
-
-
-#define GEN6_CC_PTR_DW1_BLEND_CHANGED                          (0x1 << 0)
-#define GEN6_CC_PTR_DW1_BLEND_ADDR__MASK                       0xffffffc0
-#define GEN6_CC_PTR_DW1_BLEND_ADDR__SHIFT                      6
-#define GEN6_CC_PTR_DW1_BLEND_ADDR__SHR                                6
-
-#define GEN6_CC_PTR_DW2_ZS_CHANGED                             (0x1 << 0)
-#define GEN6_CC_PTR_DW2_ZS_ADDR__MASK                          0xffffffc0
-#define GEN6_CC_PTR_DW2_ZS_ADDR__SHIFT                         6
-#define GEN6_CC_PTR_DW2_ZS_ADDR__SHR                           6
-
-#define GEN6_CC_PTR_DW3_CC_CHANGED                             (0x1 << 0)
-#define GEN6_CC_PTR_DW3_CC_ADDR__MASK                          0xffffffc0
-#define GEN6_CC_PTR_DW3_CC_ADDR__SHIFT                         6
-#define GEN6_CC_PTR_DW3_CC_ADDR__SHR                           6
-
-#define GEN6_3DSTATE_SCISSOR_STATE_POINTERS__SIZE              2
-
-
-#define GEN6_SCISSOR_PTR_DW1_ADDR__MASK                                0xffffffe0
-#define GEN6_SCISSOR_PTR_DW1_ADDR__SHIFT                       5
-#define GEN6_SCISSOR_PTR_DW1_ADDR__SHR                         5
-
-#define GEN7_3DSTATE_POINTERS_ANY__SIZE                                2
-
-
-#define GEN7_PTR_DW1_ADDR__MASK                                        0xffffffe0
-#define GEN7_PTR_DW1_ADDR__SHIFT                               5
-#define GEN7_PTR_DW1_ADDR__SHR                                 5
-#define GEN8_PTR_DW1_CHANGED                                   (0x1 << 0)
-
-#define GEN6_3DSTATE_VS__SIZE                                  9
-
-
-#define GEN6_VS_DW1_KERNEL_ADDR__MASK                          0xffffffc0
-#define GEN6_VS_DW1_KERNEL_ADDR__SHIFT                         6
-#define GEN6_VS_DW1_KERNEL_ADDR__SHR                           6
-
-
-
-#define GEN6_VS_DW4_URB_GRF_START__MASK                                0x01f00000
-#define GEN6_VS_DW4_URB_GRF_START__SHIFT                       20
-#define GEN6_VS_DW4_URB_READ_LEN__MASK                         0x0001f800
-#define GEN6_VS_DW4_URB_READ_LEN__SHIFT                                11
-#define GEN6_VS_DW4_URB_READ_OFFSET__MASK                      0x000003f0
-#define GEN6_VS_DW4_URB_READ_OFFSET__SHIFT                     4
-
-#define GEN6_VS_DW5_MAX_THREADS__MASK                          0xfe000000
-#define GEN6_VS_DW5_MAX_THREADS__SHIFT                         25
-#define GEN75_VS_DW5_MAX_THREADS__MASK                         0xff800000
-#define GEN75_VS_DW5_MAX_THREADS__SHIFT                                23
-#define GEN6_VS_DW5_STATISTICS                                 (0x1 << 10)
-#define GEN6_VS_DW5_CACHE_DISABLE                              (0x1 << 1)
-#define GEN6_VS_DW5_VS_ENABLE                                  (0x1 << 0)
-
-
-
-#define GEN8_VS_DW1_KERNEL_ADDR__MASK                          0xffffffc0
-#define GEN8_VS_DW1_KERNEL_ADDR__SHIFT                         6
-#define GEN8_VS_DW1_KERNEL_ADDR__SHR                           6
-
-
-
-
-
-#define GEN8_VS_DW6_URB_GRF_START__MASK                                0x01f00000
-#define GEN8_VS_DW6_URB_GRF_START__SHIFT                       20
-#define GEN8_VS_DW6_URB_READ_LEN__MASK                         0x0001f800
-#define GEN8_VS_DW6_URB_READ_LEN__SHIFT                                11
-#define GEN8_VS_DW6_URB_READ_OFFSET__MASK                      0x000003f0
-#define GEN8_VS_DW6_URB_READ_OFFSET__SHIFT                     4
-
-#define GEN8_VS_DW7_MAX_THREADS__MASK                          0xff800000
-#define GEN8_VS_DW7_MAX_THREADS__SHIFT                         23
-#define GEN8_VS_DW7_STATISTICS                                 (0x1 << 10)
-#define GEN8_VS_DW7_SIMD8_ENABLE                               (0x1 << 2)
-#define GEN8_VS_DW7_CACHE_DISABLE                              (0x1 << 1)
-#define GEN8_VS_DW7_VS_ENABLE                                  (0x1 << 0)
-
-#define GEN8_VS_DW8_VUE_OUT_READ_OFFSET__MASK                  0x07e00000
-#define GEN8_VS_DW8_VUE_OUT_READ_OFFSET__SHIFT                 21
-#define GEN8_VS_DW8_VUE_OUT_LEN__MASK                          0x001f0000
-#define GEN8_VS_DW8_VUE_OUT_LEN__SHIFT                         16
-#define GEN8_VS_DW8_UCP_CLIP_ENABLES__MASK                     0x0000ff00
-#define GEN8_VS_DW8_UCP_CLIP_ENABLES__SHIFT                    8
-#define GEN8_VS_DW8_UCP_CULL_ENABLES__MASK                     0x000000ff
-#define GEN8_VS_DW8_UCP_CULL_ENABLES__SHIFT                    0
-
-#define GEN7_3DSTATE_HS__SIZE                                  9
-
-
-#define GEN7_HS_DW1_DISPATCH_MAX_THREADS__MASK                 0x0000007f
-#define GEN7_HS_DW1_DISPATCH_MAX_THREADS__SHIFT                        0
-#define GEN75_HS_DW1_DISPATCH_MAX_THREADS__MASK                        0x000000ff
-#define GEN75_HS_DW1_DISPATCH_MAX_THREADS__SHIFT               0
-
-#define GEN7_HS_DW2_HS_ENABLE                                  (0x1 << 31)
-#define GEN7_HS_DW2_STATISTICS                                 (0x1 << 29)
-#define GEN7_HS_DW2_INSTANCE_COUNT__MASK                       0x0000000f
-#define GEN7_HS_DW2_INSTANCE_COUNT__SHIFT                      0
-
-#define GEN7_HS_DW3_KERNEL_ADDR__MASK                          0xffffffc0
-#define GEN7_HS_DW3_KERNEL_ADDR__SHIFT                         6
-#define GEN7_HS_DW3_KERNEL_ADDR__SHR                           6
-
-
-#define GEN7_HS_DW5_SPF                                                (0x1 << 27)
-#define GEN7_HS_DW5_VME                                                (0x1 << 26)
-#define GEN75_HS_DW5_ACCESS_UAV                                        (0x1 << 25)
-#define GEN7_HS_DW5_INCLUDE_VERTEX_HANDLES                     (0x1 << 24)
-#define GEN7_HS_DW5_URB_GRF_START__MASK                                0x00f80000
-#define GEN7_HS_DW5_URB_GRF_START__SHIFT                       19
-#define GEN7_HS_DW5_URB_READ_LEN__MASK                         0x0001f800
-#define GEN7_HS_DW5_URB_READ_LEN__SHIFT                                11
-#define GEN7_HS_DW5_URB_READ_OFFSET__MASK                      0x000003f0
-#define GEN7_HS_DW5_URB_READ_OFFSET__SHIFT                     4
-
-#define GEN7_HS_DW6_URB_SEMAPHORE_ADDR__MASK                   0x00000fff
-#define GEN7_HS_DW6_URB_SEMAPHORE_ADDR__SHIFT                  0
-#define GEN7_HS_DW6_URB_SEMAPHORE_ADDR__SHR                    6
-#define GEN75_HS_DW6_URB_SEMAPHORE_ADDR__MASK                  0x00001fff
-#define GEN75_HS_DW6_URB_SEMAPHORE_ADDR__SHIFT                 0
-#define GEN75_HS_DW6_URB_SEMAPHORE_ADDR__SHR                   6
-
-
-
-
-#define GEN8_HS_DW2_HS_ENABLE                                  (0x1 << 31)
-#define GEN8_HS_DW2_STATISTICS                                 (0x1 << 29)
-#define GEN8_HS_DW2_MAX_THREADS__MASK                          0x0001ff00
-#define GEN8_HS_DW2_MAX_THREADS__SHIFT                         8
-#define GEN8_HS_DW2_INSTANCE_COUNT__MASK                       0x0000000f
-#define GEN8_HS_DW2_INSTANCE_COUNT__SHIFT                      0
-
-#define GEN8_HS_DW3_KERNEL_ADDR__MASK                          0xffffffc0
-#define GEN8_HS_DW3_KERNEL_ADDR__SHIFT                         6
-#define GEN8_HS_DW3_KERNEL_ADDR__SHR                           6
-
-
-
-
-#define GEN8_HS_DW7_SPF                                                (0x1 << 27)
-#define GEN8_HS_DW7_VME                                                (0x1 << 26)
-#define GEN8_HS_DW7_ACCESS_UAV                                 (0x1 << 25)
-#define GEN8_HS_DW7_INCLUDE_VERTEX_HANDLES                     (0x1 << 24)
-#define GEN8_HS_DW7_URB_GRF_START__MASK                                0x00f80000
-#define GEN8_HS_DW7_URB_GRF_START__SHIFT                       19
-#define GEN8_HS_DW7_URB_READ_LEN__MASK                         0x0001f800
-#define GEN8_HS_DW7_URB_READ_LEN__SHIFT                                11
-#define GEN8_HS_DW7_URB_READ_OFFSET__MASK                      0x000003f0
-#define GEN8_HS_DW7_URB_READ_OFFSET__SHIFT                     4
-
-
-#define GEN7_3DSTATE_TE__SIZE                                  4
-
-
-#define GEN7_TE_DW1_PARTITIONING__MASK                         0x00003000
-#define GEN7_TE_DW1_PARTITIONING__SHIFT                                12
-#define GEN7_TE_DW1_PARTITIONING_INTEGER                       (0x0 << 12)
-#define GEN7_TE_DW1_PARTITIONING_ODD_FRACTIONAL                        (0x1 << 12)
-#define GEN7_TE_DW1_PARTITIONING_EVEN_FRACTIONAL               (0x2 << 12)
-#define GEN7_TE_DW1_OUTPUT_TOPO__MASK                          0x00000300
-#define GEN7_TE_DW1_OUTPUT_TOPO__SHIFT                         8
-#define GEN7_TE_DW1_OUTPUT_TOPO_POINT                          (0x0 << 8)
-#define GEN7_TE_DW1_OUTPUT_TOPO_LINE                           (0x1 << 8)
-#define GEN7_TE_DW1_OUTPUT_TOPO_TRI_CW                         (0x2 << 8)
-#define GEN7_TE_DW1_OUTPUT_TOPO_TRI_CCW                                (0x3 << 8)
-#define GEN7_TE_DW1_DOMAIN__MASK                               0x00000030
-#define GEN7_TE_DW1_DOMAIN__SHIFT                              4
-#define GEN7_TE_DW1_DOMAIN_QUAD                                        (0x0 << 4)
-#define GEN7_TE_DW1_DOMAIN_TRI                                 (0x1 << 4)
-#define GEN7_TE_DW1_DOMAIN_ISOLINE                             (0x2 << 4)
-#define GEN7_TE_DW1_MODE__MASK                                 0x00000006
-#define GEN7_TE_DW1_MODE__SHIFT                                        1
-#define GEN7_TE_DW1_MODE_HW                                    (0x0 << 1)
-#define GEN7_TE_DW1_MODE_SW                                    (0x1 << 1)
-#define GEN7_TE_DW1_TE_ENABLE                                  (0x1 << 0)
-
-
-
-#define GEN7_3DSTATE_DS__SIZE                                  11
-
-
-#define GEN7_DS_DW1_KERNEL_ADDR__MASK                          0xffffffc0
-#define GEN7_DS_DW1_KERNEL_ADDR__SHIFT                         6
-#define GEN7_DS_DW1_KERNEL_ADDR__SHR                           6
-
-
-
-#define GEN7_DS_DW4_URB_GRF_START__MASK                                0x01f00000
-#define GEN7_DS_DW4_URB_GRF_START__SHIFT                       20
-#define GEN7_DS_DW4_URB_READ_LEN__MASK                         0x0003f800
-#define GEN7_DS_DW4_URB_READ_LEN__SHIFT                                11
-#define GEN7_DS_DW4_URB_READ_OFFSET__MASK                      0x000003f0
-#define GEN7_DS_DW4_URB_READ_OFFSET__SHIFT                     4
-
-#define GEN7_DS_DW5_MAX_THREADS__MASK                          0xfe000000
-#define GEN7_DS_DW5_MAX_THREADS__SHIFT                         25
-#define GEN75_DS_DW5_MAX_THREADS__MASK                         0x3fe00000
-#define GEN75_DS_DW5_MAX_THREADS__SHIFT                                21
-#define GEN7_DS_DW5_STATISTICS                                 (0x1 << 10)
-#define GEN7_DS_DW5_COMPUTE_W                                  (0x1 << 2)
-#define GEN7_DS_DW5_CACHE_DISABLE                              (0x1 << 1)
-#define GEN7_DS_DW5_DS_ENABLE                                  (0x1 << 0)
-
-
-
-#define GEN8_DS_DW1_KERNEL_ADDR__MASK                          0xffffffc0
-#define GEN8_DS_DW1_KERNEL_ADDR__SHIFT                         6
-#define GEN8_DS_DW1_KERNEL_ADDR__SHR                           6
-
-
-
-
-
-#define GEN8_DS_DW6_URB_GRF_START__MASK                                0x01f00000
-#define GEN8_DS_DW6_URB_GRF_START__SHIFT                       20
-#define GEN8_DS_DW6_URB_READ_LEN__MASK                         0x0003f800
-#define GEN8_DS_DW6_URB_READ_LEN__SHIFT                                11
-#define GEN8_DS_DW6_URB_READ_OFFSET__MASK                      0x000003f0
-#define GEN8_DS_DW6_URB_READ_OFFSET__SHIFT                     4
-
-#define GEN8_DS_DW7_MAX_THREADS__MASK                          0x3fe00000
-#define GEN8_DS_DW7_MAX_THREADS__SHIFT                         21
-#define GEN8_DS_DW7_STATISTICS                                 (0x1 << 10)
-#define GEN8_DS_DW7_SIMD8_ENABLE                               (0x1 << 3)
-#define GEN8_DS_DW7_COMPUTE_W                                  (0x1 << 2)
-#define GEN8_DS_DW7_CACHE_DISABLE                              (0x1 << 1)
-#define GEN8_DS_DW7_DS_ENABLE                                  (0x1 << 0)
-
-#define GEN8_DS_DW8_VUE_OUT_READ_OFFSET__MASK                  0x07e00000
-#define GEN8_DS_DW8_VUE_OUT_READ_OFFSET__SHIFT                 21
-#define GEN8_DS_DW8_VUE_OUT_LEN__MASK                          0x001f0000
-#define GEN8_DS_DW8_VUE_OUT_LEN__SHIFT                         16
-#define GEN8_DS_DW8_UCP_CLIP_ENABLES__MASK                     0x0000ff00
-#define GEN8_DS_DW8_UCP_CLIP_ENABLES__SHIFT                    8
-#define GEN8_DS_DW8_UCP_CULL_ENABLES__MASK                     0x000000ff
-#define GEN8_DS_DW8_UCP_CULL_ENABLES__SHIFT                    0
-
-
-
-#define GEN6_3DSTATE_GS__SIZE                                  10
-
-
-#define GEN6_GS_DW1_KERNEL_ADDR__MASK                          0xffffffc0
-#define GEN6_GS_DW1_KERNEL_ADDR__SHIFT                         6
-#define GEN6_GS_DW1_KERNEL_ADDR__SHR                           6
-
-
-
-#define GEN6_GS_DW4_URB_READ_LEN__MASK                         0x0001f800
-#define GEN6_GS_DW4_URB_READ_LEN__SHIFT                                11
-#define GEN6_GS_DW4_URB_READ_OFFSET__MASK                      0x000003f0
-#define GEN6_GS_DW4_URB_READ_OFFSET__SHIFT                     4
-#define GEN6_GS_DW4_URB_GRF_START__MASK                                0x0000000f
-#define GEN6_GS_DW4_URB_GRF_START__SHIFT                       0
-
-#define GEN6_GS_DW5_MAX_THREADS__MASK                          0xfe000000
-#define GEN6_GS_DW5_MAX_THREADS__SHIFT                         25
-#define GEN6_GS_DW5_STATISTICS                                 (0x1 << 10)
-#define GEN6_GS_DW5_SO_STATISTICS                              (0x1 << 9)
-#define GEN6_GS_DW5_RENDER_ENABLE                              (0x1 << 8)
-
-#define GEN6_GS_DW6_REORDER_LEADING_ENABLE                     (0x1 << 30)
-#define GEN6_GS_DW6_DISCARD_ADJACENCY                          (0x1 << 29)
-#define GEN6_GS_DW6_SVBI_PAYLOAD_ENABLE                                (0x1 << 28)
-#define GEN6_GS_DW6_SVBI_POST_INC_ENABLE                       (0x1 << 27)
-#define GEN6_GS_DW6_SVBI_POST_INC_VAL__MASK                    0x03ff0000
-#define GEN6_GS_DW6_SVBI_POST_INC_VAL__SHIFT                   16
-#define GEN6_GS_DW6_GS_ENABLE                                  (0x1 << 15)
-
-
-
-#define GEN7_GS_DW1_KERNEL_ADDR__MASK                          0xffffffc0
-#define GEN7_GS_DW1_KERNEL_ADDR__SHIFT                         6
-#define GEN7_GS_DW1_KERNEL_ADDR__SHR                           6
-
-
-
-#define GEN7_GS_DW4_OUTPUT_SIZE__MASK                          0x1f800000
-#define GEN7_GS_DW4_OUTPUT_SIZE__SHIFT                         23
-#define GEN7_GS_DW4_OUTPUT_TOPO__MASK                          0x007e0000
-#define GEN7_GS_DW4_OUTPUT_TOPO__SHIFT                         17
-#define GEN7_GS_DW4_URB_READ_LEN__MASK                         0x0001f800
-#define GEN7_GS_DW4_URB_READ_LEN__SHIFT                                11
-#define GEN7_GS_DW4_INCLUDE_VERTEX_HANDLES                     (0x1 << 10)
-#define GEN7_GS_DW4_URB_READ_OFFSET__MASK                      0x000003f0
-#define GEN7_GS_DW4_URB_READ_OFFSET__SHIFT                     4
-#define GEN7_GS_DW4_URB_GRF_START__MASK                                0x0000000f
-#define GEN7_GS_DW4_URB_GRF_START__SHIFT                       0
-
-#define GEN7_GS_DW5_MAX_THREADS__MASK                          0xfe000000
-#define GEN7_GS_DW5_MAX_THREADS__SHIFT                         25
-#define GEN7_GS_DW5_GSCTRL__MASK                               0x01000000
-#define GEN7_GS_DW5_GSCTRL__SHIFT                              24
-#define GEN7_GS_DW5_GSCTRL_CUT                                 (0x0 << 24)
-#define GEN7_GS_DW5_GSCTRL_SID                                 (0x1 << 24)
-#define GEN75_GS_DW5_MAX_THREADS__MASK                         0xff000000
-#define GEN75_GS_DW5_MAX_THREADS__SHIFT                                24
-#define GEN7_GS_DW5_CONTROL_DATA_HEADER_SIZE__MASK             0x00f00000
-#define GEN7_GS_DW5_CONTROL_DATA_HEADER_SIZE__SHIFT            20
-#define GEN7_GS_DW5_INSTANCE_CONTROL__MASK                     0x000f8000
-#define GEN7_GS_DW5_INSTANCE_CONTROL__SHIFT                    15
-#define GEN7_GS_DW5_DEFAULT_STREAM_ID__MASK                    0x00006000
-#define GEN7_GS_DW5_DEFAULT_STREAM_ID__SHIFT                   13
-#define GEN7_GS_DW5_DISPATCH_MODE__MASK                                0x00001800
-#define GEN7_GS_DW5_DISPATCH_MODE__SHIFT                       11
-#define GEN7_GS_DW5_DISPATCH_MODE_SINGLE                       (0x0 << 11)
-#define GEN7_GS_DW5_DISPATCH_MODE_DUAL_INSTANCE                        (0x1 << 11)
-#define GEN7_GS_DW5_DISPATCH_MODE_DUAL_OBJECT                  (0x2 << 11)
-#define GEN7_GS_DW5_STATISTICS                                 (0x1 << 10)
-#define GEN7_GS_DW5_INVOCATION_INCR__MASK                      0x000003e0
-#define GEN7_GS_DW5_INVOCATION_INCR__SHIFT                     5
-#define GEN7_GS_DW5_INCLUDE_PRIMITIVE_ID                       (0x1 << 4)
-#define GEN7_GS_DW5_HINT                                       (0x1 << 3)
-#define GEN7_GS_DW5_REORDER_LEADING_ENABLE                     (0x1 << 2)
-#define GEN75_GS_DW5_REORDER_MODE__MASK                                0x00000004
-#define GEN75_GS_DW5_REORDER_MODE__SHIFT                       2
-#define GEN7_GS_DW5_DISCARD_ADJACENCY                          (0x1 << 1)
-#define GEN7_GS_DW5_GS_ENABLE                                  (0x1 << 0)
-
-#define GEN75_GS_DW6_GSCTRL__MASK                              0x80000000
-#define GEN75_GS_DW6_GSCTRL__SHIFT                             31
-#define GEN75_GS_DW6_GSCTRL_CUT                                        (0x0 << 31)
-#define GEN75_GS_DW6_GSCTRL_SID                                        (0x1 << 31)
-#define GEN7_GS_DW6_URB_SEMAPHORE_ADDR__MASK                   0x00000fff
-#define GEN7_GS_DW6_URB_SEMAPHORE_ADDR__SHIFT                  0
-#define GEN7_GS_DW6_URB_SEMAPHORE_ADDR__SHR                    6
-#define GEN75_GS_DW6_URB_SEMAPHORE_ADDR__MASK                  0x00001fff
-#define GEN75_GS_DW6_URB_SEMAPHORE_ADDR__SHIFT                 0
-#define GEN75_GS_DW6_URB_SEMAPHORE_ADDR__SHR                   6
-
-
-
-#define GEN8_GS_DW1_KERNEL_ADDR__MASK                          0xffffffc0
-#define GEN8_GS_DW1_KERNEL_ADDR__SHIFT                         6
-#define GEN8_GS_DW1_KERNEL_ADDR__SHR                           6
-
-
-#define GEN8_GS_DW3_EXPECTED_VERTEX_COUNT__MASK                        0x0000003f
-#define GEN8_GS_DW3_EXPECTED_VERTEX_COUNT__SHIFT               0
-
-
-
-#define GEN8_GS_DW6_OUTPUT_SIZE__MASK                          0x1f800000
-#define GEN8_GS_DW6_OUTPUT_SIZE__SHIFT                         23
-#define GEN8_GS_DW6_OUTPUT_TOPO__MASK                          0x007e0000
-#define GEN8_GS_DW6_OUTPUT_TOPO__SHIFT                         17
-#define GEN8_GS_DW6_URB_READ_LEN__MASK                         0x0001f800
-#define GEN8_GS_DW6_URB_READ_LEN__SHIFT                                11
-#define GEN8_GS_DW6_INCLUDE_VERTEX_HANDLES                     (0x1 << 10)
-#define GEN8_GS_DW6_URB_READ_OFFSET__MASK                      0x000003f0
-#define GEN8_GS_DW6_URB_READ_OFFSET__SHIFT                     4
-#define GEN8_GS_DW6_URB_GRF_START__MASK                                0x0000000f
-#define GEN8_GS_DW6_URB_GRF_START__SHIFT                       0
-
-#define GEN8_GS_DW7_MAX_THREADS__MASK                          0xff000000
-#define GEN8_GS_DW7_MAX_THREADS__SHIFT                         24
-#define GEN8_GS_DW7_CONTROL_DATA_HEADER_SIZE__MASK             0x00f00000
-#define GEN8_GS_DW7_CONTROL_DATA_HEADER_SIZE__SHIFT            20
-#define GEN8_GS_DW7_INSTANCE_CONTROL__MASK                     0x000f8000
-#define GEN8_GS_DW7_INSTANCE_CONTROL__SHIFT                    15
-#define GEN8_GS_DW7_DEFAULT_STREAM_ID__MASK                    0x00006000
-#define GEN8_GS_DW7_DEFAULT_STREAM_ID__SHIFT                   13
-#define GEN8_GS_DW7_DISPATCH_MODE__MASK                                0x00001800
-#define GEN8_GS_DW7_DISPATCH_MODE__SHIFT                       11
-#define GEN8_GS_DW7_DISPATCH_MODE_SINGLE                       (0x0 << 11)
-#define GEN8_GS_DW7_DISPATCH_MODE_DUAL_INSTANCE                        (0x1 << 11)
-#define GEN8_GS_DW7_DISPATCH_MODE_DUAL_OBJECT                  (0x2 << 11)
-#define GEN8_GS_DW7_STATISTICS                                 (0x1 << 10)
-#define GEN8_GS_DW7_INVOCATION_INCR__MASK                      0x000003e0
-#define GEN8_GS_DW7_INVOCATION_INCR__SHIFT                     5
-#define GEN8_GS_DW7_INCLUDE_PRIMITIVE_ID                       (0x1 << 4)
-#define GEN8_GS_DW7_HINT                                       (0x1 << 3)
-#define GEN8_GS_DW7_REORDER_MODE__MASK                         0x00000004
-#define GEN8_GS_DW7_REORDER_MODE__SHIFT                                2
-#define GEN8_GS_DW7_DISCARD_ADJACENCY                          (0x1 << 1)
-#define GEN8_GS_DW7_GS_ENABLE                                  (0x1 << 0)
-
-#define GEN8_GS_DW8_GSCTRL__MASK                               0x80000000
-#define GEN8_GS_DW8_GSCTRL__SHIFT                              31
-#define GEN8_GS_DW8_GSCTRL_CUT                                 (0x0 << 31)
-#define GEN8_GS_DW8_GSCTRL_SID                                 (0x1 << 31)
-#define GEN8_GS_DW8_STATIC_OUTPUT                              (0x1 << 30)
-#define GEN8_GS_DW8_STATIC_OUTPUT_VERTEX_COUNT__MASK           0x07ff0000
-#define GEN8_GS_DW8_STATIC_OUTPUT_VERTEX_COUNT__SHIFT          16
-#define GEN9_GS_DW8_MAX_THREADS__MASK                          0x000001ff
-#define GEN9_GS_DW8_MAX_THREADS__SHIFT                         0
-
-#define GEN8_GS_DW9_VUE_OUT_READ_OFFSET__MASK                  0x07e00000
-#define GEN8_GS_DW9_VUE_OUT_READ_OFFSET__SHIFT                 21
-#define GEN8_GS_DW9_VUE_OUT_LEN__MASK                          0x001f0000
-#define GEN8_GS_DW9_VUE_OUT_LEN__SHIFT                         16
-#define GEN8_GS_DW9_UCP_CLIP_ENABLES__MASK                     0x0000ff00
-#define GEN8_GS_DW9_UCP_CLIP_ENABLES__SHIFT                    8
-#define GEN8_GS_DW9_UCP_CULL_ENABLES__MASK                     0x000000ff
-#define GEN8_GS_DW9_UCP_CULL_ENABLES__SHIFT                    0
-
-#define GEN7_3DSTATE_STREAMOUT__SIZE                           5
-
-
-#define GEN7_SO_DW1_SO_ENABLE                                  (0x1 << 31)
-#define GEN7_SO_DW1_RENDER_DISABLE                             (0x1 << 30)
-#define GEN7_SO_DW1_RENDER_STREAM_SELECT__MASK                 0x18000000
-#define GEN7_SO_DW1_RENDER_STREAM_SELECT__SHIFT                        27
-#define GEN7_SO_DW1_REORDER_MODE__MASK                         0x04000000
-#define GEN7_SO_DW1_REORDER_MODE__SHIFT                                26
-#define GEN7_SO_DW1_STATISTICS                                 (0x1 << 25)
-#define GEN8_SO_DW1_FORCE_RENDERING__MASK                      0x01800000
-#define GEN8_SO_DW1_FORCE_RENDERING__SHIFT                     23
-#define GEN8_SO_DW1_FORCE_RENDERING_NORMAL                     (0x0 << 23)
-#define GEN8_SO_DW1_FORCE_RENDERING_OFF                                (0x2 << 23)
-#define GEN8_SO_DW1_FORCE_RENDERING_ON                         (0x3 << 23)
-#define GEN7_SO_DW1_BUFFER_ENABLES__MASK                       0x00000f00
-#define GEN7_SO_DW1_BUFFER_ENABLES__SHIFT                      8
-
-#define GEN7_SO_DW2_STREAM3_READ_OFFSET__MASK                  0x20000000
-#define GEN7_SO_DW2_STREAM3_READ_OFFSET__SHIFT                 29
-#define GEN7_SO_DW2_STREAM3_READ_LEN__MASK                     0x1f000000
-#define GEN7_SO_DW2_STREAM3_READ_LEN__SHIFT                    24
-#define GEN7_SO_DW2_STREAM2_READ_OFFSET__MASK                  0x00200000
-#define GEN7_SO_DW2_STREAM2_READ_OFFSET__SHIFT                 21
-#define GEN7_SO_DW2_STREAM2_READ_LEN__MASK                     0x001f0000
-#define GEN7_SO_DW2_STREAM2_READ_LEN__SHIFT                    16
-#define GEN7_SO_DW2_STREAM1_READ_OFFSET__MASK                  0x00002000
-#define GEN7_SO_DW2_STREAM1_READ_OFFSET__SHIFT                 13
-#define GEN7_SO_DW2_STREAM1_READ_LEN__MASK                     0x00001f00
-#define GEN7_SO_DW2_STREAM1_READ_LEN__SHIFT                    8
-#define GEN7_SO_DW2_STREAM0_READ_OFFSET__MASK                  0x00000020
-#define GEN7_SO_DW2_STREAM0_READ_OFFSET__SHIFT                 5
-#define GEN7_SO_DW2_STREAM0_READ_LEN__MASK                     0x0000001f
-#define GEN7_SO_DW2_STREAM0_READ_LEN__SHIFT                    0
-
-#define GEN8_SO_DW3_BUFFER1_PITCH__MASK                                0x0fff0000
-#define GEN8_SO_DW3_BUFFER1_PITCH__SHIFT                       16
-#define GEN8_SO_DW3_BUFFER0_PITCH__MASK                                0x00000fff
-#define GEN8_SO_DW3_BUFFER0_PITCH__SHIFT                       0
-
-#define GEN8_SO_DW4_BUFFER3_PITCH__MASK                                0x0fff0000
-#define GEN8_SO_DW4_BUFFER3_PITCH__SHIFT                       16
-#define GEN8_SO_DW4_BUFFER2_PITCH__MASK                                0x00000fff
-#define GEN8_SO_DW4_BUFFER2_PITCH__SHIFT                       0
-
-#define GEN7_3DSTATE_SO_DECL_LIST__SIZE                                259
-
-
-#define GEN7_SO_DECL_DW1_STREAM3_BUFFER_SELECTS__MASK          0x0000f000
-#define GEN7_SO_DECL_DW1_STREAM3_BUFFER_SELECTS__SHIFT         12
-#define GEN7_SO_DECL_DW1_STREAM2_BUFFER_SELECTS__MASK          0x00000f00
-#define GEN7_SO_DECL_DW1_STREAM2_BUFFER_SELECTS__SHIFT         8
-#define GEN7_SO_DECL_DW1_STREAM1_BUFFER_SELECTS__MASK          0x000000f0
-#define GEN7_SO_DECL_DW1_STREAM1_BUFFER_SELECTS__SHIFT         4
-#define GEN7_SO_DECL_DW1_STREAM0_BUFFER_SELECTS__MASK          0x0000000f
-#define GEN7_SO_DECL_DW1_STREAM0_BUFFER_SELECTS__SHIFT         0
-
-#define GEN7_SO_DECL_DW2_STREAM3_ENTRY_COUNT__MASK             0xff000000
-#define GEN7_SO_DECL_DW2_STREAM3_ENTRY_COUNT__SHIFT            24
-#define GEN7_SO_DECL_DW2_STREAM2_ENTRY_COUNT__MASK             0x00ff0000
-#define GEN7_SO_DECL_DW2_STREAM2_ENTRY_COUNT__SHIFT            16
-#define GEN7_SO_DECL_DW2_STREAM1_ENTRY_COUNT__MASK             0x0000ff00
-#define GEN7_SO_DECL_DW2_STREAM1_ENTRY_COUNT__SHIFT            8
-#define GEN7_SO_DECL_DW2_STREAM0_ENTRY_COUNT__MASK             0x000000ff
-#define GEN7_SO_DECL_DW2_STREAM0_ENTRY_COUNT__SHIFT            0
-
-#define GEN7_SO_DECL_HIGH__MASK                                        0xffff0000
-#define GEN7_SO_DECL_HIGH__SHIFT                               16
-#define GEN7_SO_DECL_OUTPUT_SLOT__MASK                         0x00003000
-#define GEN7_SO_DECL_OUTPUT_SLOT__SHIFT                                12
-#define GEN7_SO_DECL_HOLE_FLAG                                 (0x1 << 11)
-#define GEN7_SO_DECL_REG_INDEX__MASK                           0x000003f0
-#define GEN7_SO_DECL_REG_INDEX__SHIFT                          4
-#define GEN7_SO_DECL_COMPONENT_MASK__MASK                      0x0000000f
-#define GEN7_SO_DECL_COMPONENT_MASK__SHIFT                     0
-
-#define GEN7_3DSTATE_SO_BUFFER__SIZE                           8
-
-
-#define GEN8_SO_BUF_DW1_ENABLE                                 (0x1 << 31)
-#define GEN7_SO_BUF_DW1_INDEX__MASK                            0x60000000
-#define GEN7_SO_BUF_DW1_INDEX__SHIFT                           29
-#define GEN7_SO_BUF_DW1_MOCS__MASK                             0x1e000000
-#define GEN7_SO_BUF_DW1_MOCS__SHIFT                            25
-#define GEN8_SO_BUF_DW1_MOCS__MASK                             0x1fc00000
-#define GEN8_SO_BUF_DW1_MOCS__SHIFT                            22
-#define GEN8_SO_BUF_DW1_OFFSET_WRITE_ENABLE                    (0x1 << 21)
-#define GEN8_SO_BUF_DW1_OFFSET_ENABLE                          (0x1 << 20)
-#define GEN7_SO_BUF_DW1_PITCH__MASK                            0x00000fff
-#define GEN7_SO_BUF_DW1_PITCH__SHIFT                           0
-
-#define GEN7_SO_BUF_DW2_START_ADDR__MASK                       0xfffffffc
-#define GEN7_SO_BUF_DW2_START_ADDR__SHIFT                      2
-#define GEN7_SO_BUF_DW2_START_ADDR__SHR                                2
-
-#define GEN7_SO_BUF_DW3_END_ADDR__MASK                         0xfffffffc
-#define GEN7_SO_BUF_DW3_END_ADDR__SHIFT                                2
-#define GEN7_SO_BUF_DW3_END_ADDR__SHR                          2
-
-#define GEN8_SO_BUF_DW2_ADDR__MASK                             0xfffffffc
-#define GEN8_SO_BUF_DW2_ADDR__SHIFT                            2
-#define GEN8_SO_BUF_DW2_ADDR__SHR                              2
-
-
-
-#define GEN8_SO_BUF_DW5_OFFSET_ADDR_ADDR__MASK                 0xfffffffc
-#define GEN8_SO_BUF_DW5_OFFSET_ADDR_ADDR__SHIFT                        2
-#define GEN8_SO_BUF_DW5_OFFSET_ADDR_ADDR__SHR                  2
-
-
-
-#define GEN6_3DSTATE_CLIP__SIZE                                        4
-
-
-#define GEN7_CLIP_DW1_FRONT_WINDING__MASK                      0x00100000
-#define GEN7_CLIP_DW1_FRONT_WINDING__SHIFT                     20
-#define GEN8_CLIP_DW1_FORCE_UCP_CULL_ENABLES                   (0x1 << 20)
-#define GEN7_CLIP_DW1_SUBPIXEL__MASK                           0x00080000
-#define GEN7_CLIP_DW1_SUBPIXEL__SHIFT                          19
-#define GEN7_CLIP_DW1_SUBPIXEL_8BITS                           (0x0 << 19)
-#define GEN7_CLIP_DW1_SUBPIXEL_4BITS                           (0x1 << 19)
-#define GEN7_CLIP_DW1_EARLY_CULL_ENABLE                                (0x1 << 18)
-#define GEN7_CLIP_DW1_CULL_MODE__MASK                          0x00030000
-#define GEN7_CLIP_DW1_CULL_MODE__SHIFT                         16
-#define GEN8_CLIP_DW1_FORCE_UCP_CLIP_ENABLES                   (0x1 << 17)
-#define GEN8_CLIP_DW1_FORCE_CLIP_MODE                          (0x1 << 16)
-#define GEN6_CLIP_DW1_STATISTICS                               (0x1 << 10)
-#define GEN6_CLIP_DW1_UCP_CULL_ENABLES__MASK                   0x000000ff
-#define GEN6_CLIP_DW1_UCP_CULL_ENABLES__SHIFT                  0
-
-#define GEN6_CLIP_DW2_CLIP_ENABLE                              (0x1 << 31)
-#define GEN6_CLIP_DW2_APIMODE__MASK                            0x40000000
-#define GEN6_CLIP_DW2_APIMODE__SHIFT                           30
-#define GEN6_CLIP_DW2_APIMODE_OGL                              (0x0 << 30)
-#define GEN6_CLIP_DW2_APIMODE_D3D                              (0x1 << 30)
-#define GEN6_CLIP_DW2_XY_TEST_ENABLE                           (0x1 << 28)
-#define GEN6_CLIP_DW2_Z_TEST_ENABLE                            (0x1 << 27)
-#define GEN6_CLIP_DW2_GB_TEST_ENABLE                           (0x1 << 26)
-#define GEN6_CLIP_DW2_UCP_CLIP_ENABLES__MASK                   0x00ff0000
-#define GEN6_CLIP_DW2_UCP_CLIP_ENABLES__SHIFT                  16
-#define GEN6_CLIP_DW2_CLIP_MODE__MASK                          0x0000e000
-#define GEN6_CLIP_DW2_CLIP_MODE__SHIFT                         13
-#define GEN6_CLIP_DW2_PERSPECTIVE_DIVIDE_DISABLE               (0x1 << 9)
-#define GEN6_CLIP_DW2_NONPERSPECTIVE_BARYCENTRIC_ENABLE                (0x1 << 8)
-#define GEN6_CLIP_DW2_TRI_PROVOKE__MASK                                0x00000030
-#define GEN6_CLIP_DW2_TRI_PROVOKE__SHIFT                       4
-#define GEN6_CLIP_DW2_LINE_PROVOKE__MASK                       0x0000000c
-#define GEN6_CLIP_DW2_LINE_PROVOKE__SHIFT                      2
-#define GEN6_CLIP_DW2_TRIFAN_PROVOKE__MASK                     0x00000003
-#define GEN6_CLIP_DW2_TRIFAN_PROVOKE__SHIFT                    0
-
-#define GEN6_CLIP_DW3_MIN_POINT_WIDTH__MASK                    0x0ffe0000
-#define GEN6_CLIP_DW3_MIN_POINT_WIDTH__SHIFT                   17
-#define GEN6_CLIP_DW3_MIN_POINT_WIDTH__RADIX                   3
-#define GEN6_CLIP_DW3_MAX_POINT_WIDTH__MASK                    0x0001ffc0
-#define GEN6_CLIP_DW3_MAX_POINT_WIDTH__SHIFT                   6
-#define GEN6_CLIP_DW3_MAX_POINT_WIDTH__RADIX                   3
-#define GEN6_CLIP_DW3_FORCE_RTAINDEX_ZERO                      (0x1 << 5)
-#define GEN6_CLIP_DW3_MAX_VPINDEX__MASK                                0x0000000f
-#define GEN6_CLIP_DW3_MAX_VPINDEX__SHIFT                       0
-
-#define GEN6_3DSTATE_SF_DW1_DW3__SIZE                          3
-
-#define GEN7_SF_DW1_DEPTH_FORMAT__MASK                         0x00007000
-#define GEN7_SF_DW1_DEPTH_FORMAT__SHIFT                                12
-#define GEN9_SF_DW1_LINE_WIDTH__MASK                           0x3ffff000
-#define GEN9_SF_DW1_LINE_WIDTH__SHIFT                          12
-#define GEN9_SF_DW1_LINE_WIDTH__RADIX                          7
-#define GEN7_SF_DW1_LEGACY_DEPTH_OFFSET                                (0x1 << 11)
-#define GEN7_SF_DW1_STATISTICS                                 (0x1 << 10)
-#define GEN7_SF_DW1_DEPTH_OFFSET_SOLID                         (0x1 << 9)
-#define GEN7_SF_DW1_DEPTH_OFFSET_WIREFRAME                     (0x1 << 8)
-#define GEN7_SF_DW1_DEPTH_OFFSET_POINT                         (0x1 << 7)
-#define GEN7_SF_DW1_FILL_MODE_FRONT__MASK                      0x00000060
-#define GEN7_SF_DW1_FILL_MODE_FRONT__SHIFT                     5
-#define GEN7_SF_DW1_FILL_MODE_BACK__MASK                       0x00000018
-#define GEN7_SF_DW1_FILL_MODE_BACK__SHIFT                      3
-#define GEN7_SF_DW1_VIEWPORT_TRANSFORM                         (0x1 << 1)
-#define GEN7_SF_DW1_FRONT_WINDING__MASK                                0x00000001
-#define GEN7_SF_DW1_FRONT_WINDING__SHIFT                       0
-
-#define GEN7_SF_DW2_AA_LINE_ENABLE                             (0x1 << 31)
-#define GEN7_SF_DW2_CULL_MODE__MASK                            0x60000000
-#define GEN7_SF_DW2_CULL_MODE__SHIFT                           29
-#define GEN7_SF_DW2_LINE_WIDTH__MASK                           0x0ffc0000
-#define GEN7_SF_DW2_LINE_WIDTH__SHIFT                          18
-#define GEN7_SF_DW2_LINE_WIDTH__RADIX                          7
-#define GEN7_SF_DW2_AA_LINE_CAP__MASK                          0x00030000
-#define GEN7_SF_DW2_AA_LINE_CAP__SHIFT                         16
-#define GEN7_SF_DW2_AA_LINE_CAP_0_5                            (0x0 << 16)
-#define GEN7_SF_DW2_AA_LINE_CAP_1_0                            (0x1 << 16)
-#define GEN7_SF_DW2_AA_LINE_CAP_2_0                            (0x2 << 16)
-#define GEN7_SF_DW2_AA_LINE_CAP_4_0                            (0x3 << 16)
-#define GEN75_SF_DW2_LINE_STIPPLE_ENABLE                       (0x1 << 14)
-#define GEN7_SF_DW2_SCISSOR_ENABLE                             (0x1 << 11)
-#define GEN7_SF_DW2_MSRASTMODE__MASK                           0x00000300
-#define GEN7_SF_DW2_MSRASTMODE__SHIFT                          8
-
-#define GEN7_SF_DW3_LINE_LAST_PIXEL_ENABLE                     (0x1 << 31)
-#define GEN7_SF_DW3_TRI_PROVOKE__MASK                          0x60000000
-#define GEN7_SF_DW3_TRI_PROVOKE__SHIFT                         29
-#define GEN7_SF_DW3_LINE_PROVOKE__MASK                         0x18000000
-#define GEN7_SF_DW3_LINE_PROVOKE__SHIFT                                27
-#define GEN7_SF_DW3_TRIFAN_PROVOKE__MASK                       0x06000000
-#define GEN7_SF_DW3_TRIFAN_PROVOKE__SHIFT                      25
-#define GEN7_SF_DW3_TRUE_AA_LINE_DISTANCE                      (0x1 << 14)
-#define GEN8_SF_DW3_SMOOTH_POINT_ENABLE                                (0x1 << 13)
-#define GEN7_SF_DW3_SUBPIXEL__MASK                             0x00001000
-#define GEN7_SF_DW3_SUBPIXEL__SHIFT                            12
-#define GEN7_SF_DW3_SUBPIXEL_8BITS                             (0x0 << 12)
-#define GEN7_SF_DW3_SUBPIXEL_4BITS                             (0x1 << 12)
-#define GEN7_SF_DW3_USE_POINT_WIDTH                            (0x1 << 11)
-#define GEN7_SF_DW3_POINT_WIDTH__MASK                          0x000007ff
-#define GEN7_SF_DW3_POINT_WIDTH__SHIFT                         0
-#define GEN7_SF_DW3_POINT_WIDTH__RADIX                         3
-
-#define GEN7_3DSTATE_SBE_DW1__SIZE                             13
-
-#define GEN8_SBE_DW1_FORCE_URB_READ_LEN                                (0x1 << 29)
-#define GEN8_SBE_DW1_FORCE_URB_READ_OFFSET                     (0x1 << 28)
-#define GEN7_SBE_DW1_ATTR_SWIZZLE__MASK                                0x10000000
-#define GEN7_SBE_DW1_ATTR_SWIZZLE__SHIFT                       28
-#define GEN7_SBE_DW1_ATTR_SWIZZLE_0_15                         (0x0 << 28)
-#define GEN7_SBE_DW1_ATTR_SWIZZLE_16_31                                (0x1 << 28)
-#define GEN7_SBE_DW1_ATTR_COUNT__MASK                          0x0fc00000
-#define GEN7_SBE_DW1_ATTR_COUNT__SHIFT                         22
-#define GEN7_SBE_DW1_ATTR_SWIZZLE_ENABLE                       (0x1 << 21)
-#define GEN7_SBE_DW1_POINT_SPRITE_TEXCOORD__MASK               0x00100000
-#define GEN7_SBE_DW1_POINT_SPRITE_TEXCOORD__SHIFT              20
-#define GEN7_SBE_DW1_POINT_SPRITE_TEXCOORD_UPPERLEFT           (0x0 << 20)
-#define GEN7_SBE_DW1_POINT_SPRITE_TEXCOORD_LOWERLEFT           (0x1 << 20)
-#define GEN8_SBE_DW1_PID_OVERRIDE_W                            (0x1 << 19)
-#define GEN8_SBE_DW1_PID_OVERRIDE_Z                            (0x1 << 18)
-#define GEN8_SBE_DW1_PID_OVERRIDE_Y                            (0x1 << 17)
-#define GEN8_SBE_DW1_PID_OVERRIDE_X                            (0x1 << 16)
-#define GEN7_SBE_DW1_URB_READ_LEN__MASK                                0x0000f800
-#define GEN7_SBE_DW1_URB_READ_LEN__SHIFT                       11
-#define GEN7_SBE_DW1_URB_READ_OFFSET__MASK                     0x000003f0
-#define GEN7_SBE_DW1_URB_READ_OFFSET__SHIFT                    4
-#define GEN8_SBE_DW1_URB_READ_OFFSET__MASK                     0x000007e0
-#define GEN8_SBE_DW1_URB_READ_OFFSET__SHIFT                    5
-#define GEN8_SBE_DW1_PID_OVERRIDE_ATTR__MASK                   0x0000001f
-#define GEN8_SBE_DW1_PID_OVERRIDE_ATTR__SHIFT                  0
-
-#define GEN8_3DSTATE_SBE_SWIZ_DW1_DW8__SIZE                    8
-
-#define GEN8_SBE_SWIZ_HIGH__MASK                               0xffff0000
-#define GEN8_SBE_SWIZ_HIGH__SHIFT                              16
-#define GEN8_SBE_SWIZ_CONST_OVERRIDE_W                         (0x1 << 15)
-#define GEN8_SBE_SWIZ_CONST_OVERRIDE_Z                         (0x1 << 14)
-#define GEN8_SBE_SWIZ_CONST_OVERRIDE_Y                         (0x1 << 13)
-#define GEN8_SBE_SWIZ_CONST_OVERRIDE_X                         (0x1 << 12)
-#define GEN8_SBE_SWIZ_SWIZZLE_CONTROL                          (0x1 << 11)
-#define GEN8_SBE_SWIZ_CONST__MASK                              0x00000600
-#define GEN8_SBE_SWIZ_CONST__SHIFT                             9
-#define GEN8_SBE_SWIZ_CONST_0000                               (0x0 << 9)
-#define GEN8_SBE_SWIZ_CONST_0001_FLOAT                         (0x1 << 9)
-#define GEN8_SBE_SWIZ_CONST_1111_FLOAT                         (0x2 << 9)
-#define GEN8_SBE_SWIZ_CONST_PRIM_ID                            (0x3 << 9)
-#define GEN8_SBE_SWIZ_SWIZZLE_SELECT__MASK                     0x000000c0
-#define GEN8_SBE_SWIZ_SWIZZLE_SELECT__SHIFT                    6
-#define GEN8_SBE_SWIZ_SRC_ATTR__MASK                           0x0000001f
-#define GEN8_SBE_SWIZ_SRC_ATTR__SHIFT                          0
-
-#define GEN6_3DSTATE_SF__SIZE                                  20
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#define GEN7_3DSTATE_SBE__SIZE                                 14
-
-
-
-
-
-
-
-
-
-
-
-
-#define GEN9_SBE_DW_ACTIVE_COMPONENT__MASK                     0x00000003
-#define GEN9_SBE_DW_ACTIVE_COMPONENT__SHIFT                    0
-#define GEN9_SBE_DW_ACTIVE_COMPONENT_NONE                      0x0
-#define GEN9_SBE_DW_ACTIVE_COMPONENT_XY                                0x1
-#define GEN9_SBE_DW_ACTIVE_COMPONENT_XYZ                       0x2
-#define GEN9_SBE_DW_ACTIVE_COMPONENT_XYZW                      0x3
-
-#define GEN8_3DSTATE_SBE_SWIZ__SIZE                            11
-
-
-
-
-#define GEN8_3DSTATE_RASTER__SIZE                              5
-
-
-#define GEN9_RASTER_DW1_Z_TEST_FAR_ENABLE                      (0x1 << 26)
-#define GEN8_RASTER_DW1_API__MASK                              0x00c00000
-#define GEN8_RASTER_DW1_API__SHIFT                             22
-#define GEN8_RASTER_DW1_API_DX9_OGL                            (0x0 << 22)
-#define GEN8_RASTER_DW1_API_DX10                               (0x1 << 22)
-#define GEN8_RASTER_DW1_API_DX10_1                             (0x2 << 22)
-#define GEN8_RASTER_DW1_FRONT_WINDING__MASK                    0x00200000
-#define GEN8_RASTER_DW1_FRONT_WINDING__SHIFT                   21
-#define GEN8_RASTER_DW1_FORCED_SAMPLE_COUNT__MASK              0x001c0000
-#define GEN8_RASTER_DW1_FORCED_SAMPLE_COUNT__SHIFT             18
-#define GEN8_RASTER_DW1_FORCED_SAMPLE_COUNT_NUMRASTSAMPLES_0   (0x0 << 18)
-#define GEN8_RASTER_DW1_FORCED_SAMPLE_COUNT_NUMRASTSAMPLES_1   (0x1 << 18)
-#define GEN8_RASTER_DW1_FORCED_SAMPLE_COUNT_NUMRASTSAMPLES_2   (0x2 << 18)
-#define GEN8_RASTER_DW1_FORCED_SAMPLE_COUNT_NUMRASTSAMPLES_4   (0x3 << 18)
-#define GEN8_RASTER_DW1_FORCED_SAMPLE_COUNT_NUMRASTSAMPLES_8   (0x4 << 18)
-#define GEN8_RASTER_DW1_FORCED_SAMPLE_COUNT_NUMRASTSAMPLES_16  (0x5 << 18)
-#define GEN8_RASTER_DW1_CULL_MODE__MASK                                0x00030000
-#define GEN8_RASTER_DW1_CULL_MODE__SHIFT                       16
-#define GEN8_RASTER_DW1_FORCE_MULTISAMPLE_ENABLE               (0x1 << 14)
-#define GEN8_RASTER_DW1_SMOOTH_POINT_ENABLE                    (0x1 << 13)
-#define GEN8_RASTER_DW1_DX_MULTISAMPLE_ENABLE                  (0x1 << 12)
-#define GEN8_RASTER_DW1_DX_MSRASTMODE__MASK                    0x00000c00
-#define GEN8_RASTER_DW1_DX_MSRASTMODE__SHIFT                   10
-#define GEN8_RASTER_DW1_DEPTH_OFFSET_SOLID                     (0x1 << 9)
-#define GEN8_RASTER_DW1_DEPTH_OFFSET_WIREFRAME                 (0x1 << 8)
-#define GEN8_RASTER_DW1_DEPTH_OFFSET_POINT                     (0x1 << 7)
-#define GEN8_RASTER_DW1_FILL_MODE_FRONT__MASK                  0x00000060
-#define GEN8_RASTER_DW1_FILL_MODE_FRONT__SHIFT                 5
-#define GEN8_RASTER_DW1_FILL_MODE_BACK__MASK                   0x00000018
-#define GEN8_RASTER_DW1_FILL_MODE_BACK__SHIFT                  3
-#define GEN8_RASTER_DW1_AA_LINE_ENABLE                         (0x1 << 2)
-#define GEN8_RASTER_DW1_SCISSOR_ENABLE                         (0x1 << 1)
-#define GEN8_RASTER_DW1_Z_TEST_ENABLE                          (0x1 << 0)
-#define GEN9_RASTER_DW1_Z_TEST_NEAR_ENABLE                     (0x1 << 0)
-
-
-
-
-#define GEN6_3DSTATE_WM__SIZE                                  9
-
-
-#define GEN6_WM_DW1_KERNEL0_ADDR__MASK                         0xffffffc0
-#define GEN6_WM_DW1_KERNEL0_ADDR__SHIFT                                6
-#define GEN6_WM_DW1_KERNEL0_ADDR__SHR                          6
-
-
-
-#define GEN6_WM_DW4_STATISTICS                                 (0x1 << 31)
-#define GEN6_WM_DW4_DEPTH_CLEAR                                        (0x1 << 30)
-#define GEN6_WM_DW4_DEPTH_RESOLVE                              (0x1 << 28)
-#define GEN6_WM_DW4_HIZ_RESOLVE                                        (0x1 << 27)
-#define GEN6_WM_DW4_URB_GRF_START0__MASK                       0x007f0000
-#define GEN6_WM_DW4_URB_GRF_START0__SHIFT                      16
-#define GEN6_WM_DW4_URB_GRF_START1__MASK                       0x00007f00
-#define GEN6_WM_DW4_URB_GRF_START1__SHIFT                      8
-#define GEN6_WM_DW4_URB_GRF_START2__MASK                       0x0000007f
-#define GEN6_WM_DW4_URB_GRF_START2__SHIFT                      0
-
-#define GEN6_WM_DW5_MAX_THREADS__MASK                          0xfe000000
-#define GEN6_WM_DW5_MAX_THREADS__SHIFT                         25
-#define GEN6_WM_DW5_LEGACY_LINE_RAST                           (0x1 << 23)
-#define GEN6_WM_DW5_PS_KILL_PIXEL                              (0x1 << 22)
-#define GEN6_WM_DW5_PS_COMPUTE_DEPTH                           (0x1 << 21)
-#define GEN6_WM_DW5_PS_USE_DEPTH                               (0x1 << 20)
-#define GEN6_WM_DW5_PS_DISPATCH_ENABLE                         (0x1 << 19)
-#define GEN6_WM_DW5_AA_LINE_CAP__MASK                          0x00030000
-#define GEN6_WM_DW5_AA_LINE_CAP__SHIFT                         16
-#define GEN6_WM_DW5_AA_LINE_CAP_0_5                            (0x0 << 16)
-#define GEN6_WM_DW5_AA_LINE_CAP_1_0                            (0x1 << 16)
-#define GEN6_WM_DW5_AA_LINE_CAP_2_0                            (0x2 << 16)
-#define GEN6_WM_DW5_AA_LINE_CAP_4_0                            (0x3 << 16)
-#define GEN6_WM_DW5_AA_LINE_WIDTH__MASK                                0x0000c000
-#define GEN6_WM_DW5_AA_LINE_WIDTH__SHIFT                       14
-#define GEN6_WM_DW5_AA_LINE_WIDTH_0_5                          (0x0 << 14)
-#define GEN6_WM_DW5_AA_LINE_WIDTH_1_0                          (0x1 << 14)
-#define GEN6_WM_DW5_AA_LINE_WIDTH_2_0                          (0x2 << 14)
-#define GEN6_WM_DW5_AA_LINE_WIDTH_4_0                          (0x3 << 14)
-#define GEN6_WM_DW5_POLY_STIPPLE_ENABLE                                (0x1 << 13)
-#define GEN6_WM_DW5_LINE_STIPPLE_ENABLE                                (0x1 << 11)
-#define GEN6_WM_DW5_PS_COMPUTE_OMASK                           (0x1 << 9)
-#define GEN6_WM_DW5_PS_USE_W                                   (0x1 << 8)
-#define GEN6_WM_DW5_PS_DUAL_SOURCE_BLEND                       (0x1 << 7)
-#define GEN6_WM_DW5_PS_DISPATCH_MODE__MASK                     0x00000007
-#define GEN6_WM_DW5_PS_DISPATCH_MODE__SHIFT                    0
-
-#define GEN6_WM_DW6_SF_ATTR_COUNT__MASK                                0x03f00000
-#define GEN6_WM_DW6_SF_ATTR_COUNT__SHIFT                       20
-#define GEN6_WM_DW6_PS_POSOFFSET__MASK                         0x000c0000
-#define GEN6_WM_DW6_PS_POSOFFSET__SHIFT                                18
-#define GEN6_WM_DW6_ZW_INTERP__MASK                            0x00030000
-#define GEN6_WM_DW6_ZW_INTERP__SHIFT                           16
-#define GEN6_WM_DW6_BARYCENTRIC_INTERP__MASK                   0x0000fc00
-#define GEN6_WM_DW6_BARYCENTRIC_INTERP__SHIFT                  10
-#define GEN6_WM_DW6_POINT_RASTRULE__MASK                       0x00000200
-#define GEN6_WM_DW6_POINT_RASTRULE__SHIFT                      9
-#define GEN6_WM_DW6_POINT_RASTRULE_UPPER_LEFT                  (0x0 << 9)
-#define GEN6_WM_DW6_POINT_RASTRULE_UPPER_RIGHT                 (0x1 << 9)
-#define GEN6_WM_DW6_MSRASTMODE__MASK                           0x00000006
-#define GEN6_WM_DW6_MSRASTMODE__SHIFT                          1
-#define GEN6_WM_DW6_MSDISPMODE__MASK                           0x00000001
-#define GEN6_WM_DW6_MSDISPMODE__SHIFT                          0
-#define GEN6_WM_DW6_MSDISPMODE_PERSAMPLE                       0x0
-#define GEN6_WM_DW6_MSDISPMODE_PERPIXEL                                0x1
-
-#define GEN6_WM_DW7_KERNEL1_ADDR__MASK                         0xffffffc0
-#define GEN6_WM_DW7_KERNEL1_ADDR__SHIFT                                6
-#define GEN6_WM_DW7_KERNEL1_ADDR__SHR                          6
-
-#define GEN6_WM_DW8_KERNEL2_ADDR__MASK                         0xffffffc0
-#define GEN6_WM_DW8_KERNEL2_ADDR__SHIFT                                6
-#define GEN6_WM_DW8_KERNEL2_ADDR__SHR                          6
-
-
-#define GEN7_WM_DW1_STATISTICS                                 (0x1 << 31)
-#define GEN7_WM_DW1_LEGACY_DEPTH_CLEAR                         (0x1 << 30)
-#define GEN7_WM_DW1_PS_DISPATCH_ENABLE                         (0x1 << 29)
-#define GEN7_WM_DW1_LEGACY_DEPTH_RESOLVE                       (0x1 << 28)
-#define GEN7_WM_DW1_LEGACY_HIZ_RESOLVE                         (0x1 << 27)
-#define GEN7_WM_DW1_LEGACY_LINE_RAST                           (0x1 << 26)
-#define GEN7_WM_DW1_PS_KILL_PIXEL                              (0x1 << 25)
-#define GEN7_WM_DW1_PSCDEPTH__MASK                             0x01800000
-#define GEN7_WM_DW1_PSCDEPTH__SHIFT                            23
-#define GEN7_WM_DW1_EDSC__MASK                                 0x00600000
-#define GEN7_WM_DW1_EDSC__SHIFT                                        21
-#define GEN7_WM_DW1_PS_USE_DEPTH                               (0x1 << 20)
-#define GEN7_WM_DW1_PS_USE_W                                   (0x1 << 19)
-#define GEN8_WM_DW1_FORCE_DISPATCH_ENABLE__MASK                        0x00180000
-#define GEN8_WM_DW1_FORCE_DISPATCH_ENABLE__SHIFT               19
-#define GEN8_WM_DW1_FORCE_DISPATCH_ENABLE_NORMAL               (0x0 << 19)
-#define GEN8_WM_DW1_FORCE_DISPATCH_ENABLE_OFF                  (0x1 << 19)
-#define GEN8_WM_DW1_FORCE_DISPATCH_ENABLE_ON                   (0x2 << 19)
-#define GEN7_WM_DW1_ZW_INTERP__MASK                            0x00060000
-#define GEN7_WM_DW1_ZW_INTERP__SHIFT                           17
-#define GEN7_WM_DW1_BARYCENTRIC_INTERP__MASK                   0x0001f800
-#define GEN7_WM_DW1_BARYCENTRIC_INTERP__SHIFT                  11
-#define GEN7_WM_DW1_PS_USE_COVERAGE_MASK                       (0x1 << 10)
-#define GEN7_WM_DW1_AA_LINE_CAP__MASK                          0x00000300
-#define GEN7_WM_DW1_AA_LINE_CAP__SHIFT                         8
-#define GEN7_WM_DW1_AA_LINE_CAP_0_5                            (0x0 << 8)
-#define GEN7_WM_DW1_AA_LINE_CAP_1_0                            (0x1 << 8)
-#define GEN7_WM_DW1_AA_LINE_CAP_2_0                            (0x2 << 8)
-#define GEN7_WM_DW1_AA_LINE_CAP_4_0                            (0x3 << 8)
-#define GEN7_WM_DW1_AA_LINE_WIDTH__MASK                                0x000000c0
-#define GEN7_WM_DW1_AA_LINE_WIDTH__SHIFT                       6
-#define GEN7_WM_DW1_AA_LINE_WIDTH_0_5                          (0x0 << 6)
-#define GEN7_WM_DW1_AA_LINE_WIDTH_1_0                          (0x1 << 6)
-#define GEN7_WM_DW1_AA_LINE_WIDTH_2_0                          (0x2 << 6)
-#define GEN7_WM_DW1_AA_LINE_WIDTH_4_0                          (0x3 << 6)
-#define GEN75_WM_DW1_RT_INDEPENDENT_RAST                       (0x1 << 5)
-#define GEN7_WM_DW1_POLY_STIPPLE_ENABLE                                (0x1 << 4)
-#define GEN7_WM_DW1_LINE_STIPPLE_ENABLE                                (0x1 << 3)
-#define GEN7_WM_DW1_POINT_RASTRULE__MASK                       0x00000004
-#define GEN7_WM_DW1_POINT_RASTRULE__SHIFT                      2
-#define GEN7_WM_DW1_POINT_RASTRULE_UPPER_LEFT                  (0x0 << 2)
-#define GEN7_WM_DW1_POINT_RASTRULE_UPPER_RIGHT                 (0x1 << 2)
-#define GEN7_WM_DW1_MSRASTMODE__MASK                           0x00000003
-#define GEN7_WM_DW1_MSRASTMODE__SHIFT                          0
-#define GEN8_WM_DW1_FORCE_KILL_PIXEL__MASK                     0x00000003
-#define GEN8_WM_DW1_FORCE_KILL_PIXEL__SHIFT                    0
-#define GEN8_WM_DW1_FORCE_KILL_PIXEL_NORMAL                    0x0
-#define GEN8_WM_DW1_FORCE_KILL_PIXEL_OFF                       0x1
-#define GEN8_WM_DW1_FORCE_KILL_PIXEL_ON                                0x2
-
-#define GEN7_WM_DW2_MSDISPMODE__MASK                           0x80000000
-#define GEN7_WM_DW2_MSDISPMODE__SHIFT                          31
-#define GEN7_WM_DW2_MSDISPMODE_PERSAMPLE                       (0x0 << 31)
-#define GEN7_WM_DW2_MSDISPMODE_PERPIXEL                                (0x1 << 31)
-#define GEN75_WM_DW2_PS_UAV_ONLY                               (0x1 << 30)
-
-#define GEN8_3DSTATE_WM_CHROMAKEY__SIZE                                2
-
-
-#define GEN8_CHROMAKEY_DW1_KILL_ENABLE                         (0x1 << 31)
-
-#define GEN8_3DSTATE_WM_DEPTH_STENCIL__SIZE                    4
-
-
-#define GEN8_ZS_DW1_STENCIL_FAIL_OP__MASK                      0xe0000000
-#define GEN8_ZS_DW1_STENCIL_FAIL_OP__SHIFT                     29
-#define GEN8_ZS_DW1_STENCIL_ZFAIL_OP__MASK                     0x1c000000
-#define GEN8_ZS_DW1_STENCIL_ZFAIL_OP__SHIFT                    26
-#define GEN8_ZS_DW1_STENCIL_ZPASS_OP__MASK                     0x03800000
-#define GEN8_ZS_DW1_STENCIL_ZPASS_OP__SHIFT                    23
-#define GEN8_ZS_DW1_STENCIL1_FUNC__MASK                                0x00700000
-#define GEN8_ZS_DW1_STENCIL1_FUNC__SHIFT                       20
-#define GEN8_ZS_DW1_STENCIL1_FAIL_OP__MASK                     0x000e0000
-#define GEN8_ZS_DW1_STENCIL1_FAIL_OP__SHIFT                    17
-#define GEN8_ZS_DW1_STENCIL1_ZFAIL_OP__MASK                    0x0001c000
-#define GEN8_ZS_DW1_STENCIL1_ZFAIL_OP__SHIFT                   14
-#define GEN8_ZS_DW1_STENCIL1_ZPASS_OP__MASK                    0x00003800
-#define GEN8_ZS_DW1_STENCIL1_ZPASS_OP__SHIFT                   11
-#define GEN8_ZS_DW1_STENCIL_FUNC__MASK                         0x00000700
-#define GEN8_ZS_DW1_STENCIL_FUNC__SHIFT                                8
-#define GEN8_ZS_DW1_DEPTH_FUNC__MASK                           0x000000e0
-#define GEN8_ZS_DW1_DEPTH_FUNC__SHIFT                          5
-#define GEN8_ZS_DW1_STENCIL1_ENABLE                            (0x1 << 4)
-#define GEN8_ZS_DW1_STENCIL_TEST_ENABLE                                (0x1 << 3)
-#define GEN8_ZS_DW1_STENCIL_WRITE_ENABLE                       (0x1 << 2)
-#define GEN8_ZS_DW1_DEPTH_TEST_ENABLE                          (0x1 << 1)
-#define GEN8_ZS_DW1_DEPTH_WRITE_ENABLE                         (0x1 << 0)
-
-#define GEN8_ZS_DW2_STENCIL_TEST_MASK__MASK                    0xff000000
-#define GEN8_ZS_DW2_STENCIL_TEST_MASK__SHIFT                   24
-#define GEN8_ZS_DW2_STENCIL_WRITE_MASK__MASK                   0x00ff0000
-#define GEN8_ZS_DW2_STENCIL_WRITE_MASK__SHIFT                  16
-#define GEN8_ZS_DW2_STENCIL1_TEST_MASK__MASK                   0x0000ff00
-#define GEN8_ZS_DW2_STENCIL1_TEST_MASK__SHIFT                  8
-#define GEN8_ZS_DW2_STENCIL1_WRITE_MASK__MASK                  0x000000ff
-#define GEN8_ZS_DW2_STENCIL1_WRITE_MASK__SHIFT                 0
-
-#define GEN9_ZS_DW3_STENCIL_REF__MASK                          0x0000ff00
-#define GEN9_ZS_DW3_STENCIL_REF__SHIFT                         8
-#define GEN9_ZS_DW3_STENCIL1_REF__MASK                         0x000000ff
-#define GEN9_ZS_DW3_STENCIL1_REF__SHIFT                                0
-
-#define GEN8_3DSTATE_WM_HZ_OP__SIZE                            5
-
-
-#define GEN8_WM_HZ_DW1_STENCIL_CLEAR                           (0x1 << 31)
-#define GEN8_WM_HZ_DW1_DEPTH_CLEAR                             (0x1 << 30)
-#define GEN8_WM_HZ_DW1_SCISSOR_ENABLE                          (0x1 << 29)
-#define GEN8_WM_HZ_DW1_DEPTH_RESOLVE                           (0x1 << 28)
-#define GEN8_WM_HZ_DW1_HIZ_RESOLVE                             (0x1 << 27)
-#define GEN8_WM_HZ_DW1_PIXEL_OFFSET_ENABLE                     (0x1 << 26)
-#define GEN8_WM_HZ_DW1_FULL_SURFACE_DEPTH_CLEAR                        (0x1 << 25)
-#define GEN8_WM_HZ_DW1_STENCIL_CLEAR_VALUE__MASK               0x00ff0000
-#define GEN8_WM_HZ_DW1_STENCIL_CLEAR_VALUE__SHIFT              16
-#define GEN8_WM_HZ_DW1_NUM_SAMPLES__MASK                       0x0000e000
-#define GEN8_WM_HZ_DW1_NUM_SAMPLES__SHIFT                      13
-
-#define GEN8_WM_HZ_DW2_RECT_MIN_Y__MASK                                0xffff0000
-#define GEN8_WM_HZ_DW2_RECT_MIN_Y__SHIFT                       16
-#define GEN8_WM_HZ_DW2_RECT_MIN_X__MASK                                0x0000ffff
-#define GEN8_WM_HZ_DW2_RECT_MIN_X__SHIFT                       0
-
-#define GEN8_WM_HZ_DW3_RECT_MAX_Y__MASK                                0xffff0000
-#define GEN8_WM_HZ_DW3_RECT_MAX_Y__SHIFT                       16
-#define GEN8_WM_HZ_DW3_RECT_MAX_X__MASK                                0x0000ffff
-#define GEN8_WM_HZ_DW3_RECT_MAX_X__SHIFT                       0
-
-#define GEN8_WM_HZ_DW4_SAMPLE_MASK__MASK                       0x0000ffff
-#define GEN8_WM_HZ_DW4_SAMPLE_MASK__SHIFT                      0
-
-#define GEN7_3DSTATE_PS__SIZE                                  12
-
-
-#define GEN7_PS_DW1_KERNEL0_ADDR__MASK                         0xffffffc0
-#define GEN7_PS_DW1_KERNEL0_ADDR__SHIFT                                6
-#define GEN7_PS_DW1_KERNEL0_ADDR__SHR                          6
-
-
-
-#define GEN7_PS_DW4_MAX_THREADS__MASK                          0xff000000
-#define GEN7_PS_DW4_MAX_THREADS__SHIFT                         24
-#define GEN75_PS_DW4_MAX_THREADS__MASK                         0xff800000
-#define GEN75_PS_DW4_MAX_THREADS__SHIFT                                23
-#define GEN75_PS_DW4_SAMPLE_MASK__MASK                         0x000ff000
-#define GEN75_PS_DW4_SAMPLE_MASK__SHIFT                                12
-#define GEN7_PS_DW4_PUSH_CONSTANT_ENABLE                       (0x1 << 11)
-#define GEN7_PS_DW4_ATTR_ENABLE                                        (0x1 << 10)
-#define GEN7_PS_DW4_COMPUTE_OMASK                              (0x1 << 9)
-#define GEN7_PS_DW4_RT_FAST_CLEAR                              (0x1 << 8)
-#define GEN7_PS_DW4_DUAL_SOURCE_BLEND                          (0x1 << 7)
-#define GEN7_PS_DW4_RT_RESOLVE                                 (0x1 << 6)
-#define GEN75_PS_DW4_ACCESS_UAV                                        (0x1 << 5)
-#define GEN7_PS_DW4_POSOFFSET__MASK                            0x00000018
-#define GEN7_PS_DW4_POSOFFSET__SHIFT                           3
-#define GEN7_PS_DW4_DISPATCH_MODE__MASK                                0x00000007
-#define GEN7_PS_DW4_DISPATCH_MODE__SHIFT                       0
-
-#define GEN7_PS_DW5_URB_GRF_START0__MASK                       0x007f0000
-#define GEN7_PS_DW5_URB_GRF_START0__SHIFT                      16
-#define GEN7_PS_DW5_URB_GRF_START1__MASK                       0x00007f00
-#define GEN7_PS_DW5_URB_GRF_START1__SHIFT                      8
-#define GEN7_PS_DW5_URB_GRF_START2__MASK                       0x0000007f
-#define GEN7_PS_DW5_URB_GRF_START2__SHIFT                      0
-
-#define GEN7_PS_DW6_KERNEL1_ADDR__MASK                         0xffffffc0
-#define GEN7_PS_DW6_KERNEL1_ADDR__SHIFT                                6
-#define GEN7_PS_DW6_KERNEL1_ADDR__SHR                          6
-
-#define GEN7_PS_DW7_KERNEL2_ADDR__MASK                         0xffffffc0
-#define GEN7_PS_DW7_KERNEL2_ADDR__SHIFT                                6
-#define GEN7_PS_DW7_KERNEL2_ADDR__SHR                          6
-
-
-
-#define GEN8_PS_DW1_KERNEL0_ADDR__MASK                         0xffffffc0
-#define GEN8_PS_DW1_KERNEL0_ADDR__SHIFT                                6
-#define GEN8_PS_DW1_KERNEL0_ADDR__SHR                          6
-
-
-
-
-
-#define GEN8_PS_DW6_MAX_THREADS__MASK                          0xff800000
-#define GEN8_PS_DW6_MAX_THREADS__SHIFT                         23
-#define GEN8_PS_DW6_PUSH_CONSTANT_ENABLE                       (0x1 << 11)
-#define GEN8_PS_DW6_RT_FAST_CLEAR                              (0x1 << 8)
-#define GEN8_PS_DW6_RT_RESOLVE                                 (0x1 << 6)
-#define GEN8_PS_DW6_POSOFFSET__MASK                            0x00000018
-#define GEN8_PS_DW6_POSOFFSET__SHIFT                           3
-#define GEN8_PS_DW6_DISPATCH_MODE__MASK                                0x00000007
-#define GEN8_PS_DW6_DISPATCH_MODE__SHIFT                       0
-
-#define GEN8_PS_DW7_URB_GRF_START0__MASK                       0x007f0000
-#define GEN8_PS_DW7_URB_GRF_START0__SHIFT                      16
-#define GEN8_PS_DW7_URB_GRF_START1__MASK                       0x00007f00
-#define GEN8_PS_DW7_URB_GRF_START1__SHIFT                      8
-#define GEN8_PS_DW7_URB_GRF_START2__MASK                       0x0000007f
-#define GEN8_PS_DW7_URB_GRF_START2__SHIFT                      0
-
-#define GEN8_PS_DW8_KERNEL1_ADDR__MASK                         0xffffffc0
-#define GEN8_PS_DW8_KERNEL1_ADDR__SHIFT                                6
-#define GEN8_PS_DW8_KERNEL1_ADDR__SHR                          6
-
-
-#define GEN8_PS_DW10_KERNEL2_ADDR__MASK                                0xffffffc0
-#define GEN8_PS_DW10_KERNEL2_ADDR__SHIFT                       6
-#define GEN8_PS_DW10_KERNEL2_ADDR__SHR                         6
-
-
-#define GEN8_3DSTATE_PS_EXTRA__SIZE                            2
-
-
-#define GEN8_PSX_DW1_VALID                                     (0x1 << 31)
-#define GEN8_PSX_DW1_UAV_ONLY                                  (0x1 << 30)
-#define GEN8_PSX_DW1_COMPUTE_OMASK                             (0x1 << 29)
-#define GEN8_PSX_DW1_KILL_PIXEL                                        (0x1 << 28)
-#define GEN8_PSX_DW1_PSCDEPTH__MASK                            0x0c000000
-#define GEN8_PSX_DW1_PSCDEPTH__SHIFT                           26
-#define GEN8_PSX_DW1_FORCE_COMPUTE_DEPTH                       (0x1 << 25)
-#define GEN8_PSX_DW1_USE_DEPTH                                 (0x1 << 24)
-#define GEN8_PSX_DW1_USE_W                                     (0x1 << 23)
-#define GEN8_PSX_DW1_ATTR_ENABLE                               (0x1 << 8)
-#define GEN8_PSX_DW1_DISABLE_ALPHA_TO_COVERAGE                 (0x1 << 7)
-#define GEN8_PSX_DW1_PER_SAMPLE                                        (0x1 << 6)
-#define GEN8_PSX_DW1_COMPUTE_STENCIL                           (0x1 << 5)
-#define GEN8_PSX_DW1_ACCESS_UAV                                        (0x1 << 2)
-#define GEN8_PSX_DW1_USE_COVERAGE_MASK                         (0x1 << 1)
-
-#define GEN8_3DSTATE_PS_BLEND__SIZE                            2
-
-
-#define GEN8_PS_BLEND_DW1_ALPHA_TO_COVERAGE                    (0x1 << 31)
-#define GEN8_PS_BLEND_DW1_WRITABLE_RT                          (0x1 << 30)
-#define GEN8_PS_BLEND_DW1_RT0_BLEND_ENABLE                     (0x1 << 29)
-#define GEN8_PS_BLEND_DW1_RT0_SRC_ALPHA_FACTOR__MASK           0x1f000000
-#define GEN8_PS_BLEND_DW1_RT0_SRC_ALPHA_FACTOR__SHIFT          24
-#define GEN8_PS_BLEND_DW1_RT0_DST_ALPHA_FACTOR__MASK           0x00f80000
-#define GEN8_PS_BLEND_DW1_RT0_DST_ALPHA_FACTOR__SHIFT          19
-#define GEN8_PS_BLEND_DW1_RT0_SRC_COLOR_FACTOR__MASK           0x0007c000
-#define GEN8_PS_BLEND_DW1_RT0_SRC_COLOR_FACTOR__SHIFT          14
-#define GEN8_PS_BLEND_DW1_RT0_DST_COLOR_FACTOR__MASK           0x00003e00
-#define GEN8_PS_BLEND_DW1_RT0_DST_COLOR_FACTOR__SHIFT          9
-#define GEN8_PS_BLEND_DW1_ALPHA_TEST_ENABLE                    (0x1 << 8)
-#define GEN8_PS_BLEND_DW1_RT0_INDEPENDENT_ALPHA_ENABLE         (0x1 << 7)
-
-#define GEN6_3DSTATE_CONSTANT_ANY__SIZE                                11
-
-#define GEN6_CONSTANT_DW0_BUFFER_ENABLES__MASK                 0x0000f000
-#define GEN6_CONSTANT_DW0_BUFFER_ENABLES__SHIFT                        12
-#define GEN6_CONSTANT_DW0_MOCS__MASK                           0x00000f00
-#define GEN6_CONSTANT_DW0_MOCS__SHIFT                          8
-
-#define GEN6_CONSTANT_DW_ADDR_READ_LEN__MASK                   0x0000001f
-#define GEN6_CONSTANT_DW_ADDR_READ_LEN__SHIFT                  0
-#define GEN6_CONSTANT_DW_ADDR_ADDR__MASK                       0xffffffe0
-#define GEN6_CONSTANT_DW_ADDR_ADDR__SHIFT                      5
-#define GEN6_CONSTANT_DW_ADDR_ADDR__SHR                                5
-
-
-#define GEN8_CONSTANT_DW0_MOCS__MASK                           0x00007f00
-#define GEN8_CONSTANT_DW0_MOCS__SHIFT                          8
-
-#define GEN7_CONSTANT_DW1_BUFFER1_READ_LEN__MASK               0xffff0000
-#define GEN7_CONSTANT_DW1_BUFFER1_READ_LEN__SHIFT              16
-#define GEN7_CONSTANT_DW1_BUFFER0_READ_LEN__MASK               0x0000ffff
-#define GEN7_CONSTANT_DW1_BUFFER0_READ_LEN__SHIFT              0
-
-#define GEN7_CONSTANT_DW2_BUFFER3_READ_LEN__MASK               0xffff0000
-#define GEN7_CONSTANT_DW2_BUFFER3_READ_LEN__SHIFT              16
-#define GEN7_CONSTANT_DW2_BUFFER2_READ_LEN__MASK               0x0000ffff
-#define GEN7_CONSTANT_DW2_BUFFER2_READ_LEN__SHIFT              0
-
-#define GEN7_CONSTANT_DW_ADDR_MOCS__MASK                       0x0000001f
-#define GEN7_CONSTANT_DW_ADDR_MOCS__SHIFT                      0
-#define GEN7_CONSTANT_DW_ADDR_ADDR__MASK                       0xffffffe0
-#define GEN7_CONSTANT_DW_ADDR_ADDR__SHIFT                      5
-#define GEN7_CONSTANT_DW_ADDR_ADDR__SHR                                5
-
-#define GEN8_CONSTANT_DW_ADDR_ADDR__MASK                       0xffffffe0
-#define GEN8_CONSTANT_DW_ADDR_ADDR__SHIFT                      5
-#define GEN8_CONSTANT_DW_ADDR_ADDR__SHR                                5
-
-#define GEN6_3DSTATE_SAMPLE_MASK__SIZE                         2
-
-
-#define GEN6_SAMPLE_MASK_DW1_VAL__MASK                         0x0000000f
-#define GEN6_SAMPLE_MASK_DW1_VAL__SHIFT                                0
-#define GEN7_SAMPLE_MASK_DW1_VAL__MASK                         0x000000ff
-#define GEN7_SAMPLE_MASK_DW1_VAL__SHIFT                                0
-#define GEN8_SAMPLE_MASK_DW1_VAL__MASK                         0x0000ffff
-#define GEN8_SAMPLE_MASK_DW1_VAL__SHIFT                                0
-
-#define GEN6_3DSTATE_DRAWING_RECTANGLE__SIZE                   4
-
-#define GEN8_DRAWING_RECTANGLE_DW0_CORE_MODE_SELECT__MASK      0x0000c000
-#define GEN8_DRAWING_RECTANGLE_DW0_CORE_MODE_SELECT__SHIFT     14
-
-#define GEN6_DRAWING_RECTANGLE_DW1_MIN_Y__MASK                 0xffff0000
-#define GEN6_DRAWING_RECTANGLE_DW1_MIN_Y__SHIFT                        16
-#define GEN6_DRAWING_RECTANGLE_DW1_MIN_X__MASK                 0x0000ffff
-#define GEN6_DRAWING_RECTANGLE_DW1_MIN_X__SHIFT                        0
-
-#define GEN6_DRAWING_RECTANGLE_DW2_MAX_Y__MASK                 0xffff0000
-#define GEN6_DRAWING_RECTANGLE_DW2_MAX_Y__SHIFT                        16
-#define GEN6_DRAWING_RECTANGLE_DW2_MAX_X__MASK                 0x0000ffff
-#define GEN6_DRAWING_RECTANGLE_DW2_MAX_X__SHIFT                        0
-
-#define GEN6_DRAWING_RECTANGLE_DW3_ORIGIN_Y__MASK              0xffff0000
-#define GEN6_DRAWING_RECTANGLE_DW3_ORIGIN_Y__SHIFT             16
-#define GEN6_DRAWING_RECTANGLE_DW3_ORIGIN_X__MASK              0x0000ffff
-#define GEN6_DRAWING_RECTANGLE_DW3_ORIGIN_X__SHIFT             0
-
-#define GEN6_3DSTATE_DEPTH_BUFFER__SIZE                                8
-
-
-#define GEN6_DEPTH_DW1_TYPE__MASK                              0xe0000000
-#define GEN6_DEPTH_DW1_TYPE__SHIFT                             29
-#define GEN6_DEPTH_DW1_TILING__MASK                            0x0c000000
-#define GEN6_DEPTH_DW1_TILING__SHIFT                           26
-#define GEN6_DEPTH_DW1_STR_MODE__MASK                          0x01800000
-#define GEN6_DEPTH_DW1_STR_MODE__SHIFT                         23
-#define GEN6_DEPTH_DW1_HIZ_ENABLE                              (0x1 << 22)
-#define GEN6_DEPTH_DW1_SEPARATE_STENCIL                                (0x1 << 21)
-#define GEN6_DEPTH_DW1_FORMAT__MASK                            0x001c0000
-#define GEN6_DEPTH_DW1_FORMAT__SHIFT                           18
-#define GEN6_DEPTH_DW1_PITCH__MASK                             0x0001ffff
-#define GEN6_DEPTH_DW1_PITCH__SHIFT                            0
-
-
-#define GEN6_DEPTH_DW3_HEIGHT__MASK                            0xfff80000
-#define GEN6_DEPTH_DW3_HEIGHT__SHIFT                           19
-#define GEN6_DEPTH_DW3_WIDTH__MASK                             0x0007ffc0
-#define GEN6_DEPTH_DW3_WIDTH__SHIFT                            6
-#define GEN6_DEPTH_DW3_LOD__MASK                               0x0000003c
-#define GEN6_DEPTH_DW3_LOD__SHIFT                              2
-#define GEN6_DEPTH_DW3_MIPLAYOUT__MASK                         0x00000002
-#define GEN6_DEPTH_DW3_MIPLAYOUT__SHIFT                                1
-#define GEN6_DEPTH_DW3_MIPLAYOUT_BELOW                         (0x0 << 1)
-#define GEN6_DEPTH_DW3_MIPLAYOUT_RIGHT                         (0x1 << 1)
-
-#define GEN6_DEPTH_DW4_DEPTH__MASK                             0xffe00000
-#define GEN6_DEPTH_DW4_DEPTH__SHIFT                            21
-#define GEN6_DEPTH_DW4_MIN_ARRAY_ELEMENT__MASK                 0x001ffc00
-#define GEN6_DEPTH_DW4_MIN_ARRAY_ELEMENT__SHIFT                        10
-#define GEN6_DEPTH_DW4_RT_VIEW_EXTENT__MASK                    0x000003fe
-#define GEN6_DEPTH_DW4_RT_VIEW_EXTENT__SHIFT                   1
-
-#define GEN6_DEPTH_DW5_OFFSET_Y__MASK                          0xffff0000
-#define GEN6_DEPTH_DW5_OFFSET_Y__SHIFT                         16
-#define GEN6_DEPTH_DW5_OFFSET_X__MASK                          0x0000ffff
-#define GEN6_DEPTH_DW5_OFFSET_X__SHIFT                         0
-
-#define GEN6_DEPTH_DW6_MOCS__MASK                              0xf8000000
-#define GEN6_DEPTH_DW6_MOCS__SHIFT                             27
-
-
-
-#define GEN7_DEPTH_DW1_TYPE__MASK                              0xe0000000
-#define GEN7_DEPTH_DW1_TYPE__SHIFT                             29
-#define GEN7_DEPTH_DW1_DEPTH_WRITE_ENABLE                      (0x1 << 28)
-#define GEN7_DEPTH_DW1_STENCIL_WRITE_ENABLE                    (0x1 << 27)
-#define GEN7_DEPTH_DW1_HIZ_ENABLE                              (0x1 << 22)
-#define GEN7_DEPTH_DW1_FORMAT__MASK                            0x001c0000
-#define GEN7_DEPTH_DW1_FORMAT__SHIFT                           18
-#define GEN7_DEPTH_DW1_PITCH__MASK                             0x0003ffff
-#define GEN7_DEPTH_DW1_PITCH__SHIFT                            0
-
-
-#define GEN7_DEPTH_DW3_HEIGHT__MASK                            0xfffc0000
-#define GEN7_DEPTH_DW3_HEIGHT__SHIFT                           18
-#define GEN7_DEPTH_DW3_WIDTH__MASK                             0x0003fff0
-#define GEN7_DEPTH_DW3_WIDTH__SHIFT                            4
-#define GEN7_DEPTH_DW3_LOD__MASK                               0x0000000f
-#define GEN7_DEPTH_DW3_LOD__SHIFT                              0
-
-#define GEN7_DEPTH_DW4_DEPTH__MASK                             0xffe00000
-#define GEN7_DEPTH_DW4_DEPTH__SHIFT                            21
-#define GEN7_DEPTH_DW4_MIN_ARRAY_ELEMENT__MASK                 0x001ffc00
-#define GEN7_DEPTH_DW4_MIN_ARRAY_ELEMENT__SHIFT                        10
-#define GEN7_DEPTH_DW4_MOCS__MASK                              0x0000000f
-#define GEN7_DEPTH_DW4_MOCS__SHIFT                             0
-
-#define GEN7_DEPTH_DW5_OFFSET_Y__MASK                          0xffff0000
-#define GEN7_DEPTH_DW5_OFFSET_Y__SHIFT                         16
-#define GEN7_DEPTH_DW5_OFFSET_X__MASK                          0x0000ffff
-#define GEN7_DEPTH_DW5_OFFSET_X__SHIFT                         0
-
-#define GEN7_DEPTH_DW6_RT_VIEW_EXTENT__MASK                    0xffe00000
-#define GEN7_DEPTH_DW6_RT_VIEW_EXTENT__SHIFT                   21
-
-
-
-#define GEN8_DEPTH_DW1_TYPE__MASK                              0xe0000000
-#define GEN8_DEPTH_DW1_TYPE__SHIFT                             29
-#define GEN8_DEPTH_DW1_DEPTH_WRITE_ENABLE                      (0x1 << 28)
-#define GEN8_DEPTH_DW1_STENCIL_WRITE_ENABLE                    (0x1 << 27)
-#define GEN8_DEPTH_DW1_HIZ_ENABLE                              (0x1 << 22)
-#define GEN8_DEPTH_DW1_FORMAT__MASK                            0x001c0000
-#define GEN8_DEPTH_DW1_FORMAT__SHIFT                           18
-#define GEN8_DEPTH_DW1_PITCH__MASK                             0x0003ffff
-#define GEN8_DEPTH_DW1_PITCH__SHIFT                            0
-
-
-
-#define GEN8_DEPTH_DW4_HEIGHT__MASK                            0xfffc0000
-#define GEN8_DEPTH_DW4_HEIGHT__SHIFT                           18
-#define GEN8_DEPTH_DW4_WIDTH__MASK                             0x0003fff0
-#define GEN8_DEPTH_DW4_WIDTH__SHIFT                            4
-#define GEN8_DEPTH_DW4_LOD__MASK                               0x0000000f
-#define GEN8_DEPTH_DW4_LOD__SHIFT                              0
-
-#define GEN8_DEPTH_DW5_DEPTH__MASK                             0xffe00000
-#define GEN8_DEPTH_DW5_DEPTH__SHIFT                            21
-#define GEN8_DEPTH_DW5_MIN_ARRAY_ELEMENT__MASK                 0x001ffc00
-#define GEN8_DEPTH_DW5_MIN_ARRAY_ELEMENT__SHIFT                        10
-#define GEN8_DEPTH_DW5_MOCS__MASK                              0x0000007f
-#define GEN8_DEPTH_DW5_MOCS__SHIFT                             0
-
-
-#define GEN8_DEPTH_DW7_RT_VIEW_EXTENT__MASK                    0xffe00000
-#define GEN8_DEPTH_DW7_RT_VIEW_EXTENT__SHIFT                   21
-#define GEN8_DEPTH_DW7_QPITCH__MASK                            0x00007fff
-#define GEN8_DEPTH_DW7_QPITCH__SHIFT                           0
-#define GEN8_DEPTH_DW7_QPITCH__SHR                             2
-
-#define GEN6_3DSTATE_POLY_STIPPLE_OFFSET__SIZE                 2
-
-
-#define GEN6_POLY_STIPPLE_OFFSET_DW1_X__MASK                   0x00001f00
-#define GEN6_POLY_STIPPLE_OFFSET_DW1_X__SHIFT                  8
-#define GEN6_POLY_STIPPLE_OFFSET_DW1_Y__MASK                   0x0000001f
-#define GEN6_POLY_STIPPLE_OFFSET_DW1_Y__SHIFT                  0
-
-#define GEN6_3DSTATE_POLY_STIPPLE_PATTERN__SIZE                        33
-
-
-
-#define GEN6_3DSTATE_LINE_STIPPLE__SIZE                                3
-
-
-#define GEN6_LINE_STIPPLE_DW1_CURRENT_MODIFY_ENABLE            (0x1 << 31)
-#define GEN6_LINE_STIPPLE_DW1_CURRENT_REPEAT_COUNTER__MASK     0x3fe00000
-#define GEN6_LINE_STIPPLE_DW1_CURRENT_REPEAT_COUNTER__SHIFT    21
-#define GEN6_LINE_STIPPLE_DW1_CURRENT_STIPPLE_INDEX__MASK      0x000f0000
-#define GEN6_LINE_STIPPLE_DW1_CURRENT_STIPPLE_INDEX__SHIFT     16
-#define GEN6_LINE_STIPPLE_DW1_PATTERN__MASK                    0x0000ffff
-#define GEN6_LINE_STIPPLE_DW1_PATTERN__SHIFT                   0
-
-#define GEN6_LINE_STIPPLE_DW2_INVERSE_REPEAT_COUNT__MASK       0xffff0000
-#define GEN6_LINE_STIPPLE_DW2_INVERSE_REPEAT_COUNT__SHIFT      16
-#define GEN6_LINE_STIPPLE_DW2_INVERSE_REPEAT_COUNT__RADIX      13
-#define GEN7_LINE_STIPPLE_DW2_INVERSE_REPEAT_COUNT__MASK       0xffff8000
-#define GEN7_LINE_STIPPLE_DW2_INVERSE_REPEAT_COUNT__SHIFT      15
-#define GEN7_LINE_STIPPLE_DW2_INVERSE_REPEAT_COUNT__RADIX      16
-#define GEN6_LINE_STIPPLE_DW2_REPEAT_COUNT__MASK               0x000001ff
-#define GEN6_LINE_STIPPLE_DW2_REPEAT_COUNT__SHIFT              0
-
-#define GEN6_3DSTATE_AA_LINE_PARAMETERS__SIZE                  3
-
-
-#define GEN8_AA_LINE_DW1_POINT_BIAS__MASK                      0xff000000
-#define GEN8_AA_LINE_DW1_POINT_BIAS__SHIFT                     24
-#define GEN8_AA_LINE_DW1_POINT_BIAS__RADIX                     8
-#define GEN6_AA_LINE_DW1_BIAS__MASK                            0x00ff0000
-#define GEN6_AA_LINE_DW1_BIAS__SHIFT                           16
-#define GEN6_AA_LINE_DW1_BIAS__RADIX                           8
-#define GEN8_AA_LINE_DW1_POINT_SLOPE__MASK                     0x0000ff00
-#define GEN8_AA_LINE_DW1_POINT_SLOPE__SHIFT                    8
-#define GEN8_AA_LINE_DW1_POINT_SLOPE__RADIX                    8
-#define GEN6_AA_LINE_DW1_SLOPE__MASK                           0x000000ff
-#define GEN6_AA_LINE_DW1_SLOPE__SHIFT                          0
-#define GEN6_AA_LINE_DW1_SLOPE__RADIX                          8
-
-#define GEN8_AA_LINE_DW2_POINT_CAP_BIAS__MASK                  0xff000000
-#define GEN8_AA_LINE_DW2_POINT_CAP_BIAS__SHIFT                 24
-#define GEN8_AA_LINE_DW2_POINT_CAP_BIAS__RADIX                 8
-#define GEN6_AA_LINE_DW2_CAP_BIAS__MASK                                0x00ff0000
-#define GEN6_AA_LINE_DW2_CAP_BIAS__SHIFT                       16
-#define GEN6_AA_LINE_DW2_CAP_BIAS__RADIX                       8
-#define GEN8_AA_LINE_DW2_POINT_CAP_SLOPE__MASK                 0x0000ff00
-#define GEN8_AA_LINE_DW2_POINT_CAP_SLOPE__SHIFT                        8
-#define GEN8_AA_LINE_DW2_POINT_CAP_SLOPE__RADIX                        8
-#define GEN6_AA_LINE_DW2_CAP_SLOPE__MASK                       0x000000ff
-#define GEN6_AA_LINE_DW2_CAP_SLOPE__SHIFT                      0
-#define GEN6_AA_LINE_DW2_CAP_SLOPE__RADIX                      8
-
-#define GEN6_3DSTATE_GS_SVB_INDEX__SIZE                                4
-
-
-#define GEN6_SVBI_DW1_INDEX__MASK                              0x60000000
-#define GEN6_SVBI_DW1_INDEX__SHIFT                             29
-#define GEN6_SVBI_DW1_LOAD_INTERNAL_VERTEX_COUNT               (0x1 << 0)
-
-
-
-#define GEN6_3DSTATE_MULTISAMPLE__SIZE                         4
-
-
-#define GEN75_MULTISAMPLE_DW1_PIXEL_OFFSET_ENABLE              (0x1 << 5)
-#define GEN6_MULTISAMPLE_DW1_PIXEL_LOCATION__MASK              0x00000010
-#define GEN6_MULTISAMPLE_DW1_PIXEL_LOCATION__SHIFT             4
-#define GEN6_MULTISAMPLE_DW1_NUM_SAMPLES__MASK                 0x0000000e
-#define GEN6_MULTISAMPLE_DW1_NUM_SAMPLES__SHIFT                        1
-
-
-
-#define GEN8_3DSTATE_SAMPLE_PATTERN__SIZE                      9
-
-
-
-
-
-#define GEN8_SAMPLE_PATTERN_DW8_1X__MASK                       0x00ff0000
-#define GEN8_SAMPLE_PATTERN_DW8_1X__SHIFT                      16
-#define GEN8_SAMPLE_PATTERN_DW8_2X__MASK                       0x0000ffff
-#define GEN8_SAMPLE_PATTERN_DW8_2X__SHIFT                      0
-
-#define GEN6_3DSTATE_STENCIL_BUFFER__SIZE                      5
-
-
-#define GEN75_STENCIL_DW1_STENCIL_BUFFER_ENABLE                        (0x1 << 31)
-#define GEN6_STENCIL_DW1_MOCS__MASK                            0x1e000000
-#define GEN6_STENCIL_DW1_MOCS__SHIFT                           25
-#define GEN8_STENCIL_DW1_MOCS__MASK                            0x1fc00000
-#define GEN8_STENCIL_DW1_MOCS__SHIFT                           22
-#define GEN6_STENCIL_DW1_PITCH__MASK                           0x0001ffff
-#define GEN6_STENCIL_DW1_PITCH__SHIFT                          0
-
-
-
-#define GEN8_STENCIL_DW4_QPITCH__MASK                          0x00007fff
-#define GEN8_STENCIL_DW4_QPITCH__SHIFT                         0
-#define GEN8_STENCIL_DW4_QPITCH__SHR                           2
-
-#define GEN6_3DSTATE_HIER_DEPTH_BUFFER__SIZE                   5
-
-
-#define GEN6_HIZ_DW1_MOCS__MASK                                        0x1e000000
-#define GEN6_HIZ_DW1_MOCS__SHIFT                               25
-#define GEN8_HIZ_DW1_MOCS__MASK                                        0xfe000000
-#define GEN8_HIZ_DW1_MOCS__SHIFT                               25
-#define GEN6_HIZ_DW1_PITCH__MASK                               0x0001ffff
-#define GEN6_HIZ_DW1_PITCH__SHIFT                              0
-
-
-
-#define GEN8_HIZ_DW4_QPITCH__MASK                              0x00007fff
-#define GEN8_HIZ_DW4_QPITCH__SHIFT                             0
-#define GEN8_HIZ_DW4_QPITCH__SHR                               2
-
-#define GEN6_3DSTATE_CLEAR_PARAMS__SIZE                                3
-
-#define GEN6_CLEAR_PARAMS_DW0_VALID                            (0x1 << 15)
-
-
-
-#define GEN7_CLEAR_PARAMS_DW2_VALID                            (0x1 << 0)
-
-#define GEN6_3DPRIMITIVE__SIZE                                 7
-
-#define GEN6_3DPRIM_DW0_ACCESS__MASK                           0x00008000
-#define GEN6_3DPRIM_DW0_ACCESS__SHIFT                          15
-#define GEN6_3DPRIM_DW0_ACCESS_SEQUENTIAL                      (0x0 << 15)
-#define GEN6_3DPRIM_DW0_ACCESS_RANDOM                          (0x1 << 15)
-#define GEN6_3DPRIM_DW0_TYPE__MASK                             0x00007c00
-#define GEN6_3DPRIM_DW0_TYPE__SHIFT                            10
-#define GEN6_3DPRIM_DW0_USE_INTERNAL_VERTEX_COUNT              (0x1 << 9)
-
-
-
-
-
-
-
-#define GEN7_3DPRIM_DW0_INDIRECT_PARAM_ENABLE                  (0x1 << 10)
-#define GEN75_3DPRIM_DW0_UAV_COHERENCY_REQUIRED                        (0x1 << 9)
-#define GEN7_3DPRIM_DW0_PREDICATE_ENABLE                       (0x1 << 8)
-
-#define GEN7_3DPRIM_DW1_END_OFFSET_ENABLE                      (0x1 << 9)
-#define GEN7_3DPRIM_DW1_ACCESS__MASK                           0x00000100
-#define GEN7_3DPRIM_DW1_ACCESS__SHIFT                          8
-#define GEN7_3DPRIM_DW1_ACCESS_SEQUENTIAL                      (0x0 << 8)
-#define GEN7_3DPRIM_DW1_ACCESS_RANDOM                          (0x1 << 8)
-#define GEN7_3DPRIM_DW1_TYPE__MASK                             0x0000003f
-#define GEN7_3DPRIM_DW1_TYPE__SHIFT                            0
-
-
-
-
-
-
-
-#endif /* GEN_RENDER_3D_XML */
diff --git a/src/gallium/drivers/ilo/genhw/gen_render_dynamic.xml.h b/src/gallium/drivers/ilo/genhw/gen_render_dynamic.xml.h
deleted file mode 100644 (file)
index b2c2142..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-#ifndef GEN_RENDER_DYNAMIC_XML
-#define GEN_RENDER_DYNAMIC_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-enum gen_compare_function {
-    GEN6_COMPAREFUNCTION_ALWAYS                                      = 0x0,
-    GEN6_COMPAREFUNCTION_NEVER                               = 0x1,
-    GEN6_COMPAREFUNCTION_LESS                                = 0x2,
-    GEN6_COMPAREFUNCTION_EQUAL                               = 0x3,
-    GEN6_COMPAREFUNCTION_LEQUAL                                      = 0x4,
-    GEN6_COMPAREFUNCTION_GREATER                             = 0x5,
-    GEN6_COMPAREFUNCTION_NOTEQUAL                            = 0x6,
-    GEN6_COMPAREFUNCTION_GEQUAL                                      = 0x7,
-};
-
-enum gen_stencil_op {
-    GEN6_STENCILOP_KEEP                                              = 0x0,
-    GEN6_STENCILOP_ZERO                                              = 0x1,
-    GEN6_STENCILOP_REPLACE                                   = 0x2,
-    GEN6_STENCILOP_INCRSAT                                   = 0x3,
-    GEN6_STENCILOP_DECRSAT                                   = 0x4,
-    GEN6_STENCILOP_INCR                                              = 0x5,
-    GEN6_STENCILOP_DECR                                              = 0x6,
-    GEN6_STENCILOP_INVERT                                    = 0x7,
-};
-
-enum gen_blend_factor {
-    GEN6_BLENDFACTOR_ONE                                     = 0x1,
-    GEN6_BLENDFACTOR_SRC_COLOR                               = 0x2,
-    GEN6_BLENDFACTOR_SRC_ALPHA                               = 0x3,
-    GEN6_BLENDFACTOR_DST_ALPHA                               = 0x4,
-    GEN6_BLENDFACTOR_DST_COLOR                               = 0x5,
-    GEN6_BLENDFACTOR_SRC_ALPHA_SATURATE                              = 0x6,
-    GEN6_BLENDFACTOR_CONST_COLOR                             = 0x7,
-    GEN6_BLENDFACTOR_CONST_ALPHA                             = 0x8,
-    GEN6_BLENDFACTOR_SRC1_COLOR                                      = 0x9,
-    GEN6_BLENDFACTOR_SRC1_ALPHA                                      = 0xa,
-    GEN6_BLENDFACTOR_ZERO                                    = 0x11,
-    GEN6_BLENDFACTOR_INV_SRC_COLOR                           = 0x12,
-    GEN6_BLENDFACTOR_INV_SRC_ALPHA                           = 0x13,
-    GEN6_BLENDFACTOR_INV_DST_ALPHA                           = 0x14,
-    GEN6_BLENDFACTOR_INV_DST_COLOR                           = 0x15,
-    GEN6_BLENDFACTOR_INV_CONST_COLOR                         = 0x17,
-    GEN6_BLENDFACTOR_INV_CONST_ALPHA                         = 0x18,
-    GEN6_BLENDFACTOR_INV_SRC1_COLOR                          = 0x19,
-    GEN6_BLENDFACTOR_INV_SRC1_ALPHA                          = 0x1a,
-};
-
-enum gen_blend_function {
-    GEN6_BLENDFUNCTION_ADD                                   = 0x0,
-    GEN6_BLENDFUNCTION_SUBTRACT                                      = 0x1,
-    GEN6_BLENDFUNCTION_REVERSE_SUBTRACT                              = 0x2,
-    GEN6_BLENDFUNCTION_MIN                                   = 0x3,
-    GEN6_BLENDFUNCTION_MAX                                   = 0x4,
-};
-
-enum gen_logic_op {
-    GEN6_LOGICOP_CLEAR                                       = 0x0,
-    GEN6_LOGICOP_NOR                                         = 0x1,
-    GEN6_LOGICOP_AND_INVERTED                                = 0x2,
-    GEN6_LOGICOP_COPY_INVERTED                               = 0x3,
-    GEN6_LOGICOP_AND_REVERSE                                 = 0x4,
-    GEN6_LOGICOP_INVERT                                              = 0x5,
-    GEN6_LOGICOP_XOR                                         = 0x6,
-    GEN6_LOGICOP_NAND                                        = 0x7,
-    GEN6_LOGICOP_AND                                         = 0x8,
-    GEN6_LOGICOP_EQUIV                                       = 0x9,
-    GEN6_LOGICOP_NOOP                                        = 0xa,
-    GEN6_LOGICOP_OR_INVERTED                                 = 0xb,
-    GEN6_LOGICOP_COPY                                        = 0xc,
-    GEN6_LOGICOP_OR_REVERSE                                  = 0xd,
-    GEN6_LOGICOP_OR                                          = 0xe,
-    GEN6_LOGICOP_SET                                         = 0xf,
-};
-
-enum gen_mip_filter {
-    GEN6_MIPFILTER_NONE                                              = 0x0,
-    GEN6_MIPFILTER_NEAREST                                   = 0x1,
-    GEN6_MIPFILTER_LINEAR                                    = 0x3,
-};
-
-enum gen_map_filter {
-    GEN6_MAPFILTER_NEAREST                                   = 0x0,
-    GEN6_MAPFILTER_LINEAR                                    = 0x1,
-    GEN6_MAPFILTER_ANISOTROPIC                               = 0x2,
-    GEN6_MAPFILTER_MONO                                              = 0x6,
-};
-
-enum gen_prefilter_op {
-    GEN6_PREFILTEROP_ALWAYS                                  = 0x0,
-    GEN6_PREFILTEROP_NEVER                                   = 0x1,
-    GEN6_PREFILTEROP_LESS                                    = 0x2,
-    GEN6_PREFILTEROP_EQUAL                                   = 0x3,
-    GEN6_PREFILTEROP_LEQUAL                                  = 0x4,
-    GEN6_PREFILTEROP_GREATER                                 = 0x5,
-    GEN6_PREFILTEROP_NOTEQUAL                                = 0x6,
-    GEN6_PREFILTEROP_GEQUAL                                  = 0x7,
-};
-
-enum gen_aniso_ratio {
-    GEN6_ANISORATIO_2                                        = 0x0,
-    GEN6_ANISORATIO_4                                        = 0x1,
-    GEN6_ANISORATIO_6                                        = 0x2,
-    GEN6_ANISORATIO_8                                        = 0x3,
-    GEN6_ANISORATIO_10                                       = 0x4,
-    GEN6_ANISORATIO_12                                       = 0x5,
-    GEN6_ANISORATIO_14                                       = 0x6,
-    GEN6_ANISORATIO_16                                       = 0x7,
-};
-
-enum gen_texcoord_mode {
-    GEN6_TEXCOORDMODE_WRAP                                   = 0x0,
-    GEN6_TEXCOORDMODE_MIRROR                                 = 0x1,
-    GEN6_TEXCOORDMODE_CLAMP                                  = 0x2,
-    GEN6_TEXCOORDMODE_CUBE                                   = 0x3,
-    GEN6_TEXCOORDMODE_CLAMP_BORDER                           = 0x4,
-    GEN6_TEXCOORDMODE_MIRROR_ONCE                            = 0x5,
-    GEN8_TEXCOORDMODE_HALF_BORDER                            = 0x6,
-};
-
-enum gen_key_filter {
-    GEN6_KEYFILTER_KILL_ON_ANY_MATCH                         = 0x0,
-    GEN6_KEYFILTER_REPLACE_BLACK                             = 0x1,
-};
-
-#define GEN6_COLOR_CALC_STATE__SIZE                            6
-
-#define GEN6_CC_DW0_STENCIL_REF__MASK                          0xff000000
-#define GEN6_CC_DW0_STENCIL_REF__SHIFT                         24
-#define GEN6_CC_DW0_STENCIL1_REF__MASK                         0x00ff0000
-#define GEN6_CC_DW0_STENCIL1_REF__SHIFT                                16
-#define GEN6_CC_DW0_ROUND_DISABLE_DISABLE                      (0x1 << 15)
-#define GEN6_CC_DW0_ALPHATEST__MASK                            0x00000001
-#define GEN6_CC_DW0_ALPHATEST__SHIFT                           0
-#define GEN6_CC_DW0_ALPHATEST_UNORM8                           0x0
-#define GEN6_CC_DW0_ALPHATEST_FLOAT32                          0x1
-
-
-
-
-
-
-#define GEN6_DEPTH_STENCIL_STATE__SIZE                         3
-
-#define GEN6_ZS_DW0_STENCIL_TEST_ENABLE                                (0x1 << 31)
-#define GEN6_ZS_DW0_STENCIL_FUNC__MASK                         0x70000000
-#define GEN6_ZS_DW0_STENCIL_FUNC__SHIFT                                28
-#define GEN6_ZS_DW0_STENCIL_FAIL_OP__MASK                      0x0e000000
-#define GEN6_ZS_DW0_STENCIL_FAIL_OP__SHIFT                     25
-#define GEN6_ZS_DW0_STENCIL_ZFAIL_OP__MASK                     0x01c00000
-#define GEN6_ZS_DW0_STENCIL_ZFAIL_OP__SHIFT                    22
-#define GEN6_ZS_DW0_STENCIL_ZPASS_OP__MASK                     0x00380000
-#define GEN6_ZS_DW0_STENCIL_ZPASS_OP__SHIFT                    19
-#define GEN6_ZS_DW0_STENCIL_WRITE_ENABLE                       (0x1 << 18)
-#define GEN6_ZS_DW0_STENCIL1_ENABLE                            (0x1 << 15)
-#define GEN6_ZS_DW0_STENCIL1_FUNC__MASK                                0x00007000
-#define GEN6_ZS_DW0_STENCIL1_FUNC__SHIFT                       12
-#define GEN6_ZS_DW0_STENCIL1_FAIL_OP__MASK                     0x00000e00
-#define GEN6_ZS_DW0_STENCIL1_FAIL_OP__SHIFT                    9
-#define GEN6_ZS_DW0_STENCIL1_ZFAIL_OP__MASK                    0x000001c0
-#define GEN6_ZS_DW0_STENCIL1_ZFAIL_OP__SHIFT                   6
-#define GEN6_ZS_DW0_STENCIL1_ZPASS_OP__MASK                    0x00000038
-#define GEN6_ZS_DW0_STENCIL1_ZPASS_OP__SHIFT                   3
-
-#define GEN6_ZS_DW1_STENCIL_TEST_MASK__MASK                    0xff000000
-#define GEN6_ZS_DW1_STENCIL_TEST_MASK__SHIFT                   24
-#define GEN6_ZS_DW1_STENCIL_WRITE_MASK__MASK                   0x00ff0000
-#define GEN6_ZS_DW1_STENCIL_WRITE_MASK__SHIFT                  16
-#define GEN6_ZS_DW1_STENCIL1_TEST_MASK__MASK                   0x0000ff00
-#define GEN6_ZS_DW1_STENCIL1_TEST_MASK__SHIFT                  8
-#define GEN6_ZS_DW1_STENCIL1_WRITE_MASK__MASK                  0x000000ff
-#define GEN6_ZS_DW1_STENCIL1_WRITE_MASK__SHIFT                 0
-
-#define GEN6_ZS_DW2_DEPTH_TEST_ENABLE                          (0x1 << 31)
-#define GEN6_ZS_DW2_DEPTH_FUNC__MASK                           0x38000000
-#define GEN6_ZS_DW2_DEPTH_FUNC__SHIFT                          27
-#define GEN6_ZS_DW2_DEPTH_WRITE_ENABLE                         (0x1 << 26)
-
-#define GEN6_BLEND_STATE__SIZE                                 17
-
-
-#define GEN6_RT_DW0_BLEND_ENABLE                               (0x1 << 31)
-#define GEN6_RT_DW0_INDEPENDENT_ALPHA_ENABLE                   (0x1 << 30)
-#define GEN6_RT_DW0_ALPHA_FUNC__MASK                           0x1c000000
-#define GEN6_RT_DW0_ALPHA_FUNC__SHIFT                          26
-#define GEN6_RT_DW0_SRC_ALPHA_FACTOR__MASK                     0x01f00000
-#define GEN6_RT_DW0_SRC_ALPHA_FACTOR__SHIFT                    20
-#define GEN6_RT_DW0_DST_ALPHA_FACTOR__MASK                     0x000f8000
-#define GEN6_RT_DW0_DST_ALPHA_FACTOR__SHIFT                    15
-#define GEN6_RT_DW0_COLOR_FUNC__MASK                           0x00003800
-#define GEN6_RT_DW0_COLOR_FUNC__SHIFT                          11
-#define GEN6_RT_DW0_SRC_COLOR_FACTOR__MASK                     0x000003e0
-#define GEN6_RT_DW0_SRC_COLOR_FACTOR__SHIFT                    5
-#define GEN6_RT_DW0_DST_COLOR_FACTOR__MASK                     0x0000001f
-#define GEN6_RT_DW0_DST_COLOR_FACTOR__SHIFT                    0
-
-#define GEN6_RT_DW1_ALPHA_TO_COVERAGE                          (0x1 << 31)
-#define GEN6_RT_DW1_ALPHA_TO_ONE                               (0x1 << 30)
-#define GEN6_RT_DW1_ALPHA_TO_COVERAGE_DITHER                   (0x1 << 29)
-#define GEN6_RT_DW1_WRITE_DISABLES__MASK                       0x0f000000
-#define GEN6_RT_DW1_WRITE_DISABLES__SHIFT                      24
-#define GEN6_RT_DW1_WRITE_DISABLES_A                           (0x1 << 27)
-#define GEN6_RT_DW1_WRITE_DISABLES_R                           (0x1 << 26)
-#define GEN6_RT_DW1_WRITE_DISABLES_G                           (0x1 << 25)
-#define GEN6_RT_DW1_WRITE_DISABLES_B                           (0x1 << 24)
-#define GEN6_RT_DW1_LOGICOP_ENABLE                             (0x1 << 22)
-#define GEN6_RT_DW1_LOGICOP_FUNC__MASK                         0x003c0000
-#define GEN6_RT_DW1_LOGICOP_FUNC__SHIFT                                18
-#define GEN6_RT_DW1_ALPHA_TEST_ENABLE                          (0x1 << 16)
-#define GEN6_RT_DW1_ALPHA_TEST_FUNC__MASK                      0x0000e000
-#define GEN6_RT_DW1_ALPHA_TEST_FUNC__SHIFT                     13
-#define GEN6_RT_DW1_DITHER_ENABLE                              (0x1 << 12)
-#define GEN6_RT_DW1_X_DITHER_OFFSET__MASK                      0x00000c00
-#define GEN6_RT_DW1_X_DITHER_OFFSET__SHIFT                     10
-#define GEN6_RT_DW1_Y_DITHER_OFFSET__MASK                      0x00000300
-#define GEN6_RT_DW1_Y_DITHER_OFFSET__SHIFT                     8
-#define GEN6_RT_DW1_COLORCLAMP__MASK                           0x0000000c
-#define GEN6_RT_DW1_COLORCLAMP__SHIFT                          2
-#define GEN6_RT_DW1_COLORCLAMP_UNORM                           (0x0 << 2)
-#define GEN6_RT_DW1_COLORCLAMP_SNORM                           (0x1 << 2)
-#define GEN6_RT_DW1_COLORCLAMP_RTFORMAT                                (0x2 << 2)
-#define GEN6_RT_DW1_PRE_BLEND_CLAMP                            (0x1 << 1)
-#define GEN6_RT_DW1_POST_BLEND_CLAMP                           (0x1 << 0)
-
-
-#define GEN8_BLEND_DW0_ALPHA_TO_COVERAGE                       (0x1 << 31)
-#define GEN8_BLEND_DW0_INDEPENDENT_ALPHA_ENABLE                        (0x1 << 30)
-#define GEN8_BLEND_DW0_ALPHA_TO_ONE                            (0x1 << 29)
-#define GEN8_BLEND_DW0_ALPHA_TO_COVERAGE_DITHER                        (0x1 << 28)
-#define GEN8_BLEND_DW0_ALPHA_TEST_ENABLE                       (0x1 << 27)
-#define GEN8_BLEND_DW0_ALPHA_TEST_FUNC__MASK                   0x07000000
-#define GEN8_BLEND_DW0_ALPHA_TEST_FUNC__SHIFT                  24
-#define GEN8_BLEND_DW0_DITHER_ENABLE                           (0x1 << 23)
-#define GEN8_BLEND_DW0_X_DITHER_OFFSET__MASK                   0x00600000
-#define GEN8_BLEND_DW0_X_DITHER_OFFSET__SHIFT                  21
-#define GEN8_BLEND_DW0_Y_DITHER_OFFSET__MASK                   0x00180000
-#define GEN8_BLEND_DW0_Y_DITHER_OFFSET__SHIFT                  19
-
-
-#define GEN8_RT_DW0_BLEND_ENABLE                               (0x1 << 31)
-#define GEN8_RT_DW0_SRC_COLOR_FACTOR__MASK                     0x7c000000
-#define GEN8_RT_DW0_SRC_COLOR_FACTOR__SHIFT                    26
-#define GEN8_RT_DW0_DST_COLOR_FACTOR__MASK                     0x03e00000
-#define GEN8_RT_DW0_DST_COLOR_FACTOR__SHIFT                    21
-#define GEN8_RT_DW0_COLOR_FUNC__MASK                           0x001c0000
-#define GEN8_RT_DW0_COLOR_FUNC__SHIFT                          18
-#define GEN8_RT_DW0_SRC_ALPHA_FACTOR__MASK                     0x0003e000
-#define GEN8_RT_DW0_SRC_ALPHA_FACTOR__SHIFT                    13
-#define GEN8_RT_DW0_DST_ALPHA_FACTOR__MASK                     0x00001f00
-#define GEN8_RT_DW0_DST_ALPHA_FACTOR__SHIFT                    8
-#define GEN8_RT_DW0_ALPHA_FUNC__MASK                           0x000000e0
-#define GEN8_RT_DW0_ALPHA_FUNC__SHIFT                          5
-#define GEN8_RT_DW0_WRITE_DISABLES__MASK                       0x0000000f
-#define GEN8_RT_DW0_WRITE_DISABLES__SHIFT                      0
-#define GEN8_RT_DW0_WRITE_DISABLES_A                           (0x1 << 3)
-#define GEN8_RT_DW0_WRITE_DISABLES_R                           (0x1 << 2)
-#define GEN8_RT_DW0_WRITE_DISABLES_G                           (0x1 << 1)
-#define GEN8_RT_DW0_WRITE_DISABLES_B                           (0x1 << 0)
-
-#define GEN8_RT_DW1_LOGICOP_ENABLE                             (0x1 << 31)
-#define GEN8_RT_DW1_LOGICOP_FUNC__MASK                         0x78000000
-#define GEN8_RT_DW1_LOGICOP_FUNC__SHIFT                                27
-#define GEN8_RT_DW1_PRE_BLEND_CLAMP_SRC_ONLY                   (0x1 << 4)
-#define GEN8_RT_DW1_COLORCLAMP__MASK                           0x0000000c
-#define GEN8_RT_DW1_COLORCLAMP__SHIFT                          2
-#define GEN8_RT_DW1_COLORCLAMP_UNORM                           (0x0 << 2)
-#define GEN8_RT_DW1_COLORCLAMP_SNORM                           (0x1 << 2)
-#define GEN8_RT_DW1_COLORCLAMP_RTFORMAT                                (0x2 << 2)
-#define GEN8_RT_DW1_PRE_BLEND_CLAMP                            (0x1 << 1)
-#define GEN8_RT_DW1_POST_BLEND_CLAMP                           (0x1 << 0)
-
-#define GEN6_CLIP_VIEWPORT__SIZE                               64
-
-
-
-
-
-
-#define GEN6_SF_VIEWPORT__SIZE                                 128
-
-
-
-
-
-
-
-
-
-
-#define GEN7_SF_CLIP_VIEWPORT__SIZE                            256
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#define GEN6_CC_VIEWPORT__SIZE                                 32
-
-
-
-
-#define GEN6_SCISSOR_RECT__SIZE                                        32
-
-
-#define GEN6_SCISSOR_DW0_MIN_Y__MASK                           0xffff0000
-#define GEN6_SCISSOR_DW0_MIN_Y__SHIFT                          16
-#define GEN6_SCISSOR_DW0_MIN_X__MASK                           0x0000ffff
-#define GEN6_SCISSOR_DW0_MIN_X__SHIFT                          0
-
-#define GEN6_SCISSOR_DW1_MAX_Y__MASK                           0xffff0000
-#define GEN6_SCISSOR_DW1_MAX_Y__SHIFT                          16
-#define GEN6_SCISSOR_DW1_MAX_X__MASK                           0x0000ffff
-#define GEN6_SCISSOR_DW1_MAX_X__SHIFT                          0
-
-#define GEN6_SAMPLER_BORDER_COLOR_STATE__SIZE                  20
-
-#define GEN6_BORDER_COLOR_DW0_A__MASK                          0xff000000
-#define GEN6_BORDER_COLOR_DW0_A__SHIFT                         24
-#define GEN6_BORDER_COLOR_DW0_B__MASK                          0x00ff0000
-#define GEN6_BORDER_COLOR_DW0_B__SHIFT                         16
-#define GEN6_BORDER_COLOR_DW0_G__MASK                          0x0000ff00
-#define GEN6_BORDER_COLOR_DW0_G__SHIFT                         8
-#define GEN6_BORDER_COLOR_DW0_R__MASK                          0x000000ff
-#define GEN6_BORDER_COLOR_DW0_R__SHIFT                         0
-
-
-
-
-
-#define GEN6_BORDER_COLOR_DW5_G__MASK                          0xffff0000
-#define GEN6_BORDER_COLOR_DW5_G__SHIFT                         16
-#define GEN6_BORDER_COLOR_DW5_R__MASK                          0x0000ffff
-#define GEN6_BORDER_COLOR_DW5_R__SHIFT                         0
-
-#define GEN6_BORDER_COLOR_DW6_A__MASK                          0xffff0000
-#define GEN6_BORDER_COLOR_DW6_A__SHIFT                         16
-#define GEN6_BORDER_COLOR_DW6_B__MASK                          0x0000ffff
-#define GEN6_BORDER_COLOR_DW6_B__SHIFT                         0
-
-#define GEN6_BORDER_COLOR_DW7_G__MASK                          0xffff0000
-#define GEN6_BORDER_COLOR_DW7_G__SHIFT                         16
-#define GEN6_BORDER_COLOR_DW7_R__MASK                          0x0000ffff
-#define GEN6_BORDER_COLOR_DW7_R__SHIFT                         0
-
-#define GEN6_BORDER_COLOR_DW8_A__MASK                          0xffff0000
-#define GEN6_BORDER_COLOR_DW8_A__SHIFT                         16
-#define GEN6_BORDER_COLOR_DW8_B__MASK                          0x0000ffff
-#define GEN6_BORDER_COLOR_DW8_B__SHIFT                         0
-
-#define GEN6_BORDER_COLOR_DW9_G__MASK                          0xffff0000
-#define GEN6_BORDER_COLOR_DW9_G__SHIFT                         16
-#define GEN6_BORDER_COLOR_DW9_R__MASK                          0x0000ffff
-#define GEN6_BORDER_COLOR_DW9_R__SHIFT                         0
-
-#define GEN6_BORDER_COLOR_DW10_A__MASK                         0xffff0000
-#define GEN6_BORDER_COLOR_DW10_A__SHIFT                                16
-#define GEN6_BORDER_COLOR_DW10_B__MASK                         0x0000ffff
-#define GEN6_BORDER_COLOR_DW10_B__SHIFT                                0
-
-#define GEN6_BORDER_COLOR_DW11_A__MASK                         0xff000000
-#define GEN6_BORDER_COLOR_DW11_A__SHIFT                                24
-#define GEN6_BORDER_COLOR_DW11_B__MASK                         0x00ff0000
-#define GEN6_BORDER_COLOR_DW11_B__SHIFT                                16
-#define GEN6_BORDER_COLOR_DW11_G__MASK                         0x0000ff00
-#define GEN6_BORDER_COLOR_DW11_G__SHIFT                                8
-#define GEN6_BORDER_COLOR_DW11_R__MASK                         0x000000ff
-#define GEN6_BORDER_COLOR_DW11_R__SHIFT                                0
-
-
-
-
-
-
-
-
-#define GEN6_SAMPLER_STATE__SIZE                               4
-
-#define GEN6_SAMPLER_DW0_DISABLE                               (0x1 << 31)
-#define GEN7_SAMPLER_DW0_BORDER_COLOR_MODE__MASK               0x20000000
-#define GEN7_SAMPLER_DW0_BORDER_COLOR_MODE__SHIFT              29
-#define GEN7_SAMPLER_DW0_BORDER_COLOR_MODE_DX10_OGL            (0x0 << 29)
-#define GEN7_SAMPLER_DW0_BORDER_COLOR_MODE_DX9                 (0x1 << 29)
-#define GEN6_SAMPLER_DW0_LOD_PRECLAMP_ENABLE                   (0x1 << 28)
-#define GEN6_SAMPLER_DW0_MIN_MAG_NOT_EQUAL                     (0x1 << 27)
-#define GEN8_SAMPLER_DW0_LOD_PRECLAMP_MODE__MASK               0x18000000
-#define GEN8_SAMPLER_DW0_LOD_PRECLAMP_MODE__SHIFT              27
-#define GEN8_SAMPLER_DW0_LOD_PRECLAMP_MODE_NONE                        (0x0 << 27)
-#define GEN8_SAMPLER_DW0_LOD_PRECLAMP_MODE_OGL                 (0x2 << 27)
-#define GEN6_SAMPLER_DW0_BASE_LOD__MASK                                0x07c00000
-#define GEN6_SAMPLER_DW0_BASE_LOD__SHIFT                       22
-#define GEN6_SAMPLER_DW0_BASE_LOD__RADIX                       1
-#define GEN6_SAMPLER_DW0_MIP_FILTER__MASK                      0x00300000
-#define GEN6_SAMPLER_DW0_MIP_FILTER__SHIFT                     20
-#define GEN6_SAMPLER_DW0_MAG_FILTER__MASK                      0x000e0000
-#define GEN6_SAMPLER_DW0_MAG_FILTER__SHIFT                     17
-#define GEN6_SAMPLER_DW0_MIN_FILTER__MASK                      0x0001c000
-#define GEN6_SAMPLER_DW0_MIN_FILTER__SHIFT                     14
-#define GEN6_SAMPLER_DW0_LOD_BIAS__MASK                                0x00003ff8
-#define GEN6_SAMPLER_DW0_LOD_BIAS__SHIFT                       3
-#define GEN6_SAMPLER_DW0_LOD_BIAS__RADIX                       6
-#define GEN6_SAMPLER_DW0_SHADOW_FUNC__MASK                     0x00000007
-#define GEN6_SAMPLER_DW0_SHADOW_FUNC__SHIFT                    0
-#define GEN7_SAMPLER_DW0_LOD_BIAS__MASK                                0x00003ffe
-#define GEN7_SAMPLER_DW0_LOD_BIAS__SHIFT                       1
-#define GEN7_SAMPLER_DW0_LOD_BIAS__RADIX                       8
-#define GEN7_SAMPLER_DW0_ANISO_ALGO__MASK                      0x00000001
-#define GEN7_SAMPLER_DW0_ANISO_ALGO__SHIFT                     0
-#define GEN7_SAMPLER_DW0_ANISO_ALGO_LEGACY                     0x0
-#define GEN7_SAMPLER_DW0_ANISO_ALGO_EWA                                0x1
-
-#define GEN6_SAMPLER_DW1_MIN_LOD__MASK                         0xffc00000
-#define GEN6_SAMPLER_DW1_MIN_LOD__SHIFT                                22
-#define GEN6_SAMPLER_DW1_MIN_LOD__RADIX                                6
-#define GEN6_SAMPLER_DW1_MAX_LOD__MASK                         0x003ff000
-#define GEN6_SAMPLER_DW1_MAX_LOD__SHIFT                                12
-#define GEN6_SAMPLER_DW1_MAX_LOD__RADIX                                6
-#define GEN6_SAMPLER_DW1_CUBECTRLMODE__MASK                    0x00000200
-#define GEN6_SAMPLER_DW1_CUBECTRLMODE__SHIFT                   9
-#define GEN6_SAMPLER_DW1_CUBECTRLMODE_PROGRAMMED               (0x0 << 9)
-#define GEN6_SAMPLER_DW1_CUBECTRLMODE_OVERRIDE                 (0x1 << 9)
-#define GEN6_SAMPLER_DW1_U_WRAP__MASK                          0x000001c0
-#define GEN6_SAMPLER_DW1_U_WRAP__SHIFT                         6
-#define GEN6_SAMPLER_DW1_V_WRAP__MASK                          0x00000038
-#define GEN6_SAMPLER_DW1_V_WRAP__SHIFT                         3
-#define GEN6_SAMPLER_DW1_R_WRAP__MASK                          0x00000007
-#define GEN6_SAMPLER_DW1_R_WRAP__SHIFT                         0
-
-#define GEN7_SAMPLER_DW1_MIN_LOD__MASK                         0xfff00000
-#define GEN7_SAMPLER_DW1_MIN_LOD__SHIFT                                20
-#define GEN7_SAMPLER_DW1_MIN_LOD__RADIX                                8
-#define GEN7_SAMPLER_DW1_MAX_LOD__MASK                         0x000fff00
-#define GEN7_SAMPLER_DW1_MAX_LOD__SHIFT                                8
-#define GEN7_SAMPLER_DW1_MAX_LOD__RADIX                                8
-#define GEN8_SAMPLER_DW1_CHROMAKEY_ENABLE                      (0x1 << 7)
-#define GEN8_SAMPLER_DW1_CHROMAKEY_INDEX__MASK                 0x00000060
-#define GEN8_SAMPLER_DW1_CHROMAKEY_INDEX__SHIFT                        5
-#define GEN8_SAMPLER_DW1_CHROMAKEY_MODE__MASK                  0x00000010
-#define GEN8_SAMPLER_DW1_CHROMAKEY_MODE__SHIFT                 4
-#define GEN7_SAMPLER_DW1_SHADOW_FUNC__MASK                     0x0000000e
-#define GEN7_SAMPLER_DW1_SHADOW_FUNC__SHIFT                    1
-#define GEN7_SAMPLER_DW1_CUBECTRLMODE__MASK                    0x00000001
-#define GEN7_SAMPLER_DW1_CUBECTRLMODE__SHIFT                   0
-#define GEN7_SAMPLER_DW1_CUBECTRLMODE_PROGRAMMED               0x0
-#define GEN7_SAMPLER_DW1_CUBECTRLMODE_OVERRIDE                 0x1
-
-#define GEN6_SAMPLER_DW2_BORDER_COLOR_ADDR__MASK               0xffffffe0
-#define GEN6_SAMPLER_DW2_BORDER_COLOR_ADDR__SHIFT              5
-#define GEN6_SAMPLER_DW2_BORDER_COLOR_ADDR__SHR                        5
-
-#define GEN8_SAMPLER_DW2_INDIRECT_STATE_ADDR__MASK             0x00ffffc0
-#define GEN8_SAMPLER_DW2_INDIRECT_STATE_ADDR__SHIFT            6
-#define GEN8_SAMPLER_DW2_INDIRECT_STATE_ADDR__SHR              6
-#define GEN8_SAMPLER_DW2_LOD_CLAMP_MAG_MODE                    (0x1 << 0)
-
-#define GEN6_SAMPLER_DW3_CHROMAKEY_ENABLE                      (0x1 << 25)
-#define GEN6_SAMPLER_DW3_CHROMAKEY_INDEX__MASK                 0x01800000
-#define GEN6_SAMPLER_DW3_CHROMAKEY_INDEX__SHIFT                        23
-#define GEN6_SAMPLER_DW3_CHROMAKEY_MODE__MASK                  0x00400000
-#define GEN6_SAMPLER_DW3_CHROMAKEY_MODE__SHIFT                 22
-#define GEN6_SAMPLER_DW3_MAX_ANISO__MASK                       0x00380000
-#define GEN6_SAMPLER_DW3_MAX_ANISO__SHIFT                      19
-#define GEN6_SAMPLER_DW3_U_MAG_ROUND                           (0x1 << 18)
-#define GEN6_SAMPLER_DW3_U_MIN_ROUND                           (0x1 << 17)
-#define GEN6_SAMPLER_DW3_V_MAG_ROUND                           (0x1 << 16)
-#define GEN6_SAMPLER_DW3_V_MIN_ROUND                           (0x1 << 15)
-#define GEN6_SAMPLER_DW3_R_MAG_ROUND                           (0x1 << 14)
-#define GEN6_SAMPLER_DW3_R_MIN_ROUND                           (0x1 << 13)
-#define GEN7_SAMPLER_DW3_TRIQUAL__MASK                         0x00001800
-#define GEN7_SAMPLER_DW3_TRIQUAL__SHIFT                                11
-#define GEN7_SAMPLER_DW3_TRIQUAL_FULL                          (0x0 << 11)
-#define GEN75_SAMPLER_DW3_TRIQUAL_HIGH                         (0x1 << 11)
-#define GEN7_SAMPLER_DW3_TRIQUAL_MED                           (0x2 << 11)
-#define GEN7_SAMPLER_DW3_TRIQUAL_LOW                           (0x3 << 11)
-#define GEN7_SAMPLER_DW3_NON_NORMALIZED_COORD                  (0x1 << 10)
-#define GEN7_SAMPLER_DW3_U_WRAP__MASK                          0x000001c0
-#define GEN7_SAMPLER_DW3_U_WRAP__SHIFT                         6
-#define GEN7_SAMPLER_DW3_V_WRAP__MASK                          0x00000038
-#define GEN7_SAMPLER_DW3_V_WRAP__SHIFT                         3
-#define GEN7_SAMPLER_DW3_R_WRAP__MASK                          0x00000007
-#define GEN7_SAMPLER_DW3_R_WRAP__SHIFT                         0
-#define GEN6_SAMPLER_DW3_NON_NORMALIZED_COORD                  (0x1 << 0)
-
-
-#endif /* GEN_RENDER_DYNAMIC_XML */
diff --git a/src/gallium/drivers/ilo/genhw/gen_render_media.xml.h b/src/gallium/drivers/ilo/genhw/gen_render_media.xml.h
deleted file mode 100644 (file)
index 2476002..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-#ifndef GEN_RENDER_MEDIA_XML
-#define GEN_RENDER_MEDIA_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-#define GEN6_INTERFACE_DESCRIPTOR_DATA__SIZE                   8
-
-#define GEN6_IDRT_DW0_KERNEL_ADDR__MASK                                0xffffffc0
-#define GEN6_IDRT_DW0_KERNEL_ADDR__SHIFT                       6
-#define GEN6_IDRT_DW0_KERNEL_ADDR__SHR                         6
-
-#define GEN6_IDRT_DW1_SPF                                      (0x1 << 18)
-#define GEN6_IDRT_DW1_PRIORITY_HIGH                            (0x1 << 17)
-#define GEN6_IDRT_DW1_FP_MODE_ALT                              (0x1 << 16)
-#define GEN6_IDRT_DW1_ILLEGAL_CODE_EXCEPTION                   (0x1 << 13)
-#define GEN6_IDRT_DW1_MASK_STACK_EXCEPTION                     (0x1 << 11)
-#define GEN6_IDRT_DW1_SOFTWARE_EXCEPTION                       (0x1 << 7)
-
-#define GEN6_IDRT_DW2_SAMPLER_COUNT__MASK                      0x0000001c
-#define GEN6_IDRT_DW2_SAMPLER_COUNT__SHIFT                     2
-#define GEN6_IDRT_DW2_SAMPLER_ADDR__MASK                       0xffffffe0
-#define GEN6_IDRT_DW2_SAMPLER_ADDR__SHIFT                      5
-#define GEN6_IDRT_DW2_SAMPLER_ADDR__SHR                                5
-
-#define GEN6_IDRT_DW3_BINDING_TABLE_SIZE__MASK                 0x0000001f
-#define GEN6_IDRT_DW3_BINDING_TABLE_SIZE__SHIFT                        0
-
-#define GEN6_IDRT_DW4_CURBE_READ_LEN__MASK                     0xffff0000
-#define GEN6_IDRT_DW4_CURBE_READ_LEN__SHIFT                    16
-#define GEN6_IDRT_DW4_CURBE_READ_OFFSET__MASK                  0x0000ffff
-#define GEN6_IDRT_DW4_CURBE_READ_OFFSET__SHIFT                 0
-
-#define GEN6_IDRT_DW5_BARRIER_ID__MASK                         0x0000000f
-#define GEN6_IDRT_DW5_BARRIER_ID__SHIFT                                0
-
-#define GEN7_IDRT_DW5_BARRIER_RETURN_GRF__MASK                 0xff000000
-#define GEN7_IDRT_DW5_BARRIER_RETURN_GRF__SHIFT                        24
-#define GEN7_IDRT_DW5_ROUNDING_MODE__MASK                      0x00c00000
-#define GEN7_IDRT_DW5_ROUNDING_MODE__SHIFT                     22
-#define GEN7_IDRT_DW5_ROUNDING_MODE_RTNE                       (0x0 << 22)
-#define GEN7_IDRT_DW5_ROUNDING_MODE_RU                         (0x1 << 22)
-#define GEN7_IDRT_DW5_ROUNDING_MODE_RD                         (0x2 << 22)
-#define GEN7_IDRT_DW5_ROUNDING_MODE_RTZ                                (0x3 << 22)
-#define GEN7_IDRT_DW5_BARRIER_ENABLE                           (0x1 << 21)
-#define GEN7_IDRT_DW5_SLM_SIZE__MASK                           0x001f0000
-#define GEN7_IDRT_DW5_SLM_SIZE__SHIFT                          16
-#define GEN7_IDRT_DW5_BARRIER_RETURN_BYTE__MASK                        0x0000ff00
-#define GEN7_IDRT_DW5_BARRIER_RETURN_BYTE__SHIFT               8
-#define GEN7_IDRT_DW5_THREAD_GROUP_SIZE__MASK                  0x000000ff
-#define GEN7_IDRT_DW5_THREAD_GROUP_SIZE__SHIFT                 0
-
-#define GEN75_IDRT_DW6_CROSS_THREAD_CURBE_READ_LEN__MASK       0x000000ff
-#define GEN75_IDRT_DW6_CROSS_THREAD_CURBE_READ_LEN__SHIFT      0
-
-
-
-#define GEN8_IDRT_DW0_KERNEL_ADDR__MASK                                0xffffffc0
-#define GEN8_IDRT_DW0_KERNEL_ADDR__SHIFT                       6
-#define GEN8_IDRT_DW0_KERNEL_ADDR__SHR                         6
-
-
-#define GEN8_IDRT_DW2_THREAD_PREEMPTION_DISABLE                        (0x1 << 20)
-#define GEN8_IDRT_DW2_DENORM__MASK                             0x00080000
-#define GEN8_IDRT_DW2_DENORM__SHIFT                            19
-#define GEN8_IDRT_DW2_DENORM_FTZ                               (0x0 << 19)
-#define GEN8_IDRT_DW2_DENORM_RET                               (0x1 << 19)
-#define GEN8_IDRT_DW2_SPF                                      (0x1 << 18)
-#define GEN8_IDRT_DW2_PRIORITY_HIGH                            (0x1 << 17)
-#define GEN8_IDRT_DW2_FP_MODE_ALT                              (0x1 << 16)
-#define GEN8_IDRT_DW2_ILLEGAL_CODE_EXCEPTION                   (0x1 << 13)
-#define GEN8_IDRT_DW2_MASK_STACK_EXCEPTION                     (0x1 << 11)
-#define GEN8_IDRT_DW2_SOFTWARE_EXCEPTION                       (0x1 << 7)
-
-#define GEN8_IDRT_DW3_SAMPLER_COUNT__MASK                      0x0000001c
-#define GEN8_IDRT_DW3_SAMPLER_COUNT__SHIFT                     2
-#define GEN8_IDRT_DW3_SAMPLER_ADDR__MASK                       0xffffffe0
-#define GEN8_IDRT_DW3_SAMPLER_ADDR__SHIFT                      5
-#define GEN8_IDRT_DW3_SAMPLER_ADDR__SHR                                5
-
-#define GEN8_IDRT_DW4_BINDING_TABLE_SIZE__MASK                 0x0000001f
-#define GEN8_IDRT_DW4_BINDING_TABLE_SIZE__SHIFT                        0
-
-#define GEN8_IDRT_DW5_CURBE_READ_LEN__MASK                     0xffff0000
-#define GEN8_IDRT_DW5_CURBE_READ_LEN__SHIFT                    16
-#define GEN8_IDRT_DW5_CURBE_READ_OFFSET__MASK                  0x0000ffff
-#define GEN8_IDRT_DW5_CURBE_READ_OFFSET__SHIFT                 0
-
-#define GEN8_IDRT_DW6_ROUNDING_MODE__MASK                      0x00c00000
-#define GEN8_IDRT_DW6_ROUNDING_MODE__SHIFT                     22
-#define GEN8_IDRT_DW6_ROUNDING_MODE_RTNE                       (0x0 << 22)
-#define GEN8_IDRT_DW6_ROUNDING_MODE_RU                         (0x1 << 22)
-#define GEN8_IDRT_DW6_ROUNDING_MODE_RD                         (0x2 << 22)
-#define GEN8_IDRT_DW6_ROUNDING_MODE_RTZ                                (0x3 << 22)
-#define GEN8_IDRT_DW6_BARRIER_ENABLE                           (0x1 << 21)
-#define GEN8_IDRT_DW6_SLM_SIZE__MASK                           0x001f0000
-#define GEN8_IDRT_DW6_SLM_SIZE__SHIFT                          16
-#define GEN8_IDRT_DW6_THREAD_GROUP_SIZE__MASK                  0x000003ff
-#define GEN8_IDRT_DW6_THREAD_GROUP_SIZE__SHIFT                 0
-
-#define GEN8_IDRT_DW7_CROSS_THREAD_CURBE_READ_LEN__MASK                0x000000ff
-#define GEN8_IDRT_DW7_CROSS_THREAD_CURBE_READ_LEN__SHIFT       0
-
-#define GEN6_MEDIA_VFE_STATE__SIZE                             9
-
-
-#define GEN6_VFE_DW1_SCRATCH_STACK_SIZE__MASK                  0x000000f0
-#define GEN6_VFE_DW1_SCRATCH_STACK_SIZE__SHIFT                 4
-#define GEN6_VFE_DW1_SCRATCH_SPACE_PER_THREAD__MASK            0x0000000f
-#define GEN6_VFE_DW1_SCRATCH_SPACE_PER_THREAD__SHIFT           0
-#define GEN6_VFE_DW1_SCRATCH_ADDR__MASK                                0xfffffc00
-#define GEN6_VFE_DW1_SCRATCH_ADDR__SHIFT                       10
-#define GEN6_VFE_DW1_SCRATCH_ADDR__SHR                         10
-
-#define GEN6_VFE_DW2_MAX_THREADS__MASK                         0xffff0000
-#define GEN6_VFE_DW2_MAX_THREADS__SHIFT                                16
-#define GEN6_VFE_DW2_URB_ENTRY_COUNT__MASK                     0x0000ff00
-#define GEN6_VFE_DW2_URB_ENTRY_COUNT__SHIFT                    8
-#define GEN6_VFE_DW2_RESET_GATEWAY_TIMER                       (0x1 << 7)
-#define GEN6_VFE_DW2_BYPASS_GATEWAY_CONTROL                    (0x1 << 6)
-#define GEN6_VFE_DW2_FAST_PREEMPT                              (0x1 << 5)
-#define GEN7_VFE_DW2_GATEWAY_MMIO__MASK                                0x00000018
-#define GEN7_VFE_DW2_GATEWAY_MMIO__SHIFT                       3
-#define GEN7_VFE_DW2_GATEWAY_MMIO_NONE                         (0x0 << 3)
-#define GEN7_VFE_DW2_GATEWAY_MMIO_ANY                          (0x2 << 3)
-#define GEN7_VFE_DW2_GPGPU_MODE                                        (0x1 << 2)
-
-#define GEN75_VFE_DW3_HALF_SLICE_DISABLE__MASK                 0x00000003
-#define GEN75_VFE_DW3_HALF_SLICE_DISABLE__SHIFT                        0
-#define GEN75_VFE_DW3_HALF_SLICE_DISABLE_NONE                  0x0
-#define GEN75_VFE_DW3_HALF_SLICE_DISABLE_23                    0x1
-#define GEN75_VFE_DW3_HALF_SLICE_DISABLE_123                   0x3
-
-#define GEN6_VFE_DW4_URB_ENTRY_SIZE__MASK                      0xffff0000
-#define GEN6_VFE_DW4_URB_ENTRY_SIZE__SHIFT                     16
-#define GEN6_VFE_DW4_CURBE_SIZE__MASK                          0x0000ffff
-#define GEN6_VFE_DW4_CURBE_SIZE__SHIFT                         0
-
-#define GEN6_VFE_DW5_SCOREBOARD_ENABLE                         (0x1 << 31)
-#define GEN6_VFE_DW5_SCOREBOARD_TYPE__MASK                     0x40000000
-#define GEN6_VFE_DW5_SCOREBOARD_TYPE__SHIFT                    30
-#define GEN6_VFE_DW5_SCOREBOARD_TYPE_STALLING                  (0x0 << 30)
-#define GEN6_VFE_DW5_SCOREBOARD_TYPE_NON_STALLING              (0x1 << 30)
-#define GEN6_VFE_DW5_SCOREBOARD_MASK__MASK                     0x000000ff
-#define GEN6_VFE_DW5_SCOREBOARD_MASK__SHIFT                    0
-
-
-
-
-#define GEN8_VFE_DW1_SCRATCH_STACK_SIZE__MASK                  0x000000f0
-#define GEN8_VFE_DW1_SCRATCH_STACK_SIZE__SHIFT                 4
-#define GEN8_VFE_DW1_SCRATCH_SPACE_PER_THREAD__MASK            0x0000000f
-#define GEN8_VFE_DW1_SCRATCH_SPACE_PER_THREAD__SHIFT           0
-#define GEN8_VFE_DW1_SCRATCH_ADDR__MASK                                0xfffffc00
-#define GEN8_VFE_DW1_SCRATCH_ADDR__SHIFT                       10
-#define GEN8_VFE_DW1_SCRATCH_ADDR__SHR                         10
-
-
-#define GEN8_VFE_DW3_MAX_THREADS__MASK                         0xffff0000
-#define GEN8_VFE_DW3_MAX_THREADS__SHIFT                                16
-#define GEN8_VFE_DW3_URB_ENTRY_COUNT__MASK                     0x0000ff00
-#define GEN8_VFE_DW3_URB_ENTRY_COUNT__SHIFT                    8
-#define GEN8_VFE_DW3_RESET_GATEWAY_TIMER                       (0x1 << 7)
-#define GEN8_VFE_DW3_BYPASS_GATEWAY_CONTROL                    (0x1 << 6)
-
-#define GEN8_VFE_DW4_HALF_SLICE_DISABLE__MASK                  0x00000003
-#define GEN8_VFE_DW4_HALF_SLICE_DISABLE__SHIFT                 0
-#define GEN8_VFE_DW4_HALF_SLICE_DISABLE_NONE                   0x0
-#define GEN8_VFE_DW4_HALF_SLICE_DISABLE_23                     0x1
-#define GEN8_VFE_DW4_HALF_SLICE_DISABLE_123                    0x3
-
-#define GEN8_VFE_DW5_URB_ENTRY_SIZE__MASK                      0xffff0000
-#define GEN8_VFE_DW5_URB_ENTRY_SIZE__SHIFT                     16
-#define GEN8_VFE_DW5_CURBE_SIZE__MASK                          0x0000ffff
-#define GEN8_VFE_DW5_CURBE_SIZE__SHIFT                         0
-
-#define GEN8_VFE_DW6_SCOREBOARD_ENABLE                         (0x1 << 31)
-#define GEN8_VFE_DW6_SCOREBOARD_TYPE__MASK                     0x40000000
-#define GEN8_VFE_DW6_SCOREBOARD_TYPE__SHIFT                    30
-#define GEN8_VFE_DW6_SCOREBOARD_TYPE_STALLING                  (0x0 << 30)
-#define GEN8_VFE_DW6_SCOREBOARD_TYPE_NON_STALLING              (0x1 << 30)
-#define GEN8_VFE_DW6_SCOREBOARD_MASK__MASK                     0x000000ff
-#define GEN8_VFE_DW6_SCOREBOARD_MASK__SHIFT                    0
-
-
-#define GEN6_MEDIA_CURBE_LOAD__SIZE                            4
-
-
-
-#define GEN6_CURBE_LOAD_DW2_LEN__MASK                          0x0001ffff
-#define GEN6_CURBE_LOAD_DW2_LEN__SHIFT                         0
-
-#define GEN6_CURBE_LOAD_DW3_ADDR__MASK                         0xffffffe0
-#define GEN6_CURBE_LOAD_DW3_ADDR__SHIFT                                5
-#define GEN6_CURBE_LOAD_DW3_ADDR__SHR                          5
-
-#define GEN6_MEDIA_INTERFACE_DESCRIPTOR_LOAD__SIZE             4
-
-
-
-#define GEN6_IDRT_LOAD_DW2_LEN__MASK                           0x0001ffff
-#define GEN6_IDRT_LOAD_DW2_LEN__SHIFT                          0
-
-#define GEN6_IDRT_LOAD_DW3_ADDR__MASK                          0xffffffe0
-#define GEN6_IDRT_LOAD_DW3_ADDR__SHIFT                         5
-#define GEN6_IDRT_LOAD_DW3_ADDR__SHR                           5
-
-#define GEN6_MEDIA_STATE_FLUSH__SIZE                           2
-
-
-#define GEN6_MEDIA_FLUSH_DW1_THREAD_COUNT_WATERMARK__MASK      0x00ff0000
-#define GEN6_MEDIA_FLUSH_DW1_THREAD_COUNT_WATERMARK__SHIFT     16
-#define GEN6_MEDIA_FLUSH_DW1_BARRIER_MASK__MASK                        0x0000ffff
-#define GEN6_MEDIA_FLUSH_DW1_BARRIER_MASK__SHIFT               0
-
-#define GEN7_MEDIA_FLUSH_DW1_DISABLE_PREEMPTION                        (0x1 << 8)
-#define GEN75_MEDIA_FLUSH_DW1_FLUSH_TO_GO                      (0x1 << 7)
-#define GEN7_MEDIA_FLUSH_DW1_WATERMARK_REQUIRED                        (0x1 << 6)
-#define GEN7_MEDIA_FLUSH_DW1_IDRT_OFFSET__MASK                 0x0000003f
-#define GEN7_MEDIA_FLUSH_DW1_IDRT_OFFSET__SHIFT                        0
-
-#define GEN7_GPGPU_WALKER__SIZE                                        15
-
-#define GEN7_GPGPU_DW0_INDIRECT_PARAM_ENABLE                   (0x1 << 10)
-#define GEN7_GPGPU_DW0_PREDICATE_ENABLE                                (0x1 << 8)
-
-#define GEN7_GPGPU_DW1_IDRT_OFFSET__MASK                       0x0000003f
-#define GEN7_GPGPU_DW1_IDRT_OFFSET__SHIFT                      0
-
-#define GEN7_GPGPU_DW2_SIMD_SIZE__MASK                         0xc0000000
-#define GEN7_GPGPU_DW2_SIMD_SIZE__SHIFT                                30
-#define GEN7_GPGPU_DW2_SIMD_SIZE_SIMD8                         (0x0 << 30)
-#define GEN7_GPGPU_DW2_SIMD_SIZE_SIMD16                                (0x1 << 30)
-#define GEN7_GPGPU_DW2_SIMD_SIZE_SIMD32                                (0x2 << 30)
-#define GEN7_GPGPU_DW2_THREAD_MAX_Z__MASK                      0x003f0000
-#define GEN7_GPGPU_DW2_THREAD_MAX_Z__SHIFT                     16
-#define GEN7_GPGPU_DW2_THREAD_MAX_Y__MASK                      0x00003f00
-#define GEN7_GPGPU_DW2_THREAD_MAX_Y__SHIFT                     8
-#define GEN7_GPGPU_DW2_THREAD_MAX_X__MASK                      0x0000003f
-#define GEN7_GPGPU_DW2_THREAD_MAX_X__SHIFT                     0
-
-
-
-
-
-
-
-
-
-
-#define GEN8_GPGPU_DW0_INDIRECT_PARAM_ENABLE                   (0x1 << 10)
-#define GEN8_GPGPU_DW0_PREDICATE_ENABLE                                (0x1 << 8)
-
-#define GEN8_GPGPU_DW1_IDRT_OFFSET__MASK                       0x0000003f
-#define GEN8_GPGPU_DW1_IDRT_OFFSET__SHIFT                      0
-
-#define GEN8_GPGPU_DW2_INDIRECT_LEN__MASK                      0x0001ffff
-#define GEN8_GPGPU_DW2_INDIRECT_LEN__SHIFT                     0
-
-#define GEN8_GPGPU_DW3_INDIRECT_ADDR__MASK                     0xffffffe0
-#define GEN8_GPGPU_DW3_INDIRECT_ADDR__SHIFT                    5
-#define GEN8_GPGPU_DW3_INDIRECT_ADDR__SHR                      5
-
-#define GEN8_GPGPU_DW4_SIMD_SIZE__MASK                         0xc0000000
-#define GEN8_GPGPU_DW4_SIMD_SIZE__SHIFT                                30
-#define GEN8_GPGPU_DW4_SIMD_SIZE_SIMD8                         (0x0 << 30)
-#define GEN8_GPGPU_DW4_SIMD_SIZE_SIMD16                                (0x1 << 30)
-#define GEN8_GPGPU_DW4_SIMD_SIZE_SIMD32                                (0x2 << 30)
-#define GEN8_GPGPU_DW4_THREAD_MAX_Z__MASK                      0x003f0000
-#define GEN8_GPGPU_DW4_THREAD_MAX_Z__SHIFT                     16
-#define GEN8_GPGPU_DW4_THREAD_MAX_Y__MASK                      0x00003f00
-#define GEN8_GPGPU_DW4_THREAD_MAX_Y__SHIFT                     8
-#define GEN8_GPGPU_DW4_THREAD_MAX_X__MASK                      0x0000003f
-#define GEN8_GPGPU_DW4_THREAD_MAX_X__SHIFT                     0
-
-
-
-
-
-
-
-
-
-
-
-
-#endif /* GEN_RENDER_MEDIA_XML */
diff --git a/src/gallium/drivers/ilo/genhw/gen_render_surface.xml.h b/src/gallium/drivers/ilo/genhw/gen_render_surface.xml.h
deleted file mode 100644 (file)
index c180450..0000000
+++ /dev/null
@@ -1,533 +0,0 @@
-#ifndef GEN_RENDER_SURFACE_XML
-#define GEN_RENDER_SURFACE_XML
-
-/* Autogenerated file, DO NOT EDIT manually!
-
-This file was generated by the rules-ng-ng headergen tool in this git repository:
-https://github.com/olvaffe/envytools/
-git clone https://github.com/olvaffe/envytools.git
-
-Copyright (C) 2014-2015 by the following authors:
-- Chia-I Wu <olvaffe@gmail.com> (olv)
-
-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.
-*/
-
-
-enum gen_surface_format {
-    GEN6_FORMAT_R32G32B32A32_FLOAT                           = 0x0,
-    GEN6_FORMAT_R32G32B32A32_SINT                            = 0x1,
-    GEN6_FORMAT_R32G32B32A32_UINT                            = 0x2,
-    GEN6_FORMAT_R32G32B32A32_UNORM                           = 0x3,
-    GEN6_FORMAT_R32G32B32A32_SNORM                           = 0x4,
-    GEN6_FORMAT_R64G64_FLOAT                                 = 0x5,
-    GEN6_FORMAT_R32G32B32X32_FLOAT                           = 0x6,
-    GEN6_FORMAT_R32G32B32A32_SSCALED                         = 0x7,
-    GEN6_FORMAT_R32G32B32A32_USCALED                         = 0x8,
-    GEN6_FORMAT_R32G32B32A32_SFIXED                          = 0x20,
-    GEN6_FORMAT_R64G64_PASSTHRU                                      = 0x21,
-    GEN6_FORMAT_R32G32B32_FLOAT                                      = 0x40,
-    GEN6_FORMAT_R32G32B32_SINT                               = 0x41,
-    GEN6_FORMAT_R32G32B32_UINT                               = 0x42,
-    GEN6_FORMAT_R32G32B32_UNORM                                      = 0x43,
-    GEN6_FORMAT_R32G32B32_SNORM                                      = 0x44,
-    GEN6_FORMAT_R32G32B32_SSCALED                            = 0x45,
-    GEN6_FORMAT_R32G32B32_USCALED                            = 0x46,
-    GEN6_FORMAT_R32G32B32_SFIXED                             = 0x50,
-    GEN6_FORMAT_R16G16B16A16_UNORM                           = 0x80,
-    GEN6_FORMAT_R16G16B16A16_SNORM                           = 0x81,
-    GEN6_FORMAT_R16G16B16A16_SINT                            = 0x82,
-    GEN6_FORMAT_R16G16B16A16_UINT                            = 0x83,
-    GEN6_FORMAT_R16G16B16A16_FLOAT                           = 0x84,
-    GEN6_FORMAT_R32G32_FLOAT                                 = 0x85,
-    GEN6_FORMAT_R32G32_SINT                                  = 0x86,
-    GEN6_FORMAT_R32G32_UINT                                  = 0x87,
-    GEN6_FORMAT_R32_FLOAT_X8X24_TYPELESS                     = 0x88,
-    GEN6_FORMAT_X32_TYPELESS_G8X24_UINT                              = 0x89,
-    GEN6_FORMAT_L32A32_FLOAT                                 = 0x8a,
-    GEN6_FORMAT_R32G32_UNORM                                 = 0x8b,
-    GEN6_FORMAT_R32G32_SNORM                                 = 0x8c,
-    GEN6_FORMAT_R64_FLOAT                                    = 0x8d,
-    GEN6_FORMAT_R16G16B16X16_UNORM                           = 0x8e,
-    GEN6_FORMAT_R16G16B16X16_FLOAT                           = 0x8f,
-    GEN6_FORMAT_A32X32_FLOAT                                 = 0x90,
-    GEN6_FORMAT_L32X32_FLOAT                                 = 0x91,
-    GEN6_FORMAT_I32X32_FLOAT                                 = 0x92,
-    GEN6_FORMAT_R16G16B16A16_SSCALED                         = 0x93,
-    GEN6_FORMAT_R16G16B16A16_USCALED                         = 0x94,
-    GEN6_FORMAT_R32G32_SSCALED                               = 0x95,
-    GEN6_FORMAT_R32G32_USCALED                               = 0x96,
-    GEN6_FORMAT_R32G32_SFIXED                                = 0xa0,
-    GEN6_FORMAT_R64_PASSTHRU                                 = 0xa1,
-    GEN6_FORMAT_B8G8R8A8_UNORM                               = 0xc0,
-    GEN6_FORMAT_B8G8R8A8_UNORM_SRGB                          = 0xc1,
-    GEN6_FORMAT_R10G10B10A2_UNORM                            = 0xc2,
-    GEN6_FORMAT_R10G10B10A2_UNORM_SRGB                       = 0xc3,
-    GEN6_FORMAT_R10G10B10A2_UINT                             = 0xc4,
-    GEN6_FORMAT_R10G10B10_SNORM_A2_UNORM                     = 0xc5,
-    GEN6_FORMAT_R8G8B8A8_UNORM                               = 0xc7,
-    GEN6_FORMAT_R8G8B8A8_UNORM_SRGB                          = 0xc8,
-    GEN6_FORMAT_R8G8B8A8_SNORM                               = 0xc9,
-    GEN6_FORMAT_R8G8B8A8_SINT                                = 0xca,
-    GEN6_FORMAT_R8G8B8A8_UINT                                = 0xcb,
-    GEN6_FORMAT_R16G16_UNORM                                 = 0xcc,
-    GEN6_FORMAT_R16G16_SNORM                                 = 0xcd,
-    GEN6_FORMAT_R16G16_SINT                                  = 0xce,
-    GEN6_FORMAT_R16G16_UINT                                  = 0xcf,
-    GEN6_FORMAT_R16G16_FLOAT                                 = 0xd0,
-    GEN6_FORMAT_B10G10R10A2_UNORM                            = 0xd1,
-    GEN6_FORMAT_B10G10R10A2_UNORM_SRGB                       = 0xd2,
-    GEN6_FORMAT_R11G11B10_FLOAT                                      = 0xd3,
-    GEN6_FORMAT_R32_SINT                                     = 0xd6,
-    GEN6_FORMAT_R32_UINT                                     = 0xd7,
-    GEN6_FORMAT_R32_FLOAT                                    = 0xd8,
-    GEN6_FORMAT_R24_UNORM_X8_TYPELESS                        = 0xd9,
-    GEN6_FORMAT_X24_TYPELESS_G8_UINT                         = 0xda,
-    GEN6_FORMAT_L32_UNORM                                    = 0xdd,
-    GEN6_FORMAT_A32_UNORM                                    = 0xde,
-    GEN6_FORMAT_L16A16_UNORM                                 = 0xdf,
-    GEN6_FORMAT_I24X8_UNORM                                  = 0xe0,
-    GEN6_FORMAT_L24X8_UNORM                                  = 0xe1,
-    GEN6_FORMAT_A24X8_UNORM                                  = 0xe2,
-    GEN6_FORMAT_I32_FLOAT                                    = 0xe3,
-    GEN6_FORMAT_L32_FLOAT                                    = 0xe4,
-    GEN6_FORMAT_A32_FLOAT                                    = 0xe5,
-    GEN6_FORMAT_X8B8_UNORM_G8R8_SNORM                        = 0xe6,
-    GEN6_FORMAT_A8X8_UNORM_G8R8_SNORM                        = 0xe7,
-    GEN6_FORMAT_B8X8_UNORM_G8R8_SNORM                        = 0xe8,
-    GEN6_FORMAT_B8G8R8X8_UNORM                               = 0xe9,
-    GEN6_FORMAT_B8G8R8X8_UNORM_SRGB                          = 0xea,
-    GEN6_FORMAT_R8G8B8X8_UNORM                               = 0xeb,
-    GEN6_FORMAT_R8G8B8X8_UNORM_SRGB                          = 0xec,
-    GEN6_FORMAT_R9G9B9E5_SHAREDEXP                           = 0xed,
-    GEN6_FORMAT_B10G10R10X2_UNORM                            = 0xee,
-    GEN6_FORMAT_L16A16_FLOAT                                 = 0xf0,
-    GEN6_FORMAT_R32_UNORM                                    = 0xf1,
-    GEN6_FORMAT_R32_SNORM                                    = 0xf2,
-    GEN6_FORMAT_R10G10B10X2_USCALED                          = 0xf3,
-    GEN6_FORMAT_R8G8B8A8_SSCALED                             = 0xf4,
-    GEN6_FORMAT_R8G8B8A8_USCALED                             = 0xf5,
-    GEN6_FORMAT_R16G16_SSCALED                               = 0xf6,
-    GEN6_FORMAT_R16G16_USCALED                               = 0xf7,
-    GEN6_FORMAT_R32_SSCALED                                  = 0xf8,
-    GEN6_FORMAT_R32_USCALED                                  = 0xf9,
-    GEN6_FORMAT_B5G6R5_UNORM                                 = 0x100,
-    GEN6_FORMAT_B5G6R5_UNORM_SRGB                            = 0x101,
-    GEN6_FORMAT_B5G5R5A1_UNORM                               = 0x102,
-    GEN6_FORMAT_B5G5R5A1_UNORM_SRGB                          = 0x103,
-    GEN6_FORMAT_B4G4R4A4_UNORM                               = 0x104,
-    GEN6_FORMAT_B4G4R4A4_UNORM_SRGB                          = 0x105,
-    GEN6_FORMAT_R8G8_UNORM                                   = 0x106,
-    GEN6_FORMAT_R8G8_SNORM                                   = 0x107,
-    GEN6_FORMAT_R8G8_SINT                                    = 0x108,
-    GEN6_FORMAT_R8G8_UINT                                    = 0x109,
-    GEN6_FORMAT_R16_UNORM                                    = 0x10a,
-    GEN6_FORMAT_R16_SNORM                                    = 0x10b,
-    GEN6_FORMAT_R16_SINT                                     = 0x10c,
-    GEN6_FORMAT_R16_UINT                                     = 0x10d,
-    GEN6_FORMAT_R16_FLOAT                                    = 0x10e,
-    GEN6_FORMAT_A8P8_UNORM_PALETTE0                          = 0x10f,
-    GEN6_FORMAT_A8P8_UNORM_PALETTE1                          = 0x110,
-    GEN6_FORMAT_I16_UNORM                                    = 0x111,
-    GEN6_FORMAT_L16_UNORM                                    = 0x112,
-    GEN6_FORMAT_A16_UNORM                                    = 0x113,
-    GEN6_FORMAT_L8A8_UNORM                                   = 0x114,
-    GEN6_FORMAT_I16_FLOAT                                    = 0x115,
-    GEN6_FORMAT_L16_FLOAT                                    = 0x116,
-    GEN6_FORMAT_A16_FLOAT                                    = 0x117,
-    GEN6_FORMAT_L8A8_UNORM_SRGB                                      = 0x118,
-    GEN6_FORMAT_R5G5_SNORM_B6_UNORM                          = 0x119,
-    GEN6_FORMAT_B5G5R5X1_UNORM                               = 0x11a,
-    GEN6_FORMAT_B5G5R5X1_UNORM_SRGB                          = 0x11b,
-    GEN6_FORMAT_R8G8_SSCALED                                 = 0x11c,
-    GEN6_FORMAT_R8G8_USCALED                                 = 0x11d,
-    GEN6_FORMAT_R16_SSCALED                                  = 0x11e,
-    GEN6_FORMAT_R16_USCALED                                  = 0x11f,
-    GEN6_FORMAT_P8A8_UNORM_PALETTE0                          = 0x122,
-    GEN6_FORMAT_P8A8_UNORM_PALETTE1                          = 0x123,
-    GEN6_FORMAT_A1B5G5R5_UNORM                               = 0x124,
-    GEN6_FORMAT_A4B4G4R4_UNORM                               = 0x125,
-    GEN6_FORMAT_L8A8_UINT                                    = 0x126,
-    GEN6_FORMAT_L8A8_SINT                                    = 0x127,
-    GEN6_FORMAT_R8_UNORM                                     = 0x140,
-    GEN6_FORMAT_R8_SNORM                                     = 0x141,
-    GEN6_FORMAT_R8_SINT                                              = 0x142,
-    GEN6_FORMAT_R8_UINT                                              = 0x143,
-    GEN6_FORMAT_A8_UNORM                                     = 0x144,
-    GEN6_FORMAT_I8_UNORM                                     = 0x145,
-    GEN6_FORMAT_L8_UNORM                                     = 0x146,
-    GEN6_FORMAT_P4A4_UNORM_PALETTE0                          = 0x147,
-    GEN6_FORMAT_A4P4_UNORM_PALETTE0                          = 0x148,
-    GEN6_FORMAT_R8_SSCALED                                   = 0x149,
-    GEN6_FORMAT_R8_USCALED                                   = 0x14a,
-    GEN6_FORMAT_P8_UNORM_PALETTE0                            = 0x14b,
-    GEN6_FORMAT_L8_UNORM_SRGB                                = 0x14c,
-    GEN6_FORMAT_P8_UNORM_PALETTE1                            = 0x14d,
-    GEN6_FORMAT_P4A4_UNORM_PALETTE1                          = 0x14e,
-    GEN6_FORMAT_A4P4_UNORM_PALETTE1                          = 0x14f,
-    GEN6_FORMAT_Y8_UNORM                                     = 0x150,
-    GEN6_FORMAT_L8_UINT                                              = 0x152,
-    GEN6_FORMAT_L8_SINT                                              = 0x153,
-    GEN6_FORMAT_I8_UINT                                              = 0x154,
-    GEN6_FORMAT_I8_SINT                                              = 0x155,
-    GEN6_FORMAT_DXT1_RGB_SRGB                                = 0x180,
-    GEN6_FORMAT_R1_UNORM                                     = 0x181,
-    GEN6_FORMAT_YCRCB_NORMAL                                 = 0x182,
-    GEN6_FORMAT_YCRCB_SWAPUVY                                = 0x183,
-    GEN6_FORMAT_P2_UNORM_PALETTE0                            = 0x184,
-    GEN6_FORMAT_P2_UNORM_PALETTE1                            = 0x185,
-    GEN6_FORMAT_BC1_UNORM                                    = 0x186,
-    GEN6_FORMAT_BC2_UNORM                                    = 0x187,
-    GEN6_FORMAT_BC3_UNORM                                    = 0x188,
-    GEN6_FORMAT_BC4_UNORM                                    = 0x189,
-    GEN6_FORMAT_BC5_UNORM                                    = 0x18a,
-    GEN6_FORMAT_BC1_UNORM_SRGB                               = 0x18b,
-    GEN6_FORMAT_BC2_UNORM_SRGB                               = 0x18c,
-    GEN6_FORMAT_BC3_UNORM_SRGB                               = 0x18d,
-    GEN6_FORMAT_MONO8                                        = 0x18e,
-    GEN6_FORMAT_YCRCB_SWAPUV                                 = 0x18f,
-    GEN6_FORMAT_YCRCB_SWAPY                                  = 0x190,
-    GEN6_FORMAT_DXT1_RGB                                     = 0x191,
-    GEN6_FORMAT_FXT1                                         = 0x192,
-    GEN6_FORMAT_R8G8B8_UNORM                                 = 0x193,
-    GEN6_FORMAT_R8G8B8_SNORM                                 = 0x194,
-    GEN6_FORMAT_R8G8B8_SSCALED                               = 0x195,
-    GEN6_FORMAT_R8G8B8_USCALED                               = 0x196,
-    GEN6_FORMAT_R64G64B64A64_FLOAT                           = 0x197,
-    GEN6_FORMAT_R64G64B64_FLOAT                                      = 0x198,
-    GEN6_FORMAT_BC4_SNORM                                    = 0x199,
-    GEN6_FORMAT_BC5_SNORM                                    = 0x19a,
-    GEN6_FORMAT_R16G16B16_FLOAT                                      = 0x19b,
-    GEN6_FORMAT_R16G16B16_UNORM                                      = 0x19c,
-    GEN6_FORMAT_R16G16B16_SNORM                                      = 0x19d,
-    GEN6_FORMAT_R16G16B16_SSCALED                            = 0x19e,
-    GEN6_FORMAT_R16G16B16_USCALED                            = 0x19f,
-    GEN6_FORMAT_BC6H_SF16                                    = 0x1a1,
-    GEN6_FORMAT_BC7_UNORM                                    = 0x1a2,
-    GEN6_FORMAT_BC7_UNORM_SRGB                               = 0x1a3,
-    GEN6_FORMAT_BC6H_UF16                                    = 0x1a4,
-    GEN6_FORMAT_PLANAR_420_8                                 = 0x1a5,
-    GEN6_FORMAT_R8G8B8_UNORM_SRGB                            = 0x1a8,
-    GEN6_FORMAT_ETC1_RGB8                                    = 0x1a9,
-    GEN6_FORMAT_ETC2_RGB8                                    = 0x1aa,
-    GEN6_FORMAT_EAC_R11                                              = 0x1ab,
-    GEN6_FORMAT_EAC_RG11                                     = 0x1ac,
-    GEN6_FORMAT_EAC_SIGNED_R11                               = 0x1ad,
-    GEN6_FORMAT_EAC_SIGNED_RG11                                      = 0x1ae,
-    GEN6_FORMAT_ETC2_SRGB8                                   = 0x1af,
-    GEN6_FORMAT_R16G16B16_UINT                               = 0x1b0,
-    GEN6_FORMAT_R16G16B16_SINT                               = 0x1b1,
-    GEN6_FORMAT_R32_SFIXED                                   = 0x1b2,
-    GEN6_FORMAT_R10G10B10A2_SNORM                            = 0x1b3,
-    GEN6_FORMAT_R10G10B10A2_USCALED                          = 0x1b4,
-    GEN6_FORMAT_R10G10B10A2_SSCALED                          = 0x1b5,
-    GEN6_FORMAT_R10G10B10A2_SINT                             = 0x1b6,
-    GEN6_FORMAT_B10G10R10A2_SNORM                            = 0x1b7,
-    GEN6_FORMAT_B10G10R10A2_USCALED                          = 0x1b8,
-    GEN6_FORMAT_B10G10R10A2_SSCALED                          = 0x1b9,
-    GEN6_FORMAT_B10G10R10A2_UINT                             = 0x1ba,
-    GEN6_FORMAT_B10G10R10A2_SINT                             = 0x1bb,
-    GEN6_FORMAT_R64G64B64A64_PASSTHRU                        = 0x1bc,
-    GEN6_FORMAT_R64G64B64_PASSTHRU                           = 0x1bd,
-    GEN6_FORMAT_ETC2_RGB8_PTA                                = 0x1c0,
-    GEN6_FORMAT_ETC2_SRGB8_PTA                               = 0x1c1,
-    GEN6_FORMAT_ETC2_EAC_RGBA8                               = 0x1c2,
-    GEN6_FORMAT_ETC2_EAC_SRGB8_A8                            = 0x1c3,
-    GEN6_FORMAT_R8G8B8_UINT                                  = 0x1c8,
-    GEN6_FORMAT_R8G8B8_SINT                                  = 0x1c9,
-    GEN6_FORMAT_RAW                                          = 0x1ff,
-};
-
-enum gen_surface_type {
-    GEN6_SURFTYPE_1D                                         = 0x0,
-    GEN6_SURFTYPE_2D                                         = 0x1,
-    GEN6_SURFTYPE_3D                                         = 0x2,
-    GEN6_SURFTYPE_CUBE                                       = 0x3,
-    GEN6_SURFTYPE_BUFFER                                     = 0x4,
-    GEN7_SURFTYPE_STRBUF                                     = 0x5,
-    GEN6_SURFTYPE_NULL                                       = 0x7,
-};
-
-enum gen_surface_tiling {
-    GEN6_TILING_NONE                                         = 0x0,
-    GEN8_TILING_W                                            = 0x1,
-    GEN6_TILING_X                                            = 0x2,
-    GEN6_TILING_Y                                            = 0x3,
-};
-
-enum gen_surface_clear_color {
-    GEN7_CLEAR_COLOR_ZERO                                    = 0x0,
-    GEN7_CLEAR_COLOR_ONE                                     = 0x1,
-};
-
-enum gen_surface_scs {
-    GEN75_SCS_ZERO                                           = 0x0,
-    GEN75_SCS_ONE                                            = 0x1,
-    GEN75_SCS_RED                                            = 0x4,
-    GEN75_SCS_GREEN                                          = 0x5,
-    GEN75_SCS_BLUE                                           = 0x6,
-    GEN75_SCS_ALPHA                                          = 0x7,
-};
-
-#define GEN6_SURFACE_STATE__SIZE                               16
-
-#define GEN6_SURFACE_DW0_TYPE__MASK                            0xe0000000
-#define GEN6_SURFACE_DW0_TYPE__SHIFT                           29
-#define GEN6_SURFACE_DW0_FORMAT__MASK                          0x07fc0000
-#define GEN6_SURFACE_DW0_FORMAT__SHIFT                         18
-#define GEN6_SURFACE_DW0_VSTRIDE                               (0x1 << 12)
-#define GEN6_SURFACE_DW0_VSTRIDE_OFFSET                                (0x1 << 11)
-#define GEN6_SURFACE_DW0_MIPLAYOUT__MASK                       0x00000400
-#define GEN6_SURFACE_DW0_MIPLAYOUT__SHIFT                      10
-#define GEN6_SURFACE_DW0_MIPLAYOUT_BELOW                       (0x0 << 10)
-#define GEN6_SURFACE_DW0_MIPLAYOUT_RIGHT                       (0x1 << 10)
-#define GEN6_SURFACE_DW0_CUBE_MAP_CORNER_MODE__MASK            0x00000200
-#define GEN6_SURFACE_DW0_CUBE_MAP_CORNER_MODE__SHIFT           9
-#define GEN6_SURFACE_DW0_CUBE_MAP_CORNER_MODE_REPLICATE                (0x0 << 9)
-#define GEN6_SURFACE_DW0_CUBE_MAP_CORNER_MODE_AVERAGE          (0x1 << 9)
-#define GEN6_SURFACE_DW0_RENDER_CACHE_RW                       (0x1 << 8)
-#define GEN6_SURFACE_DW0_MEDIA_BOUNDARY_PIXEL_MODE__MASK       0x000000c0
-#define GEN6_SURFACE_DW0_MEDIA_BOUNDARY_PIXEL_MODE__SHIFT      6
-#define GEN6_SURFACE_DW0_CUBE_FACE_ENABLES__MASK               0x0000003f
-#define GEN6_SURFACE_DW0_CUBE_FACE_ENABLES__SHIFT              0
-
-
-#define GEN6_SURFACE_DW2_HEIGHT__MASK                          0xfff80000
-#define GEN6_SURFACE_DW2_HEIGHT__SHIFT                         19
-#define GEN6_SURFACE_DW2_WIDTH__MASK                           0x0007ffc0
-#define GEN6_SURFACE_DW2_WIDTH__SHIFT                          6
-#define GEN6_SURFACE_DW2_MIP_COUNT_LOD__MASK                   0x0000003c
-#define GEN6_SURFACE_DW2_MIP_COUNT_LOD__SHIFT                  2
-#define GEN6_SURFACE_DW2_RTROTATE__MASK                                0x00000003
-#define GEN6_SURFACE_DW2_RTROTATE__SHIFT                       0
-#define GEN6_SURFACE_DW2_RTROTATE_0DEG                         0x0
-#define GEN6_SURFACE_DW2_RTROTATE_90DEG                                0x1
-#define GEN6_SURFACE_DW2_RTROTATE_270DEG                       0x3
-
-#define GEN6_SURFACE_DW3_DEPTH__MASK                           0xffe00000
-#define GEN6_SURFACE_DW3_DEPTH__SHIFT                          21
-#define GEN6_SURFACE_DW3_PITCH__MASK                           0x000ffff8
-#define GEN6_SURFACE_DW3_PITCH__SHIFT                          3
-#define GEN6_SURFACE_DW3_TILING__MASK                          0x00000003
-#define GEN6_SURFACE_DW3_TILING__SHIFT                         0
-
-#define GEN6_SURFACE_DW4_MIN_LOD__MASK                         0xf0000000
-#define GEN6_SURFACE_DW4_MIN_LOD__SHIFT                                28
-#define GEN6_SURFACE_DW4_MIN_ARRAY_ELEMENT__MASK               0x0ffe0000
-#define GEN6_SURFACE_DW4_MIN_ARRAY_ELEMENT__SHIFT              17
-#define GEN6_SURFACE_DW4_RT_VIEW_EXTENT__MASK                  0x0001ff00
-#define GEN6_SURFACE_DW4_RT_VIEW_EXTENT__SHIFT                 8
-#define GEN6_SURFACE_DW4_MULTISAMPLECOUNT__MASK                        0x00000070
-#define GEN6_SURFACE_DW4_MULTISAMPLECOUNT__SHIFT               4
-#define GEN6_SURFACE_DW4_MULTISAMPLECOUNT_1                    (0x0 << 4)
-#define GEN6_SURFACE_DW4_MULTISAMPLECOUNT_4                    (0x2 << 4)
-#define GEN6_SURFACE_DW4_MSPOS_INDEX__MASK                     0x00000007
-#define GEN6_SURFACE_DW4_MSPOS_INDEX__SHIFT                    0
-
-#define GEN6_SURFACE_DW5_X_OFFSET__MASK                                0xfe000000
-#define GEN6_SURFACE_DW5_X_OFFSET__SHIFT                       25
-#define GEN6_SURFACE_DW5_X_OFFSET__SHR                         2
-#define GEN6_SURFACE_DW5_VALIGN__MASK                          0x01000000
-#define GEN6_SURFACE_DW5_VALIGN__SHIFT                         24
-#define GEN6_SURFACE_DW5_VALIGN_2                              (0x0 << 24)
-#define GEN6_SURFACE_DW5_VALIGN_4                              (0x1 << 24)
-#define GEN6_SURFACE_DW5_Y_OFFSET__MASK                                0x00f00000
-#define GEN6_SURFACE_DW5_Y_OFFSET__SHIFT                       20
-#define GEN6_SURFACE_DW5_Y_OFFSET__SHR                         1
-#define GEN6_SURFACE_DW5_MOCS__MASK                            0x000f0000
-#define GEN6_SURFACE_DW5_MOCS__SHIFT                           16
-
-
-#define GEN7_SURFACE_DW0_TYPE__MASK                            0xe0000000
-#define GEN7_SURFACE_DW0_TYPE__SHIFT                           29
-#define GEN7_SURFACE_DW0_IS_ARRAY                              (0x1 << 28)
-#define GEN7_SURFACE_DW0_FORMAT__MASK                          0x07fc0000
-#define GEN7_SURFACE_DW0_FORMAT__SHIFT                         18
-#define GEN7_SURFACE_DW0_VALIGN__MASK                          0x00030000
-#define GEN7_SURFACE_DW0_VALIGN__SHIFT                         16
-#define GEN7_SURFACE_DW0_VALIGN_2                              (0x0 << 16)
-#define GEN7_SURFACE_DW0_VALIGN_4                              (0x1 << 16)
-#define GEN8_SURFACE_DW0_VALIGN_8                              (0x2 << 16)
-#define GEN8_SURFACE_DW0_VALIGN_16                             (0x3 << 16)
-#define GEN7_SURFACE_DW0_HALIGN__MASK                          0x00008000
-#define GEN7_SURFACE_DW0_HALIGN__SHIFT                         15
-#define GEN7_SURFACE_DW0_HALIGN_4                              (0x0 << 15)
-#define GEN7_SURFACE_DW0_HALIGN_8                              (0x1 << 15)
-#define GEN7_SURFACE_DW0_TILING__MASK                          0x00006000
-#define GEN7_SURFACE_DW0_TILING__SHIFT                         13
-#define GEN7_SURFACE_DW0_VSTRIDE                               (0x1 << 12)
-#define GEN7_SURFACE_DW0_VSTRIDE_OFFSET                                (0x1 << 11)
-#define GEN7_SURFACE_DW0_ARYSPC__MASK                          0x00000400
-#define GEN7_SURFACE_DW0_ARYSPC__SHIFT                         10
-#define GEN7_SURFACE_DW0_ARYSPC_FULL                           (0x0 << 10)
-#define GEN7_SURFACE_DW0_ARYSPC_LOD0                           (0x1 << 10)
-#define GEN8_SURFACE_DW0_HALIGN__MASK                          0x0000c000
-#define GEN8_SURFACE_DW0_HALIGN__SHIFT                         14
-#define GEN8_SURFACE_DW0_HALIGN_4                              (0x1 << 14)
-#define GEN8_SURFACE_DW0_HALIGN_8                              (0x2 << 14)
-#define GEN8_SURFACE_DW0_HALIGN_16                             (0x3 << 14)
-#define GEN8_SURFACE_DW0_TILING__MASK                          0x00003000
-#define GEN8_SURFACE_DW0_TILING__SHIFT                         12
-#define GEN8_SURFACE_DW0_VSTRIDE                               (0x1 << 11)
-#define GEN8_SURFACE_DW0_VSTRIDE_OFFSET                                (0x1 << 10)
-#define GEN8_SURFACE_DW0_SAMPLER_L2_BYPASS_DISABLE             (0x1 << 9)
-#define GEN7_SURFACE_DW0_RENDER_CACHE_RW                       (0x1 << 8)
-#define GEN7_SURFACE_DW0_MEDIA_BOUNDARY_PIXEL_MODE__MASK       0x000000c0
-#define GEN7_SURFACE_DW0_MEDIA_BOUNDARY_PIXEL_MODE__SHIFT      6
-#define GEN7_SURFACE_DW0_CUBE_FACE_ENABLES__MASK               0x0000003f
-#define GEN7_SURFACE_DW0_CUBE_FACE_ENABLES__SHIFT              0
-
-
-#define GEN8_SURFACE_DW1_MOCS__MASK                            0x7f000000
-#define GEN8_SURFACE_DW1_MOCS__SHIFT                           24
-#define GEN8_SURFACE_DW1_BASE_LOD__MASK                                0x00f80000
-#define GEN8_SURFACE_DW1_BASE_LOD__SHIFT                       19
-#define GEN8_SURFACE_DW1_QPITCH__MASK                          0x00007fff
-#define GEN8_SURFACE_DW1_QPITCH__SHIFT                         0
-#define GEN8_SURFACE_DW1_QPITCH__SHR                           2
-
-#define GEN7_SURFACE_DW2_HEIGHT__MASK                          0x3fff0000
-#define GEN7_SURFACE_DW2_HEIGHT__SHIFT                         16
-#define GEN7_SURFACE_DW2_WIDTH__MASK                           0x00003fff
-#define GEN7_SURFACE_DW2_WIDTH__SHIFT                          0
-
-#define GEN7_SURFACE_DW3_DEPTH__MASK                           0xffe00000
-#define GEN7_SURFACE_DW3_DEPTH__SHIFT                          21
-#define GEN75_SURFACE_DW3_INTEGER_SURFACE_FORMAT__MASK         0x001c0000
-#define GEN75_SURFACE_DW3_INTEGER_SURFACE_FORMAT__SHIFT                18
-#define GEN7_SURFACE_DW3_PITCH__MASK                           0x0003ffff
-#define GEN7_SURFACE_DW3_PITCH__SHIFT                          0
-
-#define GEN7_SURFACE_DW4_RTROTATE__MASK                                0x60000000
-#define GEN7_SURFACE_DW4_RTROTATE__SHIFT                       29
-#define GEN7_SURFACE_DW4_RTROTATE_0DEG                         (0x0 << 29)
-#define GEN7_SURFACE_DW4_RTROTATE_90DEG                                (0x1 << 29)
-#define GEN7_SURFACE_DW4_RTROTATE_270DEG                       (0x3 << 29)
-#define GEN7_SURFACE_DW4_MIN_ARRAY_ELEMENT__MASK               0x1ffc0000
-#define GEN7_SURFACE_DW4_MIN_ARRAY_ELEMENT__SHIFT              18
-#define GEN7_SURFACE_DW4_RT_VIEW_EXTENT__MASK                  0x0003ff80
-#define GEN7_SURFACE_DW4_RT_VIEW_EXTENT__SHIFT                 7
-#define GEN7_SURFACE_DW4_MSFMT__MASK                           0x00000040
-#define GEN7_SURFACE_DW4_MSFMT__SHIFT                          6
-#define GEN7_SURFACE_DW4_MSFMT_MSS                             (0x0 << 6)
-#define GEN7_SURFACE_DW4_MSFMT_DEPTH_STENCIL                   (0x1 << 6)
-#define GEN7_SURFACE_DW4_MULTISAMPLECOUNT__MASK                        0x00000038
-#define GEN7_SURFACE_DW4_MULTISAMPLECOUNT__SHIFT               3
-#define GEN7_SURFACE_DW4_MULTISAMPLECOUNT_1                    (0x0 << 3)
-#define GEN8_SURFACE_DW4_MULTISAMPLECOUNT_2                    (0x1 << 3)
-#define GEN7_SURFACE_DW4_MULTISAMPLECOUNT_4                    (0x2 << 3)
-#define GEN7_SURFACE_DW4_MULTISAMPLECOUNT_8                    (0x3 << 3)
-#define GEN7_SURFACE_DW4_MSPOS_INDEX__MASK                     0x00000007
-#define GEN7_SURFACE_DW4_MSPOS_INDEX__SHIFT                    0
-#define GEN7_SURFACE_DW4_MIN_ARRAY_ELEMENT_STRBUF__MASK                0x07ffffff
-#define GEN7_SURFACE_DW4_MIN_ARRAY_ELEMENT_STRBUF__SHIFT       0
-
-#define GEN7_SURFACE_DW5_X_OFFSET__MASK                                0xfe000000
-#define GEN7_SURFACE_DW5_X_OFFSET__SHIFT                       25
-#define GEN7_SURFACE_DW5_X_OFFSET__SHR                         2
-#define GEN7_SURFACE_DW5_Y_OFFSET__MASK                                0x00f00000
-#define GEN7_SURFACE_DW5_Y_OFFSET__SHIFT                       20
-#define GEN7_SURFACE_DW5_Y_OFFSET__SHR                         1
-#define GEN7_SURFACE_DW5_MOCS__MASK                            0x000f0000
-#define GEN7_SURFACE_DW5_MOCS__SHIFT                           16
-#define GEN8_SURFACE_DW5_Y_OFFSET__MASK                                0x00e00000
-#define GEN8_SURFACE_DW5_Y_OFFSET__SHIFT                       21
-#define GEN8_SURFACE_DW5_Y_OFFSET__SHR                         1
-#define GEN8_SURFACE_DW5_CUBE_EWA_DISABLE                      (0x1 << 20)
-#define GEN8_SURFACE_DW5_COHERENCY_TYPE__MASK                  0x00004000
-#define GEN8_SURFACE_DW5_COHERENCY_TYPE__SHIFT                 14
-#define GEN8_SURFACE_DW5_COHERENCY_TYPE_GPU                    (0x0 << 14)
-#define GEN8_SURFACE_DW5_COHERENCY_TYPE_IA                     (0x1 << 14)
-#define GEN7_SURFACE_DW5_MIN_LOD__MASK                         0x000000f0
-#define GEN7_SURFACE_DW5_MIN_LOD__SHIFT                                4
-#define GEN7_SURFACE_DW5_MIP_COUNT_LOD__MASK                   0x0000000f
-#define GEN7_SURFACE_DW5_MIP_COUNT_LOD__SHIFT                  0
-
-#define GEN8_SURFACE_DW6_SEPARATE_UV_ENABLE                    (0x1 << 31)
-#define GEN7_SURFACE_DW6_UV_X_OFFSET__MASK                     0x3fff0000
-#define GEN7_SURFACE_DW6_UV_X_OFFSET__SHIFT                    16
-#define GEN7_SURFACE_DW6_UV_Y_OFFSET__MASK                     0x00003fff
-#define GEN7_SURFACE_DW6_UV_Y_OFFSET__SHIFT                    0
-#define GEN7_SURFACE_DW6_APPEND_COUNTER_ADDR__MASK             0xffffffc0
-#define GEN7_SURFACE_DW6_APPEND_COUNTER_ADDR__SHIFT            6
-#define GEN7_SURFACE_DW6_APPEND_COUNTER_ADDR__SHR              6
-#define GEN7_SURFACE_DW6_MCS_ADDR__MASK                                0xfffff000
-#define GEN7_SURFACE_DW6_MCS_ADDR__SHIFT                       12
-#define GEN7_SURFACE_DW6_MCS_ADDR__SHR                         12
-#define GEN8_SURFACE_DW6_AUX_QPITCH__MASK                      0x7fff0000
-#define GEN8_SURFACE_DW6_AUX_QPITCH__SHIFT                     16
-#define GEN8_SURFACE_DW6_AUX_QPITCH__SHR                       2
-#define GEN7_SURFACE_DW6_AUX_PITCH__MASK                       0x00000ff8
-#define GEN7_SURFACE_DW6_AUX_PITCH__SHIFT                      3
-#define GEN7_SURFACE_DW6_AUX__MASK                             0x00000007
-#define GEN7_SURFACE_DW6_AUX__SHIFT                            0
-#define GEN7_SURFACE_DW6_AUX_NONE                              0x0
-#define GEN7_SURFACE_DW6_AUX_MCS                               0x1
-#define GEN7_SURFACE_DW6_AUX_APPEND                            0x2
-#define GEN8_SURFACE_DW6_AUX_HIZ                               0x3
-
-#define GEN7_SURFACE_DW7_CC_R__MASK                            0x80000000
-#define GEN7_SURFACE_DW7_CC_R__SHIFT                           31
-#define GEN7_SURFACE_DW7_CC_G__MASK                            0x40000000
-#define GEN7_SURFACE_DW7_CC_G__SHIFT                           30
-#define GEN7_SURFACE_DW7_CC_B__MASK                            0x20000000
-#define GEN7_SURFACE_DW7_CC_B__SHIFT                           29
-#define GEN7_SURFACE_DW7_CC_A__MASK                            0x10000000
-#define GEN7_SURFACE_DW7_CC_A__SHIFT                           28
-#define GEN75_SURFACE_DW7_SCS__MASK                            0x0fff0000
-#define GEN75_SURFACE_DW7_SCS__SHIFT                           16
-#define GEN75_SURFACE_DW7_SCS_R__MASK                          0x0e000000
-#define GEN75_SURFACE_DW7_SCS_R__SHIFT                         25
-#define GEN75_SURFACE_DW7_SCS_G__MASK                          0x01c00000
-#define GEN75_SURFACE_DW7_SCS_G__SHIFT                         22
-#define GEN75_SURFACE_DW7_SCS_B__MASK                          0x00380000
-#define GEN75_SURFACE_DW7_SCS_B__SHIFT                         19
-#define GEN75_SURFACE_DW7_SCS_A__MASK                          0x00070000
-#define GEN75_SURFACE_DW7_SCS_A__SHIFT                         16
-#define GEN7_SURFACE_DW7_RES_MIN_LOD__MASK                     0x00000fff
-#define GEN7_SURFACE_DW7_RES_MIN_LOD__SHIFT                    0
-
-
-
-
-#define GEN8_SURFACE_DW11_V_X_OFFSET__MASK                     0x3fff0000
-#define GEN8_SURFACE_DW11_V_X_OFFSET__SHIFT                    16
-#define GEN8_SURFACE_DW11_V_Y_OFFSET__MASK                     0x00003fff
-#define GEN8_SURFACE_DW11_V_Y_OFFSET__SHIFT                    0
-#define GEN8_SURFACE_DW11_AUX_ADDR_HI__MASK                    0xffffffff
-#define GEN8_SURFACE_DW11_AUX_ADDR_HI__SHIFT                   0
-
-
-
-
-
-#define GEN6_BINDING_TABLE_STATE__SIZE                         256
-
-#define GEN6_BINDING_TABLE_DW_ADDR__MASK                       0xffffffe0
-#define GEN6_BINDING_TABLE_DW_ADDR__SHIFT                      5
-#define GEN6_BINDING_TABLE_DW_ADDR__SHR                                5
-
-#define GEN8_BINDING_TABLE_DW_ADDR__MASK                       0xffffffc0
-#define GEN8_BINDING_TABLE_DW_ADDR__SHIFT                      6
-#define GEN8_BINDING_TABLE_DW_ADDR__SHR                                6
-
-
-#endif /* GEN_RENDER_SURFACE_XML */
diff --git a/src/gallium/drivers/ilo/genhw/genhw.h b/src/gallium/drivers/ilo/genhw/genhw.h
deleted file mode 100644 (file)
index 3a777a1..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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 GENHW_H
-#define GENHW_H
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <assert.h>
-
-#include "gen_regs.xml.h"
-#include "gen_mi.xml.h"
-#include "gen_blitter.xml.h"
-#include "gen_render.xml.h"
-#include "gen_render_surface.xml.h"
-#include "gen_render_dynamic.xml.h"
-#include "gen_render_3d.xml.h"
-#include "gen_render_media.xml.h"
-#include "gen_eu_isa.xml.h"
-#include "gen_eu_message.xml.h"
-
-#define GEN_MI_CMD(gen, op) (GEN6_MI_TYPE_MI | gen ## _MI_OPCODE_ ## op)
-#define GEN6_MI_CMD(op) GEN_MI_CMD(GEN6, op)
-#define GEN7_MI_CMD(op) GEN_MI_CMD(GEN7, op)
-
-#define GEN_BLITTER_CMD(gen, op) \
-   (GEN6_BLITTER_TYPE_BLITTER | gen ## _BLITTER_OPCODE_ ## op)
-#define GEN6_BLITTER_CMD(op) GEN_BLITTER_CMD(GEN6, op)
-
-#define GEN_RENDER_CMD(subtype, gen, op)  \
-   (GEN6_RENDER_TYPE_RENDER |             \
-    GEN6_RENDER_SUBTYPE_ ## subtype |     \
-    gen ## _RENDER_OPCODE_ ## op)
-#define GEN6_RENDER_CMD(subtype, op) GEN_RENDER_CMD(subtype, GEN6, op)
-#define GEN7_RENDER_CMD(subtype, op) GEN_RENDER_CMD(subtype, GEN7, op)
-#define GEN75_RENDER_CMD(subtype, op) GEN_RENDER_CMD(subtype, GEN75, op)
-#define GEN8_RENDER_CMD(subtype, op) GEN_RENDER_CMD(subtype, GEN8, op)
-
-#define GEN_EXTRACT(bits, field) (((bits) & field ## __MASK) >> field ## __SHIFT)
-#define GEN_SHIFT32(bits, field) gen_shift32(bits, field ## __MASK, field ## __SHIFT)
-
-static inline uint32_t
-gen_shift32(uint32_t bits, uint32_t mask, int shift)
-{
-   bits <<= shift;
-
-   assert((bits & mask) == bits);
-   return bits & mask;
-}
-
-static inline bool
-gen_is_snb(int devid)
-{
-   return (devid == 0x0102 || /* GT1 desktop */
-           devid == 0x0112 || /* GT2 desktop */
-           devid == 0x0122 || /* GT2_PLUS desktop */
-           devid == 0x0106 || /* GT1 mobile */
-           devid == 0x0116 || /* GT2 mobile */
-           devid == 0x0126 || /* GT2_PLUS mobile */
-           devid == 0x010a);  /* GT1 server */
-}
-
-static inline int
-gen_get_snb_gt(int devid)
-{
-   assert(gen_is_snb(devid));
-   return (devid & 0x30) ? 2 : 1;
-}
-
-static inline bool
-gen_is_ivb(int devid)
-{
-   return (devid == 0x0152 || /* GT1 desktop */
-           devid == 0x0162 || /* GT2 desktop */
-           devid == 0x0156 || /* GT1 mobile */
-           devid == 0x0166 || /* GT2 mobile */
-           devid == 0x015a || /* GT1 server */
-           devid == 0x016a);  /* GT2 server */
-}
-
-static inline int
-gen_get_ivb_gt(int devid)
-{
-   assert(gen_is_ivb(devid));
-   return (devid & 0x30) >> 4;
-}
-
-static inline bool
-gen_is_hsw(int devid)
-{
-   return (devid == 0x0402 || /* GT1 desktop */
-           devid == 0x0412 || /* GT2 desktop */
-           devid == 0x0422 || /* GT3 desktop */
-           devid == 0x0406 || /* GT1 mobile */
-           devid == 0x0416 || /* GT2 mobile */
-           devid == 0x0426 || /* GT2 mobile */
-           devid == 0x040a || /* GT1 server */
-           devid == 0x041a || /* GT2 server */
-           devid == 0x042a || /* GT3 server */
-           devid == 0x040b || /* GT1 reserved */
-           devid == 0x041b || /* GT2 reserved */
-           devid == 0x042b || /* GT3 reserved */
-           devid == 0x040e || /* GT1 reserved */
-           devid == 0x041e || /* GT2 reserved */
-           devid == 0x042e || /* GT3 reserved */
-           devid == 0x0c02 || /* SDV */
-           devid == 0x0c12 ||
-           devid == 0x0c22 ||
-           devid == 0x0c06 ||
-           devid == 0x0c16 ||
-           devid == 0x0c26 ||
-           devid == 0x0c0a ||
-           devid == 0x0c1a ||
-           devid == 0x0c2a ||
-           devid == 0x0c0b ||
-           devid == 0x0c1b ||
-           devid == 0x0c2b ||
-           devid == 0x0c0e ||
-           devid == 0x0c1e ||
-           devid == 0x0c2e ||
-           devid == 0x0a02 || /* ULT */
-           devid == 0x0a12 ||
-           devid == 0x0a22 ||
-           devid == 0x0a06 ||
-           devid == 0x0a16 ||
-           devid == 0x0a26 ||
-           devid == 0x0a0a ||
-           devid == 0x0a1a ||
-           devid == 0x0a2a ||
-           devid == 0x0a0b ||
-           devid == 0x0a1b ||
-           devid == 0x0a2b ||
-           devid == 0x0a0e ||
-           devid == 0x0a1e ||
-           devid == 0x0a2e ||
-           devid == 0x0d02 || /* CRW */
-           devid == 0x0d12 ||
-           devid == 0x0d22 ||
-           devid == 0x0d06 ||
-           devid == 0x0d16 ||
-           devid == 0x0d26 ||
-           devid == 0x0d0a ||
-           devid == 0x0d1a ||
-           devid == 0x0d2a ||
-           devid == 0x0d0b ||
-           devid == 0x0d1b ||
-           devid == 0x0d2b ||
-           devid == 0x0d0e ||
-           devid == 0x0d1e ||
-           devid == 0x0d2e);
-}
-
-static inline int
-gen_get_hsw_gt(int devid)
-{
-   assert(gen_is_hsw(devid));
-   return ((devid & 0x30) >> 4) + 1;
-}
-
-static inline bool
-gen_is_bdw(int devid)
-{
-   return (devid == 0x1602 || /* GT1 ULT */
-           devid == 0x1606 || /* GT1 ULT */
-           devid == 0x160a || /* GT1 server */
-           devid == 0x160b || /* GT1 Iris */
-           devid == 0x160d || /* GT1 workstation */
-           devid == 0x160e || /* GT1 ULX */
-           devid == 0x1612 || /* GT2 */
-           devid == 0x1616 ||
-           devid == 0x161a ||
-           devid == 0x161b ||
-           devid == 0x161d ||
-           devid == 0x161e ||
-           devid == 0x1622 || /* GT3 */
-           devid == 0x1626 ||
-           devid == 0x162a ||
-           devid == 0x162b ||
-           devid == 0x162d ||
-           devid == 0x162e);
-}
-
-static inline int
-gen_get_bdw_gt(int devid)
-{
-   assert(gen_is_bdw(devid));
-   return ((devid & 0x30) >> 4) + 1;
-}
-
-static inline bool
-gen_is_vlv(int devid)
-{
-   return (devid == 0x0f30 ||
-           devid == 0x0f31 ||
-           devid == 0x0f32 ||
-           devid == 0x0f33 ||
-           devid == 0x0157 ||
-           devid == 0x0155);
-}
-
-static inline bool
-gen_is_chv(int devid)
-{
-   return (devid == 0x22b0 ||
-           devid == 0x22b1 ||
-           devid == 0x22b2 ||
-           devid == 0x22b3);
-}
-
-static inline bool
-gen_is_atom(int devid)
-{
-   return (gen_is_vlv(devid) ||
-           gen_is_chv(devid));
-}
-
-static inline bool
-gen_is_desktop(int devid)
-{
-   assert(!gen_is_atom(devid));
-   return ((devid & 0xf) == 0x2);
-}
-
-static inline bool
-gen_is_mobile(int devid)
-{
-   assert(!gen_is_atom(devid));
-   return ((devid & 0xf) == 0x6);
-}
-
-static inline bool
-gen_is_server(int devid)
-{
-   assert(!gen_is_atom(devid));
-   return ((devid & 0xf) == 0xa);
-}
-
-#endif /* GENHW_H */
diff --git a/src/gallium/drivers/ilo/ilo_blit.c b/src/gallium/drivers/ilo/ilo_blit.c
deleted file mode 100644 (file)
index e2ba6aa..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_surface.h"
-
-#include "ilo_blitter.h"
-#include "ilo_context.h"
-#include "ilo_blit.h"
-
-static void
-ilo_resource_copy_region(struct pipe_context *pipe,
-                         struct pipe_resource *dst,
-                         unsigned dst_level,
-                         unsigned dstx, unsigned dsty, unsigned dstz,
-                         struct pipe_resource *src,
-                         unsigned src_level,
-                         const struct pipe_box *src_box)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-
-   if (ilo_blitter_blt_copy_resource(ilo->blitter,
-            dst, dst_level, dstx, dsty, dstz,
-            src, src_level, src_box))
-      return;
-
-   if (ilo_blitter_pipe_copy_resource(ilo->blitter,
-            dst, dst_level, dstx, dsty, dstz,
-            src, src_level, src_box))
-      return;
-
-   util_resource_copy_region(&ilo->base, dst, dst_level,
-         dstx, dsty, dstz, src, src_level, src_box);
-}
-
-static void
-ilo_clear(struct pipe_context *pipe,
-          unsigned buffers,
-          const union pipe_color_union *color,
-          double depth,
-          unsigned stencil)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_state_vector *vec = &ilo->state_vector;
-
-   if ((buffers & PIPE_CLEAR_DEPTHSTENCIL) && vec->fb.state.zsbuf) {
-      if (ilo_blitter_rectlist_clear_zs(ilo->blitter, vec->fb.state.zsbuf,
-               buffers & PIPE_CLEAR_DEPTHSTENCIL, depth, stencil))
-         buffers &= ~PIPE_CLEAR_DEPTHSTENCIL;
-
-      if (!buffers)
-         return;
-   }
-
-   ilo_blitter_pipe_clear_fb(ilo->blitter, buffers, color, depth, stencil);
-}
-
-static void
-ilo_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,
-                        bool render_condition_enabled)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-
-   if (!width || !height || dstx >= dst->width || dsty >= dst->height)
-      return;
-
-   if (dstx + width > dst->width)
-      width = dst->width - dstx;
-   if (dsty + height > dst->height)
-      height = dst->height - dsty;
-
-   if (ilo_blitter_blt_clear_rt(ilo->blitter,
-            dst, color, dstx, dsty, width, height))
-      return;
-
-   ilo_blitter_pipe_clear_rt(ilo->blitter,
-         dst, color, dstx, dsty, width, height);
-}
-
-static void
-ilo_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,
-                        bool render_condition_enabled)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-
-   if (!width || !height || dstx >= dst->width || dsty >= dst->height)
-      return;
-
-   if (dstx + width > dst->width)
-      width = dst->width - dstx;
-   if (dsty + height > dst->height)
-      height = dst->height - dsty;
-
-   if (ilo_blitter_blt_clear_zs(ilo->blitter,
-            dst, clear_flags, depth, stencil, dstx, dsty, width, height))
-      return;
-
-   ilo_blitter_pipe_clear_zs(ilo->blitter,
-         dst, clear_flags, depth, stencil, dstx, dsty, width, height);
-}
-
-static void
-ilo_blit(struct pipe_context *pipe, const struct pipe_blit_info *info)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-
-   ilo_blitter_pipe_blit(ilo->blitter, info);
-}
-
-static void
-ilo_flush_resource(struct pipe_context *pipe, struct pipe_resource *res)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   const unsigned flags = ILO_TEXTURE_CPU_READ |
-                          ILO_TEXTURE_BLT_READ |
-                          ILO_TEXTURE_RENDER_READ;
-
-   ilo_blit_resolve_resource(ilo, res, flags);
-}
-
-void
-ilo_blit_resolve_slices_for_hiz(struct ilo_context *ilo,
-                                struct pipe_resource *res, unsigned level,
-                                unsigned first_slice, unsigned num_slices,
-                                unsigned resolve_flags)
-{
-   struct ilo_texture *tex = ilo_texture(res);
-   const unsigned any_reader =
-      ILO_TEXTURE_RENDER_READ |
-      ILO_TEXTURE_BLT_READ |
-      ILO_TEXTURE_CPU_READ;
-   const unsigned other_writers =
-      ILO_TEXTURE_BLT_WRITE |
-      ILO_TEXTURE_CPU_WRITE;
-   unsigned i;
-
-   assert(tex->base.target != PIPE_BUFFER &&
-          ilo_image_can_enable_aux(&tex->image, level));
-
-   if (resolve_flags & ILO_TEXTURE_RENDER_WRITE) {
-      /*
-       * When ILO_TEXTURE_RENDER_WRITE is set, there can be no reader.  We
-       * need to perform a HiZ Buffer Resolve in case the resource was
-       * previously written by another writer, unless this is a clear.
-       *
-       * When slices have different clear values, we perform a Depth Buffer
-       * Resolve on all slices not sharing the clear value of the first slice.
-       * After resolving, those slices do not use 3DSTATE_CLEAR_PARAMS and can
-       * be made to have the same clear value as the first slice does.  This
-       * way,
-       *
-       *  - 3DSTATE_CLEAR_PARAMS can be set to the clear value of any slice
-       *  - we will not resolve unnecessarily next time this function is
-       *    called
-       *
-       * Since slice clear value is the value the slice is cleared to when
-       * ILO_TEXTURE_CLEAR is set, the bit needs to be unset.
-       */
-      assert(!(resolve_flags & (other_writers | any_reader)));
-
-      if (!(resolve_flags & ILO_TEXTURE_CLEAR)) {
-         const uint32_t first_clear_value = ilo_texture_get_slice(tex,
-               level, first_slice)->clear_value;
-         bool set_clear_value = false;
-
-         for (i = 0; i < num_slices; i++) {
-            const struct ilo_texture_slice *slice =
-               ilo_texture_get_slice(tex, level, first_slice + i);
-
-            if (slice->flags & other_writers) {
-               ilo_blitter_rectlist_resolve_hiz(ilo->blitter,
-                     res, level, first_slice + i);
-            } else if (slice->clear_value != first_clear_value &&
-                       (slice->flags & ILO_TEXTURE_RENDER_WRITE)) {
-               ilo_blitter_rectlist_resolve_z(ilo->blitter,
-                     res, level, first_slice + i);
-               set_clear_value = true;
-            }
-         }
-
-         if (set_clear_value) {
-            /* ILO_TEXTURE_CLEAR will be cleared later */
-            ilo_texture_set_slice_clear_value(tex, level,
-                  first_slice, num_slices, first_clear_value);
-         }
-      }
-   }
-   else if ((resolve_flags & any_reader) ||
-            ((resolve_flags & other_writers) &&
-             !(resolve_flags & ILO_TEXTURE_CLEAR))) {
-      /*
-       * When there is at least a reader or writer, we need to perform a
-       * Depth Buffer Resolve in case the resource was previously written
-       * by ILO_TEXTURE_RENDER_WRITE.
-       */
-      for (i = 0; i < num_slices; i++) {
-         const struct ilo_texture_slice *slice =
-            ilo_texture_get_slice(tex, level, first_slice + i);
-
-         if (slice->flags & ILO_TEXTURE_RENDER_WRITE) {
-            ilo_blitter_rectlist_resolve_z(ilo->blitter,
-                  &tex->base, level, first_slice + i);
-         }
-      }
-   }
-}
-
-/**
- * Initialize blit-related functions.
- */
-void
-ilo_init_blit_functions(struct ilo_context *ilo)
-{
-   ilo->base.resource_copy_region = ilo_resource_copy_region;
-   ilo->base.blit = ilo_blit;
-   ilo->base.flush_resource = ilo_flush_resource;
-
-   ilo->base.clear = ilo_clear;
-   ilo->base.clear_render_target = ilo_clear_render_target;
-   ilo->base.clear_depth_stencil = ilo_clear_depth_stencil;
-}
diff --git a/src/gallium/drivers/ilo/ilo_blit.h b/src/gallium/drivers/ilo/ilo_blit.h
deleted file mode 100644 (file)
index 008dd46..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BLIT_H
-#define ILO_BLIT_H
-
-#include "ilo_common.h"
-#include "ilo_context.h"
-#include "ilo_state.h"
-#include "ilo_resource.h"
-
-void
-ilo_blit_resolve_slices_for_hiz(struct ilo_context *ilo,
-                                struct pipe_resource *res, unsigned level,
-                                unsigned first_slice, unsigned num_slices,
-                                unsigned resolve_flags);
-
-static inline void
-ilo_blit_resolve_slices(struct ilo_context *ilo,
-                        struct pipe_resource *res, unsigned level,
-                        unsigned first_slice, unsigned num_slices,
-                        unsigned resolve_flags)
-{
-   struct ilo_texture *tex;
-   unsigned slice_mask;
-
-   if (res->target == PIPE_BUFFER)
-      return;
-
-   tex = ilo_texture(res);
-
-   /*
-    * This function is called frequently and we need to make it run faster.
-    * As it is only used to resolve HiZ right now, return early when there is
-    * no HiZ.
-    */
-   if (tex->image.aux.type != ILO_IMAGE_AUX_HIZ ||
-       !ilo_image_can_enable_aux(&tex->image, level))
-      return;
-
-   if (tex->image.aux.type == ILO_IMAGE_AUX_HIZ &&
-       ilo_image_can_enable_aux(&tex->image, level)) {
-      ilo_blit_resolve_slices_for_hiz(ilo, res, level,
-            first_slice, num_slices, resolve_flags);
-   }
-
-   slice_mask =
-      ILO_TEXTURE_CPU_WRITE |
-      ILO_TEXTURE_BLT_WRITE |
-      ILO_TEXTURE_RENDER_WRITE;
-   /* when there is a new writer, we may need to clear ILO_TEXTURE_CLEAR */
-   if (resolve_flags & slice_mask)
-      slice_mask |= ILO_TEXTURE_CLEAR;
-
-   ilo_texture_set_slice_flags(tex, level,
-         first_slice, num_slices, slice_mask, resolve_flags);
-}
-
-static inline void
-ilo_blit_resolve_resource(struct ilo_context *ilo,
-                          struct pipe_resource *res,
-                          unsigned resolve_flags)
-{
-   unsigned lv;
-
-   for (lv = 0; lv <= res->last_level; lv++) {
-      const unsigned num_slices = (res->target == PIPE_TEXTURE_3D) ?
-         u_minify(res->depth0, lv) : res->array_size;
-
-      ilo_blit_resolve_slices(ilo, res, lv, 0, num_slices, resolve_flags);
-   }
-}
-
-static inline void
-ilo_blit_resolve_surface(struct ilo_context *ilo,
-                         struct pipe_surface *surf,
-                         unsigned resolve_flags)
-{
-   if (surf->texture->target == PIPE_BUFFER)
-      return;
-
-   ilo_blit_resolve_slices(ilo, surf->texture,
-         surf->u.tex.level, surf->u.tex.first_layer,
-         surf->u.tex.last_layer - surf->u.tex.first_layer + 1,
-         resolve_flags);
-}
-
-static inline void
-ilo_blit_resolve_transfer(struct ilo_context *ilo,
-                          const struct pipe_transfer *xfer)
-{
-   unsigned resolve_flags = 0;
-
-   if (xfer->resource->target == PIPE_BUFFER)
-      return;
-
-   if (xfer->usage & PIPE_TRANSFER_READ)
-      resolve_flags |= ILO_TEXTURE_CPU_READ;
-   if (xfer->usage & PIPE_TRANSFER_WRITE)
-      resolve_flags |= ILO_TEXTURE_CPU_WRITE;
-
-   ilo_blit_resolve_slices(ilo, xfer->resource, xfer->level,
-         xfer->box.z, xfer->box.depth, resolve_flags);
-}
-
-static inline void
-ilo_blit_resolve_view(struct ilo_context *ilo,
-                      const struct pipe_sampler_view *view)
-{
-   const unsigned resolve_flags = ILO_TEXTURE_RENDER_READ;
-   unsigned lv;
-
-   if (view->texture->target == PIPE_BUFFER)
-      return;
-
-   for (lv = view->u.tex.first_level; lv <= view->u.tex.last_level; lv++) {
-      unsigned first_slice, num_slices;
-
-      if (view->texture->target == PIPE_TEXTURE_3D) {
-         first_slice = 0;
-         num_slices = u_minify(view->texture->depth0, lv);
-      }
-      else {
-         first_slice = view->u.tex.first_layer;
-         num_slices = view->u.tex.last_layer - view->u.tex.first_layer + 1;
-      }
-
-      ilo_blit_resolve_slices(ilo, view->texture,
-            lv, first_slice, num_slices, resolve_flags);
-   }
-}
-
-static inline void
-ilo_blit_resolve_framebuffer(struct ilo_context *ilo)
-{
-   struct ilo_state_vector *vec = &ilo->state_vector;
-   const struct pipe_framebuffer_state *fb = &vec->fb.state;
-   unsigned sh, i;
-
-   /* Not all bound views are sampled by the shaders.  How do we tell? */
-   for (sh = 0; sh < ARRAY_SIZE(vec->view); sh++) {
-      for (i = 0; i < vec->view[sh].count; i++) {
-         if (vec->view[sh].states[i])
-            ilo_blit_resolve_view(ilo, vec->view[sh].states[i]);
-      }
-   }
-
-   for (i = 0; i < fb->nr_cbufs; i++) {
-      struct pipe_surface *surf = fb->cbufs[i];
-      if (surf)
-         ilo_blit_resolve_surface(ilo, surf, ILO_TEXTURE_RENDER_WRITE);
-   }
-
-   if (fb->zsbuf)
-      ilo_blit_resolve_surface(ilo, fb->zsbuf, ILO_TEXTURE_RENDER_WRITE);
-}
-
-void
-ilo_init_blit_functions(struct ilo_context *ilo);
-
-#endif /* ILO_BLIT_H */
diff --git a/src/gallium/drivers/ilo/ilo_blitter.c b/src/gallium/drivers/ilo/ilo_blitter.c
deleted file mode 100644 (file)
index 1033592..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_blitter.h"
-
-#include "ilo_context.h"
-#include "ilo_blitter.h"
-
-static bool
-ilo_blitter_pipe_create(struct ilo_blitter *blitter)
-{
-   if (blitter->pipe_blitter)
-      return true;
-
-   blitter->pipe_blitter = util_blitter_create(&blitter->ilo->base);
-
-   return (blitter->pipe_blitter != NULL);
-}
-
-/**
- * Create a blitter.  Because the use of util_blitter, this must be called
- * after the context is initialized.
- */
-struct ilo_blitter *
-ilo_blitter_create(struct ilo_context *ilo)
-{
-   struct ilo_blitter *blitter;
-
-   blitter = CALLOC_STRUCT(ilo_blitter);
-   if (!blitter)
-      return NULL;
-
-   blitter->ilo = ilo;
-
-   if (!ilo_blitter_pipe_create(blitter)) {
-      FREE(blitter);
-      return NULL;
-   }
-
-   return blitter;
-}
-
-void
-ilo_blitter_destroy(struct ilo_blitter *blitter)
-{
-   if (blitter->pipe_blitter)
-      util_blitter_destroy(blitter->pipe_blitter);
-
-   FREE(blitter);
-}
diff --git a/src/gallium/drivers/ilo/ilo_blitter.h b/src/gallium/drivers/ilo/ilo_blitter.h
deleted file mode 100644 (file)
index 4eba848..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_BLITTER_H
-#define ILO_BLITTER_H
-
-#include "ilo_common.h"
-#include "ilo_state.h"
-
-enum ilo_blitter_uses {
-   ILO_BLITTER_USE_DSA           = 1 << 0,
-   ILO_BLITTER_USE_CC            = 1 << 1,
-   ILO_BLITTER_USE_VIEWPORT      = 1 << 2,
-   ILO_BLITTER_USE_FB_DEPTH      = 1 << 3,
-   ILO_BLITTER_USE_FB_STENCIL    = 1 << 4,
-};
-
-struct blitter_context;
-struct pipe_resource;
-struct pipe_surface;
-struct ilo_context;
-
-struct ilo_blitter {
-   struct ilo_context *ilo;
-   struct blitter_context *pipe_blitter;
-
-   /*
-    * A minimal context with the goal to send RECTLISTs down the pipeline.
-    */
-   enum ilo_state_raster_earlyz_op earlyz_op;
-   bool earlyz_stencil_clear;
-   uint32_t uses;
-
-   bool initialized;
-
-   float vertices[3][2];
-   struct gen6_3dprimitive_info draw_info;
-
-   uint32_t vf_data[4];
-   struct ilo_state_vf vf;
-
-   struct ilo_state_vs vs;
-   struct ilo_state_hs hs;
-   struct ilo_state_ds ds;
-   struct ilo_state_gs gs;
-
-   struct ilo_state_sol sol;
-
-   struct ilo_state_viewport vp;
-   uint32_t vp_data[20];
-
-   struct ilo_state_sbe sbe;
-   struct ilo_state_ps ps;
-   struct ilo_state_cc cc;
-
-   uint32_t depth_clear_value;
-
-   struct ilo_state_urb urb;
-
-   struct {
-      struct ilo_surface_cso dst;
-      unsigned width, height;
-      unsigned num_samples;
-
-      struct ilo_state_raster rs;
-   } fb;
-};
-
-struct ilo_blitter *
-ilo_blitter_create(struct ilo_context *ilo);
-
-void
-ilo_blitter_destroy(struct ilo_blitter *blitter);
-
-bool
-ilo_blitter_pipe_blit(struct ilo_blitter *blitter,
-                      const struct pipe_blit_info *info);
-
-bool
-ilo_blitter_pipe_copy_resource(struct ilo_blitter *blitter,
-                               struct pipe_resource *dst, unsigned dst_level,
-                               unsigned dst_x, unsigned dst_y, unsigned dst_z,
-                               struct pipe_resource *src, unsigned src_level,
-                               const struct pipe_box *src_box);
-
-bool
-ilo_blitter_pipe_clear_rt(struct ilo_blitter *blitter,
-                          struct pipe_surface *rt,
-                          const union pipe_color_union *color,
-                          unsigned x, unsigned y,
-                          unsigned width, unsigned height);
-
-bool
-ilo_blitter_pipe_clear_zs(struct ilo_blitter *blitter,
-                          struct pipe_surface *zs,
-                          unsigned clear_flags,
-                          double depth, unsigned stencil,
-                          unsigned x, unsigned y,
-                          unsigned width, unsigned height);
-
-bool
-ilo_blitter_pipe_clear_fb(struct ilo_blitter *blitter,
-                          unsigned buffers,
-                          const union pipe_color_union *color,
-                          double depth, unsigned stencil);
-
-bool
-ilo_blitter_blt_copy_resource(struct ilo_blitter *blitter,
-                              struct pipe_resource *dst, unsigned dst_level,
-                              unsigned dst_x, unsigned dst_y, unsigned dst_z,
-                              struct pipe_resource *src, unsigned src_level,
-                              const struct pipe_box *src_box);
-
-bool
-ilo_blitter_blt_clear_rt(struct ilo_blitter *blitter,
-                         struct pipe_surface *rt,
-                         const union pipe_color_union *color,
-                         unsigned x, unsigned y,
-                         unsigned width, unsigned height);
-
-bool
-ilo_blitter_blt_clear_zs(struct ilo_blitter *blitter,
-                         struct pipe_surface *zs,
-                         unsigned clear_flags,
-                         double depth, unsigned stencil,
-                         unsigned x, unsigned y,
-                         unsigned width, unsigned height);
-
-bool
-ilo_blitter_rectlist_clear_zs(struct ilo_blitter *blitter,
-                              struct pipe_surface *zs,
-                              unsigned clear_flags,
-                              double depth, unsigned stencil);
-
-void
-ilo_blitter_rectlist_resolve_z(struct ilo_blitter *blitter,
-                               struct pipe_resource *res,
-                               unsigned level, unsigned slice);
-
-void
-ilo_blitter_rectlist_resolve_hiz(struct ilo_blitter *blitter,
-                                 struct pipe_resource *res,
-                                 unsigned level, unsigned slice);
-
-#endif /* ILO_BLITTER_H */
diff --git a/src/gallium/drivers/ilo/ilo_blitter_blt.c b/src/gallium/drivers/ilo/ilo_blitter_blt.c
deleted file mode 100644 (file)
index 66203e8..0000000
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h"
-#include "core/ilo_builder_mi.h"
-#include "core/ilo_builder_blt.h"
-#include "util/u_pack_color.h"
-
-#include "ilo_context.h"
-#include "ilo_cp.h"
-#include "ilo_blit.h"
-#include "ilo_resource.h"
-#include "ilo_blitter.h"
-
-static uint32_t
-ilo_blitter_blt_begin(struct ilo_blitter *blitter, int max_cmd_size,
-                      struct intel_bo *dst,
-                      enum gen_surface_tiling dst_tiling,
-                      struct intel_bo *src,
-                      enum gen_surface_tiling src_tiling)
-{
-   struct ilo_cp *cp = blitter->ilo->cp;
-   struct intel_bo *aper_check[2];
-   int count;
-   uint32_t swctrl;
-
-   /* change owner */
-   ilo_cp_set_owner(cp, INTEL_RING_BLT, NULL);
-
-   /* check aperture space */
-   aper_check[0] = dst;
-   count = 1;
-
-   if (src) {
-      aper_check[1] = src;
-      count++;
-   }
-
-   if (!ilo_builder_validate(&cp->builder, count, aper_check))
-      ilo_cp_submit(cp, "out of aperture");
-
-   /* set BCS_SWCTRL */
-   swctrl = 0x0;
-
-   assert(dst_tiling == GEN6_TILING_NONE ||
-          dst_tiling == GEN6_TILING_X ||
-          dst_tiling == GEN6_TILING_Y);
-   assert(src_tiling == GEN6_TILING_NONE ||
-          src_tiling == GEN6_TILING_X ||
-          src_tiling == GEN6_TILING_Y);
-
-   if (dst_tiling == GEN6_TILING_Y) {
-      swctrl |= GEN6_REG_BCS_SWCTRL_DST_TILING_Y << 16 |
-                GEN6_REG_BCS_SWCTRL_DST_TILING_Y;
-   }
-
-   if (src && src_tiling == GEN6_TILING_Y) {
-      swctrl |= GEN6_REG_BCS_SWCTRL_SRC_TILING_Y << 16 |
-                GEN6_REG_BCS_SWCTRL_SRC_TILING_Y;
-   }
-
-   /*
-    * Most clients expect BLT engine to be stateless.  If we have to set
-    * BCS_SWCTRL to a non-default value, we have to set it back in the same
-    * batch buffer.
-    */
-   if (swctrl)
-      max_cmd_size += (4 + 3) * 2;
-
-   if (ilo_cp_space(cp) < max_cmd_size) {
-      ilo_cp_submit(cp, "out of space");
-      assert(ilo_cp_space(cp) >= max_cmd_size);
-   }
-
-   if (swctrl) {
-      /*
-       * From the Ivy Bridge PRM, volume 1 part 4, page 133:
-       *
-       *     "SW is required to flush the HW before changing the polarity of
-       *      this bit (Tile Y Destination/Source)."
-       */
-      gen6_MI_FLUSH_DW(&cp->builder);
-      gen6_MI_LOAD_REGISTER_IMM(&cp->builder, GEN6_REG_BCS_SWCTRL, swctrl);
-
-      swctrl &= ~(GEN6_REG_BCS_SWCTRL_DST_TILING_Y |
-                  GEN6_REG_BCS_SWCTRL_SRC_TILING_Y);
-   }
-
-   return swctrl;
-}
-
-static void
-ilo_blitter_blt_end(struct ilo_blitter *blitter, uint32_t swctrl)
-{
-   struct ilo_builder *builder = &blitter->ilo->cp->builder;
-
-   /* set BCS_SWCTRL back */
-   if (swctrl) {
-      gen6_MI_FLUSH_DW(builder);
-      gen6_MI_LOAD_REGISTER_IMM(builder, GEN6_REG_BCS_SWCTRL, swctrl);
-   }
-}
-
-static bool
-buf_clear_region(struct ilo_blitter *blitter,
-                 struct ilo_buffer_resource *buf, unsigned offset,
-                 uint32_t val, unsigned size,
-                 enum gen6_blt_mask value_mask,
-                 enum gen6_blt_mask write_mask)
-{
-   const uint8_t rop = 0xf0; /* PATCOPY */
-   const int cpp = gen6_blt_translate_value_cpp(value_mask);
-   struct ilo_builder *builder = &blitter->ilo->cp->builder;
-   struct gen6_blt_bo dst;
-
-   if (offset % cpp || size % cpp)
-      return false;
-
-   dst.bo = buf->vma.bo;
-   dst.offset = buf->vma.bo_offset + offset;
-
-   ilo_blitter_blt_begin(blitter, GEN6_COLOR_BLT__SIZE *
-         (1 + size / 32764 / gen6_blt_max_scanlines),
-         dst.bo, GEN6_TILING_NONE, NULL, GEN6_TILING_NONE);
-
-   while (size) {
-      unsigned width, height;
-
-      width = size;
-      height = 1;
-
-      if (width > gen6_blt_max_bytes_per_scanline) {
-         /* less than INT16_MAX and dword-aligned */
-         width = 32764;
-         height = size / width;
-         if (height > gen6_blt_max_scanlines)
-            height = gen6_blt_max_scanlines;
-
-         dst.pitch = width;
-      } else {
-         dst.pitch = 0;
-      }
-
-      gen6_COLOR_BLT(builder, &dst, val,
-            width, height, rop, value_mask, write_mask);
-
-      dst.offset += dst.pitch * height;
-      size -= width * height;
-   }
-
-   ilo_blitter_blt_end(blitter, 0);
-
-   return true;
-}
-
-static bool
-buf_copy_region(struct ilo_blitter *blitter,
-                struct ilo_buffer_resource *dst_buf, unsigned dst_offset,
-                struct ilo_buffer_resource *src_buf, unsigned src_offset,
-                unsigned size)
-{
-   const uint8_t rop = 0xcc; /* SRCCOPY */
-   struct ilo_builder *builder = &blitter->ilo->cp->builder;
-   struct gen6_blt_bo dst, src;
-
-   dst.bo = dst_buf->vma.bo;
-   dst.offset = dst_buf->vma.bo_offset + dst_offset;
-   dst.pitch = 0;
-
-   src.bo = src_buf->vma.bo;
-   src.offset = src_buf->vma.bo_offset + src_offset;
-   src.pitch = 0;
-
-   ilo_blitter_blt_begin(blitter, GEN6_SRC_COPY_BLT__SIZE *
-         (1 + size / 32764 / gen6_blt_max_scanlines),
-         dst_buf->vma.bo, GEN6_TILING_NONE,
-         src_buf->vma.bo, GEN6_TILING_NONE);
-
-   while (size) {
-      unsigned width, height;
-
-      width = size;
-      height = 1;
-
-      if (width > gen6_blt_max_bytes_per_scanline) {
-         /* less than INT16_MAX and dword-aligned */
-         width = 32764;
-         height = size / width;
-         if (height > gen6_blt_max_scanlines)
-            height = gen6_blt_max_scanlines;
-
-         dst.pitch = width;
-         src.pitch = width;
-      } else {
-         dst.pitch = 0;
-         src.pitch = 0;
-      }
-
-      gen6_SRC_COPY_BLT(builder, &dst, &src,
-            width, height, rop, GEN6_BLT_MASK_8, GEN6_BLT_MASK_8);
-
-      dst.offset += dst.pitch * height;
-      src.offset += src.pitch * height;
-      size -= width * height;
-   }
-
-   ilo_blitter_blt_end(blitter, 0);
-
-   return true;
-}
-
-static bool
-tex_clear_region(struct ilo_blitter *blitter,
-                 struct ilo_texture *dst_tex, unsigned dst_level,
-                 const struct pipe_box *dst_box,
-                 uint32_t val,
-                 enum gen6_blt_mask value_mask,
-                 enum gen6_blt_mask write_mask)
-{
-   const int cpp = gen6_blt_translate_value_cpp(value_mask);
-   const unsigned max_extent = 32767; /* INT16_MAX */
-   const uint8_t rop = 0xf0; /* PATCOPY */
-   struct ilo_builder *builder = &blitter->ilo->cp->builder;
-   struct gen6_blt_xy_bo dst;
-   uint32_t swctrl;
-   int slice;
-
-   /* no W-tiling nor separate stencil support */
-   if (dst_tex->image.tiling == GEN8_TILING_W || dst_tex->separate_s8)
-      return false;
-
-   if (dst_tex->image.bo_stride > max_extent)
-      return false;
-
-   if (dst_box->width * cpp > gen6_blt_max_bytes_per_scanline)
-      return false;
-
-   dst.bo = dst_tex->vma.bo;
-   dst.offset = dst_tex->vma.bo_offset;
-   dst.pitch = dst_tex->image.bo_stride;
-   dst.tiling = dst_tex->image.tiling;
-
-   swctrl = ilo_blitter_blt_begin(blitter,
-         GEN6_XY_COLOR_BLT__SIZE * dst_box->depth,
-         dst_tex->vma.bo, dst_tex->image.tiling, NULL, GEN6_TILING_NONE);
-
-   for (slice = 0; slice < dst_box->depth; slice++) {
-      unsigned x, y;
-
-      ilo_image_get_slice_pos(&dst_tex->image,
-            dst_level, dst_box->z + slice, &x, &y);
-
-      dst.x = x + dst_box->x;
-      dst.y = y + dst_box->y;
-
-      if (dst.x + dst_box->width > max_extent ||
-          dst.y + dst_box->height > max_extent)
-         break;
-
-      gen6_XY_COLOR_BLT(builder, &dst, val,
-            dst_box->width, dst_box->height, rop, value_mask, write_mask);
-   }
-
-   ilo_blitter_blt_end(blitter, swctrl);
-
-   return (slice == dst_box->depth);
-}
-
-static bool
-tex_copy_region(struct ilo_blitter *blitter,
-                struct ilo_texture *dst_tex,
-                unsigned dst_level,
-                unsigned dst_x, unsigned dst_y, unsigned dst_z,
-                struct ilo_texture *src_tex,
-                unsigned src_level,
-                const struct pipe_box *src_box)
-{
-   const struct util_format_description *desc =
-      util_format_description(dst_tex->image_format);
-   const unsigned max_extent = 32767; /* INT16_MAX */
-   const uint8_t rop = 0xcc; /* SRCCOPY */
-   struct ilo_builder *builder = &blitter->ilo->cp->builder;
-   enum gen6_blt_mask mask;
-   struct gen6_blt_xy_bo dst, src;
-   uint32_t swctrl;
-   int cpp, xscale, slice;
-
-   /* no W-tiling nor separate stencil support */
-   if (dst_tex->image.tiling == GEN8_TILING_W || dst_tex->separate_s8 ||
-       src_tex->image.tiling == GEN8_TILING_W || src_tex->separate_s8)
-      return false;
-
-   if (dst_tex->image.bo_stride > max_extent ||
-       src_tex->image.bo_stride > max_extent)
-      return false;
-
-   cpp = desc->block.bits / 8;
-   xscale = 1;
-
-   /* accommodate for larger cpp */
-   if (cpp > 4) {
-      if (cpp % 2 == 1)
-         return false;
-
-      cpp = (cpp % 4 == 0) ? 4 : 2;
-      xscale = (desc->block.bits / 8) / cpp;
-   }
-
-   if (src_box->width * cpp * xscale > gen6_blt_max_bytes_per_scanline)
-      return false;
-
-   switch (cpp) {
-   case 1:
-      mask = GEN6_BLT_MASK_8;
-      break;
-   case 2:
-      mask = GEN6_BLT_MASK_16;
-      break;
-   case 4:
-      mask = GEN6_BLT_MASK_32;
-      break;
-   default:
-      return false;
-      break;
-   }
-
-   dst.bo = dst_tex->vma.bo;
-   dst.offset = dst_tex->vma.bo_offset;
-   dst.pitch = dst_tex->image.bo_stride;
-   dst.tiling = dst_tex->image.tiling;
-
-   src.bo = src_tex->vma.bo;
-   src.offset = src_tex->vma.bo_offset;
-   src.pitch = src_tex->image.bo_stride;
-   src.tiling = src_tex->image.tiling;
-
-   swctrl = ilo_blitter_blt_begin(blitter,
-         GEN6_XY_SRC_COPY_BLT__SIZE * src_box->depth,
-         dst.bo, dst.tiling, src.bo, src.tiling);
-
-   for (slice = 0; slice < src_box->depth; slice++) {
-      unsigned dx, dy, sx, sy, width, height;
-
-      ilo_image_get_slice_pos(&dst_tex->image,
-            dst_level, dst_z + slice, &dx, &dy);
-      ilo_image_get_slice_pos(&src_tex->image,
-            src_level, src_box->z + slice, &sx, &sy);
-
-      dst.x = (dx + dst_x) * xscale;
-      dst.y = dy + dst_y;
-      src.x = (sx + src_box->x) * xscale;
-      src.y = sy + src_box->y;
-      width = src_box->width * xscale;
-      height = src_box->height;
-
-      /* in blocks */
-      dst.x /= desc->block.width;
-      dst.y /= desc->block.height;
-      src.x /= desc->block.width;
-      src.y /= desc->block.height;
-      width /= desc->block.width;
-      height /= desc->block.height;
-
-      if (src.x + width > max_extent || src.y + height > max_extent ||
-          dst.x + width > max_extent || dst.y + height > max_extent)
-         break;
-
-      gen6_XY_SRC_COPY_BLT(builder, &dst, &src,
-            width, height, rop, mask, mask);
-   }
-
-   ilo_blitter_blt_end(blitter, swctrl);
-
-   return (slice == src_box->depth);
-}
-
-bool
-ilo_blitter_blt_copy_resource(struct ilo_blitter *blitter,
-                              struct pipe_resource *dst, unsigned dst_level,
-                              unsigned dst_x, unsigned dst_y, unsigned dst_z,
-                              struct pipe_resource *src, unsigned src_level,
-                              const struct pipe_box *src_box)
-{
-   bool success;
-
-   ilo_blit_resolve_slices(blitter->ilo, src, src_level,
-         src_box->z, src_box->depth, ILO_TEXTURE_BLT_READ);
-   ilo_blit_resolve_slices(blitter->ilo, dst, dst_level,
-         dst_z, src_box->depth, ILO_TEXTURE_BLT_WRITE);
-
-   if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
-      const unsigned dst_offset = dst_x;
-      const unsigned src_offset = src_box->x;
-      const unsigned size = src_box->width;
-
-      assert(dst_level == 0 && dst_y == 0 && dst_z == 0);
-      assert(src_level == 0 &&
-             src_box->y == 0 &&
-             src_box->z == 0 &&
-             src_box->height == 1 &&
-             src_box->depth == 1);
-
-      success = buf_copy_region(blitter, ilo_buffer_resource(dst), dst_offset,
-            ilo_buffer_resource(src), src_offset, size);
-   }
-   else if (dst->target != PIPE_BUFFER && src->target != PIPE_BUFFER) {
-      success = tex_copy_region(blitter,
-            ilo_texture(dst), dst_level, dst_x, dst_y, dst_z,
-            ilo_texture(src), src_level, src_box);
-   }
-   else {
-      success = false;
-   }
-
-   return success;
-}
-
-bool
-ilo_blitter_blt_clear_rt(struct ilo_blitter *blitter,
-                         struct pipe_surface *rt,
-                         const union pipe_color_union *color,
-                         unsigned x, unsigned y,
-                         unsigned width, unsigned height)
-{
-   const int cpp = util_format_get_blocksize(rt->format);
-   enum gen6_blt_mask mask;
-   union util_color packed;
-   bool success;
-
-   if (ilo_skip_rendering(blitter->ilo))
-      return true;
-
-   switch (cpp) {
-   case 1:
-      mask = GEN6_BLT_MASK_8;
-      break;
-   case 2:
-      mask = GEN6_BLT_MASK_16;
-      break;
-   case 4:
-      mask = GEN6_BLT_MASK_32;
-      break;
-   default:
-      return false;
-      break;
-   }
-
-   if (util_format_is_pure_integer(rt->format) ||
-       util_format_is_compressed(rt->format))
-      return false;
-
-   ilo_blit_resolve_surface(blitter->ilo, rt, ILO_TEXTURE_BLT_WRITE);
-
-   util_pack_color(color->f, rt->format, &packed);
-
-   if (rt->texture->target == PIPE_BUFFER) {
-      unsigned offset, end, size;
-
-      assert(y == 0 && height == 1);
-
-      offset = (rt->u.buf.first_element + x) * cpp;
-      end = (rt->u.buf.last_element + 1) * cpp;
-
-      size = width * cpp;
-      if (offset + size > end)
-         size = end - offset;
-
-      success = buf_clear_region(blitter, ilo_buffer_resource(rt->texture),
-            offset, packed.ui[0], size, mask, mask);
-   }
-   else {
-      struct pipe_box box;
-
-      u_box_3d(x, y, rt->u.tex.first_layer, width, height,
-            rt->u.tex.last_layer - rt->u.tex.first_layer + 1, &box);
-
-      success = tex_clear_region(blitter, ilo_texture(rt->texture),
-            rt->u.tex.level, &box, packed.ui[0], mask, mask);
-   }
-
-   return success;
-}
-
-bool
-ilo_blitter_blt_clear_zs(struct ilo_blitter *blitter,
-                         struct pipe_surface *zs,
-                         unsigned clear_flags,
-                         double depth, unsigned stencil,
-                         unsigned x, unsigned y,
-                         unsigned width, unsigned height)
-{
-   enum gen6_blt_mask value_mask, write_mask;
-   struct pipe_box box;
-   uint32_t val;
-
-   if (ilo_skip_rendering(blitter->ilo))
-      return true;
-
-   switch (zs->format) {
-   case PIPE_FORMAT_Z16_UNORM:
-      if (!(clear_flags & PIPE_CLEAR_DEPTH))
-         return true;
-
-      value_mask = GEN6_BLT_MASK_16;
-      write_mask = GEN6_BLT_MASK_16;
-      break;
-   case PIPE_FORMAT_Z32_FLOAT:
-      if (!(clear_flags & PIPE_CLEAR_DEPTH))
-         return true;
-
-      value_mask = GEN6_BLT_MASK_32;
-      write_mask = GEN6_BLT_MASK_32;
-      break;
-   case PIPE_FORMAT_Z24X8_UNORM:
-      if (!(clear_flags & PIPE_CLEAR_DEPTH))
-         return true;
-
-      value_mask = GEN6_BLT_MASK_32;
-      write_mask = GEN6_BLT_MASK_32_LO;
-      break;
-   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-      if (!(clear_flags & PIPE_CLEAR_DEPTHSTENCIL))
-         return true;
-
-      value_mask = GEN6_BLT_MASK_32;
-
-      if ((clear_flags & PIPE_CLEAR_DEPTHSTENCIL) == PIPE_CLEAR_DEPTHSTENCIL)
-         write_mask = GEN6_BLT_MASK_32;
-      else if (clear_flags & PIPE_CLEAR_DEPTH)
-         write_mask = GEN6_BLT_MASK_32_LO;
-      else
-         write_mask = GEN6_BLT_MASK_32_HI;
-      break;
-   default:
-      return false;
-      break;
-   }
-
-   ilo_blit_resolve_surface(blitter->ilo, zs, ILO_TEXTURE_BLT_WRITE);
-
-   val = util_pack_z_stencil(zs->format, depth, stencil);
-
-   u_box_3d(x, y, zs->u.tex.first_layer, width, height,
-         zs->u.tex.last_layer - zs->u.tex.first_layer + 1, &box);
-
-   assert(zs->texture->target != PIPE_BUFFER);
-
-   return tex_clear_region(blitter, ilo_texture(zs->texture),
-         zs->u.tex.level, &box, val, value_mask, write_mask);
-}
diff --git a/src/gallium/drivers/ilo/ilo_blitter_pipe.c b/src/gallium/drivers/ilo/ilo_blitter_pipe.c
deleted file mode 100644 (file)
index 0bfe782..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_blitter.h"
-#include "util/u_surface.h"
-
-#include "ilo_context.h"
-#include "ilo_blitter.h"
-
-enum ilo_blitter_pipe_op {
-   ILO_BLITTER_PIPE_BLIT,
-   ILO_BLITTER_PIPE_COPY,
-   ILO_BLITTER_PIPE_CLEAR,
-   ILO_BLITTER_PIPE_CLEAR_FB,
-};
-
-static void
-ilo_blitter_pipe_begin(struct ilo_blitter *blitter,
-                       enum ilo_blitter_pipe_op op,
-                       bool scissor_enable)
-{
-   struct blitter_context *b = blitter->pipe_blitter;
-   struct ilo_state_vector *vec = &blitter->ilo->state_vector;
-
-   /* vertex states */
-   util_blitter_save_vertex_buffer_slot(b, vec->vb.states);
-   util_blitter_save_vertex_elements(b, (void *) vec->ve);
-   util_blitter_save_vertex_shader(b, vec->vs);
-   util_blitter_save_geometry_shader(b, vec->gs);
-   util_blitter_save_so_targets(b, vec->so.count, vec->so.states);
-   util_blitter_save_rasterizer(b, (void *) vec->rasterizer);
-
-   /* fragment states */
-   util_blitter_save_fragment_shader(b, vec->fs);
-   util_blitter_save_depth_stencil_alpha(b, (void *) vec->dsa);
-   util_blitter_save_blend(b, (void *) vec->blend);
-   util_blitter_save_sample_mask(b, vec->sample_mask);
-   util_blitter_save_stencil_ref(b, &vec->stencil_ref);
-   util_blitter_save_viewport(b, &vec->viewport.viewport0);
-
-   if (scissor_enable)
-      util_blitter_save_scissor(b, &vec->viewport.scissor0);
-
-   switch (op) {
-   case ILO_BLITTER_PIPE_BLIT:
-   case ILO_BLITTER_PIPE_COPY:
-      /*
-       * We are about to call util_blitter_blit() or
-       * util_blitter_copy_texture().  Note that util_blitter uses at most two
-       * textures.
-       */
-      util_blitter_save_fragment_sampler_states(b,
-            2, (void **) vec->sampler[PIPE_SHADER_FRAGMENT].cso);
-
-      util_blitter_save_fragment_sampler_views(b,
-            vec->view[PIPE_SHADER_FRAGMENT].count,
-            vec->view[PIPE_SHADER_FRAGMENT].states);
-
-      util_blitter_save_framebuffer(b, &vec->fb.state);
-
-      /* resource_copy_region() or blit() does not honor render condition */
-      util_blitter_save_render_condition(b,
-            blitter->ilo->render_condition.query,
-            blitter->ilo->render_condition.condition,
-            blitter->ilo->render_condition.mode);
-      break;
-   case ILO_BLITTER_PIPE_CLEAR:
-      /*
-       * we are about to call util_blitter_clear_render_target() or
-       * util_blitter_clear_depth_stencil()
-       */
-      util_blitter_save_framebuffer(b, &vec->fb.state);
-      break;
-   case ILO_BLITTER_PIPE_CLEAR_FB:
-      /* we are about to call util_blitter_clear() */
-      break;
-   default:
-      break;
-   }
-}
-
-static void
-ilo_blitter_pipe_end(struct ilo_blitter *blitter)
-{
-}
-
-bool
-ilo_blitter_pipe_blit(struct ilo_blitter *blitter,
-                      const struct pipe_blit_info *info)
-{
-   struct blitter_context *b = blitter->pipe_blitter;
-   struct pipe_blit_info skip_stencil;
-
-   if (util_try_blit_via_copy_region(&blitter->ilo->base, info))
-      return true;
-
-   if (!util_blitter_is_blit_supported(b, info)) {
-      /* try without stencil */
-      if (info->mask & PIPE_MASK_S) {
-         skip_stencil = *info;
-         skip_stencil.mask = info->mask & ~PIPE_MASK_S;
-
-         if (util_blitter_is_blit_supported(blitter->pipe_blitter,
-                                            &skip_stencil)) {
-            ilo_warn("ignore stencil buffer blitting\n");
-            info = &skip_stencil;
-         }
-      }
-
-      if (info != &skip_stencil) {
-         ilo_warn("failed to blit with pipe blitter\n");
-         return false;
-      }
-   }
-
-   ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_BLIT,
-         info->scissor_enable);
-   util_blitter_blit(b, info);
-   ilo_blitter_pipe_end(blitter);
-
-   return true;
-}
-
-bool
-ilo_blitter_pipe_copy_resource(struct ilo_blitter *blitter,
-                               struct pipe_resource *dst, unsigned dst_level,
-                               unsigned dst_x, unsigned dst_y, unsigned dst_z,
-                               struct pipe_resource *src, unsigned src_level,
-                               const struct pipe_box *src_box)
-{
-   /* not until we allow rendertargets to be buffers */
-   if (dst->target == PIPE_BUFFER || src->target == PIPE_BUFFER)
-      return false;
-
-   if (!util_blitter_is_copy_supported(blitter->pipe_blitter, dst, src))
-      return false;
-
-   ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_COPY, false);
-
-   util_blitter_copy_texture(blitter->pipe_blitter,
-         dst, dst_level, dst_x, dst_y, dst_z,
-         src, src_level, src_box);
-
-   ilo_blitter_pipe_end(blitter);
-
-   return true;
-}
-
-bool
-ilo_blitter_pipe_clear_rt(struct ilo_blitter *blitter,
-                          struct pipe_surface *rt,
-                          const union pipe_color_union *color,
-                          unsigned x, unsigned y,
-                          unsigned width, unsigned height)
-{
-   ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_CLEAR, false);
-
-   util_blitter_clear_render_target(blitter->pipe_blitter,
-         rt, color, x, y, width, height);
-
-   ilo_blitter_pipe_end(blitter);
-
-   return true;
-}
-
-bool
-ilo_blitter_pipe_clear_zs(struct ilo_blitter *blitter,
-                          struct pipe_surface *zs,
-                          unsigned clear_flags,
-                          double depth, unsigned stencil,
-                          unsigned x, unsigned y,
-                          unsigned width, unsigned height)
-{
-   ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_CLEAR, false);
-
-   util_blitter_clear_depth_stencil(blitter->pipe_blitter,
-         zs, clear_flags, depth, stencil, x, y, width, height);
-
-   ilo_blitter_pipe_end(blitter);
-
-   return true;
-}
-
-bool
-ilo_blitter_pipe_clear_fb(struct ilo_blitter *blitter,
-                          unsigned buffers,
-                          const union pipe_color_union *color,
-                          double depth, unsigned stencil)
-{
-   struct ilo_state_vector *vec = &blitter->ilo->state_vector;
-
-   /* TODO we should pause/resume some queries */
-   ilo_blitter_pipe_begin(blitter, ILO_BLITTER_PIPE_CLEAR_FB, false);
-
-   util_blitter_clear(blitter->pipe_blitter,
-         vec->fb.state.width, vec->fb.state.height, 1,
-         buffers, color, depth, stencil);
-
-   ilo_blitter_pipe_end(blitter);
-
-   return true;
-}
diff --git a/src/gallium/drivers/ilo/ilo_blitter_rectlist.c b/src/gallium/drivers/ilo/ilo_blitter_rectlist.c
deleted file mode 100644 (file)
index 86e6708..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_draw.h"
-#include "util/u_pack_color.h"
-
-#include "ilo_draw.h"
-#include "ilo_state.h"
-#include "ilo_blit.h"
-#include "ilo_blitter.h"
-
-/**
- * Set the states that are invariant between all ops.
- */
-static bool
-ilo_blitter_set_invariants(struct ilo_blitter *blitter)
-{
-   struct ilo_state_vf_element_info elem;
-
-   if (blitter->initialized)
-      return true;
-
-   /* a rectangle has 3 vertices in a RECTLIST */
-   blitter->draw_info.topology = GEN6_3DPRIM_RECTLIST;
-   blitter->draw_info.vertex_count = 3;
-   blitter->draw_info.instance_count = 1;
-
-   memset(&elem, 0, sizeof(elem));
-   /* only vertex X and Y */
-   elem.format = GEN6_FORMAT_R32G32_FLOAT;
-   elem.format_size = 8;
-   elem.component_count = 2;
-
-   ilo_state_vf_init_for_rectlist(&blitter->vf, blitter->ilo->dev,
-         blitter->vf_data, sizeof(blitter->vf_data), &elem, 1);
-
-   ilo_state_vs_init_disabled(&blitter->vs, blitter->ilo->dev);
-   ilo_state_hs_init_disabled(&blitter->hs, blitter->ilo->dev);
-   ilo_state_ds_init_disabled(&blitter->ds, blitter->ilo->dev);
-   ilo_state_gs_init_disabled(&blitter->gs, blitter->ilo->dev);
-   ilo_state_sol_init_disabled(&blitter->sol, blitter->ilo->dev, false);
-
-   /**
-    * From the Haswell PRM, volume 7, page 615:
-    *
-    *     "The clear value must be between the min and max depth values
-    *      (inclusive) defined in the CC_VIEWPORT."
-    *
-    * Even though clipping and viewport transformation will be disabled, we
-    * still need to set up the viewport states.
-    */
-   ilo_state_viewport_init_for_rectlist(&blitter->vp, blitter->ilo->dev,
-         blitter->vp_data, sizeof(blitter->vp_data));
-
-   ilo_state_sbe_init_for_rectlist(&blitter->sbe, blitter->ilo->dev, 0, 0);
-   ilo_state_ps_init_disabled(&blitter->ps, blitter->ilo->dev);
-
-   ilo_state_urb_init_for_rectlist(&blitter->urb, blitter->ilo->dev,
-         ilo_state_vf_get_attr_count(&blitter->vf));
-
-   blitter->initialized = true;
-
-   return true;
-}
-
-static void
-ilo_blitter_set_earlyz_op(struct ilo_blitter *blitter,
-                          enum ilo_state_raster_earlyz_op op,
-                          bool earlyz_stencil_clear)
-{
-   blitter->earlyz_op = op;
-   blitter->earlyz_stencil_clear = earlyz_stencil_clear;
-}
-
-/**
- * Set the rectangle primitive.
- */
-static void
-ilo_blitter_set_rectlist(struct ilo_blitter *blitter,
-                         unsigned x, unsigned y,
-                         unsigned width, unsigned height)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 11:
-    *
-    *     "(RECTLIST) A list of independent rectangles, where only 3 vertices
-    *      are provided per rectangle object, with the fourth vertex implied
-    *      by the definition of a rectangle. V0=LowerRight, V1=LowerLeft,
-    *      V2=UpperLeft. Implied V3 = V0- V1+V2."
-    */
-   blitter->vertices[0][0] = (float) (x + width);
-   blitter->vertices[0][1] = (float) (y + height);
-   blitter->vertices[1][0] = (float) x;
-   blitter->vertices[1][1] = (float) (y + height);
-   blitter->vertices[2][0] = (float) x;
-   blitter->vertices[2][1] = (float) y;
-}
-
-static void
-ilo_blitter_set_depth_clear_value(struct ilo_blitter *blitter,
-                                  uint32_t depth)
-{
-   blitter->depth_clear_value = depth;
-}
-
-static void
-ilo_blitter_set_cc(struct ilo_blitter *blitter,
-                   const struct ilo_state_cc_info *info)
-{
-   memset(&blitter->cc, 0, sizeof(blitter->cc));
-   ilo_state_cc_init(&blitter->cc, blitter->ilo->dev, info);
-}
-
-static void
-ilo_blitter_set_fb_rs(struct ilo_blitter *blitter)
-{
-   memset(&blitter->fb.rs, 0, sizeof(blitter->fb.rs));
-   ilo_state_raster_init_for_rectlist(&blitter->fb.rs, blitter->ilo->dev,
-         blitter->fb.num_samples, blitter->earlyz_op,
-         blitter->earlyz_stencil_clear);
-}
-
-static void
-ilo_blitter_set_fb(struct ilo_blitter *blitter,
-                   struct pipe_resource *res, unsigned level,
-                   const struct ilo_surface_cso *cso)
-{
-   struct ilo_texture *tex = ilo_texture(res);
-
-   blitter->fb.width = u_minify(tex->image.width0, level);
-   blitter->fb.height = u_minify(tex->image.height0, level);
-
-   blitter->fb.num_samples = res->nr_samples;
-   if (!blitter->fb.num_samples)
-      blitter->fb.num_samples = 1;
-
-   memcpy(&blitter->fb.dst, cso, sizeof(*cso));
-
-   ilo_blitter_set_fb_rs(blitter);
-}
-
-static void
-ilo_blitter_set_fb_from_surface(struct ilo_blitter *blitter,
-                                struct pipe_surface *surf)
-{
-   ilo_blitter_set_fb(blitter, surf->texture, surf->u.tex.level,
-         (const struct ilo_surface_cso *) surf);
-}
-
-static void
-ilo_blitter_set_fb_from_resource(struct ilo_blitter *blitter,
-                                 struct pipe_resource *res,
-                                 enum pipe_format format,
-                                 unsigned level, unsigned slice)
-{
-   struct pipe_surface templ, *surf;
-
-   memset(&templ, 0, sizeof(templ));
-   templ.format = format;
-   templ.u.tex.level = level;
-   templ.u.tex.first_layer = slice;
-   templ.u.tex.last_layer = slice;
-
-   /* if we did not call create_surface(), it would never fail */
-   surf = blitter->ilo->base.create_surface(&blitter->ilo->base, res, &templ);
-   assert(surf);
-
-   ilo_blitter_set_fb(blitter, res, level,
-         (const struct ilo_surface_cso *) surf);
-
-   pipe_surface_reference(&surf, NULL);
-}
-
-static void
-ilo_blitter_set_uses(struct ilo_blitter *blitter, uint32_t uses)
-{
-   blitter->uses = uses;
-}
-
-static void
-hiz_align_fb(struct ilo_blitter *blitter)
-{
-   unsigned align_w, align_h;
-
-   switch (blitter->earlyz_op) {
-   case ILO_STATE_RASTER_EARLYZ_DEPTH_CLEAR:
-   case ILO_STATE_RASTER_EARLYZ_DEPTH_RESOLVE:
-      break;
-   default:
-      return;
-      break;
-   }
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 313-314:
-    *
-    *     "A rectangle primitive representing the clear area is delivered. The
-    *      primitive must adhere to the following restrictions on size:
-    *
-    *      - If Number of Multisamples is NUMSAMPLES_1, the rectangle must be
-    *        aligned to an 8x4 pixel block relative to the upper left corner
-    *        of the depth buffer, and contain an integer number of these pixel
-    *        blocks, and all 8x4 pixels must be lit.
-    *
-    *      - If Number of Multisamples is NUMSAMPLES_4, the rectangle must be
-    *        aligned to a 4x2 pixel block (8x4 sample block) relative to the
-    *        upper left corner of the depth buffer, and contain an integer
-    *        number of these pixel blocks, and all samples of the 4x2 pixels
-    *        must be lit
-    *
-    *      - If Number of Multisamples is NUMSAMPLES_8, the rectangle must be
-    *        aligned to a 2x2 pixel block (8x4 sample block) relative to the
-    *        upper left corner of the depth buffer, and contain an integer
-    *        number of these pixel blocks, and all samples of the 2x2 pixels
-    *        must be list."
-    *
-    *     "The following is required when performing a depth buffer resolve:
-    *
-    *      - A rectangle primitive of the same size as the previous depth
-    *        buffer clear operation must be delivered, and depth buffer state
-    *        cannot have changed since the previous depth buffer clear
-    *        operation."
-    */
-   switch (blitter->fb.num_samples) {
-   case 1:
-      align_w = 8;
-      align_h = 4;
-      break;
-   case 2:
-      align_w = 4;
-      align_h = 4;
-      break;
-   case 4:
-      align_w = 4;
-      align_h = 2;
-      break;
-   case 8:
-   default:
-      align_w = 2;
-      align_h = 2;
-      break;
-   }
-
-   if (blitter->fb.width % align_w || blitter->fb.height % align_h) {
-      blitter->fb.width = align(blitter->fb.width, align_w);
-      blitter->fb.height = align(blitter->fb.height, align_h);
-   }
-}
-
-static void
-hiz_emit_rectlist(struct ilo_blitter *blitter)
-{
-   hiz_align_fb(blitter);
-
-   ilo_blitter_set_rectlist(blitter, 0, 0,
-         blitter->fb.width, blitter->fb.height);
-
-   ilo_draw_rectlist(blitter->ilo);
-}
-
-static bool
-hiz_can_clear_zs(const struct ilo_blitter *blitter,
-                 const struct ilo_texture *tex)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 314:
-    *
-    *     "Several cases exist where Depth Buffer Clear cannot be enabled (the
-    *      legacy method of clearing must be performed):
-    *
-    *      - If the depth buffer format is D32_FLOAT_S8X24_UINT or
-    *        D24_UNORM_S8_UINT.
-    *
-    *      - If stencil test is enabled but the separate stencil buffer is
-    *        disabled.
-    *
-    *      - [DevSNB-A{W/A}]: ...
-    *
-    *      - [DevSNB{W/A}]: When depth buffer format is D16_UNORM and the
-    *        width of the map (LOD0) is not multiple of 16, fast clear
-    *        optimization must be disabled."
-    *
-    * From the Ivy Bridge PRM, volume 2 part 1, page 313:
-    *
-    *     "Several cases exist where Depth Buffer Clear cannot be enabled (the
-    *      legacy method of clearing must be performed):
-    *
-    *      - If the depth buffer format is D32_FLOAT_S8X24_UINT or
-    *        D24_UNORM_S8_UINT.
-    *
-    *      - If stencil test is enabled but the separate stencil buffer is
-    *        disabled."
-    *
-    * The truth is when HiZ is enabled, separate stencil is also enabled on
-    * all GENs.  The depth buffer format cannot be combined depth/stencil.
-    */
-   switch (tex->image_format) {
-   case PIPE_FORMAT_Z16_UNORM:
-      if (ilo_dev_gen(blitter->ilo->dev) == ILO_GEN(6) &&
-          tex->base.width0 % 16)
-         return false;
-      break;
-   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-   case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
-      assert(!"HiZ with combined depth/stencil");
-      return false;
-      break;
-   default:
-      break;
-   }
-
-   return true;
-}
-
-bool
-ilo_blitter_rectlist_clear_zs(struct ilo_blitter *blitter,
-                              struct pipe_surface *zs,
-                              unsigned clear_flags,
-                              double depth, unsigned stencil)
-{
-   struct ilo_texture *tex = ilo_texture(zs->texture);
-   struct ilo_state_cc_info info;
-   uint32_t uses, clear_value;
-
-   if (!ilo_image_can_enable_aux(&tex->image, zs->u.tex.level))
-      return false;
-
-   if (!hiz_can_clear_zs(blitter, tex))
-      return false;
-
-   if (ilo_dev_gen(blitter->ilo->dev) >= ILO_GEN(8))
-      clear_value = fui(depth);
-   else
-      clear_value = util_pack_z(tex->image_format, depth);
-
-   ilo_blit_resolve_surface(blitter->ilo, zs,
-         ILO_TEXTURE_RENDER_WRITE | ILO_TEXTURE_CLEAR);
-   ilo_texture_set_slice_clear_value(tex, zs->u.tex.level,
-         zs->u.tex.first_layer,
-         zs->u.tex.last_layer - zs->u.tex.first_layer + 1,
-         clear_value);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 313-314:
-    *
-    *     "- Depth Test Enable must be disabled and Depth Buffer Write Enable
-    *        must be enabled (if depth is being cleared).
-    *
-    *      - Stencil buffer clear can be performed at the same time by
-    *        enabling Stencil Buffer Write Enable.  Stencil Test Enable must
-    *        be enabled and Stencil Pass Depth Pass Op set to REPLACE, and the
-    *        clear value that is placed in the stencil buffer is the Stencil
-    *        Reference Value from COLOR_CALC_STATE.
-    *
-    *      - Note also that stencil buffer clear can be performed without
-    *        depth buffer clear. For stencil only clear, Depth Test Enable and
-    *        Depth Buffer Write Enable must be disabled.
-    *
-    *      - [DevSNB] errata: For stencil buffer only clear, the previous
-    *        depth clear value must be delivered during the clear."
-    */
-   memset(&info, 0, sizeof(info));
-
-   if (clear_flags & PIPE_CLEAR_DEPTH) {
-      info.depth.cv_has_buffer = true;
-      info.depth.write_enable = true;
-   }
-
-   if (clear_flags & PIPE_CLEAR_STENCIL) {
-      info.stencil.cv_has_buffer = true;
-      info.stencil.test_enable = true;
-      info.stencil.front.test_func = GEN6_COMPAREFUNCTION_ALWAYS;
-      info.stencil.front.fail_op = GEN6_STENCILOP_KEEP;
-      info.stencil.front.zfail_op = GEN6_STENCILOP_KEEP;
-      info.stencil.front.zpass_op = GEN6_STENCILOP_REPLACE;
-
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 277:
-       *
-       *     "Additionally the following must be set to the correct values.
-       *
-       *      - DEPTH_STENCIL_STATE::Stencil Write Mask must be 0xFF
-       *      - DEPTH_STENCIL_STATE::Stencil Test Mask must be 0xFF
-       *      - DEPTH_STENCIL_STATE::Back Face Stencil Write Mask must be 0xFF
-       *      - DEPTH_STENCIL_STATE::Back Face Stencil Test Mask must be 0xFF"
-       *
-       * Back frace masks will be copied from front face masks.
-       */
-      info.params.stencil_front.test_ref = (uint8_t) stencil;
-      info.params.stencil_front.test_mask = 0xff;
-      info.params.stencil_front.write_mask = 0xff;
-   }
-
-   ilo_blitter_set_invariants(blitter);
-   ilo_blitter_set_earlyz_op(blitter,
-         ILO_STATE_RASTER_EARLYZ_DEPTH_CLEAR,
-         clear_flags & PIPE_CLEAR_STENCIL);
-
-   ilo_blitter_set_cc(blitter, &info);
-   ilo_blitter_set_depth_clear_value(blitter, clear_value);
-   ilo_blitter_set_fb_from_surface(blitter, zs);
-
-   uses = ILO_BLITTER_USE_DSA;
-   if (clear_flags & PIPE_CLEAR_DEPTH)
-      uses |= ILO_BLITTER_USE_VIEWPORT | ILO_BLITTER_USE_FB_DEPTH;
-   if (clear_flags & PIPE_CLEAR_STENCIL)
-      uses |= ILO_BLITTER_USE_CC | ILO_BLITTER_USE_FB_STENCIL;
-   ilo_blitter_set_uses(blitter, uses);
-
-   hiz_emit_rectlist(blitter);
-
-   return true;
-}
-
-void
-ilo_blitter_rectlist_resolve_z(struct ilo_blitter *blitter,
-                               struct pipe_resource *res,
-                               unsigned level, unsigned slice)
-{
-   struct ilo_texture *tex = ilo_texture(res);
-   struct ilo_state_cc_info info;
-   const struct ilo_texture_slice *s =
-      ilo_texture_get_slice(tex, level, slice);
-
-   if (!ilo_image_can_enable_aux(&tex->image, level))
-      return;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 314:
-    *
-    *     "Depth Test Enable must be enabled with the Depth Test Function set
-    *      to NEVER. Depth Buffer Write Enable must be enabled. Stencil Test
-    *      Enable and Stencil Buffer Write Enable must be disabled."
-    */
-   memset(&info, 0, sizeof(info));
-   info.depth.cv_has_buffer = true;
-   info.depth.test_enable = true;
-   info.depth.write_enable = true;
-   info.depth.test_func = GEN6_COMPAREFUNCTION_NEVER;
-
-   ilo_blitter_set_invariants(blitter);
-   ilo_blitter_set_earlyz_op(blitter,
-         ILO_STATE_RASTER_EARLYZ_DEPTH_RESOLVE, false);
-
-   ilo_blitter_set_cc(blitter, &info);
-   ilo_blitter_set_depth_clear_value(blitter, s->clear_value);
-   ilo_blitter_set_fb_from_resource(blitter, res, res->format, level, slice);
-   ilo_blitter_set_uses(blitter,
-         ILO_BLITTER_USE_DSA | ILO_BLITTER_USE_FB_DEPTH);
-
-   hiz_emit_rectlist(blitter);
-}
-
-void
-ilo_blitter_rectlist_resolve_hiz(struct ilo_blitter *blitter,
-                                 struct pipe_resource *res,
-                                 unsigned level, unsigned slice)
-{
-   struct ilo_texture *tex = ilo_texture(res);
-   struct ilo_state_cc_info info;
-
-   if (!ilo_image_can_enable_aux(&tex->image, level))
-      return;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 315:
-    *
-    *     "(Hierarchical Depth Buffer Resolve) Depth Test Enable must be
-    *      disabled. Depth Buffer Write Enable must be enabled. Stencil Test
-    *      Enable and Stencil Buffer Write Enable must be disabled."
-    */
-   memset(&info, 0, sizeof(info));
-   info.depth.cv_has_buffer = true;
-   info.depth.write_enable = true;
-
-   ilo_blitter_set_invariants(blitter);
-   ilo_blitter_set_earlyz_op(blitter,
-         ILO_STATE_RASTER_EARLYZ_HIZ_RESOLVE, false);
-
-   ilo_blitter_set_cc(blitter, &info);
-   ilo_blitter_set_fb_from_resource(blitter, res, res->format, level, slice);
-   ilo_blitter_set_uses(blitter,
-         ILO_BLITTER_USE_DSA | ILO_BLITTER_USE_FB_DEPTH);
-
-   hiz_emit_rectlist(blitter);
-}
diff --git a/src/gallium/drivers/ilo/ilo_common.h b/src/gallium/drivers/ilo/ilo_common.h
deleted file mode 100644 (file)
index d301659..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_COMMON_H
-#define ILO_COMMON_H
-
-#include "pipe/p_format.h"
-#include "pipe/p_defines.h"
-
-#include "util/list.h"
-#include "util/u_format.h"
-#include "util/u_inlines.h"
-#include "util/u_memory.h"
-#include "util/u_pointer.h"
-
-#include "core/ilo_core.h"
-#include "core/ilo_debug.h"
-#include "core/ilo_dev.h"
-
-#endif /* ILO_COMMON_H */
diff --git a/src/gallium/drivers/ilo/ilo_context.c b/src/gallium/drivers/ilo/ilo_context.c
deleted file mode 100644 (file)
index ad91202..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_upload_mgr.h"
-
-#include "ilo_blit.h"
-#include "ilo_blitter.h"
-#include "ilo_cp.h"
-#include "ilo_draw.h"
-#include "ilo_gpgpu.h"
-#include "ilo_query.h"
-#include "ilo_render.h"
-#include "ilo_resource.h"
-#include "ilo_screen.h"
-#include "ilo_shader.h"
-#include "ilo_state.h"
-#include "ilo_transfer.h"
-#include "ilo_video.h"
-#include "ilo_context.h"
-
-static void
-ilo_context_cp_submitted(struct ilo_cp *cp, void *data)
-{
-   struct ilo_context *ilo = ilo_context(data);
-
-   /* builder buffers are reallocated */
-   ilo_render_invalidate_builder(ilo->render);
-}
-
-static void
-ilo_flush(struct pipe_context *pipe,
-          struct pipe_fence_handle **f,
-          unsigned flags)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-
-   ilo_cp_submit(ilo->cp,
-         (flags & PIPE_FLUSH_END_OF_FRAME) ? "frame end" : "user request");
-
-   if (f) {
-      struct pipe_screen *screen = pipe->screen;
-      screen->fence_reference(screen, f, NULL);
-      *f = ilo_screen_fence_create(pipe->screen, ilo->cp->last_submitted_bo);
-   }
-}
-
-static void
-ilo_render_condition(struct pipe_context *pipe,
-                     struct pipe_query *query,
-                     boolean condition,
-                     uint mode)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-
-   /* reference count? */
-   ilo->render_condition.query = query;
-   ilo->render_condition.condition = condition;
-   ilo->render_condition.mode = mode;
-}
-
-bool
-ilo_skip_rendering(struct ilo_context *ilo)
-{
-   uint64_t result;
-   bool wait;
-
-   if (!ilo->render_condition.query)
-      return false;
-
-   switch (ilo->render_condition.mode) {
-   case PIPE_RENDER_COND_WAIT:
-   case PIPE_RENDER_COND_BY_REGION_WAIT:
-      wait = true;
-      break;
-   case PIPE_RENDER_COND_NO_WAIT:
-   case PIPE_RENDER_COND_BY_REGION_NO_WAIT:
-   default:
-      wait = false;
-      break;
-   }
-
-   if (ilo->base.get_query_result(&ilo->base, ilo->render_condition.query,
-            wait, (union pipe_query_result *) &result))
-      return ((bool) result == ilo->render_condition.condition);
-   else
-      return false;
-}
-
-static void
-ilo_context_destroy(struct pipe_context *pipe)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-
-   ilo_state_vector_cleanup(&ilo->state_vector);
-
-   if (ilo->uploader)
-      u_upload_destroy(ilo->uploader);
-
-   if (ilo->blitter)
-      ilo_blitter_destroy(ilo->blitter);
-   if (ilo->render)
-      ilo_render_destroy(ilo->render);
-   if (ilo->shader_cache)
-      ilo_shader_cache_destroy(ilo->shader_cache);
-   if (ilo->cp)
-      ilo_cp_destroy(ilo->cp);
-
-   slab_destroy(&ilo->transfer_mempool);
-
-   FREE(ilo);
-}
-
-static struct pipe_context *
-ilo_context_create(struct pipe_screen *screen, void *priv, unsigned flags)
-{
-   struct ilo_screen *is = ilo_screen(screen);
-   struct ilo_context *ilo;
-
-   ilo = CALLOC_STRUCT(ilo_context);
-   if (!ilo)
-      return NULL;
-
-   ilo->winsys = is->dev.winsys;
-   ilo->dev = &is->dev;
-
-   /*
-    * initialize first, otherwise it may not be safe to call
-    * ilo_context_destroy() on errors
-    */
-   slab_create(&ilo->transfer_mempool,
-         sizeof(struct ilo_transfer), 64);
-
-   ilo->shader_cache = ilo_shader_cache_create();
-   ilo->cp = ilo_cp_create(ilo->dev, ilo->winsys, ilo->shader_cache);
-   if (ilo->cp)
-      ilo->render = ilo_render_create(&ilo->cp->builder);
-
-   if (!ilo->cp || !ilo->shader_cache || !ilo->render) {
-      ilo_context_destroy(&ilo->base);
-      return NULL;
-   }
-
-   ilo_cp_set_submit_callback(ilo->cp,
-         ilo_context_cp_submitted, (void *) ilo);
-
-   ilo->base.screen = screen;
-   ilo->base.priv = priv;
-
-   ilo->base.destroy = ilo_context_destroy;
-   ilo->base.flush = ilo_flush;
-   ilo->base.render_condition = ilo_render_condition;
-
-   ilo_init_draw_functions(ilo);
-   ilo_init_query_functions(ilo);
-   ilo_init_state_functions(ilo);
-   ilo_init_blit_functions(ilo);
-   ilo_init_transfer_functions(ilo);
-   ilo_init_video_functions(ilo);
-   ilo_init_gpgpu_functions(ilo);
-
-   ilo_init_draw(ilo);
-   ilo_state_vector_init(ilo->dev, &ilo->state_vector);
-
-   /*
-    * These must be called last as u_upload/u_blitter are clients of the pipe
-    * context.
-    */
-   ilo->uploader = u_upload_create(&ilo->base, 1024 * 1024,
-         PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_INDEX_BUFFER,
-                                   PIPE_USAGE_STREAM);
-   if (!ilo->uploader) {
-      ilo_context_destroy(&ilo->base);
-      return NULL;
-   }
-
-   ilo->blitter = ilo_blitter_create(ilo);
-   if (!ilo->blitter) {
-      ilo_context_destroy(&ilo->base);
-      return NULL;
-   }
-
-   return &ilo->base;
-}
-
-/**
- * Initialize context-related functions.
- */
-void
-ilo_init_context_functions(struct ilo_screen *is)
-{
-   is->base.context_create = ilo_context_create;
-}
diff --git a/src/gallium/drivers/ilo/ilo_context.h b/src/gallium/drivers/ilo/ilo_context.h
deleted file mode 100644 (file)
index 25d338a..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_CONTEXT_H
-#define ILO_CONTEXT_H
-
-#include "pipe/p_context.h"
-#include "util/slab.h"
-
-#include "ilo_common.h"
-#include "ilo_cp.h"
-#include "ilo_draw.h"
-#include "ilo_state.h"
-
-struct u_upload_mgr;
-struct intel_winsys;
-
-struct ilo_blitter;
-struct ilo_render;
-struct ilo_screen;
-struct ilo_shader_cache;
-
-struct ilo_context {
-   struct pipe_context base;
-
-   struct intel_winsys *winsys;
-   struct ilo_dev *dev;
-
-   struct slab_mempool transfer_mempool;
-
-   struct ilo_cp *cp;
-
-   struct ilo_shader_cache *shader_cache;
-   struct ilo_blitter *blitter;
-   struct ilo_render *render;
-
-   struct u_upload_mgr *uploader;
-
-   struct ilo_state_vector state_vector;
-
-   struct {
-      struct pipe_query *query;
-      bool condition;
-      unsigned mode;
-   } render_condition;
-
-   struct {
-      struct ilo_cp_owner cp_owner;
-      struct list_head queries;
-   } draw;
-};
-
-static inline struct ilo_context *
-ilo_context(struct pipe_context *pipe)
-{
-   return (struct ilo_context *) pipe;
-}
-
-void
-ilo_init_context_functions(struct ilo_screen *is);
-
-bool
-ilo_skip_rendering(struct ilo_context *ilo);
-
-#endif /* ILO_CONTEXT_H */
diff --git a/src/gallium/drivers/ilo/ilo_cp.c b/src/gallium/drivers/ilo/ilo_cp.c
deleted file mode 100644 (file)
index 1f5d4ec..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "core/ilo_builder_mi.h"
-#include "core/intel_winsys.h"
-
-#include "ilo_shader.h"
-#include "ilo_cp.h"
-
-static const struct ilo_cp_owner ilo_cp_default_owner;
-
-static void
-ilo_cp_release_owner(struct ilo_cp *cp)
-{
-   if (cp->owner != &ilo_cp_default_owner) {
-      const struct ilo_cp_owner *owner = cp->owner;
-
-      cp->owner = &ilo_cp_default_owner;
-
-      assert(ilo_cp_space(cp) >= owner->reserve);
-      owner->release(cp, owner->data);
-   }
-}
-
-/**
- * Set the parser owner.  If this is a new owner or a new ring, the old owner
- * is released and the new owner's own() is called.  The parser may implicitly
- * submit if there is a ring change.
- *
- * own() is called before \p owner owns the parser.  It must make sure there
- * is more space than \p owner->reserve when it returns.  Calling
- * ilo_cp_submit() is allowed.
- *
- * release() will be called after \p owner loses the parser.  That may happen
- * just before the parser submits and ilo_cp_submit() is not allowed.
- */
-void
-ilo_cp_set_owner(struct ilo_cp *cp, enum intel_ring_type ring,
-                 const struct ilo_cp_owner *owner)
-{
-   if (!owner)
-      owner = &ilo_cp_default_owner;
-
-   if (cp->ring != ring) {
-      ilo_cp_submit(cp, "ring change");
-      cp->ring = ring;
-   }
-
-   if (cp->owner != owner) {
-      ilo_cp_release_owner(cp);
-
-      owner->own(cp, owner->data);
-
-      assert(ilo_cp_space(cp) >= owner->reserve);
-      cp->owner = owner;
-   }
-}
-
-static struct intel_bo *
-ilo_cp_end_batch(struct ilo_cp *cp, unsigned *used)
-{
-   struct intel_bo *bo;
-
-   ilo_cp_release_owner(cp);
-
-   if (!ilo_builder_batch_used(&cp->builder)) {
-      ilo_builder_batch_discard(&cp->builder);
-      return NULL;
-   }
-
-   /* see ilo_cp_space() */
-   assert(ilo_builder_batch_space(&cp->builder) >= 2);
-   gen6_mi_batch_buffer_end(&cp->builder);
-
-   bo = ilo_builder_end(&cp->builder, used);
-
-   /* we have to assume that kernel uploads also failed */
-   if (!bo)
-      ilo_shader_cache_invalidate(cp->shader_cache);
-
-   return bo;
-}
-
-static bool
-ilo_cp_detect_hang(struct ilo_cp *cp)
-{
-   uint32_t active_lost, pending_lost;
-   bool guilty = false;
-
-   if (likely(!(ilo_debug & ILO_DEBUG_HANG)))
-      return false;
-
-   /* wait and get reset stats */
-   if (intel_bo_wait(cp->last_submitted_bo, -1) ||
-       intel_winsys_get_reset_stats(cp->winsys, cp->render_ctx,
-          &active_lost, &pending_lost))
-      return false;
-
-   if (cp->active_lost != active_lost) {
-      ilo_err("GPU hang caused by bo %p\n", cp->last_submitted_bo);
-      cp->active_lost = active_lost;
-      guilty = true;
-   }
-
-   if (cp->pending_lost != pending_lost) {
-      ilo_err("GPU hang detected\n");
-      cp->pending_lost = pending_lost;
-   }
-
-   return guilty;
-}
-
-/**
- * Flush the command parser and execute the commands.  When the parser buffer
- * is empty, the callback is not invoked.
- */
-void
-ilo_cp_submit_internal(struct ilo_cp *cp)
-{
-   const bool do_exec = !(ilo_debug & ILO_DEBUG_NOHW);
-   struct intel_bo *bo;
-   unsigned used;
-   int err;
-
-   bo = ilo_cp_end_batch(cp, &used);
-   if (!bo)
-      return;
-
-   if (likely(do_exec)) {
-      err = intel_winsys_submit_bo(cp->winsys, cp->ring,
-            bo, used, cp->render_ctx, cp->one_off_flags);
-   }
-   else {
-      err = 0;
-   }
-
-   cp->one_off_flags = 0;
-
-   if (!err) {
-      bool guilty;
-
-      intel_bo_unref(cp->last_submitted_bo);
-      cp->last_submitted_bo = intel_bo_ref(bo);
-
-      guilty = ilo_cp_detect_hang(cp);
-
-      if (unlikely((ilo_debug & ILO_DEBUG_BATCH) || guilty)) {
-         ilo_builder_decode(&cp->builder);
-         if (guilty)
-            abort();
-      }
-
-      if (cp->submit_callback)
-         cp->submit_callback(cp, cp->submit_callback_data);
-   }
-
-   ilo_builder_begin(&cp->builder);
-}
-
-/**
- * Destroy the command parser.
- */
-void
-ilo_cp_destroy(struct ilo_cp *cp)
-{
-   ilo_builder_reset(&cp->builder);
-
-   intel_winsys_destroy_context(cp->winsys, cp->render_ctx);
-   FREE(cp);
-}
-
-/**
- * Create a command parser.
- */
-struct ilo_cp *
-ilo_cp_create(const struct ilo_dev *dev,
-              struct intel_winsys *winsys,
-              struct ilo_shader_cache *shc)
-{
-   struct ilo_cp *cp;
-
-   cp = CALLOC_STRUCT(ilo_cp);
-   if (!cp)
-      return NULL;
-
-   cp->winsys = winsys;
-   cp->shader_cache = shc;
-   cp->render_ctx = intel_winsys_create_context(winsys);
-   if (!cp->render_ctx) {
-      FREE(cp);
-      return NULL;
-   }
-
-   cp->ring = INTEL_RING_RENDER;
-   cp->owner = &ilo_cp_default_owner;
-
-   ilo_builder_init(&cp->builder, dev, winsys);
-
-   if (!ilo_builder_begin(&cp->builder)) {
-      ilo_cp_destroy(cp);
-      return NULL;
-   }
-
-   return cp;
-}
diff --git a/src/gallium/drivers/ilo/ilo_cp.h b/src/gallium/drivers/ilo/ilo_cp.h
deleted file mode 100644 (file)
index 016f5e0..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_CP_H
-#define ILO_CP_H
-
-#include "core/ilo_builder.h"
-#include "core/intel_winsys.h"
-
-#include "ilo_common.h"
-
-struct ilo_cp;
-struct ilo_shader_cache;
-
-typedef void (*ilo_cp_callback)(struct ilo_cp *cp, void *data);
-
-/**
- * Parser owners are notified when they gain or lose the ownership of the
- * parser.  This gives owners a chance to emit prolog or epilog.
- */
-struct ilo_cp_owner {
-   ilo_cp_callback own;
-   ilo_cp_callback release;
-   void *data;
-
-   /*
-    * Space reserved for release().  This can be modified at any time, as long
-    * as it is never increased by more than ilo_cp_space().
-    */
-   int reserve;
-};
-
-/**
- * Command parser.
- */
-struct ilo_cp {
-   struct intel_winsys *winsys;
-   struct ilo_shader_cache *shader_cache;
-   struct intel_context *render_ctx;
-
-   ilo_cp_callback submit_callback;
-   void *submit_callback_data;
-
-   enum intel_ring_type ring;
-   const struct ilo_cp_owner *owner;
-
-   unsigned one_off_flags;
-
-   struct ilo_builder builder;
-   struct intel_bo *last_submitted_bo;
-
-   uint32_t active_lost;
-   uint32_t pending_lost;
-};
-
-struct ilo_cp *
-ilo_cp_create(const struct ilo_dev *dev,
-              struct intel_winsys *winsys,
-              struct ilo_shader_cache *shc);
-
-void
-ilo_cp_destroy(struct ilo_cp *cp);
-
-void
-ilo_cp_submit_internal(struct ilo_cp *cp);
-
-static inline void
-ilo_cp_submit(struct ilo_cp *cp, const char *reason)
-{
-   if (ilo_debug & ILO_DEBUG_SUBMIT) {
-      ilo_printf("submit batch buffer to %s ring because of %s: ",
-            (cp->ring == INTEL_RING_RENDER) ? "render" : "unknown", reason);
-      ilo_builder_batch_print_stats(&cp->builder);
-   }
-
-   ilo_cp_submit_internal(cp);
-}
-
-void
-ilo_cp_set_owner(struct ilo_cp *cp, enum intel_ring_type ring,
-                 const struct ilo_cp_owner *owner);
-
-/**
- * Return the remaining space (in dwords) in the parser buffer.
- */
-static inline int
-ilo_cp_space(struct ilo_cp *cp)
-{
-   const int space = ilo_builder_batch_space(&cp->builder);
-   const int mi_batch_buffer_end_space = 2;
-
-   assert(space >= cp->owner->reserve + mi_batch_buffer_end_space);
-
-   return space - cp->owner->reserve - mi_batch_buffer_end_space;
-}
-
-/**
- * Set one-off flags.  They will be cleared after submission.
- */
-static inline void
-ilo_cp_set_one_off_flags(struct ilo_cp *cp, unsigned flags)
-{
-   cp->one_off_flags |= flags;
-}
-
-/**
- * Set submit callback.  The callback is invoked after the bo has been
- * successfully submitted, and before the bo is reallocated.
- */
-static inline void
-ilo_cp_set_submit_callback(struct ilo_cp *cp, ilo_cp_callback callback,
-                          void *data)
-{
-   cp->submit_callback = callback;
-   cp->submit_callback_data = data;
-}
-
-#endif /* ILO_CP_H */
diff --git a/src/gallium/drivers/ilo/ilo_draw.c b/src/gallium/drivers/ilo/ilo_draw.c
deleted file mode 100644 (file)
index bef238a..0000000
+++ /dev/null
@@ -1,653 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_prim.h"
-#include "core/intel_winsys.h"
-
-#include "ilo_render.h"
-#include "ilo_blit.h"
-#include "ilo_context.h"
-#include "ilo_cp.h"
-#include "ilo_query.h"
-#include "ilo_shader.h"
-#include "ilo_state.h"
-#include "ilo_draw.h"
-
-static void
-ilo_draw_set_owner(struct ilo_context *ilo)
-{
-   ilo_cp_set_owner(ilo->cp, INTEL_RING_RENDER, &ilo->draw.cp_owner);
-}
-
-static uint64_t
-query_timestamp_to_ns(const struct ilo_context *ilo, uint64_t timestamp)
-{
-   /* see ilo_get_timestamp() */
-   return (timestamp & 0xffffffff) * 80;
-}
-
-/**
- * Process the bo and accumulate the result.  The bo is emptied.
- */
-static void
-query_process_bo(const struct ilo_context *ilo, struct ilo_query *q)
-{
-   const uint64_t *vals;
-   uint64_t tmp;
-   int i;
-
-   if (!q->used)
-      return;
-
-   vals = intel_bo_map(q->bo, false);
-   if (!vals) {
-      q->used = 0;
-      return;
-   }
-
-   switch (q->type) {
-   case PIPE_QUERY_OCCLUSION_COUNTER:
-   case PIPE_QUERY_OCCLUSION_PREDICATE:
-   case PIPE_QUERY_TIME_ELAPSED:
-   case PIPE_QUERY_PRIMITIVES_GENERATED:
-   case PIPE_QUERY_PRIMITIVES_EMITTED:
-      assert(q->stride == sizeof(*vals) * 2);
-
-      tmp = 0;
-      for (i = 0; i < q->used; i++)
-         tmp += vals[2 * i + 1] - vals[2 * i];
-
-      if (q->type == PIPE_QUERY_TIME_ELAPSED)
-         tmp = query_timestamp_to_ns(ilo, tmp);
-
-      q->result.u64 += tmp;
-      break;
-   case PIPE_QUERY_TIMESTAMP:
-      assert(q->stride == sizeof(*vals));
-
-      q->result.u64 = query_timestamp_to_ns(ilo, vals[q->used - 1]);
-      break;
-   case PIPE_QUERY_PIPELINE_STATISTICS:
-      assert(q->stride == sizeof(*vals) * 22);
-
-      for (i = 0; i < q->used; i++) {
-         struct pipe_query_data_pipeline_statistics *stats =
-            &q->result.pipeline_statistics;
-         const uint64_t *begin = vals + 22 * i;
-         const uint64_t *end = begin + 11;
-
-         stats->ia_vertices    += end[0] - begin[0];
-         stats->ia_primitives  += end[1] - begin[1];
-         stats->vs_invocations += end[2] - begin[2];
-         stats->gs_invocations += end[3] - begin[3];
-         stats->gs_primitives  += end[4] - begin[4];
-         stats->c_invocations  += end[5] - begin[5];
-         stats->c_primitives   += end[6] - begin[6];
-         stats->ps_invocations += end[7] - begin[7];
-         stats->hs_invocations += end[8] - begin[8];
-         stats->ds_invocations += end[9] - begin[9];
-         stats->cs_invocations += end[10] - begin[10];
-      }
-      break;
-   default:
-      break;
-   }
-
-   intel_bo_unmap(q->bo);
-
-   q->used = 0;
-}
-
-static void
-query_begin_bo(struct ilo_context *ilo, struct ilo_query *q)
-{
-   /* bo is full */
-   if (q->used >= q->count)
-      query_process_bo(ilo, q);
-
-   /* write the beginning value to the bo */
-   if (q->in_pairs)
-      ilo_render_emit_query(ilo->render, q, q->stride * q->used);
-}
-
-static void
-query_end_bo(struct ilo_context *ilo, struct ilo_query *q)
-{
-   uint32_t offset;
-
-   assert(q->used < q->count);
-
-   offset = q->stride * q->used;
-   if (q->in_pairs)
-      offset += q->stride >> 1;
-
-   q->used++;
-
-   /* write the ending value to the bo */
-   ilo_render_emit_query(ilo->render, q, offset);
-}
-
-bool
-ilo_init_draw_query(struct ilo_context *ilo, struct ilo_query *q)
-{
-   unsigned bo_size;
-
-   switch (q->type) {
-   case PIPE_QUERY_OCCLUSION_COUNTER:
-   case PIPE_QUERY_OCCLUSION_PREDICATE:
-   case PIPE_QUERY_TIME_ELAPSED:
-   case PIPE_QUERY_PRIMITIVES_GENERATED:
-   case PIPE_QUERY_PRIMITIVES_EMITTED:
-      q->stride = sizeof(uint64_t);
-      q->in_pairs = true;
-      break;
-   case PIPE_QUERY_TIMESTAMP:
-      q->stride = sizeof(uint64_t);
-      q->in_pairs = false;
-      break;
-   case PIPE_QUERY_PIPELINE_STATISTICS:
-      q->stride = sizeof(uint64_t) * 11;
-      q->in_pairs = true;
-      break;
-   default:
-      return false;
-      break;
-   }
-
-   q->cmd_len = ilo_render_get_query_len(ilo->render, q->type);
-
-   /* double cmd_len and stride if in pairs */
-   q->cmd_len <<= q->in_pairs;
-   q->stride <<= q->in_pairs;
-
-   bo_size = (q->stride > 4096) ? q->stride : 4096;
-   q->bo = intel_winsys_alloc_bo(ilo->winsys, "query", bo_size, false);
-   if (!q->bo)
-      return false;
-
-   q->count = bo_size / q->stride;
-
-   return true;
-}
-
-void
-ilo_begin_draw_query(struct ilo_context *ilo, struct ilo_query *q)
-{
-   ilo_draw_set_owner(ilo);
-
-   /* need to submit first */
-   if (!ilo_builder_validate(&ilo->cp->builder, 1, &q->bo) ||
-         ilo_cp_space(ilo->cp) < q->cmd_len) {
-      ilo_cp_submit(ilo->cp, "out of aperture or space");
-
-      assert(ilo_builder_validate(&ilo->cp->builder, 1, &q->bo));
-      assert(ilo_cp_space(ilo->cp) >= q->cmd_len);
-
-      ilo_draw_set_owner(ilo);
-   }
-
-   /* reserve the space for ending/pausing the query */
-   ilo->draw.cp_owner.reserve += q->cmd_len >> q->in_pairs;
-
-   query_begin_bo(ilo, q);
-
-   if (q->in_pairs)
-      list_add(&q->list, &ilo->draw.queries);
-}
-
-void
-ilo_end_draw_query(struct ilo_context *ilo, struct ilo_query *q)
-{
-   ilo_draw_set_owner(ilo);
-
-   /* reclaim the reserved space */
-   ilo->draw.cp_owner.reserve -= q->cmd_len >> q->in_pairs;
-   assert(ilo->draw.cp_owner.reserve >= 0);
-
-   query_end_bo(ilo, q);
-
-   list_delinit(&q->list);
-}
-
-/**
- * Process the raw query data.
- */
-void
-ilo_process_draw_query(struct ilo_context *ilo, struct ilo_query *q)
-{
-   query_process_bo(ilo, q);
-}
-
-static void
-ilo_draw_own_cp(struct ilo_cp *cp, void *data)
-{
-   struct ilo_context *ilo = data;
-
-   /* multiply by 2 for both resuming and pausing */
-   if (ilo_cp_space(ilo->cp) < ilo->draw.cp_owner.reserve * 2) {
-      ilo_cp_submit(ilo->cp, "out of space");
-      assert(ilo_cp_space(ilo->cp) >= ilo->draw.cp_owner.reserve * 2);
-   }
-
-   while (true) {
-      struct ilo_builder_snapshot snapshot;
-      struct ilo_query *q;
-
-      ilo_builder_batch_snapshot(&ilo->cp->builder, &snapshot);
-
-      /* resume queries */
-      LIST_FOR_EACH_ENTRY(q, &ilo->draw.queries, list)
-         query_begin_bo(ilo, q);
-
-      if (!ilo_builder_validate(&ilo->cp->builder, 0, NULL)) {
-         ilo_builder_batch_restore(&ilo->cp->builder, &snapshot);
-
-         if (ilo_builder_batch_used(&ilo->cp->builder)) {
-            ilo_cp_submit(ilo->cp, "out of aperture");
-            continue;
-         }
-      }
-
-      break;
-   }
-
-   assert(ilo_cp_space(ilo->cp) >= ilo->draw.cp_owner.reserve);
-}
-
-static void
-ilo_draw_release_cp(struct ilo_cp *cp, void *data)
-{
-   struct ilo_context *ilo = data;
-   struct ilo_query *q;
-
-   assert(ilo_cp_space(ilo->cp) >= ilo->draw.cp_owner.reserve);
-
-   /* pause queries */
-   LIST_FOR_EACH_ENTRY(q, &ilo->draw.queries, list)
-      query_end_bo(ilo, q);
-}
-
-static bool
-draw_vbo(struct ilo_context *ilo, const struct ilo_state_vector *vec)
-{
-   bool need_flush = false;
-   bool success = true;
-   int max_len, before_space;
-
-   /* on Gen7 and Gen7.5, we need SOL_RESET to reset the SO write offsets */
-   if (ilo_dev_gen(ilo->dev) >= ILO_GEN(7) &&
-       ilo_dev_gen(ilo->dev) <= ILO_GEN(7.5) &&
-       (vec->dirty & ILO_DIRTY_SO) && vec->so.enabled &&
-       !vec->so.append_bitmask) {
-      ilo_cp_submit(ilo->cp, "SOL_RESET");
-      ilo_cp_set_one_off_flags(ilo->cp, INTEL_EXEC_GEN7_SOL_RESET);
-   }
-
-   if (ilo_builder_batch_used(&ilo->cp->builder)) {
-      /*
-       * Without a better tracking mechanism, when the framebuffer changes, we
-       * have to assume that the old framebuffer may be sampled from.  If that
-       * happens in the middle of a batch buffer, we need to insert manual
-       * flushes.
-       */
-      need_flush = (vec->dirty & ILO_DIRTY_FB);
-
-      /* same to SO target changes */
-      need_flush |= (vec->dirty & ILO_DIRTY_SO);
-   }
-
-   ilo_draw_set_owner(ilo);
-
-   /* make sure there is enough room first */
-   max_len = ilo_render_get_draw_len(ilo->render, vec);
-   if (need_flush)
-      max_len += ilo_render_get_flush_len(ilo->render);
-
-   if (max_len > ilo_cp_space(ilo->cp)) {
-      ilo_cp_submit(ilo->cp, "out of space");
-      need_flush = false;
-      assert(max_len <= ilo_cp_space(ilo->cp));
-   }
-
-   /* space available before emission */
-   before_space = ilo_cp_space(ilo->cp);
-
-   if (need_flush)
-      ilo_render_emit_flush(ilo->render);
-
-   while (true) {
-      struct ilo_builder_snapshot snapshot;
-
-      ilo_builder_batch_snapshot(&ilo->cp->builder, &snapshot);
-
-      ilo_render_emit_draw(ilo->render, vec);
-
-      if (!ilo_builder_validate(&ilo->cp->builder, 0, NULL)) {
-         ilo_builder_batch_restore(&ilo->cp->builder, &snapshot);
-
-         /* flush and try again */
-         if (ilo_builder_batch_used(&ilo->cp->builder)) {
-            ilo_cp_submit(ilo->cp, "out of aperture");
-            continue;
-         }
-
-         success = false;
-      }
-
-      break;
-   }
-
-   /* sanity check size estimation */
-   assert(before_space - ilo_cp_space(ilo->cp) <= max_len);
-
-   return success;
-}
-
-void
-ilo_draw_rectlist(struct ilo_context *ilo)
-{
-   int max_len, before_space;
-   bool need_flush;
-
-   need_flush = ilo_builder_batch_used(&ilo->cp->builder);
-
-   ilo_draw_set_owner(ilo);
-
-   max_len = ilo_render_get_rectlist_len(ilo->render, ilo->blitter);
-   max_len += ilo_render_get_flush_len(ilo->render) * 2;
-
-   if (max_len > ilo_cp_space(ilo->cp)) {
-      ilo_cp_submit(ilo->cp, "out of space");
-      need_flush = false;
-      assert(max_len <= ilo_cp_space(ilo->cp));
-   }
-
-   before_space = ilo_cp_space(ilo->cp);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 313:
-    *
-    *     "If other rendering operations have preceded this clear, a
-    *      PIPE_CONTROL with write cache flush enabled and Z-inhibit
-    *      disabled must be issued before the rectangle primitive used for
-    *      the depth buffer clear operation."
-    *
-    * From the Sandy Bridge PRM, volume 2 part 1, page 314:
-    *
-    *     "Depth buffer clear pass must be followed by a PIPE_CONTROL
-    *      command with DEPTH_STALL bit set and Then followed by Depth
-    *      FLUSH"
-    *
-    * But the pipeline has to be flushed both before and after not only
-    * because of these workarounds.  We need them for reasons such as
-    *
-    *  - we may sample from a texture that was rendered to
-    *  - we may sample from the fb shortly after
-    *
-    * Skip checking blitter->op and do the flushes.
-    */
-   if (need_flush)
-      ilo_render_emit_flush(ilo->render);
-
-   while (true) {
-      struct ilo_builder_snapshot snapshot;
-
-      ilo_builder_batch_snapshot(&ilo->cp->builder, &snapshot);
-
-      ilo_render_emit_rectlist(ilo->render, ilo->blitter);
-
-      if (!ilo_builder_validate(&ilo->cp->builder, 0, NULL)) {
-         ilo_builder_batch_restore(&ilo->cp->builder, &snapshot);
-
-         /* flush and try again */
-         if (ilo_builder_batch_used(&ilo->cp->builder)) {
-            ilo_cp_submit(ilo->cp, "out of aperture");
-            continue;
-         }
-      }
-
-      break;
-   }
-
-   ilo_render_invalidate_hw(ilo->render);
-
-   ilo_render_emit_flush(ilo->render);
-
-   /* sanity check size estimation */
-   assert(before_space - ilo_cp_space(ilo->cp) <= max_len);
-}
-
-static void
-draw_vbo_with_sw_restart(struct ilo_context *ilo,
-                         const struct pipe_draw_info *info)
-{
-   const struct ilo_ib_state *ib = &ilo->state_vector.ib;
-   const struct ilo_vma *vma;
-   union {
-      const void *ptr;
-      const uint8_t *u8;
-      const uint16_t *u16;
-      const uint32_t *u32;
-   } u;
-
-   /* we will draw with IB mapped */
-   if (ib->state.buffer) {
-      vma = ilo_resource_get_vma(ib->state.buffer);
-      u.ptr = intel_bo_map(vma->bo, false);
-      if (u.ptr)
-         u.u8 += vma->bo_offset + ib->state.offset;
-   } else {
-      vma = NULL;
-      u.ptr = ib->state.user_buffer;
-   }
-
-   if (!u.ptr)
-      return;
-
-#define DRAW_VBO_WITH_SW_RESTART(pipe, info, ptr) do {   \
-   const unsigned end = (info)->start + (info)->count;   \
-   struct pipe_draw_info subinfo;                        \
-   unsigned i;                                           \
-                                                         \
-   subinfo = *(info);                                    \
-   subinfo.primitive_restart = false;                    \
-   for (i = (info)->start; i < end; i++) {               \
-      if ((ptr)[i] == (info)->restart_index) {           \
-         subinfo.count = i - subinfo.start;              \
-         if (subinfo.count)                              \
-            (pipe)->draw_vbo(pipe, &subinfo);            \
-         subinfo.start = i + 1;                          \
-      }                                                  \
-   }                                                     \
-   subinfo.count = i - subinfo.start;                    \
-   if (subinfo.count)                                    \
-      (pipe)->draw_vbo(pipe, &subinfo);                  \
-} while (0)
-
-   switch (ib->state.index_size) {
-   case 1:
-      DRAW_VBO_WITH_SW_RESTART(&ilo->base, info, u.u8);
-      break;
-   case 2:
-      DRAW_VBO_WITH_SW_RESTART(&ilo->base, info, u.u16);
-      break;
-   case 4:
-      DRAW_VBO_WITH_SW_RESTART(&ilo->base, info, u.u32);
-      break;
-   default:
-      assert(!"unsupported index size");
-      break;
-   }
-
-#undef DRAW_VBO_WITH_SW_RESTART
-
-   if (vma)
-      intel_bo_unmap(vma->bo);
-}
-
-static bool
-draw_vbo_need_sw_restart(const struct ilo_context *ilo,
-                         const struct pipe_draw_info *info)
-{
-   /* the restart index is fixed prior to GEN7.5 */
-   if (ilo_dev_gen(ilo->dev) < ILO_GEN(7.5)) {
-      const unsigned cut_index =
-         (ilo->state_vector.ib.state.index_size == 1) ? 0xff :
-         (ilo->state_vector.ib.state.index_size == 2) ? 0xffff :
-         (ilo->state_vector.ib.state.index_size == 4) ? 0xffffffff : 0;
-
-      if (info->restart_index < cut_index)
-         return true;
-   }
-
-   switch (info->mode) {
-   case PIPE_PRIM_POINTS:
-   case PIPE_PRIM_LINES:
-   case PIPE_PRIM_LINE_STRIP:
-   case PIPE_PRIM_TRIANGLES:
-   case PIPE_PRIM_TRIANGLE_STRIP:
-      /* these never need software fallback */
-      return false;
-   case PIPE_PRIM_LINE_LOOP:
-   case PIPE_PRIM_POLYGON:
-   case PIPE_PRIM_QUAD_STRIP:
-   case PIPE_PRIM_QUADS:
-   case PIPE_PRIM_TRIANGLE_FAN:
-      /* these need software fallback prior to GEN7.5 */
-      return (ilo_dev_gen(ilo->dev) < ILO_GEN(7.5));
-   default:
-      /* the rest always needs software fallback */
-      return true;
-   }
-}
-
-static void
-ilo_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   int vs_scratch_size, gs_scratch_size, fs_scratch_size;
-
-   if (ilo_debug & ILO_DEBUG_DRAW) {
-      if (info->indexed) {
-         ilo_printf("indexed draw %s: "
-               "index start %d, count %d, vertex range [%d, %d]\n",
-               u_prim_name(info->mode), info->start, info->count,
-               info->min_index, info->max_index);
-      }
-      else {
-         ilo_printf("draw %s: vertex start %d, count %d\n",
-               u_prim_name(info->mode), info->start, info->count);
-      }
-
-      ilo_state_vector_dump_dirty(&ilo->state_vector);
-   }
-
-   if (ilo_skip_rendering(ilo))
-      return;
-
-   if (info->primitive_restart && info->indexed &&
-       draw_vbo_need_sw_restart(ilo, info)) {
-      draw_vbo_with_sw_restart(ilo, info);
-      return;
-   }
-
-   ilo_finalize_3d_states(ilo, info);
-
-   /* upload kernels */
-   ilo_shader_cache_upload(ilo->shader_cache, &ilo->cp->builder);
-
-   /* prepare scratch spaces */
-   ilo_shader_cache_get_max_scratch_sizes(ilo->shader_cache,
-         &vs_scratch_size, &gs_scratch_size, &fs_scratch_size);
-   ilo_render_prepare_scratch_spaces(ilo->render,
-         vs_scratch_size, gs_scratch_size, fs_scratch_size);
-
-   ilo_blit_resolve_framebuffer(ilo);
-
-   /* If draw_vbo ever fails, return immediately. */
-   if (!draw_vbo(ilo, &ilo->state_vector))
-      return;
-
-   /* clear dirty status */
-   ilo->state_vector.dirty = 0x0;
-
-   /* avoid dangling pointer reference */
-   ilo->state_vector.draw = NULL;
-
-   if (ilo_debug & ILO_DEBUG_NOCACHE)
-      ilo_render_emit_flush(ilo->render);
-}
-
-static void
-ilo_texture_barrier(struct pipe_context *pipe, unsigned flags)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-
-   if (ilo->cp->ring != INTEL_RING_RENDER)
-      return;
-
-   ilo_render_emit_flush(ilo->render);
-
-   /* don't know why */
-   if (ilo_dev_gen(ilo->dev) >= ILO_GEN(7))
-      ilo_cp_submit(ilo->cp, "texture barrier");
-}
-
-static void
-ilo_get_sample_position(struct pipe_context *pipe,
-                        unsigned sample_count,
-                        unsigned sample_index,
-                        float *out_value)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-
-   ilo_render_get_sample_position(ilo->render,
-         sample_count, sample_index,
-         &out_value[0], &out_value[1]);
-}
-
-void
-ilo_init_draw(struct ilo_context *ilo)
-{
-   ilo->draw.cp_owner.own = ilo_draw_own_cp;
-   ilo->draw.cp_owner.release = ilo_draw_release_cp;
-   ilo->draw.cp_owner.data = (void *) ilo;
-   ilo->draw.cp_owner.reserve = 0;
-
-   list_inithead(&ilo->draw.queries);
-}
-
-/**
- * Initialize 3D-related functions.
- */
-void
-ilo_init_draw_functions(struct ilo_context *ilo)
-{
-   ilo->base.draw_vbo = ilo_draw_vbo;
-   ilo->base.texture_barrier = ilo_texture_barrier;
-   ilo->base.get_sample_position = ilo_get_sample_position;
-}
diff --git a/src/gallium/drivers/ilo/ilo_draw.h b/src/gallium/drivers/ilo/ilo_draw.h
deleted file mode 100644 (file)
index 1c53887..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_DRAW_H
-#define ILO_DRAW_H
-
-#include "ilo_common.h"
-
-struct ilo_context;
-struct ilo_query;
-
-void
-ilo_init_draw_functions(struct ilo_context *ilo);
-
-void
-ilo_init_draw(struct ilo_context *ilo);
-
-bool
-ilo_init_draw_query(struct ilo_context *ilo, struct ilo_query *q);
-
-void
-ilo_begin_draw_query(struct ilo_context *ilo, struct ilo_query *q);
-
-void
-ilo_end_draw_query(struct ilo_context *ilo, struct ilo_query *q);
-
-void
-ilo_process_draw_query(struct ilo_context *ilo, struct ilo_query *q);
-
-void
-ilo_draw_rectlist(struct ilo_context *ilo);
-
-#endif /* ILO_DRAW_H */
diff --git a/src/gallium/drivers/ilo/ilo_format.c b/src/gallium/drivers/ilo/ilo_format.c
deleted file mode 100644 (file)
index ca7e6b5..0000000
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h"
-#include "core/ilo_state_surface.h"
-#include "core/ilo_state_vf.h"
-#include "ilo_format.h"
-
-bool
-ilo_format_support_vb(const struct ilo_dev *dev,
-                      enum pipe_format format)
-{
-   const int idx = ilo_format_translate(dev, format, PIPE_BIND_VERTEX_BUFFER);
-
-   return (idx >= 0 && ilo_state_vf_valid_element_format(dev, idx));
-}
-
-bool
-ilo_format_support_sol(const struct ilo_dev *dev,
-                       enum pipe_format format)
-{
-   const int idx = ilo_format_translate(dev, format, PIPE_BIND_STREAM_OUTPUT);
-
-   return (idx >= 0 && ilo_state_surface_valid_format(dev,
-            ILO_STATE_SURFACE_ACCESS_DP_SVB, idx));
-}
-
-bool
-ilo_format_support_sampler(const struct ilo_dev *dev,
-                           enum pipe_format format)
-{
-   const int idx = ilo_format_translate(dev, format, PIPE_BIND_SAMPLER_VIEW);
-
-   return (idx >= 0 && ilo_state_surface_valid_format(dev,
-            ILO_STATE_SURFACE_ACCESS_SAMPLER, idx));
-}
-
-bool
-ilo_format_support_rt(const struct ilo_dev *dev,
-                      enum pipe_format format)
-{
-   const int idx = ilo_format_translate(dev, format, PIPE_BIND_RENDER_TARGET);
-
-   return (idx >= 0 && ilo_state_surface_valid_format(dev,
-            ILO_STATE_SURFACE_ACCESS_DP_RENDER, idx));
-}
-
-bool
-ilo_format_support_zs(const struct ilo_dev *dev,
-                      enum pipe_format format)
-{
-   switch (format) {
-   case PIPE_FORMAT_Z16_UNORM:
-   case PIPE_FORMAT_Z24X8_UNORM:
-   case PIPE_FORMAT_Z32_FLOAT:
-   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-   case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
-      return true;
-   case PIPE_FORMAT_S8_UINT:
-      /* TODO separate stencil */
-   default:
-      return false;
-   }
-}
-
-/**
- * Translate a color (non-depth/stencil) pipe format to the matching hardware
- * format.  Return -1 on errors.
- */
-int
-ilo_format_translate_color(const struct ilo_dev *dev,
-                           enum pipe_format format)
-{
-   static const int format_mapping[PIPE_FORMAT_COUNT] = {
-      [PIPE_FORMAT_NONE]                  = 0,
-      [PIPE_FORMAT_B8G8R8A8_UNORM]        = GEN6_FORMAT_B8G8R8A8_UNORM,
-      [PIPE_FORMAT_B8G8R8X8_UNORM]        = GEN6_FORMAT_B8G8R8X8_UNORM,
-      [PIPE_FORMAT_A8R8G8B8_UNORM]        = 0,
-      [PIPE_FORMAT_X8R8G8B8_UNORM]        = 0,
-      [PIPE_FORMAT_B5G5R5A1_UNORM]        = GEN6_FORMAT_B5G5R5A1_UNORM,
-      [PIPE_FORMAT_B4G4R4A4_UNORM]        = GEN6_FORMAT_B4G4R4A4_UNORM,
-      [PIPE_FORMAT_B5G6R5_UNORM]          = GEN6_FORMAT_B5G6R5_UNORM,
-      [PIPE_FORMAT_R10G10B10A2_UNORM]     = GEN6_FORMAT_R10G10B10A2_UNORM,
-      [PIPE_FORMAT_L8_UNORM]              = GEN6_FORMAT_L8_UNORM,
-      [PIPE_FORMAT_A8_UNORM]              = GEN6_FORMAT_A8_UNORM,
-      [PIPE_FORMAT_I8_UNORM]              = GEN6_FORMAT_I8_UNORM,
-      [PIPE_FORMAT_L8A8_UNORM]            = GEN6_FORMAT_L8A8_UNORM,
-      [PIPE_FORMAT_L16_UNORM]             = GEN6_FORMAT_L16_UNORM,
-      [PIPE_FORMAT_UYVY]                  = GEN6_FORMAT_YCRCB_SWAPUVY,
-      [PIPE_FORMAT_YUYV]                  = GEN6_FORMAT_YCRCB_NORMAL,
-      [PIPE_FORMAT_Z16_UNORM]             = 0,
-      [PIPE_FORMAT_Z32_UNORM]             = 0,
-      [PIPE_FORMAT_Z32_FLOAT]             = 0,
-      [PIPE_FORMAT_Z24_UNORM_S8_UINT]     = 0,
-      [PIPE_FORMAT_S8_UINT_Z24_UNORM]     = 0,
-      [PIPE_FORMAT_Z24X8_UNORM]           = 0,
-      [PIPE_FORMAT_X8Z24_UNORM]           = 0,
-      [PIPE_FORMAT_S8_UINT]               = 0,
-      [PIPE_FORMAT_R64_FLOAT]             = GEN6_FORMAT_R64_FLOAT,
-      [PIPE_FORMAT_R64G64_FLOAT]          = GEN6_FORMAT_R64G64_FLOAT,
-      [PIPE_FORMAT_R64G64B64_FLOAT]       = GEN6_FORMAT_R64G64B64_FLOAT,
-      [PIPE_FORMAT_R64G64B64A64_FLOAT]    = GEN6_FORMAT_R64G64B64A64_FLOAT,
-      [PIPE_FORMAT_R32_FLOAT]             = GEN6_FORMAT_R32_FLOAT,
-      [PIPE_FORMAT_R32G32_FLOAT]          = GEN6_FORMAT_R32G32_FLOAT,
-      [PIPE_FORMAT_R32G32B32_FLOAT]       = GEN6_FORMAT_R32G32B32_FLOAT,
-      [PIPE_FORMAT_R32G32B32A32_FLOAT]    = GEN6_FORMAT_R32G32B32A32_FLOAT,
-      [PIPE_FORMAT_R32_UNORM]             = GEN6_FORMAT_R32_UNORM,
-      [PIPE_FORMAT_R32G32_UNORM]          = GEN6_FORMAT_R32G32_UNORM,
-      [PIPE_FORMAT_R32G32B32_UNORM]       = GEN6_FORMAT_R32G32B32_UNORM,
-      [PIPE_FORMAT_R32G32B32A32_UNORM]    = GEN6_FORMAT_R32G32B32A32_UNORM,
-      [PIPE_FORMAT_R32_USCALED]           = GEN6_FORMAT_R32_USCALED,
-      [PIPE_FORMAT_R32G32_USCALED]        = GEN6_FORMAT_R32G32_USCALED,
-      [PIPE_FORMAT_R32G32B32_USCALED]     = GEN6_FORMAT_R32G32B32_USCALED,
-      [PIPE_FORMAT_R32G32B32A32_USCALED]  = GEN6_FORMAT_R32G32B32A32_USCALED,
-      [PIPE_FORMAT_R32_SNORM]             = GEN6_FORMAT_R32_SNORM,
-      [PIPE_FORMAT_R32G32_SNORM]          = GEN6_FORMAT_R32G32_SNORM,
-      [PIPE_FORMAT_R32G32B32_SNORM]       = GEN6_FORMAT_R32G32B32_SNORM,
-      [PIPE_FORMAT_R32G32B32A32_SNORM]    = GEN6_FORMAT_R32G32B32A32_SNORM,
-      [PIPE_FORMAT_R32_SSCALED]           = GEN6_FORMAT_R32_SSCALED,
-      [PIPE_FORMAT_R32G32_SSCALED]        = GEN6_FORMAT_R32G32_SSCALED,
-      [PIPE_FORMAT_R32G32B32_SSCALED]     = GEN6_FORMAT_R32G32B32_SSCALED,
-      [PIPE_FORMAT_R32G32B32A32_SSCALED]  = GEN6_FORMAT_R32G32B32A32_SSCALED,
-      [PIPE_FORMAT_R16_UNORM]             = GEN6_FORMAT_R16_UNORM,
-      [PIPE_FORMAT_R16G16_UNORM]          = GEN6_FORMAT_R16G16_UNORM,
-      [PIPE_FORMAT_R16G16B16_UNORM]       = GEN6_FORMAT_R16G16B16_UNORM,
-      [PIPE_FORMAT_R16G16B16A16_UNORM]    = GEN6_FORMAT_R16G16B16A16_UNORM,
-      [PIPE_FORMAT_R16_USCALED]           = GEN6_FORMAT_R16_USCALED,
-      [PIPE_FORMAT_R16G16_USCALED]        = GEN6_FORMAT_R16G16_USCALED,
-      [PIPE_FORMAT_R16G16B16_USCALED]     = GEN6_FORMAT_R16G16B16_USCALED,
-      [PIPE_FORMAT_R16G16B16A16_USCALED]  = GEN6_FORMAT_R16G16B16A16_USCALED,
-      [PIPE_FORMAT_R16_SNORM]             = GEN6_FORMAT_R16_SNORM,
-      [PIPE_FORMAT_R16G16_SNORM]          = GEN6_FORMAT_R16G16_SNORM,
-      [PIPE_FORMAT_R16G16B16_SNORM]       = GEN6_FORMAT_R16G16B16_SNORM,
-      [PIPE_FORMAT_R16G16B16A16_SNORM]    = GEN6_FORMAT_R16G16B16A16_SNORM,
-      [PIPE_FORMAT_R16_SSCALED]           = GEN6_FORMAT_R16_SSCALED,
-      [PIPE_FORMAT_R16G16_SSCALED]        = GEN6_FORMAT_R16G16_SSCALED,
-      [PIPE_FORMAT_R16G16B16_SSCALED]     = GEN6_FORMAT_R16G16B16_SSCALED,
-      [PIPE_FORMAT_R16G16B16A16_SSCALED]  = GEN6_FORMAT_R16G16B16A16_SSCALED,
-      [PIPE_FORMAT_R8_UNORM]              = GEN6_FORMAT_R8_UNORM,
-      [PIPE_FORMAT_R8G8_UNORM]            = GEN6_FORMAT_R8G8_UNORM,
-      [PIPE_FORMAT_R8G8B8_UNORM]          = GEN6_FORMAT_R8G8B8_UNORM,
-      [PIPE_FORMAT_R8G8B8A8_UNORM]        = GEN6_FORMAT_R8G8B8A8_UNORM,
-      [PIPE_FORMAT_X8B8G8R8_UNORM]        = 0,
-      [PIPE_FORMAT_R8_USCALED]            = GEN6_FORMAT_R8_USCALED,
-      [PIPE_FORMAT_R8G8_USCALED]          = GEN6_FORMAT_R8G8_USCALED,
-      [PIPE_FORMAT_R8G8B8_USCALED]        = GEN6_FORMAT_R8G8B8_USCALED,
-      [PIPE_FORMAT_R8G8B8A8_USCALED]      = GEN6_FORMAT_R8G8B8A8_USCALED,
-      [PIPE_FORMAT_R8_SNORM]              = GEN6_FORMAT_R8_SNORM,
-      [PIPE_FORMAT_R8G8_SNORM]            = GEN6_FORMAT_R8G8_SNORM,
-      [PIPE_FORMAT_R8G8B8_SNORM]          = GEN6_FORMAT_R8G8B8_SNORM,
-      [PIPE_FORMAT_R8G8B8A8_SNORM]        = GEN6_FORMAT_R8G8B8A8_SNORM,
-      [PIPE_FORMAT_R8_SSCALED]            = GEN6_FORMAT_R8_SSCALED,
-      [PIPE_FORMAT_R8G8_SSCALED]          = GEN6_FORMAT_R8G8_SSCALED,
-      [PIPE_FORMAT_R8G8B8_SSCALED]        = GEN6_FORMAT_R8G8B8_SSCALED,
-      [PIPE_FORMAT_R8G8B8A8_SSCALED]      = GEN6_FORMAT_R8G8B8A8_SSCALED,
-      [PIPE_FORMAT_R32_FIXED]             = GEN6_FORMAT_R32_SFIXED,
-      [PIPE_FORMAT_R32G32_FIXED]          = GEN6_FORMAT_R32G32_SFIXED,
-      [PIPE_FORMAT_R32G32B32_FIXED]       = GEN6_FORMAT_R32G32B32_SFIXED,
-      [PIPE_FORMAT_R32G32B32A32_FIXED]    = GEN6_FORMAT_R32G32B32A32_SFIXED,
-      [PIPE_FORMAT_R16_FLOAT]             = GEN6_FORMAT_R16_FLOAT,
-      [PIPE_FORMAT_R16G16_FLOAT]          = GEN6_FORMAT_R16G16_FLOAT,
-      [PIPE_FORMAT_R16G16B16_FLOAT]       = GEN6_FORMAT_R16G16B16_FLOAT,
-      [PIPE_FORMAT_R16G16B16A16_FLOAT]    = GEN6_FORMAT_R16G16B16A16_FLOAT,
-      [PIPE_FORMAT_L8_SRGB]               = GEN6_FORMAT_L8_UNORM_SRGB,
-      [PIPE_FORMAT_L8A8_SRGB]             = GEN6_FORMAT_L8A8_UNORM_SRGB,
-      [PIPE_FORMAT_R8G8B8_SRGB]           = GEN6_FORMAT_R8G8B8_UNORM_SRGB,
-      [PIPE_FORMAT_A8B8G8R8_SRGB]         = 0,
-      [PIPE_FORMAT_X8B8G8R8_SRGB]         = 0,
-      [PIPE_FORMAT_B8G8R8A8_SRGB]         = GEN6_FORMAT_B8G8R8A8_UNORM_SRGB,
-      [PIPE_FORMAT_B8G8R8X8_SRGB]         = GEN6_FORMAT_B8G8R8X8_UNORM_SRGB,
-      [PIPE_FORMAT_A8R8G8B8_SRGB]         = 0,
-      [PIPE_FORMAT_X8R8G8B8_SRGB]         = 0,
-      [PIPE_FORMAT_R8G8B8A8_SRGB]         = GEN6_FORMAT_R8G8B8A8_UNORM_SRGB,
-      [PIPE_FORMAT_DXT1_RGB]              = GEN6_FORMAT_DXT1_RGB,
-      [PIPE_FORMAT_DXT1_RGBA]             = GEN6_FORMAT_BC1_UNORM,
-      [PIPE_FORMAT_DXT3_RGBA]             = GEN6_FORMAT_BC2_UNORM,
-      [PIPE_FORMAT_DXT5_RGBA]             = GEN6_FORMAT_BC3_UNORM,
-      [PIPE_FORMAT_DXT1_SRGB]             = GEN6_FORMAT_DXT1_RGB_SRGB,
-      [PIPE_FORMAT_DXT1_SRGBA]            = GEN6_FORMAT_BC1_UNORM_SRGB,
-      [PIPE_FORMAT_DXT3_SRGBA]            = GEN6_FORMAT_BC2_UNORM_SRGB,
-      [PIPE_FORMAT_DXT5_SRGBA]            = GEN6_FORMAT_BC3_UNORM_SRGB,
-      [PIPE_FORMAT_RGTC1_UNORM]           = GEN6_FORMAT_BC4_UNORM,
-      [PIPE_FORMAT_RGTC1_SNORM]           = GEN6_FORMAT_BC4_SNORM,
-      [PIPE_FORMAT_RGTC2_UNORM]           = GEN6_FORMAT_BC5_UNORM,
-      [PIPE_FORMAT_RGTC2_SNORM]           = GEN6_FORMAT_BC5_SNORM,
-      [PIPE_FORMAT_R8G8_B8G8_UNORM]       = 0,
-      [PIPE_FORMAT_G8R8_G8B8_UNORM]       = 0,
-      [PIPE_FORMAT_R8SG8SB8UX8U_NORM]     = 0,
-      [PIPE_FORMAT_R5SG5SB6U_NORM]        = 0,
-      [PIPE_FORMAT_A8B8G8R8_UNORM]        = 0,
-      [PIPE_FORMAT_B5G5R5X1_UNORM]        = GEN6_FORMAT_B5G5R5X1_UNORM,
-      [PIPE_FORMAT_R10G10B10A2_USCALED]   = GEN6_FORMAT_R10G10B10A2_USCALED,
-      [PIPE_FORMAT_R11G11B10_FLOAT]       = GEN6_FORMAT_R11G11B10_FLOAT,
-      [PIPE_FORMAT_R9G9B9E5_FLOAT]        = GEN6_FORMAT_R9G9B9E5_SHAREDEXP,
-      [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT]  = 0,
-      [PIPE_FORMAT_R1_UNORM]              = GEN6_FORMAT_R1_UNORM,
-      [PIPE_FORMAT_R10G10B10X2_USCALED]   = GEN6_FORMAT_R10G10B10X2_USCALED,
-      [PIPE_FORMAT_R10G10B10X2_SNORM]     = 0,
-      [PIPE_FORMAT_L4A4_UNORM]            = 0,
-      [PIPE_FORMAT_B10G10R10A2_UNORM]     = GEN6_FORMAT_B10G10R10A2_UNORM,
-      [PIPE_FORMAT_R10SG10SB10SA2U_NORM]  = 0,
-      [PIPE_FORMAT_R8G8Bx_SNORM]          = 0,
-      [PIPE_FORMAT_R8G8B8X8_UNORM]        = GEN6_FORMAT_R8G8B8X8_UNORM,
-      [PIPE_FORMAT_B4G4R4X4_UNORM]        = 0,
-      [PIPE_FORMAT_X24S8_UINT]            = 0,
-      [PIPE_FORMAT_S8X24_UINT]            = 0,
-      [PIPE_FORMAT_X32_S8X24_UINT]        = 0,
-      [PIPE_FORMAT_B2G3R3_UNORM]          = 0,
-      [PIPE_FORMAT_L16A16_UNORM]          = GEN6_FORMAT_L16A16_UNORM,
-      [PIPE_FORMAT_A16_UNORM]             = GEN6_FORMAT_A16_UNORM,
-      [PIPE_FORMAT_I16_UNORM]             = GEN6_FORMAT_I16_UNORM,
-      [PIPE_FORMAT_LATC1_UNORM]           = 0,
-      [PIPE_FORMAT_LATC1_SNORM]           = 0,
-      [PIPE_FORMAT_LATC2_UNORM]           = 0,
-      [PIPE_FORMAT_LATC2_SNORM]           = 0,
-      [PIPE_FORMAT_A8_SNORM]              = 0,
-      [PIPE_FORMAT_L8_SNORM]              = 0,
-      [PIPE_FORMAT_L8A8_SNORM]            = 0,
-      [PIPE_FORMAT_I8_SNORM]              = 0,
-      [PIPE_FORMAT_A16_SNORM]             = 0,
-      [PIPE_FORMAT_L16_SNORM]             = 0,
-      [PIPE_FORMAT_L16A16_SNORM]          = 0,
-      [PIPE_FORMAT_I16_SNORM]             = 0,
-      [PIPE_FORMAT_A16_FLOAT]             = GEN6_FORMAT_A16_FLOAT,
-      [PIPE_FORMAT_L16_FLOAT]             = GEN6_FORMAT_L16_FLOAT,
-      [PIPE_FORMAT_L16A16_FLOAT]          = GEN6_FORMAT_L16A16_FLOAT,
-      [PIPE_FORMAT_I16_FLOAT]             = GEN6_FORMAT_I16_FLOAT,
-      [PIPE_FORMAT_A32_FLOAT]             = GEN6_FORMAT_A32_FLOAT,
-      [PIPE_FORMAT_L32_FLOAT]             = GEN6_FORMAT_L32_FLOAT,
-      [PIPE_FORMAT_L32A32_FLOAT]          = GEN6_FORMAT_L32A32_FLOAT,
-      [PIPE_FORMAT_I32_FLOAT]             = GEN6_FORMAT_I32_FLOAT,
-      [PIPE_FORMAT_YV12]                  = 0,
-      [PIPE_FORMAT_YV16]                  = 0,
-      [PIPE_FORMAT_IYUV]                  = 0,
-      [PIPE_FORMAT_NV12]                  = 0,
-      [PIPE_FORMAT_NV21]                  = 0,
-      [PIPE_FORMAT_A4R4_UNORM]            = 0,
-      [PIPE_FORMAT_R4A4_UNORM]            = 0,
-      [PIPE_FORMAT_R8A8_UNORM]            = 0,
-      [PIPE_FORMAT_A8R8_UNORM]            = 0,
-      [PIPE_FORMAT_R10G10B10A2_SSCALED]   = GEN6_FORMAT_R10G10B10A2_SSCALED,
-      [PIPE_FORMAT_R10G10B10A2_SNORM]     = GEN6_FORMAT_R10G10B10A2_SNORM,
-      [PIPE_FORMAT_B10G10R10A2_USCALED]   = GEN6_FORMAT_B10G10R10A2_USCALED,
-      [PIPE_FORMAT_B10G10R10A2_SSCALED]   = GEN6_FORMAT_B10G10R10A2_SSCALED,
-      [PIPE_FORMAT_B10G10R10A2_SNORM]     = GEN6_FORMAT_B10G10R10A2_SNORM,
-      [PIPE_FORMAT_R8_UINT]               = GEN6_FORMAT_R8_UINT,
-      [PIPE_FORMAT_R8G8_UINT]             = GEN6_FORMAT_R8G8_UINT,
-      [PIPE_FORMAT_R8G8B8_UINT]           = GEN6_FORMAT_R8G8B8_UINT,
-      [PIPE_FORMAT_R8G8B8A8_UINT]         = GEN6_FORMAT_R8G8B8A8_UINT,
-      [PIPE_FORMAT_R8_SINT]               = GEN6_FORMAT_R8_SINT,
-      [PIPE_FORMAT_R8G8_SINT]             = GEN6_FORMAT_R8G8_SINT,
-      [PIPE_FORMAT_R8G8B8_SINT]           = GEN6_FORMAT_R8G8B8_SINT,
-      [PIPE_FORMAT_R8G8B8A8_SINT]         = GEN6_FORMAT_R8G8B8A8_SINT,
-      [PIPE_FORMAT_R16_UINT]              = GEN6_FORMAT_R16_UINT,
-      [PIPE_FORMAT_R16G16_UINT]           = GEN6_FORMAT_R16G16_UINT,
-      [PIPE_FORMAT_R16G16B16_UINT]        = GEN6_FORMAT_R16G16B16_UINT,
-      [PIPE_FORMAT_R16G16B16A16_UINT]     = GEN6_FORMAT_R16G16B16A16_UINT,
-      [PIPE_FORMAT_R16_SINT]              = GEN6_FORMAT_R16_SINT,
-      [PIPE_FORMAT_R16G16_SINT]           = GEN6_FORMAT_R16G16_SINT,
-      [PIPE_FORMAT_R16G16B16_SINT]        = GEN6_FORMAT_R16G16B16_SINT,
-      [PIPE_FORMAT_R16G16B16A16_SINT]     = GEN6_FORMAT_R16G16B16A16_SINT,
-      [PIPE_FORMAT_R32_UINT]              = GEN6_FORMAT_R32_UINT,
-      [PIPE_FORMAT_R32G32_UINT]           = GEN6_FORMAT_R32G32_UINT,
-      [PIPE_FORMAT_R32G32B32_UINT]        = GEN6_FORMAT_R32G32B32_UINT,
-      [PIPE_FORMAT_R32G32B32A32_UINT]     = GEN6_FORMAT_R32G32B32A32_UINT,
-      [PIPE_FORMAT_R32_SINT]              = GEN6_FORMAT_R32_SINT,
-      [PIPE_FORMAT_R32G32_SINT]           = GEN6_FORMAT_R32G32_SINT,
-      [PIPE_FORMAT_R32G32B32_SINT]        = GEN6_FORMAT_R32G32B32_SINT,
-      [PIPE_FORMAT_R32G32B32A32_SINT]     = GEN6_FORMAT_R32G32B32A32_SINT,
-      [PIPE_FORMAT_A8_UINT]               = 0,
-      [PIPE_FORMAT_I8_UINT]               = GEN6_FORMAT_I8_UINT,
-      [PIPE_FORMAT_L8_UINT]               = GEN6_FORMAT_L8_UINT,
-      [PIPE_FORMAT_L8A8_UINT]             = GEN6_FORMAT_L8A8_UINT,
-      [PIPE_FORMAT_A8_SINT]               = 0,
-      [PIPE_FORMAT_I8_SINT]               = GEN6_FORMAT_I8_SINT,
-      [PIPE_FORMAT_L8_SINT]               = GEN6_FORMAT_L8_SINT,
-      [PIPE_FORMAT_L8A8_SINT]             = GEN6_FORMAT_L8A8_SINT,
-      [PIPE_FORMAT_A16_UINT]              = 0,
-      [PIPE_FORMAT_I16_UINT]              = 0,
-      [PIPE_FORMAT_L16_UINT]              = 0,
-      [PIPE_FORMAT_L16A16_UINT]           = 0,
-      [PIPE_FORMAT_A16_SINT]              = 0,
-      [PIPE_FORMAT_I16_SINT]              = 0,
-      [PIPE_FORMAT_L16_SINT]              = 0,
-      [PIPE_FORMAT_L16A16_SINT]           = 0,
-      [PIPE_FORMAT_A32_UINT]              = 0,
-      [PIPE_FORMAT_I32_UINT]              = 0,
-      [PIPE_FORMAT_L32_UINT]              = 0,
-      [PIPE_FORMAT_L32A32_UINT]           = 0,
-      [PIPE_FORMAT_A32_SINT]              = 0,
-      [PIPE_FORMAT_I32_SINT]              = 0,
-      [PIPE_FORMAT_L32_SINT]              = 0,
-      [PIPE_FORMAT_L32A32_SINT]           = 0,
-      [PIPE_FORMAT_B10G10R10A2_UINT]      = GEN6_FORMAT_B10G10R10A2_UINT,
-      [PIPE_FORMAT_ETC1_RGB8]             = GEN6_FORMAT_ETC1_RGB8,
-      [PIPE_FORMAT_R8G8_R8B8_UNORM]       = 0,
-      [PIPE_FORMAT_G8R8_B8R8_UNORM]       = 0,
-      [PIPE_FORMAT_R8G8B8X8_SNORM]        = 0,
-      [PIPE_FORMAT_R8G8B8X8_SRGB]         = 0,
-      [PIPE_FORMAT_R8G8B8X8_UINT]         = 0,
-      [PIPE_FORMAT_R8G8B8X8_SINT]         = 0,
-      [PIPE_FORMAT_B10G10R10X2_UNORM]     = GEN6_FORMAT_B10G10R10X2_UNORM,
-      [PIPE_FORMAT_R16G16B16X16_UNORM]    = GEN6_FORMAT_R16G16B16X16_UNORM,
-      [PIPE_FORMAT_R16G16B16X16_SNORM]    = 0,
-      [PIPE_FORMAT_R16G16B16X16_FLOAT]    = GEN6_FORMAT_R16G16B16X16_FLOAT,
-      [PIPE_FORMAT_R16G16B16X16_UINT]     = 0,
-      [PIPE_FORMAT_R16G16B16X16_SINT]     = 0,
-      [PIPE_FORMAT_R32G32B32X32_FLOAT]    = GEN6_FORMAT_R32G32B32X32_FLOAT,
-      [PIPE_FORMAT_R32G32B32X32_UINT]     = 0,
-      [PIPE_FORMAT_R32G32B32X32_SINT]     = 0,
-      [PIPE_FORMAT_R8A8_SNORM]            = 0,
-      [PIPE_FORMAT_R16A16_UNORM]          = 0,
-      [PIPE_FORMAT_R16A16_SNORM]          = 0,
-      [PIPE_FORMAT_R16A16_FLOAT]          = 0,
-      [PIPE_FORMAT_R32A32_FLOAT]          = 0,
-      [PIPE_FORMAT_R8A8_UINT]             = 0,
-      [PIPE_FORMAT_R8A8_SINT]             = 0,
-      [PIPE_FORMAT_R16A16_UINT]           = 0,
-      [PIPE_FORMAT_R16A16_SINT]           = 0,
-      [PIPE_FORMAT_R32A32_UINT]           = 0,
-      [PIPE_FORMAT_R32A32_SINT]           = 0,
-      [PIPE_FORMAT_R10G10B10A2_UINT]      = GEN6_FORMAT_R10G10B10A2_UINT,
-      [PIPE_FORMAT_B5G6R5_SRGB]           = GEN6_FORMAT_B5G6R5_UNORM_SRGB,
-   };
-   int sfmt = format_mapping[format];
-
-   /* GEN6_FORMAT_R32G32B32A32_FLOAT happens to be 0 */
-   if (!sfmt && format != PIPE_FORMAT_R32G32B32A32_FLOAT)
-      sfmt = -1;
-
-   return sfmt;
-}
diff --git a/src/gallium/drivers/ilo/ilo_format.h b/src/gallium/drivers/ilo/ilo_format.h
deleted file mode 100644 (file)
index 0a19c02..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_FORMAT_H
-#define ILO_FORMAT_H
-
-#include "genhw/genhw.h"
-
-#include "ilo_common.h"
-
-bool
-ilo_format_support_vb(const struct ilo_dev *dev,
-                      enum pipe_format format);
-
-bool
-ilo_format_support_sol(const struct ilo_dev *dev,
-                       enum pipe_format format);
-
-bool
-ilo_format_support_sampler(const struct ilo_dev *dev,
-                           enum pipe_format format);
-
-bool
-ilo_format_support_rt(const struct ilo_dev *dev,
-                      enum pipe_format format);
-
-bool
-ilo_format_support_zs(const struct ilo_dev *dev,
-                      enum pipe_format format);
-
-int
-ilo_format_translate_color(const struct ilo_dev *dev,
-                           enum pipe_format format);
-
-/**
- * Translate a pipe format to a hardware surface format suitable for
- * the given purpose.  Return -1 on errors.
- *
- * This is an inline function not only for performance reasons.  There are
- * caveats that the callers should be aware of before calling this function.
- */
-static inline int
-ilo_format_translate(const struct ilo_dev *dev,
-                     enum pipe_format format, unsigned bind)
-{
-   switch (bind) {
-   case PIPE_BIND_RENDER_TARGET:
-      /*
-       * Some RGBX formats are not supported as render target formats.  But we
-       * can use their RGBA counterparts and force the destination alpha to be
-       * one when blending is enabled.
-       */
-      switch (format) {
-      case PIPE_FORMAT_B8G8R8X8_UNORM:
-         return GEN6_FORMAT_B8G8R8A8_UNORM;
-      default:
-         return ilo_format_translate_color(dev, format);
-      }
-      break;
-   case PIPE_BIND_SAMPLER_VIEW:
-      /*
-       * For depth formats, we want the depth values to be returned as R
-       * values.  But we assume in many places that the depth values are
-       * returned as I values (util_make_fragment_tex_shader_writedepth() is
-       * one such example).  We have to live with that at least for now.
-       *
-       * For ETC1 format, the texture data will be decompressed before being
-       * written to the bo.  See tex_staging_sys_convert_write().
-       */
-      switch (format) {
-      case PIPE_FORMAT_Z16_UNORM:
-         return GEN6_FORMAT_I16_UNORM;
-      case PIPE_FORMAT_Z32_FLOAT:
-         return GEN6_FORMAT_I32_FLOAT;
-      case PIPE_FORMAT_Z24X8_UNORM:
-      case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-         return GEN6_FORMAT_I24X8_UNORM;
-      case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
-         return GEN6_FORMAT_I32X32_FLOAT;
-      case PIPE_FORMAT_ETC1_RGB8:
-         return GEN6_FORMAT_R8G8B8X8_UNORM;
-      default:
-         return ilo_format_translate_color(dev, format);
-      }
-      break;
-   case PIPE_BIND_VERTEX_BUFFER:
-      if (ilo_dev_gen(dev) >= ILO_GEN(7.5))
-         return ilo_format_translate_color(dev, format);
-
-      /*
-       * Some 3-component formats are not supported as vertex element formats.
-       * But since we move between vertices using vb->stride, we should be
-       * good to use their 4-component counterparts if we force the W
-       * component to be one.  The only exception is that the vb boundary
-       * check for the last vertex may fail.
-       */
-      switch (format) {
-      case PIPE_FORMAT_R16G16B16_FLOAT:
-         return GEN6_FORMAT_R16G16B16A16_FLOAT;
-      case PIPE_FORMAT_R16G16B16_UINT:
-         return GEN6_FORMAT_R16G16B16A16_UINT;
-      case PIPE_FORMAT_R16G16B16_SINT:
-         return GEN6_FORMAT_R16G16B16A16_SINT;
-      case PIPE_FORMAT_R8G8B8_UINT:
-         return GEN6_FORMAT_R8G8B8A8_UINT;
-      case PIPE_FORMAT_R8G8B8_SINT:
-         return GEN6_FORMAT_R8G8B8A8_SINT;
-      default:
-         return ilo_format_translate_color(dev, format);
-      }
-      break;
-   case PIPE_BIND_STREAM_OUTPUT:
-      return ilo_format_translate_color(dev, format);
-      break;
-   default:
-      assert(!"cannot translate format");
-      break;
-   }
-
-   return -1;
-}
-
-static inline int
-ilo_format_translate_render(const struct ilo_dev *dev,
-                            enum pipe_format format)
-{
-   return ilo_format_translate(dev, format, PIPE_BIND_RENDER_TARGET);
-}
-
-static inline int
-ilo_format_translate_texture(const struct ilo_dev *dev,
-                             enum pipe_format format)
-{
-   return ilo_format_translate(dev, format, PIPE_BIND_SAMPLER_VIEW);
-}
-
-static inline int
-ilo_format_translate_vertex(const struct ilo_dev *dev,
-                            enum pipe_format format)
-{
-   return ilo_format_translate(dev, format, PIPE_BIND_VERTEX_BUFFER);
-}
-
-static inline enum gen_depth_format
-ilo_format_translate_depth(const struct ilo_dev *dev,
-                           enum pipe_format format)
-{
-   if (ilo_dev_gen(dev) >= ILO_GEN(7)) {
-      switch (format) {
-      case PIPE_FORMAT_Z32_FLOAT:
-         return GEN6_ZFORMAT_D32_FLOAT;
-      case PIPE_FORMAT_Z24X8_UNORM:
-         return GEN6_ZFORMAT_D24_UNORM_X8_UINT;
-      case PIPE_FORMAT_Z16_UNORM:
-         return GEN6_ZFORMAT_D16_UNORM;
-      default:
-         assert(!"unknown depth format");
-         return GEN6_ZFORMAT_D32_FLOAT;
-      }
-   } else {
-      switch (format) {
-      case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
-         return GEN6_ZFORMAT_D32_FLOAT_S8X24_UINT;
-      case PIPE_FORMAT_Z32_FLOAT:
-         return GEN6_ZFORMAT_D32_FLOAT;
-      case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-         return GEN6_ZFORMAT_D24_UNORM_S8_UINT;
-      case PIPE_FORMAT_Z24X8_UNORM:
-         return GEN6_ZFORMAT_D24_UNORM_X8_UINT;
-      case PIPE_FORMAT_Z16_UNORM:
-         return GEN6_ZFORMAT_D16_UNORM;
-      default:
-         assert(!"unknown depth format");
-         return GEN6_ZFORMAT_D32_FLOAT;
-      }
-   }
-}
-
-#endif /* ILO_FORMAT_H */
diff --git a/src/gallium/drivers/ilo/ilo_gpgpu.c b/src/gallium/drivers/ilo/ilo_gpgpu.c
deleted file mode 100644 (file)
index ab165b6..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_upload_mgr.h"
-#include "ilo_context.h"
-#include "ilo_render.h"
-#include "ilo_shader.h"
-#include "ilo_gpgpu.h"
-
-static void
-launch_grid(struct ilo_context *ilo,
-            const uint *block_layout, const uint *grid_layout,
-            const struct pipe_constant_buffer *input, uint32_t pc)
-{
-   const unsigned grid_offset[3] = { 0, 0, 0 };
-   const unsigned thread_group_size =
-      block_layout[0] * block_layout[1] * block_layout[2];
-   int max_len, before_space;
-
-   ilo_cp_set_owner(ilo->cp, INTEL_RING_RENDER, NULL);
-
-   max_len = ilo_render_get_launch_grid_len(ilo->render, &ilo->state_vector);
-   max_len += ilo_render_get_flush_len(ilo->render) * 2;
-
-   if (max_len > ilo_cp_space(ilo->cp)) {
-      ilo_cp_submit(ilo->cp, "out of space");
-      assert(max_len <= ilo_cp_space(ilo->cp));
-   }
-
-   before_space = ilo_cp_space(ilo->cp);
-
-   while (true) {
-      struct ilo_builder_snapshot snapshot;
-
-      ilo_builder_batch_snapshot(&ilo->cp->builder, &snapshot);
-
-      ilo_render_emit_launch_grid(ilo->render, &ilo->state_vector,
-            grid_offset, grid_layout, thread_group_size, input, pc);
-
-      if (!ilo_builder_validate(&ilo->cp->builder, 0, NULL)) {
-         ilo_builder_batch_restore(&ilo->cp->builder, &snapshot);
-
-         /* flush and try again */
-         if (ilo_builder_batch_used(&ilo->cp->builder)) {
-            ilo_cp_submit(ilo->cp, "out of aperture");
-            continue;
-         }
-      }
-
-      break;
-   }
-
-   /* sanity check size estimation */
-   assert(before_space - ilo_cp_space(ilo->cp) <= max_len);
-}
-
-static void
-ilo_launch_grid(struct pipe_context *pipe, const struct pipe_grid_info *info)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_shader_state *cs = ilo->state_vector.cs;
-   struct pipe_constant_buffer input_buf;
-
-   memset(&input_buf, 0, sizeof(input_buf));
-
-   input_buf.buffer_size =
-      ilo_shader_get_kernel_param(cs, ILO_KERNEL_CS_INPUT_SIZE);
-   if (input_buf.buffer_size) {
-      u_upload_data(ilo->uploader, 0, input_buf.buffer_size, 16, info->input,
-            &input_buf.buffer_offset, &input_buf.buffer);
-   }
-
-   ilo_shader_cache_upload(ilo->shader_cache, &ilo->cp->builder);
-
-   launch_grid(ilo, info->block, info->grid, &input_buf, info->pc);
-
-   ilo_render_invalidate_hw(ilo->render);
-
-   if (ilo_debug & ILO_DEBUG_NOCACHE)
-      ilo_render_emit_flush(ilo->render);
-
-   if (input_buf.buffer_size)
-      pipe_resource_reference(&input_buf.buffer, NULL);
-}
-
-/**
- * Initialize GPGPU-related functions.
- */
-void
-ilo_init_gpgpu_functions(struct ilo_context *ilo)
-{
-   ilo->base.launch_grid = ilo_launch_grid;
-}
diff --git a/src/gallium/drivers/ilo/ilo_gpgpu.h b/src/gallium/drivers/ilo/ilo_gpgpu.h
deleted file mode 100644 (file)
index d2ff1da..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_GPGPU_H
-#define ILO_GPGPU_H
-
-#include "ilo_common.h"
-
-struct ilo_context;
-
-void
-ilo_init_gpgpu_functions(struct ilo_context *ilo);
-
-#endif /* ILO_GPGPU_H */
diff --git a/src/gallium/drivers/ilo/ilo_public.h b/src/gallium/drivers/ilo/ilo_public.h
deleted file mode 100644 (file)
index 50d90dd..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_PUBLIC_H
-#define ILO_PUBLIC_H
-
-struct intel_winsys;
-struct pipe_screen;
-
-struct pipe_screen *
-ilo_screen_create(struct intel_winsys *ws);
-
-#endif /* ILO_PUBLIC_H */
diff --git a/src/gallium/drivers/ilo/ilo_query.c b/src/gallium/drivers/ilo/ilo_query.c
deleted file mode 100644 (file)
index 3088c96..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "core/intel_winsys.h"
-
-#include "ilo_context.h"
-#include "ilo_cp.h"
-#include "ilo_draw.h"
-#include "ilo_query.h"
-
-static const struct {
-   bool (*init)(struct ilo_context *ilo, struct ilo_query *q);
-   void (*begin)(struct ilo_context *ilo, struct ilo_query *q);
-   void (*end)(struct ilo_context *ilo, struct ilo_query *q);
-   void (*process)(struct ilo_context *ilo, struct ilo_query *q);
-} ilo_query_table[PIPE_QUERY_TYPES] = {
-#define INFO(mod) {                    \
-   .init = ilo_init_ ## mod ## _query,         \
-   .begin = ilo_begin_ ## mod ## _query,       \
-   .end = ilo_end_ ## mod ## _query,           \
-   .process = ilo_process_ ## mod ## _query,   \
-}
-#define INFOX(prefix) { NULL, NULL, NULL, NULL, }
-
-   [PIPE_QUERY_OCCLUSION_COUNTER]      = INFO(draw),
-   [PIPE_QUERY_OCCLUSION_PREDICATE]    = INFO(draw),
-   [PIPE_QUERY_TIMESTAMP]              = INFO(draw),
-   [PIPE_QUERY_TIMESTAMP_DISJOINT]     = INFOX(draw),
-   [PIPE_QUERY_TIME_ELAPSED]           = INFO(draw),
-   [PIPE_QUERY_PRIMITIVES_GENERATED]   = INFO(draw),
-   [PIPE_QUERY_PRIMITIVES_EMITTED]     = INFO(draw),
-   [PIPE_QUERY_SO_STATISTICS]          = INFOX(draw),
-   [PIPE_QUERY_SO_OVERFLOW_PREDICATE]  = INFOX(draw),
-   [PIPE_QUERY_GPU_FINISHED]           = INFOX(draw),
-   [PIPE_QUERY_PIPELINE_STATISTICS]    = INFO(draw),
-
-#undef INFO
-#undef INFOX
-};
-
-static inline struct ilo_query *
-ilo_query(struct pipe_query *query)
-{
-   return (struct ilo_query *) query;
-}
-
-static struct pipe_query *
-ilo_create_query(struct pipe_context *pipe, unsigned query_type, unsigned index)
-{
-   struct ilo_query *q;
-
-   switch (query_type) {
-   case PIPE_QUERY_OCCLUSION_COUNTER:
-   case PIPE_QUERY_OCCLUSION_PREDICATE:
-   case PIPE_QUERY_TIMESTAMP:
-   case PIPE_QUERY_TIME_ELAPSED:
-   case PIPE_QUERY_PRIMITIVES_GENERATED:
-   case PIPE_QUERY_PRIMITIVES_EMITTED:
-   case PIPE_QUERY_PIPELINE_STATISTICS:
-      break;
-   default:
-      return NULL;
-   }
-
-   q = CALLOC_STRUCT(ilo_query);
-   if (!q)
-      return NULL;
-
-   q->type = query_type;
-   q->index = index;
-
-   list_inithead(&q->list);
-
-   if (!ilo_query_table[q->type].init(ilo_context(pipe), q)) {
-      FREE(q);
-      return NULL;
-   }
-
-   return (struct pipe_query *) q;
-}
-
-static void
-ilo_destroy_query(struct pipe_context *pipe, struct pipe_query *query)
-{
-   struct ilo_query *q = ilo_query(query);
-
-   intel_bo_unref(q->bo);
-   FREE(q);
-}
-
-static boolean
-ilo_begin_query(struct pipe_context *pipe, struct pipe_query *query)
-{
-   struct ilo_query *q = ilo_query(query);
-
-   if (q->active)
-      return false;
-
-   util_query_clear_result(&q->result, q->type);
-   q->used = 0;
-   q->active = true;
-
-   ilo_query_table[q->type].begin(ilo_context(pipe), q);
-   return true;
-}
-
-static bool
-ilo_end_query(struct pipe_context *pipe, struct pipe_query *query)
-{
-   struct ilo_query *q = ilo_query(query);
-
-   if (!q->active) {
-      /* require ilo_begin_query() first */
-      if (q->in_pairs)
-         return false;
-
-      ilo_begin_query(pipe, query);
-   }
-
-   q->active = false;
-
-   ilo_query_table[q->type].end(ilo_context(pipe), q);
-
-   return true;
-}
-
-/**
- * Serialize the result.  The size of \p buf is
- * sizeof(union pipe_query_result).
- */
-static void
-query_serialize(const struct ilo_query *q, void *buf)
-{
-   switch (q->type) {
-   case PIPE_QUERY_OCCLUSION_COUNTER:
-   case PIPE_QUERY_TIMESTAMP:
-   case PIPE_QUERY_TIME_ELAPSED:
-   case PIPE_QUERY_PRIMITIVES_GENERATED:
-   case PIPE_QUERY_PRIMITIVES_EMITTED:
-      {
-         uint64_t *dst = buf;
-         dst[0] = q->result.u64;
-      }
-      break;
-   case PIPE_QUERY_OCCLUSION_PREDICATE:
-      {
-         uint64_t *dst = buf;
-         dst[0] = !!q->result.u64;
-      }
-      break;
-   case PIPE_QUERY_PIPELINE_STATISTICS:
-      {
-         const struct pipe_query_data_pipeline_statistics *stats =
-            &q->result.pipeline_statistics;
-         uint64_t *dst = buf;
-
-         dst[0] = stats->ia_vertices;
-         dst[1] = stats->ia_primitives;
-         dst[2] = stats->vs_invocations;
-         dst[3] = stats->gs_invocations;
-         dst[4] = stats->gs_primitives;
-         dst[5] = stats->c_invocations;
-         dst[6] = stats->c_primitives;
-         dst[7] = stats->ps_invocations;
-         dst[8] = stats->hs_invocations;
-         dst[9] = stats->ds_invocations;
-         dst[10] = stats->cs_invocations;
-      }
-      break;
-   default:
-      memset(buf, 0, sizeof(union pipe_query_result));
-      break;
-   }
-}
-
-static boolean
-ilo_get_query_result(struct pipe_context *pipe, struct pipe_query *query,
-                     boolean wait, union pipe_query_result *result)
-{
-   struct ilo_query *q = ilo_query(query);
-
-   if (q->active)
-      return false;
-
-   if (q->bo) {
-      struct ilo_cp *cp = ilo_context(pipe)->cp;
-
-      if (ilo_builder_has_reloc(&cp->builder, q->bo))
-         ilo_cp_submit(cp, "syncing for queries");
-
-      if (!wait && intel_bo_is_busy(q->bo))
-         return false;
-   }
-
-   ilo_query_table[q->type].process(ilo_context(pipe), q);
-
-   if (result)
-      query_serialize(q, (void *) result);
-
-   return true;
-}
-
-static void
-ilo_set_active_query_state(struct pipe_context *pipe, boolean enable)
-{
-}
-
-/**
- * Initialize query-related functions.
- */
-void
-ilo_init_query_functions(struct ilo_context *ilo)
-{
-   ilo->base.create_query = ilo_create_query;
-   ilo->base.destroy_query = ilo_destroy_query;
-   ilo->base.begin_query = ilo_begin_query;
-   ilo->base.end_query = ilo_end_query;
-   ilo->base.get_query_result = ilo_get_query_result;
-   ilo->base.set_active_query_state = ilo_set_active_query_state;
-}
diff --git a/src/gallium/drivers/ilo/ilo_query.h b/src/gallium/drivers/ilo/ilo_query.h
deleted file mode 100644 (file)
index e451e4e..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_QUERY_H
-#define ILO_QUERY_H
-
-#include "ilo_common.h"
-
-struct intel_bo;
-struct ilo_context;
-
-/**
- * Queries can be bound to various places in the driver.  While bound, it tells
- * the driver to collect the data indicated by the type of the query.
- */
-struct ilo_query {
-   unsigned type;
-   unsigned index;
-
-   struct list_head list;
-
-   bool active;
-
-   /* for queries that need to read hardware statistics */
-   int cmd_len; /* in dwords, as expected by ilo_cp */
-   bool in_pairs;
-   struct intel_bo *bo;
-   int stride, count;
-   int used;
-
-   /* storage for the collected data */
-   union pipe_query_result result;
-};
-
-void
-ilo_init_query_functions(struct ilo_context *ilo);
-
-#endif /* ILO_QUERY_H */
diff --git a/src/gallium/drivers/ilo/ilo_render.c b/src/gallium/drivers/ilo/ilo_render.c
deleted file mode 100644 (file)
index efb0a67..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h"
-#include "core/ilo_builder.h"
-#include "core/ilo_builder_mi.h"
-#include "core/ilo_builder_render.h"
-#include "core/intel_winsys.h"
-#include "util/u_prim.h"
-
-#include "ilo_query.h"
-#include "ilo_render_gen.h"
-
-struct ilo_render *
-ilo_render_create(struct ilo_builder *builder)
-{
-   struct ilo_render *render;
-
-   render = CALLOC_STRUCT(ilo_render);
-   if (!render)
-      return NULL;
-
-   render->dev = builder->dev;
-   render->builder = builder;
-
-   render->workaround_bo = intel_winsys_alloc_bo(builder->winsys,
-         "PIPE_CONTROL workaround", 4096, false);
-   if (!render->workaround_bo) {
-      ilo_warn("failed to allocate PIPE_CONTROL workaround bo\n");
-      FREE(render);
-      return NULL;
-   }
-
-   ilo_state_sample_pattern_init_default(&render->sample_pattern,
-         render->dev);
-
-   ilo_render_invalidate_hw(render);
-   ilo_render_invalidate_builder(render);
-
-   return render;
-}
-
-void
-ilo_render_destroy(struct ilo_render *render)
-{
-   intel_bo_unref(render->vs_scratch.bo);
-   intel_bo_unref(render->gs_scratch.bo);
-   intel_bo_unref(render->fs_scratch.bo);
-
-   intel_bo_unref(render->workaround_bo);
-   FREE(render);
-}
-
-static bool
-resize_scratch_space(struct ilo_render *render,
-                     struct ilo_render_scratch_space *scratch,
-                     const char *name, int new_size)
-{
-   struct intel_bo *bo;
-
-   if (scratch->size >= new_size)
-      return true;
-
-   bo = intel_winsys_alloc_bo(render->builder->winsys, name, new_size, false);
-   if (!bo)
-      return false;
-
-   intel_bo_unref(scratch->bo);
-   scratch->bo = bo;
-   scratch->size = new_size;
-
-   return true;
-}
-
-bool
-ilo_render_prepare_scratch_spaces(struct ilo_render *render,
-                                  int vs_scratch_size,
-                                  int gs_scratch_size,
-                                  int fs_scratch_size)
-{
-   return (resize_scratch_space(render, &render->vs_scratch,
-            "vs scratch", vs_scratch_size) &&
-           resize_scratch_space(render, &render->gs_scratch,
-            "gs scratch", gs_scratch_size) &&
-           resize_scratch_space(render, &render->fs_scratch,
-            "fs scratch", fs_scratch_size));
-}
-
-void
-ilo_render_get_sample_position(const struct ilo_render *render,
-                               unsigned sample_count,
-                               unsigned sample_index,
-                               float *x, float *y)
-{
-   uint8_t off_x, off_y;
-
-   ilo_state_sample_pattern_get_offset(&render->sample_pattern, render->dev,
-         sample_count, sample_index, &off_x, &off_y);
-
-   *x = (float) off_x / 16.0f;
-   *y = (float) off_y / 16.0f;
-}
-
-void
-ilo_render_invalidate_hw(struct ilo_render *render)
-{
-   render->hw_ctx_changed = true;
-}
-
-void
-ilo_render_invalidate_builder(struct ilo_render *render)
-{
-   render->batch_bo_changed = true;
-   render->state_bo_changed = true;
-   render->instruction_bo_changed = true;
-
-   /* Kernel flushes everything.  Shouldn't we set all bits here? */
-   render->state.current_pipe_control_dw1 = 0;
-}
-
-/**
- * Return the command length of ilo_render_emit_flush().
- */
-int
-ilo_render_get_flush_len(const struct ilo_render *render)
-{
-   int len;
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   len = GEN6_PIPE_CONTROL__SIZE;
-
-   /* plus gen6_wa_pre_pipe_control() */
-   if (ilo_dev_gen(render->dev) == ILO_GEN(6))
-      len *= 3;
-
-   return len;
-}
-
-/**
- * Emit PIPE_CONTROLs to flush all caches.
- */
-void
-ilo_render_emit_flush(struct ilo_render *render)
-{
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE |
-                        GEN6_PIPE_CONTROL_RENDER_CACHE_FLUSH |
-                        GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH |
-                        GEN6_PIPE_CONTROL_VF_CACHE_INVALIDATE |
-                        GEN6_PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
-                        GEN6_PIPE_CONTROL_CS_STALL;
-   const unsigned batch_used = ilo_builder_batch_used(render->builder);
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   if (ilo_dev_gen(render->dev) == ILO_GEN(6))
-      gen6_wa_pre_pipe_control(render, dw1);
-
-   ilo_render_pipe_control(render, dw1);
-
-   assert(ilo_builder_batch_used(render->builder) <= batch_used +
-         ilo_render_get_flush_len(render));
-}
-
-/**
- * Return the command length of ilo_render_emit_query().
- */
-int
-ilo_render_get_query_len(const struct ilo_render *render,
-                         unsigned query_type)
-{
-   int len;
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   /* always a flush or a variant of flush */
-   len = ilo_render_get_flush_len(render);
-
-   switch (query_type) {
-   case PIPE_QUERY_OCCLUSION_COUNTER:
-   case PIPE_QUERY_OCCLUSION_PREDICATE:
-   case PIPE_QUERY_TIMESTAMP:
-   case PIPE_QUERY_TIME_ELAPSED:
-      /* no reg */
-      break;
-   case PIPE_QUERY_PRIMITIVES_GENERATED:
-   case PIPE_QUERY_PRIMITIVES_EMITTED:
-      len += GEN6_MI_STORE_REGISTER_MEM__SIZE * 2;
-      break;
-   case PIPE_QUERY_PIPELINE_STATISTICS:
-      {
-         const int num_regs =
-            (ilo_dev_gen(render->dev) >= ILO_GEN(7)) ? 10 : 8;
-         const int num_pads =
-            (ilo_dev_gen(render->dev) >= ILO_GEN(7)) ? 1 : 3;
-
-         len += GEN6_MI_STORE_REGISTER_MEM__SIZE * 2 * num_regs +
-                GEN6_MI_STORE_DATA_IMM__SIZE * num_pads;
-      }
-      break;
-   default:
-      len = 0;
-      break;
-   }
-
-   return len;
-}
-
-/**
- * Emit PIPE_CONTROLs or MI_STORE_REGISTER_MEMs to store register values.
- */
-void
-ilo_render_emit_query(struct ilo_render *render,
-                      struct ilo_query *q, uint32_t offset)
-{
-   const uint32_t pipeline_statistics_regs[11] = {
-      GEN6_REG_IA_VERTICES_COUNT,
-      GEN6_REG_IA_PRIMITIVES_COUNT,
-      GEN6_REG_VS_INVOCATION_COUNT,
-      GEN6_REG_GS_INVOCATION_COUNT,
-      GEN6_REG_GS_PRIMITIVES_COUNT,
-      GEN6_REG_CL_INVOCATION_COUNT,
-      GEN6_REG_CL_PRIMITIVES_COUNT,
-      GEN6_REG_PS_INVOCATION_COUNT,
-      (ilo_dev_gen(render->dev) >= ILO_GEN(7)) ?
-         GEN7_REG_HS_INVOCATION_COUNT : 0,
-      (ilo_dev_gen(render->dev) >= ILO_GEN(7)) ?
-         GEN7_REG_DS_INVOCATION_COUNT : 0,
-      0,
-   };
-   const uint32_t primitives_generated_reg =
-      (ilo_dev_gen(render->dev) >= ILO_GEN(7) && q->index > 0) ?
-      GEN7_REG_SO_PRIM_STORAGE_NEEDED(q->index) :
-      GEN6_REG_CL_INVOCATION_COUNT;
-   const uint32_t primitives_emitted_reg =
-      (ilo_dev_gen(render->dev) >= ILO_GEN(7)) ?
-      GEN7_REG_SO_NUM_PRIMS_WRITTEN(q->index) :
-      GEN6_REG_SO_NUM_PRIMS_WRITTEN;
-   const unsigned batch_used = ilo_builder_batch_used(render->builder);
-   const uint32_t *regs;
-   int reg_count = 0, i;
-   uint32_t pipe_control_dw1 = 0;
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   switch (q->type) {
-   case PIPE_QUERY_OCCLUSION_COUNTER:
-   case PIPE_QUERY_OCCLUSION_PREDICATE:
-      pipe_control_dw1 = GEN6_PIPE_CONTROL_DEPTH_STALL |
-                         GEN6_PIPE_CONTROL_WRITE_PS_DEPTH_COUNT;
-      break;
-   case PIPE_QUERY_TIMESTAMP:
-   case PIPE_QUERY_TIME_ELAPSED:
-      pipe_control_dw1 = GEN6_PIPE_CONTROL_WRITE_TIMESTAMP;
-      break;
-   case PIPE_QUERY_PRIMITIVES_GENERATED:
-      regs = &primitives_generated_reg;
-      reg_count = 1;
-      break;
-   case PIPE_QUERY_PRIMITIVES_EMITTED:
-      regs = &primitives_emitted_reg;
-      reg_count = 1;
-      break;
-   case PIPE_QUERY_PIPELINE_STATISTICS:
-      regs = pipeline_statistics_regs;
-      reg_count = ARRAY_SIZE(pipeline_statistics_regs);
-      break;
-   default:
-      break;
-   }
-
-   if (pipe_control_dw1) {
-      assert(!reg_count);
-
-      if (ilo_dev_gen(render->dev) == ILO_GEN(6))
-         gen6_wa_pre_pipe_control(render, pipe_control_dw1);
-
-      gen6_PIPE_CONTROL(render->builder, pipe_control_dw1, q->bo, offset, 0);
-
-      render->state.current_pipe_control_dw1 |= pipe_control_dw1;
-      render->state.deferred_pipe_control_dw1 &= ~pipe_control_dw1;
-   } else if (reg_count) {
-      ilo_render_emit_flush(render);
-   }
-
-   for (i = 0; i < reg_count; i++) {
-      if (regs[i]) {
-         /* store lower 32 bits */
-         gen6_MI_STORE_REGISTER_MEM(render->builder, regs[i], q->bo, offset);
-         /* store higher 32 bits */
-         gen6_MI_STORE_REGISTER_MEM(render->builder, regs[i] + 4,
-               q->bo, offset + 4);
-      } else {
-         gen6_MI_STORE_DATA_IMM(render->builder, q->bo, offset, 0);
-      }
-
-      offset += 8;
-   }
-
-   assert(ilo_builder_batch_used(render->builder) <= batch_used +
-         ilo_render_get_query_len(render, q->type));
-}
-
-int
-ilo_render_get_rectlist_len(const struct ilo_render *render,
-                            const struct ilo_blitter *blitter)
-{
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   return ilo_render_get_rectlist_dynamic_states_len(render, blitter) +
-          ilo_render_get_rectlist_commands_len(render, blitter);
-}
-
-void
-ilo_render_emit_rectlist(struct ilo_render *render,
-                         const struct ilo_blitter *blitter)
-{
-   struct ilo_render_rectlist_session session;
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   memset(&session, 0, sizeof(session));
-   ilo_render_emit_rectlist_dynamic_states(render, blitter, &session);
-   ilo_render_emit_rectlist_commands(render, blitter, &session);
-}
-
-int
-ilo_render_get_draw_len(const struct ilo_render *render,
-                        const struct ilo_state_vector *vec)
-{
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   return ilo_render_get_draw_dynamic_states_len(render, vec) +
-          ilo_render_get_draw_surface_states_len(render, vec) +
-          ilo_render_get_draw_commands_len(render, vec);
-}
-
-static void
-draw_session_prepare(struct ilo_render *render,
-                     const struct ilo_state_vector *vec,
-                     struct ilo_render_draw_session *session)
-{
-   memset(session, 0, sizeof(*session));
-   session->pipe_dirty = vec->dirty;
-   session->reduced_prim = u_reduced_prim(vec->draw->mode);
-
-   if (render->hw_ctx_changed) {
-      /* these should be enough to make everything uploaded */
-      render->batch_bo_changed = true;
-      render->state_bo_changed = true;
-      render->instruction_bo_changed = true;
-
-      session->prim_changed = true;
-
-      ilo_state_urb_full_delta(&vec->urb, render->dev, &session->urb_delta);
-      ilo_state_vf_full_delta(&vec->ve->vf, render->dev, &session->vf_delta);
-
-      ilo_state_raster_full_delta(&vec->rasterizer->rs, render->dev,
-            &session->rs_delta);
-
-      ilo_state_viewport_full_delta(&vec->viewport.vp, render->dev,
-            &session->vp_delta);
-
-      ilo_state_cc_full_delta(&vec->blend->cc, render->dev,
-            &session->cc_delta);
-   } else {
-      session->prim_changed =
-         (render->state.reduced_prim != session->reduced_prim);
-
-      ilo_state_urb_get_delta(&vec->urb, render->dev,
-            &render->state.urb, &session->urb_delta);
-
-      if (vec->dirty & ILO_DIRTY_VE) {
-         ilo_state_vf_full_delta(&vec->ve->vf, render->dev,
-               &session->vf_delta);
-      }
-
-      if (vec->dirty & ILO_DIRTY_RASTERIZER) {
-         ilo_state_raster_get_delta(&vec->rasterizer->rs, render->dev,
-               &render->state.rs, &session->rs_delta);
-      }
-
-      if (vec->dirty & ILO_DIRTY_VIEWPORT) {
-         ilo_state_viewport_full_delta(&vec->viewport.vp, render->dev,
-               &session->vp_delta);
-      }
-
-      if (vec->dirty & ILO_DIRTY_BLEND) {
-         ilo_state_cc_get_delta(&vec->blend->cc, render->dev,
-               &render->state.cc, &session->cc_delta);
-      }
-   }
-}
-
-static void
-draw_session_end(struct ilo_render *render,
-                 const struct ilo_state_vector *vec,
-                 struct ilo_render_draw_session *session)
-{
-   render->hw_ctx_changed = false;
-
-   render->batch_bo_changed = false;
-   render->state_bo_changed = false;
-   render->instruction_bo_changed = false;
-
-   render->state.reduced_prim = session->reduced_prim;
-
-   render->state.urb = vec->urb;
-   render->state.rs = vec->rasterizer->rs;
-   render->state.cc = vec->blend->cc;
-}
-
-void
-ilo_render_emit_draw(struct ilo_render *render,
-                     const struct ilo_state_vector *vec)
-{
-   struct ilo_render_draw_session session;
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   draw_session_prepare(render, vec, &session);
-
-   /* force all states to be uploaded if the state bo changed */
-   if (render->state_bo_changed)
-      session.pipe_dirty = ILO_DIRTY_ALL;
-   else
-      session.pipe_dirty = vec->dirty;
-
-   ilo_render_emit_draw_dynamic_states(render, vec, &session);
-   ilo_render_emit_draw_surface_states(render, vec, &session);
-
-   /* force all commands to be uploaded if the HW context changed */
-   if (render->hw_ctx_changed)
-      session.pipe_dirty = ILO_DIRTY_ALL;
-   else
-      session.pipe_dirty = vec->dirty;
-
-   ilo_render_emit_draw_commands(render, vec, &session);
-
-   draw_session_end(render, vec, &session);
-}
-
-int
-ilo_render_get_launch_grid_len(const struct ilo_render *render,
-                               const struct ilo_state_vector *vec)
-{
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   return ilo_render_get_launch_grid_surface_states_len(render, vec) +
-          ilo_render_get_launch_grid_dynamic_states_len(render, vec) +
-          ilo_render_get_launch_grid_commands_len(render, vec);
-}
-
-void
-ilo_render_emit_launch_grid(struct ilo_render *render,
-                            const struct ilo_state_vector *vec,
-                            const unsigned thread_group_offset[3],
-                            const unsigned thread_group_dim[3],
-                            unsigned thread_group_size,
-                            const struct pipe_constant_buffer *input,
-                            uint32_t pc)
-{
-   struct ilo_render_launch_grid_session session;
-
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   assert(input->buffer);
-
-   memset(&session, 0, sizeof(session));
-
-   session.thread_group_offset = thread_group_offset;
-   session.thread_group_dim = thread_group_dim;
-   session.thread_group_size = thread_group_size;
-   session.input = input;
-   session.pc = pc;
-
-   ilo_render_emit_launch_grid_surface_states(render, vec, &session);
-   ilo_render_emit_launch_grid_dynamic_states(render, vec, &session);
-   ilo_render_emit_launch_grid_commands(render, vec, &session);
-}
diff --git a/src/gallium/drivers/ilo/ilo_render.h b/src/gallium/drivers/ilo/ilo_render.h
deleted file mode 100644 (file)
index 31fd1e6..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_RENDER_H
-#define ILO_RENDER_H
-
-#include "ilo_common.h"
-
-struct pipe_constant_buffer;
-struct ilo_blitter;
-struct ilo_builder;
-struct ilo_query;
-struct ilo_render;
-struct ilo_state_vector;
-
-struct ilo_render *
-ilo_render_create(struct ilo_builder *builder);
-
-void
-ilo_render_destroy(struct ilo_render *render);
-
-bool
-ilo_render_prepare_scratch_spaces(struct ilo_render *render,
-                                  int vs_scratch_size,
-                                  int gs_scratch_size,
-                                  int fs_scratch_size);
-
-void
-ilo_render_get_sample_position(const struct ilo_render *render,
-                               unsigned sample_count,
-                               unsigned sample_index,
-                               float *x, float *y);
-
-void
-ilo_render_invalidate_hw(struct ilo_render *render);
-
-void
-ilo_render_invalidate_builder(struct ilo_render *render);
-
-int
-ilo_render_get_flush_len(const struct ilo_render *render);
-
-void
-ilo_render_emit_flush(struct ilo_render *render);
-
-int
-ilo_render_get_query_len(const struct ilo_render *render,
-                         unsigned query_type);
-
-void
-ilo_render_emit_query(struct ilo_render *render,
-                      struct ilo_query *q, uint32_t offset);
-
-int
-ilo_render_get_rectlist_len(const struct ilo_render *render,
-                            const struct ilo_blitter *blitter);
-
-void
-ilo_render_emit_rectlist(struct ilo_render *render,
-                         const struct ilo_blitter *blitter);
-
-int
-ilo_render_get_draw_len(const struct ilo_render *render,
-                        const struct ilo_state_vector *vec);
-
-void
-ilo_render_emit_draw(struct ilo_render *render,
-                     const struct ilo_state_vector *vec);
-
-int
-ilo_render_get_launch_grid_len(const struct ilo_render *render,
-                               const struct ilo_state_vector *vec);
-
-void
-ilo_render_emit_launch_grid(struct ilo_render *render,
-                            const struct ilo_state_vector *vec,
-                            const unsigned thread_group_offset[3],
-                            const unsigned thread_group_dim[3],
-                            unsigned thread_group_size,
-                            const struct pipe_constant_buffer *input,
-                            uint32_t pc);
-
-#endif /* ILO_RENDER_H */
diff --git a/src/gallium/drivers/ilo/ilo_render_dynamic.c b/src/gallium/drivers/ilo/ilo_render_dynamic.c
deleted file mode 100644 (file)
index 813b80a..0000000
+++ /dev/null
@@ -1,605 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "core/ilo_builder_3d.h"
-#include "core/ilo_builder_media.h"
-
-#include "ilo_common.h"
-#include "ilo_blitter.h"
-#include "ilo_shader.h"
-#include "ilo_state.h"
-#include "ilo_render_gen.h"
-
-#define DIRTY(state) (session->pipe_dirty & ILO_DIRTY_ ## state)
-
-static void
-gen6_emit_draw_dynamic_viewports(struct ilo_render *r,
-                                 const struct ilo_state_vector *vec,
-                                 struct ilo_render_draw_session *session)
-{
-   ILO_DEV_ASSERT(r->dev, 6, 6);
-
-   /* CLIP_VIEWPORT, SF_VIEWPORT, and CC_VIEWPORT */
-   if ((session->vp_delta.dirty & (ILO_STATE_VIEWPORT_SF_CLIP_VIEWPORT |
-                                   ILO_STATE_VIEWPORT_CC_VIEWPORT)) ||
-       r->state_bo_changed) {
-      r->state.CLIP_VIEWPORT = gen6_CLIP_VIEWPORT(r->builder,
-            &vec->viewport.vp);
-      r->state.SF_VIEWPORT = gen6_SF_VIEWPORT(r->builder, &vec->viewport.vp);
-      r->state.CC_VIEWPORT = gen6_CC_VIEWPORT(r->builder, &vec->viewport.vp);
-
-      session->viewport_changed = true;
-   }
-}
-
-static void
-gen7_emit_draw_dynamic_viewports(struct ilo_render *r,
-                                 const struct ilo_state_vector *vec,
-                                 struct ilo_render_draw_session *session)
-{
-   ILO_DEV_ASSERT(r->dev, 7, 8);
-
-   /* SF_CLIP_VIEWPORT and CC_VIEWPORT */
-   if ((session->vp_delta.dirty & (ILO_STATE_VIEWPORT_SF_CLIP_VIEWPORT |
-                                   ILO_STATE_VIEWPORT_CC_VIEWPORT)) ||
-       r->state_bo_changed) {
-      r->state.SF_CLIP_VIEWPORT = gen7_SF_CLIP_VIEWPORT(r->builder,
-            &vec->viewport.vp);
-      r->state.CC_VIEWPORT = gen6_CC_VIEWPORT(r->builder, &vec->viewport.vp);
-
-      session->viewport_changed = true;
-   }
-}
-
-static void
-gen6_emit_draw_dynamic_scissors(struct ilo_render *r,
-                                const struct ilo_state_vector *vec,
-                                struct ilo_render_draw_session *session)
-{
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   /* SCISSOR_RECT */
-   if ((session->vp_delta.dirty & ILO_STATE_VIEWPORT_SCISSOR_RECT) ||
-       r->state_bo_changed) {
-      r->state.SCISSOR_RECT = gen6_SCISSOR_RECT(r->builder,
-            &vec->viewport.vp);
-
-      session->scissor_changed = true;
-   }
-}
-
-static void
-gen6_emit_draw_dynamic_cc(struct ilo_render *r,
-                          const struct ilo_state_vector *vec,
-                          struct ilo_render_draw_session *session)
-{
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   /* BLEND_STATE */
-   if ((session->cc_delta.dirty & ILO_STATE_CC_BLEND_STATE) ||
-        r->state_bo_changed) {
-      if (ilo_dev_gen(r->dev) >= ILO_GEN(8))
-         r->state.BLEND_STATE = gen8_BLEND_STATE(r->builder, &vec->blend->cc);
-      else
-         r->state.BLEND_STATE = gen6_BLEND_STATE(r->builder, &vec->blend->cc);
-
-      session->blend_changed = true;
-   }
-
-   /* COLOR_CALC_STATE */
-   if ((session->cc_delta.dirty & ILO_STATE_CC_COLOR_CALC_STATE) ||
-       r->state_bo_changed) {
-      r->state.COLOR_CALC_STATE =
-         gen6_COLOR_CALC_STATE(r->builder, &vec->blend->cc);
-      session->cc_changed = true;
-   }
-
-   /* DEPTH_STENCIL_STATE */
-   if (ilo_dev_gen(r->dev) < ILO_GEN(8) &&
-       ((session->cc_delta.dirty & ILO_STATE_CC_DEPTH_STENCIL_STATE) ||
-        r->state_bo_changed)) {
-      r->state.DEPTH_STENCIL_STATE =
-         gen6_DEPTH_STENCIL_STATE(r->builder, &vec->blend->cc);
-      session->dsa_changed = true;
-   }
-}
-
-static void
-gen6_emit_draw_dynamic_samplers(struct ilo_render *r,
-                                const struct ilo_state_vector *vec,
-                                int shader_type,
-                                struct ilo_render_draw_session *session)
-{
-   const struct ilo_view_cso * const *views =
-      (const struct ilo_view_cso **) vec->view[shader_type].states;
-   struct ilo_state_sampler samplers[ILO_MAX_SAMPLERS];
-   uint32_t *sampler_state, *border_color_state;
-   int sampler_count, i;
-   bool emit_border_color = false;
-   bool skip = false;
-
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   /* SAMPLER_BORDER_COLOR_STATE and SAMPLER_STATE */
-   switch (shader_type) {
-   case PIPE_SHADER_VERTEX:
-      if (DIRTY(VS) || DIRTY(SAMPLER_VS) || DIRTY(VIEW_VS)) {
-         sampler_state = &r->state.vs.SAMPLER_STATE;
-         border_color_state = r->state.vs.SAMPLER_BORDER_COLOR_STATE;
-
-         if (DIRTY(VS) || DIRTY(SAMPLER_VS))
-            emit_border_color = true;
-
-         sampler_count = (vec->vs) ? ilo_shader_get_kernel_param(vec->vs,
-               ILO_KERNEL_SAMPLER_COUNT) : 0;
-
-         session->sampler_vs_changed = true;
-      } else {
-         skip = true;
-      }
-      break;
-   case PIPE_SHADER_FRAGMENT:
-      if (DIRTY(FS) || DIRTY(SAMPLER_FS) || DIRTY(VIEW_FS)) {
-         sampler_state = &r->state.wm.SAMPLER_STATE;
-         border_color_state = r->state.wm.SAMPLER_BORDER_COLOR_STATE;
-
-         if (DIRTY(VS) || DIRTY(SAMPLER_FS))
-            emit_border_color = true;
-
-         sampler_count = (vec->fs) ? ilo_shader_get_kernel_param(vec->fs,
-               ILO_KERNEL_SAMPLER_COUNT) : 0;
-
-         session->sampler_fs_changed = true;
-      } else {
-         skip = true;
-      }
-      break;
-   default:
-      skip = true;
-      break;
-   }
-
-   if (skip)
-      return;
-
-   assert(sampler_count <= ARRAY_SIZE(vec->view[shader_type].states) &&
-          sampler_count <= ARRAY_SIZE(vec->sampler[shader_type].cso));
-
-   if (emit_border_color) {
-      for (i = 0; i < sampler_count; i++) {
-         const struct ilo_sampler_cso *cso = vec->sampler[shader_type].cso[i];
-
-         border_color_state[i] = (cso) ?
-            gen6_SAMPLER_BORDER_COLOR_STATE(r->builder, &cso->border) : 0;
-      }
-   }
-
-   for (i = 0; i < sampler_count; i++) {
-      const struct ilo_sampler_cso *cso = vec->sampler[shader_type].cso[i];
-
-      if (cso && views[i]) {
-         samplers[i] = cso->sampler;
-         ilo_state_sampler_set_surface(&samplers[i],
-               r->dev, &views[i]->surface);
-      } else {
-         samplers[i] = vec->disabled_sampler;
-      }
-   }
-
-   *sampler_state = gen6_SAMPLER_STATE(r->builder, samplers,
-         border_color_state, sampler_count);
-}
-
-static void
-gen6_emit_draw_dynamic_pcb(struct ilo_render *r,
-                           const struct ilo_state_vector *vec,
-                           struct ilo_render_draw_session *session)
-{
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   /* push constant buffer for VS */
-   if (DIRTY(VS) || DIRTY(CBUF) || DIRTY(CLIP)) {
-      const int cbuf0_size = (vec->vs) ?
-            ilo_shader_get_kernel_param(vec->vs,
-                  ILO_KERNEL_PCB_CBUF0_SIZE) : 0;
-      const int clip_state_size = (vec->vs) ?
-            ilo_shader_get_kernel_param(vec->vs,
-                  ILO_KERNEL_VS_PCB_UCP_SIZE) : 0;
-      const int total_size = cbuf0_size + clip_state_size;
-
-      if (total_size) {
-         void *pcb;
-
-         r->state.vs.PUSH_CONSTANT_BUFFER =
-            gen6_push_constant_buffer(r->builder, total_size, &pcb);
-         r->state.vs.PUSH_CONSTANT_BUFFER_size = total_size;
-
-         if (cbuf0_size) {
-            const struct ilo_cbuf_state *cbuf =
-               &vec->cbuf[PIPE_SHADER_VERTEX];
-
-            if (cbuf0_size <= cbuf->cso[0].info.size) {
-               memcpy(pcb, cbuf->cso[0].user_buffer, cbuf0_size);
-            } else {
-               memcpy(pcb, cbuf->cso[0].user_buffer,
-                     cbuf->cso[0].info.size);
-               memset(pcb + cbuf->cso[0].info.size, 0,
-                     cbuf0_size - cbuf->cso[0].info.size);
-            }
-
-            pcb += cbuf0_size;
-         }
-
-         if (clip_state_size)
-            memcpy(pcb, &vec->clip, clip_state_size);
-
-         session->pcb_vs_changed = true;
-      } else if (r->state.vs.PUSH_CONSTANT_BUFFER_size) {
-         r->state.vs.PUSH_CONSTANT_BUFFER = 0;
-         r->state.vs.PUSH_CONSTANT_BUFFER_size = 0;
-
-         session->pcb_vs_changed = true;
-      }
-   }
-
-   /* push constant buffer for FS */
-   if (DIRTY(FS) || DIRTY(CBUF)) {
-      const int cbuf0_size = (vec->fs) ?
-         ilo_shader_get_kernel_param(vec->fs, ILO_KERNEL_PCB_CBUF0_SIZE) : 0;
-
-      if (cbuf0_size) {
-         const struct ilo_cbuf_state *cbuf = &vec->cbuf[PIPE_SHADER_FRAGMENT];
-         void *pcb;
-
-         r->state.wm.PUSH_CONSTANT_BUFFER =
-            gen6_push_constant_buffer(r->builder, cbuf0_size, &pcb);
-         r->state.wm.PUSH_CONSTANT_BUFFER_size = cbuf0_size;
-
-         if (cbuf0_size <= cbuf->cso[0].info.size) {
-            memcpy(pcb, cbuf->cso[0].user_buffer, cbuf0_size);
-         } else {
-            memcpy(pcb, cbuf->cso[0].user_buffer,
-                  cbuf->cso[0].info.size);
-            memset(pcb + cbuf->cso[0].info.size, 0,
-                  cbuf0_size - cbuf->cso[0].info.size);
-         }
-
-         session->pcb_fs_changed = true;
-      } else if (r->state.wm.PUSH_CONSTANT_BUFFER_size) {
-         r->state.wm.PUSH_CONSTANT_BUFFER = 0;
-         r->state.wm.PUSH_CONSTANT_BUFFER_size = 0;
-
-         session->pcb_fs_changed = true;
-      }
-   }
-}
-
-#undef DIRTY
-
-int
-ilo_render_get_draw_dynamic_states_len(const struct ilo_render *render,
-                                       const struct ilo_state_vector *vec)
-{
-   static int static_len;
-   int sh_type, len;
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   if (!static_len) {
-      /* 64 bytes, or 16 dwords */
-      const int alignment = 64 / 4;
-
-      /* pad first */
-      len = alignment - 1;
-
-      /* CC states */
-      len += align(GEN6_BLEND_STATE__SIZE, alignment);
-      len += align(GEN6_COLOR_CALC_STATE__SIZE, alignment);
-      if (ilo_dev_gen(render->dev) < ILO_GEN(8))
-         len += align(GEN6_DEPTH_STENCIL_STATE__SIZE, alignment);
-
-      /* viewport arrays */
-      if (ilo_dev_gen(render->dev) >= ILO_GEN(7)) {
-         len += 15 + /* pad first */
-            align(GEN7_SF_CLIP_VIEWPORT__SIZE, 16) +
-            align(GEN6_CC_VIEWPORT__SIZE, 8) +
-            align(GEN6_SCISSOR_RECT__SIZE, 8);
-      } else {
-         len += 7 + /* pad first */
-            align(GEN6_SF_VIEWPORT__SIZE, 8) +
-            align(GEN6_CLIP_VIEWPORT__SIZE, 8) +
-            align(GEN6_CC_VIEWPORT__SIZE, 8) +
-            align(GEN6_SCISSOR_RECT__SIZE, 8);
-      }
-
-      static_len = len;
-   }
-
-   len = static_len;
-
-   for (sh_type = 0; sh_type < PIPE_SHADER_TYPES; sh_type++) {
-      const int alignment = 32 / 4;
-      int num_samplers = 0, pcb_len = 0;
-
-      switch (sh_type) {
-      case PIPE_SHADER_VERTEX:
-         if (vec->vs) {
-            num_samplers = ilo_shader_get_kernel_param(vec->vs,
-                  ILO_KERNEL_SAMPLER_COUNT);
-            pcb_len = ilo_shader_get_kernel_param(vec->vs,
-                  ILO_KERNEL_PCB_CBUF0_SIZE);
-            pcb_len += ilo_shader_get_kernel_param(vec->vs,
-                  ILO_KERNEL_VS_PCB_UCP_SIZE);
-         }
-         break;
-      case PIPE_SHADER_GEOMETRY:
-         break;
-      case PIPE_SHADER_FRAGMENT:
-         if (vec->fs) {
-            num_samplers = ilo_shader_get_kernel_param(vec->fs,
-                  ILO_KERNEL_SAMPLER_COUNT);
-            pcb_len = ilo_shader_get_kernel_param(vec->fs,
-                  ILO_KERNEL_PCB_CBUF0_SIZE);
-         }
-         break;
-      default:
-         break;
-      }
-
-      /* SAMPLER_STATE array and SAMPLER_BORDER_COLORs */
-      if (num_samplers) {
-         /* prefetches are done in multiples of 4 */
-         num_samplers = align(num_samplers, 4);
-
-         len += align(GEN6_SAMPLER_STATE__SIZE * num_samplers, alignment);
-
-         if (ilo_dev_gen(render->dev) >= ILO_GEN(8)) {
-            len += align(GEN6_SAMPLER_BORDER_COLOR_STATE__SIZE, 64 / 4) *
-               num_samplers;
-         } else {
-            len += align(GEN6_SAMPLER_BORDER_COLOR_STATE__SIZE, alignment) *
-               num_samplers;
-         }
-      }
-
-      /* PCB */
-      if (pcb_len)
-         len += align(pcb_len, alignment);
-   }
-
-   return len;
-}
-
-void
-ilo_render_emit_draw_dynamic_states(struct ilo_render *render,
-                                    const struct ilo_state_vector *vec,
-                                    struct ilo_render_draw_session *session)
-{
-   const unsigned dynamic_used = ilo_builder_dynamic_used(render->builder);
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   if (ilo_dev_gen(render->dev) >= ILO_GEN(7))
-      gen7_emit_draw_dynamic_viewports(render, vec, session);
-   else
-      gen6_emit_draw_dynamic_viewports(render, vec, session);
-
-   gen6_emit_draw_dynamic_cc(render, vec, session);
-   gen6_emit_draw_dynamic_scissors(render, vec, session);
-   gen6_emit_draw_dynamic_pcb(render, vec, session);
-
-   gen6_emit_draw_dynamic_samplers(render, vec,
-         PIPE_SHADER_VERTEX, session);
-   gen6_emit_draw_dynamic_samplers(render, vec,
-         PIPE_SHADER_FRAGMENT, session);
-
-   assert(ilo_builder_dynamic_used(render->builder) <= dynamic_used +
-         ilo_render_get_draw_dynamic_states_len(render, vec));
-}
-
-int
-ilo_render_get_rectlist_dynamic_states_len(const struct ilo_render *render,
-                                           const struct ilo_blitter *blitter)
-{
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   return (ilo_dev_gen(render->dev) >= ILO_GEN(8)) ? 0 : 96;
-}
-
-void
-ilo_render_emit_rectlist_dynamic_states(struct ilo_render *render,
-                                        const struct ilo_blitter *blitter,
-                                        struct ilo_render_rectlist_session *session)
-{
-   const unsigned dynamic_used = ilo_builder_dynamic_used(render->builder);
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   if (ilo_dev_gen(render->dev) >= ILO_GEN(8))
-      return;
-
-   /* both are inclusive */
-   session->vb_start = gen6_user_vertex_buffer(render->builder,
-         sizeof(blitter->vertices), (const void *) blitter->vertices);
-   session->vb_end = session->vb_start + sizeof(blitter->vertices) - 1;
-
-   if (blitter->uses & ILO_BLITTER_USE_DSA) {
-      render->state.DEPTH_STENCIL_STATE =
-         gen6_DEPTH_STENCIL_STATE(render->builder, &blitter->cc);
-   }
-
-   if (blitter->uses & ILO_BLITTER_USE_CC) {
-      render->state.COLOR_CALC_STATE =
-         gen6_COLOR_CALC_STATE(render->builder, &blitter->cc);
-   }
-
-   if (blitter->uses & ILO_BLITTER_USE_VIEWPORT) {
-      render->state.CC_VIEWPORT =
-         gen6_CC_VIEWPORT(render->builder, &blitter->vp);
-   }
-
-   assert(ilo_builder_dynamic_used(render->builder) <= dynamic_used +
-         ilo_render_get_rectlist_dynamic_states_len(render, blitter));
-}
-
-static void
-gen6_emit_launch_grid_dynamic_samplers(struct ilo_render *r,
-                                       const struct ilo_state_vector *vec,
-                                       struct ilo_render_launch_grid_session *session)
-{
-   const unsigned shader_type = PIPE_SHADER_COMPUTE;
-   const struct ilo_shader_state *cs = vec->cs;
-   const struct ilo_view_cso * const *views =
-      (const struct ilo_view_cso **) vec->view[shader_type].states;
-   struct ilo_state_sampler samplers[ILO_MAX_SAMPLERS];
-   int sampler_count, i;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   sampler_count = ilo_shader_get_kernel_param(cs, ILO_KERNEL_SAMPLER_COUNT);
-
-   assert(sampler_count <= ARRAY_SIZE(vec->view[shader_type].states) &&
-          sampler_count <= ARRAY_SIZE(vec->sampler[shader_type].cso));
-
-   for (i = 0; i < sampler_count; i++) {
-      const struct ilo_sampler_cso *cso = vec->sampler[shader_type].cso[i];
-
-      r->state.cs.SAMPLER_BORDER_COLOR_STATE[i] = (cso) ?
-         gen6_SAMPLER_BORDER_COLOR_STATE(r->builder, &cso->border) : 0;
-   }
-
-   for (i = 0; i < sampler_count; i++) {
-      const struct ilo_sampler_cso *cso = vec->sampler[shader_type].cso[i];
-
-      if (cso && views[i]) {
-         samplers[i] = cso->sampler;
-         ilo_state_sampler_set_surface(&samplers[i],
-               r->dev, &views[i]->surface);
-      } else {
-         samplers[i] = vec->disabled_sampler;
-      }
-   }
-
-   r->state.cs.SAMPLER_STATE = gen6_SAMPLER_STATE(r->builder, samplers,
-         r->state.cs.SAMPLER_BORDER_COLOR_STATE, sampler_count);
-}
-
-static void
-gen6_emit_launch_grid_dynamic_pcb(struct ilo_render *r,
-                                  const struct ilo_state_vector *vec,
-                                  struct ilo_render_launch_grid_session *session)
-{
-   r->state.cs.PUSH_CONSTANT_BUFFER = 0;
-   r->state.cs.PUSH_CONSTANT_BUFFER_size = 0;
-}
-
-static void
-gen6_emit_launch_grid_dynamic_idrt(struct ilo_render *r,
-                                   const struct ilo_state_vector *vec,
-                                   struct ilo_render_launch_grid_session *session)
-{
-   const struct ilo_shader_state *cs = vec->cs;
-   struct ilo_state_compute_interface_info interface;
-   struct ilo_state_compute_info info;
-   uint32_t kernel_offset;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   memset(&interface, 0, sizeof(interface));
-
-   interface.sampler_count =
-      ilo_shader_get_kernel_param(cs, ILO_KERNEL_SAMPLER_COUNT);
-   interface.surface_count =
-      ilo_shader_get_kernel_param(cs, ILO_KERNEL_SURFACE_TOTAL_COUNT);
-   interface.thread_group_size = session->thread_group_size;
-   interface.slm_size =
-      ilo_shader_get_kernel_param(cs, ILO_KERNEL_CS_LOCAL_SIZE);
-   interface.curbe_read_length = r->state.cs.PUSH_CONSTANT_BUFFER_size;
-
-   memset(&info, 0, sizeof(info));
-   info.data = session->compute_data;
-   info.data_size = sizeof(session->compute_data);
-   info.interfaces = &interface;
-   info.interface_count = 1;
-   info.cv_urb_alloc_size = r->dev->urb_size;
-   info.curbe_alloc_size = r->state.cs.PUSH_CONSTANT_BUFFER_size;
-
-   ilo_state_compute_init(&session->compute, r->dev, &info);
-
-   kernel_offset = ilo_shader_get_kernel_offset(cs);
-
-   session->idrt = gen6_INTERFACE_DESCRIPTOR_DATA(r->builder,
-         &session->compute, &kernel_offset,
-         &r->state.cs.SAMPLER_STATE, &r->state.cs.BINDING_TABLE_STATE);
-
-   session->idrt_size = 32;
-}
-
-int
-ilo_render_get_launch_grid_dynamic_states_len(const struct ilo_render *render,
-                                              const struct ilo_state_vector *vec)
-{
-   const int alignment = 32 / 4;
-   int num_samplers;
-   int len = 0;
-
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   num_samplers = ilo_shader_get_kernel_param(vec->cs,
-         ILO_KERNEL_SAMPLER_COUNT);
-
-   /* SAMPLER_STATE array and SAMPLER_BORDER_COLORs */
-   if (num_samplers) {
-      /* prefetches are done in multiples of 4 */
-      num_samplers = align(num_samplers, 4);
-
-      len += align(GEN6_SAMPLER_STATE__SIZE * num_samplers, alignment) +
-             align(GEN6_SAMPLER_BORDER_COLOR_STATE__SIZE, alignment) *
-             num_samplers;
-   }
-
-   len += GEN6_INTERFACE_DESCRIPTOR_DATA__SIZE;
-
-   return len;
-}
-
-void
-ilo_render_emit_launch_grid_dynamic_states(struct ilo_render *render,
-                                           const struct ilo_state_vector *vec,
-                                           struct ilo_render_launch_grid_session *session)
-{
-   const unsigned dynamic_used = ilo_builder_dynamic_used(render->builder);
-
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   gen6_emit_launch_grid_dynamic_samplers(render, vec, session);
-   gen6_emit_launch_grid_dynamic_pcb(render, vec, session);
-   gen6_emit_launch_grid_dynamic_idrt(render, vec, session);
-
-   assert(ilo_builder_dynamic_used(render->builder) <= dynamic_used +
-         ilo_render_get_launch_grid_dynamic_states_len(render, vec));
-}
diff --git a/src/gallium/drivers/ilo/ilo_render_gen.h b/src/gallium/drivers/ilo/ilo_render_gen.h
deleted file mode 100644 (file)
index f227d6b..0000000
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_RENDER_GEN_H
-#define ILO_RENDER_GEN_H
-
-#include "core/ilo_builder.h"
-#include "core/ilo_builder_3d.h"
-#include "core/ilo_builder_render.h"
-#include "core/ilo_state_raster.h"
-
-#include "ilo_common.h"
-#include "ilo_state.h"
-#include "ilo_render.h"
-
-struct ilo_bo;
-struct ilo_blitter;
-struct ilo_render;
-struct ilo_state_vector;
-
-/**
- * Render Engine.
- */
-struct ilo_render {
-   const struct ilo_dev *dev;
-   struct ilo_builder *builder;
-
-   struct intel_bo *workaround_bo;
-
-   struct ilo_render_scratch_space {
-      struct intel_bo *bo;
-      int size;
-   } vs_scratch, gs_scratch, fs_scratch;
-
-   struct ilo_state_sample_pattern sample_pattern;
-
-   bool hw_ctx_changed;
-
-   /*
-    * Any state that involves resources needs to be re-emitted when the
-    * batch bo changed.  This is because we do not pin the resources and
-    * their offsets (or existence) may change between batch buffers.
-    */
-   bool batch_bo_changed;
-   bool state_bo_changed;
-   bool instruction_bo_changed;
-
-   /**
-    * HW states.
-    */
-   struct ilo_render_state {
-      /*
-       * When a WA is needed before some command, we always emit the WA right
-       * before the command.  Knowing what have already been done since last
-       * 3DPRIMITIVE allows us to skip some WAs.
-       */
-      uint32_t current_pipe_control_dw1;
-
-      /*
-       * When a WA is needed after some command, we may have the WA follow the
-       * command immediately or defer it.  If this is non-zero, a PIPE_CONTROL
-       * will be emitted before 3DPRIMITIVE.
-       */
-      uint32_t deferred_pipe_control_dw1;
-
-      int reduced_prim;
-      int so_max_vertices;
-
-      struct ilo_state_urb urb;
-      struct ilo_state_raster rs;
-      struct ilo_state_cc cc;
-
-      uint32_t SF_VIEWPORT;
-      uint32_t CLIP_VIEWPORT;
-      uint32_t SF_CLIP_VIEWPORT; /* GEN7+ */
-      uint32_t CC_VIEWPORT;
-
-      uint32_t COLOR_CALC_STATE;
-      uint32_t BLEND_STATE;
-      uint32_t DEPTH_STENCIL_STATE;
-
-      uint32_t SCISSOR_RECT;
-
-      struct {
-         uint32_t BINDING_TABLE_STATE;
-         uint32_t SURFACE_STATE[ILO_MAX_SURFACES];
-         uint32_t SAMPLER_STATE;
-         uint32_t SAMPLER_BORDER_COLOR_STATE[ILO_MAX_SAMPLERS];
-         uint32_t PUSH_CONSTANT_BUFFER;
-         int PUSH_CONSTANT_BUFFER_size;
-      } vs;
-
-      struct {
-         uint32_t BINDING_TABLE_STATE;
-         uint32_t SURFACE_STATE[ILO_MAX_SURFACES];
-         bool active;
-      } gs;
-
-      struct {
-         uint32_t BINDING_TABLE_STATE;
-         uint32_t SURFACE_STATE[ILO_MAX_SURFACES];
-         uint32_t SAMPLER_STATE;
-         uint32_t SAMPLER_BORDER_COLOR_STATE[ILO_MAX_SAMPLERS];
-         uint32_t PUSH_CONSTANT_BUFFER;
-         int PUSH_CONSTANT_BUFFER_size;
-      } wm;
-
-      struct {
-         uint32_t BINDING_TABLE_STATE;
-         uint32_t SURFACE_STATE[ILO_MAX_SURFACES];
-         uint32_t SAMPLER_STATE;
-         uint32_t SAMPLER_BORDER_COLOR_STATE[ILO_MAX_SAMPLERS];
-         uint32_t PUSH_CONSTANT_BUFFER;
-         int PUSH_CONSTANT_BUFFER_size;
-      } cs;
-   } state;
-};
-
-struct ilo_render_draw_session {
-   uint32_t pipe_dirty;
-
-   /* commands */
-   int reduced_prim;
-
-   bool prim_changed;
-
-   struct ilo_state_urb_delta urb_delta;
-   struct ilo_state_vf_delta vf_delta;
-   struct ilo_state_raster_delta rs_delta;
-   struct ilo_state_viewport_delta vp_delta;
-   struct ilo_state_cc_delta cc_delta;
-
-   /* dynamic states */
-   bool viewport_changed;
-   bool scissor_changed;
-
-   bool cc_changed;
-   bool dsa_changed;
-   bool blend_changed;
-
-   bool sampler_vs_changed;
-   bool sampler_gs_changed;
-   bool sampler_fs_changed;
-
-   bool pcb_vs_changed;
-   bool pcb_gs_changed;
-   bool pcb_fs_changed;
-
-   /* surface states */
-   bool binding_table_vs_changed;
-   bool binding_table_gs_changed;
-   bool binding_table_fs_changed;
-};
-
-struct ilo_render_rectlist_session {
-   uint32_t vb_start;
-   uint32_t vb_end;
-};
-
-struct ilo_render_launch_grid_session {
-   const unsigned *thread_group_offset;
-   const unsigned *thread_group_dim;
-   unsigned thread_group_size;
-   const struct pipe_constant_buffer *input;
-   uint32_t pc;
-
-   uint32_t idrt;
-   int idrt_size;
-
-   uint32_t compute_data[6];
-   struct ilo_state_compute compute;
-};
-
-int
-ilo_render_get_draw_commands_len_gen6(const struct ilo_render *render,
-                                      const struct ilo_state_vector *vec);
-
-int
-ilo_render_get_draw_commands_len_gen7(const struct ilo_render *render,
-                                      const struct ilo_state_vector *vec);
-
-int
-ilo_render_get_draw_commands_len_gen8(const struct ilo_render *render,
-                                      const struct ilo_state_vector *vec);
-
-static inline int
-ilo_render_get_draw_commands_len(const struct ilo_render *render,
-                                 const struct ilo_state_vector *vec)
-{
-   if (ilo_dev_gen(render->dev) >= ILO_GEN(8))
-      return ilo_render_get_draw_commands_len_gen8(render, vec);
-   else if (ilo_dev_gen(render->dev) >= ILO_GEN(7))
-      return ilo_render_get_draw_commands_len_gen7(render, vec);
-   else
-      return ilo_render_get_draw_commands_len_gen6(render, vec);
-}
-
-void
-ilo_render_emit_draw_commands_gen6(struct ilo_render *render,
-                                   const struct ilo_state_vector *vec,
-                                   struct ilo_render_draw_session *session);
-
-void
-ilo_render_emit_draw_commands_gen7(struct ilo_render *render,
-                                   const struct ilo_state_vector *vec,
-                                   struct ilo_render_draw_session *session);
-
-void
-ilo_render_emit_draw_commands_gen8(struct ilo_render *render,
-                                   const struct ilo_state_vector *vec,
-                                   struct ilo_render_draw_session *session);
-
-static inline void
-ilo_render_emit_draw_commands(struct ilo_render *render,
-                              const struct ilo_state_vector *vec,
-                              struct ilo_render_draw_session *session)
-{
-   const unsigned batch_used = ilo_builder_batch_used(render->builder);
-
-   if (ilo_dev_gen(render->dev) >= ILO_GEN(8))
-      ilo_render_emit_draw_commands_gen8(render, vec, session);
-   else if (ilo_dev_gen(render->dev) >= ILO_GEN(7))
-      ilo_render_emit_draw_commands_gen7(render, vec, session);
-   else
-      ilo_render_emit_draw_commands_gen6(render, vec, session);
-
-   assert(ilo_builder_batch_used(render->builder) <= batch_used +
-         ilo_render_get_draw_commands_len(render, vec));
-}
-
-int
-ilo_render_get_rectlist_commands_len_gen6(const struct ilo_render *render,
-                                          const struct ilo_blitter *blitter);
-
-int
-ilo_render_get_rectlist_commands_len_gen8(const struct ilo_render *render,
-                                          const struct ilo_blitter *blitter);
-
-static inline int
-ilo_render_get_rectlist_commands_len(const struct ilo_render *render,
-                                     const struct ilo_blitter *blitter)
-{
-   if (ilo_dev_gen(render->dev) >= ILO_GEN(8))
-      return ilo_render_get_rectlist_commands_len_gen8(render, blitter);
-   else
-      return ilo_render_get_rectlist_commands_len_gen6(render, blitter);
-}
-
-void
-ilo_render_emit_rectlist_commands_gen6(struct ilo_render *r,
-                                       const struct ilo_blitter *blitter,
-                                       const struct ilo_render_rectlist_session *session);
-
-void
-ilo_render_emit_rectlist_commands_gen7(struct ilo_render *r,
-                                       const struct ilo_blitter *blitter,
-                                       const struct ilo_render_rectlist_session *session);
-
-void
-ilo_render_emit_rectlist_commands_gen8(struct ilo_render *r,
-                                       const struct ilo_blitter *blitter,
-                                       const struct ilo_render_rectlist_session *session);
-
-static inline void
-ilo_render_emit_rectlist_commands(struct ilo_render *render,
-                                  const struct ilo_blitter *blitter,
-                                  const struct ilo_render_rectlist_session *session)
-{
-   const unsigned batch_used = ilo_builder_batch_used(render->builder);
-
-   if (ilo_dev_gen(render->dev) >= ILO_GEN(8))
-      ilo_render_emit_rectlist_commands_gen8(render, blitter, session);
-   else if (ilo_dev_gen(render->dev) >= ILO_GEN(7))
-      ilo_render_emit_rectlist_commands_gen7(render, blitter, session);
-   else
-      ilo_render_emit_rectlist_commands_gen6(render, blitter, session);
-
-   assert(ilo_builder_batch_used(render->builder) <= batch_used +
-         ilo_render_get_rectlist_commands_len(render, blitter));
-}
-
-int
-ilo_render_get_launch_grid_commands_len(const struct ilo_render *render,
-                                        const struct ilo_state_vector *vec);
-
-void
-ilo_render_emit_launch_grid_commands(struct ilo_render *render,
-                                     const struct ilo_state_vector *vec,
-                                     const struct ilo_render_launch_grid_session *session);
-
-int
-ilo_render_get_draw_dynamic_states_len(const struct ilo_render *render,
-                                       const struct ilo_state_vector *vec);
-
-void
-ilo_render_emit_draw_dynamic_states(struct ilo_render *render,
-                                    const struct ilo_state_vector *vec,
-                                    struct ilo_render_draw_session *session);
-
-int
-ilo_render_get_rectlist_dynamic_states_len(const struct ilo_render *render,
-                                           const struct ilo_blitter *blitter);
-
-void
-ilo_render_emit_rectlist_dynamic_states(struct ilo_render *render,
-                                        const struct ilo_blitter *blitter,
-                                        struct ilo_render_rectlist_session *session);
-
-int
-ilo_render_get_launch_grid_dynamic_states_len(const struct ilo_render *render,
-                                              const struct ilo_state_vector *vec);
-
-void
-ilo_render_emit_launch_grid_dynamic_states(struct ilo_render *render,
-                                           const struct ilo_state_vector *vec,
-                                           struct ilo_render_launch_grid_session *session);
-
-int
-ilo_render_get_draw_surface_states_len(const struct ilo_render *render,
-                                       const struct ilo_state_vector *vec);
-
-void
-ilo_render_emit_draw_surface_states(struct ilo_render *render,
-                                    const struct ilo_state_vector *vec,
-                                    struct ilo_render_draw_session *session);
-
-int
-ilo_render_get_launch_grid_surface_states_len(const struct ilo_render *render,
-                                              const struct ilo_state_vector *vec);
-
-void
-ilo_render_emit_launch_grid_surface_states(struct ilo_render *render,
-                                           const struct ilo_state_vector *vec,
-                                           struct ilo_render_launch_grid_session *session);
-
-/**
- * A convenient wrapper for gen6_PIPE_CONTROL().  This should be enough for
- * our needs everywhere except for queries.
- */
-static inline void
-ilo_render_pipe_control(struct ilo_render *r, uint32_t dw1)
-{
-   const uint32_t write_mask = (dw1 & GEN6_PIPE_CONTROL_WRITE__MASK);
-   struct intel_bo *bo = (write_mask) ? r->workaround_bo : NULL;
-
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   if (write_mask)
-      assert(write_mask == GEN6_PIPE_CONTROL_WRITE_IMM);
-
-   if (dw1 & GEN6_PIPE_CONTROL_CS_STALL) {
-      /* CS stall cannot be set alone */
-      const uint32_t mask = GEN6_PIPE_CONTROL_RENDER_CACHE_FLUSH |
-                            GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH |
-                            GEN6_PIPE_CONTROL_PIXEL_SCOREBOARD_STALL |
-                            GEN6_PIPE_CONTROL_DEPTH_STALL |
-                            GEN6_PIPE_CONTROL_WRITE__MASK;
-      if (!(dw1 & mask))
-         dw1 |= GEN6_PIPE_CONTROL_PIXEL_SCOREBOARD_STALL;
-   }
-
-   gen6_PIPE_CONTROL(r->builder, dw1, bo, 0, 0);
-
-   r->state.current_pipe_control_dw1 |= dw1;
-   r->state.deferred_pipe_control_dw1 &= ~dw1;
-}
-
-/**
- * A convenient wrapper for gen{6,7}_3DPRIMITIVE().
- */
-static inline void
-ilo_render_3dprimitive(struct ilo_render *r,
-                       const struct gen6_3dprimitive_info *info)
-{
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   if (r->state.deferred_pipe_control_dw1)
-      ilo_render_pipe_control(r, r->state.deferred_pipe_control_dw1);
-
-   /* 3DPRIMITIVE */
-   if (ilo_dev_gen(r->dev) >= ILO_GEN(7))
-      gen7_3DPRIMITIVE(r->builder, info);
-   else
-      gen6_3DPRIMITIVE(r->builder, info);
-
-   r->state.current_pipe_control_dw1 = 0;
-   assert(!r->state.deferred_pipe_control_dw1);
-}
-
-void
-gen6_wa_pre_pipe_control(struct ilo_render *r, uint32_t dw1);
-
-void
-gen6_draw_common_select(struct ilo_render *r,
-                        const struct ilo_state_vector *ilo,
-                        struct ilo_render_draw_session *session);
-
-void
-gen6_draw_common_sip(struct ilo_render *r,
-                     const struct ilo_state_vector *ilo,
-                     struct ilo_render_draw_session *session);
-
-void
-gen6_draw_common_base_address(struct ilo_render *r,
-                              const struct ilo_state_vector *ilo,
-                              struct ilo_render_draw_session *session);
-
-void
-gen6_draw_vf(struct ilo_render *r,
-             const struct ilo_state_vector *ilo,
-             struct ilo_render_draw_session *session);
-
-void
-gen6_draw_vf_statistics(struct ilo_render *r,
-                        const struct ilo_state_vector *ilo,
-                        struct ilo_render_draw_session *session);
-
-void
-gen6_draw_vs(struct ilo_render *r,
-             const struct ilo_state_vector *ilo,
-             struct ilo_render_draw_session *session);
-
-void
-gen6_draw_clip(struct ilo_render *r,
-               const struct ilo_state_vector *ilo,
-               struct ilo_render_draw_session *session);
-
-void
-gen6_draw_sf_rect(struct ilo_render *r,
-                  const struct ilo_state_vector *ilo,
-                  struct ilo_render_draw_session *session);
-
-void
-gen6_draw_wm_raster(struct ilo_render *r,
-                    const struct ilo_state_vector *ilo,
-                    struct ilo_render_draw_session *session);
-
-void
-gen7_draw_common_pcb_alloc(struct ilo_render *r,
-                           const struct ilo_state_vector *vec,
-                           struct ilo_render_draw_session *session);
-
-void
-gen7_draw_common_pointers_1(struct ilo_render *r,
-                            const struct ilo_state_vector *vec,
-                            struct ilo_render_draw_session *session);
-
-void
-gen7_draw_common_urb(struct ilo_render *r,
-                     const struct ilo_state_vector *vec,
-                     struct ilo_render_draw_session *session);
-
-void
-gen7_draw_common_pointers_2(struct ilo_render *r,
-                            const struct ilo_state_vector *vec,
-                            struct ilo_render_draw_session *session);
-
-void
-gen7_draw_vs(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session);
-
-void
-gen7_draw_ds(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session);
-
-void
-gen7_draw_te(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session);
-
-void
-gen7_draw_hs(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session);
-
-void
-gen7_draw_gs(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session);
-
-void
-gen7_draw_sol(struct ilo_render *r,
-              const struct ilo_state_vector *vec,
-              struct ilo_render_draw_session *session);
-
-#endif /* ILO_RENDER_GEN_H */
diff --git a/src/gallium/drivers/ilo/ilo_render_gen6.c b/src/gallium/drivers/ilo/ilo_render_gen6.c
deleted file mode 100644 (file)
index 910e6c0..0000000
+++ /dev/null
@@ -1,984 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h"
-#include "core/ilo_builder_3d.h"
-#include "core/ilo_builder_mi.h"
-#include "core/ilo_builder_render.h"
-#include "util/u_prim.h"
-
-#include "ilo_blitter.h"
-#include "ilo_query.h"
-#include "ilo_resource.h"
-#include "ilo_shader.h"
-#include "ilo_state.h"
-#include "ilo_render_gen.h"
-
-/**
- * This should be called before PIPE_CONTROL.
- */
-void
-gen6_wa_pre_pipe_control(struct ilo_render *r, uint32_t dw1)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 60:
-    *
-    *     "Pipe-control with CS-stall bit set must be sent BEFORE the
-    *      pipe-control with a post-sync op and no write-cache flushes."
-    *
-    * This WA may also be triggered indirectly by the other two WAs on the
-    * same page:
-    *
-    *     "Before any depth stall flush (including those produced by
-    *      non-pipelined state commands), software needs to first send a
-    *      PIPE_CONTROL with no bits set except Post-Sync Operation != 0."
-    *
-    *     "Before a PIPE_CONTROL with Write Cache Flush Enable =1, a
-    *      PIPE_CONTROL with any non-zero post-sync-op is required."
-    */
-   const bool direct_wa_cond = (dw1 & GEN6_PIPE_CONTROL_WRITE__MASK) &&
-                               !(dw1 & GEN6_PIPE_CONTROL_RENDER_CACHE_FLUSH);
-   const bool indirect_wa_cond = (dw1 & GEN6_PIPE_CONTROL_DEPTH_STALL) |
-                                 (dw1 & GEN6_PIPE_CONTROL_RENDER_CACHE_FLUSH);
-
-   ILO_DEV_ASSERT(r->dev, 6, 6);
-
-   if (!direct_wa_cond && !indirect_wa_cond)
-      return;
-
-   if (!(r->state.current_pipe_control_dw1 & GEN6_PIPE_CONTROL_CS_STALL)) {
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 73:
-       *
-       *     "1 of the following must also be set (when CS stall is set):
-       *
-       *       - Depth Cache Flush Enable ([0] of DW1)
-       *       - Stall at Pixel Scoreboard ([1] of DW1)
-       *       - Depth Stall ([13] of DW1)
-       *       - Post-Sync Operation ([13] of DW1)
-       *       - Render Target Cache Flush Enable ([12] of DW1)
-       *       - Notify Enable ([8] of DW1)"
-       *
-       * Because of the WAs above, we have to pick Stall at Pixel Scoreboard.
-       */
-      const uint32_t direct_wa = GEN6_PIPE_CONTROL_CS_STALL |
-                                 GEN6_PIPE_CONTROL_PIXEL_SCOREBOARD_STALL;
-
-      ilo_render_pipe_control(r, direct_wa);
-   }
-
-   if (indirect_wa_cond &&
-       !(r->state.current_pipe_control_dw1 & GEN6_PIPE_CONTROL_WRITE__MASK)) {
-      const uint32_t indirect_wa = GEN6_PIPE_CONTROL_WRITE_IMM;
-
-      ilo_render_pipe_control(r, indirect_wa);
-   }
-}
-
-/**
- * This should be called before any non-pipelined state command.
- */
-static void
-gen6_wa_pre_non_pipelined(struct ilo_render *r)
-{
-   ILO_DEV_ASSERT(r->dev, 6, 6);
-
-   /* non-pipelined state commands produce depth stall */
-   gen6_wa_pre_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_STALL);
-}
-
-static void
-gen6_wa_post_3dstate_urb_no_gs(struct ilo_render *r)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 27:
-    *
-    *     "Because of a urb corruption caused by allocating a previous
-    *      gsunit's urb entry to vsunit software is required to send a
-    *      "GS NULL Fence" (Send URB fence with VS URB size == 1 and GS URB
-    *      size == 0) plus a dummy DRAW call before any case where VS will
-    *      be taking over GS URB space."
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_CS_STALL;
-
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      gen6_wa_pre_pipe_control(r, dw1);
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      ilo_render_pipe_control(r, dw1);
-}
-
-static void
-gen6_wa_post_3dstate_constant_vs(struct ilo_render *r)
-{
-   /*
-    * According to upload_vs_state() of the classic driver, we need to emit a
-    * PIPE_CONTROL after 3DSTATE_CONSTANT_VS, otherwise the command is kept
-    * being buffered by VS FF, to the point that the FF dies.
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_DEPTH_STALL |
-                        GEN6_PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE |
-                        GEN6_PIPE_CONTROL_STATE_CACHE_INVALIDATE;
-
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      gen6_wa_pre_pipe_control(r, dw1);
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      ilo_render_pipe_control(r, dw1);
-}
-
-static void
-gen6_wa_pre_3dstate_vs_toggle(struct ilo_render *r)
-{
-   /*
-    * The classic driver has this undocumented WA:
-    *
-    * From the BSpec, 3D Pipeline > Geometry > Vertex Shader > State,
-    * 3DSTATE_VS, Dword 5.0 "VS Function Enable":
-    *
-    *   [DevSNB] A pipeline flush must be programmed prior to a 3DSTATE_VS
-    *   command that causes the VS Function Enable to toggle. Pipeline
-    *   flush can be executed by sending a PIPE_CONTROL command with CS
-    *   stall bit set and a post sync operation.
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_WRITE_IMM |
-                        GEN6_PIPE_CONTROL_CS_STALL;
-
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      gen6_wa_pre_pipe_control(r, dw1);
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      ilo_render_pipe_control(r, dw1);
-}
-
-static void
-gen6_wa_pre_3dstate_wm_max_threads(struct ilo_render *r)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 274:
-    *
-    *     "A PIPE_CONTROL command, with only the Stall At Pixel Scoreboard
-    *      field set (DW1 Bit 1), must be issued prior to any change to the
-    *      value in this field (Maximum Number of Threads in 3DSTATE_WM)"
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_PIXEL_SCOREBOARD_STALL;
-
-   ILO_DEV_ASSERT(r->dev, 6, 6);
-
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      gen6_wa_pre_pipe_control(r, dw1);
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      ilo_render_pipe_control(r, dw1);
-}
-
-static void
-gen6_wa_pre_3dstate_multisample(struct ilo_render *r)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 305:
-    *
-    *     "Driver must guarentee that all the caches in the depth pipe are
-    *      flushed before this command (3DSTATE_MULTISAMPLE) is parsed. This
-    *      requires driver to send a PIPE_CONTROL with a CS stall along with a
-    *      Depth Flush prior to this command."
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH |
-                        GEN6_PIPE_CONTROL_CS_STALL;
-
-   ILO_DEV_ASSERT(r->dev, 6, 6);
-
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      gen6_wa_pre_pipe_control(r, dw1);
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      ilo_render_pipe_control(r, dw1);
-}
-
-static void
-gen6_wa_pre_depth(struct ilo_render *r)
-{
-   ILO_DEV_ASSERT(r->dev, 6, 6);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 315:
-    *
-    *     "Restriction: Prior to changing Depth/Stencil Buffer state (i.e.,
-    *      any combination of 3DSTATE_DEPTH_BUFFER, 3DSTATE_CLEAR_PARAMS,
-    *      3DSTATE_STENCIL_BUFFER, 3DSTATE_HIER_DEPTH_BUFFER) SW must first
-    *      issue a pipelined depth stall (PIPE_CONTROL with Depth Stall bit
-    *      set), followed by a pipelined depth cache flush (PIPE_CONTROL with
-    *      Depth Flush Bit set, followed by another pipelined depth stall
-    *      (PIPE_CONTROL with Depth Stall Bit set), unless SW can otherwise
-    *      guarantee that the pipeline from WM onwards is already flushed
-    *      (e.g., via a preceding MI_FLUSH)."
-    *
-    * According to the classic driver, it also applies for GEN6.
-    */
-   gen6_wa_pre_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_STALL |
-                               GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH);
-
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_STALL);
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH);
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_STALL);
-}
-
-#define DIRTY(state) (session->pipe_dirty & ILO_DIRTY_ ## state)
-
-void
-gen6_draw_common_select(struct ilo_render *r,
-                        const struct ilo_state_vector *vec,
-                        struct ilo_render_draw_session *session)
-{
-   /* PIPELINE_SELECT */
-   if (r->hw_ctx_changed) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_pre_non_pipelined(r);
-
-      gen6_PIPELINE_SELECT(r->builder, 0x0);
-   }
-}
-
-void
-gen6_draw_common_sip(struct ilo_render *r,
-                     const struct ilo_state_vector *vec,
-                     struct ilo_render_draw_session *session)
-{
-   /* STATE_SIP */
-   if (r->hw_ctx_changed) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_pre_non_pipelined(r);
-
-      gen6_STATE_SIP(r->builder, 0);
-   }
-}
-
-void
-gen6_draw_common_base_address(struct ilo_render *r,
-                              const struct ilo_state_vector *vec,
-                              struct ilo_render_draw_session *session)
-{
-   /* STATE_BASE_ADDRESS */
-   if (r->state_bo_changed || r->instruction_bo_changed ||
-       r->batch_bo_changed) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_pre_non_pipelined(r);
-
-      if (ilo_dev_gen(r->dev) >= ILO_GEN(8))
-         gen8_state_base_address(r->builder, r->hw_ctx_changed);
-      else
-         gen6_state_base_address(r->builder, r->hw_ctx_changed);
-
-      /*
-       * From the Sandy Bridge PRM, volume 1 part 1, page 28:
-       *
-       *     "The following commands must be reissued following any change to
-       *      the base addresses:
-       *
-       *       * 3DSTATE_BINDING_TABLE_POINTERS
-       *       * 3DSTATE_SAMPLER_STATE_POINTERS
-       *       * 3DSTATE_VIEWPORT_STATE_POINTERS
-       *       * 3DSTATE_CC_POINTERS
-       *       * MEDIA_STATE_POINTERS"
-       *
-       * 3DSTATE_SCISSOR_STATE_POINTERS is not on the list, but it is
-       * reasonable to also reissue the command.  Same to PCB.
-       */
-      session->viewport_changed = true;
-
-      session->scissor_changed = true;
-
-      session->blend_changed = true;
-      session->dsa_changed = true;
-      session->cc_changed = true;
-
-      session->sampler_vs_changed = true;
-      session->sampler_gs_changed = true;
-      session->sampler_fs_changed = true;
-
-      session->pcb_vs_changed = true;
-      session->pcb_gs_changed = true;
-      session->pcb_fs_changed = true;
-
-      session->binding_table_vs_changed = true;
-      session->binding_table_gs_changed = true;
-      session->binding_table_fs_changed = true;
-   }
-}
-
-static void
-gen6_draw_common_urb(struct ilo_render *r,
-                     const struct ilo_state_vector *vec,
-                     struct ilo_render_draw_session *session)
-{
-   const bool gs_active = (vec->gs || (vec->vs &&
-            ilo_shader_get_kernel_param(vec->vs, ILO_KERNEL_VS_GEN6_SO)));
-
-   /* 3DSTATE_URB */
-   if (session->urb_delta.dirty & (ILO_STATE_URB_3DSTATE_URB_VS |
-                                   ILO_STATE_URB_3DSTATE_URB_GS)) {
-      gen6_3DSTATE_URB(r->builder, &vec->urb);
-
-      if (r->state.gs.active && !gs_active)
-         gen6_wa_post_3dstate_urb_no_gs(r);
-   }
-
-   r->state.gs.active = gs_active;
-}
-
-static void
-gen6_draw_common_pointers_1(struct ilo_render *r,
-                            const struct ilo_state_vector *vec,
-                            struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_VIEWPORT_STATE_POINTERS */
-   if (session->viewport_changed) {
-      gen6_3DSTATE_VIEWPORT_STATE_POINTERS(r->builder,
-            r->state.CLIP_VIEWPORT,
-            r->state.SF_VIEWPORT,
-            r->state.CC_VIEWPORT);
-   }
-}
-
-static void
-gen6_draw_common_pointers_2(struct ilo_render *r,
-                            const struct ilo_state_vector *vec,
-                            struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_CC_STATE_POINTERS */
-   if (session->blend_changed ||
-       session->dsa_changed ||
-       session->cc_changed) {
-      gen6_3DSTATE_CC_STATE_POINTERS(r->builder,
-            r->state.BLEND_STATE,
-            r->state.DEPTH_STENCIL_STATE,
-            r->state.COLOR_CALC_STATE);
-   }
-
-   /* 3DSTATE_SAMPLER_STATE_POINTERS */
-   if (session->sampler_vs_changed ||
-       session->sampler_gs_changed ||
-       session->sampler_fs_changed) {
-      gen6_3DSTATE_SAMPLER_STATE_POINTERS(r->builder,
-            r->state.vs.SAMPLER_STATE,
-            0,
-            r->state.wm.SAMPLER_STATE);
-   }
-}
-
-static void
-gen6_draw_common_pointers_3(struct ilo_render *r,
-                            const struct ilo_state_vector *vec,
-                            struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_SCISSOR_STATE_POINTERS */
-   if (session->scissor_changed) {
-      gen6_3DSTATE_SCISSOR_STATE_POINTERS(r->builder,
-            r->state.SCISSOR_RECT);
-   }
-
-   /* 3DSTATE_BINDING_TABLE_POINTERS */
-   if (session->binding_table_vs_changed ||
-       session->binding_table_gs_changed ||
-       session->binding_table_fs_changed) {
-      gen6_3DSTATE_BINDING_TABLE_POINTERS(r->builder,
-            r->state.vs.BINDING_TABLE_STATE,
-            r->state.gs.BINDING_TABLE_STATE,
-            r->state.wm.BINDING_TABLE_STATE);
-   }
-}
-
-void
-gen6_draw_vf(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   if (ilo_dev_gen(r->dev) >= ILO_GEN(7.5)) {
-      /* 3DSTATE_INDEX_BUFFER */
-      if ((session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_INDEX_BUFFER) ||
-          DIRTY(IB) || r->batch_bo_changed)
-         gen6_3DSTATE_INDEX_BUFFER(r->builder, &vec->ve->vf, &vec->ib.ib);
-
-      /* 3DSTATE_VF */
-      if (session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_VF)
-         gen75_3DSTATE_VF(r->builder, &vec->ve->vf);
-   } else {
-      /* 3DSTATE_INDEX_BUFFER */
-      if ((session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_INDEX_BUFFER) ||
-          DIRTY(IB) || r->batch_bo_changed)
-         gen6_3DSTATE_INDEX_BUFFER(r->builder, &vec->ve->vf, &vec->ib.ib);
-   }
-
-   /* 3DSTATE_VERTEX_BUFFERS */
-   if ((session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_VERTEX_BUFFERS) ||
-       DIRTY(VB) || DIRTY(VE) || r->batch_bo_changed) {
-      gen6_3DSTATE_VERTEX_BUFFERS(r->builder, &vec->ve->vf,
-            vec->vb.vb, vec->ve->vb_count);
-   }
-
-   /* 3DSTATE_VERTEX_ELEMENTS */
-   if (session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_VERTEX_ELEMENTS)
-      gen6_3DSTATE_VERTEX_ELEMENTS(r->builder, &vec->ve->vf);
-}
-
-void
-gen6_draw_vf_statistics(struct ilo_render *r,
-                        const struct ilo_state_vector *vec,
-                        struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_VF_STATISTICS */
-   if (r->hw_ctx_changed)
-      gen6_3DSTATE_VF_STATISTICS(r->builder, false);
-}
-
-void
-gen6_draw_vs(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_CONSTANT_VS */
-   if (session->pcb_vs_changed) {
-      gen6_3DSTATE_CONSTANT_VS(r->builder,
-            &r->state.vs.PUSH_CONSTANT_BUFFER,
-            &r->state.vs.PUSH_CONSTANT_BUFFER_size,
-            1);
-
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_post_3dstate_constant_vs(r);
-   }
-
-   /* 3DSTATE_VS */
-   if (DIRTY(VS) || r->instruction_bo_changed) {
-      const union ilo_shader_cso *cso = ilo_shader_get_kernel_cso(vec->vs);
-      const uint32_t kernel_offset = ilo_shader_get_kernel_offset(vec->vs);
-
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_pre_3dstate_vs_toggle(r);
-
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6) &&
-          ilo_shader_get_kernel_param(vec->vs, ILO_KERNEL_VS_GEN6_SO)) {
-         gen6_3DSTATE_VS(r->builder, &cso->vs_sol.vs,
-               kernel_offset, r->vs_scratch.bo);
-      } else {
-         gen6_3DSTATE_VS(r->builder, &cso->vs,
-               kernel_offset, r->vs_scratch.bo);
-      }
-   }
-}
-
-static void
-gen6_draw_gs(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_CONSTANT_GS */
-   if (session->pcb_gs_changed)
-      gen6_3DSTATE_CONSTANT_GS(r->builder, NULL, NULL, 0);
-
-   /* 3DSTATE_GS */
-   if (DIRTY(GS) || DIRTY(VS) ||
-       session->prim_changed || r->instruction_bo_changed) {
-      const union ilo_shader_cso *cso;
-      uint32_t kernel_offset;
-
-      if (vec->gs) {
-         cso = ilo_shader_get_kernel_cso(vec->gs);
-         kernel_offset = ilo_shader_get_kernel_offset(vec->gs);
-
-         gen6_3DSTATE_GS(r->builder, &cso->gs,
-               kernel_offset, r->gs_scratch.bo);
-      } else if (ilo_dev_gen(r->dev) == ILO_GEN(6) &&
-            ilo_shader_get_kernel_param(vec->vs, ILO_KERNEL_VS_GEN6_SO)) {
-         const int verts_per_prim =
-            u_vertices_per_prim(session->reduced_prim);
-         enum ilo_kernel_param param;
-
-         switch (verts_per_prim) {
-         case 1:
-            param = ILO_KERNEL_VS_GEN6_SO_POINT_OFFSET;
-            break;
-         case 2:
-            param = ILO_KERNEL_VS_GEN6_SO_LINE_OFFSET;
-            break;
-         default:
-            param = ILO_KERNEL_VS_GEN6_SO_TRI_OFFSET;
-            break;
-         }
-
-         cso = ilo_shader_get_kernel_cso(vec->vs);
-         kernel_offset = ilo_shader_get_kernel_offset(vec->vs) +
-            ilo_shader_get_kernel_param(vec->vs, param);
-
-         gen6_3DSTATE_GS(r->builder, &cso->vs_sol.sol,
-               kernel_offset, r->gs_scratch.bo);
-      } else {
-         gen6_3DSTATE_GS(r->builder, &vec->disabled_gs, 0, NULL);
-      }
-   }
-}
-
-static bool
-gen6_draw_update_max_svbi(struct ilo_render *r,
-                          const struct ilo_state_vector *vec,
-                          struct ilo_render_draw_session *session)
-{
-   if (DIRTY(VS) || DIRTY(GS) || DIRTY(SO)) {
-      const struct pipe_stream_output_info *so_info =
-         (vec->gs) ? ilo_shader_get_kernel_so_info(vec->gs) :
-         (vec->vs) ? ilo_shader_get_kernel_so_info(vec->vs) : NULL;
-      unsigned max_svbi = 0xffffffff;
-      int i;
-
-      for (i = 0; i < so_info->num_outputs; i++) {
-         const int output_buffer = so_info->output[i].output_buffer;
-         const struct pipe_stream_output_target *so =
-            vec->so.states[output_buffer];
-         const int struct_size = so_info->stride[output_buffer] * 4;
-         const int elem_size = so_info->output[i].num_components * 4;
-         int buf_size, count;
-
-         if (!so) {
-            max_svbi = 0;
-            break;
-         }
-
-         buf_size = so->buffer_size - so_info->output[i].dst_offset * 4;
-
-         count = buf_size / struct_size;
-         if (buf_size % struct_size >= elem_size)
-            count++;
-
-         if (count < max_svbi)
-            max_svbi = count;
-      }
-
-      if (r->state.so_max_vertices != max_svbi) {
-         r->state.so_max_vertices = max_svbi;
-         return true;
-      }
-   }
-
-   return false;
-}
-
-static void
-gen6_draw_gs_svbi(struct ilo_render *r,
-                  const struct ilo_state_vector *vec,
-                  struct ilo_render_draw_session *session)
-{
-   const bool emit = gen6_draw_update_max_svbi(r, vec, session);
-
-   /* 3DSTATE_GS_SVB_INDEX */
-   if (emit) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_pre_non_pipelined(r);
-
-      gen6_3DSTATE_GS_SVB_INDEX(r->builder,
-            0, 0, r->state.so_max_vertices,
-            false);
-
-      if (r->hw_ctx_changed) {
-         int i;
-
-         /*
-          * From the Sandy Bridge PRM, volume 2 part 1, page 148:
-          *
-          *     "If a buffer is not enabled then the SVBI must be set to 0x0
-          *      in order to not cause overflow in that SVBI."
-          *
-          *     "If a buffer is not enabled then the MaxSVBI must be set to
-          *      0xFFFFFFFF in order to not cause overflow in that SVBI."
-          */
-         for (i = 1; i < 4; i++) {
-            gen6_3DSTATE_GS_SVB_INDEX(r->builder,
-                  i, 0, 0xffffffff, false);
-         }
-      }
-   }
-}
-
-void
-gen6_draw_clip(struct ilo_render *r,
-               const struct ilo_state_vector *vec,
-               struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_CLIP */
-   if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_CLIP)
-      gen6_3DSTATE_CLIP(r->builder, &vec->rasterizer->rs);
-}
-
-static void
-gen6_draw_sf(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_SF */
-   if ((session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_SF) || DIRTY(FS)) {
-      const struct ilo_state_sbe *sbe = ilo_shader_get_kernel_sbe(vec->fs);
-      gen6_3DSTATE_SF(r->builder, &vec->rasterizer->rs, sbe);
-   }
-}
-
-void
-gen6_draw_sf_rect(struct ilo_render *r,
-                  const struct ilo_state_vector *vec,
-                  struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_DRAWING_RECTANGLE */
-   if (DIRTY(FB)) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_pre_non_pipelined(r);
-
-      gen6_3DSTATE_DRAWING_RECTANGLE(r->builder, 0, 0,
-            vec->fb.state.width, vec->fb.state.height);
-   }
-}
-
-static void
-gen6_draw_wm(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_CONSTANT_PS */
-   if (session->pcb_fs_changed) {
-      gen6_3DSTATE_CONSTANT_PS(r->builder,
-            &r->state.wm.PUSH_CONSTANT_BUFFER,
-            &r->state.wm.PUSH_CONSTANT_BUFFER_size,
-            1);
-   }
-
-   /* 3DSTATE_WM */
-   if (DIRTY(FS) ||
-       (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_WM) ||
-       r->instruction_bo_changed) {
-      const union ilo_shader_cso *cso = ilo_shader_get_kernel_cso(vec->fs);
-      const uint32_t kernel_offset = ilo_shader_get_kernel_offset(vec->fs);
-
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6) && r->hw_ctx_changed)
-         gen6_wa_pre_3dstate_wm_max_threads(r);
-
-      gen6_3DSTATE_WM(r->builder, &vec->rasterizer->rs,
-            &cso->ps, kernel_offset, r->fs_scratch.bo);
-   }
-}
-
-static void
-gen6_draw_wm_multisample(struct ilo_render *r,
-                         const struct ilo_state_vector *vec,
-                         struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_MULTISAMPLE */
-   if (DIRTY(FB) || (session->rs_delta.dirty &
-            ILO_STATE_RASTER_3DSTATE_MULTISAMPLE)) {
-      const uint8_t sample_count = (vec->fb.num_samples > 1) ? 4 : 1;
-
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6)) {
-         gen6_wa_pre_non_pipelined(r);
-         gen6_wa_pre_3dstate_multisample(r);
-      }
-
-      gen6_3DSTATE_MULTISAMPLE(r->builder, &vec->rasterizer->rs,
-            &r->sample_pattern, sample_count);
-   }
-
-   /* 3DSTATE_SAMPLE_MASK */
-   if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_SAMPLE_MASK)
-      gen6_3DSTATE_SAMPLE_MASK(r->builder, &vec->rasterizer->rs);
-}
-
-static void
-gen6_draw_wm_depth(struct ilo_render *r,
-                   const struct ilo_state_vector *vec,
-                   struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_DEPTH_BUFFER and 3DSTATE_CLEAR_PARAMS */
-   if (DIRTY(FB) || r->batch_bo_changed) {
-      const struct ilo_state_zs *zs;
-      uint32_t clear_params;
-
-      if (vec->fb.state.zsbuf) {
-         const struct ilo_surface_cso *surface =
-            (const struct ilo_surface_cso *) vec->fb.state.zsbuf;
-         const struct ilo_texture_slice *slice =
-            ilo_texture_get_slice(ilo_texture(surface->base.texture),
-                  surface->base.u.tex.level, surface->base.u.tex.first_layer);
-
-         assert(!surface->is_rt);
-
-         zs = &surface->u.zs;
-         clear_params = slice->clear_value;
-      }
-      else {
-         zs = &vec->fb.null_zs;
-         clear_params = 0;
-      }
-
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6)) {
-         gen6_wa_pre_non_pipelined(r);
-         gen6_wa_pre_depth(r);
-      }
-
-      gen6_3DSTATE_DEPTH_BUFFER(r->builder, zs);
-      gen6_3DSTATE_HIER_DEPTH_BUFFER(r->builder, zs);
-      gen6_3DSTATE_STENCIL_BUFFER(r->builder, zs);
-      gen6_3DSTATE_CLEAR_PARAMS(r->builder, clear_params);
-   }
-}
-
-void
-gen6_draw_wm_raster(struct ilo_render *r,
-                    const struct ilo_state_vector *vec,
-                    struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_POLY_STIPPLE_PATTERN and 3DSTATE_POLY_STIPPLE_OFFSET */
-   if ((DIRTY(RASTERIZER) || DIRTY(POLY_STIPPLE)) &&
-       vec->rasterizer->state.poly_stipple_enable) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_pre_non_pipelined(r);
-
-      gen6_3DSTATE_POLY_STIPPLE_PATTERN(r->builder, &vec->poly_stipple);
-      gen6_3DSTATE_POLY_STIPPLE_OFFSET(r->builder, &vec->poly_stipple);
-   }
-
-   /* 3DSTATE_LINE_STIPPLE */
-   if (DIRTY(RASTERIZER) && vec->rasterizer->state.line_stipple_enable) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_pre_non_pipelined(r);
-
-      gen6_3DSTATE_LINE_STIPPLE(r->builder, &vec->line_stipple);
-   }
-
-   /* 3DSTATE_AA_LINE_PARAMETERS */
-   if (session->rs_delta.dirty &
-         ILO_STATE_RASTER_3DSTATE_AA_LINE_PARAMETERS) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(6))
-         gen6_wa_pre_non_pipelined(r);
-
-      gen6_3DSTATE_AA_LINE_PARAMETERS(r->builder, &vec->rasterizer->rs);
-   }
-}
-
-#undef DIRTY
-
-void
-ilo_render_emit_draw_commands_gen6(struct ilo_render *render,
-                                   const struct ilo_state_vector *vec,
-                                   struct ilo_render_draw_session *session)
-{
-   ILO_DEV_ASSERT(render->dev, 6, 6);
-
-   /*
-    * We try to keep the order of the commands match, as closely as possible,
-    * that of the classic i965 driver.  It allows us to compare the command
-    * streams easily.
-    */
-   gen6_draw_common_select(render, vec, session);
-   gen6_draw_gs_svbi(render, vec, session);
-   gen6_draw_common_sip(render, vec, session);
-   gen6_draw_vf_statistics(render, vec, session);
-   gen6_draw_common_base_address(render, vec, session);
-   gen6_draw_common_pointers_1(render, vec, session);
-   gen6_draw_common_urb(render, vec, session);
-   gen6_draw_common_pointers_2(render, vec, session);
-   gen6_draw_wm_multisample(render, vec, session);
-   gen6_draw_vs(render, vec, session);
-   gen6_draw_gs(render, vec, session);
-   gen6_draw_clip(render, vec, session);
-   gen6_draw_sf(render, vec, session);
-   gen6_draw_wm(render, vec, session);
-   gen6_draw_common_pointers_3(render, vec, session);
-   gen6_draw_wm_depth(render, vec, session);
-   gen6_draw_wm_raster(render, vec, session);
-   gen6_draw_sf_rect(render, vec, session);
-   gen6_draw_vf(render, vec, session);
-
-   ilo_render_3dprimitive(render, &vec->draw_info);
-}
-
-static void
-gen6_rectlist_vs_to_sf(struct ilo_render *r,
-                       const struct ilo_blitter *blitter)
-{
-   gen6_3DSTATE_CONSTANT_VS(r->builder, NULL, NULL, 0);
-   gen6_wa_post_3dstate_constant_vs(r);
-
-   gen6_wa_pre_3dstate_vs_toggle(r);
-   gen6_3DSTATE_VS(r->builder, &blitter->vs, 0, NULL);
-
-   gen6_3DSTATE_CONSTANT_GS(r->builder, NULL, NULL, 0);
-   gen6_3DSTATE_GS(r->builder, &blitter->gs, 0, NULL);
-
-   gen6_3DSTATE_CLIP(r->builder, &blitter->fb.rs);
-   gen6_3DSTATE_SF(r->builder, &blitter->fb.rs, &blitter->sbe);
-}
-
-static void
-gen6_rectlist_wm(struct ilo_render *r,
-                 const struct ilo_blitter *blitter)
-{
-   gen6_3DSTATE_CONSTANT_PS(r->builder, NULL, NULL, 0);
-
-   gen6_wa_pre_3dstate_wm_max_threads(r);
-   gen6_3DSTATE_WM(r->builder, &blitter->fb.rs, &blitter->ps, 0, NULL);
-}
-
-static void
-gen6_rectlist_wm_depth(struct ilo_render *r,
-                       const struct ilo_blitter *blitter)
-{
-   gen6_wa_pre_depth(r);
-
-   if (blitter->uses & (ILO_BLITTER_USE_FB_DEPTH |
-                        ILO_BLITTER_USE_FB_STENCIL))
-      gen6_3DSTATE_DEPTH_BUFFER(r->builder, &blitter->fb.dst.u.zs);
-
-   if (blitter->uses & ILO_BLITTER_USE_FB_DEPTH) {
-      gen6_3DSTATE_HIER_DEPTH_BUFFER(r->builder,
-            &blitter->fb.dst.u.zs);
-   }
-
-   if (blitter->uses & ILO_BLITTER_USE_FB_STENCIL) {
-      gen6_3DSTATE_STENCIL_BUFFER(r->builder,
-            &blitter->fb.dst.u.zs);
-   }
-
-   gen6_3DSTATE_CLEAR_PARAMS(r->builder,
-         blitter->depth_clear_value);
-}
-
-static void
-gen6_rectlist_wm_multisample(struct ilo_render *r,
-                             const struct ilo_blitter *blitter)
-{
-   const uint8_t sample_count = (blitter->fb.num_samples > 1) ? 4 : 1;
-
-   gen6_wa_pre_3dstate_multisample(r);
-
-   gen6_3DSTATE_MULTISAMPLE(r->builder, &blitter->fb.rs, &r->sample_pattern, sample_count);
-   gen6_3DSTATE_SAMPLE_MASK(r->builder, &blitter->fb.rs);
-}
-
-int
-ilo_render_get_rectlist_commands_len_gen6(const struct ilo_render *render,
-                                          const struct ilo_blitter *blitter)
-{
-   ILO_DEV_ASSERT(render->dev, 6, 7.5);
-
-   return 256;
-}
-
-void
-ilo_render_emit_rectlist_commands_gen6(struct ilo_render *r,
-                                       const struct ilo_blitter *blitter,
-                                       const struct ilo_render_rectlist_session *session)
-{
-   ILO_DEV_ASSERT(r->dev, 6, 6);
-
-   gen6_wa_pre_non_pipelined(r);
-
-   gen6_rectlist_wm_multisample(r, blitter);
-
-   gen6_state_base_address(r->builder, true);
-
-   gen6_user_3DSTATE_VERTEX_BUFFERS(r->builder,
-         session->vb_start, session->vb_end,
-         sizeof(blitter->vertices[0]));
-
-   gen6_3DSTATE_VERTEX_ELEMENTS(r->builder, &blitter->vf);
-
-   gen6_3DSTATE_URB(r->builder, &blitter->urb);
-
-   if (r->state.gs.active) {
-      gen6_wa_post_3dstate_urb_no_gs(r);
-      r->state.gs.active = false;
-   }
-
-   if (blitter->uses &
-       (ILO_BLITTER_USE_DSA | ILO_BLITTER_USE_CC)) {
-      gen6_3DSTATE_CC_STATE_POINTERS(r->builder, 0,
-            r->state.DEPTH_STENCIL_STATE, r->state.COLOR_CALC_STATE);
-   }
-
-   gen6_rectlist_vs_to_sf(r, blitter);
-   gen6_rectlist_wm(r, blitter);
-
-   if (blitter->uses & ILO_BLITTER_USE_VIEWPORT) {
-      gen6_3DSTATE_VIEWPORT_STATE_POINTERS(r->builder,
-            0, 0, r->state.CC_VIEWPORT);
-   }
-
-   gen6_rectlist_wm_depth(r, blitter);
-
-   gen6_3DSTATE_DRAWING_RECTANGLE(r->builder, 0, 0,
-         blitter->fb.width, blitter->fb.height);
-
-   ilo_render_3dprimitive(r, &blitter->draw_info);
-}
-
-int
-ilo_render_get_draw_commands_len_gen6(const struct ilo_render *render,
-                                      const struct ilo_state_vector *vec)
-{
-   static int len;
-
-   ILO_DEV_ASSERT(render->dev, 6, 6);
-
-   if (!len) {
-      len += GEN6_3DSTATE_CONSTANT_ANY__SIZE * 3;
-      len += GEN6_3DSTATE_GS_SVB_INDEX__SIZE * 4;
-      len += GEN6_PIPE_CONTROL__SIZE * 5;
-
-      len +=
-         GEN6_STATE_BASE_ADDRESS__SIZE +
-         GEN6_STATE_SIP__SIZE +
-         GEN6_3DSTATE_VF_STATISTICS__SIZE +
-         GEN6_PIPELINE_SELECT__SIZE +
-         GEN6_3DSTATE_BINDING_TABLE_POINTERS__SIZE +
-         GEN6_3DSTATE_SAMPLER_STATE_POINTERS__SIZE +
-         GEN6_3DSTATE_URB__SIZE +
-         GEN6_3DSTATE_VERTEX_BUFFERS__SIZE +
-         GEN6_3DSTATE_VERTEX_ELEMENTS__SIZE +
-         GEN6_3DSTATE_INDEX_BUFFER__SIZE +
-         GEN6_3DSTATE_VIEWPORT_STATE_POINTERS__SIZE +
-         GEN6_3DSTATE_CC_STATE_POINTERS__SIZE +
-         GEN6_3DSTATE_SCISSOR_STATE_POINTERS__SIZE +
-         GEN6_3DSTATE_VS__SIZE +
-         GEN6_3DSTATE_GS__SIZE +
-         GEN6_3DSTATE_CLIP__SIZE +
-         GEN6_3DSTATE_SF__SIZE +
-         GEN6_3DSTATE_WM__SIZE +
-         GEN6_3DSTATE_SAMPLE_MASK__SIZE +
-         GEN6_3DSTATE_DRAWING_RECTANGLE__SIZE +
-         GEN6_3DSTATE_DEPTH_BUFFER__SIZE +
-         GEN6_3DSTATE_POLY_STIPPLE_OFFSET__SIZE +
-         GEN6_3DSTATE_POLY_STIPPLE_PATTERN__SIZE +
-         GEN6_3DSTATE_LINE_STIPPLE__SIZE +
-         GEN6_3DSTATE_AA_LINE_PARAMETERS__SIZE +
-         GEN6_3DSTATE_MULTISAMPLE__SIZE +
-         GEN6_3DSTATE_STENCIL_BUFFER__SIZE +
-         GEN6_3DSTATE_HIER_DEPTH_BUFFER__SIZE +
-         GEN6_3DSTATE_CLEAR_PARAMS__SIZE +
-         GEN6_3DPRIMITIVE__SIZE;
-   }
-
-   return len;
-}
diff --git a/src/gallium/drivers/ilo/ilo_render_gen7.c b/src/gallium/drivers/ilo/ilo_render_gen7.c
deleted file mode 100644 (file)
index 330ba6c..0000000
+++ /dev/null
@@ -1,865 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h"
-#include "core/ilo_builder_3d.h"
-#include "core/ilo_builder_render.h"
-
-#include "ilo_blitter.h"
-#include "ilo_resource.h"
-#include "ilo_shader.h"
-#include "ilo_state.h"
-#include "ilo_render_gen.h"
-
-static void
-gen7_wa_post_3dstate_push_constant_alloc_ps(struct ilo_render *r)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 292:
-    *
-    *     "A PIPE_CONTOL command with the CS Stall bit set must be programmed
-    *      in the ring after this instruction
-    *      (3DSTATE_PUSH_CONSTANT_ALLOC_PS)."
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_CS_STALL;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7);
-
-   r->state.deferred_pipe_control_dw1 |= dw1;
-}
-
-static void
-gen7_wa_pre_vs(struct ilo_render *r)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 106:
-    *
-    *     "A PIPE_CONTROL with Post-Sync Operation set to 1h and a depth stall
-    *      needs to be sent just prior to any 3DSTATE_VS, 3DSTATE_URB_VS,
-    *      3DSTATE_CONSTANT_VS, 3DSTATE_BINDING_TABLE_POINTER_VS,
-    *      3DSTATE_SAMPLER_STATE_POINTER_VS command.  Only one PIPE_CONTROL
-    *      needs to be sent before any combination of VS associated 3DSTATE."
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_DEPTH_STALL |
-                        GEN6_PIPE_CONTROL_WRITE_IMM;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7);
-
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      ilo_render_pipe_control(r, dw1);
-}
-
-static void
-gen7_wa_pre_3dstate_sf_depth_bias(struct ilo_render *r)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 258:
-    *
-    *     "Due to an HW issue driver needs to send a pipe control with stall
-    *      when ever there is state change in depth bias related state (in
-    *      3DSTATE_SF)"
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_CS_STALL;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7);
-
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      ilo_render_pipe_control(r, dw1);
-}
-
-static void
-gen7_wa_pre_3dstate_multisample(struct ilo_render *r)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 304:
-    *
-    *     "Driver must ierarchi that all the caches in the depth pipe are
-    *      flushed before this command (3DSTATE_MULTISAMPLE) is parsed. This
-    *      requires driver to send a PIPE_CONTROL with a CS stall along with a
-    *      Depth Flush prior to this command.
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH |
-                        GEN6_PIPE_CONTROL_CS_STALL;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      ilo_render_pipe_control(r, dw1);
-}
-
-static void
-gen7_wa_pre_depth(struct ilo_render *r)
-{
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   if (ilo_dev_gen(r->dev) == ILO_GEN(7)) {
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 315:
-       *
-       *     "Driver must send a least one PIPE_CONTROL command with CS Stall
-       *      and a post sync operation prior to the group of depth
-       *      commands(3DSTATE_DEPTH_BUFFER, 3DSTATE_CLEAR_PARAMS,
-       *      3DSTATE_STENCIL_BUFFER, and 3DSTATE_HIER_DEPTH_BUFFER)."
-       */
-      const uint32_t dw1 = GEN6_PIPE_CONTROL_CS_STALL |
-                           GEN6_PIPE_CONTROL_WRITE_IMM;
-
-      if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-         ilo_render_pipe_control(r, dw1);
-   }
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 315:
-    *
-    *     "Restriction: Prior to changing Depth/Stencil Buffer state (i.e.,
-    *      any combination of 3DSTATE_DEPTH_BUFFER, 3DSTATE_CLEAR_PARAMS,
-    *      3DSTATE_STENCIL_BUFFER, 3DSTATE_HIER_DEPTH_BUFFER) SW must first
-    *      issue a pipelined depth stall (PIPE_CONTROL with Depth Stall bit
-    *      set), followed by a pipelined depth cache flush (PIPE_CONTROL with
-    *      Depth Flush Bit set, followed by another pipelined depth stall
-    *      (PIPE_CONTROL with Depth Stall Bit set), unless SW can otherwise
-    *      guarantee that the pipeline from WM onwards is already flushed
-    *      (e.g., via a preceding MI_FLUSH)."
-    */
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_STALL);
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH);
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_STALL);
-}
-
-static void
-gen7_wa_pre_3dstate_ps_max_threads(struct ilo_render *r)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 286:
-    *
-    *     "If this field (Maximum Number of Threads in 3DSTATE_PS) is changed
-    *      between 3DPRIMITIVE commands, a PIPE_CONTROL command with Stall at
-    *      Pixel Scoreboard set is required to be issued."
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_PIXEL_SCOREBOARD_STALL;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   if ((r->state.current_pipe_control_dw1 & dw1) != dw1)
-      ilo_render_pipe_control(r, dw1);
-}
-
-static void
-gen7_wa_post_ps_and_later(struct ilo_render *r)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 276:
-    *
-    *     "The driver must make sure a PIPE_CONTROL with the Depth Stall
-    *      Enable bit set after all the following states are programmed:
-    *
-    *       - 3DSTATE_PS
-    *       - 3DSTATE_VIEWPORT_STATE_POINTERS_CC
-    *       - 3DSTATE_CONSTANT_PS
-    *       - 3DSTATE_BINDING_TABLE_POINTERS_PS
-    *       - 3DSTATE_SAMPLER_STATE_POINTERS_PS
-    *       - 3DSTATE_CC_STATE_POINTERS
-    *       - 3DSTATE_BLEND_STATE_POINTERS
-    *       - 3DSTATE_DEPTH_STENCIL_STATE_POINTERS"
-    */
-   const uint32_t dw1 = GEN6_PIPE_CONTROL_DEPTH_STALL;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7);
-
-   r->state.deferred_pipe_control_dw1 |= dw1;
-}
-
-#define DIRTY(state) (session->pipe_dirty & ILO_DIRTY_ ## state)
-
-void
-gen7_draw_common_urb(struct ilo_render *r,
-                     const struct ilo_state_vector *vec,
-                     struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_URB_{VS,GS,HS,DS} */
-   if (session->urb_delta.dirty & (ILO_STATE_URB_3DSTATE_URB_VS |
-                                   ILO_STATE_URB_3DSTATE_URB_HS |
-                                   ILO_STATE_URB_3DSTATE_URB_DS |
-                                   ILO_STATE_URB_3DSTATE_URB_GS)) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(7))
-         gen7_wa_pre_vs(r);
-
-      gen7_3DSTATE_URB_VS(r->builder, &vec->urb);
-      gen7_3DSTATE_URB_GS(r->builder, &vec->urb);
-      gen7_3DSTATE_URB_HS(r->builder, &vec->urb);
-      gen7_3DSTATE_URB_DS(r->builder, &vec->urb);
-   }
-}
-
-void
-gen7_draw_common_pcb_alloc(struct ilo_render *r,
-                           const struct ilo_state_vector *vec,
-                           struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_PUSH_CONSTANT_ALLOC_{VS,PS} */
-   if (session->urb_delta.dirty &
-         (ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_VS |
-          ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_HS |
-          ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_DS |
-          ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_GS |
-          ILO_STATE_URB_3DSTATE_PUSH_CONSTANT_ALLOC_PS)) {
-      gen7_3DSTATE_PUSH_CONSTANT_ALLOC_VS(r->builder, &vec->urb);
-      gen7_3DSTATE_PUSH_CONSTANT_ALLOC_GS(r->builder, &vec->urb);
-      gen7_3DSTATE_PUSH_CONSTANT_ALLOC_PS(r->builder, &vec->urb);
-
-      if (ilo_dev_gen(r->dev) == ILO_GEN(7))
-         gen7_wa_post_3dstate_push_constant_alloc_ps(r);
-   }
-}
-
-void
-gen7_draw_common_pointers_1(struct ilo_render *r,
-                            const struct ilo_state_vector *vec,
-                            struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_VIEWPORT_STATE_POINTERS_{CC,SF_CLIP} */
-   if (session->viewport_changed) {
-      gen7_3DSTATE_VIEWPORT_STATE_POINTERS_CC(r->builder,
-            r->state.CC_VIEWPORT);
-
-      gen7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP(r->builder,
-            r->state.SF_CLIP_VIEWPORT);
-   }
-}
-
-void
-gen7_draw_common_pointers_2(struct ilo_render *r,
-                            const struct ilo_state_vector *vec,
-                            struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_BLEND_STATE_POINTERS */
-   if (session->blend_changed) {
-      gen7_3DSTATE_BLEND_STATE_POINTERS(r->builder,
-            r->state.BLEND_STATE);
-   }
-
-   /* 3DSTATE_CC_STATE_POINTERS */
-   if (session->cc_changed) {
-      gen7_3DSTATE_CC_STATE_POINTERS(r->builder,
-            r->state.COLOR_CALC_STATE);
-   }
-
-   /* 3DSTATE_DEPTH_STENCIL_STATE_POINTERS */
-   if (ilo_dev_gen(r->dev) < ILO_GEN(8) && session->dsa_changed) {
-      gen7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS(r->builder,
-            r->state.DEPTH_STENCIL_STATE);
-   }
-}
-
-void
-gen7_draw_vs(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   const bool emit_3dstate_binding_table = session->binding_table_vs_changed;
-   const bool emit_3dstate_sampler_state = session->sampler_vs_changed;
-   /* see gen6_draw_vs() */
-   const bool emit_3dstate_constant_vs = session->pcb_vs_changed;
-   const bool emit_3dstate_vs = (DIRTY(VS) || r->instruction_bo_changed);
-
-   /* emit depth stall before any of the VS commands */
-   if (ilo_dev_gen(r->dev) == ILO_GEN(7)) {
-      if (emit_3dstate_binding_table || emit_3dstate_sampler_state ||
-          emit_3dstate_constant_vs || emit_3dstate_vs)
-         gen7_wa_pre_vs(r);
-   }
-
-   /* 3DSTATE_BINDING_TABLE_POINTERS_VS */
-   if (emit_3dstate_binding_table) {
-      gen7_3DSTATE_BINDING_TABLE_POINTERS_VS(r->builder,
-              r->state.vs.BINDING_TABLE_STATE);
-   }
-
-   /* 3DSTATE_SAMPLER_STATE_POINTERS_VS */
-   if (emit_3dstate_sampler_state) {
-      gen7_3DSTATE_SAMPLER_STATE_POINTERS_VS(r->builder,
-              r->state.vs.SAMPLER_STATE);
-   }
-
-   /* 3DSTATE_CONSTANT_VS */
-   if (emit_3dstate_constant_vs) {
-      gen7_3DSTATE_CONSTANT_VS(r->builder,
-              &r->state.vs.PUSH_CONSTANT_BUFFER,
-              &r->state.vs.PUSH_CONSTANT_BUFFER_size,
-              1);
-   }
-
-   /* 3DSTATE_VS */
-   if (emit_3dstate_vs) {
-      const union ilo_shader_cso *cso = ilo_shader_get_kernel_cso(vec->vs);
-      const uint32_t kernel_offset = ilo_shader_get_kernel_offset(vec->vs);
-
-      if (ilo_dev_gen(r->dev) >= ILO_GEN(8)) {
-         gen8_3DSTATE_VS(r->builder, &cso->vs,
-               kernel_offset, r->vs_scratch.bo);
-      } else {
-         gen6_3DSTATE_VS(r->builder, &cso->vs,
-               kernel_offset, r->vs_scratch.bo);
-      }
-   }
-}
-
-void
-gen7_draw_hs(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_CONSTANT_HS and 3DSTATE_HS */
-   if (r->hw_ctx_changed) {
-      const struct ilo_state_hs *hs = &vec->disabled_hs;
-      const uint32_t kernel_offset = 0;
-
-      gen7_3DSTATE_CONSTANT_HS(r->builder, 0, 0, 0);
-
-      if (ilo_dev_gen(r->dev) >= ILO_GEN(8))
-         gen8_3DSTATE_HS(r->builder, hs, kernel_offset, NULL);
-      else
-         gen7_3DSTATE_HS(r->builder, hs, kernel_offset, NULL);
-   }
-
-   /* 3DSTATE_BINDING_TABLE_POINTERS_HS */
-   if (r->hw_ctx_changed)
-      gen7_3DSTATE_BINDING_TABLE_POINTERS_HS(r->builder, 0);
-}
-
-void
-gen7_draw_te(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_TE */
-   if (r->hw_ctx_changed) {
-      const struct ilo_state_ds *ds = &vec->disabled_ds;
-      gen7_3DSTATE_TE(r->builder, ds);
-   }
-}
-
-void
-gen7_draw_ds(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_CONSTANT_DS and 3DSTATE_DS */
-   if (r->hw_ctx_changed) {
-      const struct ilo_state_ds *ds = &vec->disabled_ds;
-      const uint32_t kernel_offset = 0;
-
-      gen7_3DSTATE_CONSTANT_DS(r->builder, 0, 0, 0);
-
-      if (ilo_dev_gen(r->dev) >= ILO_GEN(8))
-         gen8_3DSTATE_DS(r->builder, ds, kernel_offset, NULL);
-      else
-         gen7_3DSTATE_DS(r->builder, ds, kernel_offset, NULL);
-   }
-
-   /* 3DSTATE_BINDING_TABLE_POINTERS_DS */
-   if (r->hw_ctx_changed)
-      gen7_3DSTATE_BINDING_TABLE_POINTERS_DS(r->builder, 0);
-
-}
-
-void
-gen7_draw_gs(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_CONSTANT_GS and 3DSTATE_GS */
-   if (r->hw_ctx_changed) {
-      const struct ilo_state_gs *gs = &vec->disabled_gs;
-      const uint32_t kernel_offset = 0;
-
-      gen7_3DSTATE_CONSTANT_GS(r->builder, 0, 0, 0);
-
-      if (ilo_dev_gen(r->dev) >= ILO_GEN(8))
-         gen8_3DSTATE_GS(r->builder, gs, kernel_offset, NULL);
-      else
-         gen7_3DSTATE_GS(r->builder, gs, kernel_offset, NULL);
-   }
-
-   /* 3DSTATE_BINDING_TABLE_POINTERS_GS */
-   if (session->binding_table_gs_changed) {
-      gen7_3DSTATE_BINDING_TABLE_POINTERS_GS(r->builder,
-            r->state.gs.BINDING_TABLE_STATE);
-   }
-}
-
-void
-gen7_draw_sol(struct ilo_render *r,
-              const struct ilo_state_vector *vec,
-              struct ilo_render_draw_session *session)
-{
-   const struct ilo_state_sol *sol;
-   const struct ilo_shader_state *shader;
-   bool dirty_sh = false;
-
-   if (vec->gs) {
-      shader = vec->gs;
-      dirty_sh = DIRTY(GS);
-   }
-   else {
-      shader = vec->vs;
-      dirty_sh = DIRTY(VS);
-   }
-
-   sol = ilo_shader_get_kernel_sol(shader);
-
-   /* 3DSTATE_SO_BUFFER */
-   if ((DIRTY(SO) || dirty_sh || r->batch_bo_changed) &&
-       vec->so.enabled) {
-      int i;
-
-      for (i = 0; i < ILO_STATE_SOL_MAX_BUFFER_COUNT; i++) {
-         const struct pipe_stream_output_target *target =
-            (i < vec->so.count && vec->so.states[i]) ?
-            vec->so.states[i] : NULL;
-         const struct ilo_state_sol_buffer *sb = (target) ?
-            &((const struct ilo_stream_output_target *) target)->sb :
-            &vec->so.dummy_sb;
-
-         if (ilo_dev_gen(r->dev) >= ILO_GEN(8))
-            gen8_3DSTATE_SO_BUFFER(r->builder, sol, sb, i);
-         else
-            gen7_3DSTATE_SO_BUFFER(r->builder, sol, sb, i);
-      }
-   }
-
-   /* 3DSTATE_SO_DECL_LIST */
-   if (dirty_sh && vec->so.enabled)
-      gen7_3DSTATE_SO_DECL_LIST(r->builder, sol);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 196-197:
-    *
-    *     "Anytime the SOL unit MMIO registers or non-pipeline state are
-    *      written, the SOL unit needs to receive a pipeline state update with
-    *      SOL unit dirty state for information programmed in MMIO/NP to get
-    *      loaded into the SOL unit.
-    *
-    *      The SOL unit incorrectly double buffers MMIO/NP registers and only
-    *      moves them into the design for usage when control topology is
-    *      received with the SOL unit dirty state.
-    *
-    *      If the state does not change, need to resend the same state.
-    *
-    *      Because of corruption, software must flush the whole fixed function
-    *      pipeline when 3DSTATE_STREAMOUT changes state."
-    *
-    * The first and fourth paragraphs are gone on Gen7.5+.
-    */
-
-   /* 3DSTATE_STREAMOUT */
-   gen7_3DSTATE_STREAMOUT(r->builder, sol);
-}
-
-static void
-gen7_draw_sf(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_SBE */
-   if (DIRTY(FS)) {
-      const struct ilo_state_sbe *sbe = ilo_shader_get_kernel_sbe(vec->fs);
-      gen7_3DSTATE_SBE(r->builder, sbe);
-   }
-
-   /* 3DSTATE_SF */
-   if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_SF) {
-      if (ilo_dev_gen(r->dev) == ILO_GEN(7))
-         gen7_wa_pre_3dstate_sf_depth_bias(r);
-
-      gen7_3DSTATE_SF(r->builder, &vec->rasterizer->rs);
-   }
-}
-
-static void
-gen7_draw_wm(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   const union ilo_shader_cso *cso = ilo_shader_get_kernel_cso(vec->fs);
-   const uint32_t kernel_offset = ilo_shader_get_kernel_offset(vec->fs);
-
-   /* 3DSTATE_WM */
-   if (DIRTY(FS) || (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_WM))
-      gen7_3DSTATE_WM(r->builder, &vec->rasterizer->rs, &cso->ps);
-
-   /* 3DSTATE_BINDING_TABLE_POINTERS_PS */
-   if (session->binding_table_fs_changed) {
-      gen7_3DSTATE_BINDING_TABLE_POINTERS_PS(r->builder,
-            r->state.wm.BINDING_TABLE_STATE);
-   }
-
-   /* 3DSTATE_SAMPLER_STATE_POINTERS_PS */
-   if (session->sampler_fs_changed) {
-      gen7_3DSTATE_SAMPLER_STATE_POINTERS_PS(r->builder,
-            r->state.wm.SAMPLER_STATE);
-   }
-
-   /* 3DSTATE_CONSTANT_PS */
-   if (session->pcb_fs_changed) {
-      gen7_3DSTATE_CONSTANT_PS(r->builder,
-            &r->state.wm.PUSH_CONSTANT_BUFFER,
-            &r->state.wm.PUSH_CONSTANT_BUFFER_size,
-            1);
-   }
-
-   /* 3DSTATE_PS */
-   if (DIRTY(FS) || r->instruction_bo_changed) {
-      if (r->hw_ctx_changed)
-         gen7_wa_pre_3dstate_ps_max_threads(r);
-
-      gen7_3DSTATE_PS(r->builder, &cso->ps, kernel_offset, r->fs_scratch.bo);
-   }
-
-   /* 3DSTATE_SCISSOR_STATE_POINTERS */
-   if (session->scissor_changed) {
-      gen6_3DSTATE_SCISSOR_STATE_POINTERS(r->builder,
-            r->state.SCISSOR_RECT);
-   }
-
-   {
-      const bool emit_3dstate_ps = (DIRTY(FS) || DIRTY(BLEND));
-      const bool emit_3dstate_depth_buffer =
-         (DIRTY(FB) || DIRTY(DSA) || r->state_bo_changed);
-
-      if (ilo_dev_gen(r->dev) == ILO_GEN(7)) {
-         /* XXX what is the best way to know if this workaround is needed? */
-         if (emit_3dstate_ps ||
-             session->pcb_fs_changed ||
-             session->viewport_changed ||
-             session->binding_table_fs_changed ||
-             session->sampler_fs_changed ||
-             session->cc_changed ||
-             session->blend_changed ||
-             session->dsa_changed)
-            gen7_wa_post_ps_and_later(r);
-      }
-
-      if (emit_3dstate_depth_buffer)
-         gen7_wa_pre_depth(r);
-   }
-
-   /* 3DSTATE_DEPTH_BUFFER and 3DSTATE_CLEAR_PARAMS */
-   if (DIRTY(FB) || r->batch_bo_changed) {
-      const struct ilo_state_zs *zs;
-      uint32_t clear_params;
-
-      if (vec->fb.state.zsbuf) {
-         const struct ilo_surface_cso *surface =
-            (const struct ilo_surface_cso *) vec->fb.state.zsbuf;
-         const struct ilo_texture_slice *slice =
-            ilo_texture_get_slice(ilo_texture(surface->base.texture),
-                  surface->base.u.tex.level, surface->base.u.tex.first_layer);
-
-         assert(!surface->is_rt);
-         zs = &surface->u.zs;
-         clear_params = slice->clear_value;
-      }
-      else {
-         zs = &vec->fb.null_zs;
-         clear_params = 0;
-      }
-
-      gen6_3DSTATE_DEPTH_BUFFER(r->builder, zs);
-      gen6_3DSTATE_HIER_DEPTH_BUFFER(r->builder, zs);
-      gen6_3DSTATE_STENCIL_BUFFER(r->builder, zs);
-      gen7_3DSTATE_CLEAR_PARAMS(r->builder, clear_params);
-   }
-}
-
-static void
-gen7_draw_wm_multisample(struct ilo_render *r,
-                         const struct ilo_state_vector *vec,
-                         struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_MULTISAMPLE */
-   if (DIRTY(FB) || (session->rs_delta.dirty &
-            ILO_STATE_RASTER_3DSTATE_MULTISAMPLE)) {
-      const uint8_t sample_count = (vec->fb.num_samples > 4) ? 8 :
-                                   (vec->fb.num_samples > 1) ? 4 : 1;
-
-      gen7_wa_pre_3dstate_multisample(r);
-
-      gen6_3DSTATE_MULTISAMPLE(r->builder, &vec->rasterizer->rs,
-            &r->sample_pattern, sample_count);
-   }
-
-   /* 3DSTATE_SAMPLE_MASK */
-   if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_SAMPLE_MASK)
-      gen6_3DSTATE_SAMPLE_MASK(r->builder, &vec->rasterizer->rs);
-}
-
-void
-ilo_render_emit_draw_commands_gen7(struct ilo_render *render,
-                                   const struct ilo_state_vector *vec,
-                                   struct ilo_render_draw_session *session)
-{
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   /*
-    * We try to keep the order of the commands match, as closely as possible,
-    * that of the classic i965 driver.  It allows us to compare the command
-    * streams easily.
-    */
-   gen6_draw_common_select(render, vec, session);
-   gen6_draw_common_sip(render, vec, session);
-   gen6_draw_vf_statistics(render, vec, session);
-   gen7_draw_common_pcb_alloc(render, vec, session);
-   gen6_draw_common_base_address(render, vec, session);
-   gen7_draw_common_pointers_1(render, vec, session);
-   gen7_draw_common_urb(render, vec, session);
-   gen7_draw_common_pointers_2(render, vec, session);
-   gen7_draw_wm_multisample(render, vec, session);
-   gen7_draw_gs(render, vec, session);
-   gen7_draw_hs(render, vec, session);
-   gen7_draw_te(render, vec, session);
-   gen7_draw_ds(render, vec, session);
-   gen7_draw_vs(render, vec, session);
-   gen7_draw_sol(render, vec, session);
-   gen6_draw_clip(render, vec, session);
-   gen7_draw_sf(render, vec, session);
-   gen7_draw_wm(render, vec, session);
-   gen6_draw_wm_raster(render, vec, session);
-   gen6_draw_sf_rect(render, vec, session);
-   gen6_draw_vf(render, vec, session);
-
-   ilo_render_3dprimitive(render, &vec->draw_info);
-}
-
-static void
-gen7_rectlist_pcb_alloc(struct ilo_render *r,
-                        const struct ilo_blitter *blitter)
-{
-   gen7_3DSTATE_PUSH_CONSTANT_ALLOC_VS(r->builder, &blitter->urb);
-   gen7_3DSTATE_PUSH_CONSTANT_ALLOC_PS(r->builder, &blitter->urb);
-
-   if (ilo_dev_gen(r->dev) == ILO_GEN(7))
-      gen7_wa_post_3dstate_push_constant_alloc_ps(r);
-}
-
-static void
-gen7_rectlist_urb(struct ilo_render *r,
-                  const struct ilo_blitter *blitter)
-{
-   gen7_3DSTATE_URB_VS(r->builder, &blitter->urb);
-   gen7_3DSTATE_URB_GS(r->builder, &blitter->urb);
-   gen7_3DSTATE_URB_HS(r->builder, &blitter->urb);
-   gen7_3DSTATE_URB_DS(r->builder, &blitter->urb);
-}
-
-static void
-gen7_rectlist_vs_to_sf(struct ilo_render *r,
-                       const struct ilo_blitter *blitter)
-{
-   gen7_3DSTATE_CONSTANT_VS(r->builder, NULL, NULL, 0);
-   gen6_3DSTATE_VS(r->builder, &blitter->vs, 0, NULL);
-
-   gen7_3DSTATE_CONSTANT_HS(r->builder, NULL, NULL, 0);
-   gen7_3DSTATE_HS(r->builder, &blitter->hs, 0, NULL);
-
-   gen7_3DSTATE_TE(r->builder, &blitter->ds);
-
-   gen7_3DSTATE_CONSTANT_DS(r->builder, NULL, NULL, 0);
-   gen7_3DSTATE_DS(r->builder, &blitter->ds, 0, NULL);
-
-   gen7_3DSTATE_CONSTANT_GS(r->builder, NULL, NULL, 0);
-   gen7_3DSTATE_GS(r->builder, &blitter->gs, 0, NULL);
-
-   gen7_3DSTATE_STREAMOUT(r->builder, &blitter->sol);
-
-   gen6_3DSTATE_CLIP(r->builder, &blitter->fb.rs);
-
-   if (ilo_dev_gen(r->dev) == ILO_GEN(7))
-      gen7_wa_pre_3dstate_sf_depth_bias(r);
-
-   gen7_3DSTATE_SF(r->builder, &blitter->fb.rs);
-   gen7_3DSTATE_SBE(r->builder, &blitter->sbe);
-}
-
-static void
-gen7_rectlist_wm(struct ilo_render *r,
-                 const struct ilo_blitter *blitter)
-{
-   gen7_3DSTATE_WM(r->builder, &blitter->fb.rs, &blitter->ps);
-
-   gen7_3DSTATE_CONSTANT_PS(r->builder, NULL, NULL, 0);
-
-   gen7_wa_pre_3dstate_ps_max_threads(r);
-   gen7_3DSTATE_PS(r->builder, &blitter->ps, 0, NULL);
-}
-
-static void
-gen7_rectlist_wm_depth(struct ilo_render *r,
-                       const struct ilo_blitter *blitter)
-{
-   gen7_wa_pre_depth(r);
-
-   if (blitter->uses & (ILO_BLITTER_USE_FB_DEPTH |
-                        ILO_BLITTER_USE_FB_STENCIL))
-      gen6_3DSTATE_DEPTH_BUFFER(r->builder, &blitter->fb.dst.u.zs);
-
-   if (blitter->uses & ILO_BLITTER_USE_FB_DEPTH) {
-      gen6_3DSTATE_HIER_DEPTH_BUFFER(r->builder,
-            &blitter->fb.dst.u.zs);
-   }
-
-   if (blitter->uses & ILO_BLITTER_USE_FB_STENCIL) {
-      gen6_3DSTATE_STENCIL_BUFFER(r->builder,
-            &blitter->fb.dst.u.zs);
-   }
-
-   gen7_3DSTATE_CLEAR_PARAMS(r->builder,
-         blitter->depth_clear_value);
-}
-
-static void
-gen7_rectlist_wm_multisample(struct ilo_render *r,
-                             const struct ilo_blitter *blitter)
-{
-   const uint8_t sample_count = (blitter->fb.num_samples > 4) ? 8 :
-                                (blitter->fb.num_samples > 1) ? 4 : 1;
-
-   gen7_wa_pre_3dstate_multisample(r);
-
-   gen6_3DSTATE_MULTISAMPLE(r->builder, &blitter->fb.rs,
-         &r->sample_pattern, sample_count);
-
-   gen6_3DSTATE_SAMPLE_MASK(r->builder, &blitter->fb.rs);
-}
-
-void
-ilo_render_emit_rectlist_commands_gen7(struct ilo_render *r,
-                                       const struct ilo_blitter *blitter,
-                                       const struct ilo_render_rectlist_session *session)
-{
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   gen7_rectlist_wm_multisample(r, blitter);
-
-   gen6_state_base_address(r->builder, true);
-
-   gen6_user_3DSTATE_VERTEX_BUFFERS(r->builder,
-         session->vb_start, session->vb_end,
-         sizeof(blitter->vertices[0]));
-
-   gen6_3DSTATE_VERTEX_ELEMENTS(r->builder, &blitter->vf);
-
-   gen7_rectlist_pcb_alloc(r, blitter);
-
-   /* needed for any VS-related commands */
-   if (ilo_dev_gen(r->dev) == ILO_GEN(7))
-      gen7_wa_pre_vs(r);
-
-   gen7_rectlist_urb(r, blitter);
-
-   if (blitter->uses & ILO_BLITTER_USE_DSA) {
-      gen7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS(r->builder,
-            r->state.DEPTH_STENCIL_STATE);
-   }
-
-   if (blitter->uses & ILO_BLITTER_USE_CC) {
-      gen7_3DSTATE_CC_STATE_POINTERS(r->builder,
-            r->state.COLOR_CALC_STATE);
-   }
-
-   gen7_rectlist_vs_to_sf(r, blitter);
-   gen7_rectlist_wm(r, blitter);
-
-   if (blitter->uses & ILO_BLITTER_USE_VIEWPORT) {
-      gen7_3DSTATE_VIEWPORT_STATE_POINTERS_CC(r->builder,
-            r->state.CC_VIEWPORT);
-   }
-
-   gen7_rectlist_wm_depth(r, blitter);
-
-   gen6_3DSTATE_DRAWING_RECTANGLE(r->builder, 0, 0,
-         blitter->fb.width, blitter->fb.height);
-
-   if (ilo_dev_gen(r->dev) == ILO_GEN(7))
-      gen7_wa_post_ps_and_later(r);
-
-   ilo_render_3dprimitive(r, &blitter->draw_info);
-}
-
-int
-ilo_render_get_draw_commands_len_gen7(const struct ilo_render *render,
-                                      const struct ilo_state_vector *vec)
-{
-   static int len;
-
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   if (!len) {
-      len += GEN7_3DSTATE_URB_ANY__SIZE * 4;
-      len += GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_ANY__SIZE * 5;
-      len += GEN6_3DSTATE_CONSTANT_ANY__SIZE * 5;
-      len += GEN7_3DSTATE_POINTERS_ANY__SIZE * (5 + 5 + 4);
-      len += GEN7_3DSTATE_SO_BUFFER__SIZE * 4;
-      len += GEN6_PIPE_CONTROL__SIZE * 5;
-
-      len +=
-         GEN6_STATE_BASE_ADDRESS__SIZE +
-         GEN6_STATE_SIP__SIZE +
-         GEN6_3DSTATE_VF_STATISTICS__SIZE +
-         GEN6_PIPELINE_SELECT__SIZE +
-         GEN6_3DSTATE_CLEAR_PARAMS__SIZE +
-         GEN6_3DSTATE_DEPTH_BUFFER__SIZE +
-         GEN6_3DSTATE_STENCIL_BUFFER__SIZE +
-         GEN6_3DSTATE_HIER_DEPTH_BUFFER__SIZE +
-         GEN6_3DSTATE_VERTEX_BUFFERS__SIZE +
-         GEN6_3DSTATE_VERTEX_ELEMENTS__SIZE +
-         GEN6_3DSTATE_INDEX_BUFFER__SIZE +
-         GEN75_3DSTATE_VF__SIZE +
-         GEN6_3DSTATE_VS__SIZE +
-         GEN6_3DSTATE_GS__SIZE +
-         GEN6_3DSTATE_CLIP__SIZE +
-         GEN6_3DSTATE_SF__SIZE +
-         GEN6_3DSTATE_WM__SIZE +
-         GEN6_3DSTATE_SAMPLE_MASK__SIZE +
-         GEN7_3DSTATE_HS__SIZE +
-         GEN7_3DSTATE_TE__SIZE +
-         GEN7_3DSTATE_DS__SIZE +
-         GEN7_3DSTATE_STREAMOUT__SIZE +
-         GEN7_3DSTATE_SBE__SIZE +
-         GEN7_3DSTATE_PS__SIZE +
-         GEN6_3DSTATE_DRAWING_RECTANGLE__SIZE +
-         GEN6_3DSTATE_POLY_STIPPLE_OFFSET__SIZE +
-         GEN6_3DSTATE_POLY_STIPPLE_PATTERN__SIZE +
-         GEN6_3DSTATE_LINE_STIPPLE__SIZE +
-         GEN6_3DSTATE_AA_LINE_PARAMETERS__SIZE +
-         GEN6_3DSTATE_MULTISAMPLE__SIZE +
-         GEN7_3DSTATE_SO_DECL_LIST__SIZE +
-         GEN6_3DPRIMITIVE__SIZE;
-   }
-
-   return len;
-}
diff --git a/src/gallium/drivers/ilo/ilo_render_gen8.c b/src/gallium/drivers/ilo/ilo_render_gen8.c
deleted file mode 100644 (file)
index efe0e0d..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h"
-#include "core/ilo_builder_3d.h"
-#include "core/ilo_builder_render.h"
-
-#include "ilo_blitter.h"
-#include "ilo_resource.h"
-#include "ilo_shader.h"
-#include "ilo_state.h"
-#include "ilo_render_gen.h"
-
-static void
-gen8_wa_pre_depth(struct ilo_render *r)
-{
-   ILO_DEV_ASSERT(r->dev, 8, 8);
-
-   /*
-    * From the Ivy Bridge PRM, volume 2 part 1, page 315:
-    *
-    *     "Restriction: Prior to changing Depth/Stencil Buffer state (i.e.,
-    *      any combination of 3DSTATE_DEPTH_BUFFER, 3DSTATE_CLEAR_PARAMS,
-    *      3DSTATE_STENCIL_BUFFER, 3DSTATE_HIER_DEPTH_BUFFER) SW must first
-    *      issue a pipelined depth stall (PIPE_CONTROL with Depth Stall bit
-    *      set), followed by a pipelined depth cache flush (PIPE_CONTROL with
-    *      Depth Flush Bit set, followed by another pipelined depth stall
-    *      (PIPE_CONTROL with Depth Stall Bit set), unless SW can otherwise
-    *      guarantee that the pipeline from WM onwards is already flushed
-    *      (e.g., via a preceding MI_FLUSH)."
-    */
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_STALL);
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_CACHE_FLUSH);
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_DEPTH_STALL);
-}
-
-#define DIRTY(state) (session->pipe_dirty & ILO_DIRTY_ ## state)
-
-static void
-gen8_draw_sf(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_RASTER */
-   if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_RASTER)
-      gen8_3DSTATE_RASTER(r->builder, &vec->rasterizer->rs);
-
-   /* 3DSTATE_SBE and 3DSTATE_SBE_SWIZ */
-   if (DIRTY(FS)) {
-      const struct ilo_state_sbe *sbe = ilo_shader_get_kernel_sbe(vec->fs);
-
-      gen8_3DSTATE_SBE(r->builder, sbe);
-      gen8_3DSTATE_SBE_SWIZ(r->builder, sbe);
-   }
-
-   /* 3DSTATE_SF */
-   if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_SF)
-      gen7_3DSTATE_SF(r->builder, &vec->rasterizer->rs);
-}
-
-static void
-gen8_draw_wm(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   const union ilo_shader_cso *cso = ilo_shader_get_kernel_cso(vec->fs);
-   const uint32_t kernel_offset = ilo_shader_get_kernel_offset(vec->fs);
-
-   /* 3DSTATE_WM */
-   if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_WM)
-      gen8_3DSTATE_WM(r->builder, &vec->rasterizer->rs);
-
-   if (session->cc_delta.dirty & ILO_STATE_CC_3DSTATE_WM_DEPTH_STENCIL)
-      gen8_3DSTATE_WM_DEPTH_STENCIL(r->builder, &vec->blend->cc);
-
-   /* 3DSTATE_WM_HZ_OP and 3DSTATE_WM_CHROMAKEY */
-   if (r->hw_ctx_changed) {
-      gen8_disable_3DSTATE_WM_HZ_OP(r->builder);
-      gen8_3DSTATE_WM_CHROMAKEY(r->builder);
-   }
-
-   /* 3DSTATE_BINDING_TABLE_POINTERS_PS */
-   if (session->binding_table_fs_changed) {
-      gen7_3DSTATE_BINDING_TABLE_POINTERS_PS(r->builder,
-            r->state.wm.BINDING_TABLE_STATE);
-   }
-
-   /* 3DSTATE_SAMPLER_STATE_POINTERS_PS */
-   if (session->sampler_fs_changed) {
-      gen7_3DSTATE_SAMPLER_STATE_POINTERS_PS(r->builder,
-            r->state.wm.SAMPLER_STATE);
-   }
-
-   /* 3DSTATE_CONSTANT_PS */
-   if (session->pcb_fs_changed) {
-      gen7_3DSTATE_CONSTANT_PS(r->builder,
-            &r->state.wm.PUSH_CONSTANT_BUFFER,
-            &r->state.wm.PUSH_CONSTANT_BUFFER_size,
-            1);
-   }
-
-   /* 3DSTATE_PS */
-   if (DIRTY(FS) || r->instruction_bo_changed)
-      gen8_3DSTATE_PS(r->builder, &cso->ps, kernel_offset, r->fs_scratch.bo);
-
-   /* 3DSTATE_PS_EXTRA */
-   if (DIRTY(FS))
-      gen8_3DSTATE_PS_EXTRA(r->builder, &cso->ps);
-
-   /* 3DSTATE_PS_BLEND */
-   if (session->cc_delta.dirty & ILO_STATE_CC_3DSTATE_PS_BLEND)
-      gen8_3DSTATE_PS_BLEND(r->builder, &vec->blend->cc);
-
-   /* 3DSTATE_SCISSOR_STATE_POINTERS */
-   if (session->scissor_changed) {
-      gen6_3DSTATE_SCISSOR_STATE_POINTERS(r->builder,
-            r->state.SCISSOR_RECT);
-   }
-
-   /* 3DSTATE_DEPTH_BUFFER and 3DSTATE_CLEAR_PARAMS */
-   if (DIRTY(FB) || r->batch_bo_changed) {
-      const struct ilo_state_zs *zs;
-      uint32_t clear_params;
-
-      if (vec->fb.state.zsbuf) {
-         const struct ilo_surface_cso *surface =
-            (const struct ilo_surface_cso *) vec->fb.state.zsbuf;
-         const struct ilo_texture_slice *slice =
-            ilo_texture_get_slice(ilo_texture(surface->base.texture),
-                  surface->base.u.tex.level, surface->base.u.tex.first_layer);
-
-         assert(!surface->is_rt);
-         zs = &surface->u.zs;
-         clear_params = slice->clear_value;
-      }
-      else {
-         zs = &vec->fb.null_zs;
-         clear_params = 0;
-      }
-
-      gen8_wa_pre_depth(r);
-
-      gen6_3DSTATE_DEPTH_BUFFER(r->builder, zs);
-      gen6_3DSTATE_HIER_DEPTH_BUFFER(r->builder, zs);
-      gen6_3DSTATE_STENCIL_BUFFER(r->builder, zs);
-      gen7_3DSTATE_CLEAR_PARAMS(r->builder, clear_params);
-   }
-}
-
-static void
-gen8_draw_wm_sample_pattern(struct ilo_render *r,
-                            const struct ilo_state_vector *vec,
-                            struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_SAMPLE_PATTERN */
-   if (r->hw_ctx_changed)
-      gen8_3DSTATE_SAMPLE_PATTERN(r->builder, &r->sample_pattern);
-}
-
-static void
-gen8_draw_wm_multisample(struct ilo_render *r,
-                         const struct ilo_state_vector *vec,
-                         struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_MULTISAMPLE */
-   if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_MULTISAMPLE)
-      gen8_3DSTATE_MULTISAMPLE(r->builder, &vec->rasterizer->rs);
-
-   /* 3DSTATE_SAMPLE_MASK */
-   if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_SAMPLE_MASK)
-      gen6_3DSTATE_SAMPLE_MASK(r->builder, &vec->rasterizer->rs);
-}
-
-static void
-gen8_draw_vf(struct ilo_render *r,
-             const struct ilo_state_vector *vec,
-             struct ilo_render_draw_session *session)
-{
-   /* 3DSTATE_INDEX_BUFFER */
-   if ((session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_INDEX_BUFFER) ||
-       DIRTY(IB) || r->batch_bo_changed)
-      gen8_3DSTATE_INDEX_BUFFER(r->builder, &vec->ve->vf, &vec->ib.ib);
-
-   /* 3DSTATE_VF */
-   if (session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_VF)
-      gen75_3DSTATE_VF(r->builder, &vec->ve->vf);
-
-   /* 3DSTATE_VERTEX_BUFFERS */
-   if ((session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_VERTEX_BUFFERS) ||
-       DIRTY(VB) || DIRTY(VE) || r->batch_bo_changed) {
-      gen6_3DSTATE_VERTEX_BUFFERS(r->builder, &vec->ve->vf,
-            vec->vb.vb, vec->ve->vb_count);
-   }
-
-   /* 3DSTATE_VERTEX_ELEMENTS */
-   if (session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_VERTEX_ELEMENTS)
-      gen6_3DSTATE_VERTEX_ELEMENTS(r->builder, &vec->ve->vf);
-
-   gen8_3DSTATE_VF_TOPOLOGY(r->builder, vec->draw_info.topology);
-
-   if (session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_VF_INSTANCING) {
-      const uint8_t attr_count = ilo_state_vf_get_attr_count(&vec->ve->vf);
-      uint8_t i;
-
-      for (i = 0; i < attr_count; i++)
-         gen8_3DSTATE_VF_INSTANCING(r->builder, &vec->ve->vf, i);
-   }
-
-   if (session->vf_delta.dirty & ILO_STATE_VF_3DSTATE_VF_SGVS)
-      gen8_3DSTATE_VF_SGVS(r->builder, &vec->ve->vf);
-}
-
-void
-ilo_render_emit_draw_commands_gen8(struct ilo_render *render,
-                                   const struct ilo_state_vector *vec,
-                                   struct ilo_render_draw_session *session)
-{
-   ILO_DEV_ASSERT(render->dev, 8, 8);
-
-   /*
-    * We try to keep the order of the commands match, as closely as possible,
-    * that of the classic i965 driver.  It allows us to compare the command
-    * streams easily.
-    */
-   gen6_draw_common_select(render, vec, session);
-   gen6_draw_common_sip(render, vec, session);
-   gen6_draw_vf_statistics(render, vec, session);
-   gen8_draw_wm_sample_pattern(render, vec, session);
-   gen6_draw_common_base_address(render, vec, session);
-   gen7_draw_common_pointers_1(render, vec, session);
-   gen7_draw_common_pcb_alloc(render, vec, session);
-   gen7_draw_common_urb(render, vec, session);
-   gen7_draw_common_pointers_2(render, vec, session);
-   gen8_draw_wm_multisample(render, vec, session);
-   gen7_draw_gs(render, vec, session);
-   gen7_draw_hs(render, vec, session);
-   gen7_draw_te(render, vec, session);
-   gen7_draw_ds(render, vec, session);
-   gen7_draw_vs(render, vec, session);
-   gen7_draw_sol(render, vec, session);
-   gen6_draw_clip(render, vec, session);
-   gen8_draw_sf(render, vec, session);
-   gen8_draw_wm(render, vec, session);
-   gen6_draw_wm_raster(render, vec, session);
-   gen6_draw_sf_rect(render, vec, session);
-   gen8_draw_vf(render, vec, session);
-
-   ilo_render_3dprimitive(render, &vec->draw_info);
-}
-
-int
-ilo_render_get_draw_commands_len_gen8(const struct ilo_render *render,
-                                      const struct ilo_state_vector *vec)
-{
-   static int len;
-
-   ILO_DEV_ASSERT(render->dev, 8, 8);
-
-   if (!len) {
-      len += GEN7_3DSTATE_URB_ANY__SIZE * 4;
-      len += GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_ANY__SIZE * 5;
-      len += GEN6_3DSTATE_CONSTANT_ANY__SIZE * 5;
-      len += GEN7_3DSTATE_POINTERS_ANY__SIZE * (5 + 5 + 4);
-      len += GEN7_3DSTATE_SO_BUFFER__SIZE * 4;
-      len += GEN6_PIPE_CONTROL__SIZE * 5;
-
-      len +=
-         GEN6_STATE_BASE_ADDRESS__SIZE +
-         GEN6_STATE_SIP__SIZE +
-         GEN6_3DSTATE_VF_STATISTICS__SIZE +
-         GEN6_PIPELINE_SELECT__SIZE +
-         GEN6_3DSTATE_CLEAR_PARAMS__SIZE +
-         GEN6_3DSTATE_DEPTH_BUFFER__SIZE +
-         GEN6_3DSTATE_STENCIL_BUFFER__SIZE +
-         GEN6_3DSTATE_HIER_DEPTH_BUFFER__SIZE +
-         GEN6_3DSTATE_VERTEX_BUFFERS__SIZE +
-         GEN6_3DSTATE_VERTEX_ELEMENTS__SIZE +
-         GEN6_3DSTATE_INDEX_BUFFER__SIZE +
-         GEN75_3DSTATE_VF__SIZE +
-         GEN6_3DSTATE_VS__SIZE +
-         GEN6_3DSTATE_GS__SIZE +
-         GEN6_3DSTATE_CLIP__SIZE +
-         GEN6_3DSTATE_SF__SIZE +
-         GEN6_3DSTATE_WM__SIZE +
-         GEN6_3DSTATE_SAMPLE_MASK__SIZE +
-         GEN7_3DSTATE_HS__SIZE +
-         GEN7_3DSTATE_TE__SIZE +
-         GEN7_3DSTATE_DS__SIZE +
-         GEN7_3DSTATE_STREAMOUT__SIZE +
-         GEN7_3DSTATE_SBE__SIZE +
-         GEN7_3DSTATE_PS__SIZE +
-         GEN6_3DSTATE_DRAWING_RECTANGLE__SIZE +
-         GEN6_3DSTATE_POLY_STIPPLE_OFFSET__SIZE +
-         GEN6_3DSTATE_POLY_STIPPLE_PATTERN__SIZE +
-         GEN6_3DSTATE_LINE_STIPPLE__SIZE +
-         GEN6_3DSTATE_AA_LINE_PARAMETERS__SIZE +
-         GEN6_3DSTATE_MULTISAMPLE__SIZE +
-         GEN7_3DSTATE_SO_DECL_LIST__SIZE +
-         GEN6_3DPRIMITIVE__SIZE;
-
-      len +=
-         GEN8_3DSTATE_VF_INSTANCING__SIZE * 33 +
-         GEN8_3DSTATE_VF_SGVS__SIZE +
-         GEN8_3DSTATE_VF_TOPOLOGY__SIZE +
-         GEN8_3DSTATE_SBE_SWIZ__SIZE +
-         GEN8_3DSTATE_RASTER__SIZE +
-         GEN8_3DSTATE_WM_CHROMAKEY__SIZE +
-         GEN8_3DSTATE_WM_DEPTH_STENCIL__SIZE +
-         GEN8_3DSTATE_WM_HZ_OP__SIZE +
-         GEN8_3DSTATE_PS_EXTRA__SIZE +
-         GEN8_3DSTATE_PS_BLEND__SIZE +
-         GEN8_3DSTATE_SAMPLE_PATTERN__SIZE;
-   }
-
-   return len;
-}
-
-int
-ilo_render_get_rectlist_commands_len_gen8(const struct ilo_render *render,
-                                          const struct ilo_blitter *blitter)
-{
-   ILO_DEV_ASSERT(render->dev, 8, 8);
-
-   return 96;
-}
-
-void
-ilo_render_emit_rectlist_commands_gen8(struct ilo_render *r,
-                                       const struct ilo_blitter *blitter,
-                                       const struct ilo_render_rectlist_session *session)
-{
-   ILO_DEV_ASSERT(r->dev, 8, 8);
-
-   gen8_wa_pre_depth(r);
-
-   if (blitter->uses & (ILO_BLITTER_USE_FB_DEPTH |
-                        ILO_BLITTER_USE_FB_STENCIL))
-      gen6_3DSTATE_DEPTH_BUFFER(r->builder, &blitter->fb.dst.u.zs);
-
-   if (blitter->uses & ILO_BLITTER_USE_FB_DEPTH) {
-      gen6_3DSTATE_HIER_DEPTH_BUFFER(r->builder,
-            &blitter->fb.dst.u.zs);
-   }
-
-   if (blitter->uses & ILO_BLITTER_USE_FB_STENCIL) {
-      gen6_3DSTATE_STENCIL_BUFFER(r->builder,
-            &blitter->fb.dst.u.zs);
-   }
-
-   gen7_3DSTATE_CLEAR_PARAMS(r->builder,
-         blitter->depth_clear_value);
-
-   gen6_3DSTATE_DRAWING_RECTANGLE(r->builder, 0, 0,
-         blitter->fb.width, blitter->fb.height);
-
-   gen8_3DSTATE_WM_HZ_OP(r->builder, &blitter->fb.rs,
-         blitter->fb.width, blitter->fb.height);
-
-   ilo_render_pipe_control(r, GEN6_PIPE_CONTROL_WRITE_IMM);
-
-   gen8_disable_3DSTATE_WM_HZ_OP(r->builder);
-}
diff --git a/src/gallium/drivers/ilo/ilo_render_media.c b/src/gallium/drivers/ilo/ilo_render_media.c
deleted file mode 100644 (file)
index a0de002..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h"
-#include "core/ilo_builder_media.h"
-#include "core/ilo_builder_mi.h"
-#include "core/ilo_builder_render.h"
-
-#include "ilo_shader.h"
-#include "ilo_state.h"
-#include "ilo_render_gen.h"
-
-struct gen7_l3_config {
-   int slm;
-   int urb;
-   int rest;
-   int dc;
-   int ro;
-   int is;
-   int c;
-   int t;
-};
-
-/*
- * From the Ivy Bridge PRM, volume 1 part 7, page 10:
- *
- *     "Normal L3/URB mode (non-SLM mode), uses all 4 banks of L3 equally to
- *      distribute cycles. The following allocation is a suggested programming
- *      model. Note all numbers below are given in KBytes."
- *
- * From the Haswell PRM, volume 7, page 662:
- *
- *     "The configuration for {SLM = 0,URB = 224,DC = 32,RO = 256,IS = 0,C =
- *      0,T =0, SUM 512} was validated as a later supported configuration and
- *      can be utilized if desired."
- */
-static const struct gen7_l3_config gen7_l3_non_slm_configs[] = {
-   /*       SLM   URB  Rest    DC    RO   I/S     C     T */
-   [0] = {    0,  256,    0,    0,  256,    0,    0,    0, },
-   [1] = {    0,  256,    0,  128,  128,    0,    0,    0, },
-   [2] = {    0,  256,    0,   32,    0,   64,   32,  128, },
-   [3] = {    0,  224,    0,   64,    0,   64,   32,  128, },
-   [4] = {    0,  224,    0,  128,    0,   64,   32,   64, },
-   [5] = {    0,  224,    0,   64,    0,  128,   32,   64, },
-   [6] = {    0,  224,    0,    0,    0,  128,   32,  128, },
-   [7] = {    0,  256,    0,    0,    0,  128,    0,  128, },
-
-   [8] = {    0,  224,    0,   32,  256,    0,    0,    0, },
-};
-
-/*
- * From the Ivy Bridge PRM, volume 1 part 7, page 11:
- *
- *     "With the existence of Shared Local Memory, a 64KB chunk from each of
- *      the 2 L3 banks will be reserved for SLM usage. The remaining cache
- *      space is divided between the remaining clients. SLM allocation is done
- *      via reducing the number of ways on the two banks from 64 to 32."
- *
- * From the Haswell PRM, volume 7, page 662:
- *
- *     "The configuration for {SLM = 128,URB = 128,DC = 0,RO = 256,IS = 0,C =
- *      0,T =0, SUM 512} was validated as a later supported configuration and
- *      can be utilized if desired. For this configuration, global atomics
- *      must be programmed to be in GTI."
- */
-static const struct gen7_l3_config gen7_l3_slm_configs[] = {
-   /*       SLM   URB  Rest    DC    RO   I/S     C     T */
-   [0] = {  128,  128,    0,  128,  128,    0,    0,    0, },
-   [1] = {  128,  128,    0,   64,    0,   64,   64,   64, },
-   [2] = {  128,  128,    0,   32,    0,   64,   32,  128, },
-   [3] = {  128,  128,    0,   32,    0,  128,   32,   64, },
-
-   [4] = {  128,  128,    0,    0,  256,    0,    0,    0, },
-};
-
-static void
-gen7_launch_grid_l3(struct ilo_render *r, bool use_slm)
-{
-   uint32_t l3sqcreg1, l3cntlreg2, l3cntlreg3;
-   const struct gen7_l3_config *conf;
-
-   /*
-    * This function mostly follows what beignet does.  I do not know why, for
-    * example, CON4DCUNC should be reset.  I do not know if it should be set
-    * again after launch_grid().
-    */
-
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   if (use_slm)
-      conf = &gen7_l3_slm_configs[1];
-   else
-      conf = &gen7_l3_non_slm_configs[4];
-
-   /* unset GEN7_REG_L3SQCREG1_CON4DCUNC (without readback first) */
-   if (ilo_dev_gen(r->dev) >= ILO_GEN(7.5)) {
-      l3sqcreg1 = GEN75_REG_L3SQCREG1_SQGPCI_24 |
-                  GEN75_REG_L3SQCREG1_SQHPCI_8;
-   } else {
-      l3sqcreg1 = GEN7_REG_L3SQCREG1_SQGHPCI_18_6;
-   }
-
-   l3cntlreg2 = (conf->dc / 8) << GEN7_REG_L3CNTLREG2_DCWASS__SHIFT |
-                (conf->ro / 8) << GEN7_REG_L3CNTLREG2_RDOCPL__SHIFT |
-                (conf->urb / 8) << GEN7_REG_L3CNTLREG2_URBALL__SHIFT;
-
-   l3cntlreg3 = (conf->t / 8) << GEN7_REG_L3CNTLREG3_TXWYALL__SHIFT |
-                (conf->c / 8) << GEN7_REG_L3CNTLREG3_CTWYALL__SHIFT |
-                (conf->is / 8) << GEN7_REG_L3CNTLREG3_ISWYALL__SHIFT;
-
-   if (conf->slm) {
-      /*
-       * From the Ivy Bridge PRM, volume 1 part 7, page 11:
-       *
-       *     "Note that URB needs to be set as low b/w client in SLM mode,
-       *      else the hash will fail. This is a required s/w model."
-       */
-      l3cntlreg2 |= GEN7_REG_L3CNTLREG2_URBSLMB |
-                    GEN7_REG_L3CNTLREG2_SLMMENB;
-   }
-
-   gen6_MI_LOAD_REGISTER_IMM(r->builder, GEN7_REG_L3SQCREG1, l3sqcreg1);
-   gen6_MI_LOAD_REGISTER_IMM(r->builder, GEN7_REG_L3CNTLREG2, l3cntlreg2);
-   gen6_MI_LOAD_REGISTER_IMM(r->builder, GEN7_REG_L3CNTLREG3, l3cntlreg3);
-}
-
-int
-ilo_render_get_launch_grid_commands_len(const struct ilo_render *render,
-                                        const struct ilo_state_vector *vec)
-{
-   static int len;
-
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   if (!len) {
-      len +=
-         GEN6_PIPELINE_SELECT__SIZE +
-         GEN6_STATE_BASE_ADDRESS__SIZE +
-         GEN6_MEDIA_VFE_STATE__SIZE +
-         GEN6_MEDIA_CURBE_LOAD__SIZE +
-         GEN6_MEDIA_INTERFACE_DESCRIPTOR_LOAD__SIZE +
-         GEN6_MEDIA_STATE_FLUSH__SIZE;
-
-      len += ilo_render_get_flush_len(render) * 3;
-
-      if (ilo_dev_gen(render->dev) >= ILO_GEN(7)) {
-         len += GEN6_MI_LOAD_REGISTER_IMM__SIZE * 3 * 2;
-         len += GEN7_GPGPU_WALKER__SIZE;
-      }
-   }
-
-   return len;
-}
-
-void
-ilo_render_emit_launch_grid_commands(struct ilo_render *render,
-                                     const struct ilo_state_vector *vec,
-                                     const struct ilo_render_launch_grid_session *session)
-{
-   const unsigned batch_used = ilo_builder_batch_used(render->builder);
-   const uint32_t pcb = render->state.cs.PUSH_CONSTANT_BUFFER;
-   const int pcb_size = render->state.cs.PUSH_CONSTANT_BUFFER_size;
-   int simd_size;
-   bool use_slm;
-
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   simd_size = ilo_shader_get_kernel_param(vec->cs, ILO_KERNEL_CS_SIMD_SIZE);
-   use_slm = ilo_shader_get_kernel_param(vec->cs, ILO_KERNEL_CS_LOCAL_SIZE);
-
-   ilo_render_emit_flush(render);
-
-   if (ilo_dev_gen(render->dev) >= ILO_GEN(7)) {
-      gen7_launch_grid_l3(render, use_slm);
-      ilo_render_emit_flush(render);
-
-      gen6_PIPELINE_SELECT(render->builder,
-            GEN7_PIPELINE_SELECT_DW0_SELECT_GPGPU);
-   } else {
-      gen6_PIPELINE_SELECT(render->builder,
-            GEN6_PIPELINE_SELECT_DW0_SELECT_MEDIA);
-   }
-
-   gen6_state_base_address(render->builder, true);
-
-   gen6_MEDIA_VFE_STATE(render->builder, &session->compute);
-
-   if (pcb_size)
-      gen6_MEDIA_CURBE_LOAD(render->builder, pcb, pcb_size);
-
-   gen6_MEDIA_INTERFACE_DESCRIPTOR_LOAD(render->builder,
-         session->idrt, session->idrt_size);
-
-   gen7_GPGPU_WALKER(render->builder, session->thread_group_offset,
-         session->thread_group_dim, session->thread_group_size, simd_size);
-
-   gen6_MEDIA_STATE_FLUSH(render->builder);
-
-   if (ilo_dev_gen(render->dev) >= ILO_GEN(7) && use_slm) {
-      ilo_render_emit_flush(render);
-      gen7_launch_grid_l3(render, false);
-   }
-
-   assert(ilo_builder_batch_used(render->builder) <= batch_used +
-         ilo_render_get_launch_grid_commands_len(render, vec));
-}
diff --git a/src/gallium/drivers/ilo/ilo_render_surface.c b/src/gallium/drivers/ilo/ilo_render_surface.c
deleted file mode 100644 (file)
index 50f00d2..0000000
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "core/ilo_builder_3d.h"
-
-#include "ilo_common.h"
-#include "ilo_blitter.h"
-#include "ilo_resource.h"
-#include "ilo_shader.h"
-#include "ilo_state.h"
-#include "ilo_render_gen.h"
-
-#define DIRTY(state) (session->pipe_dirty & ILO_DIRTY_ ## state)
-
-static inline uint32_t
-gen6_so_SURFACE_STATE(struct ilo_builder *builder,
-                      const struct pipe_stream_output_target *so,
-                      const struct pipe_stream_output_info *so_info,
-                      int so_index)
-{
-   struct ilo_state_surface_buffer_info info;
-   struct ilo_state_surface surf;
-
-   ILO_DEV_ASSERT(builder->dev, 6, 6);
-
-   memset(&info, 0, sizeof(info));
-
-   info.vma = ilo_resource_get_vma(so->buffer);
-   info.offset = so->buffer_offset + so_info->output[so_index].dst_offset * 4;
-   info.size = so->buffer_size - so_info->output[so_index].dst_offset * 4;
-
-   info.access = ILO_STATE_SURFACE_ACCESS_DP_SVB;
-
-   switch (so_info->output[so_index].num_components) {
-   case 1:
-      info.format = GEN6_FORMAT_R32_FLOAT;
-      info.format_size = 4;
-      break;
-   case 2:
-      info.format = GEN6_FORMAT_R32G32_FLOAT;
-      info.format_size = 8;
-      break;
-   case 3:
-      info.format = GEN6_FORMAT_R32G32B32_FLOAT;
-      info.format_size = 12;
-      break;
-   case 4:
-      info.format = GEN6_FORMAT_R32G32B32A32_FLOAT;
-      info.format_size = 16;
-      break;
-   default:
-      assert(!"unexpected SO components length");
-      info.format = GEN6_FORMAT_R32_FLOAT;
-      info.format_size = 4;
-      break;
-   }
-
-   info.struct_size =
-      so_info->stride[so_info->output[so_index].output_buffer] * 4;
-
-   memset(&surf, 0, sizeof(surf));
-   ilo_state_surface_init_for_buffer(&surf, builder->dev, &info);
-
-   return gen6_SURFACE_STATE(builder, &surf);
-}
-
-static void
-gen6_emit_draw_surface_rt(struct ilo_render *r,
-                          const struct ilo_state_vector *vec,
-                          struct ilo_render_draw_session *session)
-{
-   const struct ilo_shader_state *fs = vec->fs;
-   const struct ilo_fb_state *fb = &vec->fb;
-   uint32_t *surface_state;
-   int base, count, i;
-
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   if (!DIRTY(FS) && !DIRTY(FB))
-      return;
-   if (!fs)
-      return;
-
-   session->binding_table_fs_changed = true;
-
-   base = ilo_shader_get_kernel_param(fs, ILO_KERNEL_FS_SURFACE_RT_BASE);
-   count = ilo_shader_get_kernel_param(fs, ILO_KERNEL_FS_SURFACE_RT_COUNT);
-
-   /* SURFACE_STATEs for render targets */
-   surface_state = &r->state.wm.SURFACE_STATE[base];
-   for (i = 0; i < count; i++) {
-      if (i < fb->state.nr_cbufs && fb->state.cbufs[i]) {
-         const struct ilo_surface_cso *surface =
-            (const struct ilo_surface_cso *) fb->state.cbufs[i];
-
-         assert(surface->is_rt);
-         surface_state[i] = gen6_SURFACE_STATE(r->builder, &surface->u.rt);
-      } else {
-         surface_state[i] = gen6_SURFACE_STATE(r->builder, &fb->null_rt);
-      }
-   }
-}
-
-static void
-gen6_emit_draw_surface_so(struct ilo_render *r,
-                          const struct ilo_state_vector *vec,
-                          struct ilo_render_draw_session *session)
-{
-   const struct ilo_shader_state *vs = vec->vs;
-   const struct ilo_shader_state *gs = vec->gs;
-   const struct ilo_so_state *so = &vec->so;
-   const struct pipe_stream_output_info *so_info;
-   uint32_t *surface_state;
-   int base, count, i;
-
-   ILO_DEV_ASSERT(r->dev, 6, 6);
-
-   if (!DIRTY(VS) && !DIRTY(GS) && !DIRTY(SO))
-      return;
-
-   if (gs) {
-      so_info = ilo_shader_get_kernel_so_info(gs);
-      base = ilo_shader_get_kernel_param(gs,
-            ILO_KERNEL_GS_GEN6_SURFACE_SO_BASE);
-      count = ilo_shader_get_kernel_param(gs,
-            ILO_KERNEL_GS_GEN6_SURFACE_SO_COUNT);
-   } else if (vs) {
-      so_info = ilo_shader_get_kernel_so_info(vs);
-      base = 0;
-      count = ilo_shader_get_kernel_param(vs,
-            ILO_KERNEL_VS_GEN6_SO_SURFACE_COUNT);
-   } else {
-      return;
-   }
-
-   session->binding_table_gs_changed = true;
-
-   /* SURFACE_STATEs for stream output targets */
-   surface_state = &r->state.gs.SURFACE_STATE[base];
-   for (i = 0; i < count; i++) {
-      if (so_info && i < so_info->num_outputs &&
-          so_info->output[i].output_buffer < so->count &&
-          so->states[so_info->output[i].output_buffer]) {
-         const struct pipe_stream_output_target *so_target =
-            so->states[so_info->output[i].output_buffer];
-
-         surface_state[i] = gen6_so_SURFACE_STATE(r->builder,
-               so_target, so_info, i);
-      } else {
-         surface_state[i] = 0;
-      }
-   }
-}
-
-static void
-gen6_emit_draw_surface_view(struct ilo_render *r,
-                            const struct ilo_state_vector *vec,
-                            int shader_type,
-                            struct ilo_render_draw_session *session)
-{
-   const struct ilo_view_state *view = &vec->view[shader_type];
-   const struct ilo_shader_state *sh;
-   uint32_t *surface_state;
-   int base, count, i;
-
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   switch (shader_type) {
-   case PIPE_SHADER_VERTEX:
-      if (!DIRTY(VS) && !DIRTY(VIEW_VS))
-         return;
-      if (!vec->vs)
-         return;
-
-      sh = vec->vs;
-      surface_state = r->state.vs.SURFACE_STATE;
-      session->binding_table_vs_changed = true;
-      break;
-   case PIPE_SHADER_FRAGMENT:
-      if (!DIRTY(FS) && !DIRTY(VIEW_FS))
-         return;
-      if (!vec->fs)
-         return;
-
-      sh = vec->fs;
-      surface_state = r->state.wm.SURFACE_STATE;
-      session->binding_table_fs_changed = true;
-      break;
-   default:
-      return;
-      break;
-   }
-
-   base = ilo_shader_get_kernel_param(sh, ILO_KERNEL_SURFACE_TEX_BASE);
-   count = ilo_shader_get_kernel_param(sh, ILO_KERNEL_SURFACE_TEX_COUNT);
-
-   /* SURFACE_STATEs for sampler views */
-   surface_state += base;
-   for (i = 0; i < count; i++) {
-      if (i < view->count && view->states[i]) {
-         const struct ilo_view_cso *cso =
-            (const struct ilo_view_cso *) view->states[i];
-
-         surface_state[i] = gen6_SURFACE_STATE(r->builder, &cso->surface);
-      } else {
-         surface_state[i] = 0;
-      }
-   }
-}
-
-static void
-gen6_emit_draw_surface_const(struct ilo_render *r,
-                             const struct ilo_state_vector *vec,
-                             int shader_type,
-                             struct ilo_render_draw_session *session)
-{
-   const struct ilo_cbuf_state *cbuf = &vec->cbuf[shader_type];
-   const struct ilo_shader_state *sh;
-   uint32_t *surface_state;
-   int base, count, i;
-
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   switch (shader_type) {
-   case PIPE_SHADER_VERTEX:
-      if (!DIRTY(VS) && !DIRTY(CBUF))
-         return;
-      if (!vec->vs)
-         return;
-
-      sh = vec->vs;
-      surface_state = r->state.vs.SURFACE_STATE;
-      session->binding_table_vs_changed = true;
-      break;
-   case PIPE_SHADER_FRAGMENT:
-      if (!DIRTY(FS) && !DIRTY(CBUF))
-         return;
-      if (!vec->fs)
-         return;
-
-      sh = vec->fs;
-      surface_state = r->state.wm.SURFACE_STATE;
-      session->binding_table_fs_changed = true;
-      break;
-   default:
-      return;
-      break;
-   }
-
-   base = ilo_shader_get_kernel_param(sh, ILO_KERNEL_SURFACE_CONST_BASE);
-   count = ilo_shader_get_kernel_param(sh, ILO_KERNEL_SURFACE_CONST_COUNT);
-
-   /* SURFACE_STATEs for constant buffers */
-   surface_state += base;
-   for (i = 0; i < count; i++) {
-      const struct ilo_cbuf_cso *cso = &cbuf->cso[i];
-
-      if (cso->resource)
-         surface_state[i] = gen6_SURFACE_STATE(r->builder, &cso->surface);
-      else
-         surface_state[i] = 0;
-   }
-}
-
-static void
-gen6_emit_draw_surface_binding_tables(struct ilo_render *r,
-                                      const struct ilo_state_vector *vec,
-                                      int shader_type,
-                                      struct ilo_render_draw_session *session)
-{
-   int count;
-
-   ILO_DEV_ASSERT(r->dev, 6, 8);
-
-   /* BINDING_TABLE_STATE */
-   switch (shader_type) {
-   case PIPE_SHADER_VERTEX:
-      if (!session->binding_table_vs_changed)
-         return;
-      if (!vec->vs)
-         return;
-
-      count = ilo_shader_get_kernel_param(vec->vs,
-            ILO_KERNEL_SURFACE_TOTAL_COUNT);
-
-      r->state.vs.BINDING_TABLE_STATE = gen6_BINDING_TABLE_STATE(r->builder,
-            r->state.vs.SURFACE_STATE, count);
-      break;
-   case PIPE_SHADER_GEOMETRY:
-      if (!session->binding_table_gs_changed)
-         return;
-      if (vec->gs) {
-         count = ilo_shader_get_kernel_param(vec->gs,
-               ILO_KERNEL_SURFACE_TOTAL_COUNT);
-      } else if (ilo_dev_gen(r->dev) == ILO_GEN(6) && vec->vs) {
-         count = ilo_shader_get_kernel_param(vec->vs,
-               ILO_KERNEL_VS_GEN6_SO_SURFACE_COUNT);
-      } else {
-         return;
-      }
-
-      r->state.gs.BINDING_TABLE_STATE = gen6_BINDING_TABLE_STATE(r->builder,
-            r->state.gs.SURFACE_STATE, count);
-      break;
-   case PIPE_SHADER_FRAGMENT:
-      if (!session->binding_table_fs_changed)
-         return;
-      if (!vec->fs)
-         return;
-
-      count = ilo_shader_get_kernel_param(vec->fs,
-            ILO_KERNEL_SURFACE_TOTAL_COUNT);
-
-      r->state.wm.BINDING_TABLE_STATE = gen6_BINDING_TABLE_STATE(r->builder,
-            r->state.wm.SURFACE_STATE, count);
-      break;
-   default:
-      break;
-   }
-}
-
-#undef DIRTY
-
-int
-ilo_render_get_draw_surface_states_len(const struct ilo_render *render,
-                                       const struct ilo_state_vector *vec)
-{
-   int sh_type, len;
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   len = 0;
-
-   for (sh_type = 0; sh_type < PIPE_SHADER_TYPES; sh_type++) {
-      const int alignment =
-         (ilo_dev_gen(render->dev) >= ILO_GEN(8) ? 64 : 32) / 4;
-      int num_surfaces = 0;
-
-      switch (sh_type) {
-      case PIPE_SHADER_VERTEX:
-         if (vec->vs) {
-            num_surfaces = ilo_shader_get_kernel_param(vec->vs,
-                  ILO_KERNEL_SURFACE_TOTAL_COUNT);
-
-            if (ilo_dev_gen(render->dev) == ILO_GEN(6)) {
-               num_surfaces += ilo_shader_get_kernel_param(vec->vs,
-                     ILO_KERNEL_VS_GEN6_SO_SURFACE_COUNT);
-            }
-         }
-         break;
-      case PIPE_SHADER_GEOMETRY:
-         if (vec->gs) {
-            num_surfaces = ilo_shader_get_kernel_param(vec->gs,
-                  ILO_KERNEL_SURFACE_TOTAL_COUNT);
-         }
-         break;
-      case PIPE_SHADER_FRAGMENT:
-         if (vec->fs) {
-            num_surfaces = ilo_shader_get_kernel_param(vec->fs,
-                  ILO_KERNEL_SURFACE_TOTAL_COUNT);
-         }
-         break;
-      default:
-         break;
-      }
-
-      /* BINDING_TABLE_STATE and SURFACE_STATEs */
-      if (num_surfaces) {
-         len += align(num_surfaces, alignment) +
-            align(GEN6_SURFACE_STATE__SIZE, alignment) * num_surfaces;
-      }
-   }
-
-   return len;
-}
-
-void
-ilo_render_emit_draw_surface_states(struct ilo_render *render,
-                                    const struct ilo_state_vector *vec,
-                                    struct ilo_render_draw_session *session)
-{
-   const unsigned surface_used = ilo_builder_surface_used(render->builder);
-   int shader_type;
-
-   ILO_DEV_ASSERT(render->dev, 6, 8);
-
-   /*
-    * upload all SURAFCE_STATEs together so that we know there are minimal
-    * paddings
-    */
-
-   gen6_emit_draw_surface_rt(render, vec, session);
-
-   if (ilo_dev_gen(render->dev) == ILO_GEN(6))
-      gen6_emit_draw_surface_so(render, vec, session);
-
-   for (shader_type = 0; shader_type < PIPE_SHADER_TYPES; shader_type++) {
-      gen6_emit_draw_surface_view(render, vec, shader_type, session);
-      gen6_emit_draw_surface_const(render, vec, shader_type, session);
-   }
-
-   /* this must be called after all SURFACE_STATEs have been uploaded */
-   for (shader_type = 0; shader_type < PIPE_SHADER_TYPES; shader_type++) {
-      gen6_emit_draw_surface_binding_tables(render, vec,
-            shader_type, session);
-   }
-
-   assert(ilo_builder_surface_used(render->builder) <= surface_used +
-         ilo_render_get_draw_surface_states_len(render, vec));
-}
-
-static void
-gen6_emit_launch_grid_surface_view(struct ilo_render *r,
-                                   const struct ilo_state_vector *vec,
-                                   struct ilo_render_launch_grid_session *session)
-{
-   const struct ilo_shader_state *cs = vec->cs;
-   const struct ilo_view_state *view = &vec->view[PIPE_SHADER_COMPUTE];
-   uint32_t *surface_state = r->state.cs.SURFACE_STATE;
-   int base, count, i;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   base = ilo_shader_get_kernel_param(cs, ILO_KERNEL_SURFACE_TEX_BASE);
-   count = ilo_shader_get_kernel_param(cs, ILO_KERNEL_SURFACE_TEX_COUNT);
-
-   /* SURFACE_STATEs for sampler views */
-   surface_state += base;
-   for (i = 0; i < count; i++) {
-      if (i < view->count && view->states[i]) {
-         const struct ilo_view_cso *cso =
-            (const struct ilo_view_cso *) view->states[i];
-
-         surface_state[i] = gen6_SURFACE_STATE(r->builder, &cso->surface);
-      } else {
-         surface_state[i] = 0;
-      }
-   }
-}
-
-static void
-gen6_emit_launch_grid_surface_const(struct ilo_render *r,
-                                    const struct ilo_state_vector *vec,
-                                    struct ilo_render_launch_grid_session *session)
-{
-   const struct ilo_shader_state *cs = vec->cs;
-   uint32_t *surface_state = r->state.cs.SURFACE_STATE;
-   struct ilo_state_surface_buffer_info info;
-   struct ilo_state_surface surf;
-   int base, count;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   base = ilo_shader_get_kernel_param(cs, ILO_KERNEL_SURFACE_CONST_BASE);
-   count = ilo_shader_get_kernel_param(cs, ILO_KERNEL_SURFACE_CONST_COUNT);
-
-   if (!count)
-      return;
-
-   memset(&info, 0, sizeof(info));
-
-   info.vma = ilo_resource_get_vma(session->input->buffer);
-   info.offset = session->input->buffer_offset;
-   info.size = session->input->buffer_size;
-
-   info.access = ILO_STATE_SURFACE_ACCESS_DP_UNTYPED;
-   info.format = GEN6_FORMAT_RAW;
-   info.format_size = 1;
-   info.struct_size = 1;
-   info.readonly = true;
-
-   memset(&surf, 0, sizeof(surf));
-   ilo_state_surface_init_for_buffer(&surf, r->dev, &info);
-
-   assert(count == 1 && session->input->buffer);
-   surface_state[base] = gen6_SURFACE_STATE(r->builder, &surf);
-}
-
-static void
-gen6_emit_launch_grid_surface_cs_resource(struct ilo_render *r,
-                                          const struct ilo_state_vector *vec,
-                                          struct ilo_render_launch_grid_session *session)
-{
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   /* TODO */
-   assert(!vec->cs_resource.count);
-}
-
-static void
-gen6_emit_launch_grid_surface_global(struct ilo_render *r,
-                                          const struct ilo_state_vector *vec,
-                                          struct ilo_render_launch_grid_session *session)
-{
-   const struct ilo_shader_state *cs = vec->cs;
-   const struct ilo_global_binding_cso *bindings =
-      util_dynarray_begin(&vec->global_binding.bindings);
-   uint32_t *surface_state = r->state.cs.SURFACE_STATE;
-   int base, count, i;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   base = ilo_shader_get_kernel_param(cs, ILO_KERNEL_CS_SURFACE_GLOBAL_BASE);
-   count = ilo_shader_get_kernel_param(cs, ILO_KERNEL_CS_SURFACE_GLOBAL_COUNT);
-
-   if (!count)
-      return;
-
-   if (base + count > ARRAY_SIZE(r->state.cs.SURFACE_STATE)) {
-      ilo_warn("too many global bindings\n");
-      count = ARRAY_SIZE(r->state.cs.SURFACE_STATE) - base;
-   }
-
-   /* SURFACE_STATEs for global bindings */
-   surface_state += base;
-   for (i = 0; i < count; i++) {
-      if (i < vec->global_binding.count && bindings[i].resource) {
-         struct ilo_state_surface_buffer_info info;
-         struct ilo_state_surface surf;
-
-         assert(bindings[i].resource->target == PIPE_BUFFER);
-
-         memset(&info, 0, sizeof(info));
-
-         info.vma = ilo_resource_get_vma(bindings[i].resource);
-         info.size = info.vma->vm_size;
-
-         info.access = ILO_STATE_SURFACE_ACCESS_DP_UNTYPED;
-         info.format = GEN6_FORMAT_RAW;
-         info.format_size = 1;
-         info.struct_size = 1;
-
-         memset(&surf, 0, sizeof(surf));
-         ilo_state_surface_init_for_buffer(&surf, r->dev, &info);
-
-         surface_state[i] = gen6_SURFACE_STATE(r->builder, &surf);
-      } else {
-         surface_state[i] = 0;
-      }
-   }
-}
-
-static void
-gen6_emit_launch_grid_surface_binding_table(struct ilo_render *r,
-                                            const struct ilo_state_vector *vec,
-                                            struct ilo_render_launch_grid_session *session)
-{
-   const struct ilo_shader_state *cs = vec->cs;
-   int count;
-
-   ILO_DEV_ASSERT(r->dev, 7, 7.5);
-
-   count = ilo_shader_get_kernel_param(cs, ILO_KERNEL_SURFACE_TOTAL_COUNT);
-   if (count) {
-      r->state.cs.BINDING_TABLE_STATE = gen6_BINDING_TABLE_STATE(r->builder,
-            r->state.cs.SURFACE_STATE, count);
-   }
-}
-
-int
-ilo_render_get_launch_grid_surface_states_len(const struct ilo_render *render,
-                                              const struct ilo_state_vector *vec)
-{
-   const int alignment = 32 / 4;
-   int num_surfaces;
-   int len = 0;
-
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   num_surfaces = ilo_shader_get_kernel_param(vec->cs,
-         ILO_KERNEL_SURFACE_TOTAL_COUNT);
-
-   /* BINDING_TABLE_STATE and SURFACE_STATEs */
-   if (num_surfaces) {
-      len += align(num_surfaces, alignment) +
-         align(GEN6_SURFACE_STATE__SIZE, alignment) * num_surfaces;
-   }
-
-   return len;
-}
-
-void
-ilo_render_emit_launch_grid_surface_states(struct ilo_render *render,
-                                           const struct ilo_state_vector *vec,
-                                           struct ilo_render_launch_grid_session *session)
-{
-   const unsigned surface_used = ilo_builder_surface_used(render->builder);
-
-   ILO_DEV_ASSERT(render->dev, 7, 7.5);
-
-   /* idrt depends on the binding table */
-   assert(!session->idrt_size);
-
-   gen6_emit_launch_grid_surface_view(render, vec, session);
-   gen6_emit_launch_grid_surface_const(render, vec, session);
-   gen6_emit_launch_grid_surface_cs_resource(render, vec, session);
-   gen6_emit_launch_grid_surface_global(render, vec, session);
-   gen6_emit_launch_grid_surface_binding_table(render, vec, session);
-
-   assert(ilo_builder_surface_used(render->builder) <= surface_used +
-         ilo_render_get_launch_grid_surface_states_len(render, vec));
-}
diff --git a/src/gallium/drivers/ilo/ilo_resource.c b/src/gallium/drivers/ilo/ilo_resource.c
deleted file mode 100644 (file)
index 5ca7e1b..0000000
+++ /dev/null
@@ -1,777 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "core/ilo_state_vf.h"
-#include "core/ilo_state_sol.h"
-#include "core/ilo_state_surface.h"
-
-#include "ilo_screen.h"
-#include "ilo_format.h"
-#include "ilo_resource.h"
-
-/*
- * From the Ivy Bridge PRM, volume 1 part 1, page 105:
- *
- *     "In addition to restrictions on maximum height, width, and depth,
- *      surfaces are also restricted to a maximum size in bytes. This
- *      maximum is 2 GB for all products and all surface types."
- */
-static const size_t ilo_max_resource_size = 1u << 31;
-
-static const char *
-resource_get_bo_name(const struct pipe_resource *templ)
-{
-   static const char *target_names[PIPE_MAX_TEXTURE_TYPES] = {
-      [PIPE_BUFFER] = "buf",
-      [PIPE_TEXTURE_1D] = "tex-1d",
-      [PIPE_TEXTURE_2D] = "tex-2d",
-      [PIPE_TEXTURE_3D] = "tex-3d",
-      [PIPE_TEXTURE_CUBE] = "tex-cube",
-      [PIPE_TEXTURE_RECT] = "tex-rect",
-      [PIPE_TEXTURE_1D_ARRAY] = "tex-1d-array",
-      [PIPE_TEXTURE_2D_ARRAY] = "tex-2d-array",
-      [PIPE_TEXTURE_CUBE_ARRAY] = "tex-cube-array",
-   };
-   const char *name = target_names[templ->target];
-
-   if (templ->target == PIPE_BUFFER) {
-      switch (templ->bind) {
-      case PIPE_BIND_VERTEX_BUFFER:
-         name = "buf-vb";
-         break;
-      case PIPE_BIND_INDEX_BUFFER:
-         name = "buf-ib";
-         break;
-      case PIPE_BIND_CONSTANT_BUFFER:
-         name = "buf-cb";
-         break;
-      case PIPE_BIND_STREAM_OUTPUT:
-         name = "buf-so";
-         break;
-      default:
-         break;
-      }
-   }
-
-   return name;
-}
-
-static bool
-resource_get_cpu_init(const struct pipe_resource *templ)
-{
-   return (templ->bind & (PIPE_BIND_DEPTH_STENCIL |
-                          PIPE_BIND_RENDER_TARGET |
-                          PIPE_BIND_STREAM_OUTPUT)) ? false : true;
-}
-
-static enum gen_surface_type
-get_surface_type(enum pipe_texture_target target)
-{
-   switch (target) {
-   case PIPE_TEXTURE_1D:
-   case PIPE_TEXTURE_1D_ARRAY:
-      return GEN6_SURFTYPE_1D;
-   case PIPE_TEXTURE_2D:
-   case PIPE_TEXTURE_RECT:
-   case PIPE_TEXTURE_2D_ARRAY:
-      return GEN6_SURFTYPE_2D;
-   case PIPE_TEXTURE_3D:
-      return GEN6_SURFTYPE_3D;
-   case PIPE_TEXTURE_CUBE:
-   case PIPE_TEXTURE_CUBE_ARRAY:
-      return GEN6_SURFTYPE_CUBE;
-   default:
-      assert(!"unknown texture target");
-      return GEN6_SURFTYPE_NULL;
-   }
-}
-
-static enum pipe_format
-resource_get_image_format(const struct pipe_resource *templ,
-                          const struct ilo_dev *dev,
-                          bool *separate_stencil_ret)
-{
-   enum pipe_format format = templ->format;
-   bool separate_stencil;
-
-   /* silently promote ETC1 */
-   if (templ->format == PIPE_FORMAT_ETC1_RGB8)
-      format = PIPE_FORMAT_R8G8B8X8_UNORM;
-
-   /* separate stencil buffers */
-   separate_stencil = false;
-   if ((templ->bind & PIPE_BIND_DEPTH_STENCIL) &&
-       util_format_is_depth_and_stencil(templ->format)) {
-      switch (templ->format) {
-      case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
-         /* Gen6 requires HiZ to be available for all levels */
-         if (ilo_dev_gen(dev) >= ILO_GEN(7) || templ->last_level == 0) {
-            format = PIPE_FORMAT_Z32_FLOAT;
-            separate_stencil = true;
-         }
-         break;
-      case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-         format = PIPE_FORMAT_Z24X8_UNORM;
-         separate_stencil = true;
-         break;
-      default:
-         break;
-      }
-   }
-
-   if (separate_stencil_ret)
-      *separate_stencil_ret = separate_stencil;
-
-   return format;
-}
-
-static inline enum gen_surface_format
-pipe_to_surface_format(const struct ilo_dev *dev, enum pipe_format format)
-{
-   switch (format) {
-   case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
-      return GEN6_FORMAT_R32_FLOAT_X8X24_TYPELESS;
-   case PIPE_FORMAT_Z32_FLOAT:
-      return GEN6_FORMAT_R32_FLOAT;
-   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
-   case PIPE_FORMAT_Z24X8_UNORM:
-      return GEN6_FORMAT_R24_UNORM_X8_TYPELESS;
-   case PIPE_FORMAT_Z16_UNORM:
-      return GEN6_FORMAT_R16_UNORM;
-   case PIPE_FORMAT_S8_UINT:
-      return GEN6_FORMAT_R8_UINT;
-   default:
-      return ilo_format_translate_color(dev, format);
-   }
-}
-
-static void
-resource_get_image_info(const struct pipe_resource *templ,
-                        const struct ilo_dev *dev,
-                        enum pipe_format image_format,
-                        struct ilo_image_info *info)
-{
-   memset(info, 0, sizeof(*info));
-
-   info->type = get_surface_type(templ->target);
-
-   info->format = pipe_to_surface_format(dev, image_format);
-   info->interleaved_stencil = util_format_is_depth_and_stencil(image_format);
-   info->is_integer = util_format_is_pure_integer(image_format);
-   info->compressed = util_format_is_compressed(image_format);
-   info->block_width = util_format_get_blockwidth(image_format);
-   info->block_height = util_format_get_blockheight(image_format);
-   info->block_size = util_format_get_blocksize(image_format);
-
-   info->width = templ->width0;
-   info->height = templ->height0;
-   info->depth = templ->depth0;
-   info->array_size = templ->array_size;
-   info->level_count = templ->last_level + 1;
-   info->sample_count = (templ->nr_samples) ? templ->nr_samples : 1;
-
-   info->aux_disable = (templ->usage == PIPE_USAGE_STAGING);
-
-   if (templ->bind & PIPE_BIND_LINEAR)
-      info->valid_tilings = 1 << GEN6_TILING_NONE;
-
-   /*
-    * Tiled images must be mapped via GTT to get a linear view.  Prefer linear
-    * images when the image size is greater than one-fourth of the mappable
-    * aperture.
-    */
-   if (templ->usage == PIPE_USAGE_STAGING)
-      info->prefer_linear_threshold = dev->aperture_mappable / 4;
-
-   info->bind_surface_sampler = (templ->bind & PIPE_BIND_SAMPLER_VIEW);
-   info->bind_surface_dp_render = (templ->bind & PIPE_BIND_RENDER_TARGET);
-   info->bind_surface_dp_typed = (templ->bind &
-         (PIPE_BIND_SHADER_IMAGE | PIPE_BIND_COMPUTE_RESOURCE));
-   info->bind_zs = (templ->bind & PIPE_BIND_DEPTH_STENCIL);
-   info->bind_scanout = (templ->bind & PIPE_BIND_SCANOUT);
-   info->bind_cursor = (templ->bind & PIPE_BIND_CURSOR);
-}
-
-static enum gen_surface_tiling
-winsys_to_surface_tiling(enum intel_tiling_mode tiling)
-{
-   switch (tiling) {
-   case INTEL_TILING_NONE:
-      return GEN6_TILING_NONE;
-   case INTEL_TILING_X:
-      return GEN6_TILING_X;
-   case INTEL_TILING_Y:
-      return GEN6_TILING_Y;
-   default:
-      assert(!"unknown tiling");
-      return GEN6_TILING_NONE;
-   }
-}
-
-static inline enum intel_tiling_mode
-surface_to_winsys_tiling(enum gen_surface_tiling tiling)
-{
-   switch (tiling) {
-   case GEN6_TILING_NONE:
-      return INTEL_TILING_NONE;
-   case GEN6_TILING_X:
-      return INTEL_TILING_X;
-   case GEN6_TILING_Y:
-      return INTEL_TILING_Y;
-   default:
-      assert(!"unknown tiling");
-      return GEN6_TILING_NONE;
-   }
-}
-
-static void
-tex_free_slices(struct ilo_texture *tex)
-{
-   FREE(tex->slices[0]);
-}
-
-static bool
-tex_alloc_slices(struct ilo_texture *tex)
-{
-   const struct pipe_resource *templ = &tex->base;
-   struct ilo_texture_slice *slices;
-   int depth, lv;
-
-   /* sum the depths of all levels */
-   depth = 0;
-   for (lv = 0; lv <= templ->last_level; lv++)
-      depth += u_minify(templ->depth0, lv);
-
-   /*
-    * There are (depth * tex->base.array_size) slices in total.  Either depth
-    * is one (non-3D) or templ->array_size is one (non-array), but it does
-    * not matter.
-    */
-   slices = CALLOC(depth * templ->array_size, sizeof(*slices));
-   if (!slices)
-      return false;
-
-   tex->slices[0] = slices;
-
-   /* point to the respective positions in the buffer */
-   for (lv = 1; lv <= templ->last_level; lv++) {
-      tex->slices[lv] = tex->slices[lv - 1] +
-         u_minify(templ->depth0, lv - 1) * templ->array_size;
-   }
-
-   return true;
-}
-
-static bool
-tex_create_bo(struct ilo_texture *tex)
-{
-   struct ilo_screen *is = ilo_screen(tex->base.screen);
-   const char *name = resource_get_bo_name(&tex->base);
-   const bool cpu_init = resource_get_cpu_init(&tex->base);
-   struct intel_bo *bo;
-
-   bo = intel_winsys_alloc_bo(is->dev.winsys, name,
-         tex->image.bo_stride * tex->image.bo_height, cpu_init);
-
-   /* set the tiling for transfer and export */
-   if (bo && (tex->image.tiling == GEN6_TILING_X ||
-              tex->image.tiling == GEN6_TILING_Y)) {
-      const enum intel_tiling_mode tiling =
-         surface_to_winsys_tiling(tex->image.tiling);
-
-      if (intel_bo_set_tiling(bo, tiling, tex->image.bo_stride)) {
-         intel_bo_unref(bo);
-         bo = NULL;
-      }
-   }
-   if (!bo)
-      return false;
-
-   intel_bo_unref(tex->vma.bo);
-   ilo_vma_set_bo(&tex->vma, &is->dev, bo, 0);
-
-   return true;
-}
-
-static bool
-tex_create_separate_stencil(struct ilo_texture *tex)
-{
-   struct pipe_resource templ = tex->base;
-   struct pipe_resource *s8;
-
-   /*
-    * Unless PIPE_BIND_DEPTH_STENCIL is set, the resource may have other
-    * tilings.  But that should be fine since it will never be bound as the
-    * stencil buffer, and our transfer code can handle all tilings.
-    */
-   templ.format = PIPE_FORMAT_S8_UINT;
-
-   /* no stencil texturing */
-   templ.bind &= ~PIPE_BIND_SAMPLER_VIEW;
-
-   s8 = tex->base.screen->resource_create(tex->base.screen, &templ);
-   if (!s8)
-      return false;
-
-   tex->separate_s8 = ilo_texture(s8);
-
-   assert(tex->separate_s8->image_format == PIPE_FORMAT_S8_UINT);
-
-   return true;
-}
-
-static bool
-tex_create_hiz(struct ilo_texture *tex)
-{
-   const struct pipe_resource *templ = &tex->base;
-   const uint32_t size = tex->image.aux.bo_stride * tex->image.aux.bo_height;
-   struct ilo_screen *is = ilo_screen(tex->base.screen);
-   struct intel_bo *bo;
-
-   bo = intel_winsys_alloc_bo(is->dev.winsys, "hiz texture", size, false);
-   if (!bo)
-      return false;
-
-   ilo_vma_init(&tex->aux_vma, &is->dev, size, 4096);
-   ilo_vma_set_bo(&tex->aux_vma, &is->dev, bo, 0);
-
-   if (tex->imported) {
-      unsigned lv;
-
-      for (lv = 0; lv <= templ->last_level; lv++) {
-         if (tex->image.aux.enables & (1 << lv)) {
-            const unsigned num_slices = (templ->target == PIPE_TEXTURE_3D) ?
-               u_minify(templ->depth0, lv) : templ->array_size;
-            /* this will trigger HiZ resolves */
-            const unsigned flags = ILO_TEXTURE_CPU_WRITE;
-
-            ilo_texture_set_slice_flags(tex, lv, 0, num_slices, flags, flags);
-         }
-      }
-   }
-
-   return true;
-}
-
-static bool
-tex_create_mcs(struct ilo_texture *tex)
-{
-   const uint32_t size = tex->image.aux.bo_stride * tex->image.aux.bo_height;
-   struct ilo_screen *is = ilo_screen(tex->base.screen);
-   struct intel_bo *bo;
-
-   assert(tex->image.aux.enables == (1 << (tex->base.last_level + 1)) - 1);
-
-   bo = intel_winsys_alloc_bo(is->dev.winsys, "mcs texture", size, false);
-   if (!bo)
-      return false;
-
-   ilo_vma_init(&tex->aux_vma, &is->dev, size, 4096);
-   ilo_vma_set_bo(&tex->aux_vma, &is->dev, bo, 0);
-
-   return true;
-}
-
-static void
-tex_destroy(struct ilo_texture *tex)
-{
-   if (tex->separate_s8)
-      tex_destroy(tex->separate_s8);
-
-   intel_bo_unref(tex->vma.bo);
-   intel_bo_unref(tex->aux_vma.bo);
-
-   tex_free_slices(tex);
-   FREE(tex);
-}
-
-static bool
-tex_alloc_bos(struct ilo_texture *tex)
-{
-   if (!tex->imported && !tex_create_bo(tex))
-      return false;
-
-   switch (tex->image.aux.type) {
-   case ILO_IMAGE_AUX_HIZ:
-      if (!tex_create_hiz(tex))
-         return false;
-      break;
-   case ILO_IMAGE_AUX_MCS:
-      if (!tex_create_mcs(tex))
-         return false;
-      break;
-   default:
-      break;
-   }
-
-   return true;
-}
-
-static struct intel_bo *
-tex_import_handle(struct ilo_texture *tex,
-                  const struct winsys_handle *handle,
-                  struct ilo_image_info *info)
-{
-   struct ilo_screen *is = ilo_screen(tex->base.screen);
-   const struct pipe_resource *templ = &tex->base;
-   const char *name = resource_get_bo_name(&tex->base);
-   enum intel_tiling_mode tiling;
-   unsigned long pitch;
-   struct intel_bo *bo;
-
-   bo = intel_winsys_import_handle(is->dev.winsys, name, handle,
-         tex->image.bo_height, &tiling, &pitch);
-   /* modify image info */
-   if (bo) {
-      const uint8_t valid_tilings = 1 << winsys_to_surface_tiling(tiling);
-
-      if (info->valid_tilings && !(info->valid_tilings & valid_tilings)) {
-         intel_bo_unref(bo);
-         return NULL;
-      }
-
-      info->valid_tilings = valid_tilings;
-      info->force_bo_stride = pitch;
-
-      /* assume imported RTs are also scanouts */
-      if (!info->bind_scanout)
-         info->bind_scanout = (templ->usage & PIPE_BIND_RENDER_TARGET);
-   }
-
-   return bo;
-}
-
-static bool
-tex_init_image(struct ilo_texture *tex,
-               const struct winsys_handle *handle,
-               bool *separate_stencil)
-{
-   struct ilo_screen *is = ilo_screen(tex->base.screen);
-   const struct pipe_resource *templ = &tex->base;
-   struct ilo_image *img = &tex->image;
-   struct intel_bo *imported_bo = NULL;
-   struct ilo_image_info info;
-
-   tex->image_format = resource_get_image_format(templ,
-         &is->dev, separate_stencil);
-   resource_get_image_info(templ, &is->dev, tex->image_format, &info);
-
-   if (handle) {
-      imported_bo = tex_import_handle(tex, handle, &info);
-      if (!imported_bo)
-         return false;
-   }
-
-   if (!ilo_image_init(img, &is->dev, &info)) {
-      intel_bo_unref(imported_bo);
-      return false;
-   }
-
-   /*
-    * HiZ requires 8x4 alignment and some levels might need HiZ disabled.  It
-    * is generally fine except on Gen6, where HiZ and separate stencil must be
-    * enabled together.  For PIPE_FORMAT_Z24X8_UNORM with separate stencil, we
-    * can live with stencil values being interleaved for levels where HiZ is
-    * disabled.  But it is not the case for PIPE_FORMAT_Z32_FLOAT with
-    * separate stencil.  If HiZ was disabled for a level, we had to change the
-    * format to PIPE_FORMAT_Z32_FLOAT_S8X24_UINT for the level and that format
-    * had a different bpp.  In other words, HiZ has to be available for all
-    * levels.
-    */
-   if (ilo_dev_gen(&is->dev) == ILO_GEN(6) &&
-       templ->format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT &&
-       tex->image_format == PIPE_FORMAT_Z32_FLOAT &&
-       img->aux.enables != (1 << templ->last_level)) {
-      tex->image_format = templ->format;
-      info.format = pipe_to_surface_format(&is->dev, tex->image_format);
-      info.interleaved_stencil = true;
-
-      memset(img, 0, sizeof(*img));
-      if (!ilo_image_init(img, &is->dev, &info)) {
-         intel_bo_unref(imported_bo);
-         return false;
-      }
-   }
-
-   if (img->bo_height > ilo_max_resource_size / img->bo_stride ||
-       !ilo_vma_init(&tex->vma, &is->dev, img->bo_stride * img->bo_height,
-          4096)) {
-      intel_bo_unref(imported_bo);
-      return false;
-   }
-
-   if (imported_bo) {
-      ilo_vma_set_bo(&tex->vma, &is->dev, imported_bo, 0);
-      tex->imported = true;
-   }
-
-   if (templ->flags & PIPE_RESOURCE_FLAG_MAP_PERSISTENT) {
-      /* require on-the-fly tiling/untiling or format conversion */
-      if (img->tiling == GEN8_TILING_W || *separate_stencil ||
-          tex->image_format != templ->format)
-         return false;
-   }
-
-   if (!tex_alloc_slices(tex))
-      return false;
-
-   return true;
-}
-
-static struct pipe_resource *
-tex_create(struct pipe_screen *screen,
-           const struct pipe_resource *templ,
-           const struct winsys_handle *handle)
-{
-   struct ilo_texture *tex;
-   bool separate_stencil;
-
-   tex = CALLOC_STRUCT(ilo_texture);
-   if (!tex)
-      return NULL;
-
-   tex->base = *templ;
-   tex->base.screen = screen;
-   pipe_reference_init(&tex->base.reference, 1);
-
-   if (!tex_init_image(tex, handle, &separate_stencil)) {
-      FREE(tex);
-      return NULL;
-   }
-
-   if (!tex_alloc_bos(tex) ||
-       (separate_stencil && !tex_create_separate_stencil(tex))) {
-      tex_destroy(tex);
-      return NULL;
-   }
-
-   return &tex->base;
-}
-
-static bool
-tex_get_handle(struct ilo_texture *tex, struct winsys_handle *handle)
-{
-   struct ilo_screen *is = ilo_screen(tex->base.screen);
-   enum intel_tiling_mode tiling;
-   int err;
-
-   /* must match what tex_create_bo() sets */
-   if (tex->image.tiling == GEN8_TILING_W)
-      tiling = INTEL_TILING_NONE;
-   else
-      tiling = surface_to_winsys_tiling(tex->image.tiling);
-
-   err = intel_winsys_export_handle(is->dev.winsys, tex->vma.bo, tiling,
-         tex->image.bo_stride, tex->image.bo_height, handle);
-
-   return !err;
-}
-
-static bool
-buf_create_bo(struct ilo_buffer_resource *buf)
-{
-   struct ilo_screen *is = ilo_screen(buf->base.screen);
-   const char *name = resource_get_bo_name(&buf->base);
-   const bool cpu_init = resource_get_cpu_init(&buf->base);
-   struct intel_bo *bo;
-
-   bo = intel_winsys_alloc_bo(is->dev.winsys, name, buf->bo_size, cpu_init);
-   if (!bo)
-      return false;
-
-   intel_bo_unref(buf->vma.bo);
-   ilo_vma_set_bo(&buf->vma, &is->dev, bo, 0);
-
-   return true;
-}
-
-static void
-buf_destroy(struct ilo_buffer_resource *buf)
-{
-   intel_bo_unref(buf->vma.bo);
-   FREE(buf);
-}
-
-static struct pipe_resource *
-buf_create(struct pipe_screen *screen, const struct pipe_resource *templ)
-{
-   const struct ilo_screen *is = ilo_screen(screen);
-   struct ilo_buffer_resource *buf;
-   uint32_t alignment;
-   unsigned size;
-
-   buf = CALLOC_STRUCT(ilo_buffer_resource);
-   if (!buf)
-      return NULL;
-
-   buf->base = *templ;
-   buf->base.screen = screen;
-   pipe_reference_init(&buf->base.reference, 1);
-
-   size = templ->width0;
-
-   /*
-    * As noted in ilo_format_translate(), we treat some 3-component formats as
-    * 4-component formats to work around hardware limitations.  Imagine the
-    * case where the vertex buffer holds a single PIPE_FORMAT_R16G16B16_FLOAT
-    * vertex, and buf->bo_size is 6.  The hardware would fail to fetch it at
-    * boundary check because the vertex buffer is expected to hold a
-    * PIPE_FORMAT_R16G16B16A16_FLOAT vertex and that takes at least 8 bytes.
-    *
-    * For the workaround to work, we should add 2 to the bo size.  But that
-    * would waste a page when the bo size is already page aligned.  Let's
-    * round it to page size for now and revisit this when needed.
-    */
-   if ((templ->bind & PIPE_BIND_VERTEX_BUFFER) &&
-       ilo_dev_gen(&is->dev) < ILO_GEN(7.5))
-      size = align(size, 4096);
-
-   if (templ->bind & PIPE_BIND_VERTEX_BUFFER)
-      size = ilo_state_vertex_buffer_size(&is->dev, size, &alignment);
-   if (templ->bind & PIPE_BIND_INDEX_BUFFER)
-      size = ilo_state_index_buffer_size(&is->dev, size, &alignment);
-   if (templ->bind & PIPE_BIND_STREAM_OUTPUT)
-      size = ilo_state_sol_buffer_size(&is->dev, size, &alignment);
-
-   buf->bo_size = size;
-   ilo_vma_init(&buf->vma, &is->dev, buf->bo_size, 4096);
-
-   if (buf->bo_size < templ->width0 || buf->bo_size > ilo_max_resource_size ||
-       !buf_create_bo(buf)) {
-      FREE(buf);
-      return NULL;
-   }
-
-   return &buf->base;
-}
-
-static boolean
-ilo_can_create_resource(struct pipe_screen *screen,
-                        const struct pipe_resource *templ)
-{
-   struct ilo_screen *is = ilo_screen(screen);
-   enum pipe_format image_format;
-   struct ilo_image_info info;
-   struct ilo_image img;
-
-   if (templ->target == PIPE_BUFFER)
-      return (templ->width0 <= ilo_max_resource_size);
-
-   image_format = resource_get_image_format(templ, &is->dev, NULL);
-   resource_get_image_info(templ, &is->dev, image_format, &info);
-
-   memset(&img, 0, sizeof(img));
-   ilo_image_init(&img, &ilo_screen(screen)->dev, &info);
-
-   /* as in tex_init_image() */
-   if (ilo_dev_gen(&is->dev) == ILO_GEN(6) &&
-       templ->format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT &&
-       image_format == PIPE_FORMAT_Z32_FLOAT &&
-       img.aux.enables != (1 << templ->last_level)) {
-      info.format = pipe_to_surface_format(&is->dev, templ->format);
-      info.interleaved_stencil = true;
-      memset(&img, 0, sizeof(img));
-      ilo_image_init(&img, &ilo_screen(screen)->dev, &info);
-   }
-
-   return (img.bo_height <= ilo_max_resource_size / img.bo_stride);
-}
-
-static struct pipe_resource *
-ilo_resource_create(struct pipe_screen *screen,
-                    const struct pipe_resource *templ)
-{
-   if (templ->target == PIPE_BUFFER)
-      return buf_create(screen, templ);
-   else
-      return tex_create(screen, templ, NULL);
-}
-
-static struct pipe_resource *
-ilo_resource_from_handle(struct pipe_screen *screen,
-                         const struct pipe_resource *templ,
-                         struct winsys_handle *handle,
-                         unsigned usage)
-{
-   if (templ->target == PIPE_BUFFER)
-      return NULL;
-   else
-      return tex_create(screen, templ, handle);
-}
-
-static boolean
-ilo_resource_get_handle(struct pipe_screen *screen,
-                        struct pipe_context *ctx,
-                        struct pipe_resource *res,
-                        struct winsys_handle *handle,
-                        unsigned usage)
-{
-   if (res->target == PIPE_BUFFER)
-      return false;
-   else
-      return tex_get_handle(ilo_texture(res), handle);
-
-}
-
-static void
-ilo_resource_destroy(struct pipe_screen *screen,
-                     struct pipe_resource *res)
-{
-   if (res->target == PIPE_BUFFER)
-      buf_destroy((struct ilo_buffer_resource *) res);
-   else
-      tex_destroy(ilo_texture(res));
-}
-
-/**
- * Initialize resource-related functions.
- */
-void
-ilo_init_resource_functions(struct ilo_screen *is)
-{
-   is->base.can_create_resource = ilo_can_create_resource;
-   is->base.resource_create = ilo_resource_create;
-   is->base.resource_from_handle = ilo_resource_from_handle;
-   is->base.resource_get_handle = ilo_resource_get_handle;
-   is->base.resource_destroy = ilo_resource_destroy;
-}
-
-bool
-ilo_resource_rename_bo(struct pipe_resource *res)
-{
-   if (res->target == PIPE_BUFFER) {
-      return buf_create_bo((struct ilo_buffer_resource *) res);
-   } else {
-      struct ilo_texture *tex = ilo_texture(res);
-
-      /* an imported texture cannot be renamed */
-      if (tex->imported)
-         return false;
-
-      return tex_create_bo(tex);
-   }
-}
diff --git a/src/gallium/drivers/ilo/ilo_resource.h b/src/gallium/drivers/ilo/ilo_resource.h
deleted file mode 100644 (file)
index 8378af5..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_RESOURCE_H
-#define ILO_RESOURCE_H
-
-#include "core/intel_winsys.h"
-#include "core/ilo_image.h"
-#include "core/ilo_vma.h"
-
-#include "ilo_common.h"
-#include "ilo_screen.h"
-
-enum ilo_texture_flags {
-   /*
-    * Possible writers of a texture.  There can be at most one writer at any
-    * time.
-    *
-    * Wine set in resolve flags (in ilo_blit_resolve_slices()), they indicate
-    * the new writer.  When set in slice flags (ilo_texture_slice::flags),
-    * they indicate the writer since last resolve.
-    */
-   ILO_TEXTURE_RENDER_WRITE   = 1 << 0,
-   ILO_TEXTURE_BLT_WRITE      = 1 << 1,
-   ILO_TEXTURE_CPU_WRITE      = 1 << 2,
-
-   /*
-    * Possible readers of a texture.  There may be multiple readers at any
-    * time.
-    *
-    * When set in resolve flags, they indicate the new readers.  They are
-    * never set in slice flags.
-    */
-   ILO_TEXTURE_RENDER_READ    = 1 << 3,
-   ILO_TEXTURE_BLT_READ       = 1 << 4,
-   ILO_TEXTURE_CPU_READ       = 1 << 5,
-
-   /*
-    * Set when the texture is cleared.
-    *
-    * When set in resolve flags, the new writer will clear.  When set in slice
-    * flags, the slice has been cleared to ilo_texture_slice::clear_value.
-    */
-   ILO_TEXTURE_CLEAR          = 1 << 6,
-};
-
-/**
- * A 3D image slice, cube face, or array layer.
- */
-struct ilo_texture_slice {
-   unsigned flags;
-
-   /*
-    * Slice clear value.  It is served for two purposes
-    *
-    *  - the clear value used in commands such as 3DSTATE_CLEAR_PARAMS
-    *  - the clear value when ILO_TEXTURE_CLEAR is set
-    *
-    * Since commands such as 3DSTATE_CLEAR_PARAMS expect a single clear value
-    * for all slices, ilo_blit_resolve_slices() will silently make all slices
-    * to have the same clear value.
-    */
-   uint32_t clear_value;
-};
-
-struct ilo_texture {
-   struct pipe_resource base;
-
-   bool imported;
-
-   enum pipe_format image_format;
-   struct ilo_image image;
-   struct ilo_vma vma;
-   struct ilo_vma aux_vma;
-
-   /* XXX thread-safety */
-   struct ilo_texture_slice *slices[PIPE_MAX_TEXTURE_LEVELS];
-
-   struct ilo_texture *separate_s8;
-};
-
-struct ilo_buffer_resource {
-   struct pipe_resource base;
-
-   uint32_t bo_size;
-   struct ilo_vma vma;
-};
-
-static inline struct ilo_buffer_resource *
-ilo_buffer_resource(struct pipe_resource *res)
-{
-   return (struct ilo_buffer_resource *)
-      ((res && res->target == PIPE_BUFFER) ? res : NULL);
-}
-
-static inline struct ilo_texture *
-ilo_texture(struct pipe_resource *res)
-{
-   return (struct ilo_texture *)
-      ((res && res->target != PIPE_BUFFER) ? res : NULL);
-}
-
-void
-ilo_init_resource_functions(struct ilo_screen *is);
-
-bool
-ilo_resource_rename_bo(struct pipe_resource *res);
-
-/**
- * Return the VMA of the resource.
- */
-static inline const struct ilo_vma *
-ilo_resource_get_vma(struct pipe_resource *res)
-{
-   return (res->target == PIPE_BUFFER) ?
-      &((struct ilo_buffer_resource *) res)->vma :
-      &((struct ilo_texture *) res)->vma;
-}
-
-static inline struct ilo_texture_slice *
-ilo_texture_get_slice(const struct ilo_texture *tex,
-                      unsigned level, unsigned slice)
-{
-   assert(level <= tex->base.last_level);
-   assert(slice < ((tex->base.target == PIPE_TEXTURE_3D) ?
-         u_minify(tex->base.depth0, level) : tex->base.array_size));
-
-   return &tex->slices[level][slice];
-}
-
-static inline void
-ilo_texture_set_slice_flags(struct ilo_texture *tex, unsigned level,
-                            unsigned first_slice, unsigned num_slices,
-                            unsigned mask, unsigned value)
-{
-   const struct ilo_texture_slice *last =
-      ilo_texture_get_slice(tex, level, first_slice + num_slices - 1);
-   struct ilo_texture_slice *slice =
-      ilo_texture_get_slice(tex, level, first_slice);
-
-   while (slice <= last) {
-      slice->flags = (slice->flags & ~mask) | (value & mask);
-      slice++;
-   }
-}
-
-static inline void
-ilo_texture_set_slice_clear_value(struct ilo_texture *tex, unsigned level,
-                                  unsigned first_slice, unsigned num_slices,
-                                  uint32_t clear_value)
-{
-   const struct ilo_texture_slice *last =
-      ilo_texture_get_slice(tex, level, first_slice + num_slices - 1);
-   struct ilo_texture_slice *slice =
-      ilo_texture_get_slice(tex, level, first_slice);
-
-   while (slice <= last) {
-      slice->clear_value = clear_value;
-      slice++;
-   }
-}
-
-#endif /* ILO_RESOURCE_H */
diff --git a/src/gallium/drivers/ilo/ilo_screen.c b/src/gallium/drivers/ilo/ilo_screen.c
deleted file mode 100644 (file)
index 960fd71..0000000
+++ /dev/null
@@ -1,809 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "pipe/p_state.h"
-#include "os/os_misc.h"
-#include "util/u_format_s3tc.h"
-#include "vl/vl_decoder.h"
-#include "vl/vl_video_buffer.h"
-#include "genhw/genhw.h" /* for GEN6_REG_TIMESTAMP */
-#include "core/intel_winsys.h"
-
-#include "ilo_context.h"
-#include "ilo_format.h"
-#include "ilo_resource.h"
-#include "ilo_transfer.h" /* for ILO_TRANSFER_MAP_BUFFER_ALIGNMENT */
-#include "ilo_public.h"
-#include "ilo_screen.h"
-
-struct pipe_fence_handle {
-   struct pipe_reference reference;
-   struct intel_bo *seqno_bo;
-};
-
-static float
-ilo_get_paramf(struct pipe_screen *screen, enum pipe_capf param)
-{
-   switch (param) {
-   case PIPE_CAPF_MAX_LINE_WIDTH:
-      /* in U3.7, defined in 3DSTATE_SF */
-      return 7.0f;
-   case PIPE_CAPF_MAX_LINE_WIDTH_AA:
-      /* line width minus one, which is reserved for AA region */
-      return 6.0f;
-   case PIPE_CAPF_MAX_POINT_WIDTH:
-      /* in U8.3, defined in 3DSTATE_SF */
-      return 255.0f;
-   case PIPE_CAPF_MAX_POINT_WIDTH_AA:
-      /* same as point width, as we ignore rasterizer->point_smooth */
-      return 255.0f;
-   case PIPE_CAPF_MAX_TEXTURE_ANISOTROPY:
-      /* [2.0, 16.0], defined in SAMPLER_STATE */
-      return 16.0f;
-   case PIPE_CAPF_MAX_TEXTURE_LOD_BIAS:
-      /* [-16.0, 16.0), defined in SAMPLER_STATE */
-      return 15.0f;
-   case PIPE_CAPF_GUARD_BAND_LEFT:
-   case PIPE_CAPF_GUARD_BAND_TOP:
-   case PIPE_CAPF_GUARD_BAND_RIGHT:
-   case PIPE_CAPF_GUARD_BAND_BOTTOM:
-      /* what are these for? */
-      return 0.0f;
-
-   default:
-      return 0.0f;
-   }
-}
-
-static int
-ilo_get_shader_param(struct pipe_screen *screen, unsigned shader,
-                     enum pipe_shader_cap param)
-{
-   switch (shader) {
-   case PIPE_SHADER_FRAGMENT:
-   case PIPE_SHADER_VERTEX:
-   case PIPE_SHADER_GEOMETRY:
-      break;
-   default:
-      return 0;
-   }
-
-   switch (param) {
-   /* the limits are copied from the classic driver */
-   case PIPE_SHADER_CAP_MAX_INSTRUCTIONS:
-      return (shader == PIPE_SHADER_FRAGMENT) ? 1024 : 16384;
-   case PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS:
-      return (shader == PIPE_SHADER_FRAGMENT) ? 1024 : 0;
-   case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:
-      return (shader == PIPE_SHADER_FRAGMENT) ? 1024 : 0;
-   case PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS:
-      return (shader == PIPE_SHADER_FRAGMENT) ? 1024 : 0;
-   case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
-      return UINT_MAX;
-   case PIPE_SHADER_CAP_MAX_INPUTS:
-   case PIPE_SHADER_CAP_MAX_OUTPUTS:
-      /* this is limited by how many attributes SF can remap */
-      return 16;
-   case PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE:
-      return 1024 * sizeof(float[4]);
-   case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
-      return ILO_MAX_CONST_BUFFERS;
-   case PIPE_SHADER_CAP_MAX_TEMPS:
-      return 256;
-   case PIPE_SHADER_CAP_MAX_PREDS:
-      return 0;
-   case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
-      return 1;
-   case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
-      return 0;
-   case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
-      return 0;
-   case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
-      return (shader == PIPE_SHADER_FRAGMENT) ? 0 : 1;
-   case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
-      return 1;
-   case PIPE_SHADER_CAP_SUBROUTINES:
-      return 0;
-   case PIPE_SHADER_CAP_INTEGERS:
-      return 1;
-   case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
-      return ILO_MAX_SAMPLERS;
-   case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS:
-      return ILO_MAX_SAMPLER_VIEWS;
-   case PIPE_SHADER_CAP_PREFERRED_IR:
-      return PIPE_SHADER_IR_TGSI;
-   case PIPE_SHADER_CAP_SUPPORTED_IRS:
-      return 0;
-   case PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED:
-      return 1;
-   case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
-      return 32;
-
-   default:
-      return 0;
-   }
-}
-
-static int
-ilo_get_video_param(struct pipe_screen *screen,
-                    enum pipe_video_profile profile,
-                    enum pipe_video_entrypoint entrypoint,
-                    enum pipe_video_cap param)
-{
-   switch (param) {
-   case PIPE_VIDEO_CAP_SUPPORTED:
-      return vl_profile_supported(screen, profile, entrypoint);
-   case PIPE_VIDEO_CAP_NPOT_TEXTURES:
-      return 1;
-   case PIPE_VIDEO_CAP_MAX_WIDTH:
-   case PIPE_VIDEO_CAP_MAX_HEIGHT:
-      return vl_video_buffer_max_size(screen);
-   case PIPE_VIDEO_CAP_PREFERED_FORMAT:
-      return PIPE_FORMAT_NV12;
-   case PIPE_VIDEO_CAP_PREFERS_INTERLACED:
-      return 1;
-   case PIPE_VIDEO_CAP_SUPPORTS_PROGRESSIVE:
-      return 1;
-   case PIPE_VIDEO_CAP_SUPPORTS_INTERLACED:
-      return 0;
-   case PIPE_VIDEO_CAP_MAX_LEVEL:
-      return vl_level_supported(screen, profile);
-   default:
-      return 0;
-   }
-}
-
-static int
-ilo_get_compute_param(struct pipe_screen *screen,
-                      enum pipe_shader_ir ir_type,
-                      enum pipe_compute_cap param,
-                      void *ret)
-{
-   struct ilo_screen *is = ilo_screen(screen);
-   union {
-      const char *ir_target;
-      uint64_t grid_dimension;
-      uint64_t max_grid_size[3];
-      uint64_t max_block_size[3];
-      uint64_t max_threads_per_block;
-      uint64_t max_global_size;
-      uint64_t max_local_size;
-      uint64_t max_private_size;
-      uint64_t max_input_size;
-      uint64_t max_mem_alloc_size;
-      uint32_t max_clock_frequency;
-      uint32_t max_compute_units;
-      uint32_t images_supported;
-      uint32_t subgroup_size;
-      uint32_t address_bits;
-   } val;
-   const void *ptr;
-   int size;
-
-   switch (param) {
-   case PIPE_COMPUTE_CAP_IR_TARGET:
-      val.ir_target = "ilog";
-
-      ptr = val.ir_target;
-      size = strlen(val.ir_target) + 1;
-      break;
-   case PIPE_COMPUTE_CAP_GRID_DIMENSION:
-      val.grid_dimension = ARRAY_SIZE(val.max_grid_size);
-
-      ptr = &val.grid_dimension;
-      size = sizeof(val.grid_dimension);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_GRID_SIZE:
-      val.max_grid_size[0] = 0xffffffffu;
-      val.max_grid_size[1] = 0xffffffffu;
-      val.max_grid_size[2] = 0xffffffffu;
-
-      ptr = &val.max_grid_size;
-      size = sizeof(val.max_grid_size);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE:
-      val.max_block_size[0] = 1024;
-      val.max_block_size[1] = 1024;
-      val.max_block_size[2] = 1024;
-
-      ptr = &val.max_block_size;
-      size = sizeof(val.max_block_size);
-      break;
-
-   case PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK:
-      val.max_threads_per_block = 1024;
-
-      ptr = &val.max_threads_per_block;
-      size = sizeof(val.max_threads_per_block);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE:
-      /* \see ilo_max_resource_size */
-      val.max_global_size = 1u << 31;
-
-      ptr = &val.max_global_size;
-      size = sizeof(val.max_global_size);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE:
-      /* Shared Local Memory Size of INTERFACE_DESCRIPTOR_DATA */
-      val.max_local_size = 64 * 1024;
-
-      ptr = &val.max_local_size;
-      size = sizeof(val.max_local_size);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE:
-      /* scratch size */
-      val.max_private_size = 12 * 1024;
-
-      ptr = &val.max_private_size;
-      size = sizeof(val.max_private_size);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_INPUT_SIZE:
-      val.max_input_size = 1024;
-
-      ptr = &val.max_input_size;
-      size = sizeof(val.max_input_size);
-      break;
-   case PIPE_COMPUTE_CAP_ADDRESS_BITS:
-      val.address_bits = 32;
-      ptr = &val.address_bits;
-      size = sizeof(val.address_bits);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE:
-      val.max_mem_alloc_size = 1u << 31;
-
-      ptr = &val.max_mem_alloc_size;
-      size = sizeof(val.max_mem_alloc_size);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_CLOCK_FREQUENCY:
-      val.max_clock_frequency = 1000;
-
-      ptr = &val.max_clock_frequency;
-      size = sizeof(val.max_clock_frequency);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS:
-      val.max_compute_units = is->dev.eu_count;
-
-      ptr = &val.max_compute_units;
-      size = sizeof(val.max_compute_units);
-      break;
-   case PIPE_COMPUTE_CAP_IMAGES_SUPPORTED:
-      val.images_supported = 1;
-
-      ptr = &val.images_supported;
-      size = sizeof(val.images_supported);
-      break;
-   case PIPE_COMPUTE_CAP_SUBGROUP_SIZE:
-      /* best case is actually SIMD32 */
-      val.subgroup_size = 16;
-
-      ptr = &val.subgroup_size;
-      size = sizeof(val.subgroup_size);
-      break;
-   case PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK:
-      /* fallthrough */
-   default:
-      ptr = NULL;
-      size = 0;
-      break;
-   }
-
-   if (ret)
-      memcpy(ret, ptr, size);
-
-   return size;
-}
-
-static int
-ilo_get_param(struct pipe_screen *screen, enum pipe_cap param)
-{
-   struct ilo_screen *is = ilo_screen(screen);
-
-   switch (param) {
-   case PIPE_CAP_NPOT_TEXTURES:
-   case PIPE_CAP_TWO_SIDED_STENCIL:
-      return true;
-   case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
-      return 0; /* TODO */
-   case PIPE_CAP_ANISOTROPIC_FILTER:
-   case PIPE_CAP_POINT_SPRITE:
-      return true;
-   case PIPE_CAP_MAX_RENDER_TARGETS:
-      return ILO_MAX_DRAW_BUFFERS;
-   case PIPE_CAP_OCCLUSION_QUERY:
-   case PIPE_CAP_QUERY_TIME_ELAPSED:
-   case PIPE_CAP_TEXTURE_SHADOW_MAP:
-   case PIPE_CAP_TEXTURE_SWIZZLE: /* must be supported for shadow map */
-      return true;
-   case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
-      /*
-       * As defined in SURFACE_STATE, we have
-       *
-       *           Max WxHxD for 2D and CUBE     Max WxHxD for 3D
-       *  GEN6           8192x8192x512            2048x2048x2048
-       *  GEN7         16384x16384x2048           2048x2048x2048
-       */
-      return (ilo_dev_gen(&is->dev) >= ILO_GEN(7)) ? 15 : 14;
-   case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
-      return 12;
-   case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
-      return (ilo_dev_gen(&is->dev) >= ILO_GEN(7)) ? 15 : 14;
-   case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
-      return false;
-   case PIPE_CAP_BLEND_EQUATION_SEPARATE:
-   case PIPE_CAP_SM3:
-      return true;
-   case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS:
-      if (ilo_dev_gen(&is->dev) >= ILO_GEN(7) && !is->dev.has_gen7_sol_reset)
-         return 0;
-      return ILO_MAX_SO_BUFFERS;
-   case PIPE_CAP_PRIMITIVE_RESTART:
-      return true;
-   case PIPE_CAP_INDEP_BLEND_ENABLE:
-   case PIPE_CAP_INDEP_BLEND_FUNC:
-      return true;
-   case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
-      return (ilo_dev_gen(&is->dev) >= ILO_GEN(7.5)) ? 2048 : 512;
-   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
-   case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
-   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
-   case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
-   case PIPE_CAP_DEPTH_CLIP_DISABLE:
-      return true;
-   case PIPE_CAP_SHADER_STENCIL_EXPORT:
-      return false;
-   case PIPE_CAP_TGSI_INSTANCEID:
-   case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
-      return true;
-   case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:
-      return false;
-   case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
-      return true;
-   case PIPE_CAP_SEAMLESS_CUBE_MAP:
-   case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
-      return true;
-   case PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET:
-   case PIPE_CAP_MIN_TEXEL_OFFSET:
-      return -8;
-   case PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET:
-   case PIPE_CAP_MAX_TEXEL_OFFSET:
-      return 7;
-   case PIPE_CAP_CONDITIONAL_RENDER:
-   case PIPE_CAP_TEXTURE_BARRIER:
-      return true;
-   case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS:
-      return ILO_MAX_SO_BINDINGS / ILO_MAX_SO_BUFFERS;
-   case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS:
-      return ILO_MAX_SO_BINDINGS;
-   case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
-   case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS:
-      if (ilo_dev_gen(&is->dev) >= ILO_GEN(7))
-         return is->dev.has_gen7_sol_reset;
-      else
-         return false; /* TODO */
-   case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS:
-      return false;
-   case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
-      return true;
-   case PIPE_CAP_VERTEX_COLOR_CLAMPED:
-      return false;
-   case PIPE_CAP_GLSL_FEATURE_LEVEL:
-      return 140;
-   case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
-   case PIPE_CAP_USER_VERTEX_BUFFERS:
-      return false;
-   case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
-   case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
-   case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
-      return false;
-   case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE:
-      return 2048;
-   case PIPE_CAP_COMPUTE:
-      return false; /* TODO */
-   case PIPE_CAP_USER_INDEX_BUFFERS:
-   case PIPE_CAP_USER_CONSTANT_BUFFERS:
-      return true;
-   case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
-      /* imposed by OWord (Dual) Block Read */
-      return 16;
-   case PIPE_CAP_START_INSTANCE:
-      return true;
-   case PIPE_CAP_QUERY_TIMESTAMP:
-      return is->dev.has_timestamp;
-   case PIPE_CAP_TEXTURE_MULTISAMPLE:
-      return false; /* TODO */
-   case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
-      return ILO_TRANSFER_MAP_BUFFER_ALIGNMENT;
-   case PIPE_CAP_CUBE_MAP_ARRAY:
-   case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
-      return true;
-   case PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY:
-      return 0;
-   case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
-      return 1;
-   case PIPE_CAP_TGSI_TEXCOORD:
-      return false;
-   case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
-   case PIPE_CAP_QUERY_PIPELINE_STATISTICS:
-      return true;
-   case PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK:
-      return 0;
-   case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
-      /* a GEN6_SURFTYPE_BUFFER can have up to 2^27 elements */
-      return 1 << 27;
-   case PIPE_CAP_MAX_VIEWPORTS:
-      return ILO_MAX_VIEWPORTS;
-   case PIPE_CAP_ENDIANNESS:
-      return PIPE_ENDIAN_LITTLE;
-   case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
-   case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
-      return true;
-   case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT:
-   case PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES:
-   case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
-   case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
-   case PIPE_CAP_TEXTURE_GATHER_SM5:
-      return 0;
-   case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
-   case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
-   case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
-      return true;
-   case PIPE_CAP_FAKE_SW_MSAA:
-   case PIPE_CAP_TEXTURE_QUERY_LOD:
-   case PIPE_CAP_SAMPLE_SHADING:
-   case PIPE_CAP_TEXTURE_GATHER_OFFSETS:
-   case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
-   case PIPE_CAP_MAX_VERTEX_STREAMS:
-   case PIPE_CAP_DRAW_INDIRECT:
-   case PIPE_CAP_MULTI_DRAW_INDIRECT:
-   case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
-   case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE:
-   case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
-   case PIPE_CAP_SAMPLER_VIEW_TARGET:
-   case PIPE_CAP_MULTISAMPLE_Z_RESOLVE:
-   case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
-   case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
-   case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
-   case PIPE_CAP_DEPTH_BOUNDS_TEST:
-   case PIPE_CAP_TGSI_TXQS:
-   case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
-   case PIPE_CAP_SHAREABLE_SHADERS:
-   case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
-   case PIPE_CAP_CLEAR_TEXTURE:
-   case PIPE_CAP_DRAW_PARAMETERS:
-   case PIPE_CAP_TGSI_PACK_HALF_FLOAT:
-   case PIPE_CAP_TGSI_FS_POSITION_IS_SYSVAL:
-   case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
-   case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
-   case PIPE_CAP_INVALIDATE_BUFFER:
-   case PIPE_CAP_GENERATE_MIPMAP:
-   case PIPE_CAP_STRING_MARKER:
-   case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS:
-   case PIPE_CAP_QUERY_BUFFER_OBJECT:
-   case PIPE_CAP_QUERY_MEMORY_INFO:
-   case PIPE_CAP_PCI_GROUP:
-   case PIPE_CAP_PCI_BUS:
-   case PIPE_CAP_PCI_DEVICE:
-   case PIPE_CAP_PCI_FUNCTION:
-   case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
-   case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
-   case PIPE_CAP_CULL_DISTANCE:
-   case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES:
-   case PIPE_CAP_TGSI_VOTE:
-   case PIPE_CAP_MAX_WINDOW_RECTANGLES:
-   case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED:
-   case PIPE_CAP_VIEWPORT_SUBPIXEL_BITS:
-   case PIPE_CAP_TGSI_ARRAY_COMPONENTS:
-   case PIPE_CAP_TGSI_CAN_READ_OUTPUTS:
-   case PIPE_CAP_NATIVE_FENCE_FD:
-   case PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY:
-   case PIPE_CAP_TGSI_FS_FBFETCH:
-   case PIPE_CAP_TGSI_MUL_ZERO_WINS:
-   case PIPE_CAP_INT64:
-      return 0;
-
-   case PIPE_CAP_VENDOR_ID:
-      return 0x8086;
-   case PIPE_CAP_DEVICE_ID:
-      return is->dev.devid;
-   case PIPE_CAP_ACCELERATED:
-      return true;
-   case PIPE_CAP_VIDEO_MEMORY: {
-      /* Once a batch uses more than 75% of the maximum mappable size, we
-       * assume that there's some fragmentation, and we start doing extra
-       * flushing, etc.  That's the big cliff apps will care about.
-       */
-      const uint64_t gpu_memory = is->dev.aperture_total * 3 / 4;
-      uint64_t system_memory;
-
-      if (!os_get_total_physical_memory(&system_memory))
-         return 0;
-
-      return (int) (MIN2(gpu_memory, system_memory) >> 20);
-   }
-   case PIPE_CAP_UMA:
-      return true;
-   case PIPE_CAP_CLIP_HALFZ:
-      return true;
-   case PIPE_CAP_VERTEXID_NOBASE:
-      return false;
-   case PIPE_CAP_POLYGON_OFFSET_CLAMP:
-      return true;
-
-   default:
-      return 0;
-   }
-}
-
-static const char *
-ilo_get_vendor(struct pipe_screen *screen)
-{
-   return "LunarG, Inc.";
-}
-
-static const char *
-ilo_get_device_vendor(struct pipe_screen *screen)
-{
-   return "Intel";
-}
-
-static const char *
-ilo_get_name(struct pipe_screen *screen)
-{
-   struct ilo_screen *is = ilo_screen(screen);
-   const char *chipset = NULL;
-
-   if (gen_is_chv(is->dev.devid)) {
-      chipset = "Intel(R) Cherryview";
-   } else if (gen_is_bdw(is->dev.devid)) {
-      /* this is likely wrong */
-      if (gen_is_desktop(is->dev.devid))
-         chipset = "Intel(R) Broadwell Desktop";
-      else if (gen_is_mobile(is->dev.devid))
-         chipset = "Intel(R) Broadwell Mobile";
-      else if (gen_is_server(is->dev.devid))
-         chipset = "Intel(R) Broadwell Server";
-   } else if (gen_is_vlv(is->dev.devid)) {
-      chipset = "Intel(R) Bay Trail";
-   } else if (gen_is_hsw(is->dev.devid)) {
-      if (gen_is_desktop(is->dev.devid))
-         chipset = "Intel(R) Haswell Desktop";
-      else if (gen_is_mobile(is->dev.devid))
-         chipset = "Intel(R) Haswell Mobile";
-      else if (gen_is_server(is->dev.devid))
-         chipset = "Intel(R) Haswell Server";
-   } else if (gen_is_ivb(is->dev.devid)) {
-      if (gen_is_desktop(is->dev.devid))
-         chipset = "Intel(R) Ivybridge Desktop";
-      else if (gen_is_mobile(is->dev.devid))
-         chipset = "Intel(R) Ivybridge Mobile";
-      else if (gen_is_server(is->dev.devid))
-         chipset = "Intel(R) Ivybridge Server";
-   } else if (gen_is_snb(is->dev.devid)) {
-      if (gen_is_desktop(is->dev.devid))
-         chipset = "Intel(R) Sandybridge Desktop";
-      else if (gen_is_mobile(is->dev.devid))
-         chipset = "Intel(R) Sandybridge Mobile";
-      else if (gen_is_server(is->dev.devid))
-         chipset = "Intel(R) Sandybridge Server";
-   }
-
-   if (!chipset)
-      chipset = "Unknown Intel Chipset";
-
-   return chipset;
-}
-
-static uint64_t
-ilo_get_timestamp(struct pipe_screen *screen)
-{
-   struct ilo_screen *is = ilo_screen(screen);
-   union {
-      uint64_t val;
-      uint32_t dw[2];
-   } timestamp;
-
-   intel_winsys_read_reg(is->dev.winsys, GEN6_REG_TIMESTAMP, &timestamp.val);
-
-   /*
-    * From the Ivy Bridge PRM, volume 1 part 3, page 107:
-    *
-    *     "Note: This timestamp register reflects the value of the PCU TSC.
-    *      The PCU TSC counts 10ns increments; this timestamp reflects bits
-    *      38:3 of the TSC (i.e. 80ns granularity, rolling over every 1.5
-    *      hours)."
-    *
-    * However, it seems dw[0] is garbage and dw[1] contains the lower 32 bits
-    * of the timestamp.  We will have to live with a timestamp that rolls over
-    * every ~343 seconds.
-    *
-    * See also brw_get_timestamp().
-    */
-   return (uint64_t) timestamp.dw[1] * 80;
-}
-
-static boolean
-ilo_is_format_supported(struct pipe_screen *screen,
-                        enum pipe_format format,
-                        enum pipe_texture_target target,
-                        unsigned sample_count,
-                        unsigned bindings)
-{
-   struct ilo_screen *is = ilo_screen(screen);
-   const struct ilo_dev *dev = &is->dev;
-
-   if (!util_format_is_supported(format, bindings))
-      return false;
-
-   /* no MSAA support yet */
-   if (sample_count > 1)
-      return false;
-
-   if ((bindings & PIPE_BIND_DEPTH_STENCIL) &&
-       !ilo_format_support_zs(dev, format))
-      return false;
-
-   if ((bindings & PIPE_BIND_RENDER_TARGET) &&
-       !ilo_format_support_rt(dev, format))
-      return false;
-
-   if ((bindings & PIPE_BIND_SAMPLER_VIEW) &&
-       !ilo_format_support_sampler(dev, format))
-      return false;
-
-   if ((bindings & PIPE_BIND_VERTEX_BUFFER) &&
-       !ilo_format_support_vb(dev, format))
-      return false;
-
-   return true;
-}
-
-static boolean
-ilo_is_video_format_supported(struct pipe_screen *screen,
-                              enum pipe_format format,
-                              enum pipe_video_profile profile,
-                              enum pipe_video_entrypoint entrypoint)
-{
-   return vl_video_buffer_is_format_supported(screen, format, profile, entrypoint);
-}
-
-static void
-ilo_screen_fence_reference(struct pipe_screen *screen,
-                           struct pipe_fence_handle **ptr,
-                           struct pipe_fence_handle *fence)
-{
-   struct pipe_fence_handle *old;
-
-   if (likely(ptr)) {
-      old = *ptr;
-      *ptr = fence;
-   } else {
-      old = NULL;
-   }
-
-   STATIC_ASSERT(&((struct pipe_fence_handle *) NULL)->reference == NULL);
-   if (pipe_reference(&old->reference, &fence->reference)) {
-      intel_bo_unref(old->seqno_bo);
-      FREE(old);
-   }
-}
-
-static boolean
-ilo_screen_fence_finish(struct pipe_screen *screen,
-                        struct pipe_context *ctx,
-                        struct pipe_fence_handle *fence,
-                        uint64_t timeout)
-{
-   const int64_t wait_timeout = (timeout > INT64_MAX) ? -1 : timeout;
-   bool signaled;
-
-   signaled = (!fence->seqno_bo ||
-         intel_bo_wait(fence->seqno_bo, wait_timeout) == 0);
-
-   /* XXX not thread safe */
-   if (signaled && fence->seqno_bo) {
-      intel_bo_unref(fence->seqno_bo);
-      fence->seqno_bo = NULL;
-   }
-
-   return signaled;
-}
-
-/**
- * Create a fence for \p bo.  When \p bo is not NULL, it must be submitted
- * before waited on or checked.
- */
-struct pipe_fence_handle *
-ilo_screen_fence_create(struct pipe_screen *screen, struct intel_bo *bo)
-{
-   struct pipe_fence_handle *fence;
-
-   fence = CALLOC_STRUCT(pipe_fence_handle);
-   if (!fence)
-      return NULL;
-
-   pipe_reference_init(&fence->reference, 1);
-
-   fence->seqno_bo = intel_bo_ref(bo);
-
-   return fence;
-}
-
-static void
-ilo_screen_destroy(struct pipe_screen *screen)
-{
-   struct ilo_screen *is = ilo_screen(screen);
-
-   intel_winsys_destroy(is->dev.winsys);
-
-   FREE(is);
-}
-
-struct pipe_screen *
-ilo_screen_create(struct intel_winsys *ws)
-{
-   struct ilo_screen *is;
-
-   ilo_debug_init("ILO_DEBUG");
-
-   is = CALLOC_STRUCT(ilo_screen);
-   if (!is)
-      return NULL;
-
-   if (!ilo_dev_init(&is->dev, ws)) {
-      FREE(is);
-      return NULL;
-   }
-
-   util_format_s3tc_init();
-
-   is->base.destroy = ilo_screen_destroy;
-   is->base.get_name = ilo_get_name;
-   is->base.get_vendor = ilo_get_vendor;
-   is->base.get_device_vendor = ilo_get_device_vendor;
-   is->base.get_param = ilo_get_param;
-   is->base.get_paramf = ilo_get_paramf;
-   is->base.get_shader_param = ilo_get_shader_param;
-   is->base.get_video_param = ilo_get_video_param;
-   is->base.get_compute_param = ilo_get_compute_param;
-
-   is->base.get_timestamp = ilo_get_timestamp;
-
-   is->base.is_format_supported = ilo_is_format_supported;
-   is->base.is_video_format_supported = ilo_is_video_format_supported;
-
-   is->base.flush_frontbuffer = NULL;
-
-   is->base.fence_reference = ilo_screen_fence_reference;
-   is->base.fence_finish = ilo_screen_fence_finish;
-
-   is->base.get_driver_query_info = NULL;
-
-   ilo_init_context_functions(is);
-   ilo_init_resource_functions(is);
-
-   return &is->base;
-}
diff --git a/src/gallium/drivers/ilo/ilo_screen.h b/src/gallium/drivers/ilo/ilo_screen.h
deleted file mode 100644 (file)
index 612f4c9..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_SCREEN_H
-#define ILO_SCREEN_H
-
-#include "pipe/p_screen.h"
-
-#include "ilo_common.h"
-
-struct intel_bo;
-
-struct ilo_fence;
-
-struct ilo_screen {
-   struct pipe_screen base;
-
-   struct ilo_dev dev;
-};
-
-static inline struct ilo_screen *
-ilo_screen(struct pipe_screen *screen)
-{
-   return (struct ilo_screen *) screen;
-}
-
-struct pipe_fence_handle *
-ilo_screen_fence_create(struct pipe_screen *screen, struct intel_bo *bo);
-
-#endif /* ILO_SCREEN_H */
diff --git a/src/gallium/drivers/ilo/ilo_shader.c b/src/gallium/drivers/ilo/ilo_shader.c
deleted file mode 100644 (file)
index f8c0811..0000000
+++ /dev/null
@@ -1,1458 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "genhw/genhw.h" /* for SBE setup */
-#include "core/ilo_builder.h"
-#include "core/intel_winsys.h"
-#include "shader/ilo_shader_internal.h"
-#include "tgsi/tgsi_parse.h"
-
-#include "ilo_state.h"
-#include "ilo_shader.h"
-
-struct ilo_shader_cache {
-   struct list_head shaders;
-   struct list_head changed;
-
-   int max_vs_scratch_size;
-   int max_gs_scratch_size;
-   int max_fs_scratch_size;
-};
-
-/**
- * Create a shader cache.  A shader cache can manage shaders and upload them
- * to a bo as a whole.
- */
-struct ilo_shader_cache *
-ilo_shader_cache_create(void)
-{
-   struct ilo_shader_cache *shc;
-
-   shc = CALLOC_STRUCT(ilo_shader_cache);
-   if (!shc)
-      return NULL;
-
-   list_inithead(&shc->shaders);
-   list_inithead(&shc->changed);
-
-   return shc;
-}
-
-/**
- * Destroy a shader cache.
- */
-void
-ilo_shader_cache_destroy(struct ilo_shader_cache *shc)
-{
-   FREE(shc);
-}
-
-/**
- * Add a shader to the cache.
- */
-void
-ilo_shader_cache_add(struct ilo_shader_cache *shc,
-                     struct ilo_shader_state *shader)
-{
-   struct ilo_shader *sh;
-
-   shader->cache = shc;
-   LIST_FOR_EACH_ENTRY(sh, &shader->variants, list)
-      sh->uploaded = false;
-
-   list_add(&shader->list, &shc->changed);
-}
-
-/**
- * Remove a shader from the cache.
- */
-void
-ilo_shader_cache_remove(struct ilo_shader_cache *shc,
-                        struct ilo_shader_state *shader)
-{
-   list_del(&shader->list);
-   shader->cache = NULL;
-}
-
-/**
- * Notify the cache that a managed shader has changed.
- */
-static void
-ilo_shader_cache_notify_change(struct ilo_shader_cache *shc,
-                               struct ilo_shader_state *shader)
-{
-   if (shader->cache == shc) {
-      list_del(&shader->list);
-      list_add(&shader->list, &shc->changed);
-   }
-}
-
-/**
- * Upload managed shaders to the bo.  Only shaders that are changed or added
- * after the last upload are uploaded.
- */
-void
-ilo_shader_cache_upload(struct ilo_shader_cache *shc,
-                        struct ilo_builder *builder)
-{
-   struct ilo_shader_state *shader, *next;
-
-   LIST_FOR_EACH_ENTRY_SAFE(shader, next, &shc->changed, list) {
-      struct ilo_shader *sh;
-
-      LIST_FOR_EACH_ENTRY(sh, &shader->variants, list) {
-         int scratch_size, *cur_max;
-
-         if (sh->uploaded)
-            continue;
-
-         sh->cache_offset = ilo_builder_instruction_write(builder,
-               sh->kernel_size, sh->kernel);
-
-         sh->uploaded = true;
-
-         switch (shader->info.type) {
-         case PIPE_SHADER_VERTEX:
-            scratch_size = ilo_state_vs_get_scratch_size(&sh->cso.vs);
-            cur_max = &shc->max_vs_scratch_size;
-            break;
-         case PIPE_SHADER_GEOMETRY:
-            scratch_size = ilo_state_gs_get_scratch_size(&sh->cso.gs);
-            cur_max = &shc->max_gs_scratch_size;
-            break;
-         case PIPE_SHADER_FRAGMENT:
-            scratch_size = ilo_state_ps_get_scratch_size(&sh->cso.ps);
-            cur_max = &shc->max_fs_scratch_size;
-            break;
-         default:
-            assert(!"unknown shader type");
-            scratch_size = 0;
-            cur_max = &shc->max_vs_scratch_size;
-            break;
-         }
-
-         if (*cur_max < scratch_size)
-            *cur_max = scratch_size;
-      }
-
-      list_del(&shader->list);
-      list_add(&shader->list, &shc->shaders);
-   }
-}
-
-/**
- * Invalidate all shaders so that they get uploaded in next
- * ilo_shader_cache_upload().
- */
-void
-ilo_shader_cache_invalidate(struct ilo_shader_cache *shc)
-{
-   struct ilo_shader_state *shader, *next;
-
-   LIST_FOR_EACH_ENTRY_SAFE(shader, next, &shc->shaders, list) {
-      list_del(&shader->list);
-      list_add(&shader->list, &shc->changed);
-   }
-
-   LIST_FOR_EACH_ENTRY(shader, &shc->changed, list) {
-      struct ilo_shader *sh;
-
-      LIST_FOR_EACH_ENTRY(sh, &shader->variants, list)
-         sh->uploaded = false;
-   }
-
-   shc->max_vs_scratch_size = 0;
-   shc->max_gs_scratch_size = 0;
-   shc->max_fs_scratch_size = 0;
-}
-
-void
-ilo_shader_cache_get_max_scratch_sizes(const struct ilo_shader_cache *shc,
-                                       int *vs_scratch_size,
-                                       int *gs_scratch_size,
-                                       int *fs_scratch_size)
-{
-   *vs_scratch_size = shc->max_vs_scratch_size;
-   *gs_scratch_size = shc->max_gs_scratch_size;
-   *fs_scratch_size = shc->max_fs_scratch_size;
-}
-
-/**
- * Initialize a shader variant.
- */
-void
-ilo_shader_variant_init(struct ilo_shader_variant *variant,
-                        const struct ilo_shader_info *info,
-                        const struct ilo_state_vector *vec)
-{
-   int num_views, i;
-
-   memset(variant, 0, sizeof(*variant));
-
-   switch (info->type) {
-   case PIPE_SHADER_VERTEX:
-      variant->u.vs.rasterizer_discard =
-         vec->rasterizer->state.rasterizer_discard;
-      variant->u.vs.num_ucps =
-         util_last_bit(vec->rasterizer->state.clip_plane_enable);
-      break;
-   case PIPE_SHADER_GEOMETRY:
-      variant->u.gs.rasterizer_discard =
-         vec->rasterizer->state.rasterizer_discard;
-      variant->u.gs.num_inputs = vec->vs->shader->out.count;
-      for (i = 0; i < vec->vs->shader->out.count; i++) {
-         variant->u.gs.semantic_names[i] =
-            vec->vs->shader->out.semantic_names[i];
-         variant->u.gs.semantic_indices[i] =
-            vec->vs->shader->out.semantic_indices[i];
-      }
-      break;
-   case PIPE_SHADER_FRAGMENT:
-      variant->u.fs.flatshade =
-         (info->has_color_interp && vec->rasterizer->state.flatshade);
-      variant->u.fs.fb_height = (info->has_pos) ?
-         vec->fb.state.height : 1;
-      variant->u.fs.num_cbufs = vec->fb.state.nr_cbufs;
-      break;
-   default:
-      assert(!"unknown shader type");
-      break;
-   }
-
-   /* use PCB unless constant buffer 0 is not in user buffer  */
-   if ((vec->cbuf[info->type].enabled_mask & 0x1) &&
-       !vec->cbuf[info->type].cso[0].user_buffer)
-      variant->use_pcb = false;
-   else
-      variant->use_pcb = true;
-
-   num_views = vec->view[info->type].count;
-   assert(info->num_samplers <= num_views);
-
-   variant->num_sampler_views = info->num_samplers;
-   for (i = 0; i < info->num_samplers; i++) {
-      const struct pipe_sampler_view *view = vec->view[info->type].states[i];
-      const struct ilo_sampler_cso *sampler = vec->sampler[info->type].cso[i];
-
-      if (view) {
-         variant->sampler_view_swizzles[i].r = view->swizzle_r;
-         variant->sampler_view_swizzles[i].g = view->swizzle_g;
-         variant->sampler_view_swizzles[i].b = view->swizzle_b;
-         variant->sampler_view_swizzles[i].a = view->swizzle_a;
-      }
-      else if (info->shadow_samplers & (1 << i)) {
-         variant->sampler_view_swizzles[i].r = PIPE_SWIZZLE_X;
-         variant->sampler_view_swizzles[i].g = PIPE_SWIZZLE_X;
-         variant->sampler_view_swizzles[i].b = PIPE_SWIZZLE_X;
-         variant->sampler_view_swizzles[i].a = PIPE_SWIZZLE_1;
-      }
-      else {
-         variant->sampler_view_swizzles[i].r = PIPE_SWIZZLE_X;
-         variant->sampler_view_swizzles[i].g = PIPE_SWIZZLE_Y;
-         variant->sampler_view_swizzles[i].b = PIPE_SWIZZLE_Z;
-         variant->sampler_view_swizzles[i].a = PIPE_SWIZZLE_W;
-      }
-
-      /*
-       * When non-nearest filter and PIPE_TEX_WRAP_CLAMP wrap mode is used,
-       * the HW wrap mode is set to GEN6_TEXCOORDMODE_CLAMP_BORDER, and we
-       * need to manually saturate the texture coordinates.
-       */
-      if (sampler) {
-         variant->saturate_tex_coords[0] |= sampler->saturate_s << i;
-         variant->saturate_tex_coords[1] |= sampler->saturate_t << i;
-         variant->saturate_tex_coords[2] |= sampler->saturate_r << i;
-      }
-   }
-}
-
-/**
- * Guess the shader variant, knowing that the context may still change.
- */
-static void
-ilo_shader_variant_guess(struct ilo_shader_variant *variant,
-                         const struct ilo_shader_info *info,
-                         const struct ilo_state_vector *vec)
-{
-   int i;
-
-   memset(variant, 0, sizeof(*variant));
-
-   switch (info->type) {
-   case PIPE_SHADER_VERTEX:
-      break;
-   case PIPE_SHADER_GEOMETRY:
-      break;
-   case PIPE_SHADER_FRAGMENT:
-      variant->u.fs.flatshade = false;
-      variant->u.fs.fb_height = (info->has_pos) ?
-         vec->fb.state.height : 1;
-      variant->u.fs.num_cbufs = 1;
-      break;
-   default:
-      assert(!"unknown shader type");
-      break;
-   }
-
-   variant->use_pcb = true;
-
-   variant->num_sampler_views = info->num_samplers;
-   for (i = 0; i < info->num_samplers; i++) {
-      if (info->shadow_samplers & (1 << i)) {
-         variant->sampler_view_swizzles[i].r = PIPE_SWIZZLE_X;
-         variant->sampler_view_swizzles[i].g = PIPE_SWIZZLE_X;
-         variant->sampler_view_swizzles[i].b = PIPE_SWIZZLE_X;
-         variant->sampler_view_swizzles[i].a = PIPE_SWIZZLE_1;
-      }
-      else {
-         variant->sampler_view_swizzles[i].r = PIPE_SWIZZLE_X;
-         variant->sampler_view_swizzles[i].g = PIPE_SWIZZLE_Y;
-         variant->sampler_view_swizzles[i].b = PIPE_SWIZZLE_Z;
-         variant->sampler_view_swizzles[i].a = PIPE_SWIZZLE_W;
-      }
-   }
-}
-
-
-/**
- * Parse a TGSI instruction for the shader info.
- */
-static void
-ilo_shader_info_parse_inst(struct ilo_shader_info *info,
-                           const struct tgsi_full_instruction *inst)
-{
-   int i;
-
-   /* look for edgeflag passthrough */
-   if (info->edgeflag_out >= 0 &&
-       inst->Instruction.Opcode == TGSI_OPCODE_MOV &&
-       inst->Dst[0].Register.File == TGSI_FILE_OUTPUT &&
-       inst->Dst[0].Register.Index == info->edgeflag_out) {
-
-      assert(inst->Src[0].Register.File == TGSI_FILE_INPUT);
-      info->edgeflag_in = inst->Src[0].Register.Index;
-   }
-
-   if (inst->Instruction.Texture) {
-      bool shadow;
-
-      switch (inst->Texture.Texture) {
-      case TGSI_TEXTURE_SHADOW1D:
-      case TGSI_TEXTURE_SHADOW2D:
-      case TGSI_TEXTURE_SHADOWRECT:
-      case TGSI_TEXTURE_SHADOW1D_ARRAY:
-      case TGSI_TEXTURE_SHADOW2D_ARRAY:
-      case TGSI_TEXTURE_SHADOWCUBE:
-      case TGSI_TEXTURE_SHADOWCUBE_ARRAY:
-         shadow = true;
-         break;
-      default:
-         shadow = false;
-         break;
-      }
-
-      for (i = 0; i < inst->Instruction.NumSrcRegs; i++) {
-         const struct tgsi_full_src_register *src = &inst->Src[i];
-
-         if (src->Register.File == TGSI_FILE_SAMPLER) {
-            const int idx = src->Register.Index;
-
-            if (idx >= info->num_samplers)
-               info->num_samplers = idx + 1;
-
-            if (shadow)
-               info->shadow_samplers |= 1 << idx;
-         }
-      }
-   }
-}
-
-/**
- * Parse a TGSI property for the shader info.
- */
-static void
-ilo_shader_info_parse_prop(struct ilo_shader_info *info,
-                           const struct tgsi_full_property *prop)
-{
-   switch (prop->Property.PropertyName) {
-   case TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS:
-      info->fs_color0_writes_all_cbufs = prop->u[0].Data;
-      break;
-   default:
-      break;
-   }
-}
-
-/**
- * Parse a TGSI declaration for the shader info.
- */
-static void
-ilo_shader_info_parse_decl(struct ilo_shader_info *info,
-                           const struct tgsi_full_declaration *decl)
-{
-   switch (decl->Declaration.File) {
-   case TGSI_FILE_INPUT:
-      if (decl->Declaration.Interpolate &&
-          decl->Interp.Interpolate == TGSI_INTERPOLATE_COLOR)
-         info->has_color_interp = true;
-      if (decl->Declaration.Semantic &&
-          decl->Semantic.Name == TGSI_SEMANTIC_POSITION)
-         info->has_pos = true;
-      break;
-   case TGSI_FILE_OUTPUT:
-      if (decl->Declaration.Semantic &&
-          decl->Semantic.Name == TGSI_SEMANTIC_EDGEFLAG)
-         info->edgeflag_out = decl->Range.First;
-      break;
-   case TGSI_FILE_CONSTANT:
-      {
-         const int idx = (decl->Declaration.Dimension) ?
-            decl->Dim.Index2D : 0;
-         if (info->constant_buffer_count <= idx)
-            info->constant_buffer_count = idx + 1;
-      }
-      break;
-   case TGSI_FILE_SYSTEM_VALUE:
-      if (decl->Declaration.Semantic &&
-          decl->Semantic.Name == TGSI_SEMANTIC_INSTANCEID)
-         info->has_instanceid = true;
-      if (decl->Declaration.Semantic &&
-          decl->Semantic.Name == TGSI_SEMANTIC_VERTEXID)
-         info->has_vertexid = true;
-      break;
-   default:
-      break;
-   }
-}
-
-static void
-ilo_shader_info_parse_tokens(struct ilo_shader_info *info)
-{
-   struct tgsi_parse_context parse;
-
-   info->edgeflag_in = -1;
-   info->edgeflag_out = -1;
-
-   tgsi_parse_init(&parse, info->tokens);
-   while (!tgsi_parse_end_of_tokens(&parse)) {
-      const union tgsi_full_token *token;
-
-      tgsi_parse_token(&parse);
-      token = &parse.FullToken;
-
-      switch (token->Token.Type) {
-      case TGSI_TOKEN_TYPE_DECLARATION:
-         ilo_shader_info_parse_decl(info, &token->FullDeclaration);
-         break;
-      case TGSI_TOKEN_TYPE_INSTRUCTION:
-         ilo_shader_info_parse_inst(info, &token->FullInstruction);
-         break;
-      case TGSI_TOKEN_TYPE_PROPERTY:
-         ilo_shader_info_parse_prop(info, &token->FullProperty);
-         break;
-      default:
-         break;
-      }
-   }
-   tgsi_parse_free(&parse);
-}
-
-/**
- * Create a shader state.
- */
-static struct ilo_shader_state *
-ilo_shader_state_create(const struct ilo_dev *dev,
-                        const struct ilo_state_vector *vec,
-                        int type, const void *templ)
-{
-   struct ilo_shader_state *state;
-   struct ilo_shader_variant variant;
-
-   state = CALLOC_STRUCT(ilo_shader_state);
-   if (!state)
-      return NULL;
-
-   state->info.dev = dev;
-   state->info.type = type;
-
-   if (type == PIPE_SHADER_COMPUTE) {
-      const struct pipe_compute_state *c =
-         (const struct pipe_compute_state *) templ;
-
-      state->info.tokens = tgsi_dup_tokens(c->prog);
-      state->info.compute.req_local_mem = c->req_local_mem;
-      state->info.compute.req_private_mem = c->req_private_mem;
-      state->info.compute.req_input_mem = c->req_input_mem;
-   }
-   else {
-      const struct pipe_shader_state *s =
-         (const struct pipe_shader_state *) templ;
-
-      state->info.tokens = tgsi_dup_tokens(s->tokens);
-      state->info.stream_output = s->stream_output;
-   }
-
-   list_inithead(&state->variants);
-
-   ilo_shader_info_parse_tokens(&state->info);
-
-   /* guess and compile now */
-   ilo_shader_variant_guess(&variant, &state->info, vec);
-   if (!ilo_shader_state_use_variant(state, &variant)) {
-      ilo_shader_destroy(state);
-      return NULL;
-   }
-
-   return state;
-}
-
-/**
- * Add a compiled shader to the shader state.
- */
-static void
-ilo_shader_state_add_shader(struct ilo_shader_state *state,
-                            struct ilo_shader *sh)
-{
-   list_add(&sh->list, &state->variants);
-   state->num_variants++;
-   state->total_size += sh->kernel_size;
-
-   if (state->cache)
-      ilo_shader_cache_notify_change(state->cache, state);
-}
-
-/**
- * Remove a compiled shader from the shader state.
- */
-static void
-ilo_shader_state_remove_shader(struct ilo_shader_state *state,
-                               struct ilo_shader *sh)
-{
-   list_del(&sh->list);
-   state->num_variants--;
-   state->total_size -= sh->kernel_size;
-}
-
-/**
- * Garbage collect shader variants in the shader state.
- */
-static void
-ilo_shader_state_gc(struct ilo_shader_state *state)
-{
-   /* activate when the variants take up more than 4KiB of space */
-   const int limit = 4 * 1024;
-   struct ilo_shader *sh, *next;
-
-   if (state->total_size < limit)
-      return;
-
-   /* remove from the tail as the most recently ones are at the head */
-   LIST_FOR_EACH_ENTRY_SAFE_REV(sh, next, &state->variants, list) {
-      ilo_shader_state_remove_shader(state, sh);
-      ilo_shader_destroy_kernel(sh);
-
-      if (state->total_size <= limit / 2)
-         break;
-   }
-}
-
-/**
- * Search for a shader variant.
- */
-static struct ilo_shader *
-ilo_shader_state_search_variant(struct ilo_shader_state *state,
-                                const struct ilo_shader_variant *variant)
-{
-   struct ilo_shader *sh = NULL, *tmp;
-
-   LIST_FOR_EACH_ENTRY(tmp, &state->variants, list) {
-      if (memcmp(&tmp->variant, variant, sizeof(*variant)) == 0) {
-         sh = tmp;
-         break;
-      }
-   }
-
-   return sh;
-}
-
-static void
-init_shader_urb(const struct ilo_shader *kernel,
-                const struct ilo_shader_state *state,
-                struct ilo_state_shader_urb_info *urb)
-{
-   urb->cv_input_attr_count = kernel->in.count;
-   urb->read_base = 0;
-   urb->read_count = kernel->in.count;
-
-   urb->output_attr_count = kernel->out.count;
-   urb->user_cull_enables = 0x0;
-   urb->user_clip_enables = 0x0;
-}
-
-static void
-init_shader_kernel(const struct ilo_shader *kernel,
-                   const struct ilo_shader_state *state,
-                   struct ilo_state_shader_kernel_info *kern)
-{
-   kern->offset = 0;
-   kern->grf_start = kernel->in.start_grf;
-   kern->pcb_attr_count =
-      (kernel->pcb.cbuf0_size + kernel->pcb.clip_state_size + 15) / 16;
-}
-
-static void
-init_shader_resource(const struct ilo_shader *kernel,
-                     const struct ilo_shader_state *state,
-                     struct ilo_state_shader_resource_info *resource)
-{
-   resource->sampler_count = state->info.num_samplers;
-   resource->surface_count = 0;
-   resource->has_uav = false;
-}
-
-static void
-init_vs(struct ilo_shader *kernel,
-        const struct ilo_shader_state *state)
-{
-   struct ilo_state_vs_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   init_shader_urb(kernel, state, &info.urb);
-   init_shader_kernel(kernel, state, &info.kernel);
-   init_shader_resource(kernel, state, &info.resource);
-   info.per_thread_scratch_size = kernel->per_thread_scratch_size;
-   info.dispatch_enable = true;
-   info.stats_enable = true;
-
-   if (ilo_dev_gen(state->info.dev) == ILO_GEN(6) && kernel->stream_output) {
-      struct ilo_state_gs_info gs_info;
-
-      memset(&gs_info, 0, sizeof(gs_info));
-
-      gs_info.urb.cv_input_attr_count = kernel->out.count;
-      gs_info.urb.read_count = kernel->out.count;
-      gs_info.kernel.grf_start = kernel->gs_start_grf;
-      gs_info.sol.sol_enable = true;
-      gs_info.sol.stats_enable = true;
-      gs_info.sol.render_disable = kernel->variant.u.vs.rasterizer_discard;
-      gs_info.sol.svbi_post_inc = kernel->svbi_post_inc;
-      gs_info.sol.tristrip_reorder = GEN7_REORDER_LEADING;
-      gs_info.dispatch_enable = true;
-      gs_info.stats_enable = true;
-
-      ilo_state_vs_init(&kernel->cso.vs_sol.vs, state->info.dev, &info);
-      ilo_state_gs_init(&kernel->cso.vs_sol.sol, state->info.dev, &gs_info);
-   } else {
-      ilo_state_vs_init(&kernel->cso.vs, state->info.dev, &info);
-   }
-}
-
-static void
-init_gs(struct ilo_shader *kernel,
-        const struct ilo_shader_state *state)
-{
-   const struct pipe_stream_output_info *so_info = &state->info.stream_output;
-   struct ilo_state_gs_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   init_shader_urb(kernel, state, &info.urb);
-   init_shader_kernel(kernel, state, &info.kernel);
-   init_shader_resource(kernel, state, &info.resource);
-   info.per_thread_scratch_size = kernel->per_thread_scratch_size;
-   info.dispatch_enable = true;
-   info.stats_enable = true;
-
-   if (so_info->num_outputs > 0) {
-      info.sol.sol_enable = true;
-      info.sol.stats_enable = true;
-      info.sol.render_disable = kernel->variant.u.gs.rasterizer_discard;
-      info.sol.tristrip_reorder = GEN7_REORDER_LEADING;
-   }
-
-   ilo_state_gs_init(&kernel->cso.gs, state->info.dev, &info);
-}
-
-static void
-init_ps(struct ilo_shader *kernel,
-        const struct ilo_shader_state *state)
-{
-   struct ilo_state_ps_info info;
-
-   memset(&info, 0, sizeof(info));
-
-   init_shader_kernel(kernel, state, &info.kernel_8);
-   init_shader_resource(kernel, state, &info.resource);
-
-   info.per_thread_scratch_size = kernel->per_thread_scratch_size;
-   info.io.has_rt_write = true;
-   info.io.posoffset = GEN6_POSOFFSET_NONE;
-   info.io.attr_count = kernel->in.count;
-   info.io.use_z = kernel->in.has_pos;
-   info.io.use_w = kernel->in.has_pos;
-   info.io.use_coverage_mask = false;
-   info.io.pscdepth = (kernel->out.has_pos) ?
-      GEN7_PSCDEPTH_ON : GEN7_PSCDEPTH_OFF;
-   info.io.write_pixel_mask = kernel->has_kill;
-   info.io.write_omask = false;
-
-   info.params.sample_mask = 0x1;
-   info.params.earlyz_control_psexec = false;
-   info.params.alpha_may_kill = false;
-   info.params.dual_source_blending = false;
-   info.params.has_writeable_rt = true;
-
-   info.valid_kernels = GEN6_PS_DISPATCH_8;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 284:
-    *
-    *     "(MSDISPMODE_PERSAMPLE) This is the high-quality multisample mode
-    *      where (over and above PERPIXEL mode) the PS is run for each covered
-    *      sample. This mode is also used for "normal" non-multisample
-    *      rendering (aka 1X), given Number of Multisamples is programmed to
-    *      NUMSAMPLES_1."
-    */
-   info.per_sample_dispatch = true;
-
-   info.rt_clear_enable = false;
-   info.rt_resolve_enable = false;
-   info.cv_per_sample_interp = false;
-   info.cv_has_earlyz_op = false;
-   info.sample_count_one = true;
-   info.cv_has_depth_buffer = true;
-
-   ilo_state_ps_init(&kernel->cso.ps, state->info.dev, &info);
-
-   /* remember current parameters */
-   kernel->ps_params = info.params;
-}
-
-static void
-init_sol(struct ilo_shader *kernel,
-         const struct ilo_dev *dev,
-         const struct pipe_stream_output_info *so_info,
-         bool rasterizer_discard)
-{
-   struct ilo_state_sol_decl_info decls[4][PIPE_MAX_SO_OUTPUTS];
-   unsigned buf_offsets[PIPE_MAX_SO_BUFFERS];
-   struct ilo_state_sol_info info;
-   unsigned i;
-
-   if (!so_info->num_outputs) {
-      ilo_state_sol_init_disabled(&kernel->sol, dev, rasterizer_discard);
-      return;
-   }
-
-   memset(&info, 0, sizeof(info));
-   info.data = kernel->sol_data;
-   info.data_size = sizeof(kernel->sol_data);
-   info.sol_enable = true;
-   info.stats_enable = true;
-   info.tristrip_reorder = GEN7_REORDER_TRAILING;
-   info.render_disable = rasterizer_discard;
-   info.render_stream = 0;
-
-   for (i = 0; i < 4; i++) {
-      info.buffer_strides[i] = so_info->stride[i] * 4;
-
-      info.streams[i].cv_vue_attr_count = kernel->out.count;
-      info.streams[i].decls = decls[i];
-   }
-
-   memset(decls, 0, sizeof(decls));
-   memset(buf_offsets, 0, sizeof(buf_offsets));
-   for (i = 0; i < so_info->num_outputs; i++) {
-      const unsigned stream = so_info->output[i].stream;
-      const unsigned buffer = so_info->output[i].output_buffer;
-      struct ilo_state_sol_decl_info *decl;
-      unsigned attr;
-
-      /* figure out which attribute is sourced */
-      for (attr = 0; attr < kernel->out.count; attr++) {
-         const int reg_idx = kernel->out.register_indices[attr];
-         if (reg_idx == so_info->output[i].register_index)
-            break;
-      }
-      if (attr >= kernel->out.count) {
-         assert(!"stream output an undefined register");
-         attr = 0;
-      }
-
-      if (info.streams[stream].vue_read_count < attr + 1)
-         info.streams[stream].vue_read_count = attr + 1;
-
-      /* pad with holes first */
-      while (buf_offsets[buffer] < so_info->output[i].dst_offset) {
-         int num_dwords;
-
-         num_dwords = so_info->output[i].dst_offset - buf_offsets[buffer];
-         if (num_dwords > 4)
-            num_dwords = 4;
-
-         assert(info.streams[stream].decl_count < ARRAY_SIZE(decls[stream]));
-         decl = &decls[stream][info.streams[stream].decl_count];
-
-         decl->attr = 0;
-         decl->is_hole = true;
-         decl->component_base = 0;
-         decl->component_count = num_dwords;
-         decl->buffer = buffer;
-
-         info.streams[stream].decl_count++;
-         buf_offsets[buffer] += num_dwords;
-      }
-      assert(buf_offsets[buffer] == so_info->output[i].dst_offset);
-
-      assert(info.streams[stream].decl_count < ARRAY_SIZE(decls[stream]));
-      decl = &decls[stream][info.streams[stream].decl_count];
-
-      decl->attr = attr;
-      decl->is_hole = false;
-      /* PSIZE is at W channel */
-      if (kernel->out.semantic_names[attr] == TGSI_SEMANTIC_PSIZE) {
-         assert(so_info->output[i].start_component == 0);
-         assert(so_info->output[i].num_components == 1);
-         decl->component_base = 3;
-         decl->component_count = 1;
-      } else {
-         decl->component_base = so_info->output[i].start_component;
-         decl->component_count = so_info->output[i].num_components;
-      }
-      decl->buffer = buffer;
-
-      info.streams[stream].decl_count++;
-      buf_offsets[buffer] += so_info->output[i].num_components;
-   }
-
-   ilo_state_sol_init(&kernel->sol, dev, &info);
-}
-
-/**
- * Add a shader variant to the shader state.
- */
-static struct ilo_shader *
-ilo_shader_state_add_variant(struct ilo_shader_state *state,
-                             const struct ilo_shader_variant *variant)
-{
-   bool rasterizer_discard = false;
-   struct ilo_shader *sh;
-
-   switch (state->info.type) {
-   case PIPE_SHADER_VERTEX:
-      sh = ilo_shader_compile_vs(state, variant);
-      rasterizer_discard = variant->u.vs.rasterizer_discard;
-      break;
-   case PIPE_SHADER_FRAGMENT:
-      sh = ilo_shader_compile_fs(state, variant);
-      break;
-   case PIPE_SHADER_GEOMETRY:
-      sh = ilo_shader_compile_gs(state, variant);
-      rasterizer_discard = variant->u.gs.rasterizer_discard;
-      break;
-   case PIPE_SHADER_COMPUTE:
-      sh = ilo_shader_compile_cs(state, variant);
-      break;
-   default:
-      sh = NULL;
-      break;
-   }
-   if (!sh) {
-      assert(!"failed to compile shader");
-      return NULL;
-   }
-
-   sh->variant = *variant;
-
-   init_sol(sh, state->info.dev, &state->info.stream_output,
-         rasterizer_discard);
-
-   ilo_shader_state_add_shader(state, sh);
-
-   return sh;
-}
-
-/**
- * Update state->shader to point to a variant.  If the variant does not exist,
- * it will be added first.
- */
-bool
-ilo_shader_state_use_variant(struct ilo_shader_state *state,
-                             const struct ilo_shader_variant *variant)
-{
-   struct ilo_shader *sh;
-   bool construct_cso = false;
-
-   sh = ilo_shader_state_search_variant(state, variant);
-   if (!sh) {
-      ilo_shader_state_gc(state);
-
-      sh = ilo_shader_state_add_variant(state, variant);
-      if (!sh)
-         return false;
-
-      construct_cso = true;
-   }
-
-   /* move to head */
-   if (state->variants.next != &sh->list) {
-      list_del(&sh->list);
-      list_add(&sh->list, &state->variants);
-   }
-
-   state->shader = sh;
-
-   if (construct_cso) {
-      switch (state->info.type) {
-      case PIPE_SHADER_VERTEX:
-         init_vs(sh, state);
-         break;
-      case PIPE_SHADER_GEOMETRY:
-         init_gs(sh, state);
-         break;
-      case PIPE_SHADER_FRAGMENT:
-         init_ps(sh, state);
-         break;
-      default:
-         break;
-      }
-   }
-
-   return true;
-}
-
-struct ilo_shader_state *
-ilo_shader_create_vs(const struct ilo_dev *dev,
-                     const struct pipe_shader_state *state,
-                     const struct ilo_state_vector *precompile)
-{
-   struct ilo_shader_state *shader;
-
-   shader = ilo_shader_state_create(dev, precompile,
-         PIPE_SHADER_VERTEX, state);
-
-   /* states used in ilo_shader_variant_init() */
-   shader->info.non_orthogonal_states = ILO_DIRTY_VIEW_VS |
-                                        ILO_DIRTY_RASTERIZER |
-                                        ILO_DIRTY_CBUF;
-
-   return shader;
-}
-
-struct ilo_shader_state *
-ilo_shader_create_gs(const struct ilo_dev *dev,
-                     const struct pipe_shader_state *state,
-                     const struct ilo_state_vector *precompile)
-{
-   struct ilo_shader_state *shader;
-
-   shader = ilo_shader_state_create(dev, precompile,
-         PIPE_SHADER_GEOMETRY, state);
-
-   /* states used in ilo_shader_variant_init() */
-   shader->info.non_orthogonal_states = ILO_DIRTY_VIEW_GS |
-                                        ILO_DIRTY_VS |
-                                        ILO_DIRTY_RASTERIZER |
-                                        ILO_DIRTY_CBUF;
-
-   return shader;
-}
-
-struct ilo_shader_state *
-ilo_shader_create_fs(const struct ilo_dev *dev,
-                     const struct pipe_shader_state *state,
-                     const struct ilo_state_vector *precompile)
-{
-   struct ilo_shader_state *shader;
-
-   shader = ilo_shader_state_create(dev, precompile,
-         PIPE_SHADER_FRAGMENT, state);
-
-   /* states used in ilo_shader_variant_init() */
-   shader->info.non_orthogonal_states = ILO_DIRTY_VIEW_FS |
-                                        ILO_DIRTY_RASTERIZER |
-                                        ILO_DIRTY_FB |
-                                        ILO_DIRTY_CBUF;
-
-   return shader;
-}
-
-struct ilo_shader_state *
-ilo_shader_create_cs(const struct ilo_dev *dev,
-                     const struct pipe_compute_state *state,
-                     const struct ilo_state_vector *precompile)
-{
-   struct ilo_shader_state *shader;
-
-   shader = ilo_shader_state_create(dev, precompile,
-         PIPE_SHADER_COMPUTE, state);
-
-   shader->info.non_orthogonal_states = 0;
-
-   return shader;
-}
-
-/**
- * Destroy a shader state.
- */
-void
-ilo_shader_destroy(struct ilo_shader_state *shader)
-{
-   struct ilo_shader *sh, *next;
-
-   LIST_FOR_EACH_ENTRY_SAFE(sh, next, &shader->variants, list)
-      ilo_shader_destroy_kernel(sh);
-
-   FREE((struct tgsi_token *) shader->info.tokens);
-   FREE(shader);
-}
-
-/**
- * Select a kernel for the given context.  This will compile a new kernel if
- * none of the existing kernels work with the context.
- *
- * \param ilo the context
- * \param dirty states of the context that are considered changed
- * \return true if a different kernel is selected
- */
-bool
-ilo_shader_select_kernel(struct ilo_shader_state *shader,
-                         const struct ilo_state_vector *vec,
-                         uint32_t dirty)
-{
-   struct ilo_shader_variant variant;
-   bool changed = false;
-
-   if (shader->info.non_orthogonal_states & dirty) {
-      const struct ilo_shader * const old = shader->shader;
-
-      ilo_shader_variant_init(&variant, &shader->info, vec);
-      ilo_shader_state_use_variant(shader, &variant);
-      changed = (shader->shader != old);
-   }
-
-   if (shader->info.type == PIPE_SHADER_FRAGMENT) {
-      struct ilo_shader *kernel = shader->shader;
-
-      if (kernel->ps_params.sample_mask != vec->sample_mask ||
-          kernel->ps_params.alpha_may_kill != vec->blend->alpha_may_kill) {
-         kernel->ps_params.sample_mask = vec->sample_mask;
-         kernel->ps_params.alpha_may_kill = vec->blend->alpha_may_kill;
-
-         ilo_state_ps_set_params(&kernel->cso.ps, shader->info.dev,
-               &kernel->ps_params);
-
-         changed = true;
-      }
-   }
-
-   return changed;
-}
-
-static int
-route_attr(const int *semantics, const int *indices, int len,
-           int semantic, int index)
-{
-   int i;
-
-   for (i = 0; i < len; i++) {
-      if (semantics[i] == semantic && indices[i] == index)
-         return i;
-   }
-
-   /* failed to match for COLOR, try BCOLOR */
-   if (semantic == TGSI_SEMANTIC_COLOR) {
-      for (i = 0; i < len; i++) {
-         if (semantics[i] == TGSI_SEMANTIC_BCOLOR && indices[i] == index)
-            return i;
-      }
-   }
-
-   return -1;
-}
-
-/**
- * Select a routing for the given source shader and rasterizer state.
- *
- * \return true if a different routing is selected
- */
-bool
-ilo_shader_select_kernel_sbe(struct ilo_shader_state *shader,
-                             const struct ilo_shader_state *source,
-                             const struct ilo_rasterizer_state *rasterizer)
-{
-   const bool is_point = true;
-   const bool light_twoside = rasterizer->state.light_twoside;
-   const uint32_t sprite_coord_enable = rasterizer->state.sprite_coord_enable;
-   const int sprite_coord_mode = rasterizer->state.sprite_coord_mode;
-   struct ilo_shader *kernel = shader->shader;
-   struct ilo_kernel_routing *routing = &kernel->routing;
-   struct ilo_state_sbe_swizzle_info swizzles[ILO_STATE_SBE_MAX_SWIZZLE_COUNT];
-   struct ilo_state_sbe_info info;
-   const int *src_semantics, *src_indices;
-   int src_skip, src_len, src_slot;
-   int dst_len, dst_slot;
-
-   assert(kernel);
-
-   if (source) {
-      assert(source->shader);
-
-      src_semantics = source->shader->out.semantic_names;
-      src_indices = source->shader->out.semantic_indices;
-      src_len = source->shader->out.count;
-      src_skip = 0;
-
-      assert(src_len >= 2 &&
-             src_semantics[0] == TGSI_SEMANTIC_PSIZE &&
-             src_semantics[1] == TGSI_SEMANTIC_POSITION);
-
-      /*
-       * skip PSIZE and POSITION (how about the optional CLIPDISTs?), unless
-       * they are all the source shader has and FS needs to read some
-       * attributes.
-       */
-      if (src_len > 2 || !kernel->in.count) {
-         src_semantics += 2;
-         src_indices += 2;
-         src_len -= 2;
-         src_skip = 2;
-      }
-   } else {
-      src_semantics = kernel->in.semantic_names;
-      src_indices = kernel->in.semantic_indices;
-      src_len = kernel->in.count;
-      src_skip = 0;
-   }
-
-   /* no change */
-   if (routing->initialized &&
-       routing->is_point == is_point &&
-       routing->light_twoside == light_twoside &&
-       routing->sprite_coord_enable == sprite_coord_enable &&
-       routing->sprite_coord_mode == sprite_coord_mode &&
-       routing->src_len <= src_len &&
-       !memcmp(routing->src_semantics, src_semantics,
-          sizeof(src_semantics[0]) * routing->src_len) &&
-       !memcmp(routing->src_indices, src_indices,
-          sizeof(src_indices[0]) * routing->src_len))
-      return false;
-
-   routing->is_point = is_point;
-   routing->light_twoside = light_twoside;
-   routing->sprite_coord_enable = sprite_coord_enable;
-   routing->sprite_coord_mode = sprite_coord_mode;
-
-   assert(kernel->in.count <= ARRAY_SIZE(swizzles));
-   dst_len = MIN2(kernel->in.count, ARRAY_SIZE(swizzles));
-
-   memset(&swizzles, 0, sizeof(swizzles));
-   memset(&info, 0, sizeof(info));
-
-   info.attr_count = dst_len;
-   info.cv_vue_attr_count = src_skip + src_len;
-   info.vue_read_base = src_skip;
-   info.vue_read_count = 0;
-   info.has_min_read_count = true;
-   info.swizzle_enable = false;
-   info.swizzle_16_31 = false;
-   info.swizzle_count = 0;
-   info.swizzles = swizzles;
-   info.const_interp_enables = kernel->in.const_interp_enable;
-   info.point_sprite_enables = 0x0;
-   info.point_sprite_origin_lower_left =
-      (sprite_coord_mode == PIPE_SPRITE_COORD_LOWER_LEFT);
-   info.cv_is_point = is_point;
-
-   for (dst_slot = 0; dst_slot < dst_len; dst_slot++) {
-      const int semantic = kernel->in.semantic_names[dst_slot];
-      const int index = kernel->in.semantic_indices[dst_slot];
-
-      if (semantic == TGSI_SEMANTIC_GENERIC &&
-          (sprite_coord_enable & (1 << index)))
-         info.point_sprite_enables |= 1 << dst_slot;
-
-      if (source) {
-         src_slot = route_attr(src_semantics, src_indices, src_len,
-               semantic, index);
-
-         /*
-          * The source shader stage does not output this attribute.  The value
-          * is supposed to be undefined, unless the attribute goes through
-          * point sprite replacement or the attribute is
-          * TGSI_SEMANTIC_POSITION.  In all cases, we do not care which source
-          * attribute is picked.
-          *
-          * We should update the kernel code and omit the output of
-          * TGSI_SEMANTIC_POSITION here.
-          */
-         if (src_slot < 0)
-            src_slot = 0;
-      } else {
-         src_slot = dst_slot;
-      }
-
-      /* use the following slot for two-sided lighting */
-      if (semantic == TGSI_SEMANTIC_COLOR && light_twoside &&
-          src_slot + 1 < src_len &&
-          src_semantics[src_slot + 1] == TGSI_SEMANTIC_BCOLOR &&
-          src_indices[src_slot + 1] == index) {
-         swizzles[dst_slot].attr_select = GEN6_INPUTATTR_FACING;
-         swizzles[dst_slot].attr = src_slot;
-         info.swizzle_enable = true;
-         src_slot++;
-      } else {
-         swizzles[dst_slot].attr_select = GEN6_INPUTATTR_NORMAL;
-         swizzles[dst_slot].attr = src_slot;
-         if (src_slot != dst_slot)
-            info.swizzle_enable = true;
-      }
-
-      swizzles[dst_slot].force_zeros = false;
-
-      if (info.vue_read_count < src_slot + 1)
-         info.vue_read_count = src_slot + 1;
-   }
-
-   if (info.swizzle_enable)
-      info.swizzle_count = dst_len;
-
-   if (routing->initialized)
-      ilo_state_sbe_set_info(&routing->sbe, shader->info.dev, &info);
-   else
-      ilo_state_sbe_init(&routing->sbe, shader->info.dev, &info);
-
-   routing->src_len = info.vue_read_count;
-   memcpy(routing->src_semantics, src_semantics,
-         sizeof(src_semantics[0]) * routing->src_len);
-   memcpy(routing->src_indices, src_indices,
-         sizeof(src_indices[0]) * routing->src_len);
-
-   routing->initialized = true;
-
-   return true;
-}
-
-/**
- * Return the cache offset of the selected kernel.  This must be called after
- * ilo_shader_select_kernel() and ilo_shader_cache_upload().
- */
-uint32_t
-ilo_shader_get_kernel_offset(const struct ilo_shader_state *shader)
-{
-   const struct ilo_shader *kernel = shader->shader;
-
-   assert(kernel && kernel->uploaded);
-
-   return kernel->cache_offset;
-}
-
-/**
- * Query a kernel parameter for the selected kernel.
- */
-int
-ilo_shader_get_kernel_param(const struct ilo_shader_state *shader,
-                            enum ilo_kernel_param param)
-{
-   const struct ilo_shader *kernel = shader->shader;
-   int val;
-
-   assert(kernel);
-
-   switch (param) {
-   case ILO_KERNEL_INPUT_COUNT:
-      val = kernel->in.count;
-      break;
-   case ILO_KERNEL_OUTPUT_COUNT:
-      val = kernel->out.count;
-      break;
-   case ILO_KERNEL_SAMPLER_COUNT:
-      val = shader->info.num_samplers;
-      break;
-   case ILO_KERNEL_SKIP_CBUF0_UPLOAD:
-      val = kernel->skip_cbuf0_upload;
-      break;
-   case ILO_KERNEL_PCB_CBUF0_SIZE:
-      val = kernel->pcb.cbuf0_size;
-      break;
-
-   case ILO_KERNEL_SURFACE_TOTAL_COUNT:
-      val = kernel->bt.total_count;
-      break;
-   case ILO_KERNEL_SURFACE_TEX_BASE:
-      val = kernel->bt.tex_base;
-      break;
-   case ILO_KERNEL_SURFACE_TEX_COUNT:
-      val = kernel->bt.tex_count;
-      break;
-   case ILO_KERNEL_SURFACE_CONST_BASE:
-      val = kernel->bt.const_base;
-      break;
-   case ILO_KERNEL_SURFACE_CONST_COUNT:
-      val = kernel->bt.const_count;
-      break;
-   case ILO_KERNEL_SURFACE_RES_BASE:
-      val = kernel->bt.res_base;
-      break;
-   case ILO_KERNEL_SURFACE_RES_COUNT:
-      val = kernel->bt.res_count;
-      break;
-
-   case ILO_KERNEL_VS_INPUT_INSTANCEID:
-      val = shader->info.has_instanceid;
-      break;
-   case ILO_KERNEL_VS_INPUT_VERTEXID:
-      val = shader->info.has_vertexid;
-      break;
-   case ILO_KERNEL_VS_INPUT_EDGEFLAG:
-      if (shader->info.edgeflag_in >= 0) {
-         /* we rely on the state tracker here */
-         assert(shader->info.edgeflag_in == kernel->in.count - 1);
-         val = true;
-      }
-      else {
-         val = false;
-      }
-      break;
-   case ILO_KERNEL_VS_PCB_UCP_SIZE:
-      val = kernel->pcb.clip_state_size;
-      break;
-   case ILO_KERNEL_VS_GEN6_SO:
-      val = kernel->stream_output;
-      break;
-   case ILO_KERNEL_VS_GEN6_SO_POINT_OFFSET:
-      val = kernel->gs_offsets[0];
-      break;
-   case ILO_KERNEL_VS_GEN6_SO_LINE_OFFSET:
-      val = kernel->gs_offsets[1];
-      break;
-   case ILO_KERNEL_VS_GEN6_SO_TRI_OFFSET:
-      val = kernel->gs_offsets[2];
-      break;
-   case ILO_KERNEL_VS_GEN6_SO_SURFACE_COUNT:
-      val = kernel->gs_bt_so_count;
-      break;
-
-   case ILO_KERNEL_GS_DISCARD_ADJACENCY:
-      val = kernel->in.discard_adj;
-      break;
-   case ILO_KERNEL_GS_GEN6_SVBI_POST_INC:
-      val = kernel->svbi_post_inc;
-      break;
-   case ILO_KERNEL_GS_GEN6_SURFACE_SO_BASE:
-      val = kernel->bt.gen6_so_base;
-      break;
-   case ILO_KERNEL_GS_GEN6_SURFACE_SO_COUNT:
-      val = kernel->bt.gen6_so_count;
-      break;
-
-   case ILO_KERNEL_FS_BARYCENTRIC_INTERPOLATIONS:
-      val = kernel->in.barycentric_interpolation_mode;
-      break;
-   case ILO_KERNEL_FS_DISPATCH_16_OFFSET:
-      val = 0;
-      break;
-   case ILO_KERNEL_FS_SURFACE_RT_BASE:
-      val = kernel->bt.rt_base;
-      break;
-   case ILO_KERNEL_FS_SURFACE_RT_COUNT:
-      val = kernel->bt.rt_count;
-      break;
-
-   case ILO_KERNEL_CS_LOCAL_SIZE:
-      val = shader->info.compute.req_local_mem;
-      break;
-   case ILO_KERNEL_CS_PRIVATE_SIZE:
-      val = shader->info.compute.req_private_mem;
-      break;
-   case ILO_KERNEL_CS_INPUT_SIZE:
-      val = shader->info.compute.req_input_mem;
-      break;
-   case ILO_KERNEL_CS_SIMD_SIZE:
-      val = 16;
-      break;
-   case ILO_KERNEL_CS_SURFACE_GLOBAL_BASE:
-      val = kernel->bt.global_base;
-      break;
-   case ILO_KERNEL_CS_SURFACE_GLOBAL_COUNT:
-      val = kernel->bt.global_count;
-      break;
-
-   default:
-      assert(!"unknown kernel parameter");
-      val = 0;
-      break;
-   }
-
-   return val;
-}
-
-/**
- * Return the CSO of the selected kernel.
- */
-const union ilo_shader_cso *
-ilo_shader_get_kernel_cso(const struct ilo_shader_state *shader)
-{
-   const struct ilo_shader *kernel = shader->shader;
-
-   assert(kernel);
-
-   return &kernel->cso;
-}
-
-/**
- * Return the SO info of the selected kernel.
- */
-const struct pipe_stream_output_info *
-ilo_shader_get_kernel_so_info(const struct ilo_shader_state *shader)
-{
-   return &shader->info.stream_output;
-}
-
-const struct ilo_state_sol *
-ilo_shader_get_kernel_sol(const struct ilo_shader_state *shader)
-{
-   const struct ilo_shader *kernel = shader->shader;
-
-   assert(kernel);
-
-   return &kernel->sol;
-}
-
-/**
- * Return the routing info of the selected kernel.
- */
-const struct ilo_state_sbe *
-ilo_shader_get_kernel_sbe(const struct ilo_shader_state *shader)
-{
-   const struct ilo_shader *kernel = shader->shader;
-
-   assert(kernel);
-
-   return &kernel->routing.sbe;
-}
diff --git a/src/gallium/drivers/ilo/ilo_shader.h b/src/gallium/drivers/ilo/ilo_shader.h
deleted file mode 100644 (file)
index 10dcf73..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_SHADER_H
-#define ILO_SHADER_H
-
-#include "core/ilo_state_shader.h"
-
-#include "ilo_common.h"
-
-enum ilo_kernel_param {
-   ILO_KERNEL_INPUT_COUNT,
-   ILO_KERNEL_OUTPUT_COUNT,
-   ILO_KERNEL_SAMPLER_COUNT,
-   ILO_KERNEL_SKIP_CBUF0_UPLOAD,
-   ILO_KERNEL_PCB_CBUF0_SIZE,
-
-   ILO_KERNEL_SURFACE_TOTAL_COUNT,
-   ILO_KERNEL_SURFACE_TEX_BASE,
-   ILO_KERNEL_SURFACE_TEX_COUNT,
-   ILO_KERNEL_SURFACE_CONST_BASE,
-   ILO_KERNEL_SURFACE_CONST_COUNT,
-   ILO_KERNEL_SURFACE_RES_BASE,
-   ILO_KERNEL_SURFACE_RES_COUNT,
-
-   ILO_KERNEL_VS_INPUT_INSTANCEID,
-   ILO_KERNEL_VS_INPUT_VERTEXID,
-   ILO_KERNEL_VS_INPUT_EDGEFLAG,
-   ILO_KERNEL_VS_PCB_UCP_SIZE,
-   ILO_KERNEL_VS_GEN6_SO,
-   ILO_KERNEL_VS_GEN6_SO_POINT_OFFSET,
-   ILO_KERNEL_VS_GEN6_SO_LINE_OFFSET,
-   ILO_KERNEL_VS_GEN6_SO_TRI_OFFSET,
-   ILO_KERNEL_VS_GEN6_SO_SURFACE_COUNT,
-
-   ILO_KERNEL_GS_DISCARD_ADJACENCY,
-   ILO_KERNEL_GS_GEN6_SVBI_POST_INC,
-   ILO_KERNEL_GS_GEN6_SURFACE_SO_BASE,
-   ILO_KERNEL_GS_GEN6_SURFACE_SO_COUNT,
-
-   ILO_KERNEL_FS_BARYCENTRIC_INTERPOLATIONS,
-   ILO_KERNEL_FS_DISPATCH_16_OFFSET,
-   ILO_KERNEL_FS_SURFACE_RT_BASE,
-   ILO_KERNEL_FS_SURFACE_RT_COUNT,
-
-   ILO_KERNEL_CS_LOCAL_SIZE,
-   ILO_KERNEL_CS_PRIVATE_SIZE,
-   ILO_KERNEL_CS_INPUT_SIZE,
-   ILO_KERNEL_CS_SIMD_SIZE,
-   ILO_KERNEL_CS_SURFACE_GLOBAL_BASE,
-   ILO_KERNEL_CS_SURFACE_GLOBAL_COUNT,
-
-   ILO_KERNEL_PARAM_COUNT,
-};
-
-struct intel_bo;
-struct ilo_builder;
-struct ilo_rasterizer_state;
-struct ilo_shader_cache;
-struct ilo_shader_state;
-struct ilo_state_sbe;
-struct ilo_state_sol;
-struct ilo_state_vector;
-
-union ilo_shader_cso {
-   struct ilo_state_vs vs;
-   struct ilo_state_hs hs;
-   struct ilo_state_ds ds;
-   struct ilo_state_gs gs;
-   struct ilo_state_ps ps;
-
-   struct {
-      struct ilo_state_vs vs;
-      struct ilo_state_gs sol;
-   } vs_sol;
-};
-
-struct ilo_shader_cache *
-ilo_shader_cache_create(void);
-
-void
-ilo_shader_cache_destroy(struct ilo_shader_cache *shc);
-
-void
-ilo_shader_cache_add(struct ilo_shader_cache *shc,
-                     struct ilo_shader_state *shader);
-
-void
-ilo_shader_cache_remove(struct ilo_shader_cache *shc,
-                        struct ilo_shader_state *shader);
-
-void
-ilo_shader_cache_upload(struct ilo_shader_cache *shc,
-                        struct ilo_builder *builder);
-
-void
-ilo_shader_cache_invalidate(struct ilo_shader_cache *shc);
-
-void
-ilo_shader_cache_get_max_scratch_sizes(const struct ilo_shader_cache *shc,
-                                       int *vs_scratch_size,
-                                       int *gs_scratch_size,
-                                       int *fs_scratch_size);
-
-struct ilo_shader_state *
-ilo_shader_create_vs(const struct ilo_dev *dev,
-                     const struct pipe_shader_state *state,
-                     const struct ilo_state_vector *precompile);
-
-struct ilo_shader_state *
-ilo_shader_create_gs(const struct ilo_dev *dev,
-                     const struct pipe_shader_state *state,
-                     const struct ilo_state_vector *precompile);
-
-struct ilo_shader_state *
-ilo_shader_create_fs(const struct ilo_dev *dev,
-                     const struct pipe_shader_state *state,
-                     const struct ilo_state_vector *precompile);
-
-struct ilo_shader_state *
-ilo_shader_create_cs(const struct ilo_dev *dev,
-                     const struct pipe_compute_state *state,
-                     const struct ilo_state_vector *precompile);
-
-void
-ilo_shader_destroy(struct ilo_shader_state *shader);
-
-bool
-ilo_shader_select_kernel(struct ilo_shader_state *shader,
-                         const struct ilo_state_vector *vec,
-                         uint32_t dirty);
-
-bool
-ilo_shader_select_kernel_sbe(struct ilo_shader_state *shader,
-                             const struct ilo_shader_state *source,
-                             const struct ilo_rasterizer_state *rasterizer);
-
-uint32_t
-ilo_shader_get_kernel_offset(const struct ilo_shader_state *shader);
-
-int
-ilo_shader_get_kernel_param(const struct ilo_shader_state *shader,
-                            enum ilo_kernel_param param);
-
-const union ilo_shader_cso *
-ilo_shader_get_kernel_cso(const struct ilo_shader_state *shader);
-
-const struct pipe_stream_output_info *
-ilo_shader_get_kernel_so_info(const struct ilo_shader_state *shader);
-
-const struct ilo_state_sol *
-ilo_shader_get_kernel_sol(const struct ilo_shader_state *shader);
-
-const struct ilo_state_sbe *
-ilo_shader_get_kernel_sbe(const struct ilo_shader_state *shader);
-
-#endif /* ILO_SHADER_H */
diff --git a/src/gallium/drivers/ilo/ilo_state.c b/src/gallium/drivers/ilo/ilo_state.c
deleted file mode 100644 (file)
index 95b292a..0000000
+++ /dev/null
@@ -1,2629 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_dual_blend.h"
-#include "util/u_dynarray.h"
-#include "util/u_framebuffer.h"
-#include "util/u_helpers.h"
-#include "util/u_resource.h"
-#include "util/u_upload_mgr.h"
-
-#include "ilo_context.h"
-#include "ilo_format.h"
-#include "ilo_resource.h"
-#include "ilo_shader.h"
-#include "ilo_state.h"
-
-/**
- * Translate a pipe primitive type to the matching hardware primitive type.
- */
-static enum gen_3dprim_type
-ilo_translate_draw_mode(unsigned mode)
-{
-   static const enum gen_3dprim_type prim_mapping[PIPE_PRIM_MAX] = {
-      [PIPE_PRIM_POINTS]                     = GEN6_3DPRIM_POINTLIST,
-      [PIPE_PRIM_LINES]                      = GEN6_3DPRIM_LINELIST,
-      [PIPE_PRIM_LINE_LOOP]                  = GEN6_3DPRIM_LINELOOP,
-      [PIPE_PRIM_LINE_STRIP]                 = GEN6_3DPRIM_LINESTRIP,
-      [PIPE_PRIM_TRIANGLES]                  = GEN6_3DPRIM_TRILIST,
-      [PIPE_PRIM_TRIANGLE_STRIP]             = GEN6_3DPRIM_TRISTRIP,
-      [PIPE_PRIM_TRIANGLE_FAN]               = GEN6_3DPRIM_TRIFAN,
-      [PIPE_PRIM_QUADS]                      = GEN6_3DPRIM_QUADLIST,
-      [PIPE_PRIM_QUAD_STRIP]                 = GEN6_3DPRIM_QUADSTRIP,
-      [PIPE_PRIM_POLYGON]                    = GEN6_3DPRIM_POLYGON,
-      [PIPE_PRIM_LINES_ADJACENCY]            = GEN6_3DPRIM_LINELIST_ADJ,
-      [PIPE_PRIM_LINE_STRIP_ADJACENCY]       = GEN6_3DPRIM_LINESTRIP_ADJ,
-      [PIPE_PRIM_TRIANGLES_ADJACENCY]        = GEN6_3DPRIM_TRILIST_ADJ,
-      [PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY]   = GEN6_3DPRIM_TRISTRIP_ADJ,
-   };
-
-   assert(prim_mapping[mode]);
-
-   return prim_mapping[mode];
-}
-
-static enum gen_index_format
-ilo_translate_index_size(unsigned index_size)
-{
-   switch (index_size) {
-   case 1:                             return GEN6_INDEX_BYTE;
-   case 2:                             return GEN6_INDEX_WORD;
-   case 4:                             return GEN6_INDEX_DWORD;
-   default:
-      assert(!"unknown index size");
-      return GEN6_INDEX_BYTE;
-   }
-}
-
-static enum gen_mip_filter
-ilo_translate_mip_filter(unsigned filter)
-{
-   switch (filter) {
-   case PIPE_TEX_MIPFILTER_NEAREST:    return GEN6_MIPFILTER_NEAREST;
-   case PIPE_TEX_MIPFILTER_LINEAR:     return GEN6_MIPFILTER_LINEAR;
-   case PIPE_TEX_MIPFILTER_NONE:       return GEN6_MIPFILTER_NONE;
-   default:
-      assert(!"unknown mipfilter");
-      return GEN6_MIPFILTER_NONE;
-   }
-}
-
-static int
-ilo_translate_img_filter(unsigned filter)
-{
-   switch (filter) {
-   case PIPE_TEX_FILTER_NEAREST:       return GEN6_MAPFILTER_NEAREST;
-   case PIPE_TEX_FILTER_LINEAR:        return GEN6_MAPFILTER_LINEAR;
-   default:
-      assert(!"unknown sampler filter");
-      return GEN6_MAPFILTER_NEAREST;
-   }
-}
-
-static enum gen_texcoord_mode
-ilo_translate_address_wrap(unsigned wrap)
-{
-   switch (wrap) {
-   case PIPE_TEX_WRAP_CLAMP:           return GEN8_TEXCOORDMODE_HALF_BORDER;
-   case PIPE_TEX_WRAP_REPEAT:          return GEN6_TEXCOORDMODE_WRAP;
-   case PIPE_TEX_WRAP_CLAMP_TO_EDGE:   return GEN6_TEXCOORDMODE_CLAMP;
-   case PIPE_TEX_WRAP_CLAMP_TO_BORDER: return GEN6_TEXCOORDMODE_CLAMP_BORDER;
-   case PIPE_TEX_WRAP_MIRROR_REPEAT:   return GEN6_TEXCOORDMODE_MIRROR;
-   case PIPE_TEX_WRAP_MIRROR_CLAMP:
-   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE:
-   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER:
-   default:
-      assert(!"unknown sampler wrap mode");
-      return GEN6_TEXCOORDMODE_WRAP;
-   }
-}
-
-static enum gen_aniso_ratio
-ilo_translate_max_anisotropy(unsigned max_anisotropy)
-{
-   switch (max_anisotropy) {
-   case 0: case 1: case 2:             return GEN6_ANISORATIO_2;
-   case 3: case 4:                     return GEN6_ANISORATIO_4;
-   case 5: case 6:                     return GEN6_ANISORATIO_6;
-   case 7: case 8:                     return GEN6_ANISORATIO_8;
-   case 9: case 10:                    return GEN6_ANISORATIO_10;
-   case 11: case 12:                   return GEN6_ANISORATIO_12;
-   case 13: case 14:                   return GEN6_ANISORATIO_14;
-   default:                            return GEN6_ANISORATIO_16;
-   }
-}
-
-static enum gen_prefilter_op
-ilo_translate_shadow_func(unsigned func)
-{
-   /*
-    * For PIPE_FUNC_x, the reference value is on the left-hand side of the
-    * comparison, and 1.0 is returned when the comparison is true.
-    *
-    * For GEN6_PREFILTEROP_x, the reference value is on the right-hand side of
-    * the comparison, and 0.0 is returned when the comparison is true.
-    */
-   switch (func) {
-   case PIPE_FUNC_NEVER:               return GEN6_PREFILTEROP_ALWAYS;
-   case PIPE_FUNC_LESS:                return GEN6_PREFILTEROP_LEQUAL;
-   case PIPE_FUNC_EQUAL:               return GEN6_PREFILTEROP_NOTEQUAL;
-   case PIPE_FUNC_LEQUAL:              return GEN6_PREFILTEROP_LESS;
-   case PIPE_FUNC_GREATER:             return GEN6_PREFILTEROP_GEQUAL;
-   case PIPE_FUNC_NOTEQUAL:            return GEN6_PREFILTEROP_EQUAL;
-   case PIPE_FUNC_GEQUAL:              return GEN6_PREFILTEROP_GREATER;
-   case PIPE_FUNC_ALWAYS:              return GEN6_PREFILTEROP_NEVER;
-   default:
-      assert(!"unknown shadow compare function");
-      return GEN6_PREFILTEROP_NEVER;
-   }
-}
-
-static enum gen_front_winding
-ilo_translate_front_ccw(unsigned front_ccw)
-{
-   return (front_ccw) ? GEN6_FRONTWINDING_CCW : GEN6_FRONTWINDING_CW;
-}
-
-static enum gen_cull_mode
-ilo_translate_cull_face(unsigned cull_face)
-{
-   switch (cull_face) {
-   case PIPE_FACE_NONE:                return GEN6_CULLMODE_NONE;
-   case PIPE_FACE_FRONT:               return GEN6_CULLMODE_FRONT;
-   case PIPE_FACE_BACK:                return GEN6_CULLMODE_BACK;
-   case PIPE_FACE_FRONT_AND_BACK:      return GEN6_CULLMODE_BOTH;
-   default:
-      assert(!"unknown face culling");
-      return GEN6_CULLMODE_NONE;
-   }
-}
-
-static enum gen_fill_mode
-ilo_translate_poly_mode(unsigned poly_mode)
-{
-   switch (poly_mode) {
-   case PIPE_POLYGON_MODE_FILL:        return GEN6_FILLMODE_SOLID;
-   case PIPE_POLYGON_MODE_LINE:        return GEN6_FILLMODE_WIREFRAME;
-   case PIPE_POLYGON_MODE_POINT:       return GEN6_FILLMODE_POINT;
-   default:
-      assert(!"unknown polygon mode");
-      return GEN6_FILLMODE_SOLID;
-   }
-}
-
-static enum gen_pixel_location
-ilo_translate_half_pixel_center(bool half_pixel_center)
-{
-   return (half_pixel_center) ? GEN6_PIXLOC_CENTER : GEN6_PIXLOC_UL_CORNER;
-}
-
-static enum gen_compare_function
-ilo_translate_compare_func(unsigned func)
-{
-   switch (func) {
-   case PIPE_FUNC_NEVER:               return GEN6_COMPAREFUNCTION_NEVER;
-   case PIPE_FUNC_LESS:                return GEN6_COMPAREFUNCTION_LESS;
-   case PIPE_FUNC_EQUAL:               return GEN6_COMPAREFUNCTION_EQUAL;
-   case PIPE_FUNC_LEQUAL:              return GEN6_COMPAREFUNCTION_LEQUAL;
-   case PIPE_FUNC_GREATER:             return GEN6_COMPAREFUNCTION_GREATER;
-   case PIPE_FUNC_NOTEQUAL:            return GEN6_COMPAREFUNCTION_NOTEQUAL;
-   case PIPE_FUNC_GEQUAL:              return GEN6_COMPAREFUNCTION_GEQUAL;
-   case PIPE_FUNC_ALWAYS:              return GEN6_COMPAREFUNCTION_ALWAYS;
-   default:
-      assert(!"unknown compare function");
-      return GEN6_COMPAREFUNCTION_NEVER;
-   }
-}
-
-static enum gen_stencil_op
-ilo_translate_stencil_op(unsigned stencil_op)
-{
-   switch (stencil_op) {
-   case PIPE_STENCIL_OP_KEEP:          return GEN6_STENCILOP_KEEP;
-   case PIPE_STENCIL_OP_ZERO:          return GEN6_STENCILOP_ZERO;
-   case PIPE_STENCIL_OP_REPLACE:       return GEN6_STENCILOP_REPLACE;
-   case PIPE_STENCIL_OP_INCR:          return GEN6_STENCILOP_INCRSAT;
-   case PIPE_STENCIL_OP_DECR:          return GEN6_STENCILOP_DECRSAT;
-   case PIPE_STENCIL_OP_INCR_WRAP:     return GEN6_STENCILOP_INCR;
-   case PIPE_STENCIL_OP_DECR_WRAP:     return GEN6_STENCILOP_DECR;
-   case PIPE_STENCIL_OP_INVERT:        return GEN6_STENCILOP_INVERT;
-   default:
-      assert(!"unknown stencil op");
-      return GEN6_STENCILOP_KEEP;
-   }
-}
-
-static enum gen_logic_op
-ilo_translate_logicop(unsigned logicop)
-{
-   switch (logicop) {
-   case PIPE_LOGICOP_CLEAR:            return GEN6_LOGICOP_CLEAR;
-   case PIPE_LOGICOP_NOR:              return GEN6_LOGICOP_NOR;
-   case PIPE_LOGICOP_AND_INVERTED:     return GEN6_LOGICOP_AND_INVERTED;
-   case PIPE_LOGICOP_COPY_INVERTED:    return GEN6_LOGICOP_COPY_INVERTED;
-   case PIPE_LOGICOP_AND_REVERSE:      return GEN6_LOGICOP_AND_REVERSE;
-   case PIPE_LOGICOP_INVERT:           return GEN6_LOGICOP_INVERT;
-   case PIPE_LOGICOP_XOR:              return GEN6_LOGICOP_XOR;
-   case PIPE_LOGICOP_NAND:             return GEN6_LOGICOP_NAND;
-   case PIPE_LOGICOP_AND:              return GEN6_LOGICOP_AND;
-   case PIPE_LOGICOP_EQUIV:            return GEN6_LOGICOP_EQUIV;
-   case PIPE_LOGICOP_NOOP:             return GEN6_LOGICOP_NOOP;
-   case PIPE_LOGICOP_OR_INVERTED:      return GEN6_LOGICOP_OR_INVERTED;
-   case PIPE_LOGICOP_COPY:             return GEN6_LOGICOP_COPY;
-   case PIPE_LOGICOP_OR_REVERSE:       return GEN6_LOGICOP_OR_REVERSE;
-   case PIPE_LOGICOP_OR:               return GEN6_LOGICOP_OR;
-   case PIPE_LOGICOP_SET:              return GEN6_LOGICOP_SET;
-   default:
-      assert(!"unknown logicop function");
-      return GEN6_LOGICOP_CLEAR;
-   }
-}
-
-static int
-ilo_translate_blend_func(unsigned blend)
-{
-   switch (blend) {
-   case PIPE_BLEND_ADD:                return GEN6_BLENDFUNCTION_ADD;
-   case PIPE_BLEND_SUBTRACT:           return GEN6_BLENDFUNCTION_SUBTRACT;
-   case PIPE_BLEND_REVERSE_SUBTRACT:   return GEN6_BLENDFUNCTION_REVERSE_SUBTRACT;
-   case PIPE_BLEND_MIN:                return GEN6_BLENDFUNCTION_MIN;
-   case PIPE_BLEND_MAX:                return GEN6_BLENDFUNCTION_MAX;
-   default:
-      assert(!"unknown blend function");
-      return GEN6_BLENDFUNCTION_ADD;
-   }
-}
-
-static int
-ilo_translate_blend_factor(unsigned factor)
-{
-   switch (factor) {
-   case PIPE_BLENDFACTOR_ONE:                return GEN6_BLENDFACTOR_ONE;
-   case PIPE_BLENDFACTOR_SRC_COLOR:          return GEN6_BLENDFACTOR_SRC_COLOR;
-   case PIPE_BLENDFACTOR_SRC_ALPHA:          return GEN6_BLENDFACTOR_SRC_ALPHA;
-   case PIPE_BLENDFACTOR_DST_ALPHA:          return GEN6_BLENDFACTOR_DST_ALPHA;
-   case PIPE_BLENDFACTOR_DST_COLOR:          return GEN6_BLENDFACTOR_DST_COLOR;
-   case PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE: return GEN6_BLENDFACTOR_SRC_ALPHA_SATURATE;
-   case PIPE_BLENDFACTOR_CONST_COLOR:        return GEN6_BLENDFACTOR_CONST_COLOR;
-   case PIPE_BLENDFACTOR_CONST_ALPHA:        return GEN6_BLENDFACTOR_CONST_ALPHA;
-   case PIPE_BLENDFACTOR_SRC1_COLOR:         return GEN6_BLENDFACTOR_SRC1_COLOR;
-   case PIPE_BLENDFACTOR_SRC1_ALPHA:         return GEN6_BLENDFACTOR_SRC1_ALPHA;
-   case PIPE_BLENDFACTOR_ZERO:               return GEN6_BLENDFACTOR_ZERO;
-   case PIPE_BLENDFACTOR_INV_SRC_COLOR:      return GEN6_BLENDFACTOR_INV_SRC_COLOR;
-   case PIPE_BLENDFACTOR_INV_SRC_ALPHA:      return GEN6_BLENDFACTOR_INV_SRC_ALPHA;
-   case PIPE_BLENDFACTOR_INV_DST_ALPHA:      return GEN6_BLENDFACTOR_INV_DST_ALPHA;
-   case PIPE_BLENDFACTOR_INV_DST_COLOR:      return GEN6_BLENDFACTOR_INV_DST_COLOR;
-   case PIPE_BLENDFACTOR_INV_CONST_COLOR:    return GEN6_BLENDFACTOR_INV_CONST_COLOR;
-   case PIPE_BLENDFACTOR_INV_CONST_ALPHA:    return GEN6_BLENDFACTOR_INV_CONST_ALPHA;
-   case PIPE_BLENDFACTOR_INV_SRC1_COLOR:     return GEN6_BLENDFACTOR_INV_SRC1_COLOR;
-   case PIPE_BLENDFACTOR_INV_SRC1_ALPHA:     return GEN6_BLENDFACTOR_INV_SRC1_ALPHA;
-   default:
-      assert(!"unknown blend factor");
-      return GEN6_BLENDFACTOR_ONE;
-   }
-}
-
-static void
-finalize_shader_states(struct ilo_state_vector *vec)
-{
-   unsigned type;
-
-   for (type = 0; type < PIPE_SHADER_TYPES; type++) {
-      struct ilo_shader_state *shader;
-      uint32_t state;
-
-      switch (type) {
-      case PIPE_SHADER_VERTEX:
-         shader = vec->vs;
-         state = ILO_DIRTY_VS;
-         break;
-      case PIPE_SHADER_GEOMETRY:
-         shader = vec->gs;
-         state = ILO_DIRTY_GS;
-         break;
-      case PIPE_SHADER_FRAGMENT:
-         shader = vec->fs;
-         state = ILO_DIRTY_FS;
-         break;
-      default:
-         shader = NULL;
-         state = 0;
-         break;
-      }
-
-      if (!shader)
-         continue;
-
-      /* compile if the shader or the states it depends on changed */
-      if (vec->dirty & state) {
-         ilo_shader_select_kernel(shader, vec, ILO_DIRTY_ALL);
-      }
-      else if (ilo_shader_select_kernel(shader, vec, vec->dirty)) {
-         /* mark the state dirty if a new kernel is selected */
-         vec->dirty |= state;
-      }
-
-      /* need to setup SBE for FS */
-      if (type == PIPE_SHADER_FRAGMENT && vec->dirty &
-            (state | ILO_DIRTY_GS | ILO_DIRTY_VS | ILO_DIRTY_RASTERIZER)) {
-         if (ilo_shader_select_kernel_sbe(shader,
-               (vec->gs) ? vec->gs : vec->vs, vec->rasterizer))
-            vec->dirty |= state;
-      }
-   }
-}
-
-static void
-finalize_cbuf_state(struct ilo_context *ilo,
-                    struct ilo_cbuf_state *cbuf,
-                    const struct ilo_shader_state *sh)
-{
-   uint32_t upload_mask = cbuf->enabled_mask;
-
-   /* skip CBUF0 if the kernel does not need it */
-   upload_mask &=
-      ~ilo_shader_get_kernel_param(sh, ILO_KERNEL_SKIP_CBUF0_UPLOAD);
-
-   while (upload_mask) {
-      unsigned offset, i;
-
-      i = u_bit_scan(&upload_mask);
-      /* no need to upload */
-      if (cbuf->cso[i].resource)
-         continue;
-
-      u_upload_data(ilo->uploader, 0, cbuf->cso[i].info.size, 16,
-            cbuf->cso[i].user_buffer, &offset, &cbuf->cso[i].resource);
-
-      cbuf->cso[i].info.vma = ilo_resource_get_vma(cbuf->cso[i].resource);
-      cbuf->cso[i].info.offset = offset;
-
-      memset(&cbuf->cso[i].surface, 0, sizeof(cbuf->cso[i].surface));
-      ilo_state_surface_init_for_buffer(&cbuf->cso[i].surface,
-            ilo->dev, &cbuf->cso[i].info);
-
-      ilo->state_vector.dirty |= ILO_DIRTY_CBUF;
-   }
-}
-
-static void
-finalize_constant_buffers(struct ilo_context *ilo)
-{
-   struct ilo_state_vector *vec = &ilo->state_vector;
-
-   if (vec->dirty & (ILO_DIRTY_CBUF | ILO_DIRTY_VS))
-      finalize_cbuf_state(ilo, &vec->cbuf[PIPE_SHADER_VERTEX], vec->vs);
-
-   if (ilo->state_vector.dirty & (ILO_DIRTY_CBUF | ILO_DIRTY_FS))
-      finalize_cbuf_state(ilo, &vec->cbuf[PIPE_SHADER_FRAGMENT], vec->fs);
-}
-
-static void
-finalize_index_buffer(struct ilo_context *ilo)
-{
-   const struct ilo_dev *dev = ilo->dev;
-   struct ilo_state_vector *vec = &ilo->state_vector;
-   const bool need_upload = (vec->draw->indexed &&
-         (vec->ib.state.user_buffer ||
-          vec->ib.state.offset % vec->ib.state.index_size));
-   struct pipe_resource *current_hw_res = NULL;
-   struct ilo_state_index_buffer_info info;
-   int64_t vertex_start_bias = 0;
-
-   if (!(vec->dirty & ILO_DIRTY_IB) && !need_upload)
-      return;
-
-   /* make sure vec->ib.hw_resource changes when reallocated */
-   pipe_resource_reference(&current_hw_res, vec->ib.hw_resource);
-
-   if (need_upload) {
-      const unsigned offset = vec->ib.state.index_size * vec->draw->start;
-      const unsigned size = vec->ib.state.index_size * vec->draw->count;
-      unsigned hw_offset;
-
-      if (vec->ib.state.user_buffer) {
-         u_upload_data(ilo->uploader, 0, size, 16,
-               vec->ib.state.user_buffer + offset,
-               &hw_offset, &vec->ib.hw_resource);
-      } else {
-         u_upload_buffer(ilo->uploader, 0,
-               vec->ib.state.offset + offset, size, 16, vec->ib.state.buffer,
-               &hw_offset, &vec->ib.hw_resource);
-      }
-
-      /* the HW offset should be aligned */
-      assert(hw_offset % vec->ib.state.index_size == 0);
-      vertex_start_bias = hw_offset / vec->ib.state.index_size;
-
-      /*
-       * INDEX[vec->draw->start] in the original buffer is INDEX[0] in the HW
-       * resource
-       */
-      vertex_start_bias -= vec->draw->start;
-   } else {
-      pipe_resource_reference(&vec->ib.hw_resource, vec->ib.state.buffer);
-
-      /* note that index size may be zero when the draw is not indexed */
-      if (vec->draw->indexed)
-         vertex_start_bias = vec->ib.state.offset / vec->ib.state.index_size;
-   }
-
-   vec->draw_info.vertex_start += vertex_start_bias;
-
-   /* treat the IB as clean if the HW states do not change */
-   if (vec->ib.hw_resource == current_hw_res &&
-       vec->ib.hw_index_size == vec->ib.state.index_size)
-      vec->dirty &= ~ILO_DIRTY_IB;
-   else
-      vec->ib.hw_index_size = vec->ib.state.index_size;
-
-   pipe_resource_reference(&current_hw_res, NULL);
-
-   memset(&info, 0, sizeof(info));
-   if (vec->ib.hw_resource) {
-      info.vma = ilo_resource_get_vma(vec->ib.hw_resource);
-      info.size = info.vma->vm_size;
-      info.format = ilo_translate_index_size(vec->ib.hw_index_size);
-   }
-
-   ilo_state_index_buffer_set_info(&vec->ib.ib, dev, &info);
-}
-
-static void
-finalize_vertex_elements(struct ilo_context *ilo)
-{
-   const struct ilo_dev *dev = ilo->dev;
-   struct ilo_state_vector *vec = &ilo->state_vector;
-   struct ilo_ve_state *ve = vec->ve;
-   const bool last_element_edge_flag = (vec->vs &&
-         ilo_shader_get_kernel_param(vec->vs, ILO_KERNEL_VS_INPUT_EDGEFLAG));
-   const bool prepend_vertexid = (vec->vs &&
-         ilo_shader_get_kernel_param(vec->vs, ILO_KERNEL_VS_INPUT_VERTEXID));
-   const bool prepend_instanceid = (vec->vs &&
-         ilo_shader_get_kernel_param(vec->vs,
-            ILO_KERNEL_VS_INPUT_INSTANCEID));
-   const enum gen_index_format index_format = (vec->draw->indexed) ?
-      ilo_translate_index_size(vec->ib.state.index_size) : GEN6_INDEX_DWORD;
-
-   /* check for non-orthogonal states */
-   if (ve->vf_params.cv_topology != vec->draw_info.topology ||
-       ve->vf_params.prepend_vertexid != prepend_vertexid ||
-       ve->vf_params.prepend_instanceid != prepend_instanceid ||
-       ve->vf_params.last_element_edge_flag != last_element_edge_flag ||
-       ve->vf_params.cv_index_format != index_format ||
-       ve->vf_params.cut_index_enable != vec->draw->primitive_restart ||
-       ve->vf_params.cut_index != vec->draw->restart_index) {
-      ve->vf_params.cv_topology = vec->draw_info.topology;
-      ve->vf_params.prepend_vertexid = prepend_vertexid;
-      ve->vf_params.prepend_instanceid = prepend_instanceid;
-      ve->vf_params.last_element_edge_flag = last_element_edge_flag;
-      ve->vf_params.cv_index_format = index_format;
-      ve->vf_params.cut_index_enable = vec->draw->primitive_restart;
-      ve->vf_params.cut_index = vec->draw->restart_index;
-
-      ilo_state_vf_set_params(&ve->vf, dev, &ve->vf_params);
-
-      vec->dirty |= ILO_DIRTY_VE;
-   }
-}
-
-static void
-finalize_vertex_buffers(struct ilo_context *ilo)
-{
-   const struct ilo_dev *dev = ilo->dev;
-   struct ilo_state_vector *vec = &ilo->state_vector;
-   struct ilo_state_vertex_buffer_info info;
-   unsigned i;
-
-   if (!(vec->dirty & (ILO_DIRTY_VE | ILO_DIRTY_VB)))
-      return;
-
-   memset(&info, 0, sizeof(info));
-
-   for (i = 0; i < vec->ve->vb_count; i++) {
-      const unsigned pipe_idx = vec->ve->vb_mapping[i];
-      const struct pipe_vertex_buffer *cso = &vec->vb.states[pipe_idx];
-
-      if (cso->buffer) {
-         info.vma = ilo_resource_get_vma(cso->buffer);
-         info.offset = cso->buffer_offset;
-         info.size = info.vma->vm_size - cso->buffer_offset;
-
-         info.stride = cso->stride;
-      } else {
-         memset(&info, 0, sizeof(info));
-      }
-
-      ilo_state_vertex_buffer_set_info(&vec->vb.vb[i], dev, &info);
-   }
-}
-
-static void
-finalize_urb(struct ilo_context *ilo)
-{
-   const uint16_t attr_size = sizeof(uint32_t) * 4;
-   const struct ilo_dev *dev = ilo->dev;
-   struct ilo_state_vector *vec = &ilo->state_vector;
-   struct ilo_state_urb_info info;
-
-   if (!(vec->dirty & (ILO_DIRTY_VE | ILO_DIRTY_VS |
-                       ILO_DIRTY_GS | ILO_DIRTY_FS)))
-      return;
-
-   memset(&info, 0, sizeof(info));
-
-   info.ve_entry_size = attr_size * ilo_state_vf_get_attr_count(&vec->ve->vf);
-
-   if (vec->vs) {
-      info.vs_const_data = (bool)
-         (ilo_shader_get_kernel_param(vec->vs, ILO_KERNEL_PCB_CBUF0_SIZE) +
-          ilo_shader_get_kernel_param(vec->vs, ILO_KERNEL_VS_PCB_UCP_SIZE));
-      info.vs_entry_size = attr_size *
-         ilo_shader_get_kernel_param(vec->vs, ILO_KERNEL_OUTPUT_COUNT);
-   }
-
-   if (vec->gs) {
-      info.gs_const_data = (bool)
-         ilo_shader_get_kernel_param(vec->gs, ILO_KERNEL_PCB_CBUF0_SIZE);
-
-      /*
-       * From the Ivy Bridge PRM, volume 2 part 1, page 189:
-       *
-       *     "All outputs of a GS thread will be stored in the single GS
-       *      thread output URB entry."
-       *
-       * TODO
-       */
-      info.gs_entry_size = attr_size *
-         ilo_shader_get_kernel_param(vec->gs, ILO_KERNEL_OUTPUT_COUNT);
-   }
-
-   if (vec->fs) {
-      info.ps_const_data = (bool)
-         ilo_shader_get_kernel_param(vec->fs, ILO_KERNEL_PCB_CBUF0_SIZE);
-   }
-
-   ilo_state_urb_set_info(&vec->urb, dev, &info);
-}
-
-static void
-finalize_viewport(struct ilo_context *ilo)
-{
-   const struct ilo_dev *dev = ilo->dev;
-   struct ilo_state_vector *vec = &ilo->state_vector;
-
-   if (vec->dirty & ILO_DIRTY_VIEWPORT) {
-      ilo_state_viewport_set_params(&vec->viewport.vp,
-            dev, &vec->viewport.params, false);
-   } else if (vec->dirty & ILO_DIRTY_SCISSOR) {
-      ilo_state_viewport_set_params(&vec->viewport.vp,
-            dev, &vec->viewport.params, true);
-      vec->dirty |= ILO_DIRTY_VIEWPORT;
-   }
-}
-
-static bool
-can_enable_gb_test(const struct ilo_rasterizer_state *rasterizer,
-                   const struct ilo_viewport_state *viewport,
-                   const struct ilo_fb_state *fb)
-{
-   unsigned i;
-
-   /*
-    * There are several reasons that guard band test should be disabled
-    *
-    *  - GL wide points (to avoid partially visibie object)
-    *  - GL wide or AA lines (to avoid partially visibie object)
-    *  - missing 2D clipping
-    */
-   if (rasterizer->state.point_size_per_vertex ||
-       rasterizer->state.point_size > 1.0f ||
-       rasterizer->state.line_width > 1.0f ||
-       rasterizer->state.line_smooth)
-      return false;
-
-   for (i = 0; i < viewport->params.count; i++) {
-      const struct ilo_state_viewport_matrix_info *mat =
-         &viewport->matrices[i];
-      float min_x, max_x, min_y, max_y;
-
-      min_x = -1.0f * fabsf(mat->scale[0]) + mat->translate[0];
-      max_x =  1.0f * fabsf(mat->scale[0]) + mat->translate[0];
-      min_y = -1.0f * fabsf(mat->scale[1]) + mat->translate[1];
-      max_y =  1.0f * fabsf(mat->scale[1]) + mat->translate[1];
-
-      if (min_x > 0.0f || max_x < fb->state.width ||
-          min_y > 0.0f || max_y < fb->state.height)
-         return false;
-   }
-
-   return true;
-}
-
-static void
-finalize_rasterizer(struct ilo_context *ilo)
-{
-   const struct ilo_dev *dev = ilo->dev;
-   struct ilo_state_vector *vec = &ilo->state_vector;
-   struct ilo_rasterizer_state *rasterizer = vec->rasterizer;
-   struct ilo_state_raster_info *info = &vec->rasterizer->info;
-   const bool gb_test_enable =
-      can_enable_gb_test(rasterizer, &vec->viewport, &vec->fb);
-   const bool multisample =
-      (rasterizer->state.multisample && vec->fb.num_samples > 1);
-   const uint8_t barycentric_interps = ilo_shader_get_kernel_param(vec->fs,
-         ILO_KERNEL_FS_BARYCENTRIC_INTERPOLATIONS);
-
-   /* check for non-orthogonal states */
-   if (info->clip.viewport_count != vec->viewport.params.count ||
-       info->clip.gb_test_enable != gb_test_enable ||
-       info->setup.msaa_enable != multisample ||
-       info->setup.line_msaa_enable != multisample ||
-       info->tri.depth_offset_format != vec->fb.depth_offset_format ||
-       info->scan.sample_count != vec->fb.num_samples ||
-       info->scan.sample_mask != vec->sample_mask ||
-       info->scan.barycentric_interps != barycentric_interps ||
-       info->params.any_integer_rt != vec->fb.has_integer_rt ||
-       info->params.hiz_enable != vec->fb.has_hiz) {
-      info->clip.viewport_count = vec->viewport.params.count;
-      info->clip.gb_test_enable = gb_test_enable;
-      info->setup.msaa_enable = multisample;
-      info->setup.line_msaa_enable = multisample;
-      info->tri.depth_offset_format = vec->fb.depth_offset_format;
-      info->scan.sample_count = vec->fb.num_samples;
-      info->scan.sample_mask = vec->sample_mask;
-      info->scan.barycentric_interps = barycentric_interps;
-      info->params.any_integer_rt = vec->fb.has_integer_rt;
-      info->params.hiz_enable = vec->fb.has_hiz;
-
-      ilo_state_raster_set_info(&rasterizer->rs, dev, &rasterizer->info);
-
-      vec->dirty |= ILO_DIRTY_RASTERIZER;
-   }
-}
-
-static bool
-finalize_blend_rt(struct ilo_context *ilo)
-{
-   struct ilo_state_vector *vec = &ilo->state_vector;
-   const struct ilo_fb_state *fb = &vec->fb;
-   struct ilo_blend_state *blend = vec->blend;
-   struct ilo_state_cc_blend_info *info = &vec->blend->info.blend;
-   bool changed = false;
-   unsigned i;
-
-   if (!(vec->dirty & (ILO_DIRTY_FB | ILO_DIRTY_BLEND)))
-      return false;
-
-   /* set up one for dummy RT writes */
-   if (!fb->state.nr_cbufs) {
-      if (info->rt != &blend->dummy_rt) {
-         info->rt = &blend->dummy_rt;
-         info->rt_count = 1;
-         changed = true;
-      }
-
-      return changed;
-   }
-
-   if (info->rt != blend->effective_rt ||
-       info->rt_count != fb->state.nr_cbufs) {
-      info->rt = blend->effective_rt;
-      info->rt_count = fb->state.nr_cbufs;
-      changed = true;
-   }
-
-   for (i = 0; i < fb->state.nr_cbufs; i++) {
-      const struct ilo_fb_blend_caps *caps = &fb->blend_caps[i];
-      struct ilo_state_cc_blend_rt_info *rt = &blend->effective_rt[i];
-      /* ignore logicop when not UNORM */
-      const bool logicop_enable =
-         (blend->rt[i].logicop_enable && caps->is_unorm);
-
-      if (rt->cv_is_unorm != caps->is_unorm ||
-          rt->cv_is_integer != caps->is_integer ||
-          rt->logicop_enable != logicop_enable ||
-          rt->force_dst_alpha_one != caps->force_dst_alpha_one) {
-         rt->cv_is_unorm = caps->is_unorm;
-         rt->cv_is_integer = caps->is_integer;
-         rt->logicop_enable = logicop_enable;
-         rt->force_dst_alpha_one = caps->force_dst_alpha_one;
-
-         changed = true;
-      }
-   }
-
-   return changed;
-}
-
-static void
-finalize_blend(struct ilo_context *ilo)
-{
-   const struct ilo_dev *dev = ilo->dev;
-   struct ilo_state_vector *vec = &ilo->state_vector;
-   struct ilo_blend_state *blend = vec->blend;
-   struct ilo_state_cc_info *info = &blend->info;
-   const bool sample_count_one = (vec->fb.num_samples <= 1);
-   const bool float_source0_alpha =
-      (!vec->fb.state.nr_cbufs || !vec->fb.state.cbufs[0] ||
-       !util_format_is_pure_integer(vec->fb.state.cbufs[0]->format));
-
-   /* check for non-orthogonal states */
-   if (finalize_blend_rt(ilo) ||
-       info->alpha.cv_sample_count_one != sample_count_one ||
-       info->alpha.cv_float_source0_alpha != float_source0_alpha ||
-       info->alpha.test_enable != vec->dsa->alpha_test ||
-       info->alpha.test_func != vec->dsa->alpha_func ||
-       memcmp(&info->stencil, &vec->dsa->stencil, sizeof(info->stencil)) ||
-       memcmp(&info->depth, &vec->dsa->depth, sizeof(info->depth)) ||
-       memcmp(&info->params, &vec->cc_params, sizeof(info->params))) {
-      info->alpha.cv_sample_count_one = sample_count_one;
-      info->alpha.cv_float_source0_alpha = float_source0_alpha;
-      info->alpha.test_enable = vec->dsa->alpha_test;
-      info->alpha.test_func = vec->dsa->alpha_func;
-      info->stencil = vec->dsa->stencil;
-      info->depth = vec->dsa->depth;
-      info->params = vec->cc_params;
-
-      ilo_state_cc_set_info(&blend->cc, dev, info);
-
-      blend->alpha_may_kill = (info->alpha.alpha_to_coverage ||
-                               info->alpha.test_enable);
-
-      vec->dirty |= ILO_DIRTY_BLEND;
-   }
-}
-
-/**
- * Finalize states.  Some states depend on other states and are
- * incomplete/invalid until finalized.
- */
-void
-ilo_finalize_3d_states(struct ilo_context *ilo,
-                       const struct pipe_draw_info *draw)
-{
-   ilo->state_vector.draw = draw;
-
-   ilo->state_vector.draw_info.topology = ilo_translate_draw_mode(draw->mode);
-   ilo->state_vector.draw_info.indexed = draw->indexed;
-   ilo->state_vector.draw_info.vertex_count = draw->count;
-   ilo->state_vector.draw_info.vertex_start = draw->start;
-   ilo->state_vector.draw_info.instance_count = draw->instance_count;
-   ilo->state_vector.draw_info.instance_start = draw->start_instance;
-   ilo->state_vector.draw_info.vertex_base = draw->index_bias;
-
-   finalize_blend(ilo);
-   finalize_shader_states(&ilo->state_vector);
-   finalize_constant_buffers(ilo);
-   finalize_index_buffer(ilo);
-   finalize_vertex_elements(ilo);
-   finalize_vertex_buffers(ilo);
-
-   finalize_urb(ilo);
-   finalize_rasterizer(ilo);
-   finalize_viewport(ilo);
-
-   u_upload_unmap(ilo->uploader);
-}
-
-static void
-finalize_global_binding(struct ilo_state_vector *vec)
-{
-   struct ilo_shader_state *cs = vec->cs;
-   int base, count, shift;
-   int i;
-
-   count = ilo_shader_get_kernel_param(cs,
-         ILO_KERNEL_CS_SURFACE_GLOBAL_COUNT);
-   if (!count)
-      return;
-
-   base = ilo_shader_get_kernel_param(cs, ILO_KERNEL_CS_SURFACE_GLOBAL_BASE);
-   shift = 32 - util_last_bit(base + count - 1);
-
-   if (count > vec->global_binding.count)
-      count = vec->global_binding.count;
-
-   for (i = 0; i < count; i++) {
-      struct ilo_global_binding_cso *cso =
-         util_dynarray_element(&vec->global_binding.bindings,
-               struct ilo_global_binding_cso, i);
-      const uint32_t offset = *cso->handle & ((1 << shift) - 1);
-
-      *cso->handle = ((base + i) << shift) | offset;
-   }
-}
-
-void
-ilo_finalize_compute_states(struct ilo_context *ilo)
-{
-   finalize_global_binding(&ilo->state_vector);
-}
-
-static void *
-ilo_create_blend_state(struct pipe_context *pipe,
-                       const struct pipe_blend_state *state)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_state_cc_info *info;
-   struct ilo_blend_state *blend;
-   int i;
-
-   blend = CALLOC_STRUCT(ilo_blend_state);
-   assert(blend);
-
-   info = &blend->info;
-
-   info->alpha.cv_float_source0_alpha = true;
-   info->alpha.cv_sample_count_one = true;
-   info->alpha.alpha_to_one = state->alpha_to_one;
-   info->alpha.alpha_to_coverage = state->alpha_to_coverage;
-   info->alpha.test_enable = false;
-   info->alpha.test_func = GEN6_COMPAREFUNCTION_ALWAYS;
-
-   info->stencil.cv_has_buffer = true;
-   info->depth.cv_has_buffer= true;
-
-   info->blend.rt = blend->effective_rt;
-   info->blend.rt_count = 1;
-   info->blend.dither_enable = state->dither;
-
-   for (i = 0; i < ARRAY_SIZE(blend->rt); i++) {
-      const struct pipe_rt_blend_state *rt = &state->rt[i];
-      struct ilo_state_cc_blend_rt_info *rt_info = &blend->rt[i];
-
-      rt_info->cv_has_buffer = true;
-      rt_info->cv_is_unorm = true;
-      rt_info->cv_is_integer = false;
-
-      /* logic op takes precedence over blending */
-      if (state->logicop_enable) {
-         rt_info->logicop_enable = true;
-         rt_info->logicop_func = ilo_translate_logicop(state->logicop_func);
-      } else if (rt->blend_enable) {
-         rt_info->blend_enable = true;
-
-         rt_info->rgb_src = ilo_translate_blend_factor(rt->rgb_src_factor);
-         rt_info->rgb_dst = ilo_translate_blend_factor(rt->rgb_dst_factor);
-         rt_info->rgb_func = ilo_translate_blend_func(rt->rgb_func);
-
-         rt_info->a_src = ilo_translate_blend_factor(rt->alpha_src_factor);
-         rt_info->a_dst = ilo_translate_blend_factor(rt->alpha_dst_factor);
-         rt_info->a_func = ilo_translate_blend_func(rt->alpha_func);
-      }
-
-      if (!(rt->colormask & PIPE_MASK_A))
-         rt_info->argb_write_disables |= (1 << 3);
-      if (!(rt->colormask & PIPE_MASK_R))
-         rt_info->argb_write_disables |= (1 << 2);
-      if (!(rt->colormask & PIPE_MASK_G))
-         rt_info->argb_write_disables |= (1 << 1);
-      if (!(rt->colormask & PIPE_MASK_B))
-         rt_info->argb_write_disables |= (1 << 0);
-
-      if (!state->independent_blend_enable) {
-         for (i = 1; i < ARRAY_SIZE(blend->rt); i++)
-            blend->rt[i] = *rt_info;
-         break;
-      }
-   }
-
-   memcpy(blend->effective_rt, blend->rt, sizeof(blend->rt));
-
-   blend->dummy_rt.argb_write_disables = 0xf;
-
-   if (!ilo_state_cc_init(&blend->cc, dev, &blend->info)) {
-      FREE(blend);
-      return NULL;
-   }
-
-   blend->dual_blend = util_blend_state_is_dual(state, 0);
-
-   return blend;
-}
-
-static void
-ilo_bind_blend_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   vec->blend = state;
-
-   vec->dirty |= ILO_DIRTY_BLEND;
-}
-
-static void
-ilo_delete_blend_state(struct pipe_context *pipe, void  *state)
-{
-   FREE(state);
-}
-
-static void *
-ilo_create_sampler_state(struct pipe_context *pipe,
-                         const struct pipe_sampler_state *state)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_sampler_cso *sampler;
-   struct ilo_state_sampler_info info;
-   struct ilo_state_sampler_border_info border;
-
-   sampler = CALLOC_STRUCT(ilo_sampler_cso);
-   assert(sampler);
-
-   memset(&info, 0, sizeof(info));
-
-   info.non_normalized = !state->normalized_coords;
-   if (state->normalized_coords) {
-      info.lod_bias = state->lod_bias;
-      info.min_lod = state->min_lod;
-      info.max_lod = state->max_lod;
-
-      info.mip_filter = ilo_translate_mip_filter(state->min_mip_filter);
-   } else {
-      /* work around a bug in util_blitter */
-      info.mip_filter = GEN6_MIPFILTER_NONE;
-   }
-
-   if (state->max_anisotropy) {
-      info.min_filter = GEN6_MAPFILTER_ANISOTROPIC;
-      info.mag_filter = GEN6_MAPFILTER_ANISOTROPIC;
-   } else {
-      info.min_filter = ilo_translate_img_filter(state->min_img_filter);
-      info.mag_filter = ilo_translate_img_filter(state->mag_img_filter);
-   }
-
-   info.max_anisotropy = ilo_translate_max_anisotropy(state->max_anisotropy);
-
-   /* use LOD 0 when no mipmapping (see sampler_set_gen6_SAMPLER_STATE()) */
-   if (info.mip_filter == GEN6_MIPFILTER_NONE && info.min_lod > 0.0f) {
-      info.min_lod = 0.0f;
-      info.mag_filter = info.min_filter;
-   }
-
-   if (state->seamless_cube_map) {
-      if (state->min_img_filter == PIPE_TEX_FILTER_NEAREST ||
-          state->mag_img_filter == PIPE_TEX_FILTER_NEAREST) {
-         info.tcx_ctrl = GEN6_TEXCOORDMODE_CLAMP;
-         info.tcy_ctrl = GEN6_TEXCOORDMODE_CLAMP;
-         info.tcz_ctrl = GEN6_TEXCOORDMODE_CLAMP;
-      } else {
-         info.tcx_ctrl = GEN6_TEXCOORDMODE_CUBE;
-         info.tcy_ctrl = GEN6_TEXCOORDMODE_CUBE;
-         info.tcz_ctrl = GEN6_TEXCOORDMODE_CUBE;
-      }
-   } else {
-      info.tcx_ctrl = ilo_translate_address_wrap(state->wrap_s);
-      info.tcy_ctrl = ilo_translate_address_wrap(state->wrap_t);
-      info.tcz_ctrl = ilo_translate_address_wrap(state->wrap_r);
-
-      if (ilo_dev_gen(dev) < ILO_GEN(8)) {
-         /*
-          * For nearest filtering, PIPE_TEX_WRAP_CLAMP means
-          * PIPE_TEX_WRAP_CLAMP_TO_EDGE;  for linear filtering,
-          * PIPE_TEX_WRAP_CLAMP means PIPE_TEX_WRAP_CLAMP_TO_BORDER while
-          * additionally clamping the texture coordinates to [0.0, 1.0].
-          *
-          * PIPE_TEX_WRAP_CLAMP is not supported natively until Gen8.  The
-          * clamping has to be taken care of in the shaders.  There are two
-          * filters here, but let the minification one has a say.
-          */
-         const bool clamp_is_to_edge =
-            (state->min_img_filter == PIPE_TEX_FILTER_NEAREST);
-
-         if (clamp_is_to_edge) {
-            if (info.tcx_ctrl == GEN8_TEXCOORDMODE_HALF_BORDER)
-               info.tcx_ctrl = GEN6_TEXCOORDMODE_CLAMP;
-            if (info.tcy_ctrl == GEN8_TEXCOORDMODE_HALF_BORDER)
-               info.tcy_ctrl = GEN6_TEXCOORDMODE_CLAMP;
-            if (info.tcz_ctrl == GEN8_TEXCOORDMODE_HALF_BORDER)
-               info.tcz_ctrl = GEN6_TEXCOORDMODE_CLAMP;
-         } else {
-            if (info.tcx_ctrl == GEN8_TEXCOORDMODE_HALF_BORDER) {
-               info.tcx_ctrl = GEN6_TEXCOORDMODE_CLAMP_BORDER;
-               sampler->saturate_s = true;
-            }
-            if (info.tcy_ctrl == GEN8_TEXCOORDMODE_HALF_BORDER) {
-               info.tcy_ctrl = GEN6_TEXCOORDMODE_CLAMP_BORDER;
-               sampler->saturate_t = true;
-            }
-            if (info.tcz_ctrl == GEN8_TEXCOORDMODE_HALF_BORDER) {
-               info.tcz_ctrl = GEN6_TEXCOORDMODE_CLAMP_BORDER;
-               sampler->saturate_r = true;
-            }
-         }
-      }
-   }
-
-   if (state->compare_mode == PIPE_TEX_COMPARE_R_TO_TEXTURE)
-      info.shadow_func = ilo_translate_shadow_func(state->compare_func);
-
-   ilo_state_sampler_init(&sampler->sampler, dev, &info);
-
-   memset(&border, 0, sizeof(border));
-   memcpy(border.rgba.f, state->border_color.f, sizeof(border.rgba.f));
-
-   ilo_state_sampler_border_init(&sampler->border, dev, &border);
-
-   return sampler;
-}
-
-static void
-ilo_bind_sampler_states(struct pipe_context *pipe,
-                        enum pipe_shader_type shader,
-                        unsigned start, unsigned count, void **samplers)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   struct ilo_sampler_state *dst = &vec->sampler[shader];
-   bool changed = false;
-   unsigned i;
-
-   assert(start + count <= ARRAY_SIZE(dst->cso));
-
-   if (samplers) {
-      for (i = 0; i < count; i++) {
-         if (dst->cso[start + i] != samplers[i]) {
-            dst->cso[start + i] = samplers[i];
-
-            /*
-             * This function is sometimes called to reduce the number of bound
-             * samplers.  Do not consider that as a state change (and create a
-             * new array of SAMPLER_STATE).
-             */
-            if (samplers[i])
-               changed = true;
-         }
-      }
-   }
-   else {
-      for (i = 0; i < count; i++)
-         dst->cso[start + i] = NULL;
-   }
-
-   if (changed) {
-      switch (shader) {
-      case PIPE_SHADER_VERTEX:
-         vec->dirty |= ILO_DIRTY_SAMPLER_VS;
-         break;
-      case PIPE_SHADER_GEOMETRY:
-         vec->dirty |= ILO_DIRTY_SAMPLER_GS;
-         break;
-      case PIPE_SHADER_FRAGMENT:
-         vec->dirty |= ILO_DIRTY_SAMPLER_FS;
-         break;
-      case PIPE_SHADER_COMPUTE:
-         vec->dirty |= ILO_DIRTY_SAMPLER_CS;
-         break;
-      }
-   }
-}
-
-static void
-ilo_delete_sampler_state(struct pipe_context *pipe, void *state)
-{
-   FREE(state);
-}
-
-static void *
-ilo_create_rasterizer_state(struct pipe_context *pipe,
-                            const struct pipe_rasterizer_state *state)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_rasterizer_state *rast;
-   struct ilo_state_raster_info *info;
-
-   rast = CALLOC_STRUCT(ilo_rasterizer_state);
-   assert(rast);
-
-   rast->state = *state;
-
-   info = &rast->info;
-
-   info->clip.clip_enable = true;
-   info->clip.stats_enable = true;
-   info->clip.viewport_count = 1;
-   info->clip.force_rtaindex_zero = true;
-   info->clip.user_clip_enables = state->clip_plane_enable;
-   info->clip.gb_test_enable = true;
-   info->clip.xy_test_enable = true;
-   info->clip.z_far_enable = state->depth_clip;
-   info->clip.z_near_enable = state->depth_clip;
-   info->clip.z_near_zero = state->clip_halfz;
-
-   info->setup.first_vertex_provoking = state->flatshade_first;
-   info->setup.viewport_transform = true;
-   info->setup.scissor_enable = state->scissor;
-   info->setup.msaa_enable = false;
-   info->setup.line_msaa_enable = false;
-   info->point.aa_enable = state->point_smooth;
-   info->point.programmable_width = state->point_size_per_vertex;
-   info->line.aa_enable = state->line_smooth;
-   info->line.stipple_enable = state->line_stipple_enable;
-   info->line.giq_enable = true;
-   info->line.giq_last_pixel = state->line_last_pixel;
-   info->tri.front_winding = ilo_translate_front_ccw(state->front_ccw);
-   info->tri.cull_mode = ilo_translate_cull_face(state->cull_face);
-   info->tri.fill_mode_front = ilo_translate_poly_mode(state->fill_front);
-   info->tri.fill_mode_back = ilo_translate_poly_mode(state->fill_back);
-   info->tri.depth_offset_format = GEN6_ZFORMAT_D24_UNORM_X8_UINT;
-   info->tri.depth_offset_solid = state->offset_tri;
-   info->tri.depth_offset_wireframe = state->offset_line;
-   info->tri.depth_offset_point = state->offset_point;
-   info->tri.poly_stipple_enable = state->poly_stipple_enable;
-
-   info->scan.stats_enable = true;
-   info->scan.sample_count = 1;
-   info->scan.pixloc =
-      ilo_translate_half_pixel_center(state->half_pixel_center);
-   info->scan.sample_mask = ~0u;
-   info->scan.zw_interp = GEN6_ZW_INTERP_PIXEL;
-   info->scan.barycentric_interps = GEN6_INTERP_PERSPECTIVE_PIXEL;
-   info->scan.earlyz_control = GEN7_EDSC_NORMAL;
-   info->scan.earlyz_op = ILO_STATE_RASTER_EARLYZ_NORMAL;
-   info->scan.earlyz_stencil_clear = false;
-
-   info->params.any_integer_rt = false;
-   info->params.hiz_enable = true;
-   info->params.point_width =
-      (state->point_size == 0.0f) ? 1.0f : state->point_size;
-   info->params.line_width =
-      (state->line_width == 0.0f) ? 1.0f : state->line_width;
-
-   info->params.depth_offset_scale = state->offset_scale;
-   /*
-    * Scale the constant term.  The minimum representable value used by the HW
-    * is not large enouch to be the minimum resolvable difference.
-    */
-   info->params.depth_offset_const = state->offset_units * 2.0f;
-   info->params.depth_offset_clamp = state->offset_clamp;
-
-   ilo_state_raster_init(&rast->rs, dev, info);
-
-   return rast;
-}
-
-static void
-ilo_bind_rasterizer_state(struct pipe_context *pipe, void *state)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   vec->rasterizer = state;
-
-   if (vec->rasterizer) {
-      struct ilo_state_line_stipple_info info;
-
-      info.pattern = vec->rasterizer->state.line_stipple_pattern;
-      info.repeat_count = vec->rasterizer->state.line_stipple_factor + 1;
-
-      ilo_state_line_stipple_set_info(&vec->line_stipple, dev, &info);
-   }
-
-   vec->dirty |= ILO_DIRTY_RASTERIZER;
-}
-
-static void
-ilo_delete_rasterizer_state(struct pipe_context *pipe, void *state)
-{
-   FREE(state);
-}
-
-static void *
-ilo_create_depth_stencil_alpha_state(struct pipe_context *pipe,
-                                     const struct pipe_depth_stencil_alpha_state *state)
-{
-   struct ilo_dsa_state *dsa;
-   int i;
-
-   dsa = CALLOC_STRUCT(ilo_dsa_state);
-   assert(dsa);
-
-   dsa->depth.cv_has_buffer = true;
-   dsa->depth.test_enable = state->depth.enabled;
-   dsa->depth.write_enable = state->depth.writemask;
-   dsa->depth.test_func = ilo_translate_compare_func(state->depth.func);
-
-   dsa->stencil.cv_has_buffer = true;
-   for (i = 0; i < ARRAY_SIZE(state->stencil); i++) {
-      const struct pipe_stencil_state *stencil = &state->stencil[i];
-      struct ilo_state_cc_stencil_op_info *op;
-
-      if (!stencil->enabled)
-         break;
-
-      if (i == 0) {
-         dsa->stencil.test_enable = true;
-         dsa->stencil_front.test_mask = stencil->valuemask;
-         dsa->stencil_front.write_mask = stencil->writemask;
-
-         op = &dsa->stencil.front;
-      } else {
-         dsa->stencil.twosided_enable = true;
-         dsa->stencil_back.test_mask = stencil->valuemask;
-         dsa->stencil_back.write_mask = stencil->writemask;
-
-         op = &dsa->stencil.back;
-      }
-
-      op->test_func = ilo_translate_compare_func(stencil->func);
-      op->fail_op = ilo_translate_stencil_op(stencil->fail_op);
-      op->zfail_op = ilo_translate_stencil_op(stencil->zfail_op);
-      op->zpass_op = ilo_translate_stencil_op(stencil->zpass_op);
-   }
-
-   dsa->alpha_test = state->alpha.enabled;
-   dsa->alpha_ref = state->alpha.ref_value;
-   dsa->alpha_func = ilo_translate_compare_func(state->alpha.func);
-
-   return dsa;
-}
-
-static void
-ilo_bind_depth_stencil_alpha_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   vec->dsa = state;
-   if (vec->dsa) {
-      vec->cc_params.alpha_ref = vec->dsa->alpha_ref;
-      vec->cc_params.stencil_front.test_mask =
-         vec->dsa->stencil_front.test_mask;
-      vec->cc_params.stencil_front.write_mask =
-         vec->dsa->stencil_front.write_mask;
-      vec->cc_params.stencil_back.test_mask =
-         vec->dsa->stencil_back.test_mask;
-      vec->cc_params.stencil_back.write_mask =
-         vec->dsa->stencil_back.write_mask;
-   }
-
-   vec->dirty |= ILO_DIRTY_DSA;
-}
-
-static void
-ilo_delete_depth_stencil_alpha_state(struct pipe_context *pipe, void *state)
-{
-   FREE(state);
-}
-
-static void *
-ilo_create_fs_state(struct pipe_context *pipe,
-                    const struct pipe_shader_state *state)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_shader_state *shader;
-
-   shader = ilo_shader_create_fs(ilo->dev, state, &ilo->state_vector);
-   assert(shader);
-
-   ilo_shader_cache_add(ilo->shader_cache, shader);
-
-   return shader;
-}
-
-static void
-ilo_bind_fs_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   vec->fs = state;
-
-   vec->dirty |= ILO_DIRTY_FS;
-}
-
-static void
-ilo_delete_fs_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_shader_state *fs = (struct ilo_shader_state *) state;
-
-   ilo_shader_cache_remove(ilo->shader_cache, fs);
-   ilo_shader_destroy(fs);
-}
-
-static void *
-ilo_create_vs_state(struct pipe_context *pipe,
-                    const struct pipe_shader_state *state)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_shader_state *shader;
-
-   shader = ilo_shader_create_vs(ilo->dev, state, &ilo->state_vector);
-   assert(shader);
-
-   ilo_shader_cache_add(ilo->shader_cache, shader);
-
-   return shader;
-}
-
-static void
-ilo_bind_vs_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   vec->vs = state;
-
-   vec->dirty |= ILO_DIRTY_VS;
-}
-
-static void
-ilo_delete_vs_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_shader_state *vs = (struct ilo_shader_state *) state;
-
-   ilo_shader_cache_remove(ilo->shader_cache, vs);
-   ilo_shader_destroy(vs);
-}
-
-static void *
-ilo_create_gs_state(struct pipe_context *pipe,
-                    const struct pipe_shader_state *state)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_shader_state *shader;
-
-   shader = ilo_shader_create_gs(ilo->dev, state, &ilo->state_vector);
-   assert(shader);
-
-   ilo_shader_cache_add(ilo->shader_cache, shader);
-
-   return shader;
-}
-
-static void
-ilo_bind_gs_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   /* util_blitter may set this unnecessarily */
-   if (vec->gs == state)
-      return;
-
-   vec->gs = state;
-
-   vec->dirty |= ILO_DIRTY_GS;
-}
-
-static void
-ilo_delete_gs_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_shader_state *gs = (struct ilo_shader_state *) state;
-
-   ilo_shader_cache_remove(ilo->shader_cache, gs);
-   ilo_shader_destroy(gs);
-}
-
-static void *
-ilo_create_vertex_elements_state(struct pipe_context *pipe,
-                                 unsigned num_elements,
-                                 const struct pipe_vertex_element *elements)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_state_vf_element_info vf_elements[PIPE_MAX_ATTRIBS];
-   unsigned instance_divisors[PIPE_MAX_ATTRIBS];
-   struct ilo_state_vf_info vf_info;
-   struct ilo_ve_state *ve;
-   unsigned i;
-
-   ve = CALLOC_STRUCT(ilo_ve_state);
-   assert(ve);
-
-   for (i = 0; i < num_elements; i++) {
-      const struct pipe_vertex_element *elem = &elements[i];
-      struct ilo_state_vf_element_info *attr = &vf_elements[i];
-      unsigned hw_idx;
-
-      /*
-       * map the pipe vb to the hardware vb, which has a fixed instance
-       * divisor
-       */
-      for (hw_idx = 0; hw_idx < ve->vb_count; hw_idx++) {
-         if (ve->vb_mapping[hw_idx] == elem->vertex_buffer_index &&
-             instance_divisors[hw_idx] == elem->instance_divisor)
-            break;
-      }
-
-      /* create one if there is no matching hardware vb */
-      if (hw_idx >= ve->vb_count) {
-         hw_idx = ve->vb_count++;
-
-         ve->vb_mapping[hw_idx] = elem->vertex_buffer_index;
-         instance_divisors[hw_idx] = elem->instance_divisor;
-      }
-
-      attr->buffer = hw_idx;
-      attr->vertex_offset = elem->src_offset;
-      attr->format = ilo_format_translate_vertex(dev, elem->src_format);
-      attr->format_size = util_format_get_blocksize(elem->src_format);
-      attr->component_count = util_format_get_nr_components(elem->src_format);
-      attr->is_integer = util_format_is_pure_integer(elem->src_format);
-
-      attr->instancing_enable = (elem->instance_divisor != 0);
-      attr->instancing_step_rate = elem->instance_divisor;
-   }
-
-   memset(&vf_info, 0, sizeof(vf_info));
-   vf_info.data = ve->vf_data;
-   vf_info.data_size = sizeof(ve->vf_data);
-   vf_info.elements = vf_elements;
-   vf_info.element_count = num_elements;
-   /* vf_info.params and ve->vf_params are both zeroed */
-
-   if (!ilo_state_vf_init(&ve->vf, dev, &vf_info)) {
-      FREE(ve);
-      return NULL;
-   }
-
-   return ve;
-}
-
-static void
-ilo_bind_vertex_elements_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   vec->ve = state;
-
-   vec->dirty |= ILO_DIRTY_VE;
-}
-
-static void
-ilo_delete_vertex_elements_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_ve_state *ve = state;
-
-   FREE(ve);
-}
-
-static void
-ilo_set_blend_color(struct pipe_context *pipe,
-                    const struct pipe_blend_color *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   memcpy(vec->cc_params.blend_rgba, state->color, sizeof(state->color));
-
-   vec->dirty |= ILO_DIRTY_BLEND_COLOR;
-}
-
-static void
-ilo_set_stencil_ref(struct pipe_context *pipe,
-                    const struct pipe_stencil_ref *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   /* util_blitter may set this unnecessarily */
-   if (!memcmp(&vec->stencil_ref, state, sizeof(*state)))
-      return;
-
-   vec->stencil_ref = *state;
-
-   vec->cc_params.stencil_front.test_ref = state->ref_value[0];
-   vec->cc_params.stencil_back.test_ref = state->ref_value[1];
-
-   vec->dirty |= ILO_DIRTY_STENCIL_REF;
-}
-
-static void
-ilo_set_sample_mask(struct pipe_context *pipe,
-                    unsigned sample_mask)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   /* util_blitter may set this unnecessarily */
-   if (vec->sample_mask == sample_mask)
-      return;
-
-   vec->sample_mask = sample_mask;
-
-   vec->dirty |= ILO_DIRTY_SAMPLE_MASK;
-}
-
-static void
-ilo_set_clip_state(struct pipe_context *pipe,
-                   const struct pipe_clip_state *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   vec->clip = *state;
-
-   vec->dirty |= ILO_DIRTY_CLIP;
-}
-
-static void
-ilo_set_constant_buffer(struct pipe_context *pipe,
-                        uint shader, uint index,
-                        const struct pipe_constant_buffer *buf)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   struct ilo_cbuf_state *cbuf = &vec->cbuf[shader];
-   const unsigned count = 1;
-   unsigned i;
-
-   assert(shader < ARRAY_SIZE(vec->cbuf));
-   assert(index + count <= ARRAY_SIZE(vec->cbuf[shader].cso));
-
-   if (buf) {
-      for (i = 0; i < count; i++) {
-         struct ilo_cbuf_cso *cso = &cbuf->cso[index + i];
-
-         pipe_resource_reference(&cso->resource, buf[i].buffer);
-
-         cso->info.access = ILO_STATE_SURFACE_ACCESS_DP_DATA;
-         cso->info.format = GEN6_FORMAT_R32G32B32A32_FLOAT;
-         cso->info.format_size = 16;
-         cso->info.struct_size = 16;
-         cso->info.readonly = true;
-         cso->info.size = buf[i].buffer_size;
-
-         if (buf[i].buffer) {
-            cso->info.vma = ilo_resource_get_vma(buf[i].buffer);
-            cso->info.offset = buf[i].buffer_offset;
-
-            memset(&cso->surface, 0, sizeof(cso->surface));
-            ilo_state_surface_init_for_buffer(&cso->surface, dev, &cso->info);
-
-            cso->user_buffer = NULL;
-
-            cbuf->enabled_mask |= 1 << (index + i);
-         } else if (buf[i].user_buffer) {
-            cso->info.vma = NULL;
-            /* buffer_offset does not apply for user buffer */
-            cso->user_buffer = buf[i].user_buffer;
-
-            cbuf->enabled_mask |= 1 << (index + i);
-         } else {
-            cso->info.vma = NULL;
-            cso->info.size = 0;
-            cso->user_buffer = NULL;
-
-            cbuf->enabled_mask &= ~(1 << (index + i));
-         }
-      }
-   } else {
-      for (i = 0; i < count; i++) {
-         struct ilo_cbuf_cso *cso = &cbuf->cso[index + i];
-
-         pipe_resource_reference(&cso->resource, NULL);
-
-         cso->info.vma = NULL;
-         cso->info.size = 0;
-         cso->user_buffer = NULL;
-
-         cbuf->enabled_mask &= ~(1 << (index + i));
-      }
-   }
-
-   vec->dirty |= ILO_DIRTY_CBUF;
-}
-
-static void
-fb_set_blend_caps(const struct ilo_dev *dev,
-                  enum pipe_format format,
-                  struct ilo_fb_blend_caps *caps)
-{
-   const struct util_format_description *desc =
-      util_format_description(format);
-   const int ch = util_format_get_first_non_void_channel(format);
-
-   memset(caps, 0, sizeof(*caps));
-
-   if (format == PIPE_FORMAT_NONE || desc->is_mixed)
-      return;
-
-   caps->is_unorm = (ch >= 0 && desc->channel[ch].normalized &&
-         desc->channel[ch].type == UTIL_FORMAT_TYPE_UNSIGNED &&
-         desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB);
-   caps->is_integer = util_format_is_pure_integer(format);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 365:
-    *
-    *     "Logic Ops are only supported on *_UNORM surfaces (excluding _SRGB
-    *      variants), otherwise Logic Ops must be DISABLED."
-    *
-    * According to the classic driver, this is lifted on Gen8+.
-    */
-   caps->can_logicop = (ilo_dev_gen(dev) >= ILO_GEN(8) || caps->is_unorm);
-
-   /* no blending for pure integer formats */
-   caps->can_blend = !caps->is_integer;
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 382:
-    *
-    *     "Alpha Test can only be enabled if Pixel Shader outputs a float
-    *      alpha value."
-    */
-   caps->can_alpha_test = !caps->is_integer;
-
-   caps->force_dst_alpha_one =
-      (ilo_format_translate_render(dev, format) !=
-       ilo_format_translate_color(dev, format));
-
-   /* sanity check */
-   if (caps->force_dst_alpha_one) {
-      enum pipe_format render_format;
-
-      switch (format) {
-      case PIPE_FORMAT_B8G8R8X8_UNORM:
-         render_format = PIPE_FORMAT_B8G8R8A8_UNORM;
-         break;
-      default:
-         render_format = PIPE_FORMAT_NONE;
-         break;
-      }
-
-      assert(ilo_format_translate_render(dev, format) ==
-             ilo_format_translate_color(dev, render_format));
-   }
-}
-
-static void
-ilo_set_framebuffer_state(struct pipe_context *pipe,
-                          const struct pipe_framebuffer_state *state)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   struct ilo_fb_state *fb = &vec->fb;
-   const struct pipe_surface *first_surf = NULL;
-   int i;
-
-   util_copy_framebuffer_state(&fb->state, state);
-
-   fb->has_integer_rt = false;
-   for (i = 0; i < state->nr_cbufs; i++) {
-      if (state->cbufs[i]) {
-         fb_set_blend_caps(dev, state->cbufs[i]->format, &fb->blend_caps[i]);
-
-         fb->has_integer_rt |= fb->blend_caps[i].is_integer;
-
-         if (!first_surf)
-            first_surf = state->cbufs[i];
-      } else {
-         fb_set_blend_caps(dev, PIPE_FORMAT_NONE, &fb->blend_caps[i]);
-      }
-   }
-
-   if (!first_surf && state->zsbuf)
-      first_surf = state->zsbuf;
-
-   fb->num_samples = (first_surf) ? first_surf->texture->nr_samples : 1;
-   if (!fb->num_samples)
-      fb->num_samples = 1;
-
-   if (state->zsbuf) {
-      const struct ilo_surface_cso *cso =
-         (const struct ilo_surface_cso *) state->zsbuf;
-      const struct ilo_texture *tex = ilo_texture(cso->base.texture);
-
-      fb->has_hiz = cso->u.zs.hiz_vma;
-      fb->depth_offset_format =
-         ilo_format_translate_depth(dev, tex->image_format);
-   } else {
-      fb->has_hiz = false;
-      fb->depth_offset_format = GEN6_ZFORMAT_D32_FLOAT;
-   }
-
-   /*
-    * The PRMs list several restrictions when the framebuffer has more than
-    * one surface.  It seems they are actually lifted on GEN6+.
-    */
-
-   vec->dirty |= ILO_DIRTY_FB;
-}
-
-static void
-ilo_set_polygon_stipple(struct pipe_context *pipe,
-                        const struct pipe_poly_stipple *state)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   struct ilo_state_poly_stipple_info info;
-   int i;
-
-   for (i = 0; i < 32; i++)
-      info.pattern[i] = state->stipple[i];
-
-   ilo_state_poly_stipple_set_info(&vec->poly_stipple, dev, &info);
-
-   vec->dirty |= ILO_DIRTY_POLY_STIPPLE;
-}
-
-static void
-ilo_set_scissor_states(struct pipe_context *pipe,
-                       unsigned start_slot,
-                       unsigned num_scissors,
-                       const struct pipe_scissor_state *scissors)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   unsigned i;
-
-   for (i = 0; i < num_scissors; i++) {
-      struct ilo_state_viewport_scissor_info *info =
-         &vec->viewport.scissors[start_slot + i];
-
-      if (scissors[i].minx < scissors[i].maxx &&
-          scissors[i].miny < scissors[i].maxy) {
-         info->min_x = scissors[i].minx;
-         info->min_y = scissors[i].miny;
-         info->max_x = scissors[i].maxx - 1;
-         info->max_y = scissors[i].maxy - 1;
-      } else {
-         info->min_x = 1;
-         info->min_y = 1;
-         info->max_x = 0;
-         info->max_y = 0;
-      }
-   }
-
-   vec->dirty |= ILO_DIRTY_SCISSOR;
-}
-
-static void
-ilo_set_viewport_states(struct pipe_context *pipe,
-                        unsigned start_slot,
-                        unsigned num_viewports,
-                        const struct pipe_viewport_state *viewports)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   if (viewports) {
-      unsigned i;
-
-      for (i = 0; i < num_viewports; i++) {
-         struct ilo_state_viewport_matrix_info *info =
-            &vec->viewport.matrices[start_slot + i];
-
-         memcpy(info->scale, viewports[i].scale, sizeof(info->scale));
-         memcpy(info->translate, viewports[i].translate,
-               sizeof(info->translate));
-      }
-
-      if (vec->viewport.params.count < start_slot + num_viewports)
-         vec->viewport.params.count = start_slot + num_viewports;
-
-      /* need to save viewport 0 for util_blitter */
-      if (!start_slot && num_viewports)
-         vec->viewport.viewport0 = viewports[0];
-   }
-   else {
-      if (vec->viewport.params.count <= start_slot + num_viewports &&
-          vec->viewport.params.count > start_slot)
-         vec->viewport.params.count = start_slot;
-   }
-
-   vec->dirty |= ILO_DIRTY_VIEWPORT;
-}
-
-static void
-ilo_set_sampler_views(struct pipe_context *pipe, enum pipe_shader_type shader,
-                      unsigned start, unsigned count,
-                      struct pipe_sampler_view **views)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   struct ilo_view_state *dst = &vec->view[shader];
-   unsigned i;
-
-   assert(start + count <= ARRAY_SIZE(dst->states));
-
-   if (views) {
-      for (i = 0; i < count; i++)
-         pipe_sampler_view_reference(&dst->states[start + i], views[i]);
-   }
-   else {
-      for (i = 0; i < count; i++)
-         pipe_sampler_view_reference(&dst->states[start + i], NULL);
-   }
-
-   if (dst->count <= start + count) {
-      if (views)
-         count += start;
-      else
-         count = start;
-
-      while (count > 0 && !dst->states[count - 1])
-         count--;
-
-      dst->count = count;
-   }
-
-   switch (shader) {
-   case PIPE_SHADER_VERTEX:
-      vec->dirty |= ILO_DIRTY_VIEW_VS;
-      break;
-   case PIPE_SHADER_GEOMETRY:
-      vec->dirty |= ILO_DIRTY_VIEW_GS;
-      break;
-   case PIPE_SHADER_FRAGMENT:
-      vec->dirty |= ILO_DIRTY_VIEW_FS;
-      break;
-   case PIPE_SHADER_COMPUTE:
-      vec->dirty |= ILO_DIRTY_VIEW_CS;
-      break;
-   default:
-      assert(!"unexpected shader type");
-      break;
-   }
-}
-
-static void
-ilo_set_shader_images(struct pipe_context *pipe, enum pipe_shader_type shader,
-                      unsigned start, unsigned count,
-                      const struct pipe_image_view *views)
-{
-#if 0
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   struct ilo_resource_state *dst = &vec->resource;
-   unsigned i;
-
-   assert(start + count <= ARRAY_SIZE(dst->states));
-
-   if (surfaces) {
-      for (i = 0; i < count; i++)
-         pipe_surface_reference(&dst->states[start + i], surfaces[i]);
-   }
-   else {
-      for (i = 0; i < count; i++)
-         pipe_surface_reference(&dst->states[start + i], NULL);
-   }
-
-   if (dst->count <= start + count) {
-      if (surfaces)
-         count += start;
-      else
-         count = start;
-
-      while (count > 0 && !dst->states[count - 1])
-         count--;
-
-      dst->count = count;
-   }
-
-   vec->dirty |= ILO_DIRTY_RESOURCE;
-#endif
-}
-
-static void
-ilo_set_vertex_buffers(struct pipe_context *pipe,
-                       unsigned start_slot, unsigned num_buffers,
-                       const struct pipe_vertex_buffer *buffers)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   unsigned i;
-
-   /* no PIPE_CAP_USER_VERTEX_BUFFERS */
-   if (buffers) {
-      for (i = 0; i < num_buffers; i++)
-         assert(!buffers[i].user_buffer);
-   }
-
-   util_set_vertex_buffers_mask(vec->vb.states,
-         &vec->vb.enabled_mask, buffers, start_slot, num_buffers);
-
-   vec->dirty |= ILO_DIRTY_VB;
-}
-
-static void
-ilo_set_index_buffer(struct pipe_context *pipe,
-                     const struct pipe_index_buffer *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   if (state) {
-      pipe_resource_reference(&vec->ib.state.buffer, state->buffer);
-      vec->ib.state = *state;
-   } else {
-      pipe_resource_reference(&vec->ib.state.buffer, NULL);
-      memset(&vec->ib.state, 0, sizeof(vec->ib.state));
-   }
-
-   vec->dirty |= ILO_DIRTY_IB;
-}
-
-static struct pipe_stream_output_target *
-ilo_create_stream_output_target(struct pipe_context *pipe,
-                                struct pipe_resource *res,
-                                unsigned buffer_offset,
-                                unsigned buffer_size)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_stream_output_target *target;
-   struct ilo_state_sol_buffer_info info;
-
-   target = CALLOC_STRUCT(ilo_stream_output_target);
-   assert(target);
-
-   pipe_reference_init(&target->base.reference, 1);
-   pipe_resource_reference(&target->base.buffer, res);
-   target->base.context = pipe;
-   target->base.buffer_offset = buffer_offset;
-   target->base.buffer_size = buffer_size;
-
-   memset(&info, 0, sizeof(info));
-   info.vma = ilo_resource_get_vma(res);
-   info.offset = buffer_offset;
-   info.size = buffer_size;
-
-   ilo_state_sol_buffer_init(&target->sb, dev, &info);
-
-   return &target->base;
-}
-
-static void
-ilo_set_stream_output_targets(struct pipe_context *pipe,
-                              unsigned num_targets,
-                              struct pipe_stream_output_target **targets,
-                              const unsigned *offset)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   unsigned i;
-   unsigned append_bitmask = 0;
-
-   if (!targets)
-      num_targets = 0;
-
-   /* util_blitter may set this unnecessarily */
-   if (!vec->so.count && !num_targets)
-      return;
-
-   for (i = 0; i < num_targets; i++) {
-      pipe_so_target_reference(&vec->so.states[i], targets[i]);
-      if (offset[i] == (unsigned)-1)
-         append_bitmask |= 1 << i;
-   }
-
-   for (; i < vec->so.count; i++)
-      pipe_so_target_reference(&vec->so.states[i], NULL);
-
-   vec->so.count = num_targets;
-   vec->so.append_bitmask = append_bitmask;
-
-   vec->so.enabled = (vec->so.count > 0);
-
-   vec->dirty |= ILO_DIRTY_SO;
-}
-
-static void
-ilo_stream_output_target_destroy(struct pipe_context *pipe,
-                                 struct pipe_stream_output_target *target)
-{
-   pipe_resource_reference(&target->buffer, NULL);
-   FREE(target);
-}
-
-static struct pipe_sampler_view *
-ilo_create_sampler_view(struct pipe_context *pipe,
-                        struct pipe_resource *res,
-                        const struct pipe_sampler_view *templ)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_view_cso *view;
-
-   view = CALLOC_STRUCT(ilo_view_cso);
-   assert(view);
-
-   view->base = *templ;
-   pipe_reference_init(&view->base.reference, 1);
-   view->base.texture = NULL;
-   pipe_resource_reference(&view->base.texture, res);
-   view->base.context = pipe;
-
-   if (res->target == PIPE_BUFFER) {
-      struct ilo_state_surface_buffer_info info;
-
-      memset(&info, 0, sizeof(info));
-      info.vma = ilo_resource_get_vma(res);
-      info.offset = templ->u.buf.offset;
-      info.size = templ->u.buf.size;
-      info.access = ILO_STATE_SURFACE_ACCESS_SAMPLER;
-      info.format = ilo_format_translate_color(dev, templ->format);
-      info.format_size = util_format_get_blocksize(templ->format);
-      info.struct_size = info.format_size;
-      info.readonly = true;
-
-      ilo_state_surface_init_for_buffer(&view->surface, dev, &info);
-   } else {
-      struct ilo_texture *tex = ilo_texture(res);
-      struct ilo_state_surface_image_info info;
-
-      /* warn about degraded performance because of a missing binding flag */
-      if (tex->image.tiling == GEN6_TILING_NONE &&
-          !(tex->base.bind & PIPE_BIND_SAMPLER_VIEW)) {
-         ilo_warn("creating sampler view for a resource "
-                  "not created for sampling\n");
-      }
-
-      memset(&info, 0, sizeof(info));
-
-      info.img = &tex->image;
-      info.level_base = templ->u.tex.first_level;
-      info.level_count = templ->u.tex.last_level -
-         templ->u.tex.first_level + 1;
-      info.slice_base = templ->u.tex.first_layer;
-      info.slice_count = templ->u.tex.last_layer -
-         templ->u.tex.first_layer + 1;
-
-      info.vma = &tex->vma;
-      info.access = ILO_STATE_SURFACE_ACCESS_SAMPLER;
-      info.type = tex->image.type;
-
-      if (templ->format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT &&
-          tex->separate_s8) {
-         info.format = ilo_format_translate_texture(dev,
-               PIPE_FORMAT_Z32_FLOAT);
-      } else {
-         info.format = ilo_format_translate_texture(dev, templ->format);
-      }
-
-      info.is_array = util_resource_is_array_texture(&tex->base);
-      info.readonly = true;
-
-      ilo_state_surface_init_for_image(&view->surface, dev, &info);
-   }
-
-   return &view->base;
-}
-
-static void
-ilo_sampler_view_destroy(struct pipe_context *pipe,
-                         struct pipe_sampler_view *view)
-{
-   pipe_resource_reference(&view->texture, NULL);
-   FREE(view);
-}
-
-static struct pipe_surface *
-ilo_create_surface(struct pipe_context *pipe,
-                   struct pipe_resource *res,
-                   const struct pipe_surface *templ)
-{
-   const struct ilo_dev *dev = ilo_context(pipe)->dev;
-   struct ilo_texture *tex = ilo_texture(res);
-   struct ilo_surface_cso *surf;
-
-   surf = CALLOC_STRUCT(ilo_surface_cso);
-   assert(surf);
-
-   surf->base = *templ;
-   pipe_reference_init(&surf->base.reference, 1);
-   surf->base.texture = NULL;
-   pipe_resource_reference(&surf->base.texture, &tex->base);
-
-   surf->base.context = pipe;
-   surf->base.width = u_minify(tex->base.width0, templ->u.tex.level);
-   surf->base.height = u_minify(tex->base.height0, templ->u.tex.level);
-
-   surf->is_rt = !util_format_is_depth_or_stencil(templ->format);
-
-   if (surf->is_rt) {
-      struct ilo_state_surface_image_info info;
-
-      /* relax this? */
-      assert(tex->base.target != PIPE_BUFFER);
-
-      memset(&info, 0, sizeof(info));
-
-      info.img = &tex->image;
-      info.level_base = templ->u.tex.level;
-      info.level_count = 1;
-      info.slice_base = templ->u.tex.first_layer;
-      info.slice_count = templ->u.tex.last_layer -
-         templ->u.tex.first_layer + 1;
-
-      info.vma = &tex->vma;
-      if (ilo_image_can_enable_aux(&tex->image, templ->u.tex.level))
-         info.aux_vma = &tex->aux_vma;
-
-      info.access = ILO_STATE_SURFACE_ACCESS_DP_RENDER;
-
-      info.type = (tex->image.type == GEN6_SURFTYPE_CUBE) ?
-         GEN6_SURFTYPE_2D : tex->image.type;
-
-      info.format = ilo_format_translate_render(dev, templ->format);
-      info.is_array = util_resource_is_array_texture(&tex->base);
-
-      ilo_state_surface_init_for_image(&surf->u.rt, dev, &info);
-   } else {
-      struct ilo_state_zs_info info;
-
-      assert(res->target != PIPE_BUFFER);
-
-      memset(&info, 0, sizeof(info));
-
-      if (templ->format == PIPE_FORMAT_S8_UINT) {
-         info.s_vma = &tex->vma;
-         info.s_img = &tex->image;
-      } else {
-         info.z_vma = &tex->vma;
-         info.z_img = &tex->image;
-
-         if (tex->separate_s8) {
-            info.s_vma = &tex->separate_s8->vma;
-            info.s_img = &tex->separate_s8->image;
-         }
-
-         if (ilo_image_can_enable_aux(&tex->image, templ->u.tex.level))
-            info.hiz_vma = &tex->aux_vma;
-      }
-
-      info.level = templ->u.tex.level;
-      info.slice_base = templ->u.tex.first_layer;
-      info.slice_count = templ->u.tex.last_layer -
-         templ->u.tex.first_layer + 1;
-
-      info.type = (tex->image.type == GEN6_SURFTYPE_CUBE) ?
-         GEN6_SURFTYPE_2D : tex->image.type;
-
-      info.format = ilo_format_translate_depth(dev, tex->image_format);
-      if (ilo_dev_gen(dev) == ILO_GEN(6) && !info.hiz_vma &&
-          tex->image_format == PIPE_FORMAT_Z24X8_UNORM)
-         info.format = GEN6_ZFORMAT_D24_UNORM_S8_UINT;
-
-      ilo_state_zs_init(&surf->u.zs, dev, &info);
-   }
-
-   return &surf->base;
-}
-
-static void
-ilo_surface_destroy(struct pipe_context *pipe,
-                    struct pipe_surface *surface)
-{
-   pipe_resource_reference(&surface->texture, NULL);
-   FREE(surface);
-}
-
-static void *
-ilo_create_compute_state(struct pipe_context *pipe,
-                         const struct pipe_compute_state *state)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_shader_state *shader;
-
-   shader = ilo_shader_create_cs(ilo->dev, state, &ilo->state_vector);
-   assert(shader);
-
-   ilo_shader_cache_add(ilo->shader_cache, shader);
-
-   return shader;
-}
-
-static void
-ilo_bind_compute_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-
-   vec->cs = state;
-
-   vec->dirty |= ILO_DIRTY_CS;
-}
-
-static void
-ilo_delete_compute_state(struct pipe_context *pipe, void *state)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_shader_state *cs = (struct ilo_shader_state *) state;
-
-   ilo_shader_cache_remove(ilo->shader_cache, cs);
-   ilo_shader_destroy(cs);
-}
-
-static void
-ilo_set_compute_resources(struct pipe_context *pipe,
-                          unsigned start, unsigned count,
-                          struct pipe_surface **surfaces)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   struct ilo_resource_state *dst = &vec->cs_resource;
-   unsigned i;
-
-   assert(start + count <= ARRAY_SIZE(dst->states));
-
-   if (surfaces) {
-      for (i = 0; i < count; i++)
-         pipe_surface_reference(&dst->states[start + i], surfaces[i]);
-   }
-   else {
-      for (i = 0; i < count; i++)
-         pipe_surface_reference(&dst->states[start + i], NULL);
-   }
-
-   if (dst->count <= start + count) {
-      if (surfaces)
-         count += start;
-      else
-         count = start;
-
-      while (count > 0 && !dst->states[count - 1])
-         count--;
-
-      dst->count = count;
-   }
-
-   vec->dirty |= ILO_DIRTY_CS_RESOURCE;
-}
-
-static void
-ilo_set_global_binding(struct pipe_context *pipe,
-                       unsigned start, unsigned count,
-                       struct pipe_resource **resources,
-                       uint32_t **handles)
-{
-   struct ilo_state_vector *vec = &ilo_context(pipe)->state_vector;
-   struct ilo_global_binding_cso *dst;
-   unsigned i;
-
-   /* make room */
-   if (vec->global_binding.count < start + count) {
-      if (resources) {
-         const unsigned old_size = vec->global_binding.bindings.size;
-         const unsigned new_size = sizeof(*dst) * (start + count);
-
-         if (old_size < new_size) {
-            util_dynarray_resize(&vec->global_binding.bindings, new_size);
-            memset(vec->global_binding.bindings.data + old_size, 0,
-                  new_size - old_size);
-         }
-      } else {
-         count = vec->global_binding.count - start;
-      }
-   }
-
-   dst = util_dynarray_element(&vec->global_binding.bindings,
-         struct ilo_global_binding_cso, start);
-
-   if (resources) {
-      for (i = 0; i < count; i++) {
-         pipe_resource_reference(&dst[i].resource, resources[i]);
-         dst[i].handle = handles[i];
-      }
-   } else {
-      for (i = 0; i < count; i++) {
-         pipe_resource_reference(&dst[i].resource, NULL);
-         dst[i].handle = NULL;
-      }
-   }
-
-   if (vec->global_binding.count <= start + count) {
-      dst = util_dynarray_begin(&vec->global_binding.bindings);
-
-      if (resources)
-         count += start;
-      else
-         count = start;
-
-      while (count > 0 && !dst[count - 1].resource)
-         count--;
-
-      vec->global_binding.count = count;
-   }
-
-   vec->dirty |= ILO_DIRTY_GLOBAL_BINDING;
-}
-
-/**
- * Initialize state-related functions.
- */
-void
-ilo_init_state_functions(struct ilo_context *ilo)
-{
-   STATIC_ASSERT(ILO_STATE_COUNT <= 32);
-
-   ilo->base.create_blend_state = ilo_create_blend_state;
-   ilo->base.bind_blend_state = ilo_bind_blend_state;
-   ilo->base.delete_blend_state = ilo_delete_blend_state;
-   ilo->base.create_sampler_state = ilo_create_sampler_state;
-   ilo->base.bind_sampler_states = ilo_bind_sampler_states;
-   ilo->base.delete_sampler_state = ilo_delete_sampler_state;
-   ilo->base.create_rasterizer_state = ilo_create_rasterizer_state;
-   ilo->base.bind_rasterizer_state = ilo_bind_rasterizer_state;
-   ilo->base.delete_rasterizer_state = ilo_delete_rasterizer_state;
-   ilo->base.create_depth_stencil_alpha_state = ilo_create_depth_stencil_alpha_state;
-   ilo->base.bind_depth_stencil_alpha_state = ilo_bind_depth_stencil_alpha_state;
-   ilo->base.delete_depth_stencil_alpha_state = ilo_delete_depth_stencil_alpha_state;
-   ilo->base.create_fs_state = ilo_create_fs_state;
-   ilo->base.bind_fs_state = ilo_bind_fs_state;
-   ilo->base.delete_fs_state = ilo_delete_fs_state;
-   ilo->base.create_vs_state = ilo_create_vs_state;
-   ilo->base.bind_vs_state = ilo_bind_vs_state;
-   ilo->base.delete_vs_state = ilo_delete_vs_state;
-   ilo->base.create_gs_state = ilo_create_gs_state;
-   ilo->base.bind_gs_state = ilo_bind_gs_state;
-   ilo->base.delete_gs_state = ilo_delete_gs_state;
-   ilo->base.create_vertex_elements_state = ilo_create_vertex_elements_state;
-   ilo->base.bind_vertex_elements_state = ilo_bind_vertex_elements_state;
-   ilo->base.delete_vertex_elements_state = ilo_delete_vertex_elements_state;
-
-   ilo->base.set_blend_color = ilo_set_blend_color;
-   ilo->base.set_stencil_ref = ilo_set_stencil_ref;
-   ilo->base.set_sample_mask = ilo_set_sample_mask;
-   ilo->base.set_clip_state = ilo_set_clip_state;
-   ilo->base.set_constant_buffer = ilo_set_constant_buffer;
-   ilo->base.set_framebuffer_state = ilo_set_framebuffer_state;
-   ilo->base.set_polygon_stipple = ilo_set_polygon_stipple;
-   ilo->base.set_scissor_states = ilo_set_scissor_states;
-   ilo->base.set_viewport_states = ilo_set_viewport_states;
-   ilo->base.set_sampler_views = ilo_set_sampler_views;
-   ilo->base.set_shader_images = ilo_set_shader_images;
-   ilo->base.set_vertex_buffers = ilo_set_vertex_buffers;
-   ilo->base.set_index_buffer = ilo_set_index_buffer;
-
-   ilo->base.create_stream_output_target = ilo_create_stream_output_target;
-   ilo->base.stream_output_target_destroy = ilo_stream_output_target_destroy;
-   ilo->base.set_stream_output_targets = ilo_set_stream_output_targets;
-
-   ilo->base.create_sampler_view = ilo_create_sampler_view;
-   ilo->base.sampler_view_destroy = ilo_sampler_view_destroy;
-
-   ilo->base.create_surface = ilo_create_surface;
-   ilo->base.surface_destroy = ilo_surface_destroy;
-
-   ilo->base.create_compute_state = ilo_create_compute_state;
-   ilo->base.bind_compute_state = ilo_bind_compute_state;
-   ilo->base.delete_compute_state = ilo_delete_compute_state;
-   ilo->base.set_compute_resources = ilo_set_compute_resources;
-   ilo->base.set_global_binding = ilo_set_global_binding;
-}
-
-void
-ilo_state_vector_init(const struct ilo_dev *dev,
-                      struct ilo_state_vector *vec)
-{
-   struct ilo_state_urb_info urb_info;
-
-   vec->sample_mask = ~0u;
-
-   ilo_state_viewport_init_data_only(&vec->viewport.vp, dev,
-         vec->viewport.vp_data, sizeof(vec->viewport.vp_data));
-   assert(vec->viewport.vp.array_size >= ILO_MAX_VIEWPORTS);
-
-   vec->viewport.params.matrices = vec->viewport.matrices;
-   vec->viewport.params.scissors = vec->viewport.scissors;
-
-   ilo_state_hs_init_disabled(&vec->disabled_hs, dev);
-   ilo_state_ds_init_disabled(&vec->disabled_ds, dev);
-   ilo_state_gs_init_disabled(&vec->disabled_gs, dev);
-
-   ilo_state_sol_buffer_init_disabled(&vec->so.dummy_sb, dev);
-
-   ilo_state_surface_init_for_null(&vec->fb.null_rt, dev);
-   ilo_state_zs_init_for_null(&vec->fb.null_zs, dev);
-
-   ilo_state_sampler_init_disabled(&vec->disabled_sampler, dev);
-
-   memset(&urb_info, 0, sizeof(urb_info));
-   ilo_state_urb_init(&vec->urb, dev, &urb_info);
-
-   util_dynarray_init(&vec->global_binding.bindings);
-
-   vec->dirty = ILO_DIRTY_ALL;
-}
-
-void
-ilo_state_vector_cleanup(struct ilo_state_vector *vec)
-{
-   unsigned i, sh;
-
-   for (i = 0; i < ARRAY_SIZE(vec->vb.states); i++) {
-      if (vec->vb.enabled_mask & (1 << i))
-         pipe_resource_reference(&vec->vb.states[i].buffer, NULL);
-   }
-
-   pipe_resource_reference(&vec->ib.state.buffer, NULL);
-   pipe_resource_reference(&vec->ib.hw_resource, NULL);
-
-   for (i = 0; i < vec->so.count; i++)
-      pipe_so_target_reference(&vec->so.states[i], NULL);
-
-   for (sh = 0; sh < PIPE_SHADER_TYPES; sh++) {
-      for (i = 0; i < vec->view[sh].count; i++) {
-         struct pipe_sampler_view *view = vec->view[sh].states[i];
-         pipe_sampler_view_reference(&view, NULL);
-      }
-
-      for (i = 0; i < ARRAY_SIZE(vec->cbuf[sh].cso); i++) {
-         struct ilo_cbuf_cso *cbuf = &vec->cbuf[sh].cso[i];
-         pipe_resource_reference(&cbuf->resource, NULL);
-      }
-   }
-
-   for (i = 0; i < vec->resource.count; i++)
-      pipe_surface_reference(&vec->resource.states[i], NULL);
-
-   for (i = 0; i < vec->fb.state.nr_cbufs; i++)
-      pipe_surface_reference(&vec->fb.state.cbufs[i], NULL);
-
-   if (vec->fb.state.zsbuf)
-      pipe_surface_reference(&vec->fb.state.zsbuf, NULL);
-
-   for (i = 0; i < vec->cs_resource.count; i++)
-      pipe_surface_reference(&vec->cs_resource.states[i], NULL);
-
-   for (i = 0; i < vec->global_binding.count; i++) {
-      struct ilo_global_binding_cso *cso =
-         util_dynarray_element(&vec->global_binding.bindings,
-               struct ilo_global_binding_cso, i);
-      pipe_resource_reference(&cso->resource, NULL);
-   }
-
-   util_dynarray_fini(&vec->global_binding.bindings);
-}
-
-/**
- * Mark all states that have the resource dirty.
- */
-void
-ilo_state_vector_resource_renamed(struct ilo_state_vector *vec,
-                                  struct pipe_resource *res)
-{
-   uint32_t states = 0;
-   unsigned sh, i;
-
-   if (res->target == PIPE_BUFFER) {
-      uint32_t vb_mask = vec->vb.enabled_mask;
-
-      while (vb_mask) {
-         const unsigned idx = u_bit_scan(&vb_mask);
-
-         if (vec->vb.states[idx].buffer == res) {
-            states |= ILO_DIRTY_VB;
-            break;
-         }
-      }
-
-      if (vec->ib.state.buffer == res) {
-         states |= ILO_DIRTY_IB;
-
-         /*
-          * finalize_index_buffer() has an optimization that clears
-          * ILO_DIRTY_IB when the HW states do not change.  However, it fails
-          * to flush the VF cache when the HW states do not change, but the
-          * contents of the IB has changed.  Here, we set the index size to an
-          * invalid value to avoid the optimization.
-          */
-         vec->ib.hw_index_size = 0;
-      }
-
-      for (i = 0; i < vec->so.count; i++) {
-         if (vec->so.states[i]->buffer == res) {
-            states |= ILO_DIRTY_SO;
-            break;
-         }
-      }
-   }
-
-   for (sh = 0; sh < PIPE_SHADER_TYPES; sh++) {
-      for (i = 0; i < vec->view[sh].count; i++) {
-         struct ilo_view_cso *cso = (struct ilo_view_cso *) vec->view[sh].states[i];
-
-         if (cso->base.texture == res) {
-            static const unsigned view_dirty_bits[PIPE_SHADER_TYPES] = {
-               [PIPE_SHADER_VERTEX]    = ILO_DIRTY_VIEW_VS,
-               [PIPE_SHADER_FRAGMENT]  = ILO_DIRTY_VIEW_FS,
-               [PIPE_SHADER_GEOMETRY]  = ILO_DIRTY_VIEW_GS,
-               [PIPE_SHADER_COMPUTE]   = ILO_DIRTY_VIEW_CS,
-            };
-
-            states |= view_dirty_bits[sh];
-            break;
-         }
-      }
-
-      if (res->target == PIPE_BUFFER) {
-         for (i = 0; i < ARRAY_SIZE(vec->cbuf[sh].cso); i++) {
-            struct ilo_cbuf_cso *cbuf = &vec->cbuf[sh].cso[i];
-
-            if (cbuf->resource == res) {
-               states |= ILO_DIRTY_CBUF;
-               break;
-            }
-         }
-      }
-   }
-
-   for (i = 0; i < vec->resource.count; i++) {
-      struct ilo_surface_cso *cso =
-         (struct ilo_surface_cso *) vec->resource.states[i];
-
-      if (cso->base.texture == res) {
-         states |= ILO_DIRTY_RESOURCE;
-         break;
-      }
-   }
-
-   /* for now? */
-   if (res->target != PIPE_BUFFER) {
-      for (i = 0; i < vec->fb.state.nr_cbufs; i++) {
-         struct ilo_surface_cso *cso =
-            (struct ilo_surface_cso *) vec->fb.state.cbufs[i];
-         if (cso && cso->base.texture == res) {
-            states |= ILO_DIRTY_FB;
-            break;
-         }
-      }
-
-      if (vec->fb.state.zsbuf && vec->fb.state.zsbuf->texture == res)
-         states |= ILO_DIRTY_FB;
-   }
-
-   for (i = 0; i < vec->cs_resource.count; i++) {
-      struct ilo_surface_cso *cso =
-         (struct ilo_surface_cso *) vec->cs_resource.states[i];
-      if (cso->base.texture == res) {
-         states |= ILO_DIRTY_CS_RESOURCE;
-         break;
-      }
-   }
-
-   for (i = 0; i < vec->global_binding.count; i++) {
-      struct ilo_global_binding_cso *cso =
-         util_dynarray_element(&vec->global_binding.bindings,
-               struct ilo_global_binding_cso, i);
-
-      if (cso->resource == res) {
-         states |= ILO_DIRTY_GLOBAL_BINDING;
-         break;
-      }
-   }
-
-   vec->dirty |= states;
-}
-
-void
-ilo_state_vector_dump_dirty(const struct ilo_state_vector *vec)
-{
-   static const char *state_names[ILO_STATE_COUNT] = {
-      [ILO_STATE_VB]              = "VB",
-      [ILO_STATE_VE]              = "VE",
-      [ILO_STATE_IB]              = "IB",
-      [ILO_STATE_VS]              = "VS",
-      [ILO_STATE_GS]              = "GS",
-      [ILO_STATE_SO]              = "SO",
-      [ILO_STATE_CLIP]            = "CLIP",
-      [ILO_STATE_VIEWPORT]        = "VIEWPORT",
-      [ILO_STATE_SCISSOR]         = "SCISSOR",
-      [ILO_STATE_RASTERIZER]      = "RASTERIZER",
-      [ILO_STATE_POLY_STIPPLE]    = "POLY_STIPPLE",
-      [ILO_STATE_SAMPLE_MASK]     = "SAMPLE_MASK",
-      [ILO_STATE_FS]              = "FS",
-      [ILO_STATE_DSA]             = "DSA",
-      [ILO_STATE_STENCIL_REF]     = "STENCIL_REF",
-      [ILO_STATE_BLEND]           = "BLEND",
-      [ILO_STATE_BLEND_COLOR]     = "BLEND_COLOR",
-      [ILO_STATE_FB]              = "FB",
-      [ILO_STATE_SAMPLER_VS]      = "SAMPLER_VS",
-      [ILO_STATE_SAMPLER_GS]      = "SAMPLER_GS",
-      [ILO_STATE_SAMPLER_FS]      = "SAMPLER_FS",
-      [ILO_STATE_SAMPLER_CS]      = "SAMPLER_CS",
-      [ILO_STATE_VIEW_VS]         = "VIEW_VS",
-      [ILO_STATE_VIEW_GS]         = "VIEW_GS",
-      [ILO_STATE_VIEW_FS]         = "VIEW_FS",
-      [ILO_STATE_VIEW_CS]         = "VIEW_CS",
-      [ILO_STATE_CBUF]            = "CBUF",
-      [ILO_STATE_RESOURCE]        = "RESOURCE",
-      [ILO_STATE_CS]              = "CS",
-      [ILO_STATE_CS_RESOURCE]     = "CS_RESOURCE",
-      [ILO_STATE_GLOBAL_BINDING]  = "GLOBAL_BINDING",
-   };
-   uint32_t dirty = vec->dirty;
-
-   if (!dirty) {
-      ilo_printf("no state is dirty\n");
-      return;
-   }
-
-   dirty &= (1U << ILO_STATE_COUNT) - 1;
-
-   ilo_printf("%2d states are dirty:", util_bitcount(dirty));
-   while (dirty) {
-      const enum ilo_state state = u_bit_scan(&dirty);
-      ilo_printf(" %s", state_names[state]);
-   }
-   ilo_printf("\n");
-}
diff --git a/src/gallium/drivers/ilo/ilo_state.h b/src/gallium/drivers/ilo/ilo_state.h
deleted file mode 100644 (file)
index 66c9300..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_STATE_H
-#define ILO_STATE_H
-
-#include "core/ilo_builder_3d.h" /* for gen6_3dprimitive_info */
-#include "core/ilo_state_cc.h"
-#include "core/ilo_state_compute.h"
-#include "core/ilo_state_raster.h"
-#include "core/ilo_state_sampler.h"
-#include "core/ilo_state_sbe.h"
-#include "core/ilo_state_shader.h"
-#include "core/ilo_state_sol.h"
-#include "core/ilo_state_surface.h"
-#include "core/ilo_state_urb.h"
-#include "core/ilo_state_vf.h"
-#include "core/ilo_state_viewport.h"
-#include "core/ilo_state_zs.h"
-#include "pipe/p_state.h"
-#include "util/u_dynarray.h"
-
-#include "ilo_common.h"
-
-/**
- * \see brw_context.h
- */
-#define ILO_MAX_DRAW_BUFFERS    8
-#define ILO_MAX_CONST_BUFFERS   (1 + 12)
-#define ILO_MAX_SAMPLER_VIEWS   16
-#define ILO_MAX_SAMPLERS        16
-#define ILO_MAX_SO_BINDINGS     64
-#define ILO_MAX_SO_BUFFERS      4
-#define ILO_MAX_VIEWPORTS       1
-
-#define ILO_MAX_SURFACES        256
-
-/**
- * States that we track.
- *
- * XXX Do we want to count each sampler or vertex buffer as a state?  If that
- * is the case, there are simply not enough bits.
- *
- * XXX We want to treat primitive type and depth clear value as states, but
- * there are not enough bits.
- */
-enum ilo_state {
-   ILO_STATE_VB,
-   ILO_STATE_VE,
-   ILO_STATE_IB,
-   ILO_STATE_VS,
-   ILO_STATE_GS,
-   ILO_STATE_SO,
-   ILO_STATE_CLIP,
-   ILO_STATE_VIEWPORT,
-   ILO_STATE_SCISSOR,
-   ILO_STATE_RASTERIZER,
-   ILO_STATE_POLY_STIPPLE,
-   ILO_STATE_SAMPLE_MASK,
-   ILO_STATE_FS,
-   ILO_STATE_DSA,
-   ILO_STATE_STENCIL_REF,
-   ILO_STATE_BLEND,
-   ILO_STATE_BLEND_COLOR,
-   ILO_STATE_FB,
-
-   ILO_STATE_SAMPLER_VS,
-   ILO_STATE_SAMPLER_GS,
-   ILO_STATE_SAMPLER_FS,
-   ILO_STATE_SAMPLER_CS,
-   ILO_STATE_VIEW_VS,
-   ILO_STATE_VIEW_GS,
-   ILO_STATE_VIEW_FS,
-   ILO_STATE_VIEW_CS,
-   ILO_STATE_CBUF,
-   ILO_STATE_RESOURCE,
-
-   ILO_STATE_CS,
-   ILO_STATE_CS_RESOURCE,
-   ILO_STATE_GLOBAL_BINDING,
-
-   ILO_STATE_COUNT,
-};
-
-/**
- * Dirty flags of the states.
- */
-enum ilo_dirty_flags {
-   ILO_DIRTY_VB               = 1 << ILO_STATE_VB,
-   ILO_DIRTY_VE               = 1 << ILO_STATE_VE,
-   ILO_DIRTY_IB               = 1 << ILO_STATE_IB,
-   ILO_DIRTY_VS               = 1 << ILO_STATE_VS,
-   ILO_DIRTY_GS               = 1 << ILO_STATE_GS,
-   ILO_DIRTY_SO               = 1 << ILO_STATE_SO,
-   ILO_DIRTY_CLIP             = 1 << ILO_STATE_CLIP,
-   ILO_DIRTY_VIEWPORT         = 1 << ILO_STATE_VIEWPORT,
-   ILO_DIRTY_SCISSOR          = 1 << ILO_STATE_SCISSOR,
-   ILO_DIRTY_RASTERIZER       = 1 << ILO_STATE_RASTERIZER,
-   ILO_DIRTY_POLY_STIPPLE     = 1 << ILO_STATE_POLY_STIPPLE,
-   ILO_DIRTY_SAMPLE_MASK      = 1 << ILO_STATE_SAMPLE_MASK,
-   ILO_DIRTY_FS               = 1 << ILO_STATE_FS,
-   ILO_DIRTY_DSA              = 1 << ILO_STATE_DSA,
-   ILO_DIRTY_STENCIL_REF      = 1 << ILO_STATE_STENCIL_REF,
-   ILO_DIRTY_BLEND            = 1 << ILO_STATE_BLEND,
-   ILO_DIRTY_BLEND_COLOR      = 1 << ILO_STATE_BLEND_COLOR,
-   ILO_DIRTY_FB               = 1 << ILO_STATE_FB,
-   ILO_DIRTY_SAMPLER_VS       = 1 << ILO_STATE_SAMPLER_VS,
-   ILO_DIRTY_SAMPLER_GS       = 1 << ILO_STATE_SAMPLER_GS,
-   ILO_DIRTY_SAMPLER_FS       = 1 << ILO_STATE_SAMPLER_FS,
-   ILO_DIRTY_SAMPLER_CS       = 1 << ILO_STATE_SAMPLER_CS,
-   ILO_DIRTY_VIEW_VS          = 1 << ILO_STATE_VIEW_VS,
-   ILO_DIRTY_VIEW_GS          = 1 << ILO_STATE_VIEW_GS,
-   ILO_DIRTY_VIEW_FS          = 1 << ILO_STATE_VIEW_FS,
-   ILO_DIRTY_VIEW_CS          = 1 << ILO_STATE_VIEW_CS,
-   ILO_DIRTY_CBUF             = 1 << ILO_STATE_CBUF,
-   ILO_DIRTY_RESOURCE         = 1 << ILO_STATE_RESOURCE,
-   ILO_DIRTY_CS               = 1 << ILO_STATE_CS,
-   ILO_DIRTY_CS_RESOURCE      = 1 << ILO_STATE_CS_RESOURCE,
-   ILO_DIRTY_GLOBAL_BINDING   = 1 << ILO_STATE_GLOBAL_BINDING,
-   ILO_DIRTY_ALL              = 0xffffffff,
-};
-
-struct ilo_context;
-struct ilo_shader_state;
-
-struct ilo_ve_state {
-   unsigned vb_mapping[PIPE_MAX_ATTRIBS];
-   unsigned vb_count;
-
-   /* these are not valid until the state is finalized */
-   uint32_t vf_data[PIPE_MAX_ATTRIBS][4];
-   struct ilo_state_vf_params_info vf_params;
-   struct ilo_state_vf vf;
-};
-
-struct ilo_vb_state {
-   struct pipe_vertex_buffer states[PIPE_MAX_ATTRIBS];
-   struct ilo_state_vertex_buffer vb[PIPE_MAX_ATTRIBS];
-   uint32_t enabled_mask;
-};
-
-struct ilo_ib_state {
-   struct pipe_index_buffer state;
-
-   /* these are not valid until the state is finalized */
-   struct pipe_resource *hw_resource;
-   unsigned hw_index_size;
-   struct ilo_state_index_buffer ib;
-};
-
-struct ilo_cbuf_cso {
-   struct pipe_resource *resource;
-   struct ilo_state_surface_buffer_info info;
-   struct ilo_state_surface surface;
-
-   /*
-    * this CSO is not so constant because user buffer needs to be uploaded in
-    * finalize_constant_buffers()
-    */
-   const void *user_buffer;
-};
-
-struct ilo_sampler_cso {
-   struct ilo_state_sampler sampler;
-   struct ilo_state_sampler_border border;
-   bool saturate_s;
-   bool saturate_t;
-   bool saturate_r;
-};
-
-struct ilo_sampler_state {
-   const struct ilo_sampler_cso *cso[ILO_MAX_SAMPLERS];
-};
-
-struct ilo_cbuf_state {
-   struct ilo_cbuf_cso cso[ILO_MAX_CONST_BUFFERS];
-   uint32_t enabled_mask;
-};
-
-struct ilo_resource_state {
-   struct pipe_surface *states[PIPE_MAX_SHADER_IMAGES];
-   unsigned count;
-};
-
-struct ilo_view_cso {
-   struct pipe_sampler_view base;
-
-   struct ilo_state_surface surface;
-};
-
-struct ilo_view_state {
-   struct pipe_sampler_view *states[ILO_MAX_SAMPLER_VIEWS];
-   unsigned count;
-};
-
-struct ilo_stream_output_target {
-   struct pipe_stream_output_target base;
-
-   struct ilo_state_sol_buffer sb;
-};
-
-struct ilo_so_state {
-   struct pipe_stream_output_target *states[ILO_MAX_SO_BUFFERS];
-   unsigned count;
-   unsigned append_bitmask;
-
-   struct ilo_state_sol_buffer dummy_sb;
-
-   bool enabled;
-};
-
-struct ilo_rasterizer_state {
-   struct pipe_rasterizer_state state;
-
-   /* these are invalid until finalize_rasterizer() */
-   struct ilo_state_raster_info info;
-   struct ilo_state_raster rs;
-};
-
-struct ilo_viewport_state {
-   struct ilo_state_viewport_matrix_info matrices[ILO_MAX_VIEWPORTS];
-   struct ilo_state_viewport_scissor_info scissors[ILO_MAX_VIEWPORTS];
-   struct ilo_state_viewport_params_info params;
-
-   struct pipe_viewport_state viewport0;
-   struct pipe_scissor_state scissor0;
-
-   struct ilo_state_viewport vp;
-   uint32_t vp_data[20 * ILO_MAX_VIEWPORTS];
-};
-
-struct ilo_surface_cso {
-   struct pipe_surface base;
-
-   bool is_rt;
-   union {
-      struct ilo_state_surface rt;
-      struct ilo_state_zs zs;
-   } u;
-};
-
-struct ilo_fb_state {
-   struct pipe_framebuffer_state state;
-
-   struct ilo_state_surface null_rt;
-   struct ilo_state_zs null_zs;
-
-   struct ilo_fb_blend_caps {
-      bool is_unorm;
-      bool is_integer;
-      bool force_dst_alpha_one;
-
-      bool can_logicop;
-      bool can_blend;
-      bool can_alpha_test;
-   } blend_caps[PIPE_MAX_COLOR_BUFS];
-
-   unsigned num_samples;
-
-   bool has_integer_rt;
-   bool has_hiz;
-   enum gen_depth_format depth_offset_format;
-};
-
-struct ilo_dsa_state {
-   struct ilo_state_cc_depth_info depth;
-
-   struct ilo_state_cc_stencil_info stencil;
-   struct {
-      uint8_t test_mask;
-      uint8_t write_mask;
-   } stencil_front, stencil_back;
-
-   bool alpha_test;
-   float alpha_ref;
-   enum gen_compare_function alpha_func;
-};
-
-struct ilo_blend_state {
-   struct ilo_state_cc_blend_rt_info rt[PIPE_MAX_COLOR_BUFS];
-   struct ilo_state_cc_blend_rt_info dummy_rt;
-   bool dual_blend;
-
-   /* these are invalid until finalize_blend() */
-   struct ilo_state_cc_blend_rt_info effective_rt[PIPE_MAX_COLOR_BUFS];
-   struct ilo_state_cc_info info;
-   struct ilo_state_cc cc;
-   bool alpha_may_kill;
-};
-
-struct ilo_global_binding_cso {
-   struct pipe_resource *resource;
-   uint32_t *handle;
-};
-
-/*
- * In theory, we would like a "virtual" bo that serves as the global memory
- * region.  The virtual bo would reserve a region in the GTT aperture, but the
- * pages of it would come from those of the global bindings.
- *
- * The virtual bo would be created in launch_grid().  The global bindings
- * would be added to the virtual bo.  A SURFACE_STATE for the virtual bo would
- * be created.  The handles returned by set_global_binding() would be offsets
- * into the virtual bo.
- *
- * But for now, we will create a SURFACE_STATE for each of the bindings.  The
- * handle of a global binding consists of the offset and the binding table
- * index.
- */
-struct ilo_global_binding {
-   struct util_dynarray bindings;
-   unsigned count;
-};
-
-struct ilo_state_vector {
-   const struct pipe_draw_info *draw;
-   struct gen6_3dprimitive_info draw_info;
-
-   uint32_t dirty;
-
-   struct ilo_vb_state vb;
-   struct ilo_ve_state *ve;
-   struct ilo_ib_state ib;
-
-   struct ilo_shader_state *vs;
-   struct ilo_shader_state *gs;
-
-   struct ilo_state_hs disabled_hs;
-   struct ilo_state_ds disabled_ds;
-   struct ilo_state_gs disabled_gs;
-
-   struct ilo_so_state so;
-
-   struct pipe_clip_state clip;
-
-   struct ilo_viewport_state viewport;
-
-   struct ilo_rasterizer_state *rasterizer;
-
-   struct ilo_state_line_stipple line_stipple;
-   struct ilo_state_poly_stipple poly_stipple;
-   unsigned sample_mask;
-
-   struct ilo_shader_state *fs;
-
-   struct ilo_state_cc_params_info cc_params;
-   struct pipe_stencil_ref stencil_ref;
-   const struct ilo_dsa_state *dsa;
-   struct ilo_blend_state *blend;
-
-   struct ilo_fb_state fb;
-
-   struct ilo_state_urb urb;
-
-   /* shader resources */
-   struct ilo_sampler_state sampler[PIPE_SHADER_TYPES];
-   struct ilo_view_state view[PIPE_SHADER_TYPES];
-   struct ilo_cbuf_state cbuf[PIPE_SHADER_TYPES];
-   struct ilo_resource_state resource;
-
-   struct ilo_state_sampler disabled_sampler;
-
-   /* GPGPU */
-   struct ilo_shader_state *cs;
-   struct ilo_resource_state cs_resource;
-   struct ilo_global_binding global_binding;
-};
-
-void
-ilo_init_state_functions(struct ilo_context *ilo);
-
-void
-ilo_finalize_3d_states(struct ilo_context *ilo,
-                       const struct pipe_draw_info *draw);
-
-void
-ilo_finalize_compute_states(struct ilo_context *ilo);
-
-void
-ilo_state_vector_init(const struct ilo_dev *dev,
-                      struct ilo_state_vector *vec);
-
-void
-ilo_state_vector_cleanup(struct ilo_state_vector *vec);
-
-void
-ilo_state_vector_resource_renamed(struct ilo_state_vector *vec,
-                                  struct pipe_resource *res);
-
-void
-ilo_state_vector_dump_dirty(const struct ilo_state_vector *vec);
-
-#endif /* ILO_STATE_H */
diff --git a/src/gallium/drivers/ilo/ilo_transfer.c b/src/gallium/drivers/ilo/ilo_transfer.c
deleted file mode 100644 (file)
index c0dab31..0000000
+++ /dev/null
@@ -1,1260 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "util/u_surface.h"
-#include "util/u_transfer.h"
-#include "util/u_format_etc.h"
-
-#include "ilo_blit.h"
-#include "ilo_blitter.h"
-#include "ilo_cp.h"
-#include "ilo_context.h"
-#include "ilo_resource.h"
-#include "ilo_state.h"
-#include "ilo_transfer.h"
-
-/*
- * For buffers that are not busy, we want to map/unmap them directly.  For
- * those that are busy, we have to worry about synchronization.  We could wait
- * for GPU to finish, but there are cases where we could avoid waiting.
- *
- *  - When PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE is set, the contents of the
- *    buffer can be discarded.  We can replace the backing bo by a new one of
- *    the same size (renaming).
- *  - When PIPE_TRANSFER_DISCARD_RANGE is set, the contents of the mapped
- *    range can be discarded.  We can allocate and map a staging bo on
- *    mapping, and (pipelined-)copy it over to the real bo on unmapping.
- *  - When PIPE_TRANSFER_FLUSH_EXPLICIT is set, there is no reading and only
- *    flushed regions need to be written.  We can still allocate and map a
- *    staging bo, but should copy only the flushed regions over.
- *
- * However, there are other flags to consider.
- *
- *  - When PIPE_TRANSFER_UNSYNCHRONIZED is set, we do not need to worry about
- *    synchronization at all on mapping.
- *  - When PIPE_TRANSFER_MAP_DIRECTLY is set, no staging area is allowed.
- *  - When PIPE_TRANSFER_DONTBLOCK is set, we should fail if we have to block.
- *  - When PIPE_TRANSFER_PERSISTENT is set, GPU may access the buffer while it
- *    is mapped.  Synchronization is done by defining memory barriers,
- *    explicitly via memory_barrier() or implicitly via
- *    transfer_flush_region(), as well as GPU fences.
- *  - When PIPE_TRANSFER_COHERENT is set, updates by either CPU or GPU should
- *    be made visible to the other side immediately.  Since the kernel flushes
- *    GPU caches at the end of each batch buffer, CPU always sees GPU updates.
- *    We could use a coherent mapping to make all persistent mappings
- *    coherent.
- *
- * These also apply to textures, except that we may additionally need to do
- * format conversion or tiling/untiling.
- */
-
-/**
- * Return a transfer method suitable for the usage.  The returned method will
- * correctly block when the resource is busy.
- */
-static bool
-resource_get_transfer_method(struct pipe_resource *res,
-                             const struct pipe_transfer *transfer,
-                             enum ilo_transfer_map_method *method)
-{
-   const struct ilo_screen *is = ilo_screen(res->screen);
-   const unsigned usage = transfer->usage;
-   enum ilo_transfer_map_method m;
-   bool tiled;
-
-   if (res->target == PIPE_BUFFER) {
-      tiled = false;
-   } else {
-      struct ilo_texture *tex = ilo_texture(res);
-      bool need_convert = false;
-
-      /* we may need to convert on the fly */
-      if (tex->image.tiling == GEN8_TILING_W || tex->separate_s8) {
-         /* on GEN6, separate stencil is enabled only when HiZ is */
-         if (ilo_dev_gen(&is->dev) >= ILO_GEN(7) ||
-             ilo_image_can_enable_aux(&tex->image, transfer->level)) {
-            m = ILO_TRANSFER_MAP_SW_ZS;
-            need_convert = true;
-         }
-      } else if (tex->image_format != tex->base.format) {
-         m = ILO_TRANSFER_MAP_SW_CONVERT;
-         need_convert = true;
-      }
-
-      if (need_convert) {
-         if (usage & (PIPE_TRANSFER_MAP_DIRECTLY | PIPE_TRANSFER_PERSISTENT))
-            return false;
-
-         *method = m;
-         return true;
-      }
-
-      tiled = (tex->image.tiling != GEN6_TILING_NONE);
-   }
-
-   if (tiled)
-      m = ILO_TRANSFER_MAP_GTT; /* to have a linear view */
-   else if (is->dev.has_llc)
-      m = ILO_TRANSFER_MAP_CPU; /* fast and mostly coherent */
-   else if (usage & PIPE_TRANSFER_PERSISTENT)
-      m = ILO_TRANSFER_MAP_GTT; /* for coherency */
-   else if (usage & PIPE_TRANSFER_READ)
-      m = ILO_TRANSFER_MAP_CPU; /* gtt read is too slow */
-   else
-      m = ILO_TRANSFER_MAP_GTT;
-
-   *method = m;
-
-   return true;
-}
-
-/**
- * Return true if usage allows the use of staging bo to avoid blocking.
- */
-static bool
-usage_allows_staging_bo(unsigned usage)
-{
-   /* do we know how to write the data back to the resource? */
-   const unsigned can_writeback = (PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE |
-                                   PIPE_TRANSFER_DISCARD_RANGE |
-                                   PIPE_TRANSFER_FLUSH_EXPLICIT);
-   const unsigned reasons_against = (PIPE_TRANSFER_READ |
-                                     PIPE_TRANSFER_MAP_DIRECTLY |
-                                     PIPE_TRANSFER_PERSISTENT);
-
-   return (usage & can_writeback) && !(usage & reasons_against);
-}
-
-/**
- * Allocate the staging resource.  It is always linear and its size matches
- * the transfer box, with proper paddings.
- */
-static bool
-xfer_alloc_staging_res(struct ilo_transfer *xfer)
-{
-   const struct pipe_resource *res = xfer->base.resource;
-   const struct pipe_box *box = &xfer->base.box;
-   struct pipe_resource templ;
-
-   memset(&templ, 0, sizeof(templ));
-
-   templ.format = res->format;
-
-   if (res->target == PIPE_BUFFER) {
-      templ.target = PIPE_BUFFER;
-      templ.width0 =
-         (box->x % ILO_TRANSFER_MAP_BUFFER_ALIGNMENT) + box->width;
-   }
-   else {
-      /* use 2D array for any texture target */
-      templ.target = PIPE_TEXTURE_2D_ARRAY;
-      templ.width0 = box->width;
-   }
-
-   templ.height0 = box->height;
-   templ.depth0 = 1;
-   templ.array_size = box->depth;
-   templ.nr_samples = 1;
-   templ.usage = PIPE_USAGE_STAGING;
-
-   if (xfer->base.usage & PIPE_TRANSFER_FLUSH_EXPLICIT) {
-      templ.flags = PIPE_RESOURCE_FLAG_MAP_PERSISTENT |
-                    PIPE_RESOURCE_FLAG_MAP_COHERENT;
-   }
-
-   xfer->staging.res = res->screen->resource_create(res->screen, &templ);
-
-   if (xfer->staging.res && xfer->staging.res->target != PIPE_BUFFER) {
-      assert(ilo_texture(xfer->staging.res)->image.tiling ==
-            GEN6_TILING_NONE);
-   }
-
-   return (xfer->staging.res != NULL);
-}
-
-/**
- * Use an alternative transfer method or rename the resource to unblock an
- * otherwise blocking transfer.
- */
-static bool
-xfer_unblock(struct ilo_transfer *xfer, bool *resource_renamed)
-{
-   struct pipe_resource *res = xfer->base.resource;
-   bool unblocked = false, renamed = false;
-
-   switch (xfer->method) {
-   case ILO_TRANSFER_MAP_CPU:
-   case ILO_TRANSFER_MAP_GTT:
-      if (xfer->base.usage & PIPE_TRANSFER_UNSYNCHRONIZED) {
-         xfer->method = ILO_TRANSFER_MAP_GTT_ASYNC;
-         unblocked = true;
-      }
-      else if ((xfer->base.usage & PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE) &&
-               ilo_resource_rename_bo(res)) {
-         renamed = true;
-         unblocked = true;
-      }
-      else if (usage_allows_staging_bo(xfer->base.usage) &&
-               xfer_alloc_staging_res(xfer)) {
-         xfer->method = ILO_TRANSFER_MAP_STAGING;
-         unblocked = true;
-      }
-      break;
-   case ILO_TRANSFER_MAP_GTT_ASYNC:
-   case ILO_TRANSFER_MAP_STAGING:
-      unblocked = true;
-      break;
-   default:
-      break;
-   }
-
-   *resource_renamed = renamed;
-
-   return unblocked;
-}
-
-/**
- * Allocate the staging system buffer based on the resource format and the
- * transfer box.
- */
-static bool
-xfer_alloc_staging_sys(struct ilo_transfer *xfer)
-{
-   const enum pipe_format format = xfer->base.resource->format;
-   const struct pipe_box *box = &xfer->base.box;
-   const unsigned alignment = 64;
-
-   /* need to tell the world the layout */
-   xfer->base.stride =
-      align(util_format_get_stride(format, box->width), alignment);
-   xfer->base.layer_stride =
-      util_format_get_2d_size(format, xfer->base.stride, box->height);
-
-   xfer->staging.sys =
-      align_malloc(xfer->base.layer_stride * box->depth, alignment);
-
-   return (xfer->staging.sys != NULL);
-}
-
-/**
- * Map according to the method.  The staging system buffer should have been
- * allocated if the method requires it.
- */
-static void *
-xfer_map(struct ilo_transfer *xfer)
-{
-   const struct ilo_vma *vma;
-   void *ptr;
-
-   switch (xfer->method) {
-   case ILO_TRANSFER_MAP_CPU:
-      vma = ilo_resource_get_vma(xfer->base.resource);
-      ptr = intel_bo_map(vma->bo, xfer->base.usage & PIPE_TRANSFER_WRITE);
-      break;
-   case ILO_TRANSFER_MAP_GTT:
-      vma = ilo_resource_get_vma(xfer->base.resource);
-      ptr = intel_bo_map_gtt(vma->bo);
-      break;
-   case ILO_TRANSFER_MAP_GTT_ASYNC:
-      vma = ilo_resource_get_vma(xfer->base.resource);
-      ptr = intel_bo_map_gtt_async(vma->bo);
-      break;
-   case ILO_TRANSFER_MAP_STAGING:
-      {
-         const struct ilo_screen *is = ilo_screen(xfer->staging.res->screen);
-
-         vma = ilo_resource_get_vma(xfer->staging.res);
-
-         /*
-          * We want a writable, optionally persistent and coherent, mapping
-          * for a linear bo.  We can call resource_get_transfer_method(), but
-          * this turns out to be fairly simple.
-          */
-         if (is->dev.has_llc)
-            ptr = intel_bo_map(vma->bo, true);
-         else
-            ptr = intel_bo_map_gtt(vma->bo);
-
-         if (ptr && xfer->staging.res->target == PIPE_BUFFER)
-            ptr += (xfer->base.box.x % ILO_TRANSFER_MAP_BUFFER_ALIGNMENT);
-      }
-      break;
-   case ILO_TRANSFER_MAP_SW_CONVERT:
-   case ILO_TRANSFER_MAP_SW_ZS:
-      vma = NULL;
-      ptr = xfer->staging.sys;
-      break;
-   default:
-      assert(!"unknown mapping method");
-      vma = NULL;
-      ptr = NULL;
-      break;
-   }
-
-   if (ptr && vma)
-      ptr = (void *) ((char *) ptr + vma->bo_offset);
-
-   return ptr;
-}
-
-/**
- * Unmap a transfer.
- */
-static void
-xfer_unmap(struct ilo_transfer *xfer)
-{
-   switch (xfer->method) {
-   case ILO_TRANSFER_MAP_CPU:
-   case ILO_TRANSFER_MAP_GTT:
-   case ILO_TRANSFER_MAP_GTT_ASYNC:
-      intel_bo_unmap(ilo_resource_get_vma(xfer->base.resource)->bo);
-      break;
-   case ILO_TRANSFER_MAP_STAGING:
-      intel_bo_unmap(ilo_resource_get_vma(xfer->staging.res)->bo);
-      break;
-   default:
-      break;
-   }
-}
-
-static void
-tex_get_box_origin(const struct ilo_texture *tex,
-                   unsigned level, unsigned slice,
-                   const struct pipe_box *box,
-                   unsigned *mem_x, unsigned *mem_y)
-{
-   unsigned x, y;
-
-   ilo_image_get_slice_pos(&tex->image, level, box->z + slice, &x, &y);
-   x += box->x;
-   y += box->y;
-
-   ilo_image_pos_to_mem(&tex->image, x, y, mem_x, mem_y);
-}
-
-static unsigned
-tex_get_box_offset(const struct ilo_texture *tex, unsigned level,
-                   const struct pipe_box *box)
-{
-   unsigned mem_x, mem_y;
-
-   tex_get_box_origin(tex, level, 0, box, &mem_x, &mem_y);
-
-   return ilo_image_mem_to_linear(&tex->image, mem_x, mem_y);
-}
-
-static unsigned
-tex_get_slice_stride(const struct ilo_texture *tex, unsigned level)
-{
-   return ilo_image_get_slice_stride(&tex->image, level);
-}
-
-static unsigned
-tex_tile_x_swizzle(unsigned addr)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 1 part 2, page 24:
-    *
-    *     "As shown in the tiling algorithm, the new address bit[6] should be:
-    *
-    *        Address bit[6] <= TiledAddr bit[6] XOR
-    *                          TiledAddr bit[9] XOR
-    *                          TiledAddr bit[10]"
-    */
-   return addr ^ (((addr >> 3) ^ (addr >> 4)) & 0x40);
-}
-
-static unsigned
-tex_tile_y_swizzle(unsigned addr)
-{
-   /*
-    * From the Ivy Bridge PRM, volume 1 part 2, page 24:
-    *
-    *     "As shown in the tiling algorithm, The new address bit[6] becomes:
-    *
-    *        Address bit[6] <= TiledAddr bit[6] XOR
-    *                          TiledAddr bit[9]"
-    */
-   return addr ^ ((addr >> 3) & 0x40);
-}
-
-static unsigned
-tex_tile_x_offset(unsigned mem_x, unsigned mem_y,
-                  unsigned tiles_per_row, bool swizzle)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 2, page 21, we know that a
-    * X-major tile has 8 rows and 32 OWord columns (512 bytes).  Tiles in the
-    * tiled region are numbered in row-major order, starting from zero.  The
-    * tile number can thus be calculated as follows:
-    *
-    *    tile = (mem_y / 8) * tiles_per_row + (mem_x / 512)
-    *
-    * OWords in that tile are also numbered in row-major order, starting from
-    * zero.  The OWord number can thus be calculated as follows:
-    *
-    *    oword = (mem_y % 8) * 32 + ((mem_x % 512) / 16)
-    *
-    * and the tiled offset is
-    *
-    *    offset = tile * 4096 + oword * 16 + (mem_x % 16)
-    *           = tile * 4096 + (mem_y % 8) * 512 + (mem_x % 512)
-    */
-   unsigned tile, offset;
-
-   tile = (mem_y >> 3) * tiles_per_row + (mem_x >> 9);
-   offset = tile << 12 | (mem_y & 0x7) << 9 | (mem_x & 0x1ff);
-
-   return (swizzle) ? tex_tile_x_swizzle(offset) : offset;
-}
-
-static unsigned
-tex_tile_y_offset(unsigned mem_x, unsigned mem_y,
-                  unsigned tiles_per_row, bool swizzle)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 2, page 22, we know that a
-    * Y-major tile has 32 rows and 8 OWord columns (128 bytes).  Tiles in the
-    * tiled region are numbered in row-major order, starting from zero.  The
-    * tile number can thus be calculated as follows:
-    *
-    *    tile = (mem_y / 32) * tiles_per_row + (mem_x / 128)
-    *
-    * OWords in that tile are numbered in column-major order, starting from
-    * zero.  The OWord number can thus be calculated as follows:
-    *
-    *    oword = ((mem_x % 128) / 16) * 32 + (mem_y % 32)
-    *
-    * and the tiled offset is
-    *
-    *    offset = tile * 4096 + oword * 16 + (mem_x % 16)
-    */
-   unsigned tile, oword, offset;
-
-   tile = (mem_y >> 5) * tiles_per_row + (mem_x >> 7);
-   oword = (mem_x & 0x70) << 1 | (mem_y & 0x1f);
-   offset = tile << 12 | oword << 4 | (mem_x & 0xf);
-
-   return (swizzle) ? tex_tile_y_swizzle(offset) : offset;
-}
-
-static unsigned
-tex_tile_w_offset(unsigned mem_x, unsigned mem_y,
-                  unsigned tiles_per_row, bool swizzle)
-{
-   /*
-    * From the Sandy Bridge PRM, volume 1 part 2, page 23, we know that a
-    * W-major tile has 8 8x8-block rows and 8 8x8-block columns.  Tiles in the
-    * tiled region are numbered in row-major order, starting from zero.  The
-    * tile number can thus be calculated as follows:
-    *
-    *    tile = (mem_y / 64) * tiles_per_row + (mem_x / 64)
-    *
-    * 8x8-blocks in that tile are numbered in column-major order, starting
-    * from zero.  The 8x8-block number can thus be calculated as follows:
-    *
-    *    blk8 = ((mem_x % 64) / 8) * 8 + ((mem_y % 64) / 8)
-    *
-    * Each 8x8-block is divided into 4 4x4-blocks, in row-major order.  Each
-    * 4x4-block is further divided into 4 2x2-blocks, also in row-major order.
-    * We have
-    *
-    *    blk4 = (((mem_y % 64) / 4) & 1) * 2 + (((mem_x % 64) / 4) & 1)
-    *    blk2 = (((mem_y % 64) / 2) & 1) * 2 + (((mem_x % 64) / 2) & 1)
-    *    blk1 = (((mem_y % 64)    ) & 1) * 2 + (((mem_x % 64)    ) & 1)
-    *
-    * and the tiled offset is
-    *
-    *    offset = tile * 4096 + blk8 * 64 + blk4 * 16 + blk2 * 4 + blk1
-    */
-   unsigned tile, blk8, blk4, blk2, blk1, offset;
-
-   tile = (mem_y >> 6) * tiles_per_row + (mem_x >> 6);
-   blk8 = ((mem_x >> 3) & 0x7) << 3 | ((mem_y >> 3) & 0x7);
-   blk4 = ((mem_y >> 2) & 0x1) << 1 | ((mem_x >> 2) & 0x1);
-   blk2 = ((mem_y >> 1) & 0x1) << 1 | ((mem_x >> 1) & 0x1);
-   blk1 = ((mem_y     ) & 0x1) << 1 | ((mem_x     ) & 0x1);
-   offset = tile << 12 | blk8 << 6 | blk4 << 4 | blk2 << 2 | blk1;
-
-   return (swizzle) ? tex_tile_y_swizzle(offset) : offset;
-}
-
-static unsigned
-tex_tile_none_offset(unsigned mem_x, unsigned mem_y,
-                     unsigned tiles_per_row, bool swizzle)
-{
-   return mem_y * tiles_per_row + mem_x;
-}
-
-typedef unsigned (*tex_tile_offset_func)(unsigned mem_x, unsigned mem_y,
-                                         unsigned tiles_per_row,
-                                         bool swizzle);
-
-static tex_tile_offset_func
-tex_tile_choose_offset_func(const struct ilo_texture *tex,
-                            unsigned *tiles_per_row)
-{
-   switch (tex->image.tiling) {
-   default:
-      assert(!"unknown tiling");
-      /* fall through */
-   case GEN6_TILING_NONE:
-      *tiles_per_row = tex->image.bo_stride;
-      return tex_tile_none_offset;
-   case GEN6_TILING_X:
-      *tiles_per_row = tex->image.bo_stride / 512;
-      return tex_tile_x_offset;
-   case GEN6_TILING_Y:
-      *tiles_per_row = tex->image.bo_stride / 128;
-      return tex_tile_y_offset;
-   case GEN8_TILING_W:
-      *tiles_per_row = tex->image.bo_stride / 64;
-      return tex_tile_w_offset;
-   }
-}
-
-static void *
-tex_staging_sys_map_bo(struct ilo_texture *tex,
-                       bool for_read_back,
-                       bool linear_view)
-{
-   const struct ilo_screen *is = ilo_screen(tex->base.screen);
-   const bool prefer_cpu = (is->dev.has_llc || for_read_back);
-   void *ptr;
-
-   if (prefer_cpu && (tex->image.tiling == GEN6_TILING_NONE ||
-                      !linear_view))
-      ptr = intel_bo_map(tex->vma.bo, !for_read_back);
-   else
-      ptr = intel_bo_map_gtt(tex->vma.bo);
-
-   if (ptr)
-      ptr = (void *) ((char *) ptr + tex->vma.bo_offset);
-
-   return ptr;
-}
-
-static void
-tex_staging_sys_unmap_bo(struct ilo_texture *tex)
-{
-   intel_bo_unmap(tex->vma.bo);
-}
-
-static bool
-tex_staging_sys_zs_read(struct ilo_texture *tex,
-                        const struct ilo_transfer *xfer)
-{
-   const struct ilo_screen *is = ilo_screen(tex->base.screen);
-   const bool swizzle = is->dev.has_address_swizzling;
-   const struct pipe_box *box = &xfer->base.box;
-   const uint8_t *src;
-   tex_tile_offset_func tile_offset;
-   unsigned tiles_per_row;
-   int slice;
-
-   src = tex_staging_sys_map_bo(tex, true, false);
-   if (!src)
-      return false;
-
-   tile_offset = tex_tile_choose_offset_func(tex, &tiles_per_row);
-
-   assert(tex->image.block_width == 1 && tex->image.block_height == 1);
-
-   if (tex->separate_s8) {
-      struct ilo_texture *s8_tex = tex->separate_s8;
-      const uint8_t *s8_src;
-      tex_tile_offset_func s8_tile_offset;
-      unsigned s8_tiles_per_row;
-      int dst_cpp, dst_s8_pos, src_cpp_used;
-
-      s8_src = tex_staging_sys_map_bo(s8_tex, true, false);
-      if (!s8_src) {
-         tex_staging_sys_unmap_bo(tex);
-         return false;
-      }
-
-      s8_tile_offset = tex_tile_choose_offset_func(s8_tex, &s8_tiles_per_row);
-
-      if (tex->base.format == PIPE_FORMAT_Z24_UNORM_S8_UINT) {
-         assert(tex->image_format == PIPE_FORMAT_Z24X8_UNORM);
-
-         dst_cpp = 4;
-         dst_s8_pos = 3;
-         src_cpp_used = 3;
-      }
-      else {
-         assert(tex->base.format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT);
-         assert(tex->image_format == PIPE_FORMAT_Z32_FLOAT);
-
-         dst_cpp = 8;
-         dst_s8_pos = 4;
-         src_cpp_used = 4;
-      }
-
-      for (slice = 0; slice < box->depth; slice++) {
-         unsigned mem_x, mem_y, s8_mem_x, s8_mem_y;
-         uint8_t *dst;
-         int i, j;
-
-         tex_get_box_origin(tex, xfer->base.level, slice,
-                            box, &mem_x, &mem_y);
-         tex_get_box_origin(s8_tex, xfer->base.level, slice,
-                            box, &s8_mem_x, &s8_mem_y);
-
-         dst = xfer->staging.sys + xfer->base.layer_stride * slice;
-
-         for (i = 0; i < box->height; i++) {
-            unsigned x = mem_x, s8_x = s8_mem_x;
-            uint8_t *d = dst;
-
-            for (j = 0; j < box->width; j++) {
-               const unsigned offset =
-                  tile_offset(x, mem_y, tiles_per_row, swizzle);
-               const unsigned s8_offset =
-                  s8_tile_offset(s8_x, s8_mem_y, s8_tiles_per_row, swizzle);
-
-               memcpy(d, src + offset, src_cpp_used);
-               d[dst_s8_pos] = s8_src[s8_offset];
-
-               d += dst_cpp;
-               x += tex->image.block_size;
-               s8_x++;
-            }
-
-            dst += xfer->base.stride;
-            mem_y++;
-            s8_mem_y++;
-         }
-      }
-
-      tex_staging_sys_unmap_bo(s8_tex);
-   }
-   else {
-      assert(tex->image_format == PIPE_FORMAT_S8_UINT);
-
-      for (slice = 0; slice < box->depth; slice++) {
-         unsigned mem_x, mem_y;
-         uint8_t *dst;
-         int i, j;
-
-         tex_get_box_origin(tex, xfer->base.level, slice,
-                            box, &mem_x, &mem_y);
-
-         dst = xfer->staging.sys + xfer->base.layer_stride * slice;
-
-         for (i = 0; i < box->height; i++) {
-            unsigned x = mem_x;
-            uint8_t *d = dst;
-
-            for (j = 0; j < box->width; j++) {
-               const unsigned offset =
-                  tile_offset(x, mem_y, tiles_per_row, swizzle);
-
-               *d = src[offset];
-
-               d++;
-               x++;
-            }
-
-            dst += xfer->base.stride;
-            mem_y++;
-         }
-      }
-   }
-
-   tex_staging_sys_unmap_bo(tex);
-
-   return true;
-}
-
-static bool
-tex_staging_sys_zs_write(struct ilo_texture *tex,
-                         const struct ilo_transfer *xfer)
-{
-   const struct ilo_screen *is = ilo_screen(tex->base.screen);
-   const bool swizzle = is->dev.has_address_swizzling;
-   const struct pipe_box *box = &xfer->base.box;
-   uint8_t *dst;
-   tex_tile_offset_func tile_offset;
-   unsigned tiles_per_row;
-   int slice;
-
-   dst = tex_staging_sys_map_bo(tex, false, false);
-   if (!dst)
-      return false;
-
-   tile_offset = tex_tile_choose_offset_func(tex, &tiles_per_row);
-
-   assert(tex->image.block_width == 1 && tex->image.block_height == 1);
-
-   if (tex->separate_s8) {
-      struct ilo_texture *s8_tex = tex->separate_s8;
-      uint8_t *s8_dst;
-      tex_tile_offset_func s8_tile_offset;
-      unsigned s8_tiles_per_row;
-      int src_cpp, src_s8_pos, dst_cpp_used;
-
-      s8_dst = tex_staging_sys_map_bo(s8_tex, false, false);
-      if (!s8_dst) {
-         tex_staging_sys_unmap_bo(s8_tex);
-         return false;
-      }
-
-      s8_tile_offset = tex_tile_choose_offset_func(s8_tex, &s8_tiles_per_row);
-
-      if (tex->base.format == PIPE_FORMAT_Z24_UNORM_S8_UINT) {
-         assert(tex->image_format == PIPE_FORMAT_Z24X8_UNORM);
-
-         src_cpp = 4;
-         src_s8_pos = 3;
-         dst_cpp_used = 3;
-      }
-      else {
-         assert(tex->base.format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT);
-         assert(tex->image_format == PIPE_FORMAT_Z32_FLOAT);
-
-         src_cpp = 8;
-         src_s8_pos = 4;
-         dst_cpp_used = 4;
-      }
-
-      for (slice = 0; slice < box->depth; slice++) {
-         unsigned mem_x, mem_y, s8_mem_x, s8_mem_y;
-         const uint8_t *src;
-         int i, j;
-
-         tex_get_box_origin(tex, xfer->base.level, slice,
-                            box, &mem_x, &mem_y);
-         tex_get_box_origin(s8_tex, xfer->base.level, slice,
-                            box, &s8_mem_x, &s8_mem_y);
-
-         src = xfer->staging.sys + xfer->base.layer_stride * slice;
-
-         for (i = 0; i < box->height; i++) {
-            unsigned x = mem_x, s8_x = s8_mem_x;
-            const uint8_t *s = src;
-
-            for (j = 0; j < box->width; j++) {
-               const unsigned offset =
-                  tile_offset(x, mem_y, tiles_per_row, swizzle);
-               const unsigned s8_offset =
-                  s8_tile_offset(s8_x, s8_mem_y, s8_tiles_per_row, swizzle);
-
-               memcpy(dst + offset, s, dst_cpp_used);
-               s8_dst[s8_offset] = s[src_s8_pos];
-
-               s += src_cpp;
-               x += tex->image.block_size;
-               s8_x++;
-            }
-
-            src += xfer->base.stride;
-            mem_y++;
-            s8_mem_y++;
-         }
-      }
-
-      tex_staging_sys_unmap_bo(s8_tex);
-   }
-   else {
-      assert(tex->image_format == PIPE_FORMAT_S8_UINT);
-
-      for (slice = 0; slice < box->depth; slice++) {
-         unsigned mem_x, mem_y;
-         const uint8_t *src;
-         int i, j;
-
-         tex_get_box_origin(tex, xfer->base.level, slice,
-                            box, &mem_x, &mem_y);
-
-         src = xfer->staging.sys + xfer->base.layer_stride * slice;
-
-         for (i = 0; i < box->height; i++) {
-            unsigned x = mem_x;
-            const uint8_t *s = src;
-
-            for (j = 0; j < box->width; j++) {
-               const unsigned offset =
-                  tile_offset(x, mem_y, tiles_per_row, swizzle);
-
-               dst[offset] = *s;
-
-               s++;
-               x++;
-            }
-
-            src += xfer->base.stride;
-            mem_y++;
-         }
-      }
-   }
-
-   tex_staging_sys_unmap_bo(tex);
-
-   return true;
-}
-
-static bool
-tex_staging_sys_convert_write(struct ilo_texture *tex,
-                              const struct ilo_transfer *xfer)
-{
-   const struct pipe_box *box = &xfer->base.box;
-   unsigned dst_slice_stride;
-   void *dst;
-   int slice;
-
-   dst = tex_staging_sys_map_bo(tex, false, true);
-   if (!dst)
-      return false;
-
-   dst += tex_get_box_offset(tex, xfer->base.level, box);
-
-   /* slice stride is not always available */
-   if (box->depth > 1)
-      dst_slice_stride = tex_get_slice_stride(tex, xfer->base.level);
-   else
-      dst_slice_stride = 0;
-
-   if (unlikely(tex->image_format == tex->base.format)) {
-      util_copy_box(dst, tex->image_format, tex->image.bo_stride,
-            dst_slice_stride, 0, 0, 0, box->width, box->height, box->depth,
-            xfer->staging.sys, xfer->base.stride, xfer->base.layer_stride,
-            0, 0, 0);
-
-      tex_staging_sys_unmap_bo(tex);
-
-      return true;
-   }
-
-   switch (tex->base.format) {
-   case PIPE_FORMAT_ETC1_RGB8:
-      assert(tex->image_format == PIPE_FORMAT_R8G8B8X8_UNORM);
-
-      for (slice = 0; slice < box->depth; slice++) {
-         const void *src =
-            xfer->staging.sys + xfer->base.layer_stride * slice;
-
-         util_format_etc1_rgb8_unpack_rgba_8unorm(dst,
-               tex->image.bo_stride, src, xfer->base.stride,
-               box->width, box->height);
-
-         dst += dst_slice_stride;
-      }
-      break;
-   default:
-      assert(!"unable to convert the staging data");
-      break;
-   }
-
-   tex_staging_sys_unmap_bo(tex);
-
-   return true;
-}
-
-static void
-tex_staging_sys_writeback(struct ilo_transfer *xfer)
-{
-   struct ilo_texture *tex = ilo_texture(xfer->base.resource);
-   bool success;
-
-   if (!(xfer->base.usage & PIPE_TRANSFER_WRITE))
-      return;
-
-   switch (xfer->method) {
-   case ILO_TRANSFER_MAP_SW_CONVERT:
-      success = tex_staging_sys_convert_write(tex, xfer);
-      break;
-   case ILO_TRANSFER_MAP_SW_ZS:
-      success = tex_staging_sys_zs_write(tex, xfer);
-      break;
-   default:
-      assert(!"unknown mapping method");
-      success = false;
-      break;
-   }
-
-   if (!success)
-      ilo_err("failed to map resource for moving staging data\n");
-}
-
-static bool
-tex_staging_sys_readback(struct ilo_transfer *xfer)
-{
-   struct ilo_texture *tex = ilo_texture(xfer->base.resource);
-   bool read_back = false, success;
-
-   /* see if we need to read the resource back */
-   if (xfer->base.usage & PIPE_TRANSFER_READ) {
-      read_back = true;
-   }
-   else if (xfer->base.usage & PIPE_TRANSFER_WRITE) {
-      const unsigned discard_flags =
-         (PIPE_TRANSFER_DISCARD_RANGE | PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE);
-
-      if (!(xfer->base.usage & discard_flags))
-         read_back = true;
-   }
-
-   if (!read_back)
-      return true;
-
-   switch (xfer->method) {
-   case ILO_TRANSFER_MAP_SW_CONVERT:
-      assert(!"no on-the-fly format conversion for mapping");
-      success = false;
-      break;
-   case ILO_TRANSFER_MAP_SW_ZS:
-      success = tex_staging_sys_zs_read(tex, xfer);
-      break;
-   default:
-      assert(!"unknown mapping method");
-      success = false;
-      break;
-   }
-
-   return success;
-}
-
-static void *
-tex_map(struct ilo_transfer *xfer)
-{
-   void *ptr;
-
-   switch (xfer->method) {
-   case ILO_TRANSFER_MAP_CPU:
-   case ILO_TRANSFER_MAP_GTT:
-   case ILO_TRANSFER_MAP_GTT_ASYNC:
-      ptr = xfer_map(xfer);
-      if (ptr) {
-         const struct ilo_texture *tex = ilo_texture(xfer->base.resource);
-
-         ptr += tex_get_box_offset(tex, xfer->base.level, &xfer->base.box);
-
-         /* stride is for a block row, not a texel row */
-         xfer->base.stride = tex->image.bo_stride;
-         /* note that slice stride is not always available */
-         xfer->base.layer_stride = (xfer->base.box.depth > 1) ?
-            tex_get_slice_stride(tex, xfer->base.level) : 0;
-      }
-      break;
-   case ILO_TRANSFER_MAP_STAGING:
-      ptr = xfer_map(xfer);
-      if (ptr) {
-         const struct ilo_texture *staging = ilo_texture(xfer->staging.res);
-         xfer->base.stride = staging->image.bo_stride;
-         xfer->base.layer_stride = tex_get_slice_stride(staging, 0);
-      }
-      break;
-   case ILO_TRANSFER_MAP_SW_CONVERT:
-   case ILO_TRANSFER_MAP_SW_ZS:
-      if (xfer_alloc_staging_sys(xfer) && tex_staging_sys_readback(xfer))
-         ptr = xfer_map(xfer);
-      else
-         ptr = NULL;
-      break;
-   default:
-      assert(!"unknown mapping method");
-      ptr = NULL;
-      break;
-   }
-
-   return ptr;
-}
-
-static void *
-buf_map(struct ilo_transfer *xfer)
-{
-   void *ptr;
-
-   ptr = xfer_map(xfer);
-   if (!ptr)
-      return NULL;
-
-   if (xfer->method != ILO_TRANSFER_MAP_STAGING)
-      ptr += xfer->base.box.x;
-
-   xfer->base.stride = 0;
-   xfer->base.layer_stride = 0;
-
-   assert(xfer->base.level == 0);
-   assert(xfer->base.box.y == 0);
-   assert(xfer->base.box.z == 0);
-   assert(xfer->base.box.height == 1);
-   assert(xfer->base.box.depth == 1);
-
-   return ptr;
-}
-
-static void
-copy_staging_resource(struct ilo_context *ilo,
-                      struct ilo_transfer *xfer,
-                      const struct pipe_box *box)
-{
-   const unsigned pad_x = (xfer->staging.res->target == PIPE_BUFFER) ?
-      xfer->base.box.x % ILO_TRANSFER_MAP_BUFFER_ALIGNMENT : 0;
-   struct pipe_box modified_box;
-
-   assert(xfer->method == ILO_TRANSFER_MAP_STAGING && xfer->staging.res);
-
-   if (!box) {
-      u_box_3d(pad_x, 0, 0, xfer->base.box.width, xfer->base.box.height,
-            xfer->base.box.depth, &modified_box);
-      box = &modified_box;
-   }
-   else if (pad_x) {
-      modified_box = *box;
-      modified_box.x += pad_x;
-      box = &modified_box;
-   }
-
-   ilo_blitter_blt_copy_resource(ilo->blitter,
-         xfer->base.resource, xfer->base.level,
-         xfer->base.box.x, xfer->base.box.y, xfer->base.box.z,
-         xfer->staging.res, 0, box);
-}
-
-static bool
-is_bo_busy(struct ilo_context *ilo, struct intel_bo *bo, bool *need_submit)
-{
-   const bool referenced = ilo_builder_has_reloc(&ilo->cp->builder, bo);
-
-   if (need_submit)
-      *need_submit = referenced;
-
-   if (referenced)
-      return true;
-
-   return intel_bo_is_busy(bo);
-}
-
-/**
- * Choose the best mapping method, depending on the transfer usage and whether
- * the bo is busy.
- */
-static bool
-choose_transfer_method(struct ilo_context *ilo, struct ilo_transfer *xfer)
-{
-   struct pipe_resource *res = xfer->base.resource;
-   bool need_submit;
-
-   if (!resource_get_transfer_method(res, &xfer->base, &xfer->method))
-      return false;
-
-   /* see if we can avoid blocking */
-   if (is_bo_busy(ilo, ilo_resource_get_vma(res)->bo, &need_submit)) {
-      bool resource_renamed;
-
-      if (!xfer_unblock(xfer, &resource_renamed)) {
-         if (xfer->base.usage & PIPE_TRANSFER_DONTBLOCK)
-            return false;
-
-         /* submit to make bo really busy and map() correctly blocks */
-         if (need_submit)
-            ilo_cp_submit(ilo->cp, "syncing for transfers");
-      }
-
-      if (resource_renamed)
-         ilo_state_vector_resource_renamed(&ilo->state_vector, res);
-   }
-
-   return true;
-}
-
-static void
-buf_pwrite(struct ilo_context *ilo, struct pipe_resource *res,
-           unsigned usage, int offset, int size, const void *data)
-{
-   struct ilo_buffer_resource *buf = ilo_buffer_resource(res);
-   bool need_submit;
-
-   /* see if we can avoid blocking */
-   if (is_bo_busy(ilo, buf->vma.bo, &need_submit)) {
-      bool unblocked = false;
-
-      if ((usage & PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE) &&
-          ilo_resource_rename_bo(res)) {
-         ilo_state_vector_resource_renamed(&ilo->state_vector, res);
-         unblocked = true;
-      }
-      else {
-         struct pipe_resource templ, *staging;
-
-         /*
-          * allocate a staging buffer to hold the data and pipelined copy it
-          * over
-          */
-         templ = *res;
-         templ.width0 = size;
-         templ.usage = PIPE_USAGE_STAGING;
-         templ.bind = 0;
-         staging = ilo->base.screen->resource_create(ilo->base.screen, &templ);
-         if (staging) {
-            const struct ilo_vma *staging_vma = ilo_resource_get_vma(staging);
-            struct pipe_box staging_box;
-
-            /* offset by staging_vma->bo_offset for pwrite */
-            intel_bo_pwrite(staging_vma->bo, staging_vma->bo_offset,
-                  size, data);
-
-            u_box_1d(0, size, &staging_box);
-            ilo_blitter_blt_copy_resource(ilo->blitter,
-                  res, 0, offset, 0, 0,
-                  staging, 0, &staging_box);
-
-            pipe_resource_reference(&staging, NULL);
-
-            return;
-         }
-      }
-
-      /* submit to make bo really busy and pwrite() correctly blocks */
-      if (!unblocked && need_submit)
-         ilo_cp_submit(ilo->cp, "syncing for pwrites");
-   }
-
-   /* offset by buf->vma.bo_offset for pwrite */
-   intel_bo_pwrite(buf->vma.bo, buf->vma.bo_offset + offset, size, data);
-}
-
-static void
-ilo_transfer_flush_region(struct pipe_context *pipe,
-                          struct pipe_transfer *transfer,
-                          const struct pipe_box *box)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_transfer *xfer = ilo_transfer(transfer);
-
-   /*
-    * The staging resource is mapped persistently and coherently.  We can copy
-    * without unmapping.
-    */
-   if (xfer->method == ILO_TRANSFER_MAP_STAGING &&
-       (xfer->base.usage & PIPE_TRANSFER_FLUSH_EXPLICIT))
-      copy_staging_resource(ilo, xfer, box);
-}
-
-static void
-ilo_transfer_unmap(struct pipe_context *pipe,
-                   struct pipe_transfer *transfer)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_transfer *xfer = ilo_transfer(transfer);
-
-   xfer_unmap(xfer);
-
-   switch (xfer->method) {
-   case ILO_TRANSFER_MAP_STAGING:
-      if (!(xfer->base.usage & PIPE_TRANSFER_FLUSH_EXPLICIT))
-         copy_staging_resource(ilo, xfer, NULL);
-      pipe_resource_reference(&xfer->staging.res, NULL);
-      break;
-   case ILO_TRANSFER_MAP_SW_CONVERT:
-   case ILO_TRANSFER_MAP_SW_ZS:
-      tex_staging_sys_writeback(xfer);
-      align_free(xfer->staging.sys);
-      break;
-   default:
-      break;
-   }
-
-   pipe_resource_reference(&xfer->base.resource, NULL);
-
-   slab_free_st(&ilo->transfer_mempool, xfer);
-}
-
-static void *
-ilo_transfer_map(struct pipe_context *pipe,
-                 struct pipe_resource *res,
-                 unsigned level,
-                 unsigned usage,
-                 const struct pipe_box *box,
-                 struct pipe_transfer **transfer)
-{
-   struct ilo_context *ilo = ilo_context(pipe);
-   struct ilo_transfer *xfer;
-   void *ptr;
-
-   /* note that xfer is not zero'd */
-   xfer = slab_alloc_st(&ilo->transfer_mempool);
-   if (!xfer) {
-      *transfer = NULL;
-      return NULL;
-   }
-
-   xfer->base.resource = NULL;
-   pipe_resource_reference(&xfer->base.resource, res);
-   xfer->base.level = level;
-   xfer->base.usage = usage;
-   xfer->base.box = *box;
-
-   ilo_blit_resolve_transfer(ilo, &xfer->base);
-
-   if (choose_transfer_method(ilo, xfer)) {
-      if (res->target == PIPE_BUFFER)
-         ptr = buf_map(xfer);
-      else
-         ptr = tex_map(xfer);
-   }
-   else {
-      ptr = NULL;
-   }
-
-   if (!ptr) {
-      pipe_resource_reference(&xfer->base.resource, NULL);
-      slab_free_st(&ilo->transfer_mempool, xfer);
-      *transfer = NULL;
-      return NULL;
-   }
-
-   *transfer = &xfer->base;
-
-   return ptr;
-}
-
-static void ilo_buffer_subdata(struct pipe_context *pipe,
-                               struct pipe_resource *resource,
-                               unsigned usage, unsigned offset,
-                               unsigned size, const void *data)
-{
-   if (usage & PIPE_TRANSFER_UNSYNCHRONIZED)
-      u_default_buffer_subdata(pipe, resource, usage, offset, size, data);
-   else
-      buf_pwrite(ilo_context(pipe), resource, usage, offset, size, data);
-}
-
-/**
- * Initialize transfer-related functions.
- */
-void
-ilo_init_transfer_functions(struct ilo_context *ilo)
-{
-   ilo->base.transfer_map = ilo_transfer_map;
-   ilo->base.transfer_flush_region = ilo_transfer_flush_region;
-   ilo->base.transfer_unmap = ilo_transfer_unmap;
-   ilo->base.buffer_subdata = ilo_buffer_subdata;
-   ilo->base.texture_subdata = u_default_texture_subdata;
-}
diff --git a/src/gallium/drivers/ilo/ilo_transfer.h b/src/gallium/drivers/ilo/ilo_transfer.h
deleted file mode 100644 (file)
index e41edc1..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_TRANSFER_H
-#define ILO_TRANSFER_H
-
-#include "pipe/p_state.h"
-
-#include "ilo_common.h"
-
-/*
- * Direct mappings are always page aligned, but ILO_TRANSFER_MAP_STAGING is
- * not.
- */
-#define ILO_TRANSFER_MAP_BUFFER_ALIGNMENT 64
-
-enum ilo_transfer_map_method {
-   /* map() / map_gtt() / map_gtt_async() */
-   ILO_TRANSFER_MAP_CPU,
-   ILO_TRANSFER_MAP_GTT,
-   ILO_TRANSFER_MAP_GTT_ASYNC,
-
-   /* use staging resource */
-   ILO_TRANSFER_MAP_STAGING,
-
-   /* use staging system buffer */
-   ILO_TRANSFER_MAP_SW_CONVERT,
-   ILO_TRANSFER_MAP_SW_ZS,
-};
-
-struct ilo_transfer {
-   struct pipe_transfer base;
-
-   enum ilo_transfer_map_method method;
-   /* pipe_resource, system memory, or garbage depending on the method */
-   union {
-      struct pipe_resource *res;
-      void *sys;
-   } staging;
-};
-
-struct ilo_context;
-
-static inline struct ilo_transfer *
-ilo_transfer(struct pipe_transfer *transfer)
-{
-   return (struct ilo_transfer *) transfer;
-}
-
-void
-ilo_init_transfer_functions(struct ilo_context *ilo);
-
-#endif /* ILO_TRANSFER_H */
diff --git a/src/gallium/drivers/ilo/ilo_video.c b/src/gallium/drivers/ilo/ilo_video.c
deleted file mode 100644 (file)
index 04be1da..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "vl/vl_decoder.h"
-#include "vl/vl_video_buffer.h"
-
-#include "ilo_context.h"
-#include "ilo_video.h"
-
-/*
- * Nothing here.  We could make use of the video codec engine someday.
- */
-
-static struct pipe_video_codec *
-ilo_create_video_decoder(struct pipe_context *pipe,
-                         const struct pipe_video_codec *templ)
-{
-   return vl_create_decoder(pipe, templ);
-}
-
-static struct pipe_video_buffer *
-ilo_create_video_buffer(struct pipe_context *pipe,
-                        const struct pipe_video_buffer *templ)
-{
-   return vl_video_buffer_create(pipe, templ);
-}
-
-/**
- * Initialize video-related functions.
- */
-void
-ilo_init_video_functions(struct ilo_context *ilo)
-{
-   ilo->base.create_video_codec = ilo_create_video_decoder;
-   ilo->base.create_video_buffer = ilo_create_video_buffer;
-}
diff --git a/src/gallium/drivers/ilo/ilo_video.h b/src/gallium/drivers/ilo/ilo_video.h
deleted file mode 100644 (file)
index f46cab0..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_VIDEO_H
-#define ILO_VIDEO_H
-
-#include "ilo_common.h"
-
-struct ilo_context;
-
-void
-ilo_init_video_functions(struct ilo_context *ilo);
-
-#endif /* ILO_VIDEO_H */
diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_cs.c b/src/gallium/drivers/ilo/shader/ilo_shader_cs.c
deleted file mode 100644 (file)
index fd86070..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "toy_compiler.h"
-#include "toy_helpers.h"
-#include "toy_legalize.h"
-#include "toy_optimize.h"
-#include "ilo_shader_internal.h"
-
-struct cs_compile_context {
-   struct ilo_shader *shader;
-   const struct ilo_shader_variant *variant;
-
-   struct toy_compiler tc;
-
-   int first_free_grf;
-   int last_free_grf;
-
-   int num_grf_per_vrf;
-
-   int first_free_mrf;
-   int last_free_mrf;
-};
-
-/**
- * Compile the shader.
- */
-static bool
-cs_compile(struct cs_compile_context *ccc)
-{
-   struct toy_compiler *tc = &ccc->tc;
-   struct ilo_shader *sh = ccc->shader;
-
-   toy_compiler_legalize_for_ra(tc);
-   toy_compiler_optimize(tc);
-   toy_compiler_allocate_registers(tc,
-         ccc->first_free_grf,
-         ccc->last_free_grf,
-         ccc->num_grf_per_vrf);
-   toy_compiler_legalize_for_asm(tc);
-
-   if (tc->fail) {
-      ilo_err("failed to legalize FS instructions: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_CS) {
-      ilo_printf("legalized instructions:\n");
-      toy_compiler_dump(tc);
-      ilo_printf("\n");
-   }
-
-   if (true) {
-      sh->kernel = toy_compiler_assemble(tc, &sh->kernel_size);
-   } else {
-      static const uint32_t microcode[] = {
-         /* fill in the microcode here */
-         0x0, 0x0, 0x0, 0x0,
-      };
-      const bool swap = true;
-
-      sh->kernel_size = sizeof(microcode);
-      sh->kernel = MALLOC(sh->kernel_size);
-
-      if (sh->kernel) {
-         const int num_dwords = sizeof(microcode) / 4;
-         const uint32_t *src = microcode;
-         uint32_t *dst = (uint32_t *) sh->kernel;
-         int i;
-
-         for (i = 0; i < num_dwords; i += 4) {
-            if (swap) {
-               dst[i + 0] = src[i + 3];
-               dst[i + 1] = src[i + 2];
-               dst[i + 2] = src[i + 1];
-               dst[i + 3] = src[i + 0];
-            }
-            else {
-               memcpy(dst, src, 16);
-            }
-         }
-      }
-   }
-
-   if (!sh->kernel) {
-      ilo_err("failed to compile CS: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_CS) {
-      ilo_printf("disassembly:\n");
-      toy_compiler_disassemble(tc->dev, sh->kernel, sh->kernel_size, false);
-      ilo_printf("\n");
-   }
-
-   return true;
-}
-
-static void
-cs_dummy(struct cs_compile_context *ccc)
-{
-   struct toy_compiler *tc = &ccc->tc;
-   struct toy_dst header;
-   struct toy_src r0, desc;
-   struct toy_inst *inst;
-
-   header = tdst_ud(tdst(TOY_FILE_MRF, ccc->first_free_mrf, 0));
-   r0 = tsrc_ud(tsrc(TOY_FILE_GRF, 0, 0));
-
-   inst = tc_MOV(tc, header, r0);
-   inst->exec_size = GEN6_EXECSIZE_8;
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-   desc = tsrc_imm_mdesc(tc, true, 1, 0, true,
-         GEN6_MSG_TS_RESOURCE_SELECT_NO_DEREF |
-         GEN6_MSG_TS_REQUESTER_TYPE_ROOT |
-         GEN6_MSG_TS_OPCODE_DEREF);
-
-   tc_SEND(tc, tdst_null(), tsrc_from(header), desc, GEN6_SFID_SPAWNER);
-}
-
-static bool
-cs_setup(struct cs_compile_context *ccc,
-         const struct ilo_shader_state *state,
-         const struct ilo_shader_variant *variant)
-{
-   memset(ccc, 0, sizeof(*ccc));
-
-   ccc->shader = CALLOC_STRUCT(ilo_shader);
-   if (!ccc->shader)
-      return false;
-
-   ccc->variant = variant;
-
-   toy_compiler_init(&ccc->tc, state->info.dev);
-
-   ccc->tc.templ.access_mode = GEN6_ALIGN_1;
-   ccc->tc.templ.qtr_ctrl = GEN6_QTRCTRL_1H;
-   ccc->tc.templ.exec_size = GEN6_EXECSIZE_16;
-   ccc->tc.rect_linear_width = 8;
-
-   ccc->first_free_grf = 1;
-   ccc->last_free_grf = 127;
-
-   /* m0 is reserved for system routines */
-   ccc->first_free_mrf = 1;
-   ccc->last_free_mrf = 15;
-
-   /* instructions are compressed with GEN6_EXECSIZE_16 */
-   ccc->num_grf_per_vrf = 2;
-
-   if (ilo_dev_gen(ccc->tc.dev) >= ILO_GEN(7)) {
-      ccc->last_free_grf -= 15;
-      ccc->first_free_mrf = ccc->last_free_grf + 1;
-      ccc->last_free_mrf = ccc->first_free_mrf + 14;
-   }
-
-   ccc->shader->in.start_grf = 1;
-   ccc->shader->dispatch_16 = true;
-
-   /* INPUT */
-   ccc->shader->bt.const_base = 0;
-   ccc->shader->bt.const_count = 1;
-
-   /* a GLOBAL */
-   ccc->shader->bt.global_base = 1;
-   ccc->shader->bt.global_count = 1;
-
-   ccc->shader->bt.total_count = 2;
-
-   return true;
-}
-
-/**
- * Compile the compute shader.
- */
-struct ilo_shader *
-ilo_shader_compile_cs(const struct ilo_shader_state *state,
-                      const struct ilo_shader_variant *variant)
-{
-   struct cs_compile_context ccc;
-
-   ILO_DEV_ASSERT(state->info.dev, 7, 7.5);
-
-   if (!cs_setup(&ccc, state, variant))
-      return NULL;
-
-   cs_dummy(&ccc);
-
-   if (!cs_compile(&ccc)) {
-      FREE(ccc.shader);
-      ccc.shader = NULL;
-   }
-
-   toy_compiler_cleanup(&ccc.tc);
-
-   return ccc.shader;
-}
diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_fs.c b/src/gallium/drivers/ilo/shader/ilo_shader_fs.c
deleted file mode 100644 (file)
index c55e9fa..0000000
+++ /dev/null
@@ -1,1909 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "tgsi/tgsi_dump.h"
-#include "tgsi/tgsi_util.h"
-#include "toy_compiler.h"
-#include "toy_tgsi.h"
-#include "toy_legalize.h"
-#include "toy_optimize.h"
-#include "toy_helpers.h"
-#include "ilo_shader_internal.h"
-
-struct fs_compile_context {
-   struct ilo_shader *shader;
-   const struct ilo_shader_variant *variant;
-
-   struct toy_compiler tc;
-   struct toy_tgsi tgsi;
-
-   int const_cache;
-   int dispatch_mode;
-
-   struct {
-      int interp_perspective_pixel;
-      int interp_perspective_centroid;
-      int interp_perspective_sample;
-      int interp_nonperspective_pixel;
-      int interp_nonperspective_centroid;
-      int interp_nonperspective_sample;
-      int source_depth;
-      int source_w;
-      int pos_offset;
-   } payloads[2];
-
-   int first_const_grf;
-   int first_attr_grf;
-   int first_free_grf;
-   int last_free_grf;
-
-   int num_grf_per_vrf;
-
-   int first_free_mrf;
-   int last_free_mrf;
-};
-
-static void
-fetch_position(struct fs_compile_context *fcc, struct toy_dst dst)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   const struct toy_src src_z =
-      tsrc(TOY_FILE_GRF, fcc->payloads[0].source_depth, 0);
-   const struct toy_src src_w =
-      tsrc(TOY_FILE_GRF, fcc->payloads[0].source_w, 0);
-   const int fb_height =
-      (fcc->variant->u.fs.fb_height) ? fcc->variant->u.fs.fb_height : 1;
-   const bool origin_upper_left =
-      (fcc->tgsi.props.fs_coord_origin == TGSI_FS_COORD_ORIGIN_UPPER_LEFT);
-   const bool pixel_center_integer =
-      (fcc->tgsi.props.fs_coord_pixel_center ==
-       TGSI_FS_COORD_PIXEL_CENTER_INTEGER);
-   struct toy_src subspan_x, subspan_y;
-   struct toy_dst tmp, tmp_uw;
-   struct toy_dst real_dst[4];
-
-   tdst_transpose(dst, real_dst);
-
-   subspan_x = tsrc_uw(tsrc(TOY_FILE_GRF, 1, 2 * 4));
-   subspan_x = tsrc_rect(subspan_x, TOY_RECT_240);
-
-   subspan_y = tsrc_offset(subspan_x, 0, 1);
-
-   tmp_uw = tdst_uw(tc_alloc_tmp(tc));
-   tmp = tc_alloc_tmp(tc);
-
-   /* X */
-   tc_ADD(tc, tmp_uw, subspan_x, tsrc_imm_v(0x10101010));
-   tc_MOV(tc, tmp, tsrc_from(tmp_uw));
-   if (pixel_center_integer)
-      tc_MOV(tc, real_dst[0], tsrc_from(tmp));
-   else
-      tc_ADD(tc, real_dst[0], tsrc_from(tmp), tsrc_imm_f(0.5f));
-
-   /* Y */
-   tc_ADD(tc, tmp_uw, subspan_y, tsrc_imm_v(0x11001100));
-   tc_MOV(tc, tmp, tsrc_from(tmp_uw));
-   if (origin_upper_left && pixel_center_integer) {
-      tc_MOV(tc, real_dst[1], tsrc_from(tmp));
-   }
-   else {
-      struct toy_src y = tsrc_from(tmp);
-      float offset = 0.0f;
-
-      if (!pixel_center_integer)
-         offset += 0.5f;
-
-      if (!origin_upper_left) {
-         offset += (float) (fb_height - 1);
-         y = tsrc_negate(y);
-      }
-
-      tc_ADD(tc, real_dst[1], y, tsrc_imm_f(offset));
-   }
-
-   /* Z and W */
-   tc_MOV(tc, real_dst[2], src_z);
-   tc_INV(tc, real_dst[3], src_w);
-}
-
-static void
-fetch_face(struct fs_compile_context *fcc, struct toy_dst dst)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   const struct toy_src r0 = tsrc_d(tsrc(TOY_FILE_GRF, 0, 0));
-   struct toy_dst tmp_f, tmp;
-   struct toy_dst real_dst[4];
-
-   tdst_transpose(dst, real_dst);
-
-   tmp_f = tc_alloc_tmp(tc);
-   tmp = tdst_d(tmp_f);
-   tc_SHR(tc, tmp, tsrc_rect(r0, TOY_RECT_010), tsrc_imm_d(15));
-   tc_AND(tc, tmp, tsrc_from(tmp), tsrc_imm_d(1));
-   tc_MOV(tc, tmp_f, tsrc_from(tmp));
-
-   /* convert to 1.0 and -1.0 */
-   tc_MUL(tc, tmp_f, tsrc_from(tmp_f), tsrc_imm_f(-2.0f));
-   tc_ADD(tc, real_dst[0], tsrc_from(tmp_f), tsrc_imm_f(1.0f));
-
-   tc_MOV(tc, real_dst[1], tsrc_imm_f(0.0f));
-   tc_MOV(tc, real_dst[2], tsrc_imm_f(0.0f));
-   tc_MOV(tc, real_dst[3], tsrc_imm_f(1.0f));
-}
-
-static void
-fetch_attr(struct fs_compile_context *fcc, struct toy_dst dst, int slot)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   struct toy_dst real_dst[4];
-   bool is_const = false;
-   int grf, interp, ch;
-
-   tdst_transpose(dst, real_dst);
-
-   grf = fcc->first_attr_grf + slot * 2;
-
-   switch (fcc->tgsi.inputs[slot].interp) {
-   case TGSI_INTERPOLATE_CONSTANT:
-      is_const = true;
-      break;
-   case TGSI_INTERPOLATE_LINEAR:
-      if (fcc->tgsi.inputs[slot].centroid)
-         interp = fcc->payloads[0].interp_nonperspective_centroid;
-      else
-         interp = fcc->payloads[0].interp_nonperspective_pixel;
-      break;
-   case TGSI_INTERPOLATE_COLOR:
-      if (fcc->variant->u.fs.flatshade) {
-         is_const = true;
-         break;
-      }
-      /* fall through */
-   case TGSI_INTERPOLATE_PERSPECTIVE:
-      if (fcc->tgsi.inputs[slot].centroid)
-         interp = fcc->payloads[0].interp_perspective_centroid;
-      else
-         interp = fcc->payloads[0].interp_perspective_pixel;
-      break;
-   default:
-      assert(!"unexpected FS interpolation");
-      interp = fcc->payloads[0].interp_perspective_pixel;
-      break;
-   }
-
-   if (is_const) {
-      struct toy_src a0[4];
-
-      a0[0] = tsrc(TOY_FILE_GRF, grf + 0, 3 * 4);
-      a0[1] = tsrc(TOY_FILE_GRF, grf + 0, 7 * 4);
-      a0[2] = tsrc(TOY_FILE_GRF, grf + 1, 3 * 4);
-      a0[3] = tsrc(TOY_FILE_GRF, grf + 1, 7 * 4);
-
-      for (ch = 0; ch < 4; ch++)
-         tc_MOV(tc, real_dst[ch], tsrc_rect(a0[ch], TOY_RECT_010));
-   }
-   else {
-      struct toy_src attr[4], uv;
-
-      attr[0] = tsrc(TOY_FILE_GRF, grf + 0, 0);
-      attr[1] = tsrc(TOY_FILE_GRF, grf + 0, 4 * 4);
-      attr[2] = tsrc(TOY_FILE_GRF, grf + 1, 0);
-      attr[3] = tsrc(TOY_FILE_GRF, grf + 1, 4 * 4);
-
-      uv = tsrc(TOY_FILE_GRF, interp, 0);
-
-      for (ch = 0; ch < 4; ch++) {
-         tc_add2(tc, GEN6_OPCODE_PLN, real_dst[ch],
-               tsrc_rect(attr[ch], TOY_RECT_010), uv);
-      }
-   }
-
-   if (fcc->tgsi.inputs[slot].semantic_name == TGSI_SEMANTIC_FOG) {
-      tc_MOV(tc, real_dst[1], tsrc_imm_f(0.0f));
-      tc_MOV(tc, real_dst[2], tsrc_imm_f(0.0f));
-      tc_MOV(tc, real_dst[3], tsrc_imm_f(1.0f));
-   }
-}
-
-static void
-fs_lower_opcode_tgsi_in(struct fs_compile_context *fcc,
-                        struct toy_dst dst, int dim, int idx)
-{
-   int slot;
-
-   assert(!dim);
-
-   slot = toy_tgsi_find_input(&fcc->tgsi, idx);
-   if (slot < 0)
-      return;
-
-   switch (fcc->tgsi.inputs[slot].semantic_name) {
-   case TGSI_SEMANTIC_POSITION:
-      fetch_position(fcc, dst);
-      break;
-   case TGSI_SEMANTIC_FACE:
-      fetch_face(fcc, dst);
-      break;
-   default:
-      fetch_attr(fcc, dst, slot);
-      break;
-   }
-}
-
-static void
-fs_lower_opcode_tgsi_indirect_const(struct fs_compile_context *fcc,
-                                    struct toy_dst dst, int dim,
-                                    struct toy_src idx)
-{
-   const struct toy_dst offset =
-      tdst_ud(tdst(TOY_FILE_MRF, fcc->first_free_mrf, 0));
-   struct toy_compiler *tc = &fcc->tc;
-   unsigned simd_mode, param_size;
-   struct toy_inst *inst;
-   struct toy_src desc, real_src[4];
-   struct toy_dst tmp, real_dst[4];
-   unsigned i;
-
-   tsrc_transpose(idx, real_src);
-
-   /* set offset */
-   inst = tc_MOV(tc, offset, real_src[0]);
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-   switch (inst->exec_size) {
-   case GEN6_EXECSIZE_8:
-      simd_mode = GEN6_MSG_SAMPLER_SIMD8;
-      param_size = 1;
-      break;
-   case GEN6_EXECSIZE_16:
-      simd_mode = GEN6_MSG_SAMPLER_SIMD16;
-      param_size = 2;
-      break;
-   default:
-      assert(!"unsupported execution size");
-      tc_MOV(tc, dst, tsrc_imm_f(0.0f));
-      return;
-      break;
-   }
-
-   desc = tsrc_imm_mdesc_sampler(tc, param_size, param_size * 4, false,
-         simd_mode,
-         GEN6_MSG_SAMPLER_LD,
-         0,
-         fcc->shader->bt.const_base + dim);
-
-   tmp = tdst(TOY_FILE_VRF, tc_alloc_vrf(tc, param_size * 4), 0);
-   inst = tc_SEND(tc, tmp, tsrc_from(offset), desc, GEN6_SFID_SAMPLER);
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-   tdst_transpose(dst, real_dst);
-   for (i = 0; i < 4; i++) {
-      const struct toy_src src =
-         tsrc_offset(tsrc_from(tmp), param_size * i, 0);
-
-      /* cast to type D to make sure these are raw moves */
-      tc_MOV(tc, tdst_d(real_dst[i]), tsrc_d(src));
-   }
-}
-
-static bool
-fs_lower_opcode_tgsi_const_pcb(struct fs_compile_context *fcc,
-                               struct toy_dst dst, int dim,
-                               struct toy_src idx)
-{
-   const int grf = fcc->first_const_grf + idx.val32 / 2;
-   const int grf_subreg = (idx.val32 & 1) * 16;
-   struct toy_src src;
-   struct toy_dst real_dst[4];
-   unsigned i;
-
-   if (!fcc->variant->use_pcb || dim != 0 || idx.file != TOY_FILE_IMM ||
-       grf >= fcc->first_attr_grf)
-      return false;
-
-   src = tsrc_rect(tsrc(TOY_FILE_GRF, grf, grf_subreg), TOY_RECT_010);
-
-   tdst_transpose(dst, real_dst);
-   for (i = 0; i < 4; i++) {
-      /* cast to type D to make sure these are raw moves */
-      tc_MOV(&fcc->tc, tdst_d(real_dst[i]), tsrc_d(tsrc_offset(src, 0, i)));
-   }
-
-   return true;
-}
-
-static void
-fs_lower_opcode_tgsi_const_gen6(struct fs_compile_context *fcc,
-                                struct toy_dst dst, int dim, struct toy_src idx)
-{
-   const struct toy_dst header =
-      tdst_ud(tdst(TOY_FILE_MRF, fcc->first_free_mrf, 0));
-   const struct toy_dst global_offset =
-      tdst_ud(tdst(TOY_FILE_MRF, fcc->first_free_mrf, 2 * 4));
-   const struct toy_src r0 = tsrc_ud(tsrc(TOY_FILE_GRF, 0, 0));
-   struct toy_compiler *tc = &fcc->tc;
-   unsigned msg_type, msg_ctrl, msg_len;
-   struct toy_inst *inst;
-   struct toy_src desc;
-   struct toy_dst tmp, real_dst[4];
-   unsigned i;
-
-   if (fs_lower_opcode_tgsi_const_pcb(fcc, dst, dim, idx))
-      return;
-
-   /* set message header */
-   inst = tc_MOV(tc, header, r0);
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-   /* set global offset */
-   inst = tc_MOV(tc, global_offset, idx);
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-   inst->exec_size = GEN6_EXECSIZE_1;
-   inst->src[0].rect = TOY_RECT_010;
-
-   msg_type = GEN6_MSG_DP_OWORD_BLOCK_READ;
-   msg_ctrl = GEN6_MSG_DP_OWORD_BLOCK_SIZE_1_LO;
-   msg_len = 1;
-
-   desc = tsrc_imm_mdesc_data_port(tc, false, msg_len, 1, true, false,
-         msg_type, msg_ctrl, fcc->shader->bt.const_base + dim);
-
-   tmp = tc_alloc_tmp(tc);
-
-   tc_SEND(tc, tmp, tsrc_from(header), desc, fcc->const_cache);
-
-   tdst_transpose(dst, real_dst);
-   for (i = 0; i < 4; i++) {
-      const struct toy_src src =
-         tsrc_offset(tsrc_rect(tsrc_from(tmp), TOY_RECT_010), 0, i);
-
-      /* cast to type D to make sure these are raw moves */
-      tc_MOV(tc, tdst_d(real_dst[i]), tsrc_d(src));
-   }
-}
-
-static void
-fs_lower_opcode_tgsi_const_gen7(struct fs_compile_context *fcc,
-                                struct toy_dst dst, int dim, struct toy_src idx)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   const struct toy_dst offset =
-      tdst_ud(tdst(TOY_FILE_MRF, fcc->first_free_mrf, 0));
-   struct toy_src desc;
-   struct toy_inst *inst;
-   struct toy_dst tmp, real_dst[4];
-   unsigned i;
-
-   if (fs_lower_opcode_tgsi_const_pcb(fcc, dst, dim, idx))
-      return;
-
-   /*
-    * In 4c1fdae0a01b3f92ec03b61aac1d3df500d51fc6, pull constant load was
-    * changed from OWord Block Read to ld to increase performance in the
-    * classic driver.  Since we use the constant cache instead of the data
-    * cache, I wonder if we still want to follow the classic driver.
-    */
-
-   /* set offset */
-   inst = tc_MOV(tc, offset, tsrc_rect(idx, TOY_RECT_010));
-   inst->exec_size = GEN6_EXECSIZE_8;
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-   desc = tsrc_imm_mdesc_sampler(tc, 1, 1, false,
-         GEN6_MSG_SAMPLER_SIMD4X2,
-         GEN6_MSG_SAMPLER_LD,
-         0,
-         fcc->shader->bt.const_base + dim);
-
-   tmp = tc_alloc_tmp(tc);
-   inst = tc_SEND(tc, tmp, tsrc_from(offset), desc, GEN6_SFID_SAMPLER);
-   inst->exec_size = GEN6_EXECSIZE_8;
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-   tdst_transpose(dst, real_dst);
-   for (i = 0; i < 4; i++) {
-      const struct toy_src src =
-         tsrc_offset(tsrc_rect(tsrc_from(tmp), TOY_RECT_010), 0, i);
-
-      /* cast to type D to make sure these are raw moves */
-      tc_MOV(tc, tdst_d(real_dst[i]), tsrc_d(src));
-   }
-}
-
-static void
-fs_lower_opcode_tgsi_imm(struct fs_compile_context *fcc,
-                         struct toy_dst dst, int idx)
-{
-   const uint32_t *imm;
-   struct toy_dst real_dst[4];
-   int ch;
-
-   imm = toy_tgsi_get_imm(&fcc->tgsi, idx, NULL);
-
-   tdst_transpose(dst, real_dst);
-   /* raw moves */
-   for (ch = 0; ch < 4; ch++)
-      tc_MOV(&fcc->tc, tdst_ud(real_dst[ch]), tsrc_imm_ud(imm[ch]));
-}
-
-static void
-fs_lower_opcode_tgsi_sv(struct fs_compile_context *fcc,
-                        struct toy_dst dst, int dim, int idx)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   const struct toy_tgsi *tgsi = &fcc->tgsi;
-   int slot;
-
-   assert(!dim);
-
-   slot = toy_tgsi_find_system_value(tgsi, idx);
-   if (slot < 0)
-      return;
-
-   switch (tgsi->system_values[slot].semantic_name) {
-   case TGSI_SEMANTIC_PRIMID:
-   case TGSI_SEMANTIC_INSTANCEID:
-   case TGSI_SEMANTIC_VERTEXID:
-   default:
-      tc_fail(tc, "unhandled system value");
-      tc_MOV(tc, dst, tsrc_imm_d(0));
-      break;
-   }
-}
-
-static void
-fs_lower_opcode_tgsi_direct(struct fs_compile_context *fcc,
-                            struct toy_inst *inst)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   int dim, idx;
-
-   assert(inst->src[0].file == TOY_FILE_IMM);
-   dim = inst->src[0].val32;
-
-   assert(inst->src[1].file == TOY_FILE_IMM);
-   idx = inst->src[1].val32;
-
-   switch (inst->opcode) {
-   case TOY_OPCODE_TGSI_IN:
-      fs_lower_opcode_tgsi_in(fcc, inst->dst, dim, idx);
-      break;
-   case TOY_OPCODE_TGSI_CONST:
-      if (ilo_dev_gen(tc->dev) >= ILO_GEN(7))
-         fs_lower_opcode_tgsi_const_gen7(fcc, inst->dst, dim, inst->src[1]);
-      else
-         fs_lower_opcode_tgsi_const_gen6(fcc, inst->dst, dim, inst->src[1]);
-      break;
-   case TOY_OPCODE_TGSI_SV:
-      fs_lower_opcode_tgsi_sv(fcc, inst->dst, dim, idx);
-      break;
-   case TOY_OPCODE_TGSI_IMM:
-      assert(!dim);
-      fs_lower_opcode_tgsi_imm(fcc, inst->dst, idx);
-      break;
-   default:
-      tc_fail(tc, "unhandled TGSI fetch");
-      break;
-   }
-
-   tc_discard_inst(tc, inst);
-}
-
-static void
-fs_lower_opcode_tgsi_indirect(struct fs_compile_context *fcc,
-                              struct toy_inst *inst)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   enum tgsi_file_type file;
-   int dim, idx;
-   struct toy_src indirect_dim, indirect_idx;
-
-   assert(inst->src[0].file == TOY_FILE_IMM);
-   file = inst->src[0].val32;
-
-   assert(inst->src[1].file == TOY_FILE_IMM);
-   dim = inst->src[1].val32;
-   indirect_dim = inst->src[2];
-
-   assert(inst->src[3].file == TOY_FILE_IMM);
-   idx = inst->src[3].val32;
-   indirect_idx = inst->src[4];
-
-   /* no dimension indirection */
-   assert(indirect_dim.file == TOY_FILE_IMM);
-   dim += indirect_dim.val32;
-
-   switch (inst->opcode) {
-   case TOY_OPCODE_TGSI_INDIRECT_FETCH:
-      if (file == TGSI_FILE_CONSTANT) {
-         if (idx) {
-            struct toy_dst tmp = tc_alloc_tmp(tc);
-
-            tc_ADD(tc, tmp, indirect_idx, tsrc_imm_d(idx));
-            indirect_idx = tsrc_from(tmp);
-         }
-
-         fs_lower_opcode_tgsi_indirect_const(fcc, inst->dst, dim, indirect_idx);
-         break;
-      }
-      /* fall through */
-   case TOY_OPCODE_TGSI_INDIRECT_STORE:
-   default:
-      tc_fail(tc, "unhandled TGSI indirection");
-      break;
-   }
-
-   tc_discard_inst(tc, inst);
-}
-
-/**
- * Emit instructions to move sampling parameters to the message registers.
- */
-static int
-fs_add_sampler_params_gen6(struct toy_compiler *tc, int msg_type,
-                           int base_mrf, int param_size,
-                           struct toy_src *coords, int num_coords,
-                           struct toy_src bias_or_lod, struct toy_src ref_or_si,
-                           struct toy_src *ddx, struct toy_src *ddy,
-                           int num_derivs)
-{
-   int num_params, i;
-
-   assert(num_coords <= 4);
-   assert(num_derivs <= 3 && num_derivs <= num_coords);
-
-#define SAMPLER_PARAM(p) (tdst(TOY_FILE_MRF, base_mrf + (p) * param_size, 0))
-   switch (msg_type) {
-   case GEN6_MSG_SAMPLER_SAMPLE:
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, SAMPLER_PARAM(i), coords[i]);
-      num_params = num_coords;
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_B:
-   case GEN6_MSG_SAMPLER_SAMPLE_L:
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, SAMPLER_PARAM(i), coords[i]);
-      tc_MOV(tc, SAMPLER_PARAM(4), bias_or_lod);
-      num_params = 5;
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_C:
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, SAMPLER_PARAM(i), coords[i]);
-      tc_MOV(tc, SAMPLER_PARAM(4), ref_or_si);
-      num_params = 5;
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_D:
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, SAMPLER_PARAM(i), coords[i]);
-      for (i = 0; i < num_derivs; i++) {
-         tc_MOV(tc, SAMPLER_PARAM(4 + i * 2), ddx[i]);
-         tc_MOV(tc, SAMPLER_PARAM(5 + i * 2), ddy[i]);
-      }
-      num_params = 4 + num_derivs * 2;
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_B_C:
-   case GEN6_MSG_SAMPLER_SAMPLE_L_C:
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, SAMPLER_PARAM(i), coords[i]);
-      tc_MOV(tc, SAMPLER_PARAM(4), ref_or_si);
-      tc_MOV(tc, SAMPLER_PARAM(5), bias_or_lod);
-      num_params = 6;
-      break;
-   case GEN6_MSG_SAMPLER_LD:
-      assert(num_coords <= 3);
-
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, tdst_d(SAMPLER_PARAM(i)), coords[i]);
-      tc_MOV(tc, tdst_d(SAMPLER_PARAM(3)), bias_or_lod);
-      tc_MOV(tc, tdst_d(SAMPLER_PARAM(4)), ref_or_si);
-      num_params = 5;
-      break;
-   case GEN6_MSG_SAMPLER_RESINFO:
-      tc_MOV(tc, tdst_d(SAMPLER_PARAM(0)), bias_or_lod);
-      num_params = 1;
-      break;
-   default:
-      tc_fail(tc, "unknown sampler opcode");
-      num_params = 0;
-      break;
-   }
-#undef SAMPLER_PARAM
-
-   return num_params * param_size;
-}
-
-static int
-fs_add_sampler_params_gen7(struct toy_compiler *tc, int msg_type,
-                           int base_mrf, int param_size,
-                           struct toy_src *coords, int num_coords,
-                           struct toy_src bias_or_lod, struct toy_src ref_or_si,
-                           struct toy_src *ddx, struct toy_src *ddy,
-                           int num_derivs)
-{
-   int num_params, i;
-
-   assert(num_coords <= 4);
-   assert(num_derivs <= 3 && num_derivs <= num_coords);
-
-#define SAMPLER_PARAM(p) (tdst(TOY_FILE_MRF, base_mrf + (p) * param_size, 0))
-   switch (msg_type) {
-   case GEN6_MSG_SAMPLER_SAMPLE:
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, SAMPLER_PARAM(i), coords[i]);
-      num_params = num_coords;
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_B:
-   case GEN6_MSG_SAMPLER_SAMPLE_L:
-      tc_MOV(tc, SAMPLER_PARAM(0), bias_or_lod);
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, SAMPLER_PARAM(1 + i), coords[i]);
-      num_params = 1 + num_coords;
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_C:
-      tc_MOV(tc, SAMPLER_PARAM(0), ref_or_si);
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, SAMPLER_PARAM(1 + i), coords[i]);
-      num_params = 1 + num_coords;
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_D:
-      for (i = 0; i < num_coords; i++) {
-         tc_MOV(tc, SAMPLER_PARAM(i * 3), coords[i]);
-         if (i < num_derivs) {
-            tc_MOV(tc, SAMPLER_PARAM(i * 3 + 1), ddx[i]);
-            tc_MOV(tc, SAMPLER_PARAM(i * 3 + 2), ddy[i]);
-         }
-      }
-      num_params = num_coords * 3 - ((num_coords > num_derivs) ? 2 : 0);
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_B_C:
-   case GEN6_MSG_SAMPLER_SAMPLE_L_C:
-      tc_MOV(tc, SAMPLER_PARAM(0), ref_or_si);
-      tc_MOV(tc, SAMPLER_PARAM(1), bias_or_lod);
-      for (i = 0; i < num_coords; i++)
-         tc_MOV(tc, SAMPLER_PARAM(2 + i), coords[i]);
-      num_params = 2 + num_coords;
-      break;
-   case GEN6_MSG_SAMPLER_LD:
-      assert(num_coords >= 1 && num_coords <= 3);
-
-      tc_MOV(tc, tdst_d(SAMPLER_PARAM(0)), coords[0]);
-      tc_MOV(tc, tdst_d(SAMPLER_PARAM(1)), bias_or_lod);
-      for (i = 1; i < num_coords; i++)
-         tc_MOV(tc, tdst_d(SAMPLER_PARAM(1 + i)), coords[i]);
-      num_params = 1 + num_coords;
-      break;
-   case GEN6_MSG_SAMPLER_RESINFO:
-      tc_MOV(tc, tdst_d(SAMPLER_PARAM(0)), bias_or_lod);
-      num_params = 1;
-      break;
-   default:
-      tc_fail(tc, "unknown sampler opcode");
-      num_params = 0;
-      break;
-   }
-#undef SAMPLER_PARAM
-
-   return num_params * param_size;
-}
-
-/**
- * Set up message registers and return the message descriptor for sampling.
- */
-static struct toy_src
-fs_prepare_tgsi_sampling(struct fs_compile_context *fcc,
-                         const struct toy_inst *inst,
-                         int base_mrf, const uint32_t *saturate_coords,
-                         unsigned *ret_sampler_index)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   unsigned simd_mode, msg_type, msg_len, sampler_index, binding_table_index;
-   struct toy_src coords[4], ddx[4], ddy[4], bias_or_lod, ref_or_si;
-   int num_coords, ref_pos, num_derivs;
-   int sampler_src, param_size, i;
-
-   switch (inst->exec_size) {
-   case GEN6_EXECSIZE_8:
-      simd_mode = GEN6_MSG_SAMPLER_SIMD8;
-      param_size = 1;
-      break;
-   case GEN6_EXECSIZE_16:
-      simd_mode = GEN6_MSG_SAMPLER_SIMD16;
-      param_size = 2;
-      break;
-   default:
-      tc_fail(tc, "unsupported execute size for sampling");
-      return tsrc_null();
-      break;
-   }
-
-   num_coords = tgsi_util_get_texture_coord_dim(inst->tex.target);
-   ref_pos = tgsi_util_get_shadow_ref_src_index(inst->tex.target);
-
-   tsrc_transpose(inst->src[0], coords);
-   bias_or_lod = tsrc_null();
-   ref_or_si = tsrc_null();
-   num_derivs = 0;
-   sampler_src = 1;
-
-   /*
-    * For TXD,
-    *
-    *   src0 := (x, y, z, w)
-    *   src1 := ddx
-    *   src2 := ddy
-    *   src3 := sampler
-    *
-    * For TEX2, TXB2, and TXL2,
-    *
-    *   src0 := (x, y, z, w)
-    *   src1 := (v or bias or lod, ...)
-    *   src2 := sampler
-    *
-    * For TEX, TXB, TXL, and TXP,
-    *
-    *   src0 := (x, y, z, w or bias or lod or projection)
-    *   src1 := sampler
-    *
-    * For TXQ,
-    *
-    *   src0 := (lod, ...)
-    *   src1 := sampler
-    *
-    * For TXQ_LZ,
-    *
-    *   src0 := sampler
-    *
-    * And for TXF,
-    *
-    *   src0 := (x, y, z, w or lod)
-    *   src1 := sampler
-    *
-    * State trackers should not generate opcode+texture combinations with
-    * which the two definitions conflict (e.g., TXB with SHADOW2DARRAY).
-    */
-   switch (inst->opcode) {
-   case TOY_OPCODE_TGSI_TEX:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 4);
-
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_C;
-         ref_or_si = coords[ref_pos];
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE;
-      }
-      break;
-   case TOY_OPCODE_TGSI_TXD:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 4);
-
-         msg_type = GEN7_MSG_SAMPLER_SAMPLE_D_C;
-         ref_or_si = coords[ref_pos];
-
-         if (ilo_dev_gen(tc->dev) < ILO_GEN(7.5))
-            tc_fail(tc, "TXD with shadow sampler not supported");
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_D;
-      }
-
-      tsrc_transpose(inst->src[1], ddx);
-      tsrc_transpose(inst->src[2], ddy);
-      num_derivs = num_coords;
-      sampler_src = 3;
-      break;
-   case TOY_OPCODE_TGSI_TXP:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 3);
-
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_C;
-         ref_or_si = coords[ref_pos];
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE;
-      }
-
-      /* project the coordinates */
-      {
-         struct toy_dst tmp[4];
-
-         tc_alloc_tmp4(tc, tmp);
-
-         tc_INV(tc, tmp[3], coords[3]);
-         for (i = 0; i < num_coords && i < 3; i++) {
-            tc_MUL(tc, tmp[i], coords[i], tsrc_from(tmp[3]));
-            coords[i] = tsrc_from(tmp[i]);
-         }
-
-         if (ref_pos >= i) {
-            tc_MUL(tc, tmp[ref_pos], ref_or_si, tsrc_from(tmp[3]));
-            ref_or_si = tsrc_from(tmp[ref_pos]);
-         }
-      }
-      break;
-   case TOY_OPCODE_TGSI_TXB:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 3);
-
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_B_C;
-         ref_or_si = coords[ref_pos];
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_B;
-      }
-
-      bias_or_lod = coords[3];
-      break;
-   case TOY_OPCODE_TGSI_TXL:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 3);
-
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_L_C;
-         ref_or_si = coords[ref_pos];
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_L;
-      }
-
-      bias_or_lod = coords[3];
-      break;
-   case TOY_OPCODE_TGSI_TXF:
-      msg_type = GEN6_MSG_SAMPLER_LD;
-
-      switch (inst->tex.target) {
-      case TGSI_TEXTURE_2D_MSAA:
-      case TGSI_TEXTURE_2D_ARRAY_MSAA:
-         assert(ref_pos >= 0 && ref_pos < 4);
-         /* lod is always 0 */
-         bias_or_lod = tsrc_imm_d(0);
-         ref_or_si = coords[ref_pos];
-         break;
-      default:
-         bias_or_lod = coords[3];
-         break;
-      }
-
-      /* offset the coordinates */
-      if (!tsrc_is_null(inst->tex.offsets[0])) {
-         struct toy_dst tmp[4];
-         struct toy_src offsets[4];
-
-         tc_alloc_tmp4(tc, tmp);
-         tsrc_transpose(inst->tex.offsets[0], offsets);
-
-         for (i = 0; i < num_coords; i++) {
-            tc_ADD(tc, tmp[i], coords[i], offsets[i]);
-            coords[i] = tsrc_from(tmp[i]);
-         }
-      }
-
-      sampler_src = 1;
-      break;
-   case TOY_OPCODE_TGSI_TXQ:
-      msg_type = GEN6_MSG_SAMPLER_RESINFO;
-      num_coords = 0;
-      bias_or_lod = coords[0];
-      break;
-   case TOY_OPCODE_TGSI_TXQ_LZ:
-      msg_type = GEN6_MSG_SAMPLER_RESINFO;
-      num_coords = 0;
-      sampler_src = 0;
-      break;
-   case TOY_OPCODE_TGSI_TEX2:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 5);
-
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_C;
-
-         if (ref_pos >= 4) {
-            struct toy_src src1[4];
-            tsrc_transpose(inst->src[1], src1);
-            ref_or_si = src1[ref_pos - 4];
-         }
-         else {
-            ref_or_si = coords[ref_pos];
-         }
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE;
-      }
-
-      sampler_src = 2;
-      break;
-   case TOY_OPCODE_TGSI_TXB2:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 4);
-
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_B_C;
-         ref_or_si = coords[ref_pos];
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_B;
-      }
-
-      {
-         struct toy_src src1[4];
-         tsrc_transpose(inst->src[1], src1);
-         bias_or_lod = src1[0];
-      }
-
-      sampler_src = 2;
-      break;
-   case TOY_OPCODE_TGSI_TXL2:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 4);
-
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_L_C;
-         ref_or_si = coords[ref_pos];
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_L;
-      }
-
-      {
-         struct toy_src src1[4];
-         tsrc_transpose(inst->src[1], src1);
-         bias_or_lod = src1[0];
-      }
-
-      sampler_src = 2;
-      break;
-   default:
-      assert(!"unhandled sampling opcode");
-      return tsrc_null();
-      break;
-   }
-
-   assert(inst->src[sampler_src].file == TOY_FILE_IMM);
-   sampler_index = inst->src[sampler_src].val32;
-   binding_table_index = fcc->shader->bt.tex_base + sampler_index;
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 18:
-    *
-    *     "Note that the (cube map) coordinates delivered to the sampling
-    *      engine must already have been divided by the component with the
-    *      largest absolute value."
-    */
-   switch (inst->tex.target) {
-   case TGSI_TEXTURE_CUBE:
-   case TGSI_TEXTURE_SHADOWCUBE:
-   case TGSI_TEXTURE_CUBE_ARRAY:
-   case TGSI_TEXTURE_SHADOWCUBE_ARRAY:
-      /* TXQ does not need coordinates */
-      if (num_coords >= 3) {
-         struct toy_dst tmp[4];
-
-         tc_alloc_tmp4(tc, tmp);
-
-         tc_SEL(tc, tmp[3], tsrc_absolute(coords[0]),
-               tsrc_absolute(coords[1]), GEN6_COND_GE);
-         tc_SEL(tc, tmp[3], tsrc_from(tmp[3]),
-               tsrc_absolute(coords[2]), GEN6_COND_GE);
-         tc_INV(tc, tmp[3], tsrc_from(tmp[3]));
-
-         for (i = 0; i < 3; i++) {
-            tc_MUL(tc, tmp[i], coords[i], tsrc_from(tmp[3]));
-            coords[i] = tsrc_from(tmp[i]);
-         }
-      }
-      break;
-   }
-
-   /*
-    * Saturate (s, t, r).  saturate_coords is set for sampler and coordinate
-    * that uses linear filtering and PIPE_TEX_WRAP_CLAMP respectively.  It is
-    * so that sampling outside the border gets the correct colors.
-    */
-   for (i = 0; i < MIN2(num_coords, 3); i++) {
-      bool is_rect;
-
-      if (!(saturate_coords[i] & (1 << sampler_index)))
-         continue;
-
-      switch (inst->tex.target) {
-      case TGSI_TEXTURE_RECT:
-      case TGSI_TEXTURE_SHADOWRECT:
-         is_rect = true;
-         break;
-      default:
-         is_rect = false;
-         break;
-      }
-
-      if (is_rect) {
-         struct toy_src min, max;
-         struct toy_dst tmp;
-
-         tc_fail(tc, "GL_CLAMP with rectangle texture unsupported");
-         tmp = tc_alloc_tmp(tc);
-
-         /* saturate to [0, width] or [0, height] */
-         /* TODO TXQ? */
-         min = tsrc_imm_f(0.0f);
-         max = tsrc_imm_f(2048.0f);
-
-         tc_SEL(tc, tmp, coords[i], min, GEN6_COND_G);
-         tc_SEL(tc, tmp, tsrc_from(tmp), max, GEN6_COND_L);
-
-         coords[i] = tsrc_from(tmp);
-      }
-      else {
-         struct toy_dst tmp;
-         struct toy_inst *inst2;
-
-         tmp = tc_alloc_tmp(tc);
-
-         /* saturate to [0.0f, 1.0f] */
-         inst2 = tc_MOV(tc, tmp, coords[i]);
-         inst2->saturate = true;
-
-         coords[i] = tsrc_from(tmp);
-      }
-   }
-
-   /* set up sampler parameters */
-   if (ilo_dev_gen(tc->dev) >= ILO_GEN(7)) {
-      msg_len = fs_add_sampler_params_gen7(tc, msg_type, base_mrf, param_size,
-            coords, num_coords, bias_or_lod, ref_or_si, ddx, ddy, num_derivs);
-   }
-   else {
-      msg_len = fs_add_sampler_params_gen6(tc, msg_type, base_mrf, param_size,
-            coords, num_coords, bias_or_lod, ref_or_si, ddx, ddy, num_derivs);
-   }
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 136:
-    *
-    *     "The maximum message length allowed to the sampler is 11. This would
-    *      disallow sample_d, sample_b_c, and sample_l_c with a SIMD Mode of
-    *      SIMD16."
-    */
-   if (msg_len > 11)
-      tc_fail(tc, "maximum length for messages to the sampler is 11");
-
-   if (ret_sampler_index)
-      *ret_sampler_index = sampler_index;
-
-   return tsrc_imm_mdesc_sampler(tc, msg_len, 4 * param_size,
-         false, simd_mode, msg_type, sampler_index, binding_table_index);
-}
-
-static void
-fs_lower_opcode_tgsi_sampling(struct fs_compile_context *fcc,
-                              struct toy_inst *inst)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   struct toy_dst dst[4], tmp[4];
-   struct toy_src desc;
-   unsigned sampler_index;
-   int swizzles[4], i;
-   bool need_filter;
-
-   desc = fs_prepare_tgsi_sampling(fcc, inst,
-         fcc->first_free_mrf,
-         fcc->variant->saturate_tex_coords,
-         &sampler_index);
-
-   switch (inst->opcode) {
-   case TOY_OPCODE_TGSI_TXF:
-   case TOY_OPCODE_TGSI_TXQ:
-   case TOY_OPCODE_TGSI_TXQ_LZ:
-      need_filter = false;
-      break;
-   default:
-      need_filter = true;
-      break;
-   }
-
-   toy_compiler_lower_to_send(tc, inst, false, GEN6_SFID_SAMPLER);
-   inst->src[0] = tsrc(TOY_FILE_MRF, fcc->first_free_mrf, 0);
-   inst->src[1] = desc;
-   for (i = 2; i < ARRAY_SIZE(inst->src); i++)
-      inst->src[i] = tsrc_null();
-
-   /* write to temps first */
-   tc_alloc_tmp4(tc, tmp);
-   for (i = 0; i < 4; i++)
-      tmp[i].type = inst->dst.type;
-   tdst_transpose(inst->dst, dst);
-   inst->dst = tmp[0];
-
-   tc_move_inst(tc, inst);
-
-   if (need_filter) {
-      assert(sampler_index < fcc->variant->num_sampler_views);
-      swizzles[0] = fcc->variant->sampler_view_swizzles[sampler_index].r;
-      swizzles[1] = fcc->variant->sampler_view_swizzles[sampler_index].g;
-      swizzles[2] = fcc->variant->sampler_view_swizzles[sampler_index].b;
-      swizzles[3] = fcc->variant->sampler_view_swizzles[sampler_index].a;
-   }
-   else {
-      swizzles[0] = PIPE_SWIZZLE_X;
-      swizzles[1] = PIPE_SWIZZLE_Y;
-      swizzles[2] = PIPE_SWIZZLE_Z;
-      swizzles[3] = PIPE_SWIZZLE_W;
-   }
-
-   /* swizzle the results */
-   for (i = 0; i < 4; i++) {
-      switch (swizzles[i]) {
-      case PIPE_SWIZZLE_0:
-         tc_MOV(tc, dst[i], tsrc_imm_f(0.0f));
-         break;
-      case PIPE_SWIZZLE_1:
-         tc_MOV(tc, dst[i], tsrc_imm_f(1.0f));
-         break;
-      default:
-         tc_MOV(tc, dst[i], tsrc_from(tmp[swizzles[i]]));
-         break;
-      }
-   }
-}
-
-static void
-fs_lower_opcode_derivative(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   struct toy_dst dst[4];
-   struct toy_src src[4];
-   unsigned i;
-
-   tdst_transpose(inst->dst, dst);
-   tsrc_transpose(inst->src[0], src);
-
-   /*
-    * Every four fragments are from a 2x2 subspan, with
-    *
-    *   fragment 1 on the top-left,
-    *   fragment 2 on the top-right,
-    *   fragment 3 on the bottom-left,
-    *   fragment 4 on the bottom-right.
-    *
-    * DDX should thus produce
-    *
-    *   dst = src.yyww - src.xxzz
-    *
-    * and DDY should produce
-    *
-    *   dst = src.zzww - src.xxyy
-    *
-    * But since we are in GEN6_ALIGN_1, swizzling does not work and we have to
-    * play with the region parameters.
-    */
-   if (inst->opcode == TOY_OPCODE_DDX) {
-      for (i = 0; i < 4; i++) {
-         struct toy_src left, right;
-
-         left = tsrc_rect(src[i], TOY_RECT_220);
-         right = tsrc_offset(left, 0, 1);
-
-         tc_ADD(tc, dst[i], right, tsrc_negate(left));
-      }
-   }
-   else {
-      for (i = 0; i < 4; i++) {
-         struct toy_src top, bottom;
-
-         /* approximate with dst = src.zzzz - src.xxxx */
-         top = tsrc_rect(src[i], TOY_RECT_440);
-         bottom = tsrc_offset(top, 0, 2);
-
-         tc_ADD(tc, dst[i], bottom, tsrc_negate(top));
-      }
-   }
-
-   tc_discard_inst(tc, inst);
-}
-
-static void
-fs_lower_opcode_fb_write(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   /* fs_write_fb() has set up the message registers */
-   toy_compiler_lower_to_send(tc, inst, true,
-         GEN6_SFID_DP_RC);
-}
-
-static void
-fs_lower_opcode_kil(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   struct toy_dst pixel_mask_dst;
-   struct toy_src f0, pixel_mask;
-   struct toy_inst *tmp;
-
-   /* lower half of r1.7:ud */
-   pixel_mask_dst = tdst_uw(tdst(TOY_FILE_GRF, 1, 7 * 4));
-   pixel_mask = tsrc_rect(tsrc_from(pixel_mask_dst), TOY_RECT_010);
-
-   f0 = tsrc_rect(tsrc_uw(tsrc(TOY_FILE_ARF, GEN6_ARF_F0, 0)), TOY_RECT_010);
-
-   /* KILL or KILL_IF */
-   if (tsrc_is_null(inst->src[0])) {
-      struct toy_src dummy = tsrc_uw(tsrc(TOY_FILE_GRF, 0, 0));
-      struct toy_dst f0_dst = tdst_uw(tdst(TOY_FILE_ARF, GEN6_ARF_F0, 0));
-
-      /* create a mask that masks out all pixels */
-      tmp = tc_MOV(tc, f0_dst, tsrc_rect(tsrc_imm_uw(0xffff), TOY_RECT_010));
-      tmp->exec_size = GEN6_EXECSIZE_1;
-      tmp->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-      tc_CMP(tc, tdst_null(), dummy, dummy, GEN6_COND_NZ);
-
-      /* swapping the two src operands breaks glBitmap()!? */
-      tmp = tc_AND(tc, pixel_mask_dst, f0, pixel_mask);
-      tmp->exec_size = GEN6_EXECSIZE_1;
-      tmp->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-   }
-   else {
-      struct toy_src src[4];
-      unsigned i;
-
-      tsrc_transpose(inst->src[0], src);
-      /* mask out killed pixels */
-      for (i = 0; i < 4; i++) {
-         tc_CMP(tc, tdst_null(), src[i], tsrc_imm_f(0.0f),
-               GEN6_COND_GE);
-
-         /* swapping the two src operands breaks glBitmap()!? */
-         tmp = tc_AND(tc, pixel_mask_dst, f0, pixel_mask);
-         tmp->exec_size = GEN6_EXECSIZE_1;
-         tmp->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-      }
-   }
-
-   tc_discard_inst(tc, inst);
-}
-
-static void
-fs_lower_virtual_opcodes(struct fs_compile_context *fcc)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   struct toy_inst *inst;
-
-   /* lower TGSI's first, as they might be lowered to other virtual opcodes */
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      switch (inst->opcode) {
-      case TOY_OPCODE_TGSI_IN:
-      case TOY_OPCODE_TGSI_CONST:
-      case TOY_OPCODE_TGSI_SV:
-      case TOY_OPCODE_TGSI_IMM:
-         fs_lower_opcode_tgsi_direct(fcc, inst);
-         break;
-      case TOY_OPCODE_TGSI_INDIRECT_FETCH:
-      case TOY_OPCODE_TGSI_INDIRECT_STORE:
-         fs_lower_opcode_tgsi_indirect(fcc, inst);
-         break;
-      case TOY_OPCODE_TGSI_TEX:
-      case TOY_OPCODE_TGSI_TXB:
-      case TOY_OPCODE_TGSI_TXD:
-      case TOY_OPCODE_TGSI_TXL:
-      case TOY_OPCODE_TGSI_TXP:
-      case TOY_OPCODE_TGSI_TXF:
-      case TOY_OPCODE_TGSI_TXQ:
-      case TOY_OPCODE_TGSI_TXQ_LZ:
-      case TOY_OPCODE_TGSI_TEX2:
-      case TOY_OPCODE_TGSI_TXB2:
-      case TOY_OPCODE_TGSI_TXL2:
-      case TOY_OPCODE_TGSI_SAMPLE:
-      case TOY_OPCODE_TGSI_SAMPLE_I:
-      case TOY_OPCODE_TGSI_SAMPLE_I_MS:
-      case TOY_OPCODE_TGSI_SAMPLE_B:
-      case TOY_OPCODE_TGSI_SAMPLE_C:
-      case TOY_OPCODE_TGSI_SAMPLE_C_LZ:
-      case TOY_OPCODE_TGSI_SAMPLE_D:
-      case TOY_OPCODE_TGSI_SAMPLE_L:
-      case TOY_OPCODE_TGSI_GATHER4:
-      case TOY_OPCODE_TGSI_SVIEWINFO:
-      case TOY_OPCODE_TGSI_SAMPLE_POS:
-      case TOY_OPCODE_TGSI_SAMPLE_INFO:
-         fs_lower_opcode_tgsi_sampling(fcc, inst);
-         break;
-      }
-   }
-
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      switch (inst->opcode) {
-      case TOY_OPCODE_INV:
-      case TOY_OPCODE_LOG:
-      case TOY_OPCODE_EXP:
-      case TOY_OPCODE_SQRT:
-      case TOY_OPCODE_RSQ:
-      case TOY_OPCODE_SIN:
-      case TOY_OPCODE_COS:
-      case TOY_OPCODE_FDIV:
-      case TOY_OPCODE_POW:
-      case TOY_OPCODE_INT_DIV_QUOTIENT:
-      case TOY_OPCODE_INT_DIV_REMAINDER:
-         toy_compiler_lower_math(tc, inst);
-         break;
-      case TOY_OPCODE_DDX:
-      case TOY_OPCODE_DDY:
-         fs_lower_opcode_derivative(tc, inst);
-         break;
-      case TOY_OPCODE_FB_WRITE:
-         fs_lower_opcode_fb_write(tc, inst);
-         break;
-      case TOY_OPCODE_KIL:
-         fs_lower_opcode_kil(tc, inst);
-         break;
-      default:
-         if (inst->opcode > 127)
-            tc_fail(tc, "unhandled virtual opcode");
-         break;
-      }
-   }
-}
-
-/**
- * Compile the shader.
- */
-static bool
-fs_compile(struct fs_compile_context *fcc)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   struct ilo_shader *sh = fcc->shader;
-
-   fs_lower_virtual_opcodes(fcc);
-   toy_compiler_legalize_for_ra(tc);
-   toy_compiler_optimize(tc);
-   toy_compiler_allocate_registers(tc,
-         fcc->first_free_grf,
-         fcc->last_free_grf,
-         fcc->num_grf_per_vrf);
-   toy_compiler_legalize_for_asm(tc);
-
-   if (tc->fail) {
-      ilo_err("failed to legalize FS instructions: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_FS) {
-      ilo_printf("legalized instructions:\n");
-      toy_compiler_dump(tc);
-      ilo_printf("\n");
-   }
-
-   if (true) {
-      sh->kernel = toy_compiler_assemble(tc, &sh->kernel_size);
-   }
-   else {
-      static const uint32_t microcode[] = {
-         /* fill in the microcode here */
-         0x0, 0x0, 0x0, 0x0,
-      };
-      const bool swap = true;
-
-      sh->kernel_size = sizeof(microcode);
-      sh->kernel = MALLOC(sh->kernel_size);
-
-      if (sh->kernel) {
-         const int num_dwords = sizeof(microcode) / 4;
-         const uint32_t *src = microcode;
-         uint32_t *dst = (uint32_t *) sh->kernel;
-         int i;
-
-         for (i = 0; i < num_dwords; i += 4) {
-            if (swap) {
-               dst[i + 0] = src[i + 3];
-               dst[i + 1] = src[i + 2];
-               dst[i + 2] = src[i + 1];
-               dst[i + 3] = src[i + 0];
-            }
-            else {
-               memcpy(dst, src, 16);
-            }
-         }
-      }
-   }
-
-   if (!sh->kernel) {
-      ilo_err("failed to compile FS: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_FS) {
-      ilo_printf("disassembly:\n");
-      toy_compiler_disassemble(tc->dev, sh->kernel, sh->kernel_size, false);
-      ilo_printf("\n");
-   }
-
-   return true;
-}
-
-/**
- * Emit instructions to write the color buffers (and the depth buffer).
- */
-static void
-fs_write_fb(struct fs_compile_context *fcc)
-{
-   struct toy_compiler *tc = &fcc->tc;
-   int base_mrf = fcc->first_free_mrf;
-   const struct toy_dst header = tdst_ud(tdst(TOY_FILE_MRF, base_mrf, 0));
-   bool header_present = false;
-   struct toy_src desc;
-   unsigned msg_type, ctrl;
-   int color_slots[ILO_MAX_DRAW_BUFFERS], num_cbufs;
-   int pos_slot = -1, cbuf, i;
-
-   for (i = 0; i < ARRAY_SIZE(color_slots); i++)
-      color_slots[i] = -1;
-
-   for (i = 0; i < fcc->tgsi.num_outputs; i++) {
-      if (fcc->tgsi.outputs[i].semantic_name == TGSI_SEMANTIC_COLOR) {
-         assert(fcc->tgsi.outputs[i].semantic_index < ARRAY_SIZE(color_slots));
-         color_slots[fcc->tgsi.outputs[i].semantic_index] = i;
-      }
-      else if (fcc->tgsi.outputs[i].semantic_name == TGSI_SEMANTIC_POSITION) {
-         pos_slot = i;
-      }
-   }
-
-   num_cbufs = fcc->variant->u.fs.num_cbufs;
-   /* still need to send EOT (and probably depth) */
-   if (!num_cbufs)
-      num_cbufs = 1;
-
-   /* we need the header to specify the pixel mask or render target */
-   if (fcc->tgsi.uses_kill || num_cbufs > 1) {
-      const struct toy_src r0 = tsrc_ud(tsrc(TOY_FILE_GRF, 0, 0));
-      struct toy_inst *inst;
-
-      inst = tc_MOV(tc, header, r0);
-      inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-      base_mrf += fcc->num_grf_per_vrf;
-
-      /* this is a two-register header */
-      if (fcc->dispatch_mode == GEN6_PS_DISPATCH_8) {
-         inst = tc_MOV(tc, tdst_offset(header, 1, 0), tsrc_offset(r0, 1, 0));
-         inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-         base_mrf += fcc->num_grf_per_vrf;
-      }
-
-      header_present = true;
-   }
-
-   for (cbuf = 0; cbuf < num_cbufs; cbuf++) {
-      const int slot =
-         color_slots[(fcc->tgsi.props.fs_color0_writes_all_cbufs) ? 0 : cbuf];
-      int mrf = base_mrf, vrf;
-      struct toy_src src[4];
-
-      if (slot >= 0) {
-         const unsigned undefined_mask =
-            fcc->tgsi.outputs[slot].undefined_mask;
-         const int index = fcc->tgsi.outputs[slot].index;
-
-         vrf = toy_tgsi_get_vrf(&fcc->tgsi, TGSI_FILE_OUTPUT, 0, index);
-         if (vrf >= 0) {
-            const struct toy_src tmp = tsrc(TOY_FILE_VRF, vrf, 0);
-            tsrc_transpose(tmp, src);
-         }
-         else {
-            /* use (0, 0, 0, 0) */
-            tsrc_transpose(tsrc_imm_f(0.0f), src);
-         }
-
-         for (i = 0; i < 4; i++) {
-            const struct toy_dst dst = tdst(TOY_FILE_MRF, mrf, 0);
-
-            if (undefined_mask & (1 << i))
-               src[i] = tsrc_imm_f(0.0f);
-
-            tc_MOV(tc, dst, src[i]);
-
-            mrf += fcc->num_grf_per_vrf;
-         }
-      }
-      else {
-         /* use (0, 0, 0, 0) */
-         for (i = 0; i < 4; i++) {
-            const struct toy_dst dst = tdst(TOY_FILE_MRF, mrf, 0);
-
-            tc_MOV(tc, dst, tsrc_imm_f(0.0f));
-            mrf += fcc->num_grf_per_vrf;
-         }
-      }
-
-      /* select BLEND_STATE[rt] */
-      if (cbuf > 0) {
-         struct toy_inst *inst;
-
-         inst = tc_MOV(tc, tdst_offset(header, 0, 2), tsrc_imm_ud(cbuf));
-         inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-         inst->exec_size = GEN6_EXECSIZE_1;
-         inst->src[0].rect = TOY_RECT_010;
-      }
-
-      if (cbuf == 0 && pos_slot >= 0) {
-         const int index = fcc->tgsi.outputs[pos_slot].index;
-         const struct toy_dst dst = tdst(TOY_FILE_MRF, mrf, 0);
-         struct toy_src src[4];
-         int vrf;
-
-         vrf = toy_tgsi_get_vrf(&fcc->tgsi, TGSI_FILE_OUTPUT, 0, index);
-         if (vrf >= 0) {
-            const struct toy_src tmp = tsrc(TOY_FILE_VRF, vrf, 0);
-            tsrc_transpose(tmp, src);
-         }
-         else {
-            /* use (0, 0, 0, 0) */
-            tsrc_transpose(tsrc_imm_f(0.0f), src);
-         }
-
-         /* only Z */
-         tc_MOV(tc, dst, src[2]);
-
-         mrf += fcc->num_grf_per_vrf;
-      }
-
-      msg_type = (fcc->dispatch_mode == GEN6_PS_DISPATCH_16) ?
-         GEN6_MSG_DP_RT_MODE_SIMD16 >> 8 :
-         GEN6_MSG_DP_RT_MODE_SIMD8_LO >> 8;
-
-      ctrl = (cbuf == num_cbufs - 1) << 12 |
-             msg_type << 8;
-
-      desc = tsrc_imm_mdesc_data_port(tc, cbuf == num_cbufs - 1,
-            mrf - fcc->first_free_mrf, 0,
-            header_present, false,
-            GEN6_MSG_DP_RT_WRITE,
-            ctrl, fcc->shader->bt.rt_base + cbuf);
-
-      tc_add2(tc, TOY_OPCODE_FB_WRITE, tdst_null(),
-            tsrc(TOY_FILE_MRF, fcc->first_free_mrf, 0), desc);
-   }
-}
-
-/**
- * Set up shader outputs for fixed-function units.
- */
-static void
-fs_setup_shader_out(struct ilo_shader *sh, const struct toy_tgsi *tgsi)
-{
-   unsigned i;
-
-   sh->out.count = tgsi->num_outputs;
-   for (i = 0; i < tgsi->num_outputs; i++) {
-      sh->out.register_indices[i] = tgsi->outputs[i].index;
-      sh->out.semantic_names[i] = tgsi->outputs[i].semantic_name;
-      sh->out.semantic_indices[i] = tgsi->outputs[i].semantic_index;
-
-      if (tgsi->outputs[i].semantic_name == TGSI_SEMANTIC_POSITION)
-         sh->out.has_pos = true;
-   }
-}
-
-/**
- * Set up shader inputs for fixed-function units.
- */
-static void
-fs_setup_shader_in(struct ilo_shader *sh, const struct toy_tgsi *tgsi,
-                   bool flatshade)
-{
-   unsigned i;
-
-   sh->in.count = tgsi->num_inputs;
-   for (i = 0; i < tgsi->num_inputs; i++) {
-      sh->in.semantic_names[i] = tgsi->inputs[i].semantic_name;
-      sh->in.semantic_indices[i] = tgsi->inputs[i].semantic_index;
-      sh->in.interp[i] = tgsi->inputs[i].interp;
-      sh->in.centroid[i] = tgsi->inputs[i].centroid;
-
-      if (tgsi->inputs[i].semantic_name == TGSI_SEMANTIC_POSITION) {
-         sh->in.has_pos = true;
-         continue;
-      }
-      else if (tgsi->inputs[i].semantic_name == TGSI_SEMANTIC_FACE) {
-         continue;
-      }
-
-      switch (tgsi->inputs[i].interp) {
-      case TGSI_INTERPOLATE_CONSTANT:
-         sh->in.const_interp_enable |= 1 << i;
-         break;
-      case TGSI_INTERPOLATE_LINEAR:
-         sh->in.has_linear_interp = true;
-
-         if (tgsi->inputs[i].centroid) {
-            sh->in.barycentric_interpolation_mode |=
-               GEN6_INTERP_NONPERSPECTIVE_CENTROID;
-         }
-         else {
-            sh->in.barycentric_interpolation_mode |=
-               GEN6_INTERP_NONPERSPECTIVE_PIXEL;
-         }
-         break;
-      case TGSI_INTERPOLATE_COLOR:
-         if (flatshade) {
-            sh->in.const_interp_enable |= 1 << i;
-            break;
-         }
-         /* fall through */
-      case TGSI_INTERPOLATE_PERSPECTIVE:
-         if (tgsi->inputs[i].centroid) {
-            sh->in.barycentric_interpolation_mode |=
-               GEN6_INTERP_PERSPECTIVE_CENTROID;
-         }
-         else {
-            sh->in.barycentric_interpolation_mode |=
-               GEN6_INTERP_PERSPECTIVE_PIXEL;
-         }
-         break;
-      default:
-         break;
-      }
-   }
-}
-
-static int
-fs_setup_payloads(struct fs_compile_context *fcc)
-{
-   const struct ilo_shader *sh = fcc->shader;
-   int grf, i;
-
-   grf = 0;
-
-   /* r0: header */
-   grf++;
-
-   /* r1-r2: coordinates and etc. */
-   grf += (fcc->dispatch_mode == GEN6_PS_DISPATCH_32) ? 2 : 1;
-
-   for (i = 0; i < ARRAY_SIZE(fcc->payloads); i++) {
-      const int reg_scale =
-         (fcc->dispatch_mode == GEN6_PS_DISPATCH_8) ? 1 : 2;
-
-      /* r3-r26 or r32-r55: barycentric interpolation parameters */
-      if (sh->in.barycentric_interpolation_mode &
-            (GEN6_INTERP_PERSPECTIVE_PIXEL)) {
-         fcc->payloads[i].interp_perspective_pixel = grf;
-         grf += 2 * reg_scale;
-      }
-      if (sh->in.barycentric_interpolation_mode &
-            (GEN6_INTERP_PERSPECTIVE_CENTROID)) {
-         fcc->payloads[i].interp_perspective_centroid = grf;
-         grf += 2 * reg_scale;
-      }
-      if (sh->in.barycentric_interpolation_mode &
-            (GEN6_INTERP_PERSPECTIVE_SAMPLE)) {
-         fcc->payloads[i].interp_perspective_sample = grf;
-         grf += 2 * reg_scale;
-      }
-      if (sh->in.barycentric_interpolation_mode &
-            (GEN6_INTERP_NONPERSPECTIVE_PIXEL)) {
-         fcc->payloads[i].interp_nonperspective_pixel = grf;
-         grf += 2 * reg_scale;
-      }
-      if (sh->in.barycentric_interpolation_mode &
-            (GEN6_INTERP_NONPERSPECTIVE_CENTROID)) {
-         fcc->payloads[i].interp_nonperspective_centroid = grf;
-         grf += 2 * reg_scale;
-      }
-      if (sh->in.barycentric_interpolation_mode &
-            (GEN6_INTERP_NONPERSPECTIVE_SAMPLE)) {
-         fcc->payloads[i].interp_nonperspective_sample = grf;
-         grf += 2 * reg_scale;
-      }
-
-      /* r27-r28 or r56-r57: interpoloated depth */
-      if (sh->in.has_pos) {
-         fcc->payloads[i].source_depth = grf;
-         grf += 1 * reg_scale;
-      }
-
-      /* r29-r30 or r58-r59: interpoloated w */
-      if (sh->in.has_pos) {
-         fcc->payloads[i].source_w = grf;
-         grf += 1 * reg_scale;
-      }
-
-      /* r31 or r60: position offset */
-      if (false) {
-         fcc->payloads[i].pos_offset = grf;
-         grf++;
-      }
-
-      if (fcc->dispatch_mode != GEN6_PS_DISPATCH_32)
-         break;
-   }
-
-   return grf;
-}
-
-/**
- * Translate the TGSI tokens.
- */
-static bool
-fs_setup_tgsi(struct toy_compiler *tc, const struct tgsi_token *tokens,
-              struct toy_tgsi *tgsi)
-{
-   if (ilo_debug & ILO_DEBUG_FS) {
-      ilo_printf("dumping fragment shader\n");
-      ilo_printf("\n");
-
-      tgsi_dump(tokens, 0);
-      ilo_printf("\n");
-   }
-
-   toy_compiler_translate_tgsi(tc, tokens, false, tgsi);
-   if (tc->fail) {
-      ilo_err("failed to translate FS TGSI tokens: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_FS) {
-      ilo_printf("TGSI translator:\n");
-      toy_tgsi_dump(tgsi);
-      ilo_printf("\n");
-      toy_compiler_dump(tc);
-      ilo_printf("\n");
-   }
-
-   return true;
-}
-
-/**
- * Set up FS compile context.  This includes translating the TGSI tokens.
- */
-static bool
-fs_setup(struct fs_compile_context *fcc,
-         const struct ilo_shader_state *state,
-         const struct ilo_shader_variant *variant)
-{
-   int num_consts;
-
-   memset(fcc, 0, sizeof(*fcc));
-
-   fcc->shader = CALLOC_STRUCT(ilo_shader);
-   if (!fcc->shader)
-      return false;
-
-   fcc->variant = variant;
-
-   toy_compiler_init(&fcc->tc, state->info.dev);
-
-   fcc->dispatch_mode = GEN6_PS_DISPATCH_8;
-
-   fcc->tc.templ.access_mode = GEN6_ALIGN_1;
-   if (fcc->dispatch_mode == GEN6_PS_DISPATCH_16) {
-      fcc->tc.templ.qtr_ctrl = GEN6_QTRCTRL_1H;
-      fcc->tc.templ.exec_size = GEN6_EXECSIZE_16;
-   }
-   else {
-      fcc->tc.templ.qtr_ctrl = GEN6_QTRCTRL_1Q;
-      fcc->tc.templ.exec_size = GEN6_EXECSIZE_8;
-   }
-
-   fcc->tc.rect_linear_width = 8;
-
-   /*
-    * The classic driver uses the sampler cache (gen6) or the data cache
-    * (gen7).  Why?
-    */
-   fcc->const_cache = GEN6_SFID_DP_CC;
-
-   if (!fs_setup_tgsi(&fcc->tc, state->info.tokens, &fcc->tgsi)) {
-      toy_compiler_cleanup(&fcc->tc);
-      FREE(fcc->shader);
-      return false;
-   }
-
-   fs_setup_shader_in(fcc->shader, &fcc->tgsi, fcc->variant->u.fs.flatshade);
-   fs_setup_shader_out(fcc->shader, &fcc->tgsi);
-
-   if (fcc->variant->use_pcb && !fcc->tgsi.const_indirect) {
-      num_consts = (fcc->tgsi.const_count + 1) / 2;
-
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 287:
-       *
-       *     "The sum of all four read length fields (each incremented to
-       *      represent the actual read length) must be less than or equal to
-       *      64"
-       *
-       * Since we are usually under a high register pressure, do not allow
-       * for more than 8.
-       */
-      if (num_consts > 8)
-         num_consts = 0;
-   }
-   else {
-      num_consts = 0;
-   }
-
-   fcc->shader->skip_cbuf0_upload = (!fcc->tgsi.const_count || num_consts);
-   fcc->shader->pcb.cbuf0_size = num_consts * (sizeof(float) * 8);
-
-   fcc->first_const_grf = fs_setup_payloads(fcc);
-   fcc->first_attr_grf = fcc->first_const_grf + num_consts;
-   fcc->first_free_grf = fcc->first_attr_grf + fcc->shader->in.count * 2;
-   fcc->last_free_grf = 127;
-
-   /* m0 is reserved for system routines */
-   fcc->first_free_mrf = 1;
-   fcc->last_free_mrf = 15;
-
-   /* instructions are compressed with GEN6_EXECSIZE_16 */
-   fcc->num_grf_per_vrf =
-      (fcc->dispatch_mode == GEN6_PS_DISPATCH_16) ? 2 : 1;
-
-   if (ilo_dev_gen(fcc->tc.dev) >= ILO_GEN(7)) {
-      fcc->last_free_grf -= 15;
-      fcc->first_free_mrf = fcc->last_free_grf + 1;
-      fcc->last_free_mrf = fcc->first_free_mrf + 14;
-   }
-
-   fcc->shader->in.start_grf = fcc->first_const_grf;
-   fcc->shader->has_kill = fcc->tgsi.uses_kill;
-   fcc->shader->dispatch_16 =
-      (fcc->dispatch_mode == GEN6_PS_DISPATCH_16);
-
-   fcc->shader->bt.rt_base = 0;
-   fcc->shader->bt.rt_count = fcc->variant->u.fs.num_cbufs;
-   /* to send EOT */
-   if (!fcc->shader->bt.rt_count)
-      fcc->shader->bt.rt_count = 1;
-
-   fcc->shader->bt.tex_base = fcc->shader->bt.rt_base +
-                              fcc->shader->bt.rt_count;
-   fcc->shader->bt.tex_count = fcc->variant->num_sampler_views;
-
-   fcc->shader->bt.const_base = fcc->shader->bt.tex_base +
-                                fcc->shader->bt.tex_count;
-   fcc->shader->bt.const_count = state->info.constant_buffer_count;
-
-   fcc->shader->bt.total_count = fcc->shader->bt.const_base +
-                                 fcc->shader->bt.const_count;
-
-   return true;
-}
-
-/**
- * Compile the fragment shader.
- */
-struct ilo_shader *
-ilo_shader_compile_fs(const struct ilo_shader_state *state,
-                      const struct ilo_shader_variant *variant)
-{
-   struct fs_compile_context fcc;
-
-   if (!fs_setup(&fcc, state, variant))
-      return NULL;
-
-   fs_write_fb(&fcc);
-
-   if (!fs_compile(&fcc)) {
-      FREE(fcc.shader);
-      fcc.shader = NULL;
-   }
-
-   toy_tgsi_cleanup(&fcc.tgsi);
-   toy_compiler_cleanup(&fcc.tc);
-
-   return fcc.shader;
-}
diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_gs.c b/src/gallium/drivers/ilo/shader/ilo_shader_gs.c
deleted file mode 100644 (file)
index 92f5da1..0000000
+++ /dev/null
@@ -1,1455 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "tgsi/tgsi_dump.h"
-#include "toy_compiler.h"
-#include "toy_tgsi.h"
-#include "toy_legalize.h"
-#include "toy_optimize.h"
-#include "toy_helpers.h"
-#include "ilo_shader_internal.h"
-
-/* XXX Below is proof-of-concept code.  Skip this file! */
-
-/*
- * TODO
- * - primitive id is in r0.1.  FS receives PID as a flat attribute.
- * - set VUE header m0.1 for layered rendering
- */
-struct gs_compile_context {
-   struct ilo_shader *shader;
-   const struct ilo_shader_variant *variant;
-   const struct pipe_stream_output_info *so_info;
-
-   struct toy_compiler tc;
-   struct toy_tgsi tgsi;
-   int output_map[PIPE_MAX_SHADER_OUTPUTS];
-
-   bool write_so;
-   bool write_vue;
-
-   int in_vue_size;
-   int in_vue_count;
-
-   int out_vue_size;
-   int out_vue_min_count;
-
-   bool is_static;
-
-   struct {
-      struct toy_src header;
-      struct toy_src svbi;
-      struct toy_src vues[6];
-   } payload;
-
-   struct {
-      struct toy_dst urb_write_header;
-      bool prim_start;
-      bool prim_end;
-      int prim_type;
-
-      struct toy_dst tmp;
-
-      /* buffered tgsi_outs */
-      struct toy_dst buffers[3];
-      int buffer_needed, buffer_cur;
-
-      struct toy_dst so_written;
-      struct toy_dst so_index;
-
-      struct toy_src tgsi_outs[PIPE_MAX_SHADER_OUTPUTS];
-   } vars;
-
-   struct {
-      struct toy_dst total_vertices;
-      struct toy_dst total_prims;
-
-      struct toy_dst num_vertices;
-      struct toy_dst num_vertices_in_prim;
-   } dynamic_data;
-
-   struct {
-      int total_vertices;
-      int total_prims;
-      /* this limits the max vertice count to be 256 */
-      uint32_t last_vertex[8];
-
-      int num_vertices;
-      int num_vertices_in_prim;
-   } static_data;
-
-   int first_free_grf;
-   int last_free_grf;
-   int first_free_mrf;
-   int last_free_mrf;
-};
-
-static void
-gs_COPY8(struct toy_compiler *tc, struct toy_dst dst, struct toy_src src)
-{
-   struct toy_inst *inst;
-
-   inst = tc_MOV(tc, dst, src);
-   inst->exec_size = GEN6_EXECSIZE_8;
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-}
-
-static void
-gs_COPY4(struct toy_compiler *tc,
-         struct toy_dst dst, int dst_ch,
-         struct toy_src src, int src_ch)
-{
-   struct toy_inst *inst;
-
-   inst = tc_MOV(tc,
-         tdst_offset(dst, 0, dst_ch),
-         tsrc_offset(src, 0, src_ch));
-   inst->exec_size = GEN6_EXECSIZE_4;
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-}
-
-static void
-gs_COPY1(struct toy_compiler *tc,
-         struct toy_dst dst, int dst_ch,
-         struct toy_src src, int src_ch)
-{
-   struct toy_inst *inst;
-
-   inst = tc_MOV(tc,
-         tdst_offset(dst, 0, dst_ch),
-         tsrc_rect(tsrc_offset(src, 0, src_ch), TOY_RECT_010));
-   inst->exec_size = GEN6_EXECSIZE_1;
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-}
-
-static void
-gs_init_vars(struct gs_compile_context *gcc)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct toy_dst dst;
-
-   /* init URB_WRITE header */
-   dst = gcc->vars.urb_write_header;
-
-   gs_COPY8(tc, dst, gcc->payload.header);
-
-   gcc->vars.prim_start = true;
-   gcc->vars.prim_end = false;
-   switch (gcc->out_vue_min_count) {
-   case 1:
-      gcc->vars.prim_type = GEN6_3DPRIM_POINTLIST;
-      break;
-   case 2:
-      gcc->vars.prim_type = GEN6_3DPRIM_LINESTRIP;
-      break;
-   case 3:
-      gcc->vars.prim_type = GEN6_3DPRIM_TRISTRIP;
-      break;
-   }
-
-   if (gcc->write_so)
-      tc_MOV(tc, gcc->vars.so_written, tsrc_imm_d(0));
-}
-
-static void
-gs_save_output(struct gs_compile_context *gcc, const struct toy_src *outs)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   const struct toy_dst buf = gcc->vars.buffers[gcc->vars.buffer_cur];
-   int i;
-
-   for (i = 0; i < gcc->shader->out.count; i++)
-      tc_MOV(tc, tdst_offset(buf, i, 0), outs[i]);
-
-   /* advance the cursor */
-   gcc->vars.buffer_cur++;
-   gcc->vars.buffer_cur %= gcc->vars.buffer_needed;
-}
-
-static void
-gs_write_so(struct gs_compile_context *gcc,
-            struct toy_dst dst,
-            struct toy_src index, struct toy_src out,
-            bool send_write_commit_message,
-            int binding_table_index)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct toy_dst mrf_header;
-   struct toy_src desc;
-
-   mrf_header = tdst_d(tdst(TOY_FILE_MRF, gcc->first_free_mrf, 0));
-
-   /* m0.5: destination index */
-   gs_COPY1(tc, mrf_header, 5, index, 0);
-
-   /* m0.0 - m0.3: RGBA */
-   gs_COPY4(tc, mrf_header, 0, tsrc_type(out, mrf_header.type), 0);
-
-   desc = tsrc_imm_mdesc_data_port(tc, false,
-         1, send_write_commit_message,
-         true, send_write_commit_message,
-         GEN6_MSG_DP_SVB_WRITE, 0,
-         binding_table_index);
-
-   tc_SEND(tc, dst, tsrc_from(mrf_header), desc,
-         GEN6_SFID_DP_RC);
-}
-
-static void
-gs_write_vue(struct gs_compile_context *gcc,
-             struct toy_dst dst, struct toy_src msg_header,
-             const struct toy_src *outs, int num_outs,
-             bool eot)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct toy_dst mrf_header;
-   struct toy_src desc;
-   int sent = 0;
-
-   mrf_header = tdst_d(tdst(TOY_FILE_MRF, gcc->first_free_mrf, 0));
-   gs_COPY8(tc, mrf_header, msg_header);
-
-   while (sent < num_outs) {
-      int mrf = gcc->first_free_mrf + 1;
-      const int mrf_avail = gcc->last_free_mrf - mrf + 1;
-      int msg_len, num_entries, i;
-      bool complete;
-
-      num_entries = (num_outs - sent + 1) / 2;
-      complete = true;
-      if (num_entries > mrf_avail) {
-         num_entries = mrf_avail;
-         complete = false;
-      }
-
-      for (i = 0; i < num_entries; i++) {
-         gs_COPY4(tc, tdst(TOY_FILE_MRF, mrf + i / 2, 0), 0,
-               outs[sent + 2 * i], 0);
-         if (sent + i * 2 + 1 < gcc->shader->out.count) {
-            gs_COPY4(tc, tdst(TOY_FILE_MRF, mrf + i / 2, 0), 4,
-                  outs[sent + 2 * i + 1], 0);
-         }
-         mrf++;
-      }
-
-      /* do not forget the header */
-      msg_len = num_entries + 1;
-
-      if (complete) {
-         desc = tsrc_imm_mdesc_urb(tc,
-               eot, msg_len, !eot, true, true, !eot,
-               false, sent, 0);
-      }
-      else {
-         desc = tsrc_imm_mdesc_urb(tc,
-               false, msg_len, 0, false, true, false,
-               false, sent, 0);
-      }
-
-      tc_add2(tc, TOY_OPCODE_URB_WRITE,
-            (complete) ? dst : tdst_null(), tsrc_from(mrf_header), desc);
-
-      sent += num_entries * 2;
-   }
-}
-
-static void
-gs_ff_sync(struct gs_compile_context *gcc, struct toy_dst dst,
-           struct toy_src num_prims)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct toy_dst mrf_header =
-      tdst_d(tdst(TOY_FILE_MRF, gcc->first_free_mrf, 0));
-   struct toy_src desc;
-   bool allocate;
-
-   gs_COPY8(tc, mrf_header, gcc->payload.header);
-
-   /* set NumSOVertsToWrite and NumSOPrimsNeeded */
-   if (gcc->write_so) {
-      if (num_prims.file == TOY_FILE_IMM) {
-         const uint32_t v =
-            (num_prims.val32 * gcc->in_vue_count) << 16 | num_prims.val32;
-
-         gs_COPY1(tc, mrf_header, 0, tsrc_imm_d(v), 0);
-      }
-      else {
-         struct toy_dst m0_0 = tdst_d(gcc->vars.tmp);
-
-         tc_MUL(tc, m0_0, num_prims, tsrc_imm_d(gcc->in_vue_count << 16));
-         tc_OR(tc, m0_0, tsrc_from(m0_0), num_prims);
-
-         gs_COPY1(tc, mrf_header, 0, tsrc_from(m0_0), 0);
-      }
-   }
-
-   /* set NumGSPrimsGenerated */
-   if (gcc->write_vue)
-      gs_COPY1(tc, mrf_header, 1, num_prims, 0);
-
-   /*
-    * From the Sandy Bridge PRM, volume 2 part 1, page 173:
-    *
-    *     "Programming Note: If the GS stage is enabled, software must always
-    *      allocate at least one GS URB Entry. This is true even if the GS
-    *      thread never needs to output vertices to the pipeline, e.g., when
-    *      only performing stream output. This is an artifact of the need to
-    *      pass the GS thread an initial destination URB handle."
-    */
-   allocate = true;
-   desc = tsrc_imm_mdesc_urb(tc, false, 1, 1,
-         false, false, allocate,
-         false, 0, 1);
-
-   tc_SEND(tc, dst, tsrc_from(mrf_header), desc, GEN6_SFID_URB);
-}
-
-static void
-gs_discard(struct gs_compile_context *gcc)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct toy_dst mrf_header;
-   struct toy_src desc;
-
-   mrf_header = tdst_d(tdst(TOY_FILE_MRF, gcc->first_free_mrf, 0));
-
-   gs_COPY8(tc, mrf_header, tsrc_from(gcc->vars.urb_write_header));
-
-   desc = tsrc_imm_mdesc_urb(tc,
-         true, 1, 0, true, false, false,
-         false, 0, 0);
-
-   tc_add2(tc, TOY_OPCODE_URB_WRITE,
-         tdst_null(), tsrc_from(mrf_header), desc);
-}
-
-static void
-gs_lower_opcode_endprim(struct gs_compile_context *gcc, struct toy_inst *inst)
-{
-   /* if has control flow, set PrimEnd on the last vertex and URB_WRITE */
-}
-
-static void
-gs_lower_opcode_emit_vue_dynamic(struct gs_compile_context *gcc)
-{
-   /* TODO similar to the static version */
-
-   /*
-    * When SO is enabled and the inputs are lines or triangles, vertices are
-    * always buffered.  we can defer the emission of the current vertex until
-    * the next EMIT or ENDPRIM.  Or, we can emit two URB_WRITEs with the later
-    * patching the former.
-    */
-}
-
-static void
-gs_lower_opcode_emit_so_dynamic(struct gs_compile_context *gcc)
-{
-   struct toy_compiler *tc = &gcc->tc;
-
-   tc_IF(tc, tdst_null(),
-         tsrc_from(gcc->dynamic_data.num_vertices_in_prim),
-         tsrc_imm_d(gcc->out_vue_min_count),
-         GEN6_COND_GE);
-
-   {
-      tc_ADD(tc, gcc->vars.tmp, tsrc_from(gcc->vars.so_index), tsrc_imm_d(0x03020100));
-
-      /* TODO same as static version */
-   }
-
-   tc_ENDIF(tc);
-
-   tc_ADD(tc, gcc->vars.so_index,
-         tsrc_from(gcc->vars.so_index), tsrc_imm_d(gcc->out_vue_min_count));
-}
-
-static void
-gs_lower_opcode_emit_vue_static(struct gs_compile_context *gcc)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct toy_inst *inst2;
-   bool eot;
-
-   eot = (gcc->static_data.num_vertices == gcc->static_data.total_vertices);
-
-   gcc->vars.prim_end =
-      ((gcc->static_data.last_vertex[(gcc->static_data.num_vertices - 1) / 32] &
-        1 << ((gcc->static_data.num_vertices - 1) % 32)) != 0);
-
-   if (eot && gcc->write_so) {
-      inst2 = tc_OR(tc, tdst_offset(gcc->vars.urb_write_header, 0, 2),
-            tsrc_from(gcc->vars.so_written),
-            tsrc_imm_d(gcc->vars.prim_type << 2 |
-                       gcc->vars.prim_start << 1 |
-                       gcc->vars.prim_end));
-      inst2->exec_size = GEN6_EXECSIZE_1;
-      inst2->src[0] = tsrc_rect(inst2->src[0], TOY_RECT_010);
-      inst2->src[1] = tsrc_rect(inst2->src[1], TOY_RECT_010);
-   }
-   else {
-      gs_COPY1(tc, gcc->vars.urb_write_header, 2,
-            tsrc_imm_d(gcc->vars.prim_type << 2 |
-                       gcc->vars.prim_start << 1 |
-                       gcc->vars.prim_end), 0);
-   }
-
-   gs_write_vue(gcc, tdst_d(gcc->vars.tmp),
-         tsrc_from(gcc->vars.urb_write_header),
-         gcc->vars.tgsi_outs,
-         gcc->shader->out.count, eot);
-
-   if (!eot) {
-      gs_COPY1(tc, gcc->vars.urb_write_header, 0,
-            tsrc_from(tdst_d(gcc->vars.tmp)), 0);
-   }
-
-   gcc->vars.prim_start = gcc->vars.prim_end;
-   gcc->vars.prim_end = false;
-}
-
-static void
-gs_lower_opcode_emit_so_static(struct gs_compile_context *gcc)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct toy_inst *inst;
-   int i, j;
-
-   if (gcc->static_data.num_vertices_in_prim < gcc->out_vue_min_count)
-      return;
-
-   inst = tc_MOV(tc, tdst_w(gcc->vars.tmp), tsrc_imm_v(0x03020100));
-   inst->exec_size = GEN6_EXECSIZE_8;
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-   tc_ADD(tc, tdst_d(gcc->vars.tmp), tsrc_from(tdst_d(gcc->vars.tmp)),
-         tsrc_rect(tsrc_from(gcc->vars.so_index), TOY_RECT_010));
-
-   tc_IF(tc, tdst_null(),
-         tsrc_rect(tsrc_offset(tsrc_from(tdst_d(gcc->vars.tmp)), 0, gcc->out_vue_min_count - 1), TOY_RECT_010),
-         tsrc_rect(tsrc_offset(gcc->payload.svbi, 0, 4), TOY_RECT_010),
-         GEN6_COND_LE);
-   {
-      for (i = 0; i < gcc->out_vue_min_count; i++) {
-         for (j = 0; j < gcc->so_info->num_outputs; j++) {
-            const int idx = gcc->so_info->output[j].register_index;
-            struct toy_src index, out;
-            int binding_table_index;
-            bool write_commit;
-
-            index = tsrc_d(tsrc_offset(tsrc_from(gcc->vars.tmp), 0, i));
-
-            if (i == gcc->out_vue_min_count - 1) {
-               out = gcc->vars.tgsi_outs[idx];
-            }
-            else {
-               /* gcc->vars.buffer_cur also points to the first vertex */
-               const int buf =
-                  (gcc->vars.buffer_cur + i) % gcc->vars.buffer_needed;
-
-               out = tsrc_offset(tsrc_from(gcc->vars.buffers[buf]), idx, 0);
-            }
-
-            out = tsrc_offset(out, 0, gcc->so_info->output[j].start_component);
-
-            /*
-             * From the Sandy Bridge PRM, volume 4 part 2, page 19:
-             *
-             *     "The Kernel must do a write commit on the last write to DAP
-             *      prior to a URB_WRITE with End of Thread."
-             */
-            write_commit =
-               (gcc->static_data.num_vertices == gcc->static_data.total_vertices &&
-                i == gcc->out_vue_min_count - 1 &&
-                j == gcc->so_info->num_outputs - 1);
-
-
-            binding_table_index = gcc->shader->bt.gen6_so_base + j;
-
-            gs_write_so(gcc, gcc->vars.tmp, index,
-                  out, write_commit, binding_table_index);
-
-            /*
-             * From the Sandy Bridge PRM, volume 4 part 1, page 168:
-             *
-             *     "The write commit does not modify the destination register, but
-             *      merely clears the dependency associated with the destination
-             *      register. Thus, a simple "mov" instruction using the register as a
-             *      source is sufficient to wait for the write commit to occur."
-             */
-            if (write_commit)
-               tc_MOV(tc, gcc->vars.tmp, tsrc_from(gcc->vars.tmp));
-         }
-      }
-
-      /* SONumPrimsWritten occupies the higher word of m0.2 of URB_WRITE */
-      tc_ADD(tc, gcc->vars.so_written,
-            tsrc_from(gcc->vars.so_written), tsrc_imm_d(1 << 16));
-      tc_ADD(tc, gcc->vars.so_index,
-            tsrc_from(gcc->vars.so_index), tsrc_imm_d(gcc->out_vue_min_count));
-   }
-   tc_ENDIF(tc);
-}
-
-static void
-gs_lower_opcode_emit_static(struct gs_compile_context *gcc,
-                            struct toy_inst *inst)
-{
-   gcc->static_data.num_vertices++;
-   gcc->static_data.num_vertices_in_prim++;
-
-   if (gcc->write_so) {
-      gs_lower_opcode_emit_so_static(gcc);
-
-      if (gcc->out_vue_min_count > 1 &&
-          gcc->static_data.num_vertices != gcc->static_data.total_vertices)
-         gs_save_output(gcc, gcc->vars.tgsi_outs);
-   }
-
-   if (gcc->write_vue)
-      gs_lower_opcode_emit_vue_static(gcc);
-}
-
-static void
-gs_lower_opcode_emit_dynamic(struct gs_compile_context *gcc,
-                             struct toy_inst *inst)
-{
-   struct toy_compiler *tc = &gcc->tc;
-
-   tc_ADD(tc, gcc->dynamic_data.num_vertices,
-         tsrc_from(gcc->dynamic_data.num_vertices), tsrc_imm_d(1));
-   tc_ADD(tc, gcc->dynamic_data.num_vertices_in_prim,
-         tsrc_from(gcc->dynamic_data.num_vertices_in_prim), tsrc_imm_d(1));
-
-   if (gcc->write_so) {
-      gs_lower_opcode_emit_so_dynamic(gcc);
-
-      if (gcc->out_vue_min_count > 1)
-         gs_save_output(gcc, gcc->vars.tgsi_outs);
-   }
-
-   if (gcc->write_vue)
-      gs_lower_opcode_emit_vue_dynamic(gcc);
-}
-
-static void
-gs_lower_opcode_emit(struct gs_compile_context *gcc, struct toy_inst *inst)
-{
-   if (gcc->is_static)
-      gs_lower_opcode_emit_static(gcc, inst);
-   else
-      gs_lower_opcode_emit_dynamic(gcc, inst);
-}
-
-static void
-gs_lower_opcode_tgsi_in(struct gs_compile_context *gcc,
-                        struct toy_dst dst, int dim, int idx)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct toy_src attr;
-   int slot, reg = -1, subreg;
-
-   slot = toy_tgsi_find_input(&gcc->tgsi, idx);
-   if (slot >= 0) {
-      int i;
-
-      for (i = 0; i < gcc->variant->u.gs.num_inputs; i++) {
-         if (gcc->variant->u.gs.semantic_names[i] ==
-               gcc->tgsi.inputs[slot].semantic_name &&
-               gcc->variant->u.gs.semantic_indices[i] ==
-               gcc->tgsi.inputs[slot].semantic_index) {
-            reg = i / 2;
-            subreg = (i % 2) * 4;
-            break;
-         }
-      }
-   }
-
-   if (reg < 0) {
-      tc_MOV(tc, dst, tsrc_imm_f(0.0f));
-      return;
-   }
-
-   /* fix vertex ordering for GEN6_3DPRIM_TRISTRIP_REVERSE */
-   if (gcc->in_vue_count == 3 && dim < 2) {
-      struct toy_inst *inst;
-
-      /* get PrimType */
-      inst = tc_AND(tc, tdst_d(gcc->vars.tmp),
-            tsrc_offset(gcc->payload.header, 0, 2), tsrc_imm_d(0x1f));
-      inst->exec_size = GEN6_EXECSIZE_1;
-      inst->src[0] = tsrc_rect(inst->src[0], TOY_RECT_010);
-      inst->src[1] = tsrc_rect(inst->src[1], TOY_RECT_010);
-
-      inst = tc_CMP(tc, tdst_null(), tsrc_from(tdst_d(gcc->vars.tmp)),
-            tsrc_imm_d(GEN6_3DPRIM_TRISTRIP_REVERSE), GEN6_COND_NZ);
-      inst->src[0] = tsrc_rect(inst->src[0], TOY_RECT_010);
-
-      attr = tsrc_offset(gcc->payload.vues[dim], reg, subreg);
-      inst = tc_MOV(tc, dst, attr);
-      inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-
-      /* swap IN[0] and IN[1] for GEN6_3DPRIM_TRISTRIP_REVERSE */
-      dim = !dim;
-
-      attr = tsrc_offset(gcc->payload.vues[dim], reg, subreg);
-      inst = tc_MOV(tc, dst, attr);
-      inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-      inst->pred_inv = true;
-   }
-   else {
-      attr = tsrc_offset(gcc->payload.vues[dim], reg, subreg);
-      tc_MOV(tc, dst, attr);
-   }
-
-
-}
-
-static void
-gs_lower_opcode_tgsi_imm(struct gs_compile_context *gcc,
-                         struct toy_dst dst, int idx)
-{
-   const uint32_t *imm;
-   int ch;
-
-   imm = toy_tgsi_get_imm(&gcc->tgsi, idx, NULL);
-
-   for (ch = 0; ch < 4; ch++) {
-      struct toy_inst *inst;
-
-      /* raw moves */
-      inst = tc_MOV(&gcc->tc,
-            tdst_writemask(tdst_ud(dst), 1 << ch),
-            tsrc_imm_ud(imm[ch]));
-      inst->access_mode = GEN6_ALIGN_16;
-   }
-}
-
-static void
-gs_lower_opcode_tgsi_direct(struct gs_compile_context *gcc,
-                            struct toy_inst *inst)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   int dim, idx;
-
-   assert(inst->src[0].file == TOY_FILE_IMM);
-   dim = inst->src[0].val32;
-
-   assert(inst->src[1].file == TOY_FILE_IMM);
-   idx = inst->src[1].val32;
-
-   switch (inst->opcode) {
-   case TOY_OPCODE_TGSI_IN:
-      gs_lower_opcode_tgsi_in(gcc, inst->dst, dim, idx);
-      /* fetch all dimensions */
-      if (dim == 0) {
-         int i;
-
-         for (i = 1; i < gcc->in_vue_count; i++) {
-            const int vrf = toy_tgsi_get_vrf(&gcc->tgsi, TGSI_FILE_INPUT, i, idx);
-            struct toy_dst dst;
-
-            if (vrf < 0)
-               continue;
-
-            dst = tdst(TOY_FILE_VRF, vrf, 0);
-            gs_lower_opcode_tgsi_in(gcc, dst, i, idx);
-         }
-      }
-      break;
-   case TOY_OPCODE_TGSI_IMM:
-      assert(!dim);
-      gs_lower_opcode_tgsi_imm(gcc, inst->dst, idx);
-      break;
-   case TOY_OPCODE_TGSI_CONST:
-   case TOY_OPCODE_TGSI_SV:
-   default:
-      tc_fail(tc, "unhandled TGSI fetch");
-      break;
-   }
-
-   tc_discard_inst(tc, inst);
-}
-
-static void
-gs_lower_virtual_opcodes(struct gs_compile_context *gcc)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct toy_inst *inst;
-
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      switch (inst->opcode) {
-      case TOY_OPCODE_TGSI_IN:
-      case TOY_OPCODE_TGSI_CONST:
-      case TOY_OPCODE_TGSI_SV:
-      case TOY_OPCODE_TGSI_IMM:
-         gs_lower_opcode_tgsi_direct(gcc, inst);
-         break;
-      case TOY_OPCODE_TGSI_INDIRECT_FETCH:
-      case TOY_OPCODE_TGSI_INDIRECT_STORE:
-         /* TODO similar to VS */
-         tc_fail(tc, "no indirection support");
-         tc_discard_inst(tc, inst);
-         break;
-      case TOY_OPCODE_TGSI_TEX:
-      case TOY_OPCODE_TGSI_TXB:
-      case TOY_OPCODE_TGSI_TXD:
-      case TOY_OPCODE_TGSI_TXL:
-      case TOY_OPCODE_TGSI_TXP:
-      case TOY_OPCODE_TGSI_TXF:
-      case TOY_OPCODE_TGSI_TXQ:
-      case TOY_OPCODE_TGSI_TXQ_LZ:
-      case TOY_OPCODE_TGSI_TEX2:
-      case TOY_OPCODE_TGSI_TXB2:
-      case TOY_OPCODE_TGSI_TXL2:
-      case TOY_OPCODE_TGSI_SAMPLE:
-      case TOY_OPCODE_TGSI_SAMPLE_I:
-      case TOY_OPCODE_TGSI_SAMPLE_I_MS:
-      case TOY_OPCODE_TGSI_SAMPLE_B:
-      case TOY_OPCODE_TGSI_SAMPLE_C:
-      case TOY_OPCODE_TGSI_SAMPLE_C_LZ:
-      case TOY_OPCODE_TGSI_SAMPLE_D:
-      case TOY_OPCODE_TGSI_SAMPLE_L:
-      case TOY_OPCODE_TGSI_GATHER4:
-      case TOY_OPCODE_TGSI_SVIEWINFO:
-      case TOY_OPCODE_TGSI_SAMPLE_POS:
-      case TOY_OPCODE_TGSI_SAMPLE_INFO:
-         /* TODO similar to VS */
-         tc_fail(tc, "no sampling support");
-         tc_discard_inst(tc, inst);
-         break;
-      case TOY_OPCODE_EMIT:
-         gs_lower_opcode_emit(gcc, inst);
-         tc_discard_inst(tc, inst);
-         break;
-      case TOY_OPCODE_ENDPRIM:
-         gs_lower_opcode_endprim(gcc, inst);
-         tc_discard_inst(tc, inst);
-         break;
-      default:
-         break;
-      }
-   }
-
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      switch (inst->opcode) {
-      case TOY_OPCODE_INV:
-      case TOY_OPCODE_LOG:
-      case TOY_OPCODE_EXP:
-      case TOY_OPCODE_SQRT:
-      case TOY_OPCODE_RSQ:
-      case TOY_OPCODE_SIN:
-      case TOY_OPCODE_COS:
-      case TOY_OPCODE_FDIV:
-      case TOY_OPCODE_POW:
-      case TOY_OPCODE_INT_DIV_QUOTIENT:
-      case TOY_OPCODE_INT_DIV_REMAINDER:
-         toy_compiler_lower_math(tc, inst);
-         break;
-      case TOY_OPCODE_URB_WRITE:
-         toy_compiler_lower_to_send(tc, inst, false, GEN6_SFID_URB);
-         break;
-      default:
-         if (inst->opcode > 127)
-            tc_fail(tc, "unhandled virtual opcode");
-         break;
-      }
-   }
-}
-
-/**
- * Get the number of (tessellated) primitives generated by this shader.
- * Return false if that is unknown until runtime.
- */
-static void
-get_num_prims_static(struct gs_compile_context *gcc)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   const struct toy_inst *inst;
-   int num_vertices_in_prim = 0, if_depth = 0, do_depth = 0;
-   bool is_static = true;
-
-   tc_head(tc);
-   while ((inst = tc_next_no_skip(tc)) != NULL) {
-      switch (inst->opcode) {
-      case GEN6_OPCODE_IF:
-         if_depth++;
-         break;
-      case GEN6_OPCODE_ENDIF:
-         if_depth--;
-         break;
-      case TOY_OPCODE_DO:
-         do_depth++;
-         break;
-      case GEN6_OPCODE_WHILE:
-         do_depth--;
-         break;
-      case TOY_OPCODE_EMIT:
-         if (if_depth || do_depth) {
-            is_static = false;
-         }
-         else {
-            gcc->static_data.total_vertices++;
-
-            num_vertices_in_prim++;
-            if (num_vertices_in_prim >= gcc->out_vue_min_count)
-               gcc->static_data.total_prims++;
-         }
-         break;
-      case TOY_OPCODE_ENDPRIM:
-         if (if_depth || do_depth) {
-            is_static = false;
-         }
-         else {
-            const int vertidx = gcc->static_data.total_vertices - 1;
-            const int idx = vertidx / 32;
-            const int subidx = vertidx % 32;
-
-            gcc->static_data.last_vertex[idx] |= 1 << subidx;
-            num_vertices_in_prim = 0;
-         }
-         break;
-      default:
-         break;
-      }
-
-      if (!is_static)
-         break;
-   }
-
-   gcc->is_static = is_static;
-}
-
-/**
- * Compile the shader.
- */
-static bool
-gs_compile(struct gs_compile_context *gcc)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct ilo_shader *sh = gcc->shader;
-
-   get_num_prims_static(gcc);
-
-   if (gcc->is_static) {
-      tc_head(tc);
-
-      gs_init_vars(gcc);
-      gs_ff_sync(gcc, tdst_d(gcc->vars.tmp), tsrc_imm_d(gcc->static_data.total_prims));
-      gs_COPY1(tc, gcc->vars.urb_write_header, 0, tsrc_from(tdst_d(gcc->vars.tmp)), 0);
-      if (gcc->write_so)
-         gs_COPY4(tc, gcc->vars.so_index, 0, tsrc_from(tdst_d(gcc->vars.tmp)), 1);
-
-      tc_tail(tc);
-   }
-   else {
-      tc_fail(tc, "no control flow support");
-      return false;
-   }
-
-   if (!gcc->write_vue)
-      gs_discard(gcc);
-
-   gs_lower_virtual_opcodes(gcc);
-   toy_compiler_legalize_for_ra(tc);
-   toy_compiler_optimize(tc);
-   toy_compiler_allocate_registers(tc,
-         gcc->first_free_grf,
-         gcc->last_free_grf,
-         1);
-   toy_compiler_legalize_for_asm(tc);
-
-   if (tc->fail) {
-      ilo_err("failed to legalize GS instructions: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_GS) {
-      ilo_printf("legalized instructions:\n");
-      toy_compiler_dump(tc);
-      ilo_printf("\n");
-   }
-
-   sh->kernel = toy_compiler_assemble(tc, &sh->kernel_size);
-   if (!sh->kernel)
-      return false;
-
-   if (ilo_debug & ILO_DEBUG_GS) {
-      ilo_printf("disassembly:\n");
-      toy_compiler_disassemble(tc->dev, sh->kernel, sh->kernel_size, false);
-      ilo_printf("\n");
-   }
-
-   return true;
-}
-
-static bool
-gs_compile_passthrough(struct gs_compile_context *gcc)
-{
-   struct toy_compiler *tc = &gcc->tc;
-   struct ilo_shader *sh = gcc->shader;
-
-   gcc->is_static = true;
-   gcc->static_data.total_vertices = gcc->in_vue_count;
-   gcc->static_data.total_prims = 1;
-   gcc->static_data.last_vertex[0] = 1 << (gcc->in_vue_count - 1);
-
-   gs_init_vars(gcc);
-   gs_ff_sync(gcc, tdst_d(gcc->vars.tmp), tsrc_imm_d(gcc->static_data.total_prims));
-   gs_COPY1(tc, gcc->vars.urb_write_header, 0, tsrc_from(tdst_d(gcc->vars.tmp)), 0);
-   if (gcc->write_so)
-      gs_COPY4(tc, gcc->vars.so_index, 0, tsrc_from(tdst_d(gcc->vars.tmp)), 1);
-
-   {
-      int vert, attr;
-
-      for (vert = 0; vert < gcc->out_vue_min_count; vert++) {
-         for (attr = 0; attr < gcc->shader->out.count; attr++) {
-            tc_MOV(tc, tdst_from(gcc->vars.tgsi_outs[attr]),
-                  tsrc_offset(gcc->payload.vues[vert], attr / 2, (attr % 2) * 4));
-         }
-
-         gs_lower_opcode_emit(gcc, NULL);
-      }
-
-      gs_lower_opcode_endprim(gcc, NULL);
-   }
-
-   if (!gcc->write_vue)
-      gs_discard(gcc);
-
-   gs_lower_virtual_opcodes(gcc);
-
-   toy_compiler_legalize_for_ra(tc);
-   toy_compiler_optimize(tc);
-   toy_compiler_allocate_registers(tc,
-         gcc->first_free_grf,
-         gcc->last_free_grf,
-         1);
-
-   toy_compiler_legalize_for_asm(tc);
-
-   if (tc->fail) {
-      ilo_err("failed to translate GS TGSI tokens: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_GS) {
-      int i;
-
-      ilo_printf("VUE count %d, VUE size %d\n",
-            gcc->in_vue_count, gcc->in_vue_size);
-      ilo_printf("%srasterizer discard\n",
-            (gcc->variant->u.gs.rasterizer_discard) ? "" : "no ");
-
-      for (i = 0; i < gcc->so_info->num_outputs; i++) {
-         ilo_printf("SO[%d] = OUT[%d]\n", i,
-               gcc->so_info->output[i].register_index);
-      }
-
-      ilo_printf("legalized instructions:\n");
-      toy_compiler_dump(tc);
-      ilo_printf("\n");
-   }
-
-   sh->kernel = toy_compiler_assemble(tc, &sh->kernel_size);
-   if (!sh->kernel) {
-      ilo_err("failed to compile GS: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_GS) {
-      ilo_printf("disassembly:\n");
-      toy_compiler_disassemble(tc->dev, sh->kernel, sh->kernel_size, false);
-      ilo_printf("\n");
-   }
-
-   return true;
-}
-
-/**
- * Translate the TGSI tokens.
- */
-static bool
-gs_setup_tgsi(struct toy_compiler *tc, const struct tgsi_token *tokens,
-              struct toy_tgsi *tgsi)
-{
-   if (ilo_debug & ILO_DEBUG_GS) {
-      ilo_printf("dumping geometry shader\n");
-      ilo_printf("\n");
-
-      tgsi_dump(tokens, 0);
-      ilo_printf("\n");
-   }
-
-   toy_compiler_translate_tgsi(tc, tokens, true, tgsi);
-   if (tc->fail)
-      return false;
-
-   if (ilo_debug & ILO_DEBUG_GS) {
-      ilo_printf("TGSI translator:\n");
-      toy_tgsi_dump(tgsi);
-      ilo_printf("\n");
-      toy_compiler_dump(tc);
-      ilo_printf("\n");
-   }
-
-   return true;
-}
-
-/**
- * Set up shader inputs for fixed-function units.
- */
-static void
-gs_setup_shader_in(struct ilo_shader *sh,
-                   const struct ilo_shader_variant *variant)
-{
-   int i;
-
-   for (i = 0; i < variant->u.gs.num_inputs; i++) {
-      sh->in.semantic_names[i] = variant->u.gs.semantic_names[i];
-      sh->in.semantic_indices[i] = variant->u.gs.semantic_indices[i];
-      sh->in.interp[i] = TGSI_INTERPOLATE_CONSTANT;
-      sh->in.centroid[i] = false;
-   }
-
-   sh->in.count = variant->u.gs.num_inputs;
-
-   sh->in.has_pos = false;
-   sh->in.has_linear_interp = false;
-   sh->in.barycentric_interpolation_mode = 0;
-}
-
-/**
- * Set up shader outputs for fixed-function units.
- *
- * XXX share the code with VS
- */
-static void
-gs_setup_shader_out(struct ilo_shader *sh, const struct toy_tgsi *tgsi,
-                    bool output_clipdist, int *output_map)
-{
-   int psize_slot = -1, pos_slot = -1;
-   int clipdist_slot[2] = { -1, -1 };
-   int color_slot[4] = { -1, -1, -1, -1 };
-   int num_outs, i;
-
-   /* find out the slots of outputs that need special care */
-   for (i = 0; i < tgsi->num_outputs; i++) {
-      switch (tgsi->outputs[i].semantic_name) {
-      case TGSI_SEMANTIC_PSIZE:
-         psize_slot = i;
-         break;
-      case TGSI_SEMANTIC_POSITION:
-         pos_slot = i;
-         break;
-      case TGSI_SEMANTIC_CLIPDIST:
-         if (tgsi->outputs[i].semantic_index)
-            clipdist_slot[1] = i;
-         else
-            clipdist_slot[0] = i;
-         break;
-      case TGSI_SEMANTIC_COLOR:
-         if (tgsi->outputs[i].semantic_index)
-            color_slot[2] = i;
-         else
-            color_slot[0] = i;
-         break;
-      case TGSI_SEMANTIC_BCOLOR:
-         if (tgsi->outputs[i].semantic_index)
-            color_slot[3] = i;
-         else
-            color_slot[1] = i;
-         break;
-      default:
-         break;
-      }
-   }
-
-   /* the first two VUEs are always PSIZE and POSITION */
-   num_outs = 2;
-   output_map[0] = psize_slot;
-   output_map[1] = pos_slot;
-
-   sh->out.register_indices[0] =
-      (psize_slot >= 0) ? tgsi->outputs[psize_slot].index : -1;
-   sh->out.semantic_names[0] = TGSI_SEMANTIC_PSIZE;
-   sh->out.semantic_indices[0] = 0;
-
-   sh->out.register_indices[1] =
-      (pos_slot >= 0) ? tgsi->outputs[pos_slot].index : -1;
-   sh->out.semantic_names[1] = TGSI_SEMANTIC_POSITION;
-   sh->out.semantic_indices[1] = 0;
-
-   sh->out.has_pos = true;
-
-   /* followed by optional clip distances */
-   if (output_clipdist) {
-      sh->out.register_indices[num_outs] =
-         (clipdist_slot[0] >= 0) ? tgsi->outputs[clipdist_slot[0]].index : -1;
-      sh->out.semantic_names[num_outs] = TGSI_SEMANTIC_CLIPDIST;
-      sh->out.semantic_indices[num_outs] = 0;
-      output_map[num_outs++] = clipdist_slot[0];
-
-      sh->out.register_indices[num_outs] =
-         (clipdist_slot[1] >= 0) ? tgsi->outputs[clipdist_slot[1]].index : -1;
-      sh->out.semantic_names[num_outs] = TGSI_SEMANTIC_CLIPDIST;
-      sh->out.semantic_indices[num_outs] = 1;
-      output_map[num_outs++] = clipdist_slot[1];
-   }
-
-   /*
-    * make BCOLOR follow COLOR so that we can make use of
-    * ATTRIBUTE_SWIZZLE_INPUTATTR_FACING in 3DSTATE_SF
-    */
-   for (i = 0; i < 4; i++) {
-      const int slot = color_slot[i];
-
-      if (slot < 0)
-         continue;
-
-      sh->out.register_indices[num_outs] = tgsi->outputs[slot].index;
-      sh->out.semantic_names[num_outs] = tgsi->outputs[slot].semantic_name;
-      sh->out.semantic_indices[num_outs] = tgsi->outputs[slot].semantic_index;
-
-      output_map[num_outs++] = slot;
-   }
-
-   /* add the rest of the outputs */
-   for (i = 0; i < tgsi->num_outputs; i++) {
-      switch (tgsi->outputs[i].semantic_name) {
-      case TGSI_SEMANTIC_PSIZE:
-      case TGSI_SEMANTIC_POSITION:
-      case TGSI_SEMANTIC_CLIPDIST:
-      case TGSI_SEMANTIC_COLOR:
-      case TGSI_SEMANTIC_BCOLOR:
-         break;
-      default:
-         sh->out.register_indices[num_outs] = tgsi->outputs[i].index;
-         sh->out.semantic_names[num_outs] = tgsi->outputs[i].semantic_name;
-         sh->out.semantic_indices[num_outs] = tgsi->outputs[i].semantic_index;
-         output_map[num_outs++] = i;
-         break;
-      }
-   }
-
-   sh->out.count = num_outs;
-}
-
-static void
-gs_setup_vars(struct gs_compile_context *gcc)
-{
-   int grf = gcc->first_free_grf;
-   int i;
-
-   gcc->vars.urb_write_header = tdst_d(tdst(TOY_FILE_GRF, grf, 0));
-   grf++;
-
-   gcc->vars.tmp = tdst(TOY_FILE_GRF, grf, 0);
-   grf++;
-
-   if (gcc->write_so) {
-      gcc->vars.buffer_needed = gcc->out_vue_min_count - 1;
-      for (i = 0; i < gcc->vars.buffer_needed; i++) {
-         gcc->vars.buffers[i] = tdst(TOY_FILE_GRF, grf, 0);
-         grf += gcc->shader->out.count;
-      }
-
-      gcc->vars.so_written = tdst_d(tdst(TOY_FILE_GRF, grf, 0));
-      grf++;
-
-      gcc->vars.so_index = tdst_d(tdst(TOY_FILE_GRF, grf, 0));
-      grf++;
-   }
-
-   gcc->first_free_grf = grf;
-
-   if (!gcc->tgsi.reg_mapping) {
-      for (i = 0; i < gcc->shader->out.count; i++)
-         gcc->vars.tgsi_outs[i] = tsrc(TOY_FILE_GRF, grf++, 0);
-
-      gcc->first_free_grf = grf;
-      return;
-   }
-
-   for (i = 0; i < gcc->shader->out.count; i++) {
-      const int slot = gcc->output_map[i];
-      const int vrf = (slot >= 0) ? toy_tgsi_get_vrf(&gcc->tgsi,
-            TGSI_FILE_OUTPUT, 0, gcc->tgsi.outputs[slot].index) : -1;
-
-      if (vrf >= 0)
-         gcc->vars.tgsi_outs[i] = tsrc(TOY_FILE_VRF, vrf, 0);
-      else
-         gcc->vars.tgsi_outs[i] = (i == 0) ? tsrc_imm_d(0) : tsrc_imm_f(0.0f);
-   }
-}
-
-static void
-gs_setup_payload(struct gs_compile_context *gcc)
-{
-   int grf, i;
-
-   grf = 0;
-
-   /* r0: payload header */
-   gcc->payload.header = tsrc_d(tsrc(TOY_FILE_GRF, grf, 0));
-   grf++;
-
-   /* r1: SVBI */
-   if (gcc->write_so) {
-      gcc->payload.svbi = tsrc_ud(tsrc(TOY_FILE_GRF, grf, 0));
-      grf++;
-   }
-
-   /* URB data */
-   gcc->shader->in.start_grf = grf;
-
-   /* no pull constants */
-
-   /* VUEs */
-   for (i = 0; i < gcc->in_vue_count; i++) {
-      gcc->payload.vues[i] = tsrc(TOY_FILE_GRF, grf, 0);
-      grf += gcc->in_vue_size;
-   }
-
-   gcc->first_free_grf = grf;
-   gcc->last_free_grf = 127;
-}
-
-/**
- * Set up GS compile context.  This includes translating the TGSI tokens.
- */
-static bool
-gs_setup(struct gs_compile_context *gcc,
-         const struct ilo_shader_state *state,
-         const struct ilo_shader_variant *variant,
-         int num_verts)
-{
-   memset(gcc, 0, sizeof(*gcc));
-
-   gcc->shader = CALLOC_STRUCT(ilo_shader);
-   if (!gcc->shader)
-      return false;
-
-   gcc->variant = variant;
-   gcc->so_info = &state->info.stream_output;
-
-   toy_compiler_init(&gcc->tc, state->info.dev);
-
-   gcc->write_so = (state->info.stream_output.num_outputs > 0);
-   gcc->write_vue = !gcc->variant->u.gs.rasterizer_discard;
-
-   gcc->tc.templ.access_mode = GEN6_ALIGN_16;
-   gcc->tc.templ.exec_size = GEN6_EXECSIZE_4;
-   gcc->tc.rect_linear_width = 4;
-
-   if (state->info.tokens) {
-      if (!gs_setup_tgsi(&gcc->tc, state->info.tokens, &gcc->tgsi)) {
-         toy_compiler_cleanup(&gcc->tc);
-         FREE(gcc->shader);
-         return false;
-      }
-
-      switch (gcc->tgsi.props.gs_input_prim) {
-      case PIPE_PRIM_POINTS:
-         gcc->in_vue_count = 1;
-         break;
-      case PIPE_PRIM_LINES:
-         gcc->in_vue_count = 2;
-         gcc->shader->in.discard_adj = true;
-         break;
-      case PIPE_PRIM_TRIANGLES:
-         gcc->in_vue_count = 3;
-         gcc->shader->in.discard_adj = true;
-         break;
-      case PIPE_PRIM_LINES_ADJACENCY:
-         gcc->in_vue_count = 4;
-         break;
-      case PIPE_PRIM_TRIANGLES_ADJACENCY:
-         gcc->in_vue_count = 6;
-         break;
-      default:
-         tc_fail(&gcc->tc, "unsupported GS input type");
-         gcc->in_vue_count = 0;
-         break;
-      }
-
-      switch (gcc->tgsi.props.gs_output_prim) {
-      case PIPE_PRIM_POINTS:
-         gcc->out_vue_min_count = 1;
-         break;
-      case PIPE_PRIM_LINE_STRIP:
-         gcc->out_vue_min_count = 2;
-         break;
-      case PIPE_PRIM_TRIANGLE_STRIP:
-         gcc->out_vue_min_count = 3;
-         break;
-      default:
-         tc_fail(&gcc->tc, "unsupported GS output type");
-         gcc->out_vue_min_count = 0;
-         break;
-      }
-   }
-   else {
-      int i;
-
-      gcc->in_vue_count = num_verts;
-      gcc->out_vue_min_count = num_verts;
-
-      gcc->tgsi.num_outputs = gcc->variant->u.gs.num_inputs;
-      for (i = 0; i < gcc->variant->u.gs.num_inputs; i++) {
-         gcc->tgsi.outputs[i].semantic_name =
-            gcc->variant->u.gs.semantic_names[i];
-         gcc->tgsi.outputs[i].semantic_index =
-            gcc->variant->u.gs.semantic_indices[i];
-      }
-   }
-
-   gcc->tc.templ.access_mode = GEN6_ALIGN_1;
-
-   gs_setup_shader_in(gcc->shader, gcc->variant);
-   gs_setup_shader_out(gcc->shader, &gcc->tgsi, false, gcc->output_map);
-
-   gcc->in_vue_size = (gcc->shader->in.count + 1) / 2;
-
-   gcc->out_vue_size = (gcc->shader->out.count + 1) / 2;
-
-   gs_setup_payload(gcc);
-   gs_setup_vars(gcc);
-
-   /* m0 is reserved for system routines */
-   gcc->first_free_mrf = 1;
-   gcc->last_free_mrf = 15;
-
-   gcc->shader->bt.gen6_so_base = 0;
-   gcc->shader->bt.gen6_so_count = gcc->so_info->num_outputs;
-
-   gcc->shader->bt.total_count = gcc->shader->bt.gen6_so_count;
-
-   return true;
-}
-
-/**
- * Compile the geometry shader.
- */
-struct ilo_shader *
-ilo_shader_compile_gs(const struct ilo_shader_state *state,
-                      const struct ilo_shader_variant *variant)
-{
-   struct gs_compile_context gcc;
-
-   if (!gs_setup(&gcc, state, variant, 0))
-      return NULL;
-
-   if (!gs_compile(&gcc)) {
-      FREE(gcc.shader);
-      gcc.shader = NULL;
-   }
-
-   toy_tgsi_cleanup(&gcc.tgsi);
-   toy_compiler_cleanup(&gcc.tc);
-
-   return gcc.shader;
-}
-
-static bool
-append_gs_to_vs(struct ilo_shader *vs, struct ilo_shader *gs, int num_verts)
-{
-   void *combined;
-   int gs_offset;
-
-   if (!gs)
-      return false;
-
-   /* kernels must be aligned to 64-byte */
-   gs_offset = align(vs->kernel_size, 64);
-   combined = REALLOC(vs->kernel, vs->kernel_size,
-         gs_offset + gs->kernel_size);
-   if (!combined)
-      return false;
-
-   memcpy(combined + gs_offset, gs->kernel, gs->kernel_size);
-
-   vs->kernel = combined;
-   vs->kernel_size = gs_offset + gs->kernel_size;
-
-   vs->stream_output = true;
-   vs->gs_offsets[num_verts - 1] = gs_offset;
-   vs->gs_start_grf = gs->in.start_grf;
-   vs->gs_bt_so_count = gs->bt.gen6_so_count;
-
-   ilo_shader_destroy_kernel(gs);
-
-   return true;
-}
-
-bool
-ilo_shader_compile_gs_passthrough(const struct ilo_shader_state *vs_state,
-                                  const struct ilo_shader_variant *vs_variant,
-                                  const int *so_mapping,
-                                  struct ilo_shader *vs)
-{
-   struct gs_compile_context gcc;
-   struct ilo_shader_state state;
-   struct ilo_shader_variant variant;
-   const int num_verts = 3;
-   int i;
-
-   /* init GS state and variant */
-   state = *vs_state;
-   state.info.tokens = NULL;
-   for (i = 0; i < state.info.stream_output.num_outputs; i++) {
-      const int reg = state.info.stream_output.output[i].register_index;
-
-      state.info.stream_output.output[i].register_index = so_mapping[reg];
-   }
-
-   variant = *vs_variant;
-   variant.u.gs.rasterizer_discard = vs_variant->u.vs.rasterizer_discard;
-   variant.u.gs.num_inputs = vs->out.count;
-   for (i = 0; i < vs->out.count; i++) {
-      variant.u.gs.semantic_names[i] =
-         vs->out.semantic_names[i];
-      variant.u.gs.semantic_indices[i] =
-         vs->out.semantic_indices[i];
-   }
-
-   if (!gs_setup(&gcc, &state, &variant, num_verts))
-      return false;
-
-   if (!gs_compile_passthrough(&gcc)) {
-      FREE(gcc.shader);
-      gcc.shader = NULL;
-   }
-
-   /* no need to call toy_tgsi_cleanup() */
-   toy_compiler_cleanup(&gcc.tc);
-
-   return append_gs_to_vs(vs, gcc.shader, num_verts);
-}
diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_internal.h b/src/gallium/drivers/ilo/shader/ilo_shader_internal.h
deleted file mode 100644 (file)
index 1f0cda1..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef ILO_SHADER_INTERNAL_H
-#define ILO_SHADER_INTERNAL_H
-
-#include "core/ilo_state_sbe.h"
-#include "core/ilo_state_sol.h"
-
-#include "ilo_common.h"
-#include "ilo_state.h"
-#include "ilo_shader.h"
-
-/* XXX The interface needs to be reworked */
-
-/**
- * A shader variant.  It consists of non-orthogonal states of the pipe context
- * affecting the compilation of a shader.
- */
-struct ilo_shader_variant {
-   union {
-      struct {
-         bool rasterizer_discard;
-         int num_ucps;
-      } vs;
-
-      struct {
-         bool rasterizer_discard;
-         int num_inputs;
-         int semantic_names[PIPE_MAX_SHADER_INPUTS];
-         int semantic_indices[PIPE_MAX_SHADER_INPUTS];
-      } gs;
-
-      struct {
-         bool flatshade;
-         int fb_height;
-         int num_cbufs;
-      } fs;
-   } u;
-
-   bool use_pcb;
-
-   int num_sampler_views;
-   struct {
-      unsigned r:3;
-      unsigned g:3;
-      unsigned b:3;
-      unsigned a:3;
-   } sampler_view_swizzles[ILO_MAX_SAMPLER_VIEWS];
-
-   uint32_t saturate_tex_coords[3];
-};
-
-struct ilo_kernel_routing {
-   bool initialized;
-
-   bool is_point;
-   bool light_twoside;
-   uint32_t sprite_coord_enable;
-   int sprite_coord_mode;
-   int src_len;
-   int src_semantics[PIPE_MAX_SHADER_OUTPUTS];
-   int src_indices[PIPE_MAX_SHADER_OUTPUTS];
-
-   struct ilo_state_sbe sbe;
-};
-
-/**
- * A compiled shader.
- */
-struct ilo_shader {
-   struct ilo_shader_variant variant;
-
-   union ilo_shader_cso cso;
-
-   struct {
-      int semantic_names[PIPE_MAX_SHADER_INPUTS];
-      int semantic_indices[PIPE_MAX_SHADER_INPUTS];
-      int interp[PIPE_MAX_SHADER_INPUTS];
-      bool centroid[PIPE_MAX_SHADER_INPUTS];
-      int count;
-
-      int start_grf;
-      bool has_pos;
-      bool has_linear_interp;
-      int barycentric_interpolation_mode;
-      uint32_t const_interp_enable;
-      bool discard_adj;
-   } in;
-
-   struct {
-      int register_indices[PIPE_MAX_SHADER_OUTPUTS];
-      int semantic_names[PIPE_MAX_SHADER_OUTPUTS];
-      int semantic_indices[PIPE_MAX_SHADER_OUTPUTS];
-      int count;
-
-      bool has_pos;
-   } out;
-
-   bool skip_cbuf0_upload;
-
-   bool has_kill;
-   bool dispatch_16;
-
-   bool stream_output;
-   int svbi_post_inc;
-
-   uint32_t sol_data[PIPE_MAX_SO_OUTPUTS][2];
-   struct ilo_state_sol sol;
-
-   /* for VS stream output / rasterizer discard */
-   int gs_offsets[3];
-   int gs_start_grf;
-   int gs_bt_so_count;
-
-   void *kernel;
-   int kernel_size;
-   int per_thread_scratch_size;
-
-   struct ilo_kernel_routing routing;
-   struct ilo_state_ps_params_info ps_params;
-
-   /* what does the push constant buffer consist of? */
-   struct {
-      int cbuf0_size;
-      int clip_state_size;
-   } pcb;
-
-   /* binding table */
-   struct {
-      int rt_base, rt_count;
-      int tex_base, tex_count;
-      int const_base, const_count;
-      int res_base, res_count;
-
-      int gen6_so_base, gen6_so_count;
-
-      int global_base, global_count;
-
-      int total_count;
-   } bt;
-
-   struct list_head list;
-
-   /* managed by shader cache */
-   bool uploaded;
-   uint32_t cache_offset;
-};
-
-/**
- * Information about a shader state.
- */
-struct ilo_shader_info {
-   const struct ilo_dev *dev;
-   int type;
-
-   const struct tgsi_token *tokens;
-
-   struct pipe_stream_output_info stream_output;
-   struct {
-      unsigned req_local_mem;
-      unsigned req_private_mem;
-      unsigned req_input_mem;
-   } compute;
-
-   uint32_t non_orthogonal_states;
-
-   bool has_color_interp;
-   bool has_pos;
-   bool has_vertexid;
-   bool has_instanceid;
-   bool fs_color0_writes_all_cbufs;
-
-   int edgeflag_in;
-   int edgeflag_out;
-
-   uint32_t shadow_samplers;
-   int num_samplers;
-
-   int constant_buffer_count;
-};
-
-/**
- * A shader state.
- */
-struct ilo_shader_state {
-   struct ilo_shader_info info;
-
-   struct list_head variants;
-   int num_variants, total_size;
-
-   struct ilo_shader *shader;
-
-   /* managed by shader cache */
-   struct ilo_shader_cache *cache;
-   struct list_head list;
-};
-
-void
-ilo_shader_variant_init(struct ilo_shader_variant *variant,
-                        const struct ilo_shader_info *info,
-                        const struct ilo_state_vector *vec);
-
-bool
-ilo_shader_state_use_variant(struct ilo_shader_state *state,
-                             const struct ilo_shader_variant *variant);
-
-struct ilo_shader *
-ilo_shader_compile_vs(const struct ilo_shader_state *state,
-                      const struct ilo_shader_variant *variant);
-
-struct ilo_shader *
-ilo_shader_compile_gs(const struct ilo_shader_state *state,
-                      const struct ilo_shader_variant *variant);
-
-bool
-ilo_shader_compile_gs_passthrough(const struct ilo_shader_state *vs_state,
-                                  const struct ilo_shader_variant *vs_variant,
-                                  const int *so_mapping,
-                                  struct ilo_shader *vs);
-
-struct ilo_shader *
-ilo_shader_compile_fs(const struct ilo_shader_state *state,
-                      const struct ilo_shader_variant *variant);
-
-struct ilo_shader *
-ilo_shader_compile_cs(const struct ilo_shader_state *state,
-                      const struct ilo_shader_variant *variant);
-
-static inline void
-ilo_shader_destroy_kernel(struct ilo_shader *sh)
-{
-   FREE(sh->kernel);
-   FREE(sh);
-}
-
-#endif /* ILO_SHADER_INTERNAL_H */
diff --git a/src/gallium/drivers/ilo/shader/ilo_shader_vs.c b/src/gallium/drivers/ilo/shader/ilo_shader_vs.c
deleted file mode 100644 (file)
index 2a1cad4..0000000
+++ /dev/null
@@ -1,1360 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "tgsi/tgsi_dump.h"
-#include "tgsi/tgsi_util.h"
-#include "toy_compiler.h"
-#include "toy_tgsi.h"
-#include "toy_legalize.h"
-#include "toy_optimize.h"
-#include "toy_helpers.h"
-#include "ilo_shader_internal.h"
-
-struct vs_compile_context {
-   struct ilo_shader *shader;
-   const struct ilo_shader_variant *variant;
-
-   struct toy_compiler tc;
-   struct toy_tgsi tgsi;
-   int const_cache;
-
-   int output_map[PIPE_MAX_SHADER_OUTPUTS];
-
-   int num_grf_per_vrf;
-   int first_const_grf;
-   int first_ucp_grf;
-   int first_vue_grf;
-   int first_free_grf;
-   int last_free_grf;
-
-   int first_free_mrf;
-   int last_free_mrf;
-};
-
-static void
-vs_lower_opcode_tgsi_in(struct vs_compile_context *vcc,
-                        struct toy_dst dst, int dim, int idx)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   int slot;
-
-   assert(!dim);
-
-   slot = toy_tgsi_find_input(&vcc->tgsi, idx);
-   if (slot >= 0) {
-      const int first_in_grf = vcc->first_vue_grf +
-         (vcc->shader->in.count - vcc->tgsi.num_inputs);
-      const int grf = first_in_grf + vcc->tgsi.inputs[slot].semantic_index;
-      const struct toy_src src = tsrc(TOY_FILE_GRF, grf, 0);
-
-      tc_MOV(tc, dst, src);
-   }
-   else {
-      /* undeclared input */
-      tc_MOV(tc, dst, tsrc_imm_f(0.0f));
-   }
-}
-
-static bool
-vs_lower_opcode_tgsi_const_pcb(struct vs_compile_context *vcc,
-                               struct toy_dst dst, int dim,
-                               struct toy_src idx)
-{
-   const int i = idx.val32;
-   const int grf = vcc->first_const_grf + i / 2;
-   const int grf_subreg = (i & 1) * 16;
-   struct toy_src src;
-
-   if (!vcc->variant->use_pcb || dim != 0 || idx.file != TOY_FILE_IMM ||
-       grf >= vcc->first_ucp_grf)
-      return false;
-
-
-   src = tsrc_rect(tsrc(TOY_FILE_GRF, grf, grf_subreg), TOY_RECT_041);
-   tc_MOV(&vcc->tc, dst, src);
-
-   return true;
-}
-
-static void
-vs_lower_opcode_tgsi_const_gen6(struct vs_compile_context *vcc,
-                                struct toy_dst dst, int dim,
-                                struct toy_src idx)
-{
-   const struct toy_dst header =
-      tdst_ud(tdst(TOY_FILE_MRF, vcc->first_free_mrf, 0));
-   const struct toy_dst block_offsets =
-      tdst_ud(tdst(TOY_FILE_MRF, vcc->first_free_mrf + 1, 0));
-   const struct toy_src r0 = tsrc_ud(tsrc(TOY_FILE_GRF, 0, 0));
-   struct toy_compiler *tc = &vcc->tc;
-   unsigned msg_type, msg_ctrl, msg_len;
-   struct toy_inst *inst;
-   struct toy_src desc;
-
-   if (vs_lower_opcode_tgsi_const_pcb(vcc, dst, dim, idx))
-      return;
-
-   /* set message header */
-   inst = tc_MOV(tc, header, r0);
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-   /* set block offsets */
-   tc_MOV(tc, block_offsets, idx);
-
-   msg_type = GEN6_MSG_DP_OWORD_DUAL_BLOCK_READ;
-   msg_ctrl = GEN6_MSG_DP_OWORD_DUAL_BLOCK_SIZE_1;
-   msg_len = 2;
-
-   desc = tsrc_imm_mdesc_data_port(tc, false, msg_len, 1, true, false,
-         msg_type, msg_ctrl, vcc->shader->bt.const_base + dim);
-
-   tc_SEND(tc, dst, tsrc_from(header), desc, vcc->const_cache);
-}
-
-static void
-vs_lower_opcode_tgsi_const_gen7(struct vs_compile_context *vcc,
-                                struct toy_dst dst, int dim,
-                                struct toy_src idx)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   const struct toy_dst offset =
-      tdst_ud(tdst(TOY_FILE_MRF, vcc->first_free_mrf, 0));
-   struct toy_src desc;
-
-   if (vs_lower_opcode_tgsi_const_pcb(vcc, dst, dim, idx))
-      return;
-
-   /*
-    * In 259b65e2e7938de4aab323033cfe2b33369ddb07, pull constant load was
-    * changed from OWord Dual Block Read to ld to increase performance in the
-    * classic driver.  Since we use the constant cache instead of the data
-    * cache, I wonder if we still want to follow the classic driver.
-    */
-
-   /* set offset */
-   tc_MOV(tc, offset, idx);
-
-   desc = tsrc_imm_mdesc_sampler(tc, 1, 1, false,
-         GEN6_MSG_SAMPLER_SIMD4X2,
-         GEN6_MSG_SAMPLER_LD,
-         0,
-         vcc->shader->bt.const_base + dim);
-
-   tc_SEND(tc, dst, tsrc_from(offset), desc, GEN6_SFID_SAMPLER);
-}
-
-static void
-vs_lower_opcode_tgsi_imm(struct vs_compile_context *vcc,
-                         struct toy_dst dst, int idx)
-{
-   const uint32_t *imm;
-   int ch;
-
-   imm = toy_tgsi_get_imm(&vcc->tgsi, idx, NULL);
-
-   for (ch = 0; ch < 4; ch++) {
-      /* raw moves */
-      tc_MOV(&vcc->tc,
-            tdst_writemask(tdst_ud(dst), 1 << ch),
-            tsrc_imm_ud(imm[ch]));
-   }
-}
-
-
-static void
-vs_lower_opcode_tgsi_sv(struct vs_compile_context *vcc,
-                        struct toy_dst dst, int dim, int idx)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   const struct toy_tgsi *tgsi = &vcc->tgsi;
-   int slot;
-
-   assert(!dim);
-
-   slot = toy_tgsi_find_system_value(tgsi, idx);
-   if (slot < 0)
-      return;
-
-   switch (tgsi->system_values[slot].semantic_name) {
-   case TGSI_SEMANTIC_INSTANCEID:
-   case TGSI_SEMANTIC_VERTEXID:
-      /*
-       * In 3DSTATE_VERTEX_ELEMENTS, we prepend an extra vertex element for
-       * the generated IDs, with VID in the X channel and IID in the Y
-       * channel.
-       */
-      {
-         const int grf = vcc->first_vue_grf;
-         const struct toy_src src = tsrc(TOY_FILE_GRF, grf, 0);
-         const enum toy_swizzle swizzle =
-            (tgsi->system_values[slot].semantic_name ==
-             TGSI_SEMANTIC_INSTANCEID) ? TOY_SWIZZLE_Y : TOY_SWIZZLE_X;
-
-         tc_MOV(tc, tdst_d(dst), tsrc_d(tsrc_swizzle1(src, swizzle)));
-      }
-      break;
-   case TGSI_SEMANTIC_PRIMID:
-   default:
-      tc_fail(tc, "unhandled system value");
-      tc_MOV(tc, dst, tsrc_imm_d(0));
-      break;
-   }
-}
-
-static void
-vs_lower_opcode_tgsi_direct(struct vs_compile_context *vcc,
-                            struct toy_inst *inst)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   int dim, idx;
-
-   assert(inst->src[0].file == TOY_FILE_IMM);
-   dim = inst->src[0].val32;
-
-   assert(inst->src[1].file == TOY_FILE_IMM);
-   idx = inst->src[1].val32;
-
-   switch (inst->opcode) {
-   case TOY_OPCODE_TGSI_IN:
-      vs_lower_opcode_tgsi_in(vcc, inst->dst, dim, idx);
-      break;
-   case TOY_OPCODE_TGSI_CONST:
-      if (ilo_dev_gen(tc->dev) >= ILO_GEN(7))
-         vs_lower_opcode_tgsi_const_gen7(vcc, inst->dst, dim, inst->src[1]);
-      else
-         vs_lower_opcode_tgsi_const_gen6(vcc, inst->dst, dim, inst->src[1]);
-      break;
-   case TOY_OPCODE_TGSI_SV:
-      vs_lower_opcode_tgsi_sv(vcc, inst->dst, dim, idx);
-      break;
-   case TOY_OPCODE_TGSI_IMM:
-      assert(!dim);
-      vs_lower_opcode_tgsi_imm(vcc, inst->dst, idx);
-      break;
-   default:
-      tc_fail(tc, "unhandled TGSI fetch");
-      break;
-   }
-
-   tc_discard_inst(tc, inst);
-}
-
-static void
-vs_lower_opcode_tgsi_indirect(struct vs_compile_context *vcc,
-                              struct toy_inst *inst)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   enum tgsi_file_type file;
-   int dim, idx;
-   struct toy_src indirect_dim, indirect_idx;
-
-   assert(inst->src[0].file == TOY_FILE_IMM);
-   file = inst->src[0].val32;
-
-   assert(inst->src[1].file == TOY_FILE_IMM);
-   dim = inst->src[1].val32;
-   indirect_dim = inst->src[2];
-
-   assert(inst->src[3].file == TOY_FILE_IMM);
-   idx = inst->src[3].val32;
-   indirect_idx = inst->src[4];
-
-   /* no dimension indirection */
-   assert(indirect_dim.file == TOY_FILE_IMM);
-   dim += indirect_dim.val32;
-
-   switch (inst->opcode) {
-   case TOY_OPCODE_TGSI_INDIRECT_FETCH:
-      if (file == TGSI_FILE_CONSTANT) {
-         if (idx) {
-            struct toy_dst tmp = tc_alloc_tmp(tc);
-
-            tc_ADD(tc, tmp, indirect_idx, tsrc_imm_d(idx));
-            indirect_idx = tsrc_from(tmp);
-         }
-
-         if (ilo_dev_gen(tc->dev) >= ILO_GEN(7))
-            vs_lower_opcode_tgsi_const_gen7(vcc, inst->dst, dim, indirect_idx);
-         else
-            vs_lower_opcode_tgsi_const_gen6(vcc, inst->dst, dim, indirect_idx);
-         break;
-      }
-      /* fall through */
-   case TOY_OPCODE_TGSI_INDIRECT_STORE:
-   default:
-      tc_fail(tc, "unhandled TGSI indirection");
-      break;
-   }
-
-   tc_discard_inst(tc, inst);
-}
-
-/**
- * Emit instructions to move sampling parameters to the message registers.
- */
-static int
-vs_add_sampler_params(struct toy_compiler *tc, int msg_type, int base_mrf,
-                      struct toy_src coords, int num_coords,
-                      struct toy_src bias_or_lod, struct toy_src ref_or_si,
-                      struct toy_src ddx, struct toy_src ddy, int num_derivs)
-{
-   const unsigned coords_writemask = (1 << num_coords) - 1;
-   struct toy_dst m[3];
-   int num_params, i;
-
-   assert(num_coords <= 4);
-   assert(num_derivs <= 3 && num_derivs <= num_coords);
-
-   for (i = 0; i < ARRAY_SIZE(m); i++)
-      m[i] = tdst(TOY_FILE_MRF, base_mrf + i, 0);
-
-   switch (msg_type) {
-   case GEN6_MSG_SAMPLER_SAMPLE_L:
-      tc_MOV(tc, tdst_writemask(m[0], coords_writemask), coords);
-      tc_MOV(tc, tdst_writemask(m[1], TOY_WRITEMASK_X), bias_or_lod);
-      num_params = 5;
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_D:
-      tc_MOV(tc, tdst_writemask(m[0], coords_writemask), coords);
-      tc_MOV(tc, tdst_writemask(m[1], TOY_WRITEMASK_XZ),
-            tsrc_swizzle(ddx, 0, 0, 1, 1));
-      tc_MOV(tc, tdst_writemask(m[1], TOY_WRITEMASK_YW),
-            tsrc_swizzle(ddy, 0, 0, 1, 1));
-      if (num_derivs > 2) {
-         tc_MOV(tc, tdst_writemask(m[2], TOY_WRITEMASK_X),
-               tsrc_swizzle1(ddx, 2));
-         tc_MOV(tc, tdst_writemask(m[2], TOY_WRITEMASK_Y),
-               tsrc_swizzle1(ddy, 2));
-      }
-      num_params = 4 + num_derivs * 2;
-      break;
-   case GEN6_MSG_SAMPLER_SAMPLE_L_C:
-      tc_MOV(tc, tdst_writemask(m[0], coords_writemask), coords);
-      tc_MOV(tc, tdst_writemask(m[1], TOY_WRITEMASK_X), ref_or_si);
-      tc_MOV(tc, tdst_writemask(m[1], TOY_WRITEMASK_Y), bias_or_lod);
-      num_params = 6;
-      break;
-   case GEN6_MSG_SAMPLER_LD:
-      assert(num_coords <= 3);
-      tc_MOV(tc, tdst_writemask(tdst_d(m[0]), coords_writemask), coords);
-      tc_MOV(tc, tdst_writemask(tdst_d(m[0]), TOY_WRITEMASK_W), bias_or_lod);
-      if (ilo_dev_gen(tc->dev) >= ILO_GEN(7)) {
-         num_params = 4;
-      }
-      else {
-         tc_MOV(tc, tdst_writemask(tdst_d(m[1]), TOY_WRITEMASK_X), ref_or_si);
-         num_params = 5;
-      }
-      break;
-   case GEN6_MSG_SAMPLER_RESINFO:
-      tc_MOV(tc, tdst_writemask(tdst_d(m[0]), TOY_WRITEMASK_X), bias_or_lod);
-      num_params = 1;
-      break;
-   default:
-      tc_fail(tc, "unknown sampler opcode");
-      num_params = 0;
-      break;
-   }
-
-   return (num_params + 3) / 4;
-}
-
-/**
- * Set up message registers and return the message descriptor for sampling.
- */
-static struct toy_src
-vs_prepare_tgsi_sampling(struct vs_compile_context *vcc,
-                         const struct toy_inst *inst,
-                         int base_mrf, unsigned *ret_sampler_index)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   unsigned simd_mode, msg_type, msg_len, sampler_index, binding_table_index;
-   struct toy_src coords, ddx, ddy, bias_or_lod, ref_or_si;
-   int num_coords, ref_pos, num_derivs;
-   int sampler_src;
-
-   simd_mode = GEN6_MSG_SAMPLER_SIMD4X2;
-
-   coords = inst->src[0];
-   ddx = tsrc_null();
-   ddy = tsrc_null();
-   bias_or_lod = tsrc_null();
-   ref_or_si = tsrc_null();
-   num_derivs = 0;
-   sampler_src = 1;
-
-   num_coords = tgsi_util_get_texture_coord_dim(inst->tex.target);
-   ref_pos = tgsi_util_get_shadow_ref_src_index(inst->tex.target);
-
-   /* extract the parameters */
-   switch (inst->opcode) {
-   case TOY_OPCODE_TGSI_TXD:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 4);
-
-         msg_type = GEN7_MSG_SAMPLER_SAMPLE_D_C;
-         ref_or_si = tsrc_swizzle1(coords, ref_pos);
-
-         if (ilo_dev_gen(tc->dev) < ILO_GEN(7.5))
-            tc_fail(tc, "TXD with shadow sampler not supported");
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_D;
-      }
-
-      ddx = inst->src[1];
-      ddy = inst->src[2];
-      num_derivs = num_coords;
-      sampler_src = 3;
-      break;
-   case TOY_OPCODE_TGSI_TXL:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 3);
-
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_L_C;
-         ref_or_si = tsrc_swizzle1(coords, ref_pos);
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_L;
-      }
-
-      bias_or_lod = tsrc_swizzle1(coords, TOY_SWIZZLE_W);
-      break;
-   case TOY_OPCODE_TGSI_TXF:
-      msg_type = GEN6_MSG_SAMPLER_LD;
-
-      switch (inst->tex.target) {
-      case TGSI_TEXTURE_2D_MSAA:
-      case TGSI_TEXTURE_2D_ARRAY_MSAA:
-         assert(ref_pos >= 0 && ref_pos < 4);
-         /* lod is always 0 */
-         bias_or_lod = tsrc_imm_d(0);
-         ref_or_si = tsrc_swizzle1(coords, ref_pos);
-         break;
-      default:
-         bias_or_lod = tsrc_swizzle1(coords, TOY_SWIZZLE_W);
-         break;
-      }
-
-      /* offset the coordinates */
-      if (!tsrc_is_null(inst->tex.offsets[0])) {
-         struct toy_dst tmp;
-
-         tmp = tc_alloc_tmp(tc);
-         tc_ADD(tc, tmp, coords, inst->tex.offsets[0]);
-         coords = tsrc_from(tmp);
-      }
-
-      sampler_src = 1;
-      break;
-   case TOY_OPCODE_TGSI_TXQ:
-      msg_type = GEN6_MSG_SAMPLER_RESINFO;
-      num_coords = 0;
-      bias_or_lod = tsrc_swizzle1(coords, TOY_SWIZZLE_X);
-      break;
-   case TOY_OPCODE_TGSI_TXQ_LZ:
-      msg_type = GEN6_MSG_SAMPLER_RESINFO;
-      num_coords = 0;
-      sampler_src = 0;
-      break;
-   case TOY_OPCODE_TGSI_TXL2:
-      if (ref_pos >= 0) {
-         assert(ref_pos < 4);
-
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_L_C;
-         ref_or_si = tsrc_swizzle1(coords, ref_pos);
-      }
-      else {
-         msg_type = GEN6_MSG_SAMPLER_SAMPLE_L;
-      }
-
-      bias_or_lod = tsrc_swizzle1(inst->src[1], TOY_SWIZZLE_X);
-      sampler_src = 2;
-      break;
-   default:
-      assert(!"unhandled sampling opcode");
-      if (ret_sampler_index)
-         *ret_sampler_index = 0;
-      return tsrc_null();
-      break;
-   }
-
-   assert(inst->src[sampler_src].file == TOY_FILE_IMM);
-   sampler_index = inst->src[sampler_src].val32;
-   binding_table_index = vcc->shader->bt.tex_base + sampler_index;
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 18:
-    *
-    *     "Note that the (cube map) coordinates delivered to the sampling
-    *      engine must already have been divided by the component with the
-    *      largest absolute value."
-    */
-   switch (inst->tex.target) {
-   case TGSI_TEXTURE_CUBE:
-   case TGSI_TEXTURE_SHADOWCUBE:
-   case TGSI_TEXTURE_CUBE_ARRAY:
-   case TGSI_TEXTURE_SHADOWCUBE_ARRAY:
-      /* TXQ does not need coordinates */
-      if (num_coords >= 3) {
-         struct toy_dst tmp, max;
-         struct toy_src abs_coords[3];
-         unsigned i;
-
-         tmp = tc_alloc_tmp(tc);
-         max = tdst_writemask(tmp, TOY_WRITEMASK_W);
-
-         for (i = 0; i < 3; i++)
-            abs_coords[i] = tsrc_absolute(tsrc_swizzle1(coords, i));
-
-         tc_SEL(tc, max, abs_coords[0], abs_coords[0], GEN6_COND_GE);
-         tc_SEL(tc, max, tsrc_from(max), abs_coords[0], GEN6_COND_GE);
-         tc_INV(tc, max, tsrc_from(max));
-
-         for (i = 0; i < 3; i++)
-            tc_MUL(tc, tdst_writemask(tmp, 1 << i), coords, tsrc_from(max));
-
-         coords = tsrc_from(tmp);
-      }
-      break;
-   }
-
-   /* set up sampler parameters */
-   msg_len = vs_add_sampler_params(tc, msg_type, base_mrf,
-         coords, num_coords, bias_or_lod, ref_or_si, ddx, ddy, num_derivs);
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 1, page 136:
-    *
-    *     "The maximum message length allowed to the sampler is 11. This would
-    *      disallow sample_d, sample_b_c, and sample_l_c with a SIMD Mode of
-    *      SIMD16."
-    */
-   if (msg_len > 11)
-      tc_fail(tc, "maximum length for messages to the sampler is 11");
-
-   if (ret_sampler_index)
-      *ret_sampler_index = sampler_index;
-
-   return tsrc_imm_mdesc_sampler(tc, msg_len, 1,
-         false, simd_mode, msg_type, sampler_index, binding_table_index);
-}
-
-static void
-vs_lower_opcode_tgsi_sampling(struct vs_compile_context *vcc,
-                              struct toy_inst *inst)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   struct toy_src desc;
-   struct toy_dst dst, tmp;
-   unsigned sampler_index;
-   int swizzles[4], i;
-   unsigned swizzle_zero_mask, swizzle_one_mask, swizzle_normal_mask;
-   bool need_filter;
-
-   desc = vs_prepare_tgsi_sampling(vcc, inst,
-         vcc->first_free_mrf, &sampler_index);
-
-   switch (inst->opcode) {
-   case TOY_OPCODE_TGSI_TXF:
-   case TOY_OPCODE_TGSI_TXQ:
-   case TOY_OPCODE_TGSI_TXQ_LZ:
-      need_filter = false;
-      break;
-   default:
-      need_filter = true;
-      break;
-   }
-
-   toy_compiler_lower_to_send(tc, inst, false, GEN6_SFID_SAMPLER);
-   inst->src[0] = tsrc(TOY_FILE_MRF, vcc->first_free_mrf, 0);
-   inst->src[1] = desc;
-
-   /* write to a temp first */
-   tmp = tc_alloc_tmp(tc);
-   tmp.type = inst->dst.type;
-   dst = inst->dst;
-   inst->dst = tmp;
-
-   tc_move_inst(tc, inst);
-
-   if (need_filter) {
-      assert(sampler_index < vcc->variant->num_sampler_views);
-      swizzles[0] = vcc->variant->sampler_view_swizzles[sampler_index].r;
-      swizzles[1] = vcc->variant->sampler_view_swizzles[sampler_index].g;
-      swizzles[2] = vcc->variant->sampler_view_swizzles[sampler_index].b;
-      swizzles[3] = vcc->variant->sampler_view_swizzles[sampler_index].a;
-   }
-   else {
-      swizzles[0] = PIPE_SWIZZLE_X;
-      swizzles[1] = PIPE_SWIZZLE_Y;
-      swizzles[2] = PIPE_SWIZZLE_Z;
-      swizzles[3] = PIPE_SWIZZLE_W;
-   }
-
-   swizzle_zero_mask = 0;
-   swizzle_one_mask = 0;
-   swizzle_normal_mask = 0;
-   for (i = 0; i < 4; i++) {
-      switch (swizzles[i]) {
-      case PIPE_SWIZZLE_0:
-         swizzle_zero_mask |= 1 << i;
-         swizzles[i] = i;
-         break;
-      case PIPE_SWIZZLE_1:
-         swizzle_one_mask |= 1 << i;
-         swizzles[i] = i;
-         break;
-      default:
-         swizzle_normal_mask |= 1 << i;
-         break;
-      }
-   }
-
-   /* swizzle the results */
-   if (swizzle_normal_mask) {
-      tc_MOV(tc, tdst_writemask(dst, swizzle_normal_mask),
-            tsrc_swizzle(tsrc_from(tmp), swizzles[0],
-               swizzles[1], swizzles[2], swizzles[3]));
-   }
-   if (swizzle_zero_mask)
-      tc_MOV(tc, tdst_writemask(dst, swizzle_zero_mask), tsrc_imm_f(0.0f));
-   if (swizzle_one_mask)
-      tc_MOV(tc, tdst_writemask(dst, swizzle_one_mask), tsrc_imm_f(1.0f));
-}
-
-static void
-vs_lower_opcode_urb_write(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   /* vs_write_vue() has set up the message registers */
-   toy_compiler_lower_to_send(tc, inst, false, GEN6_SFID_URB);
-}
-
-static void
-vs_lower_virtual_opcodes(struct vs_compile_context *vcc)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   struct toy_inst *inst;
-
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      switch (inst->opcode) {
-      case TOY_OPCODE_TGSI_IN:
-      case TOY_OPCODE_TGSI_CONST:
-      case TOY_OPCODE_TGSI_SV:
-      case TOY_OPCODE_TGSI_IMM:
-         vs_lower_opcode_tgsi_direct(vcc, inst);
-         break;
-      case TOY_OPCODE_TGSI_INDIRECT_FETCH:
-      case TOY_OPCODE_TGSI_INDIRECT_STORE:
-         vs_lower_opcode_tgsi_indirect(vcc, inst);
-         break;
-      case TOY_OPCODE_TGSI_TEX:
-      case TOY_OPCODE_TGSI_TXB:
-      case TOY_OPCODE_TGSI_TXD:
-      case TOY_OPCODE_TGSI_TXL:
-      case TOY_OPCODE_TGSI_TXP:
-      case TOY_OPCODE_TGSI_TXF:
-      case TOY_OPCODE_TGSI_TXQ:
-      case TOY_OPCODE_TGSI_TXQ_LZ:
-      case TOY_OPCODE_TGSI_TEX2:
-      case TOY_OPCODE_TGSI_TXB2:
-      case TOY_OPCODE_TGSI_TXL2:
-      case TOY_OPCODE_TGSI_SAMPLE:
-      case TOY_OPCODE_TGSI_SAMPLE_I:
-      case TOY_OPCODE_TGSI_SAMPLE_I_MS:
-      case TOY_OPCODE_TGSI_SAMPLE_B:
-      case TOY_OPCODE_TGSI_SAMPLE_C:
-      case TOY_OPCODE_TGSI_SAMPLE_C_LZ:
-      case TOY_OPCODE_TGSI_SAMPLE_D:
-      case TOY_OPCODE_TGSI_SAMPLE_L:
-      case TOY_OPCODE_TGSI_GATHER4:
-      case TOY_OPCODE_TGSI_SVIEWINFO:
-      case TOY_OPCODE_TGSI_SAMPLE_POS:
-      case TOY_OPCODE_TGSI_SAMPLE_INFO:
-         vs_lower_opcode_tgsi_sampling(vcc, inst);
-         break;
-      case TOY_OPCODE_INV:
-      case TOY_OPCODE_LOG:
-      case TOY_OPCODE_EXP:
-      case TOY_OPCODE_SQRT:
-      case TOY_OPCODE_RSQ:
-      case TOY_OPCODE_SIN:
-      case TOY_OPCODE_COS:
-      case TOY_OPCODE_FDIV:
-      case TOY_OPCODE_POW:
-      case TOY_OPCODE_INT_DIV_QUOTIENT:
-      case TOY_OPCODE_INT_DIV_REMAINDER:
-         toy_compiler_lower_math(tc, inst);
-         break;
-      case TOY_OPCODE_URB_WRITE:
-         vs_lower_opcode_urb_write(tc, inst);
-         break;
-      default:
-         if (inst->opcode > 127)
-            tc_fail(tc, "unhandled virtual opcode");
-         break;
-      }
-   }
-}
-
-/**
- * Compile the shader.
- */
-static bool
-vs_compile(struct vs_compile_context *vcc)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   struct ilo_shader *sh = vcc->shader;
-
-   vs_lower_virtual_opcodes(vcc);
-   toy_compiler_legalize_for_ra(tc);
-   toy_compiler_optimize(tc);
-   toy_compiler_allocate_registers(tc,
-         vcc->first_free_grf,
-         vcc->last_free_grf,
-         vcc->num_grf_per_vrf);
-   toy_compiler_legalize_for_asm(tc);
-
-   if (tc->fail) {
-      ilo_err("failed to legalize VS instructions: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_VS) {
-      ilo_printf("legalized instructions:\n");
-      toy_compiler_dump(tc);
-      ilo_printf("\n");
-   }
-
-   if (true) {
-      sh->kernel = toy_compiler_assemble(tc, &sh->kernel_size);
-   }
-   else {
-      static const uint32_t microcode[] = {
-         /* fill in the microcode here */
-         0x0, 0x0, 0x0, 0x0,
-      };
-      const bool swap = true;
-
-      sh->kernel_size = sizeof(microcode);
-      sh->kernel = MALLOC(sh->kernel_size);
-
-      if (sh->kernel) {
-         const int num_dwords = sizeof(microcode) / 4;
-         const uint32_t *src = microcode;
-         uint32_t *dst = (uint32_t *) sh->kernel;
-         int i;
-
-         for (i = 0; i < num_dwords; i += 4) {
-            if (swap) {
-               dst[i + 0] = src[i + 3];
-               dst[i + 1] = src[i + 2];
-               dst[i + 2] = src[i + 1];
-               dst[i + 3] = src[i + 0];
-            }
-            else {
-               memcpy(dst, src, 16);
-            }
-         }
-      }
-   }
-
-   if (!sh->kernel) {
-      ilo_err("failed to compile VS: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_VS) {
-      ilo_printf("disassembly:\n");
-      toy_compiler_disassemble(tc->dev, sh->kernel, sh->kernel_size, false);
-      ilo_printf("\n");
-   }
-
-   return true;
-}
-
-/**
- * Collect the toy registers to be written to the VUE.
- */
-static int
-vs_collect_outputs(struct vs_compile_context *vcc, struct toy_src *outs)
-{
-   const struct toy_tgsi *tgsi = &vcc->tgsi;
-   unsigned i;
-
-   for (i = 0; i < vcc->shader->out.count; i++) {
-      const int slot = vcc->output_map[i];
-      const int vrf = (slot >= 0) ? toy_tgsi_get_vrf(tgsi,
-            TGSI_FILE_OUTPUT, 0, tgsi->outputs[slot].index) : -1;
-      struct toy_src src;
-
-      if (vrf >= 0) {
-         struct toy_dst dst;
-
-         dst = tdst(TOY_FILE_VRF, vrf, 0);
-         src = tsrc_from(dst);
-
-         if (i == 0) {
-            /* PSIZE is at channel W */
-            tc_MOV(&vcc->tc, tdst_writemask(dst, TOY_WRITEMASK_W),
-                  tsrc_swizzle1(src, TOY_SWIZZLE_X));
-
-            /* the other channels are for the header */
-            dst = tdst_d(dst);
-            tc_MOV(&vcc->tc, tdst_writemask(dst, TOY_WRITEMASK_XYZ),
-                  tsrc_imm_d(0));
-         }
-         else {
-            /* initialize unused channels to 0.0f */
-            if (tgsi->outputs[slot].undefined_mask) {
-               dst = tdst_writemask(dst, tgsi->outputs[slot].undefined_mask);
-               tc_MOV(&vcc->tc, dst, tsrc_imm_f(0.0f));
-            }
-         }
-      }
-      else {
-         /* XXX this is too ugly */
-         if (vcc->shader->out.semantic_names[i] == TGSI_SEMANTIC_CLIPDIST &&
-             slot < 0) {
-            /* ok, we need to compute clip distance */
-            int clipvert_slot = -1, clipvert_vrf, j;
-
-            for (j = 0; j < tgsi->num_outputs; j++) {
-               if (tgsi->outputs[j].semantic_name ==
-                     TGSI_SEMANTIC_CLIPVERTEX) {
-                  clipvert_slot = j;
-                  break;
-               }
-               else if (tgsi->outputs[j].semantic_name ==
-                     TGSI_SEMANTIC_POSITION) {
-                  /* remember pos, but keep looking */
-                  clipvert_slot = j;
-               }
-            }
-
-            clipvert_vrf = (clipvert_slot >= 0) ? toy_tgsi_get_vrf(tgsi,
-                  TGSI_FILE_OUTPUT, 0, tgsi->outputs[clipvert_slot].index) : -1;
-            if (clipvert_vrf >= 0) {
-               struct toy_dst tmp = tc_alloc_tmp(&vcc->tc);
-               struct toy_src clipvert = tsrc(TOY_FILE_VRF, clipvert_vrf, 0);
-               int first_ucp, last_ucp;
-
-               if (vcc->shader->out.semantic_indices[i]) {
-                  first_ucp = 4;
-                  last_ucp = MIN2(7, vcc->variant->u.vs.num_ucps - 1);
-               }
-               else {
-                  first_ucp = 0;
-                  last_ucp = MIN2(3, vcc->variant->u.vs.num_ucps - 1);
-               }
-
-               for (j = first_ucp; j <= last_ucp; j++) {
-                  const int plane_grf = vcc->first_ucp_grf + j / 2;
-                  const int plane_subreg = (j & 1) * 16;
-                  const struct toy_src plane = tsrc_rect(tsrc(TOY_FILE_GRF,
-                           plane_grf, plane_subreg), TOY_RECT_041);
-                  const unsigned writemask = 1 << ((j >= 4) ? j - 4 : j);
-
-                  tc_DP4(&vcc->tc, tdst_writemask(tmp, writemask),
-                        clipvert, plane);
-               }
-
-               src = tsrc_from(tmp);
-            }
-            else {
-               src = tsrc_imm_f(0.0f);
-            }
-         }
-         else {
-            src = (i == 0) ? tsrc_imm_d(0) : tsrc_imm_f(0.0f);
-         }
-      }
-
-      outs[i] = src;
-   }
-
-   return i;
-}
-
-/**
- * Emit instructions to write the VUE.
- */
-static void
-vs_write_vue(struct vs_compile_context *vcc)
-{
-   struct toy_compiler *tc = &vcc->tc;
-   struct toy_src outs[PIPE_MAX_SHADER_OUTPUTS];
-   struct toy_dst header;
-   struct toy_src r0;
-   struct toy_inst *inst;
-   int sent_attrs, total_attrs;
-
-   header = tdst_ud(tdst(TOY_FILE_MRF, vcc->first_free_mrf, 0));
-   r0 = tsrc_ud(tsrc(TOY_FILE_GRF, 0, 0));
-   inst = tc_MOV(tc, header, r0);
-   inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-
-   if (ilo_dev_gen(tc->dev) >= ILO_GEN(7)) {
-      inst = tc_OR(tc, tdst_offset(header, 0, 5),
-            tsrc_rect(tsrc_offset(r0, 0, 5), TOY_RECT_010),
-            tsrc_rect(tsrc_imm_ud(0xff00), TOY_RECT_010));
-      inst->exec_size = GEN6_EXECSIZE_1;
-      inst->access_mode = GEN6_ALIGN_1;
-      inst->mask_ctrl = GEN6_MASKCTRL_NOMASK;
-   }
-
-   total_attrs = vs_collect_outputs(vcc, outs);
-   sent_attrs = 0;
-   while (sent_attrs < total_attrs) {
-      struct toy_src desc;
-      int mrf = vcc->first_free_mrf + 1, avail_mrf_for_attrs;
-      int num_attrs, msg_len, i;
-      bool eot;
-
-      num_attrs = total_attrs - sent_attrs;
-      eot = true;
-
-      /* see if we need another message */
-      avail_mrf_for_attrs = vcc->last_free_mrf - mrf + 1;
-      if (num_attrs > avail_mrf_for_attrs) {
-         /*
-          * From the Sandy Bridge PRM, volume 4 part 2, page 22:
-          *
-          *     "Offset. This field specifies a destination offset (in 256-bit
-          *      units) from the start of the URB entry(s), as referenced by
-          *      URB Return Handle n, at which the data (if any) will be
-          *      written."
-          *
-          * As we need to offset the following messages, we must make sure
-          * this one writes an even number of attributes.
-          */
-         num_attrs = avail_mrf_for_attrs & ~1;
-         eot = false;
-      }
-
-      if (ilo_dev_gen(tc->dev) >= ILO_GEN(7)) {
-         /* do not forget about the header */
-         msg_len = 1 + num_attrs;
-      }
-      else {
-         /*
-          * From the Sandy Bridge PRM, volume 4 part 2, page 26:
-          *
-          *     "At least 256 bits per vertex (512 bits total, M1 & M2) must
-          *      be written.  Writing only 128 bits per vertex (256 bits
-          *      total, M1 only) results in UNDEFINED operation."
-          *
-          *     "[DevSNB] Interleave writes must be in multiples of 256 per
-          *      vertex."
-          *
-          * That is, we must write or appear to write an even number of
-          * attributes, starting from two.
-          */
-         if (num_attrs % 2 && num_attrs == avail_mrf_for_attrs) {
-            num_attrs--;
-            eot = false;
-         }
-
-         msg_len = 1 + align(num_attrs, 2);
-      }
-
-      for (i = 0; i < num_attrs; i++)
-         tc_MOV(tc, tdst(TOY_FILE_MRF, mrf++, 0), outs[sent_attrs + i]);
-
-      assert(sent_attrs % 2 == 0);
-      desc = tsrc_imm_mdesc_urb(tc, eot, msg_len, 0,
-            eot, true, false, true, sent_attrs / 2, 0);
-
-      tc_add2(tc, TOY_OPCODE_URB_WRITE, tdst_null(), tsrc_from(header), desc);
-
-      sent_attrs += num_attrs;
-   }
-}
-
-/**
- * Set up shader inputs for fixed-function units.
- */
-static void
-vs_setup_shader_in(struct ilo_shader *sh, const struct toy_tgsi *tgsi)
-{
-   int num_attrs, i;
-
-   /* vertex/instance id is the first VE if exists */
-   for (i = 0; i < tgsi->num_system_values; i++) {
-      bool found = false;
-
-      switch (tgsi->system_values[i].semantic_name) {
-      case TGSI_SEMANTIC_INSTANCEID:
-      case TGSI_SEMANTIC_VERTEXID:
-         found = true;
-         break;
-      default:
-         break;
-      }
-
-      if (found) {
-         sh->in.semantic_names[sh->in.count] =
-            tgsi->system_values[i].semantic_name;
-         sh->in.semantic_indices[sh->in.count] =
-            tgsi->system_values[i].semantic_index;
-         sh->in.interp[sh->in.count] = TGSI_INTERPOLATE_CONSTANT;
-         sh->in.centroid[sh->in.count] = false;
-
-         sh->in.count++;
-         break;
-      }
-   }
-
-   num_attrs = 0;
-   for (i = 0; i < tgsi->num_inputs; i++) {
-      assert(tgsi->inputs[i].semantic_name == TGSI_SEMANTIC_GENERIC);
-      if (tgsi->inputs[i].semantic_index >= num_attrs)
-         num_attrs = tgsi->inputs[i].semantic_index + 1;
-   }
-   assert(num_attrs <= PIPE_MAX_ATTRIBS);
-
-   /* VF cannot remap VEs.  VE[i] must be used as GENERIC[i]. */
-   for (i = 0; i < num_attrs; i++) {
-      sh->in.semantic_names[sh->in.count + i] = TGSI_SEMANTIC_GENERIC;
-      sh->in.semantic_indices[sh->in.count + i] = i;
-      sh->in.interp[sh->in.count + i] = TGSI_INTERPOLATE_CONSTANT;
-      sh->in.centroid[sh->in.count + i] = false;
-   }
-
-   sh->in.count += num_attrs;
-
-   sh->in.has_pos = false;
-   sh->in.has_linear_interp = false;
-   sh->in.barycentric_interpolation_mode = 0;
-}
-
-/**
- * Set up shader outputs for fixed-function units.
- */
-static void
-vs_setup_shader_out(struct ilo_shader *sh, const struct toy_tgsi *tgsi,
-                    bool output_clipdist, int *output_map)
-{
-   int psize_slot = -1, pos_slot = -1;
-   int clipdist_slot[2] = { -1, -1 };
-   int color_slot[4] = { -1, -1, -1, -1 };
-   int num_outs, i;
-
-   /* find out the slots of outputs that need special care */
-   for (i = 0; i < tgsi->num_outputs; i++) {
-      switch (tgsi->outputs[i].semantic_name) {
-      case TGSI_SEMANTIC_PSIZE:
-         psize_slot = i;
-         break;
-      case TGSI_SEMANTIC_POSITION:
-         pos_slot = i;
-         break;
-      case TGSI_SEMANTIC_CLIPDIST:
-         if (tgsi->outputs[i].semantic_index)
-            clipdist_slot[1] = i;
-         else
-            clipdist_slot[0] = i;
-         break;
-      case TGSI_SEMANTIC_COLOR:
-         if (tgsi->outputs[i].semantic_index)
-            color_slot[2] = i;
-         else
-            color_slot[0] = i;
-         break;
-      case TGSI_SEMANTIC_BCOLOR:
-         if (tgsi->outputs[i].semantic_index)
-            color_slot[3] = i;
-         else
-            color_slot[1] = i;
-         break;
-      default:
-         break;
-      }
-   }
-
-   /* the first two VUEs are always PSIZE and POSITION */
-   num_outs = 2;
-   output_map[0] = psize_slot;
-   output_map[1] = pos_slot;
-
-   sh->out.register_indices[0] =
-      (psize_slot >= 0) ? tgsi->outputs[psize_slot].index : -1;
-   sh->out.semantic_names[0] = TGSI_SEMANTIC_PSIZE;
-   sh->out.semantic_indices[0] = 0;
-
-   sh->out.register_indices[1] =
-      (pos_slot >= 0) ? tgsi->outputs[pos_slot].index : -1;
-   sh->out.semantic_names[1] = TGSI_SEMANTIC_POSITION;
-   sh->out.semantic_indices[1] = 0;
-
-   sh->out.has_pos = true;
-
-   /* followed by optional clip distances */
-   if (output_clipdist) {
-      sh->out.register_indices[num_outs] =
-         (clipdist_slot[0] >= 0) ? tgsi->outputs[clipdist_slot[0]].index : -1;
-      sh->out.semantic_names[num_outs] = TGSI_SEMANTIC_CLIPDIST;
-      sh->out.semantic_indices[num_outs] = 0;
-      output_map[num_outs++] = clipdist_slot[0];
-
-      sh->out.register_indices[num_outs] =
-         (clipdist_slot[1] >= 0) ? tgsi->outputs[clipdist_slot[1]].index : -1;
-      sh->out.semantic_names[num_outs] = TGSI_SEMANTIC_CLIPDIST;
-      sh->out.semantic_indices[num_outs] = 1;
-      output_map[num_outs++] = clipdist_slot[1];
-   }
-
-   /*
-    * make BCOLOR follow COLOR so that we can make use of
-    * ATTRIBUTE_SWIZZLE_INPUTATTR_FACING in 3DSTATE_SF
-    */
-   for (i = 0; i < 4; i++) {
-      const int slot = color_slot[i];
-
-      if (slot < 0)
-         continue;
-
-      sh->out.register_indices[num_outs] = tgsi->outputs[slot].index;
-      sh->out.semantic_names[num_outs] = tgsi->outputs[slot].semantic_name;
-      sh->out.semantic_indices[num_outs] = tgsi->outputs[slot].semantic_index;
-
-      output_map[num_outs++] = slot;
-   }
-
-   /* add the rest of the outputs */
-   for (i = 0; i < tgsi->num_outputs; i++) {
-      switch (tgsi->outputs[i].semantic_name) {
-      case TGSI_SEMANTIC_PSIZE:
-      case TGSI_SEMANTIC_POSITION:
-      case TGSI_SEMANTIC_CLIPDIST:
-      case TGSI_SEMANTIC_COLOR:
-      case TGSI_SEMANTIC_BCOLOR:
-         break;
-      default:
-         sh->out.register_indices[num_outs] = tgsi->outputs[i].index;
-         sh->out.semantic_names[num_outs] = tgsi->outputs[i].semantic_name;
-         sh->out.semantic_indices[num_outs] = tgsi->outputs[i].semantic_index;
-         output_map[num_outs++] = i;
-         break;
-      }
-   }
-
-   sh->out.count = num_outs;
-}
-
-/**
- * Translate the TGSI tokens.
- */
-static bool
-vs_setup_tgsi(struct toy_compiler *tc, const struct tgsi_token *tokens,
-              struct toy_tgsi *tgsi)
-{
-   if (ilo_debug & ILO_DEBUG_VS) {
-      ilo_printf("dumping vertex shader\n");
-      ilo_printf("\n");
-
-      tgsi_dump(tokens, 0);
-      ilo_printf("\n");
-   }
-
-   toy_compiler_translate_tgsi(tc, tokens, true, tgsi);
-   if (tc->fail) {
-      ilo_err("failed to translate VS TGSI tokens: %s\n", tc->reason);
-      return false;
-   }
-
-   if (ilo_debug & ILO_DEBUG_VS) {
-      ilo_printf("TGSI translator:\n");
-      toy_tgsi_dump(tgsi);
-      ilo_printf("\n");
-      toy_compiler_dump(tc);
-      ilo_printf("\n");
-   }
-
-   return true;
-}
-
-/**
- * Set up VS compile context.  This includes translating the TGSI tokens.
- */
-static bool
-vs_setup(struct vs_compile_context *vcc,
-         const struct ilo_shader_state *state,
-         const struct ilo_shader_variant *variant)
-{
-   int num_consts;
-
-   memset(vcc, 0, sizeof(*vcc));
-
-   vcc->shader = CALLOC_STRUCT(ilo_shader);
-   if (!vcc->shader)
-      return false;
-
-   vcc->variant = variant;
-
-   toy_compiler_init(&vcc->tc, state->info.dev);
-   vcc->tc.templ.access_mode = GEN6_ALIGN_16;
-   vcc->tc.templ.exec_size = GEN6_EXECSIZE_8;
-   vcc->tc.rect_linear_width = 4;
-
-   /*
-    * The classic driver uses the sampler cache (gen6) or the data cache
-    * (gen7).  Why?
-    */
-   vcc->const_cache = GEN6_SFID_DP_CC;
-
-   if (!vs_setup_tgsi(&vcc->tc, state->info.tokens, &vcc->tgsi)) {
-      toy_compiler_cleanup(&vcc->tc);
-      FREE(vcc->shader);
-      return false;
-   }
-
-   vs_setup_shader_in(vcc->shader, &vcc->tgsi);
-   vs_setup_shader_out(vcc->shader, &vcc->tgsi,
-         (vcc->variant->u.vs.num_ucps > 0), vcc->output_map);
-
-   if (vcc->variant->use_pcb && !vcc->tgsi.const_indirect) {
-      num_consts = (vcc->tgsi.const_count + 1) / 2;
-
-      /*
-       * From the Sandy Bridge PRM, volume 2 part 1, page 138:
-       *
-       *     "The sum of all four read length fields (each incremented to
-       *      represent the actual read length) must be less than or equal to
-       *      32"
-       */
-      if (num_consts > 32)
-         num_consts = 0;
-   }
-   else {
-      num_consts = 0;
-   }
-
-   vcc->shader->skip_cbuf0_upload = (!vcc->tgsi.const_count || num_consts);
-   vcc->shader->pcb.cbuf0_size = num_consts * (sizeof(float) * 8);
-
-   /* r0 is reserved for payload header */
-   vcc->first_const_grf = 1;
-   vcc->first_ucp_grf = vcc->first_const_grf + num_consts;
-
-   /* fit each pair of user clip planes into a register */
-   vcc->first_vue_grf = vcc->first_ucp_grf +
-      (vcc->variant->u.vs.num_ucps + 1) / 2;
-
-   vcc->first_free_grf = vcc->first_vue_grf + vcc->shader->in.count;
-   vcc->last_free_grf = 127;
-
-   /* m0 is reserved for system routines */
-   vcc->first_free_mrf = 1;
-   vcc->last_free_mrf = 15;
-
-   vcc->num_grf_per_vrf = 1;
-
-   if (ilo_dev_gen(vcc->tc.dev) >= ILO_GEN(7)) {
-      vcc->last_free_grf -= 15;
-      vcc->first_free_mrf = vcc->last_free_grf + 1;
-      vcc->last_free_mrf = vcc->first_free_mrf + 14;
-   }
-
-   vcc->shader->in.start_grf = vcc->first_const_grf;
-   vcc->shader->pcb.clip_state_size =
-      vcc->variant->u.vs.num_ucps * (sizeof(float) * 4);
-
-   vcc->shader->bt.tex_base = 0;
-   vcc->shader->bt.tex_count = vcc->variant->num_sampler_views;
-
-   vcc->shader->bt.const_base = vcc->shader->bt.tex_base +
-                                vcc->shader->bt.tex_count;
-   vcc->shader->bt.const_count = state->info.constant_buffer_count;
-
-   vcc->shader->bt.total_count = vcc->shader->bt.const_base +
-                                 vcc->shader->bt.const_count;
-
-   return true;
-}
-
-/**
- * Compile the vertex shader.
- */
-struct ilo_shader *
-ilo_shader_compile_vs(const struct ilo_shader_state *state,
-                      const struct ilo_shader_variant *variant)
-{
-   struct vs_compile_context vcc;
-   bool need_gs;
-
-   if (!vs_setup(&vcc, state, variant))
-      return NULL;
-
-   if (ilo_dev_gen(vcc.tc.dev) >= ILO_GEN(7)) {
-      need_gs = false;
-   }
-   else {
-      need_gs = variant->u.vs.rasterizer_discard ||
-                state->info.stream_output.num_outputs;
-   }
-
-   vs_write_vue(&vcc);
-
-   if (!vs_compile(&vcc)) {
-      FREE(vcc.shader);
-      vcc.shader = NULL;
-   }
-
-   toy_tgsi_cleanup(&vcc.tgsi);
-   toy_compiler_cleanup(&vcc.tc);
-
-   if (need_gs) {
-      int so_mapping[PIPE_MAX_SHADER_OUTPUTS];
-      int i, j;
-
-      for (i = 0; i < vcc.tgsi.num_outputs; i++) {
-         int attr = 0;
-
-         for (j = 0; j < vcc.shader->out.count; j++) {
-            if (vcc.tgsi.outputs[i].semantic_name ==
-                  vcc.shader->out.semantic_names[j] &&
-                vcc.tgsi.outputs[i].semantic_index ==
-                  vcc.shader->out.semantic_indices[j]) {
-               attr = j;
-               break;
-            }
-         }
-
-         so_mapping[i] = attr;
-      }
-
-      if (!ilo_shader_compile_gs_passthrough(state, variant,
-               so_mapping, vcc.shader)) {
-         ilo_shader_destroy_kernel(vcc.shader);
-         vcc.shader = NULL;
-      }
-   }
-
-   return vcc.shader;
-}
diff --git a/src/gallium/drivers/ilo/shader/toy_compiler.c b/src/gallium/drivers/ilo/shader/toy_compiler.c
deleted file mode 100644 (file)
index 4651c83..0000000
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "toy_compiler.h"
-
-/**
- * Dump an operand.
- */
-static void
-tc_dump_operand(struct toy_compiler *tc,
-                enum toy_file file, enum toy_type type, enum toy_rect rect,
-                bool indirect, unsigned indirect_subreg, uint32_t val32,
-                bool is_dst)
-{
-   static const char *toy_file_names[TOY_FILE_COUNT] = {
-      [TOY_FILE_VRF]        = "v",
-      [TOY_FILE_ARF]        = "NOT USED",
-      [TOY_FILE_GRF]        = "r",
-      [TOY_FILE_MRF]        = "m",
-      [TOY_FILE_IMM]        = "NOT USED",
-   };
-   const char *name = toy_file_names[file];
-   int reg, subreg;
-
-   if (file != TOY_FILE_IMM) {
-      reg = val32 / TOY_REG_WIDTH;
-      subreg = (val32 % TOY_REG_WIDTH) / toy_type_size(type);
-   }
-
-   switch (file) {
-   case TOY_FILE_GRF:
-      if (indirect) {
-         const int addr_subreg = indirect_subreg / toy_type_size(TOY_TYPE_UW);
-
-         ilo_printf("%s[a0.%d", name, addr_subreg);
-         if (val32)
-            ilo_printf("%+d", (int) val32);
-         ilo_printf("]");
-         break;
-      }
-      /* fall through */
-   case TOY_FILE_VRF:
-   case TOY_FILE_MRF:
-      ilo_printf("%s%d", name, reg);
-      if (subreg)
-         ilo_printf(".%d", subreg);
-      break;
-   case TOY_FILE_ARF:
-      switch (reg) {
-      case GEN6_ARF_NULL:
-         ilo_printf("null");
-         break;
-      case GEN6_ARF_A0:
-         ilo_printf("a0.%d", subreg);
-         break;
-      case GEN6_ARF_ACC0:
-      case GEN6_ARF_ACC0 + 1:
-         ilo_printf("acc%d.%d", (reg & 1), subreg);
-         break;
-      case GEN6_ARF_F0:
-         ilo_printf("f0.%d", subreg);
-         break;
-      case GEN6_ARF_SR0:
-         ilo_printf("sr0.%d", subreg);
-         break;
-      case GEN6_ARF_CR0:
-         ilo_printf("cr0.%d", subreg);
-         break;
-      case GEN6_ARF_N0:
-      case GEN6_ARF_N0 + 1:
-         ilo_printf("n%d.%d", (reg & 1), subreg);
-         break;
-      case GEN6_ARF_IP:
-         ilo_printf("ip");
-         break;
-      }
-      break;
-   case TOY_FILE_IMM:
-      switch (type) {
-      case TOY_TYPE_F:
-         {
-            union fi fi = { .ui = val32 };
-            ilo_printf("%f", fi.f);
-         }
-         break;
-      case TOY_TYPE_D:
-         ilo_printf("%d", (int32_t) val32);
-         break;
-      case TOY_TYPE_UD:
-         ilo_printf("%u", val32);
-         break;
-      case TOY_TYPE_W:
-         ilo_printf("%d", (int16_t) (val32 & 0xffff));
-         break;
-      case TOY_TYPE_UW:
-         ilo_printf("%u", val32 & 0xffff);
-         break;
-      case TOY_TYPE_V:
-         ilo_printf("0x%08x", val32);
-         break;
-      default:
-         assert(!"unknown imm type");
-         break;
-      }
-      break;
-   default:
-      assert(!"unexpected file");
-      break;
-   }
-
-   /* dump the region parameter */
-   if (file != TOY_FILE_IMM) {
-      int vert_stride, width, horz_stride;
-
-      switch (rect) {
-      case TOY_RECT_LINEAR:
-         vert_stride = tc->rect_linear_width;
-         width = tc->rect_linear_width;
-         horz_stride = 1;
-         break;
-      case TOY_RECT_041:
-         vert_stride = 0;
-         width = 4;
-         horz_stride = 1;
-         break;
-      case TOY_RECT_010:
-         vert_stride = 0;
-         width = 1;
-         horz_stride = 0;
-         break;
-      case TOY_RECT_220:
-         vert_stride = 2;
-         width = 2;
-         horz_stride = 0;
-         break;
-      case TOY_RECT_440:
-         vert_stride = 4;
-         width = 4;
-         horz_stride = 0;
-         break;
-      case TOY_RECT_240:
-         vert_stride = 2;
-         width = 4;
-         horz_stride = 0;
-         break;
-      default:
-         assert(!"unknown rect parameter");
-         vert_stride = 0;
-         width = 0;
-         horz_stride = 0;
-         break;
-      }
-
-      if (is_dst)
-         ilo_printf("<%d>", horz_stride);
-      else
-         ilo_printf("<%d;%d,%d>", vert_stride, width, horz_stride);
-   }
-
-   switch (type) {
-   case TOY_TYPE_F:
-      ilo_printf(":f");
-      break;
-   case TOY_TYPE_D:
-      ilo_printf(":d");
-      break;
-   case TOY_TYPE_UD:
-      ilo_printf(":ud");
-      break;
-   case TOY_TYPE_W:
-      ilo_printf(":w");
-      break;
-   case TOY_TYPE_UW:
-      ilo_printf(":uw");
-      break;
-   case TOY_TYPE_V:
-      ilo_printf(":v");
-      break;
-   default:
-      assert(!"unexpected type");
-      break;
-   }
-}
-
-/**
- * Dump a source operand.
- */
-static void
-tc_dump_src(struct toy_compiler *tc, struct toy_src src)
-{
-   if (src.negate)
-      ilo_printf("-");
-   if (src.absolute)
-      ilo_printf("|");
-
-   tc_dump_operand(tc, src.file, src.type, src.rect,
-         src.indirect, src.indirect_subreg, src.val32, false);
-
-   if (tsrc_is_swizzled(src)) {
-      const char xyzw[] = "xyzw";
-      ilo_printf(".%c%c%c%c",
-            xyzw[src.swizzle_x],
-            xyzw[src.swizzle_y],
-            xyzw[src.swizzle_z],
-            xyzw[src.swizzle_w]);
-   }
-
-   if (src.absolute)
-      ilo_printf("|");
-}
-
-/**
- * Dump a destination operand.
- */
-static void
-tc_dump_dst(struct toy_compiler *tc, struct toy_dst dst)
-{
-   tc_dump_operand(tc, dst.file, dst.type, dst.rect,
-         dst.indirect, dst.indirect_subreg, dst.val32, true);
-
-   if (dst.writemask != TOY_WRITEMASK_XYZW) {
-      ilo_printf(".");
-      if (dst.writemask & TOY_WRITEMASK_X)
-         ilo_printf("x");
-      if (dst.writemask & TOY_WRITEMASK_Y)
-         ilo_printf("y");
-      if (dst.writemask & TOY_WRITEMASK_Z)
-         ilo_printf("z");
-      if (dst.writemask & TOY_WRITEMASK_W)
-         ilo_printf("w");
-   }
-}
-
-static const char *
-get_opcode_name(unsigned opcode)
-{
-   switch (opcode) {
-   case GEN6_OPCODE_MOV:                   return "mov";
-   case GEN6_OPCODE_SEL:                   return "sel";
-   case GEN6_OPCODE_NOT:                   return "not";
-   case GEN6_OPCODE_AND:                   return "and";
-   case GEN6_OPCODE_OR:                    return "or";
-   case GEN6_OPCODE_XOR:                   return "xor";
-   case GEN6_OPCODE_SHR:                   return "shr";
-   case GEN6_OPCODE_SHL:                   return "shl";
-   case 0xa:                   return "rsr";
-   case 0xb:                   return "rsl";
-   case GEN6_OPCODE_ASR:                   return "asr";
-   case GEN6_OPCODE_CMP:                   return "cmp";
-   case GEN6_OPCODE_CMPN:                  return "cmpn";
-   case GEN6_OPCODE_JMPI:                  return "jmpi";
-   case GEN6_OPCODE_IF:                    return "if";
-   case 0x23:                   return "iff";
-   case GEN6_OPCODE_ELSE:                  return "else";
-   case GEN6_OPCODE_ENDIF:                 return "endif";
-   case 0x26:                    return "do";
-   case GEN6_OPCODE_WHILE:                 return "while";
-   case GEN6_OPCODE_BREAK:                 return "break";
-   case GEN6_OPCODE_CONT:              return "continue";
-   case GEN6_OPCODE_HALT:                  return "halt";
-   case 0x2c:                 return "msave";
-   case 0x2d:              return "mrestore";
-   case 0x2e:                  return "push";
-   case 0x2f:                   return "pop";
-   case GEN6_OPCODE_WAIT:                  return "wait";
-   case GEN6_OPCODE_SEND:                  return "send";
-   case GEN6_OPCODE_SENDC:                 return "sendc";
-   case GEN6_OPCODE_MATH:                  return "math";
-   case GEN6_OPCODE_ADD:                   return "add";
-   case GEN6_OPCODE_MUL:                   return "mul";
-   case GEN6_OPCODE_AVG:                   return "avg";
-   case GEN6_OPCODE_FRC:                   return "frc";
-   case GEN6_OPCODE_RNDU:                  return "rndu";
-   case GEN6_OPCODE_RNDD:                  return "rndd";
-   case GEN6_OPCODE_RNDE:                  return "rnde";
-   case GEN6_OPCODE_RNDZ:                  return "rndz";
-   case GEN6_OPCODE_MAC:                   return "mac";
-   case GEN6_OPCODE_MACH:                  return "mach";
-   case GEN6_OPCODE_LZD:                   return "lzd";
-   case GEN6_OPCODE_SAD2:                  return "sad2";
-   case GEN6_OPCODE_SADA2:                 return "sada2";
-   case GEN6_OPCODE_DP4:                   return "dp4";
-   case GEN6_OPCODE_DPH:                   return "dph";
-   case GEN6_OPCODE_DP3:                   return "dp3";
-   case GEN6_OPCODE_DP2:                   return "dp2";
-   case 0x58:                  return "dpa2";
-   case GEN6_OPCODE_LINE:                  return "line";
-   case GEN6_OPCODE_PLN:                   return "pln";
-   case GEN6_OPCODE_MAD:                   return "mad";
-   case GEN6_OPCODE_NOP:                   return "nop";
-   case TOY_OPCODE_DO:                    return "do";
-   /* TGSI */
-   case TOY_OPCODE_TGSI_IN:               return "tgsi.in";
-   case TOY_OPCODE_TGSI_CONST:            return "tgsi.const";
-   case TOY_OPCODE_TGSI_SV:               return "tgsi.sv";
-   case TOY_OPCODE_TGSI_IMM:              return "tgsi.imm";
-   case TOY_OPCODE_TGSI_INDIRECT_FETCH:   return "tgsi.indirect_fetch";
-   case TOY_OPCODE_TGSI_INDIRECT_STORE:   return "tgsi.indirect_store";
-   case TOY_OPCODE_TGSI_TEX:              return "tgsi.tex";
-   case TOY_OPCODE_TGSI_TXB:              return "tgsi.txb";
-   case TOY_OPCODE_TGSI_TXD:              return "tgsi.txd";
-   case TOY_OPCODE_TGSI_TXL:              return "tgsi.txl";
-   case TOY_OPCODE_TGSI_TXP:              return "tgsi.txp";
-   case TOY_OPCODE_TGSI_TXF:              return "tgsi.txf";
-   case TOY_OPCODE_TGSI_TXQ:              return "tgsi.txq";
-   case TOY_OPCODE_TGSI_TXQ_LZ:           return "tgsi.txq_lz";
-   case TOY_OPCODE_TGSI_TEX2:             return "tgsi.tex2";
-   case TOY_OPCODE_TGSI_TXB2:             return "tgsi.txb2";
-   case TOY_OPCODE_TGSI_TXL2:             return "tgsi.txl2";
-   case TOY_OPCODE_TGSI_SAMPLE:           return "tgsi.sample";
-   case TOY_OPCODE_TGSI_SAMPLE_I:         return "tgsi.sample_i";
-   case TOY_OPCODE_TGSI_SAMPLE_I_MS:      return "tgsi.sample_i_ms";
-   case TOY_OPCODE_TGSI_SAMPLE_B:         return "tgsi.sample_b";
-   case TOY_OPCODE_TGSI_SAMPLE_C:         return "tgsi.sample_c";
-   case TOY_OPCODE_TGSI_SAMPLE_C_LZ:      return "tgsi.sample_c_lz";
-   case TOY_OPCODE_TGSI_SAMPLE_D:         return "tgsi.sample_d";
-   case TOY_OPCODE_TGSI_SAMPLE_L:         return "tgsi.sample_l";
-   case TOY_OPCODE_TGSI_GATHER4:          return "tgsi.gather4";
-   case TOY_OPCODE_TGSI_SVIEWINFO:        return "tgsi.sviewinfo";
-   case TOY_OPCODE_TGSI_SAMPLE_POS:       return "tgsi.sample_pos";
-   case TOY_OPCODE_TGSI_SAMPLE_INFO:      return "tgsi.sample_info";
-   /* math */
-   case TOY_OPCODE_INV:                   return "math.inv";
-   case TOY_OPCODE_LOG:                   return "math.log";
-   case TOY_OPCODE_EXP:                   return "math.exp";
-   case TOY_OPCODE_SQRT:                  return "math.sqrt";
-   case TOY_OPCODE_RSQ:                   return "math.rsq";
-   case TOY_OPCODE_SIN:                   return "math.sin";
-   case TOY_OPCODE_COS:                   return "math.cos";
-   case TOY_OPCODE_FDIV:                  return "math.fdiv";
-   case TOY_OPCODE_POW:                   return "math.pow";
-   case TOY_OPCODE_INT_DIV_QUOTIENT:      return "math.int_div_quotient";
-   case TOY_OPCODE_INT_DIV_REMAINDER:     return "math.int_div_remainer";
-   /* urb */
-   case TOY_OPCODE_URB_WRITE:             return "urb.urb_write";
-   /* gs */
-   case TOY_OPCODE_EMIT:                  return "gs.emit";
-   case TOY_OPCODE_ENDPRIM:               return "gs.endprim";
-   /* fs */
-   case TOY_OPCODE_DDX:                   return "fs.ddx";
-   case TOY_OPCODE_DDY:                   return "fs.ddy";
-   case TOY_OPCODE_FB_WRITE:              return "fs.fb_write";
-   case TOY_OPCODE_KIL:                   return "fs.kil";
-   default:                               return "unk";
-   }
-}
-
-static const char *
-get_cond_modifier_name(unsigned opcode, unsigned cond_modifier)
-{
-   switch (opcode) {
-   case GEN6_OPCODE_SEND:
-   case GEN6_OPCODE_SENDC:
-      /* SFID */
-      switch (cond_modifier) {
-      case GEN6_SFID_NULL:                       return "Null";
-      case GEN6_SFID_SAMPLER:                    return "Sampling Engine";
-      case GEN6_SFID_GATEWAY:            return "Message Gateway";
-      case GEN6_SFID_DP_SAMPLER:    return "Data Port Sampler Cache";
-      case GEN6_SFID_DP_RC:     return "Data Port Render Cache";
-      case GEN6_SFID_URB:                        return "URB";
-      case GEN6_SFID_SPAWNER:             return "Thread Spawner";
-      case GEN6_SFID_DP_CC:   return "Constant Cache";
-      default:                                  return "Unknown";
-      }
-      break;
-   case GEN6_OPCODE_MATH:
-      /* FC */
-      switch (cond_modifier) {
-      case GEN6_MATH_INV:               return "INV";
-      case GEN6_MATH_LOG:               return "LOG";
-      case GEN6_MATH_EXP:               return "EXP";
-      case GEN6_MATH_SQRT:              return "SQRT";
-      case GEN6_MATH_RSQ:               return "RSQ";
-      case GEN6_MATH_SIN:               return "SIN";
-      case GEN6_MATH_COS:               return "COS";
-      case GEN6_MATH_FDIV:              return "FDIV";
-      case GEN6_MATH_POW:               return "POW";
-      case GEN6_MATH_INT_DIV_QUOTIENT:  return "INT DIV (quotient)";
-      case GEN6_MATH_INT_DIV_REMAINDER: return "INT DIV (remainder)";
-      default:                                  return "UNK";
-      }
-      break;
-   default:
-      switch (cond_modifier) {
-      case GEN6_COND_NONE:                return NULL;
-      case GEN6_COND_Z:                   return "z";
-      case GEN6_COND_NZ:                  return "nz";
-      case GEN6_COND_G:                   return "g";
-      case GEN6_COND_GE:                  return "ge";
-      case GEN6_COND_L:                   return "l";
-      case GEN6_COND_LE:                  return "le";
-      default:                                  return "unk";
-      }
-      break;
-   }
-}
-
-/**
- * Dump an instruction.
- */
-static void
-tc_dump_inst(struct toy_compiler *tc, const struct toy_inst *inst)
-{
-   const char *name;
-   int i;
-
-   name = get_opcode_name(inst->opcode);
-
-   ilo_printf("  %s", name);
-
-   if (inst->opcode == GEN6_OPCODE_NOP) {
-      ilo_printf("\n");
-      return;
-   }
-
-   if (inst->saturate)
-      ilo_printf(".sat");
-
-   name = get_cond_modifier_name(inst->opcode, inst->cond_modifier);
-   if (name)
-      ilo_printf(".%s", name);
-
-   ilo_printf(" ");
-
-   tc_dump_dst(tc, inst->dst);
-
-   for (i = 0; i < ARRAY_SIZE(inst->src); i++) {
-      if (tsrc_is_null(inst->src[i]))
-         break;
-
-      ilo_printf(", ");
-      tc_dump_src(tc, inst->src[i]);
-   }
-
-   ilo_printf("\n");
-}
-
-/**
- * Dump the instructions added to the compiler.
- */
-void
-toy_compiler_dump(struct toy_compiler *tc)
-{
-   struct toy_inst *inst;
-   int pc;
-
-   pc = 0;
-   tc_head(tc);
-   while ((inst = tc_next_no_skip(tc)) != NULL) {
-      /* we do not generate code for markers */
-      if (inst->marker)
-         ilo_printf("marker:");
-      else
-         ilo_printf("%6d:", pc++);
-
-      tc_dump_inst(tc, inst);
-   }
-}
-
-/**
- * Clean up the toy compiler.
- */
-void
-toy_compiler_cleanup(struct toy_compiler *tc)
-{
-   struct toy_inst *inst, *next;
-
-   LIST_FOR_EACH_ENTRY_SAFE(inst, next, &tc->instructions, list)
-      slab_free_st(&tc->mempool, inst);
-
-   slab_destroy(&tc->mempool);
-}
-
-/**
- * Initialize the instruction template, from which tc_add() initializes the
- * newly added instructions.
- */
-static void
-tc_init_inst_templ(struct toy_compiler *tc)
-{
-   struct toy_inst *templ = &tc->templ;
-   int i;
-
-   templ->opcode = GEN6_OPCODE_NOP;
-   templ->access_mode = GEN6_ALIGN_1;
-   templ->mask_ctrl = GEN6_MASKCTRL_NORMAL;
-   templ->dep_ctrl = GEN6_DEPCTRL_NORMAL;
-   templ->qtr_ctrl = GEN6_QTRCTRL_1Q;
-   templ->thread_ctrl = GEN6_THREADCTRL_NORMAL;
-   templ->pred_ctrl = GEN6_PREDCTRL_NONE;
-   templ->pred_inv = false;
-   templ->exec_size = GEN6_EXECSIZE_1;
-   templ->cond_modifier = GEN6_COND_NONE;
-   templ->acc_wr_ctrl = false;
-   templ->saturate = false;
-
-   templ->marker = false;
-
-   templ->dst = tdst_null();
-   for (i = 0; i < ARRAY_SIZE(templ->src); i++)
-      templ->src[i] = tsrc_null();
-
-   for (i = 0; i < ARRAY_SIZE(templ->tex.offsets); i++)
-      templ->tex.offsets[i] = tsrc_null();
-
-   list_inithead(&templ->list);
-}
-
-/**
- * Initialize the toy compiler.
- */
-void
-toy_compiler_init(struct toy_compiler *tc, const struct ilo_dev *dev)
-{
-   memset(tc, 0, sizeof(*tc));
-
-   tc->dev = dev;
-
-   tc_init_inst_templ(tc);
-
-   slab_create(&tc->mempool, sizeof(struct toy_inst),
-         64);
-
-   list_inithead(&tc->instructions);
-   /* instructions are added to the tail */
-   tc_tail(tc);
-
-   tc->rect_linear_width = 1;
-
-   /* skip 0 so that util_hash_table_get() never returns NULL */
-   tc->next_vrf = 1;
-}
diff --git a/src/gallium/drivers/ilo/shader/toy_compiler.h b/src/gallium/drivers/ilo/shader/toy_compiler.h
deleted file mode 100644 (file)
index 71f9dea..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef TOY_COMPILER_H
-#define TOY_COMPILER_H
-
-#include "genhw/genhw.h"
-#include "util/slab.h"
-
-#include "ilo_common.h"
-#include "toy_compiler_reg.h"
-
-/**
- * Toy opcodes.
- */
-enum toy_opcode {
-   /* 0..127 are reserved for GEN6_OPCODE_x */
-   TOY_OPCODE_LAST_HW = 127,
-
-   TOY_OPCODE_DO,
-
-   /* TGSI register functions */
-   TOY_OPCODE_TGSI_IN,
-   TOY_OPCODE_TGSI_CONST,
-   TOY_OPCODE_TGSI_SV,
-   TOY_OPCODE_TGSI_IMM,
-   TOY_OPCODE_TGSI_INDIRECT_FETCH,
-   TOY_OPCODE_TGSI_INDIRECT_STORE,
-
-   /* TGSI sampling functions */
-   TOY_OPCODE_TGSI_TEX,
-   TOY_OPCODE_TGSI_TXB,
-   TOY_OPCODE_TGSI_TXD,
-   TOY_OPCODE_TGSI_TXL,
-   TOY_OPCODE_TGSI_TXP,
-   TOY_OPCODE_TGSI_TXF,
-   TOY_OPCODE_TGSI_TXQ,
-   TOY_OPCODE_TGSI_TXQ_LZ,
-   TOY_OPCODE_TGSI_TEX2,
-   TOY_OPCODE_TGSI_TXB2,
-   TOY_OPCODE_TGSI_TXL2,
-   TOY_OPCODE_TGSI_SAMPLE,
-   TOY_OPCODE_TGSI_SAMPLE_I,
-   TOY_OPCODE_TGSI_SAMPLE_I_MS,
-   TOY_OPCODE_TGSI_SAMPLE_B,
-   TOY_OPCODE_TGSI_SAMPLE_C,
-   TOY_OPCODE_TGSI_SAMPLE_C_LZ,
-   TOY_OPCODE_TGSI_SAMPLE_D,
-   TOY_OPCODE_TGSI_SAMPLE_L,
-   TOY_OPCODE_TGSI_GATHER4,
-   TOY_OPCODE_TGSI_SVIEWINFO,
-   TOY_OPCODE_TGSI_SAMPLE_POS,
-   TOY_OPCODE_TGSI_SAMPLE_INFO,
-
-   /* math functions */
-   TOY_OPCODE_INV,
-   TOY_OPCODE_LOG,
-   TOY_OPCODE_EXP,
-   TOY_OPCODE_SQRT,
-   TOY_OPCODE_RSQ,
-   TOY_OPCODE_SIN,
-   TOY_OPCODE_COS,
-   TOY_OPCODE_FDIV,
-   TOY_OPCODE_POW,
-   TOY_OPCODE_INT_DIV_QUOTIENT,
-   TOY_OPCODE_INT_DIV_REMAINDER,
-
-   /* URB functions */
-   TOY_OPCODE_URB_WRITE,
-
-   /* GS-specific functions */
-   TOY_OPCODE_EMIT,
-   TOY_OPCODE_ENDPRIM,
-
-   /* FS-specific functions */
-   TOY_OPCODE_DDX,
-   TOY_OPCODE_DDY,
-   TOY_OPCODE_FB_WRITE,
-   TOY_OPCODE_KIL,
-};
-
-/**
- * Toy instruction.
- */
-struct toy_inst {
-   unsigned opcode:8;            /* enum toy_opcode      */
-   unsigned access_mode:1;       /* GEN6_ALIGN_x          */
-   unsigned mask_ctrl:1;         /* GEN6_MASKCTRL_x           */
-   unsigned dep_ctrl:2;          /* GEN6_DEPCTRL_x     */
-   unsigned qtr_ctrl:2;          /* GEN6_QTRCTRL_x   */
-   unsigned thread_ctrl:2;       /* GEN6_THREADCTRL_x         */
-   unsigned pred_ctrl:4;         /* GEN6_PREDCTRL_x      */
-   unsigned pred_inv:1;          /* true or false        */
-   unsigned exec_size:3;         /* GEN6_EXECSIZE_x        */
-   unsigned cond_modifier:4;     /* GEN6_COND_x    */
-   unsigned acc_wr_ctrl:1;       /* true or false        */
-   unsigned saturate:1;          /* true or false        */
-
-   /* true if the instruction should be ignored for instruction iteration */
-   unsigned marker:1;
-
-   unsigned pad:1;
-
-   struct toy_dst dst;
-   struct toy_src src[5];        /* match TGSI_FULL_MAX_SRC_REGISTERS */
-
-   struct {
-      int target;                /* TGSI_TEXTURE_x */
-      struct toy_src offsets[1]; /* need to be 4 when GATHER4 is supported */
-   } tex;
-
-   struct list_head list;
-};
-
-struct toy_compaction_table {
-   uint32_t control[32];
-   uint32_t datatype[32];
-   uint32_t subreg[32];
-   uint32_t src[32];
-
-   uint32_t control_3src[4];
-   uint64_t source_3src[4];
-};
-
-/**
- * Toy compiler.
- */
-struct toy_compiler {
-   const struct ilo_dev *dev;
-
-   struct toy_inst templ;
-   struct slab_mempool mempool;
-   struct list_head instructions;
-   struct list_head *iter, *iter_next;
-
-   /* this is not set until toy_compiler_legalize_for_asm() */
-   int num_instructions;
-
-   int rect_linear_width;
-   int next_vrf;
-
-   bool fail;
-   const char *reason;
-};
-
-/**
- * Allocate the given number of VRF registers.
- */
-static inline int
-tc_alloc_vrf(struct toy_compiler *tc, int count)
-{
-   const int vrf = tc->next_vrf;
-
-   tc->next_vrf += count;
-
-   return vrf;
-}
-
-/**
- * Allocate a temporary register.
- */
-static inline struct toy_dst
-tc_alloc_tmp(struct toy_compiler *tc)
-{
-   return tdst(TOY_FILE_VRF, tc_alloc_vrf(tc, 1), 0);
-}
-
-/**
- * Allocate four temporary registers.
- */
-static inline void
-tc_alloc_tmp4(struct toy_compiler *tc, struct toy_dst *tmp)
-{
-   tmp[0] = tc_alloc_tmp(tc);
-   tmp[1] = tc_alloc_tmp(tc);
-   tmp[2] = tc_alloc_tmp(tc);
-   tmp[3] = tc_alloc_tmp(tc);
-}
-
-/**
- * Duplicate an instruction at the current location.
- */
-static inline struct toy_inst *
-tc_duplicate_inst(struct toy_compiler *tc, const struct toy_inst *inst)
-{
-   struct toy_inst *new_inst;
-
-   new_inst = slab_alloc_st(&tc->mempool);
-   if (!new_inst)
-      return NULL;
-
-   *new_inst = *inst;
-   list_addtail(&new_inst->list, tc->iter_next);
-
-   return new_inst;
-}
-
-/**
- * Move an instruction to the current location.
- */
-static inline void
-tc_move_inst(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   list_del(&inst->list);
-   list_addtail(&inst->list, tc->iter_next);
-}
-
-/**
- * Discard an instruction.
- */
-static inline void
-tc_discard_inst(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   list_del(&inst->list);
-   slab_free_st(&tc->mempool, inst);
-}
-
-/**
- * Add a new instruction at the current location, using tc->templ as the
- * template.
- */
-static inline struct toy_inst *
-tc_add(struct toy_compiler *tc)
-{
-   return tc_duplicate_inst(tc, &tc->templ);
-}
-
-/**
- * A convenient version of tc_add() for instructions with 3 source operands.
- */
-static inline struct toy_inst *
-tc_add3(struct toy_compiler *tc, unsigned opcode,
-        struct toy_dst dst,
-        struct toy_src src0,
-        struct toy_src src1,
-        struct toy_src src2)
-{
-   struct toy_inst *inst;
-
-   inst = tc_add(tc);
-   if (!inst)
-      return NULL;
-
-   inst->opcode = opcode;
-   inst->dst = dst;
-   inst->src[0] = src0;
-   inst->src[1] = src1;
-   inst->src[2] = src2;
-
-   return inst;
-}
-
-/**
- * A convenient version of tc_add() for instructions with 2 source operands.
- */
-static inline struct toy_inst *
-tc_add2(struct toy_compiler *tc, int opcode,
-            struct toy_dst dst,
-            struct toy_src src0,
-            struct toy_src src1)
-{
-   return tc_add3(tc, opcode, dst, src0, src1, tsrc_null());
-}
-
-/**
- * A convenient version of tc_add() for instructions with 1 source operand.
- */
-static inline struct toy_inst *
-tc_add1(struct toy_compiler *tc, unsigned opcode,
-        struct toy_dst dst,
-        struct toy_src src0)
-{
-   return tc_add2(tc, opcode, dst, src0, tsrc_null());
-}
-
-/**
- * A convenient version of tc_add() for instructions without source or
- * destination operands.
- */
-static inline struct toy_inst *
-tc_add0(struct toy_compiler *tc, unsigned opcode)
-{
-   return tc_add1(tc, opcode, tdst_null(), tsrc_null());
-}
-
-#define TC_ALU0(func, opcode)             \
-static inline struct toy_inst *           \
-func(struct toy_compiler *tc)             \
-{                                         \
-   return tc_add0(tc, opcode);            \
-}
-
-#define TC_ALU1(func, opcode)             \
-static inline struct toy_inst *           \
-func(struct toy_compiler *tc,             \
-     struct toy_dst dst,                  \
-     struct toy_src src)                  \
-{                                         \
-   return tc_add1(tc, opcode, dst, src);  \
-}
-
-#define TC_ALU2(func, opcode)             \
-static inline struct toy_inst *           \
-func(struct toy_compiler *tc,             \
-     struct toy_dst dst,                  \
-     struct toy_src src0,                 \
-     struct toy_src src1)                 \
-{                                         \
-   return tc_add2(tc, opcode,             \
-         dst, src0, src1);                \
-}
-
-#define TC_ALU3(func, opcode)             \
-static inline struct toy_inst *           \
-func(struct toy_compiler *tc,             \
-     struct toy_dst dst,                  \
-     struct toy_src src0,                 \
-     struct toy_src src1,                 \
-     struct toy_src src2)                 \
-{                                         \
-   return tc_add3(tc, opcode,             \
-         dst, src0, src1, src2);          \
-}
-
-#define TC_CND2(func, opcode)             \
-static inline struct toy_inst *           \
-func(struct toy_compiler *tc,             \
-     struct toy_dst dst,                  \
-     struct toy_src src0,                 \
-     struct toy_src src1,                 \
-     unsigned cond_modifier)              \
-{                                         \
-   struct toy_inst *inst;                 \
-   inst = tc_add2(tc, opcode,             \
-         dst, src0, src1);                \
-   inst->cond_modifier = cond_modifier;   \
-   return inst;                           \
-}
-
-TC_ALU0(tc_NOP, GEN6_OPCODE_NOP)
-TC_ALU0(tc_ELSE, GEN6_OPCODE_ELSE)
-TC_ALU0(tc_ENDIF, GEN6_OPCODE_ENDIF)
-TC_ALU1(tc_MOV, GEN6_OPCODE_MOV)
-TC_ALU1(tc_RNDD, GEN6_OPCODE_RNDD)
-TC_ALU1(tc_INV, TOY_OPCODE_INV)
-TC_ALU1(tc_FRC, GEN6_OPCODE_FRC)
-TC_ALU1(tc_EXP, TOY_OPCODE_EXP)
-TC_ALU1(tc_LOG, TOY_OPCODE_LOG)
-TC_ALU2(tc_ADD, GEN6_OPCODE_ADD)
-TC_ALU2(tc_MUL, GEN6_OPCODE_MUL)
-TC_ALU2(tc_AND, GEN6_OPCODE_AND)
-TC_ALU2(tc_OR, GEN6_OPCODE_OR)
-TC_ALU2(tc_DP2, GEN6_OPCODE_DP2)
-TC_ALU2(tc_DP3, GEN6_OPCODE_DP3)
-TC_ALU2(tc_DP4, GEN6_OPCODE_DP4)
-TC_ALU2(tc_SHL, GEN6_OPCODE_SHL)
-TC_ALU2(tc_SHR, GEN6_OPCODE_SHR)
-TC_ALU2(tc_POW, TOY_OPCODE_POW)
-TC_ALU3(tc_MAC, GEN6_OPCODE_MAC)
-TC_CND2(tc_SEL, GEN6_OPCODE_SEL)
-TC_CND2(tc_CMP, GEN6_OPCODE_CMP)
-TC_CND2(tc_IF, GEN6_OPCODE_IF)
-TC_CND2(tc_SEND, GEN6_OPCODE_SEND)
-
-/**
- * Upcast a list_head to an instruction.
- */
-static inline struct toy_inst *
-tc_list_to_inst(struct toy_compiler *tc, struct list_head *item)
-{
-   return container_of(item, (struct toy_inst *) NULL, list);
-}
-
-/**
- * Return the instruction at the current location.
- */
-static inline struct toy_inst *
-tc_current(struct toy_compiler *tc)
-{
-   return (tc->iter != &tc->instructions) ?
-      tc_list_to_inst(tc, tc->iter) : NULL;
-}
-
-/**
- * Set the current location to the head.
- */
-static inline void
-tc_head(struct toy_compiler *tc)
-{
-   tc->iter = &tc->instructions;
-   tc->iter_next = tc->iter->next;
-}
-
-/**
- * Set the current location to the tail.
- */
-static inline void
-tc_tail(struct toy_compiler *tc)
-{
-   tc->iter = &tc->instructions;
-   tc->iter_next = tc->iter;
-}
-
-/**
- * Advance the current location.
- */
-static inline struct toy_inst *
-tc_next_no_skip(struct toy_compiler *tc)
-{
-   /* stay at the tail so that new instructions are added there */
-   if (tc->iter_next == &tc->instructions) {
-      tc_tail(tc);
-      return NULL;
-   }
-
-   tc->iter = tc->iter_next;
-   tc->iter_next = tc->iter_next->next;
-
-   return tc_list_to_inst(tc, tc->iter);
-}
-
-/**
- * Advance the current location, skipping markers.
- */
-static inline struct toy_inst *
-tc_next(struct toy_compiler *tc)
-{
-   struct toy_inst *inst;
-
-   do {
-      inst = tc_next_no_skip(tc);
-   } while (inst && inst->marker);
-
-   return inst;
-}
-
-static inline void
-tc_fail(struct toy_compiler *tc, const char *reason)
-{
-   if (!tc->fail) {
-      tc->fail = true;
-      tc->reason = reason;
-   }
-}
-
-void
-toy_compiler_init(struct toy_compiler *tc, const struct ilo_dev *dev);
-
-void
-toy_compiler_cleanup(struct toy_compiler *tc);
-
-void
-toy_compiler_dump(struct toy_compiler *tc);
-
-void *
-toy_compiler_assemble(struct toy_compiler *tc, int *size);
-
-const struct toy_compaction_table *
-toy_compiler_get_compaction_table(const struct ilo_dev *dev);
-
-void
-toy_compiler_disassemble(const struct ilo_dev *dev,
-                         const void *kernel, int size,
-                         bool dump_hex);
-
-#endif /* TOY_COMPILER_H */
diff --git a/src/gallium/drivers/ilo/shader/toy_compiler_asm.c b/src/gallium/drivers/ilo/shader/toy_compiler_asm.c
deleted file mode 100644 (file)
index 44bc2a7..0000000
+++ /dev/null
@@ -1,1225 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "toy_compiler.h"
-
-#define CG_REG_SHIFT 5
-#define CG_REG_NUM(origin) ((origin) >> CG_REG_SHIFT)
-
-struct codegen {
-   const struct ilo_dev *dev;
-   const struct toy_inst *inst;
-   int pc;
-
-   unsigned flag_reg_num;
-   unsigned flag_sub_reg_num;
-
-   struct codegen_dst {
-      unsigned file;
-      unsigned type;
-      bool indirect;
-      unsigned indirect_subreg;
-      unsigned origin; /* (RegNum << 5 | SubRegNumInBytes) */
-
-      unsigned horz_stride;
-
-      unsigned writemask;
-   } dst;
-
-   struct codegen_src {
-      unsigned file;
-      unsigned type;
-      bool indirect;
-      unsigned indirect_subreg;
-      unsigned origin; /* (RegNum << 5 | SubRegNumInBytes) */
-
-      unsigned vert_stride;
-      unsigned width;
-      unsigned horz_stride;
-
-      unsigned swizzle[4];
-      bool absolute;
-      bool negate;
-   } src[3];
-};
-
-/*
- * From the Sandy Bridge PRM, volume 4 part 2, page 107-108:
- *
- *     "(Src0Index) The 5-bit index for source 0. The 12-bit table-look-up
- *      result forms bits [88:77], the source 0 register region fields, of the
- *      128-bit instruction word."
- *
- *     "(SubRegIndex) The 5-bit index for sub-register fields. The 15-bit
- *      table-look-up result forms bits [100:96], [68,64] and [52,48] of the
- *      128-bit instruction word."
- *
- *     "(DataTypeIndex) The 5-bit index for data type fields. The 18-bit
- *      table-look-up result forms bits [63:61] and [46, 32] of the 128-bit
- *      instruction word."
- *
- *     "(ControlIndex) The 5-bit index for data type fields. The 17-bit
- *      table-look-up result forms bits[31], and [23, 8] of the 128-bit
- *      instruction word."
- */
-static const struct toy_compaction_table toy_compaction_table_gen6 = {
-   .control = {
-      [0]   = 0x00000,  /* 00000000000000000 */
-      [1]   = 0x08000,  /* 01000000000000000 */
-      [2]   = 0x06000,  /* 00110000000000000 */
-      [3]   = 0x00100,  /* 00000000100000000 */
-      [4]   = 0x02000,  /* 00010000000000000 */
-      [5]   = 0x01100,  /* 00001000100000000 */
-      [6]   = 0x00102,  /* 00000000100000010 */
-      [7]   = 0x00002,  /* 00000000000000010 */
-      [8]   = 0x08100,  /* 01000000100000000 */
-      [9]   = 0x0a000,  /* 01010000000000000 */
-      [10]  = 0x16000,  /* 10110000000000000 */
-      [11]  = 0x04000,  /* 00100000000000000 */
-      [12]  = 0x1a000,  /* 11010000000000000 */
-      [13]  = 0x18000,  /* 11000000000000000 */
-      [14]  = 0x09100,  /* 01001000100000000 */
-      [15]  = 0x08008,  /* 01000000000001000 */
-      [16]  = 0x08004,  /* 01000000000000100 */
-      [17]  = 0x00008,  /* 00000000000001000 */
-      [18]  = 0x00004,  /* 00000000000000100 */
-      [19]  = 0x01100,  /* 00111000100000000 */
-      [20]  = 0x01102,  /* 00001000100000010 */
-      [21]  = 0x06100,  /* 00110000100000000 */
-      [22]  = 0x06001,  /* 00110000000000001 */
-      [23]  = 0x04001,  /* 00100000000000001 */
-      [24]  = 0x06002,  /* 00110000000000010 */
-      [25]  = 0x06005,  /* 00110000000000101 */
-      [26]  = 0x06009,  /* 00110000000001001 */
-      [27]  = 0x06010,  /* 00110000000010000 */
-      [28]  = 0x06003,  /* 00110000000000011 */
-      [29]  = 0x06004,  /* 00110000000000100 */
-      [30]  = 0x06108,  /* 00110000100001000 */
-      [31]  = 0x04009,  /* 00100000000001001 */
-   },
-   .datatype = {
-      [0]   = 0x09c00,  /* 001001110000000000 */
-      [1]   = 0x08c20,  /* 001000110000100000 */
-      [2]   = 0x09c01,  /* 001001110000000001 */
-      [3]   = 0x08060,  /* 001000000001100000 */
-      [4]   = 0x0ad29,  /* 001010110100101001 */
-      [5]   = 0x081ad,  /* 001000000110101101 */
-      [6]   = 0x0c62c,  /* 001100011000101100 */
-      [7]   = 0x0bdad,  /* 001011110110101101 */
-      [8]   = 0x081ec,  /* 001000000111101100 */
-      [9]   = 0x08061,  /* 001000000001100001 */
-      [10]  = 0x08ca5,  /* 001000110010100101 */
-      [11]  = 0x08041,  /* 001000000001000001 */
-      [12]  = 0x08231,  /* 001000001000110001 */
-      [13]  = 0x08229,  /* 001000001000101001 */
-      [14]  = 0x08020,  /* 001000000000100000 */
-      [15]  = 0x08232,  /* 001000001000110010 */
-      [16]  = 0x0a529,  /* 001010010100101001 */
-      [17]  = 0x0b4a5,  /* 001011010010100101 */
-      [18]  = 0x081a5,  /* 001000000110100101 */
-      [19]  = 0x0c629,  /* 001100011000101001 */
-      [20]  = 0x0b62c,  /* 001011011000101100 */
-      [21]  = 0x0b5a5,  /* 001011010110100101 */
-      [22]  = 0x0bda5,  /* 001011110110100101 */
-      [23]  = 0x0f1bd,  /* 001111011110111101 */
-      [24]  = 0x0f1bc,  /* 001111011110111100 */
-      [25]  = 0x0f1bd,  /* 001111011110111101 */
-      [26]  = 0x0f19d,  /* 001111011110011101 */
-      [27]  = 0x0f1be,  /* 001111011110111110 */
-      [28]  = 0x08021,  /* 001000000000100001 */
-      [29]  = 0x08022,  /* 001000000000100010 */
-      [30]  = 0x09fdd,  /* 001001111111011101 */
-      [31]  = 0x083be,  /* 001000001110111110 */
-   },
-   .subreg = {
-      [0]   = 0x0000,   /* 000000000000000 */
-      [1]   = 0x0004,   /* 000000000000100 */
-      [2]   = 0x0180,   /* 000000110000000 */
-      [3]   = 0x1000,   /* 111000000000000 */
-      [4]   = 0x3c08,   /* 011110000001000 */
-      [5]   = 0x0400,   /* 000010000000000 */
-      [6]   = 0x0010,   /* 000000000010000 */
-      [7]   = 0x0c0c,   /* 000110000001100 */
-      [8]   = 0x1000,   /* 001000000000000 */
-      [9]   = 0x0200,   /* 000001000000000 */
-      [10]  = 0x0294,   /* 000001010010100 */
-      [11]  = 0x0056,   /* 000000001010110 */
-      [12]  = 0x2000,   /* 010000000000000 */
-      [13]  = 0x6000,   /* 110000000000000 */
-      [14]  = 0x0800,   /* 000100000000000 */
-      [15]  = 0x0080,   /* 000000010000000 */
-      [16]  = 0x0008,   /* 000000000001000 */
-      [17]  = 0x4000,   /* 100000000000000 */
-      [18]  = 0x0280,   /* 000001010000000 */
-      [19]  = 0x1400,   /* 001010000000000 */
-      [20]  = 0x1800,   /* 001100000000000 */
-      [21]  = 0x0054,   /* 000000001010100 */
-      [22]  = 0x5a94,   /* 101101010010100 */
-      [23]  = 0x2800,   /* 010100000000000 */
-      [24]  = 0x008f,   /* 000000010001111 */
-      [25]  = 0x3000,   /* 011000000000000 */
-      [26]  = 0x1c00,   /* 111110000000000 */
-      [27]  = 0x5000,   /* 101000000000000 */
-      [28]  = 0x000f,   /* 000000000001111 */
-      [29]  = 0x088f,   /* 000100010001111 */
-      [30]  = 0x108f,   /* 001000010001111 */
-      [31]  = 0x0c00,   /* 000110000000000 */
-   },
-   .src = {
-      [0]   = 0x000,    /* 000000000000 */
-      [1]   = 0x588,    /* 010110001000 */
-      [2]   = 0x468,    /* 010001101000 */
-      [3]   = 0x228,    /* 001000101000 */
-      [4]   = 0x690,    /* 011010010000 */
-      [5]   = 0x120,    /* 000100100000 */
-      [6]   = 0x46c,    /* 010001101100 */
-      [7]   = 0x510,    /* 010101110000 */
-      [8]   = 0x618,    /* 011001111000 */
-      [9]   = 0x328,    /* 001100101000 */
-      [10]  = 0x58c,    /* 010110001100 */
-      [11]  = 0x220,    /* 001000100000 */
-      [12]  = 0x58a,    /* 010110001010 */
-      [13]  = 0x002,    /* 000000000010 */
-      [14]  = 0x550,    /* 010101010000 */
-      [15]  = 0x568,    /* 010101101000 */
-      [16]  = 0xf4c,    /* 111101001100 */
-      [17]  = 0xf2c,    /* 111100101100 */
-      [18]  = 0x610,    /* 011001110000 */
-      [19]  = 0x589,    /* 010110001001 */
-      [20]  = 0x558,    /* 010101011000 */
-      [21]  = 0x348,    /* 001101001000 */
-      [22]  = 0x42c,    /* 010000101100 */
-      [23]  = 0x400,    /* 010000000000 */
-      [24]  = 0x310,    /* 001101110000 */
-      [25]  = 0x310,    /* 001100010000 */
-      [26]  = 0x300,    /* 001100000000 */
-      [27]  = 0x46a,    /* 010001101010 */
-      [28]  = 0x318,    /* 001101111000 */
-      [29]  = 0x010,    /* 000001110000 */
-      [30]  = 0x320,    /* 001100100000 */
-      [31]  = 0x350,    /* 001101010000 */
-   },
-};
-
-/*
- * From the Ivy Bridge PRM, volume 4 part 3, page 128:
- *
- *     "(Src0Index) Lookup one of 32 12-bit values. That value is used (from
- *      MSB to LSB) for the Src0.AddrMode, Src0.ChanSel[7:4], Src0.HorzStride,
- *      Src0.SrcMod, Src0.VertStride, and Src0.Width bit fields."
- *
- *     "(SubRegIndex) Lookup one of 32 15-bit values. That value is used (from
- *      MSB to LSB) for various fields for Src1, Src0, and Dst, including
- *      ChanEn/ChanSel, SubRegNum, and AddrImm[4] or AddrImm[4:0], depending
- *      on AddrMode and AccessMode.
- *
- *     "(DataTypeIndex) Lookup one of 32 18-bit values. That value is used
- *      (from MSB to LSB) for the Dst.AddrMode, Dst.HorzStride, Dst.DstType,
- *      Dst.RegFile, Src0.SrcType, Src0.RegFile, Src1.SrcType, and
- *      Src1.RegType bit fields."
- *
- *     "(ControlIndex) Lookup one of 32 19-bit values. That value is used
- *      (from MSB to LSB) for the FlagRegNum, FlagSubRegNum, Saturate,
- *      ExecSize, PredInv, PredCtrl, ThreadCtrl, QtrCtrl, DepCtrl, MaskCtrl,
- *      and AccessMode bit fields."
- */
-static const struct toy_compaction_table toy_compaction_table_gen7 = {
-   .control = {
-      [0]   = 0x00002,  /* 0000000000000000010 */
-      [1]   = 0x04000,  /* 0000100000000000000 */
-      [2]   = 0x04001,  /* 0000100000000000001 */
-      [3]   = 0x04002,  /* 0000100000000000010 */
-      [4]   = 0x04003,  /* 0000100000000000011 */
-      [5]   = 0x04004,  /* 0000100000000000100 */
-      [6]   = 0x04005,  /* 0000100000000000101 */
-      [7]   = 0x04007,  /* 0000100000000000111 */
-      [8]   = 0x04008,  /* 0000100000000001000 */
-      [9]   = 0x04009,  /* 0000100000000001001 */
-      [10]  = 0x0400d,  /* 0000100000000001101 */
-      [11]  = 0x06000,  /* 0000110000000000000 */
-      [12]  = 0x06001,  /* 0000110000000000001 */
-      [13]  = 0x06002,  /* 0000110000000000010 */
-      [14]  = 0x06003,  /* 0000110000000000011 */
-      [15]  = 0x06004,  /* 0000110000000000100 */
-      [16]  = 0x06005,  /* 0000110000000000101 */
-      [17]  = 0x06007,  /* 0000110000000000111 */
-      [18]  = 0x06009,  /* 0000110000000001001 */
-      [19]  = 0x0600d,  /* 0000110000000001101 */
-      [20]  = 0x06010,  /* 0000110000000010000 */
-      [21]  = 0x06100,  /* 0000110000100000000 */
-      [22]  = 0x08000,  /* 0001000000000000000 */
-      [23]  = 0x08002,  /* 0001000000000000010 */
-      [24]  = 0x08004,  /* 0001000000000000100 */
-      [25]  = 0x08100,  /* 0001000000100000000 */
-      [26]  = 0x16000,  /* 0010110000000000000 */
-      [27]  = 0x16010,  /* 0010110000000010000 */
-      [28]  = 0x18000,  /* 0011000000000000000 */
-      [29]  = 0x18100,  /* 0011000000100000000 */
-      [30]  = 0x28000,  /* 0101000000000000000 */
-      [31]  = 0x28100,  /* 0101000000100000000 */
-   },
-   .datatype = {
-      [0]   = 0x08001,  /* 001000000000000001 */
-      [1]   = 0x08020,  /* 001000000000100000 */
-      [2]   = 0x08021,  /* 001000000000100001 */
-      [3]   = 0x08061,  /* 001000000001100001 */
-      [4]   = 0x080bd,  /* 001000000010111101 */
-      [5]   = 0x082fd,  /* 001000001011111101 */
-      [6]   = 0x083a1,  /* 001000001110100001 */
-      [7]   = 0x083a5,  /* 001000001110100101 */
-      [8]   = 0x083bd,  /* 001000001110111101 */
-      [9]   = 0x08421,  /* 001000010000100001 */
-      [10]  = 0x08c20,  /* 001000110000100000 */
-      [11]  = 0x08c21,  /* 001000110000100001 */
-      [12]  = 0x094a5,  /* 001001010010100101 */
-      [13]  = 0x09ca4,  /* 001001110010100100 */
-      [14]  = 0x09ca5,  /* 001001110010100101 */
-      [15]  = 0x0f3bd,  /* 001111001110111101 */
-      [16]  = 0x0f79d,  /* 001111011110011101 */
-      [17]  = 0x0f7bc,  /* 001111011110111100 */
-      [18]  = 0x0f7bd,  /* 001111011110111101 */
-      [19]  = 0x0ffbc,  /* 001111111110111100 */
-      [20]  = 0x0020c,  /* 000000001000001100 */
-      [21]  = 0x0803d,  /* 001000000000111101 */
-      [22]  = 0x080a5,  /* 001000000010100101 */
-      [23]  = 0x08420,  /* 001000010000100000 */
-      [24]  = 0x094a4,  /* 001001010010100100 */
-      [25]  = 0x09c84,  /* 001001110010000100 */
-      [26]  = 0x0a509,  /* 001010010100001001 */
-      [27]  = 0x0dfbd,  /* 001101111110111101 */
-      [28]  = 0x0ffbd,  /* 001111111110111101 */
-      [29]  = 0x0bdac,  /* 001011110110101100 */
-      [30]  = 0x0a528,  /* 001010010100101000 */
-      [31]  = 0x0ad28,  /* 001010110100101000 */
-   },
-   .subreg = {
-      [0]   = 0x0000,   /* 000000000000000 */
-      [1]   = 0x0001,   /* 000000000000001 */
-      [2]   = 0x0008,   /* 000000000001000 */
-      [3]   = 0x000f,   /* 000000000001111 */
-      [4]   = 0x0010,   /* 000000000010000 */
-      [5]   = 0x0080,   /* 000000010000000 */
-      [6]   = 0x0100,   /* 000000100000000 */
-      [7]   = 0x0180,   /* 000000110000000 */
-      [8]   = 0x0200,   /* 000001000000000 */
-      [9]   = 0x0210,   /* 000001000010000 */
-      [10]  = 0x0280,   /* 000001010000000 */
-      [11]  = 0x1000,   /* 001000000000000 */
-      [12]  = 0x1001,   /* 001000000000001 */
-      [13]  = 0x1081,   /* 001000010000001 */
-      [14]  = 0x1082,   /* 001000010000010 */
-      [15]  = 0x1083,   /* 001000010000011 */
-      [16]  = 0x1084,   /* 001000010000100 */
-      [17]  = 0x1087,   /* 001000010000111 */
-      [18]  = 0x1088,   /* 001000010001000 */
-      [19]  = 0x108e,   /* 001000010001110 */
-      [20]  = 0x108f,   /* 001000010001111 */
-      [21]  = 0x1180,   /* 001000110000000 */
-      [22]  = 0x11e8,   /* 001000111101000 */
-      [23]  = 0x2000,   /* 010000000000000 */
-      [24]  = 0x2180,   /* 010000110000000 */
-      [25]  = 0x3000,   /* 011000000000000 */
-      [26]  = 0x3c87,   /* 011110010000111 */
-      [27]  = 0x4000,   /* 100000000000000 */
-      [28]  = 0x5000,   /* 101000000000000 */
-      [29]  = 0x6000,   /* 110000000000000 */
-      [30]  = 0x7000,   /* 111000000000000 */
-      [31]  = 0x701c,   /* 111000000011100 */
-   },
-   .src = {
-      [0]   = 0x000,    /* 000000000000 */
-      [1]   = 0x002,    /* 000000000010 */
-      [2]   = 0x010,    /* 000000010000 */
-      [3]   = 0x012,    /* 000000010010 */
-      [4]   = 0x018,    /* 000000011000 */
-      [5]   = 0x020,    /* 000000100000 */
-      [6]   = 0x028,    /* 000000101000 */
-      [7]   = 0x048,    /* 000001001000 */
-      [8]   = 0x050,    /* 000001010000 */
-      [9]   = 0x070,    /* 000001110000 */
-      [10]  = 0x078,    /* 000001111000 */
-      [11]  = 0x300,    /* 001100000000 */
-      [12]  = 0x302,    /* 001100000010 */
-      [13]  = 0x308,    /* 001100001000 */
-      [14]  = 0x310,    /* 001100010000 */
-      [15]  = 0x312,    /* 001100010010 */
-      [16]  = 0x320,    /* 001100100000 */
-      [17]  = 0x328,    /* 001100101000 */
-      [18]  = 0x338,    /* 001100111000 */
-      [19]  = 0x340,    /* 001101000000 */
-      [20]  = 0x342,    /* 001101000010 */
-      [21]  = 0x348,    /* 001101001000 */
-      [22]  = 0x350,    /* 001101010000 */
-      [23]  = 0x360,    /* 001101100000 */
-      [24]  = 0x368,    /* 001101101000 */
-      [25]  = 0x370,    /* 001101110000 */
-      [26]  = 0x371,    /* 001101110001 */
-      [27]  = 0x378,    /* 001101111000 */
-      [28]  = 0x468,    /* 010001101000 */
-      [29]  = 0x469,    /* 010001101001 */
-      [30]  = 0x46a,    /* 010001101010 */
-      [31]  = 0x588,    /* 010110001000 */
-   },
-};
-
-static const struct toy_compaction_table toy_compaction_table_gen8 = {
-   .control = {
-   },
-   .datatype = {
-   },
-   .subreg = {
-   },
-   .src = {
-   },
-   .control_3src = {
-   },
-   .source_3src = {
-   },
-};
-
-const struct toy_compaction_table *
-toy_compiler_get_compaction_table(const struct ilo_dev *dev)
-{
-   switch (ilo_dev_gen(dev)) {
-   case ILO_GEN(8):
-      return &toy_compaction_table_gen8;
-   case ILO_GEN(7.5):
-   case ILO_GEN(7):
-      return &toy_compaction_table_gen7;
-   case ILO_GEN(6):
-      return &toy_compaction_table_gen6;
-   default:
-      assert(!"unsupported gen");
-      return NULL;
-   }
-}
-
-/**
- * Return true if the source operand is null.
- */
-static bool
-src_is_null(const struct codegen *cg, int idx)
-{
-   const struct codegen_src *src = &cg->src[idx];
-
-   return (src->file == GEN6_FILE_ARF &&
-           src->origin == GEN6_ARF_NULL << CG_REG_SHIFT);
-}
-
-/**
- * Translate a source operand to DW2 or DW3 of the 1-src/2-src format.
- */
-static uint32_t
-translate_src_gen6(const struct codegen *cg, int idx)
-{
-   const struct codegen_src *src = &cg->src[idx];
-   uint32_t dw;
-
-   ILO_DEV_ASSERT(cg->dev, 6, 8);
-
-   /* special treatment may be needed if any of the operand is immediate */
-   if (cg->src[0].file == GEN6_FILE_IMM) {
-      assert(!cg->src[0].absolute && !cg->src[0].negate);
-
-      /* only the last src operand can be an immediate unless it is Gen8+ */
-      assert(ilo_dev_gen(cg->dev) >= ILO_GEN(8) || src_is_null(cg, 1));
-
-      if (!src_is_null(cg, 1))
-         return cg->src[idx].origin;
-
-      if (idx == 0) {
-         if (ilo_dev_gen(cg->dev) >= ILO_GEN(8)) {
-            return cg->src[1].type << 27 |
-                   cg->src[1].file << 25;
-         } else {
-            return cg->flag_sub_reg_num << 25;
-         }
-      } else {
-         return cg->src[0].origin;
-      }
-   }
-   else if (idx && cg->src[1].file == GEN6_FILE_IMM) {
-      assert(!cg->src[1].absolute && !cg->src[1].negate);
-      return cg->src[1].origin;
-   }
-
-   assert(src->file != GEN6_FILE_IMM);
-
-   if (src->indirect) {
-      const int offset = (int) src->origin;
-
-      assert(src->file == GEN6_FILE_GRF);
-      assert(offset < 512 && offset >= -512);
-
-      if (cg->inst->access_mode == GEN6_ALIGN_16) {
-         assert(src->width == GEN6_WIDTH_4);
-         assert(src->horz_stride == GEN6_HORZSTRIDE_1);
-
-         /* the lower 4 bits are reserved for the swizzle_[xy] */
-         assert(!(src->origin & 0xf));
-
-         dw = src->vert_stride << 21 |
-              src->swizzle[3] << 18 |
-              src->swizzle[2] << 16 |
-              GEN6_ADDRMODE_INDIRECT << 15 |
-              src->negate << 14 |
-              src->absolute << 13 |
-              src->swizzle[1] << 2 |
-              src->swizzle[0];
-         if (ilo_dev_gen(cg->dev) >= ILO_GEN(8)) {
-            dw |= src->indirect_subreg << 9 |
-                  (src->origin & 0x1f0);
-         } else {
-            dw |= src->indirect_subreg << 10 |
-                  (src->origin & 0x3f0);
-         }
-      }
-      else {
-         assert(src->swizzle[0] == TOY_SWIZZLE_X &&
-                src->swizzle[1] == TOY_SWIZZLE_Y &&
-                src->swizzle[2] == TOY_SWIZZLE_Z &&
-                src->swizzle[3] == TOY_SWIZZLE_W);
-
-         dw = src->vert_stride << 21 |
-              src->width << 18 |
-              src->horz_stride << 16 |
-              GEN6_ADDRMODE_INDIRECT << 15 |
-              src->negate << 14 |
-              src->absolute << 13;
-         if (ilo_dev_gen(cg->dev) >= ILO_GEN(8)) {
-            dw |= src->indirect_subreg << 9 |
-                  (src->origin & 0x1ff);
-         } else {
-            dw |= src->indirect_subreg << 10 |
-                  (src->origin & 0x3ff);
-         }
-      }
-   }
-   else {
-      switch (src->file) {
-      case GEN6_FILE_ARF:
-         break;
-      case GEN6_FILE_GRF:
-         assert(CG_REG_NUM(src->origin) < 128);
-         break;
-      case GEN6_FILE_MRF:
-         assert(cg->inst->opcode == GEN6_OPCODE_SEND ||
-                cg->inst->opcode == GEN6_OPCODE_SENDC);
-         assert(CG_REG_NUM(src->origin) < 16);
-         break;
-      case GEN6_FILE_IMM:
-      default:
-         assert(!"invalid src file");
-         break;
-      }
-
-      if (cg->inst->access_mode == GEN6_ALIGN_16) {
-         assert(src->width == GEN6_WIDTH_4);
-         assert(src->horz_stride == GEN6_HORZSTRIDE_1);
-
-         /* the lower 4 bits are reserved for the swizzle_[xy] */
-         assert(!(src->origin & 0xf));
-
-         dw = src->vert_stride << 21 |
-              src->swizzle[3] << 18 |
-              src->swizzle[2] << 16 |
-              GEN6_ADDRMODE_DIRECT << 15 |
-              src->negate << 14 |
-              src->absolute << 13 |
-              src->origin |
-              src->swizzle[1] << 2 |
-              src->swizzle[0];
-      }
-      else {
-         assert(src->swizzle[0] == TOY_SWIZZLE_X &&
-                src->swizzle[1] == TOY_SWIZZLE_Y &&
-                src->swizzle[2] == TOY_SWIZZLE_Z &&
-                src->swizzle[3] == TOY_SWIZZLE_W);
-
-         dw = src->vert_stride << 21 |
-              src->width << 18 |
-              src->horz_stride << 16 |
-              GEN6_ADDRMODE_DIRECT << 15 |
-              src->negate << 14 |
-              src->absolute << 13 |
-              src->origin;
-      }
-   }
-
-   if (ilo_dev_gen(cg->dev) >= ILO_GEN(8)) {
-      const bool indirect_origin_bit9 = (cg->dst.indirect) ?
-         (src->origin & 0x200) : 0;
-
-      if (idx == 0) {
-         dw |= indirect_origin_bit9 << 31 |
-               cg->src[1].type << 27 |
-               cg->src[1].file << 25;
-      } else {
-         dw |= indirect_origin_bit9 << 25;
-      }
-   } else {
-      if (idx == 0)
-         dw |= cg->flag_sub_reg_num << 25;
-   }
-
-   return dw;
-}
-
-/**
- * Translate the destination operand to the higher 16 bits of DW1 of the
- * 1-src/2-src format.
- */
-static uint16_t
-translate_dst_region_gen6(const struct codegen *cg)
-{
-   const struct codegen_dst *dst = &cg->dst;
-   uint16_t dw1_region;
-
-   ILO_DEV_ASSERT(cg->dev, 6, 8);
-
-   if (dst->file == GEN6_FILE_IMM) {
-      /* dst is immediate (JIP) when the opcode is a conditional branch */
-      switch (cg->inst->opcode) {
-      case GEN6_OPCODE_IF:
-      case GEN6_OPCODE_ELSE:
-      case GEN6_OPCODE_ENDIF:
-      case GEN6_OPCODE_WHILE:
-         assert(dst->type == GEN6_TYPE_W);
-         dw1_region = (dst->origin & 0xffff);
-         break;
-      default:
-         assert(!"dst cannot be immediate");
-         dw1_region = 0;
-         break;
-      }
-
-      return dw1_region;
-   }
-
-   if (dst->indirect) {
-      const int offset = (int) dst->origin;
-
-      assert(dst->file == GEN6_FILE_GRF);
-      assert(offset < 512 && offset >= -512);
-
-      if (cg->inst->access_mode == GEN6_ALIGN_16) {
-         /*
-          * From the Sandy Bridge PRM, volume 4 part 2, page 144:
-          *
-          *     "Allthough Dst.HorzStride is a don't care for Align16, HW
-          *      needs this to be programmed as 01."
-          */
-         assert(dst->horz_stride == GEN6_HORZSTRIDE_1);
-         /* the lower 4 bits are reserved for the writemask */
-         assert(!(dst->origin & 0xf));
-
-         dw1_region = GEN6_ADDRMODE_INDIRECT << 15 |
-                      dst->horz_stride << 13 |
-                      dst->writemask;
-         if (ilo_dev_gen(cg->dev) >= ILO_GEN(8)) {
-            dw1_region |= dst->indirect_subreg << 9 |
-                          (dst->origin & 0x1f0);
-         } else {
-            dw1_region |= dst->indirect_subreg << 10 |
-                          (dst->origin & 0x3f0);
-         }
-      }
-      else {
-         assert(dst->writemask == TOY_WRITEMASK_XYZW);
-
-         dw1_region = GEN6_ADDRMODE_INDIRECT << 15 |
-                      dst->horz_stride << 13;
-         if (ilo_dev_gen(cg->dev) >= ILO_GEN(8)) {
-            dw1_region |= dst->indirect_subreg << 9 |
-                          (dst->origin & 0x1ff);
-         } else {
-            dw1_region |= dst->indirect_subreg << 10 |
-                          (dst->origin & 0x3ff);
-         }
-      }
-   }
-   else {
-      assert((dst->file == GEN6_FILE_GRF &&
-              CG_REG_NUM(dst->origin) < 128) ||
-             (dst->file == GEN6_FILE_MRF &&
-              CG_REG_NUM(dst->origin) < 16) ||
-             (dst->file == GEN6_FILE_ARF));
-
-      if (cg->inst->access_mode == GEN6_ALIGN_16) {
-         /* similar to the indirect case */
-         assert(dst->horz_stride == GEN6_HORZSTRIDE_1);
-         assert(!(dst->origin & 0xf));
-
-         dw1_region = GEN6_ADDRMODE_DIRECT << 15 |
-                      dst->horz_stride << 13 |
-                      dst->origin |
-                      dst->writemask;
-      }
-      else {
-         assert(dst->writemask == TOY_WRITEMASK_XYZW);
-
-         dw1_region = GEN6_ADDRMODE_DIRECT << 15 |
-                      dst->horz_stride << 13 |
-                      dst->origin;
-      }
-   }
-
-   return dw1_region;
-}
-
-/**
- * Translate the destination operand to DW1 of the 1-src/2-src format.
- */
-static uint32_t
-translate_dst_gen6(const struct codegen *cg)
-{
-   ILO_DEV_ASSERT(cg->dev, 6, 7.5);
-
-   return translate_dst_region_gen6(cg) << 16 |
-          cg->src[1].type << 12 |
-          cg->src[1].file << 10 |
-          cg->src[0].type << 7 |
-          cg->src[0].file << 5 |
-          cg->dst.type << 2 |
-          cg->dst.file;
-}
-
-static uint32_t
-translate_dst_gen8(const struct codegen *cg)
-{
-   const bool indirect_origin_bit9 = (cg->dst.indirect) ?
-      (cg->dst.origin & 0x200) : 0;
-
-   ILO_DEV_ASSERT(cg->dev, 8, 8);
-
-   return translate_dst_region_gen6(cg) << 16 |
-          indirect_origin_bit9 << 15 |
-          cg->src[0].type << 11 |
-          cg->src[0].file << 9 |
-          cg->dst.type << 5 |
-          cg->dst.file << 3 |
-          cg->inst->mask_ctrl << 2 |
-          cg->flag_reg_num << 1 |
-          cg->flag_sub_reg_num;
-}
-
-/**
- * Translate the instruction to DW0 of the 1-src/2-src format.
- */
-static uint32_t
-translate_inst_gen6(const struct codegen *cg)
-{
-   const bool debug_ctrl = false;
-   const bool cmpt_ctrl = false;
-
-   ILO_DEV_ASSERT(cg->dev, 6, 7.5);
-
-   assert(cg->inst->opcode < 128);
-
-   return cg->inst->saturate << 31 |
-          debug_ctrl << 30 |
-          cmpt_ctrl << 29 |
-          cg->inst->acc_wr_ctrl << 28 |
-          cg->inst->cond_modifier << 24 |
-          cg->inst->exec_size << 21 |
-          cg->inst->pred_inv << 20 |
-          cg->inst->pred_ctrl << 16 |
-          cg->inst->thread_ctrl << 14 |
-          cg->inst->qtr_ctrl << 12 |
-          cg->inst->dep_ctrl << 10 |
-          cg->inst->mask_ctrl << 9 |
-          cg->inst->access_mode << 8 |
-          cg->inst->opcode;
-}
-
-static uint32_t
-translate_inst_gen8(const struct codegen *cg)
-{
-   const bool debug_ctrl = false;
-   const bool cmpt_ctrl = false;
-
-   ILO_DEV_ASSERT(cg->dev, 8, 8);
-
-   assert(cg->inst->opcode < 128);
-
-   return cg->inst->saturate << 31 |
-          debug_ctrl << 30 |
-          cmpt_ctrl << 29 |
-          cg->inst->acc_wr_ctrl << 28 |
-          cg->inst->cond_modifier << 24 |
-          cg->inst->exec_size << 21 |
-          cg->inst->pred_inv << 20 |
-          cg->inst->pred_ctrl << 16 |
-          cg->inst->thread_ctrl << 14 |
-          cg->inst->qtr_ctrl << 12 |
-          cg->inst->dep_ctrl << 9 |
-          cg->inst->access_mode << 8 |
-          cg->inst->opcode;
-}
-
-/**
- * Codegen an instruction in 1-src/2-src format.
- */
-static void
-codegen_inst_gen6(const struct codegen *cg, uint32_t *code)
-{
-   ILO_DEV_ASSERT(cg->dev, 6, 8);
-
-   if (ilo_dev_gen(cg->dev) >= ILO_GEN(8)) {
-      code[0] = translate_inst_gen8(cg);
-      code[1] = translate_dst_gen8(cg);
-   } else {
-      code[0] = translate_inst_gen6(cg);
-      code[1] = translate_dst_gen6(cg);
-   }
-
-   code[2] = translate_src_gen6(cg, 0);
-   code[3] = translate_src_gen6(cg, 1);
-   assert(src_is_null(cg, 2));
-}
-
-/**
- * Codegen an instruction in 3-src format.
- */
-static void
-codegen_inst_3src_gen6(const struct codegen *cg, uint32_t *code)
-{
-   const struct codegen_dst *dst = &cg->dst;
-   uint32_t dw0, dw1, dw_src[3];
-   int i;
-
-   ILO_DEV_ASSERT(cg->dev, 6, 8);
-
-   if (ilo_dev_gen(cg->dev) >= ILO_GEN(8))
-      dw0 = translate_inst_gen8(cg);
-   else
-      dw0 = translate_inst_gen6(cg);
-
-   /*
-    * 3-src instruction restrictions
-    *
-    *  - align16 with direct addressing
-    *  - GRF or MRF dst
-    *  - GRF src
-    *  - sub_reg_num is DWORD aligned
-    *  - no regioning except replication control
-    *    (vert_stride == 0 && horz_stride == 0)
-    */
-   assert(cg->inst->access_mode == GEN6_ALIGN_16);
-
-   assert(!dst->indirect);
-   assert((dst->file == GEN6_FILE_GRF && CG_REG_NUM(dst->origin) < 128) ||
-          (dst->file == GEN6_FILE_MRF && CG_REG_NUM(dst->origin) < 16));
-   assert(!(dst->origin & 0x3));
-   assert(dst->horz_stride == GEN6_HORZSTRIDE_1);
-
-   if (ilo_dev_gen(cg->dev) >= ILO_GEN(8)) {
-      dw1 = dst->origin << 19 |
-            dst->writemask << 17 |
-            cg->src[2].negate << 10 |
-            cg->src[2].negate << 10 |
-            cg->src[2].absolute << 9 |
-            cg->src[1].negate << 8 |
-            cg->src[1].absolute << 7 |
-            cg->src[0].negate << 6 |
-            cg->src[0].absolute << 5 |
-            cg->inst->mask_ctrl << 2 |
-            cg->flag_reg_num << 1 |
-            cg->flag_sub_reg_num;
-   } else {
-      dw1 = dst->origin << 19 |
-            dst->writemask << 17 |
-            cg->src[2].negate << 9 |
-            cg->src[2].absolute << 8 |
-            cg->src[1].negate << 7 |
-            cg->src[1].absolute << 6 |
-            cg->src[0].negate << 5 |
-            cg->src[0].absolute << 4 |
-            cg->flag_sub_reg_num << 1 |
-            (dst->file == GEN6_FILE_MRF);
-   }
-
-   for (i = 0; i < 3; i++) {
-      const struct codegen_src *src = &cg->src[i];
-
-      assert(!src->indirect);
-      assert(src->file == GEN6_FILE_GRF && CG_REG_NUM(src->origin) < 128);
-      assert(!(src->origin & 0x3));
-
-      assert((src->vert_stride == GEN6_VERTSTRIDE_4 &&
-              src->horz_stride == GEN6_HORZSTRIDE_1) ||
-             (src->vert_stride == GEN6_VERTSTRIDE_0 &&
-              src->horz_stride == GEN6_HORZSTRIDE_0));
-      assert(src->width == GEN6_WIDTH_4);
-
-      dw_src[i] = src->origin << 7 |
-                  src->swizzle[3] << 7 |
-                  src->swizzle[2] << 5 |
-                  src->swizzle[1] << 3 |
-                  src->swizzle[0] << 1 |
-                  (src->vert_stride == GEN6_VERTSTRIDE_0 &&
-                   src->horz_stride == GEN6_HORZSTRIDE_0);
-
-      /* only the lower 20 bits are used */
-      assert((dw_src[i] & 0xfffff) == dw_src[i]);
-   }
-
-   code[0] = dw0;
-   code[1] = dw1;
-   /* concatenate the bits of dw_src */
-   code[2] = (dw_src[1] & 0x7ff ) << 21 | dw_src[0];
-   code[3] = dw_src[2] << 10 | (dw_src[1] >> 11);
-}
-
-/**
- * Sanity check the region parameters of the operands.
- */
-static void
-codegen_validate_region_restrictions(const struct codegen *cg)
-{
-   const int exec_size_map[] = {
-      [GEN6_EXECSIZE_1] = 1,
-      [GEN6_EXECSIZE_2] = 2,
-      [GEN6_EXECSIZE_4] = 4,
-      [GEN6_EXECSIZE_8] = 8,
-      [GEN6_EXECSIZE_16] = 16,
-      [GEN6_EXECSIZE_32] = 32,
-   };
-   const int width_map[] = {
-      [GEN6_WIDTH_1] = 1,
-      [GEN6_WIDTH_2] = 2,
-      [GEN6_WIDTH_4] = 4,
-      [GEN6_WIDTH_8] = 8,
-      [GEN6_WIDTH_16] = 16,
-   };
-   const int horz_stride_map[] = {
-      [GEN6_HORZSTRIDE_0] = 0,
-      [GEN6_HORZSTRIDE_1] = 1,
-      [GEN6_HORZSTRIDE_2] = 2,
-      [GEN6_HORZSTRIDE_4] = 4,
-   };
-   const int vert_stride_map[] = {
-      [GEN6_VERTSTRIDE_0] = 0,
-      [GEN6_VERTSTRIDE_1] = 1,
-      [GEN6_VERTSTRIDE_2] = 2,
-      [GEN6_VERTSTRIDE_4] = 4,
-      [GEN6_VERTSTRIDE_8] = 8,
-      [GEN6_VERTSTRIDE_16] = 16,
-      [GEN6_VERTSTRIDE_32] = 32,
-      [7] = 64,
-      [8] = 128,
-      [9] = 256,
-      [GEN6_VERTSTRIDE_VXH] = 0,
-   };
-   const int exec_size = exec_size_map[cg->inst->exec_size];
-   int i;
-
-   /* Sandy Bridge PRM, volume 4 part 2, page 94 */
-
-   /* 1. (we don't do 32 anyway) */
-   assert(exec_size <= 16);
-
-   for (i = 0; i < ARRAY_SIZE(cg->src); i++) {
-      const int width = width_map[cg->src[i].width];
-      const int horz_stride = horz_stride_map[cg->src[i].horz_stride];
-      const int vert_stride = vert_stride_map[cg->src[i].vert_stride];
-
-      if (src_is_null(cg, i))
-         break;
-
-      /* 3. */
-      assert(exec_size >= width);
-
-      if (exec_size == width) {
-         /* 4. & 5. */
-         if (horz_stride)
-            assert(vert_stride == width * horz_stride);
-      }
-
-      if (width == 1) {
-         /* 6. */
-         assert(horz_stride == 0);
-
-         /* 7. */
-         if (exec_size == 1)
-            assert(vert_stride == 0);
-      }
-
-      /* 8. */
-      if (!vert_stride && !horz_stride)
-         assert(width == 1);
-   }
-
-   /* derived from 10.1.2. & 10.2. */
-   assert(cg->dst.horz_stride != GEN6_HORZSTRIDE_0);
-}
-
-static unsigned
-translate_vfile(enum toy_file file)
-{
-   switch (file) {
-   case TOY_FILE_ARF:   return GEN6_FILE_ARF;
-   case TOY_FILE_GRF:   return GEN6_FILE_GRF;
-   case TOY_FILE_MRF:   return GEN6_FILE_MRF;
-   case TOY_FILE_IMM:   return GEN6_FILE_IMM;
-   default:
-      assert(!"unhandled toy file");
-      return GEN6_FILE_GRF;
-   }
-}
-
-static unsigned
-translate_vtype(enum toy_type type)
-{
-   switch (type) {
-   case TOY_TYPE_F:     return GEN6_TYPE_F;
-   case TOY_TYPE_D:     return GEN6_TYPE_D;
-   case TOY_TYPE_UD:    return GEN6_TYPE_UD;
-   case TOY_TYPE_W:     return GEN6_TYPE_W;
-   case TOY_TYPE_UW:    return GEN6_TYPE_UW;
-   case TOY_TYPE_V:     return GEN6_TYPE_V_IMM;
-   default:
-      assert(!"unhandled toy type");
-      return GEN6_TYPE_F;
-   }
-}
-
-static unsigned
-translate_writemask(enum toy_writemask writemask)
-{
-   /* TOY_WRITEMASK_* are compatible with the hardware definitions */
-   assert(writemask <= 0xf);
-   return writemask;
-}
-
-static unsigned
-translate_swizzle(enum toy_swizzle swizzle)
-{
-   /* TOY_SWIZZLE_* are compatible with the hardware definitions */
-   assert(swizzle <= 3);
-   return swizzle;
-}
-
-/**
- * Prepare for generating an instruction.
- */
-static void
-codegen_prepare(struct codegen *cg, const struct ilo_dev *dev,
-                const struct toy_inst *inst, int pc, int rect_linear_width)
-{
-   int i;
-
-   cg->dev = dev;
-   cg->inst = inst;
-   cg->pc = pc;
-
-   cg->flag_reg_num = 0;
-   cg->flag_sub_reg_num = 0;
-
-   cg->dst.file = translate_vfile(inst->dst.file);
-   cg->dst.type = translate_vtype(inst->dst.type);
-   cg->dst.indirect = inst->dst.indirect;
-   cg->dst.indirect_subreg = inst->dst.indirect_subreg;
-   cg->dst.origin = inst->dst.val32;
-
-   /*
-    * From the Sandy Bridge PRM, volume 4 part 2, page 81:
-    *
-    *     "For a word or an unsigned word immediate data, software must
-    *      replicate the same 16-bit immediate value to both the lower word
-    *      and the high word of the 32-bit immediate field in an instruction."
-    */
-   if (inst->dst.file == TOY_FILE_IMM) {
-      switch (inst->dst.type) {
-      case TOY_TYPE_W:
-      case TOY_TYPE_UW:
-         cg->dst.origin &= 0xffff;
-         cg->dst.origin |= cg->dst.origin << 16;
-         break;
-      default:
-         break;
-      }
-   }
-
-   cg->dst.writemask = translate_writemask(inst->dst.writemask);
-
-   switch (inst->dst.rect) {
-   case TOY_RECT_LINEAR:
-      cg->dst.horz_stride = GEN6_HORZSTRIDE_1;
-      break;
-   default:
-      assert(!"unsupported dst region");
-      cg->dst.horz_stride = GEN6_HORZSTRIDE_1;
-      break;
-   }
-
-   for (i = 0; i < ARRAY_SIZE(cg->src); i++) {
-      struct codegen_src *src = &cg->src[i];
-
-      src->file = translate_vfile(inst->src[i].file);
-      src->type = translate_vtype(inst->src[i].type);
-      src->indirect = inst->src[i].indirect;
-      src->indirect_subreg = inst->src[i].indirect_subreg;
-      src->origin = inst->src[i].val32;
-
-      /* do the same for src */
-      if (inst->dst.file == TOY_FILE_IMM) {
-         switch (inst->src[i].type) {
-         case TOY_TYPE_W:
-         case TOY_TYPE_UW:
-            src->origin &= 0xffff;
-            src->origin |= src->origin << 16;
-            break;
-         default:
-            break;
-         }
-      }
-
-      src->swizzle[0] = translate_swizzle(inst->src[i].swizzle_x);
-      src->swizzle[1] = translate_swizzle(inst->src[i].swizzle_y);
-      src->swizzle[2] = translate_swizzle(inst->src[i].swizzle_z);
-      src->swizzle[3] = translate_swizzle(inst->src[i].swizzle_w);
-      src->absolute = inst->src[i].absolute;
-      src->negate = inst->src[i].negate;
-
-      switch (inst->src[i].rect) {
-      case TOY_RECT_LINEAR:
-         switch (rect_linear_width) {
-         case 1:
-            src->vert_stride = GEN6_VERTSTRIDE_1;
-            src->width = GEN6_WIDTH_1;
-            break;
-         case 2:
-            src->vert_stride = GEN6_VERTSTRIDE_2;
-            src->width = GEN6_WIDTH_2;
-            break;
-         case 4:
-            src->vert_stride = GEN6_VERTSTRIDE_4;
-            src->width = GEN6_WIDTH_4;
-            break;
-         case 8:
-            src->vert_stride = GEN6_VERTSTRIDE_8;
-            src->width = GEN6_WIDTH_8;
-            break;
-         case 16:
-            src->vert_stride = GEN6_VERTSTRIDE_16;
-            src->width = GEN6_WIDTH_16;
-            break;
-         default:
-            assert(!"unsupported TOY_RECT_LINEAR width");
-            src->vert_stride = GEN6_VERTSTRIDE_1;
-            src->width = GEN6_WIDTH_1;
-            break;
-         }
-         src->horz_stride = GEN6_HORZSTRIDE_1;
-         break;
-      case TOY_RECT_041:
-         src->vert_stride = GEN6_VERTSTRIDE_0;
-         src->width = GEN6_WIDTH_4;
-         src->horz_stride = GEN6_HORZSTRIDE_1;
-         break;
-      case TOY_RECT_010:
-         src->vert_stride = GEN6_VERTSTRIDE_0;
-         src->width = GEN6_WIDTH_1;
-         src->horz_stride = GEN6_HORZSTRIDE_0;
-         break;
-      case TOY_RECT_220:
-         src->vert_stride = GEN6_VERTSTRIDE_2;
-         src->width = GEN6_WIDTH_2;
-         src->horz_stride = GEN6_HORZSTRIDE_0;
-         break;
-      case TOY_RECT_440:
-         src->vert_stride = GEN6_VERTSTRIDE_4;
-         src->width = GEN6_WIDTH_4;
-         src->horz_stride = GEN6_HORZSTRIDE_0;
-         break;
-      case TOY_RECT_240:
-         src->vert_stride = GEN6_VERTSTRIDE_2;
-         src->width = GEN6_WIDTH_4;
-         src->horz_stride = GEN6_HORZSTRIDE_0;
-         break;
-      default:
-         assert(!"unsupported src region");
-         src->vert_stride = GEN6_VERTSTRIDE_1;
-         src->width = GEN6_WIDTH_1;
-         src->horz_stride = GEN6_HORZSTRIDE_1;
-         break;
-      }
-   }
-}
-
-/**
- * Generate HW shader code.  The instructions should have been legalized.
- */
-void *
-toy_compiler_assemble(struct toy_compiler *tc, int *size)
-{
-   const struct toy_inst *inst;
-   uint32_t *code;
-   int pc;
-
-   code = MALLOC(tc->num_instructions * 4 * sizeof(uint32_t));
-   if (!code)
-      return NULL;
-
-   pc = 0;
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      uint32_t *dw = &code[pc * 4];
-      struct codegen cg;
-
-      if (pc >= tc->num_instructions) {
-         tc_fail(tc, "wrong instructoun count");
-         break;
-      }
-
-      codegen_prepare(&cg, tc->dev, inst, pc, tc->rect_linear_width);
-      codegen_validate_region_restrictions(&cg);
-
-      switch (inst->opcode) {
-      case GEN6_OPCODE_MAD:
-         codegen_inst_3src_gen6(&cg, dw);
-         break;
-      default:
-         codegen_inst_gen6(&cg, dw);
-         break;
-      }
-
-      pc++;
-   }
-
-   /* never return an invalid kernel */
-   if (tc->fail) {
-      FREE(code);
-      return NULL;
-   }
-
-   if (size)
-      *size = pc * 4 * sizeof(uint32_t);
-
-   return code;
-}
diff --git a/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c b/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c
deleted file mode 100644 (file)
index 576cd2b..0000000
+++ /dev/null
@@ -1,2151 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2014 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include <stdio.h>
-#include "genhw/genhw.h"
-#include "toy_compiler.h"
-
-#define DISASM_PRINTER_BUFFER_SIZE 256
-#define DISASM_PRINTER_COLUMN_WIDTH 16
-
-struct disasm_printer {
-   char buf[DISASM_PRINTER_BUFFER_SIZE];
-   int len;
-};
-
-struct disasm_operand {
-   unsigned file:2;
-   unsigned type:4;
-
-   unsigned addr_mode:1;
-   unsigned reg:8;
-   unsigned subreg:5;
-   unsigned addr_subreg:3;
-   unsigned addr_imm:10;
-};
-
-struct disasm_dst_operand {
-   struct disasm_operand base;
-
-   unsigned horz_stride:2;
-   unsigned writemask:4;
-};
-
-struct disasm_src_operand {
-   struct disasm_operand base;
-
-   unsigned vert_stride:4;
-   unsigned width:3;
-   unsigned horz_stride:2;
-   unsigned swizzle_x:2;
-   unsigned swizzle_y:2;
-   unsigned swizzle_z:2;
-   unsigned swizzle_w:2;
-   unsigned negate:1;
-   unsigned absolute:1;
-};
-
-struct disasm_inst {
-   const struct ilo_dev *dev;
-
-   unsigned has_jip:1;
-   unsigned has_uip:1;
-
-   unsigned opcode:7;
-   unsigned access_mode:1;
-   unsigned mask_ctrl:1;
-   unsigned dep_ctrl:2;
-   unsigned qtr_ctrl:2;
-   unsigned thread_ctrl:2;
-   unsigned pred_ctrl:4;
-   unsigned pred_inv:1;
-   unsigned exec_size:3;
-
-   unsigned cond_modifier:4;
-   unsigned sfid:4;
-   unsigned fc:4;
-
-   unsigned acc_wr_ctrl:1;
-   unsigned branch_ctrl:1;
-
-   unsigned cmpt_ctrl:1;
-   unsigned debug_ctrl:1;
-   unsigned saturate:1;
-
-   unsigned nib_ctrl:1;
-
-   unsigned flag_reg:1;
-   unsigned flag_subreg:1;
-
-   struct disasm_dst_operand dst;
-   struct disasm_src_operand src0;
-   struct disasm_src_operand src1;
-   union {
-      struct disasm_src_operand src2;
-      uint64_t imm64;
-
-      uint32_t ud;
-      int32_t d;
-      uint16_t uw;
-      int16_t w;
-      float f;
-
-      struct {
-         int16_t jip;
-         int16_t uip;
-      } ip16;
-
-      struct {
-         int32_t jip;
-         int32_t uip;
-      } ip32;
-   } u;
-};
-
-static const struct {
-   const char *name;
-   int src_count;
-} disasm_opcode_table[128] = {
-   [GEN6_OPCODE_ILLEGAL]     = { "illegal",  0 },
-   [GEN6_OPCODE_MOV]         = { "mov",      1 },
-   [GEN6_OPCODE_SEL]         = { "sel",      2 },
-   [GEN6_OPCODE_MOVI]        = { "movi",     1 },
-   [GEN6_OPCODE_NOT]         = { "not",      1 },
-   [GEN6_OPCODE_AND]         = { "and",      2 },
-   [GEN6_OPCODE_OR]          = { "or",       2 },
-   [GEN6_OPCODE_XOR]         = { "xor",      2 },
-   [GEN6_OPCODE_SHR]         = { "shr",      2 },
-   [GEN6_OPCODE_SHL]         = { "shl",      2 },
-   [GEN6_OPCODE_DIM]         = { "dim",      1 },
-   [GEN6_OPCODE_ASR]         = { "asr",      2 },
-   [GEN6_OPCODE_CMP]         = { "cmp",      2 },
-   [GEN6_OPCODE_CMPN]        = { "cmpn",     2 },
-   [GEN7_OPCODE_CSEL]        = { "csel",     3 },
-   [GEN7_OPCODE_F32TO16]     = { "f32to16",  1 },
-   [GEN7_OPCODE_F16TO32]     = { "f16to32",  1 },
-   [GEN7_OPCODE_BFREV]       = { "bfrev",    1 },
-   [GEN7_OPCODE_BFE]         = { "bfe",      3 },
-   [GEN7_OPCODE_BFI1]        = { "bfi1",     2 },
-   [GEN7_OPCODE_BFI2]        = { "bfi2",     3 },
-   [GEN6_OPCODE_JMPI]        = { "jmpi",     1 },
-   [GEN7_OPCODE_BRD]         = { "brd",      1 },
-   [GEN6_OPCODE_IF]          = { "if",       2 },
-   [GEN7_OPCODE_BRC]         = { "brc",      1 },
-   [GEN6_OPCODE_ELSE]        = { "else",     1 },
-   [GEN6_OPCODE_ENDIF]       = { "endif",    0 },
-   [GEN6_OPCODE_CASE]        = { "case",     2 },
-   [GEN6_OPCODE_WHILE]       = { "while",    1 },
-   [GEN6_OPCODE_BREAK]       = { "break",    1 },
-   [GEN6_OPCODE_CONT]        = { "cont",     1 },
-   [GEN6_OPCODE_HALT]        = { "halt",     1 },
-   [GEN75_OPCODE_CALLA]      = { "calla",    1 },
-   [GEN6_OPCODE_CALL]        = { "call",     1 },
-   [GEN6_OPCODE_RETURN]      = { "return",   1 },
-   [GEN8_OPCODE_GOTO]        = { "goto",     1 },
-   [GEN6_OPCODE_WAIT]        = { "wait",     1 },
-   [GEN6_OPCODE_SEND]        = { "send",     1 },
-   [GEN6_OPCODE_SENDC]       = { "sendc",    1 },
-   [GEN6_OPCODE_MATH]        = { "math",     2 },
-   [GEN6_OPCODE_ADD]         = { "add",      2 },
-   [GEN6_OPCODE_MUL]         = { "mul",      2 },
-   [GEN6_OPCODE_AVG]         = { "avg",      2 },
-   [GEN6_OPCODE_FRC]         = { "frc",      1 },
-   [GEN6_OPCODE_RNDU]        = { "rndu",     1 },
-   [GEN6_OPCODE_RNDD]        = { "rndd",     1 },
-   [GEN6_OPCODE_RNDE]        = { "rnde",     1 },
-   [GEN6_OPCODE_RNDZ]        = { "rndz",     1 },
-   [GEN6_OPCODE_MAC]         = { "mac",      2 },
-   [GEN6_OPCODE_MACH]        = { "mach",     2 },
-   [GEN6_OPCODE_LZD]         = { "lzd",      1 },
-   [GEN7_OPCODE_FBH]         = { "fbh",      1 },
-   [GEN7_OPCODE_FBL]         = { "fbl",      1 },
-   [GEN7_OPCODE_CBIT]        = { "cbit",     1 },
-   [GEN7_OPCODE_ADDC]        = { "addc",     2 },
-   [GEN7_OPCODE_SUBB]        = { "subb",     2 },
-   [GEN6_OPCODE_SAD2]        = { "sad2",     2 },
-   [GEN6_OPCODE_SADA2]       = { "sada2",    2 },
-   [GEN6_OPCODE_DP4]         = { "dp4",      2 },
-   [GEN6_OPCODE_DPH]         = { "dph",      2 },
-   [GEN6_OPCODE_DP3]         = { "dp3",      2 },
-   [GEN6_OPCODE_DP2]         = { "dp2",      2 },
-   [GEN6_OPCODE_LINE]        = { "line",     2 },
-   [GEN6_OPCODE_PLN]         = { "pln",      2 },
-   [GEN6_OPCODE_MAD]         = { "mad",      3 },
-   [GEN6_OPCODE_LRP]         = { "lrp",      3 },
-   [GEN6_OPCODE_NOP]         = { "nop",      0 },
-};
-
-static void
-disasm_inst_decode_dw0_opcode_gen6(struct disasm_inst *inst, uint32_t dw0)
-{
-   ILO_DEV_ASSERT(inst->dev, 6, 8);
-
-   inst->opcode = GEN_EXTRACT(dw0, GEN6_INST_OPCODE);
-
-   switch (inst->opcode) {
-   case GEN6_OPCODE_IF:
-      inst->has_jip = true;
-      inst->has_uip = (ilo_dev_gen(inst->dev) >= ILO_GEN(7));
-      break;
-   case GEN6_OPCODE_ELSE:
-      inst->has_jip = true;
-      inst->has_uip = (ilo_dev_gen(inst->dev) >= ILO_GEN(8));
-      break;
-   case GEN6_OPCODE_BREAK:
-   case GEN6_OPCODE_CONT:
-   case GEN6_OPCODE_HALT:
-      inst->has_uip = true;
-      /* fall through */
-   case GEN6_OPCODE_JMPI:
-   case GEN7_OPCODE_BRD:
-   case GEN7_OPCODE_BRC:
-   case GEN6_OPCODE_ENDIF:
-   case GEN6_OPCODE_CASE:
-   case GEN6_OPCODE_WHILE:
-   case GEN75_OPCODE_CALLA:
-   case GEN6_OPCODE_CALL:
-   case GEN6_OPCODE_RETURN:
-      inst->has_jip = true;
-      break;
-   default:
-      break;
-   }
-}
-
-static void
-disasm_inst_decode_dw0_gen6(struct disasm_inst *inst, uint32_t dw0)
-{
-   ILO_DEV_ASSERT(inst->dev, 6, 8);
-
-   disasm_inst_decode_dw0_opcode_gen6(inst, dw0);
-
-   inst->access_mode = GEN_EXTRACT(dw0, GEN6_INST_ACCESSMODE);
-
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(8)) {
-      inst->dep_ctrl = GEN_EXTRACT(dw0, GEN8_INST_DEPCTRL);
-      inst->nib_ctrl = (bool) (dw0 & GEN8_INST_NIBCTRL);
-   } else {
-      inst->mask_ctrl = GEN_EXTRACT(dw0, GEN6_INST_MASKCTRL);
-      inst->dep_ctrl = GEN_EXTRACT(dw0, GEN6_INST_DEPCTRL);
-   }
-
-   inst->qtr_ctrl = GEN_EXTRACT(dw0, GEN6_INST_QTRCTRL);
-   inst->thread_ctrl = GEN_EXTRACT(dw0, GEN6_INST_THREADCTRL);
-   inst->pred_ctrl = GEN_EXTRACT(dw0, GEN6_INST_PREDCTRL);
-
-   inst->pred_inv = (bool) (dw0 & GEN6_INST_PREDINV);
-
-   inst->exec_size = GEN_EXTRACT(dw0, GEN6_INST_EXECSIZE);
-
-   switch (inst->opcode) {
-   case GEN6_OPCODE_SEND:
-   case GEN6_OPCODE_SENDC:
-      inst->sfid = GEN_EXTRACT(dw0, GEN6_INST_SFID);
-      break;
-   case GEN6_OPCODE_MATH:
-      inst->fc = GEN_EXTRACT(dw0, GEN6_INST_FC);
-      break;
-   default:
-      inst->cond_modifier = GEN_EXTRACT(dw0, GEN6_INST_CONDMODIFIER);
-      break;
-   }
-
-   switch (inst->opcode) {
-   case GEN6_OPCODE_IF:
-   case GEN6_OPCODE_ELSE:
-   case GEN8_OPCODE_GOTO:
-      if (ilo_dev_gen(inst->dev) >= ILO_GEN(8)) {
-         inst->branch_ctrl = (bool) (dw0 & GEN8_INST_BRANCHCTRL);
-         break;
-      }
-   default:
-      inst->acc_wr_ctrl = (bool) (dw0 & GEN6_INST_ACCWRCTRL);
-      break;
-   }
-
-   inst->cmpt_ctrl = (bool) (dw0 & GEN6_INST_CMPTCTRL);
-   inst->debug_ctrl = (bool) (dw0 & GEN6_INST_DEBUGCTRL);
-   inst->saturate = (bool) (dw0 & GEN6_INST_SATURATE);
-}
-
-static void
-disasm_inst_decode_dw1_low_gen6(struct disasm_inst *inst, uint32_t dw1)
-{
-   ILO_DEV_ASSERT(inst->dev, 6, 7.5);
-
-   inst->dst.base.file = GEN_EXTRACT(dw1, GEN6_INST_DST_FILE);
-   inst->dst.base.type = GEN_EXTRACT(dw1, GEN6_INST_DST_TYPE);
-   inst->src0.base.file = GEN_EXTRACT(dw1, GEN6_INST_SRC0_FILE);
-   inst->src0.base.type = GEN_EXTRACT(dw1, GEN6_INST_SRC0_TYPE);
-   inst->src1.base.file = GEN_EXTRACT(dw1, GEN6_INST_SRC1_FILE);
-   inst->src1.base.type = GEN_EXTRACT(dw1, GEN6_INST_SRC1_TYPE);
-
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(7))
-      inst->nib_ctrl = (bool) (dw1 & GEN7_INST_NIBCTRL);
-}
-
-static void
-disasm_inst_decode_dw1_low_gen8(struct disasm_inst *inst, uint32_t dw1)
-{
-   ILO_DEV_ASSERT(inst->dev, 8, 8);
-
-   inst->flag_subreg = GEN_EXTRACT(dw1, GEN8_INST_FLAG_SUBREG);
-   inst->flag_reg = GEN_EXTRACT(dw1, GEN8_INST_FLAG_REG);
-   inst->mask_ctrl = GEN_EXTRACT(dw1, GEN8_INST_MASKCTRL);
-
-   inst->dst.base.file = GEN_EXTRACT(dw1, GEN8_INST_DST_FILE);
-   inst->dst.base.type = GEN_EXTRACT(dw1, GEN8_INST_DST_TYPE);
-   inst->src0.base.file = GEN_EXTRACT(dw1, GEN8_INST_SRC0_FILE);
-   inst->src0.base.type = GEN_EXTRACT(dw1, GEN8_INST_SRC0_TYPE);
-
-   inst->dst.base.addr_imm = GEN_EXTRACT(dw1, GEN8_INST_DST_ADDR_IMM_BIT9) <<
-      GEN8_INST_DST_ADDR_IMM_BIT9__SHR;
-}
-
-static void
-disasm_inst_decode_dw1_high_gen6(struct disasm_inst *inst, uint32_t dw1)
-{
-   ILO_DEV_ASSERT(inst->dev, 6, 8);
-
-   inst->dst.base.addr_mode = GEN_EXTRACT(dw1, GEN6_INST_DST_ADDRMODE);
-
-   if (inst->dst.base.addr_mode == GEN6_ADDRMODE_DIRECT) {
-      inst->dst.base.reg = GEN_EXTRACT(dw1, GEN6_INST_DST_REG);
-
-      if (inst->access_mode == GEN6_ALIGN_1) {
-         inst->dst.base.subreg = GEN_EXTRACT(dw1, GEN6_INST_DST_SUBREG);
-      } else {
-         inst->dst.base.subreg =
-            GEN_EXTRACT(dw1, GEN6_INST_DST_SUBREG_ALIGN16) <<
-            GEN6_INST_DST_SUBREG_ALIGN16__SHR;
-      }
-   } else {
-      if (ilo_dev_gen(inst->dev) >= ILO_GEN(8)) {
-         inst->dst.base.addr_subreg =
-            GEN_EXTRACT(dw1, GEN8_INST_DST_ADDR_SUBREG);
-
-         /* bit 9 is already set in disasm_inst_decode_dw1_low_gen8() */
-         if (inst->access_mode == GEN6_ALIGN_1) {
-            inst->dst.base.addr_imm |=
-               GEN_EXTRACT(dw1, GEN8_INST_DST_ADDR_IMM);
-         } else {
-            inst->dst.base.addr_imm |=
-               GEN_EXTRACT(dw1, GEN8_INST_DST_ADDR_IMM_ALIGN16) <<
-               GEN8_INST_DST_ADDR_IMM_ALIGN16__SHR;
-         }
-      } else {
-         inst->dst.base.addr_subreg =
-            GEN_EXTRACT(dw1, GEN6_INST_DST_ADDR_SUBREG);
-
-         if (inst->access_mode == GEN6_ALIGN_1) {
-            inst->dst.base.addr_imm =
-               GEN_EXTRACT(dw1, GEN6_INST_DST_ADDR_IMM);
-         } else {
-            inst->dst.base.addr_imm =
-               GEN_EXTRACT(dw1, GEN6_INST_DST_ADDR_IMM_ALIGN16) <<
-               GEN6_INST_DST_ADDR_IMM_ALIGN16__SHR;
-         }
-      }
-   }
-
-   inst->dst.horz_stride = GEN_EXTRACT(dw1, GEN6_INST_DST_HORZSTRIDE);
-
-   if (inst->access_mode == GEN6_ALIGN_1)
-      inst->dst.writemask = 0xf;
-   else
-      inst->dst.writemask = GEN_EXTRACT(dw1, GEN6_INST_DST_WRITEMASK);
-}
-
-static void
-disasm_inst_decode_dw1_gen6(struct disasm_inst *inst, uint32_t dw1)
-{
-   ILO_DEV_ASSERT(inst->dev, 6, 8);
-
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(8))
-      disasm_inst_decode_dw1_low_gen8(inst, dw1);
-   else
-      disasm_inst_decode_dw1_low_gen6(inst, dw1);
-
-   if (ilo_dev_gen(inst->dev) == ILO_GEN(6) &&
-       inst->has_jip && !inst->has_uip)
-      inst->u.imm64 = dw1 >> 16;
-   else
-      disasm_inst_decode_dw1_high_gen6(inst, dw1);
-}
-
-static void
-disasm_inst_decode_dw2_dw3_gen6(struct disasm_inst *inst,
-                                uint32_t dw2, uint32_t dw3)
-{
-   int imm_bits = 0, count, i;
-
-   ILO_DEV_ASSERT(inst->dev, 6, 8);
-
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(8)) {
-      /* how about real 64-bit immediates? */
-      if (inst->has_uip) {
-         imm_bits = 64;
-         inst->src1.base.file = GEN6_FILE_IMM;
-         inst->src1.base.type = GEN6_TYPE_D;
-      } else {
-         inst->src1.base.file = GEN_EXTRACT(dw2, GEN8_INST_SRC1_FILE);
-         inst->src1.base.type = GEN_EXTRACT(dw2, GEN8_INST_SRC1_TYPE);
-
-         if (inst->src0.base.file == GEN6_FILE_IMM ||
-             inst->src1.base.file == GEN6_FILE_IMM)
-            imm_bits = 32;
-      }
-   } else {
-      if (ilo_dev_gen(inst->dev) >= ILO_GEN(7))
-         inst->flag_reg = GEN_EXTRACT(dw2, GEN7_INST_FLAG_REG);
-      inst->flag_subreg = GEN_EXTRACT(dw2, GEN6_INST_FLAG_SUBREG);
-
-      if (inst->src0.base.file == GEN6_FILE_IMM ||
-          inst->src1.base.file == GEN6_FILE_IMM)
-         imm_bits = 32;
-   }
-
-   switch (imm_bits) {
-   case 32:
-      inst->u.imm64 = dw3;
-      count = 1;
-      break;
-   case 64:
-      inst->u.imm64 = (uint64_t) dw2 << 32 | dw3;
-      count = 0;
-      break;
-   default:
-      count = 2;
-      break;
-   }
-
-   for (i = 0; i < count; i++) {
-      struct disasm_src_operand *src = (i == 0) ? &inst->src0 : &inst->src1;
-      const uint32_t dw = (i == 0) ? dw2 : dw3;
-
-      src->base.addr_mode = GEN_EXTRACT(dw, GEN6_INST_SRC_ADDRMODE);
-
-      if (src->base.addr_mode == GEN6_ADDRMODE_DIRECT) {
-         src->base.reg = GEN_EXTRACT(dw, GEN6_INST_SRC_REG);
-
-         if (inst->access_mode == GEN6_ALIGN_1) {
-            src->base.subreg = GEN_EXTRACT(dw, GEN6_INST_SRC_SUBREG);
-         } else {
-            src->base.subreg = GEN_EXTRACT(dw, GEN6_INST_SRC_SUBREG_ALIGN16) <<
-               GEN6_INST_SRC_SUBREG_ALIGN16__SHR;
-         }
-      } else {
-         if (ilo_dev_gen(inst->dev) >= ILO_GEN(8)) {
-            src->base.addr_subreg =
-               GEN_EXTRACT(dw, GEN8_INST_SRC_ADDR_SUBREG);
-
-            if (inst->access_mode == GEN6_ALIGN_1) {
-               src->base.addr_imm = GEN_EXTRACT(dw, GEN8_INST_SRC_ADDR_IMM);
-            } else {
-               src->base.addr_imm =
-                  GEN_EXTRACT(dw, GEN8_INST_SRC_ADDR_IMM_ALIGN16) <<
-                  GEN8_INST_SRC_ADDR_IMM_ALIGN16__SHR;
-            }
-
-            if (i == 0) {
-               inst->dst.base.addr_imm |= GEN_EXTRACT(dw,
-                     GEN8_INST_SRC0_ADDR_IMM_BIT9) <<
-                  GEN8_INST_SRC0_ADDR_IMM_BIT9__SHR;
-            } else {
-               inst->dst.base.addr_imm |= GEN_EXTRACT(dw,
-                     GEN8_INST_SRC1_ADDR_IMM_BIT9) <<
-                  GEN8_INST_SRC1_ADDR_IMM_BIT9__SHR;
-            }
-         } else {
-            src->base.addr_subreg =
-               GEN_EXTRACT(dw, GEN6_INST_SRC_ADDR_SUBREG);
-
-            if (inst->access_mode == GEN6_ALIGN_1) {
-               src->base.addr_imm = GEN_EXTRACT(dw, GEN6_INST_SRC_ADDR_IMM);
-            } else {
-               src->base.addr_imm =
-                  GEN_EXTRACT(dw, GEN6_INST_SRC_ADDR_IMM_ALIGN16) <<
-                  GEN6_INST_SRC_ADDR_IMM_ALIGN16__SHR;
-            }
-         }
-      }
-
-      src->vert_stride = GEN_EXTRACT(dw, GEN6_INST_SRC_VERTSTRIDE);
-
-      if (inst->access_mode == GEN6_ALIGN_1) {
-         src->width = GEN_EXTRACT(dw, GEN6_INST_SRC_WIDTH);
-         src->horz_stride = GEN_EXTRACT(dw, GEN6_INST_SRC_HORZSTRIDE);
-
-         src->swizzle_x = GEN6_SWIZZLE_X;
-         src->swizzle_y = GEN6_SWIZZLE_Y;
-         src->swizzle_z = GEN6_SWIZZLE_Z;
-         src->swizzle_w = GEN6_SWIZZLE_W;
-      } else {
-         src->width = GEN6_WIDTH_4;
-         src->horz_stride = GEN6_HORZSTRIDE_1;
-
-         src->swizzle_x = GEN_EXTRACT(dw, GEN6_INST_SRC_SWIZZLE_X);
-         src->swizzle_y = GEN_EXTRACT(dw, GEN6_INST_SRC_SWIZZLE_Y);
-         src->swizzle_z = GEN_EXTRACT(dw, GEN6_INST_SRC_SWIZZLE_Z);
-         src->swizzle_w = GEN_EXTRACT(dw, GEN6_INST_SRC_SWIZZLE_W);
-      }
-
-      src->negate = (bool) (dw & GEN6_INST_SRC_NEGATE);
-      src->absolute = (bool) (dw & GEN6_INST_SRC_ABSOLUTE);
-   }
-}
-
-static void
-disasm_inst_decode_3src_dw1_gen6(struct disasm_inst *inst, uint32_t dw1)
-{
-   static const unsigned type_mapping[4] = {
-      [GEN7_TYPE_F_3SRC]   = GEN6_TYPE_F,
-      [GEN7_TYPE_D_3SRC]   = GEN6_TYPE_D,
-      [GEN7_TYPE_UD_3SRC]  = GEN6_TYPE_UD,
-      [GEN7_TYPE_DF_3SRC]  = GEN7_TYPE_DF,
-   };
-
-   ILO_DEV_ASSERT(inst->dev, 6, 7.5);
-
-   inst->flag_subreg = GEN_EXTRACT(dw1, GEN6_3SRC_FLAG_SUBREG);
-
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(7)) {
-      inst->nib_ctrl = (bool) (dw1 & GEN7_3SRC_NIBCTRL);
-      inst->flag_reg = GEN_EXTRACT(dw1, GEN7_3SRC_FLAG_REG);
-
-      inst->dst.base.file = GEN6_FILE_GRF;
-      inst->dst.base.type = GEN_EXTRACT(dw1, GEN7_3SRC_DST_TYPE);
-      inst->dst.base.type = type_mapping[inst->dst.base.type];
-
-      inst->src0.base.type = GEN_EXTRACT(dw1, GEN7_3SRC_SRC_TYPE);
-      inst->src0.base.type = type_mapping[inst->src0.base.type];
-
-      inst->src1.base.type = inst->src0.base.type;
-      inst->u.src2.base.type = inst->src0.base.type;
-   } else {
-      inst->dst.base.file = (dw1 & GEN6_3SRC_DST_FILE_MRF) ?
-         GEN6_FILE_MRF: GEN6_FILE_GRF;
-      inst->dst.base.type = GEN6_TYPE_F;
-
-      inst->src0.base.type = GEN6_TYPE_F;
-      inst->src1.base.type = GEN6_TYPE_F;
-      inst->u.src2.base.type = GEN6_TYPE_F;
-   }
-
-   inst->dst.base.addr_mode = GEN6_ADDRMODE_DIRECT;
-   inst->dst.base.reg = GEN_EXTRACT(dw1, GEN6_3SRC_DST_REG);
-   inst->dst.base.subreg = GEN_EXTRACT(dw1, GEN6_3SRC_DST_SUBREG) <<
-      GEN6_3SRC_DST_SUBREG__SHR;
-
-   inst->dst.horz_stride = GEN6_HORZSTRIDE_1;
-   inst->dst.writemask = GEN_EXTRACT(dw1, GEN6_3SRC_DST_WRITEMASK);
-
-   inst->src0.base.file = GEN6_FILE_GRF;
-   inst->src0.negate = (bool) (dw1 & GEN6_3SRC_SRC0_NEGATE);
-   inst->src0.absolute = (bool) (dw1 & GEN6_3SRC_SRC0_ABSOLUTE);
-   inst->src1.base.file = GEN6_FILE_GRF;
-   inst->src1.negate = (bool) (dw1 & GEN6_3SRC_SRC1_NEGATE);
-   inst->src1.absolute = (bool) (dw1 & GEN6_3SRC_SRC1_ABSOLUTE);
-   inst->u.src2.base.file = GEN6_FILE_GRF;
-   inst->u.src2.negate = (bool) (dw1 & GEN6_3SRC_SRC2_NEGATE);
-   inst->u.src2.absolute = (bool) (dw1 & GEN6_3SRC_SRC2_ABSOLUTE);
-}
-
-static void
-disasm_inst_decode_3src_dw1_gen8(struct disasm_inst *inst, uint32_t dw1)
-{
-   static const unsigned type_mapping[8] = {
-      [GEN7_TYPE_F_3SRC]   = GEN6_TYPE_F,
-      [GEN7_TYPE_D_3SRC]   = GEN6_TYPE_D,
-      [GEN7_TYPE_UD_3SRC]  = GEN6_TYPE_UD,
-      [GEN7_TYPE_DF_3SRC]  = GEN7_TYPE_DF,
-      /* map unknown types to unknown types */
-      [0x4]                = 0xf,
-      [0x5]                = 0xf,
-      [0x6]                = 0xf,
-      [0x7]                = 0xf,
-   };
-
-   ILO_DEV_ASSERT(inst->dev, 8, 8);
-
-   inst->flag_subreg = GEN_EXTRACT(dw1, GEN8_3SRC_FLAG_SUBREG);
-   inst->flag_reg = GEN_EXTRACT(dw1, GEN8_3SRC_FLAG_REG);
-   inst->mask_ctrl = GEN_EXTRACT(dw1, GEN8_3SRC_MASKCTRL);
-   inst->src0.absolute = (bool) (dw1 & GEN8_3SRC_SRC0_ABSOLUTE);
-   inst->src0.negate = (bool) (dw1 & GEN8_3SRC_SRC0_NEGATE);
-   inst->src1.negate = (bool) (dw1 & GEN8_3SRC_SRC1_NEGATE);
-   inst->src1.absolute = (bool) (dw1 & GEN8_3SRC_SRC1_ABSOLUTE);
-   inst->u.src2.negate = (bool) (dw1 & GEN8_3SRC_SRC2_NEGATE);
-   inst->u.src2.absolute = (bool) (dw1 & GEN8_3SRC_SRC2_ABSOLUTE);
-
-   inst->src0.base.file = GEN6_FILE_GRF;
-   inst->src0.base.type = GEN_EXTRACT(dw1, GEN8_3SRC_SRC_TYPE);
-   inst->src0.base.type = type_mapping[inst->src0.base.type];
-
-   inst->src1.base.file = GEN6_FILE_GRF;
-   inst->src1.base.type = inst->src0.base.type;
-
-   inst->u.src2.base.file = GEN6_FILE_GRF;
-   inst->u.src2.base.type = inst->src0.base.type;
-
-   inst->dst.base.file = GEN6_FILE_GRF;
-   inst->dst.base.type = GEN_EXTRACT(dw1, GEN8_3SRC_DST_TYPE);
-   inst->dst.base.type = type_mapping[inst->dst.base.type];
-   inst->dst.base.addr_mode = GEN6_ADDRMODE_DIRECT;
-   inst->dst.horz_stride = GEN6_HORZSTRIDE_1;
-
-   inst->dst.writemask = GEN_EXTRACT(dw1, GEN6_3SRC_DST_WRITEMASK);
-   inst->dst.base.subreg = GEN_EXTRACT(dw1, GEN6_3SRC_DST_SUBREG) <<
-      GEN6_3SRC_DST_SUBREG__SHR;
-   inst->dst.base.reg = GEN_EXTRACT(dw1, GEN6_3SRC_DST_REG);
-}
-
-static void
-disasm_inst_decode_3src_dw2_dw3_gen6(struct disasm_inst *inst,
-                                     uint32_t dw2, uint32_t dw3)
-{
-   const uint64_t qw = (uint64_t) dw3 << 32 | dw2;
-   int i;
-
-   ILO_DEV_ASSERT(inst->dev, 6, 8);
-
-   for (i = 0; i < 3; i++) {
-      struct disasm_src_operand *src = (i == 0) ? &inst->src0 :
-                                       (i == 1) ? &inst->src1 :
-                                       &inst->u.src2;
-      const uint32_t dw = (i == 0) ? GEN_EXTRACT(qw, GEN6_3SRC_SRC_0) :
-                          (i == 1) ? GEN_EXTRACT(qw, GEN6_3SRC_SRC_1) :
-                          GEN_EXTRACT(qw, GEN6_3SRC_SRC_2);
-
-      src->base.addr_mode = GEN6_ADDRMODE_DIRECT;
-      src->base.reg = GEN_EXTRACT(dw, GEN6_3SRC_SRC_REG);
-      src->base.subreg = GEN_EXTRACT(dw, GEN6_3SRC_SRC_SUBREG) <<
-         GEN6_3SRC_SRC_SUBREG__SHR;
-
-      if (dw & GEN6_3SRC_SRC_REPCTRL) {
-         src->vert_stride = GEN6_VERTSTRIDE_0;
-         src->width = GEN6_WIDTH_1;
-         src->horz_stride = GEN6_HORZSTRIDE_0;
-      } else {
-         src->vert_stride = GEN6_VERTSTRIDE_4;
-         src->width = GEN6_WIDTH_4;
-         src->horz_stride = GEN6_HORZSTRIDE_1;
-      }
-
-      src->swizzle_x = GEN_EXTRACT(dw, GEN6_3SRC_SRC_SWIZZLE_X);
-      src->swizzle_y = GEN_EXTRACT(dw, GEN6_3SRC_SRC_SWIZZLE_Y);
-      src->swizzle_z = GEN_EXTRACT(dw, GEN6_3SRC_SRC_SWIZZLE_Z);
-      src->swizzle_w = GEN_EXTRACT(dw, GEN6_3SRC_SRC_SWIZZLE_W);
-   }
-}
-
-/*
- * When GEN6_INST_CMPTCTRL of DW0 is set, the instruction has 64 bits and is
- * in EU_INSTRUCTION_COMPACT_TWO_SRC form.  We should have expanded it to its
- * original form.
- *
- * Depending on the opcode, the 128-bits instruction is in one of the
- * following forms
- *
- *  - EU_INSTRUCTION_BASIC_ONE_SRC
- *  - EU_INSTRUCTION_BASIC_TWO_SRC
- *  - EU_INSTRUCTION_BASIC_THREE_SRC
- *  - EU_INSTRUCTION_BRANCH_CONDITIONAL
- *  - EU_INSTRUCTION_BRANCH_ONE_SRC
- *  - EU_INSTRUCTION_BRANCH_TWO_SRC
- *  - EU_INSTRUCTION_ILLEGAL
- *  - EU_INSTRUCTION_MATH
- *  - EU_INSTRUCTION_NOP
- *  - EU_INSTRUCTION_SEND
- *
- * In EU_INSTRUCTION_BASIC_ONE_SRC form,
- *
- *  - DW0 is EU_INSTRUCTION_HEADER
- *  - DW1 is EU_INSTRUCTION_OPERAND_CONTROLS
- *  - DW2 is Source 0 and EU_INSTRUCTION_FLAGS
- *  - DW3 is reserved unless Source 0 is an immediate
- *
- * All other forms except EU_INSTRUCTION_BASIC_THREE_SRC are quite compatible
- * with EU_INSTRUCTION_BASIC_ONE_SRC.
- */
-static void
-disasm_inst_decode(struct disasm_inst *inst,
-                   const uint32_t *dw)
-{
-   assert(!(dw[0] & GEN6_INST_CMPTCTRL));
-
-   disasm_inst_decode_dw0_gen6(inst, dw[0]);
-
-   if (disasm_opcode_table[inst->opcode].src_count == 3) {
-      if (ilo_dev_gen(inst->dev) >= ILO_GEN(8))
-         disasm_inst_decode_3src_dw1_gen8(inst, dw[1]);
-      else
-         disasm_inst_decode_3src_dw1_gen6(inst, dw[1]);
-      disasm_inst_decode_3src_dw2_dw3_gen6(inst, dw[2], dw[3]);
-   } else {
-      disasm_inst_decode_dw1_gen6(inst, dw[1]);
-      disasm_inst_decode_dw2_dw3_gen6(inst, dw[2], dw[3]);
-   }
-}
-
-static const char *
-disasm_inst_opcode(const struct disasm_inst *inst)
-{
-   return (disasm_opcode_table[inst->opcode].name) ?
-      disasm_opcode_table[inst->opcode].name : "BAD";
-}
-
-static const char *
-disasm_inst_pred_ctrl(const struct disasm_inst *inst)
-{
-   if (inst->access_mode == GEN6_ALIGN_1) {
-      switch (inst->pred_ctrl) {
-      case GEN6_PREDCTRL_NORMAL: return "";
-      case GEN6_PREDCTRL_ANYV:   return ".anyv";
-      case GEN6_PREDCTRL_ALLV:   return ".allv";
-      case GEN6_PREDCTRL_ANY2H:  return ".any2h";
-      case GEN6_PREDCTRL_ALL2H:  return ".all2h";
-      case GEN6_PREDCTRL_ANY4H:  return ".any4h";
-      case GEN6_PREDCTRL_ALL4H:  return ".all4h";
-      case GEN6_PREDCTRL_ANY8H:  return ".any8h";
-      case GEN6_PREDCTRL_ALL8H:  return ".all8h";
-      case GEN6_PREDCTRL_ANY16H: return ".any16h";
-      case GEN6_PREDCTRL_ALL16H: return ".all16h";
-      case GEN7_PREDCTRL_ANY32H: return ".any32h";
-      case GEN7_PREDCTRL_ALL32H: return ".all32h";
-      default:                   return ".BAD";
-      }
-   } else {
-      switch (inst->pred_ctrl) {
-      case GEN6_PREDCTRL_NORMAL: return "";
-      case GEN6_PREDCTRL_X:      return ".x";
-      case GEN6_PREDCTRL_Y:      return ".y";
-      case GEN6_PREDCTRL_Z:      return ".z";
-      case GEN6_PREDCTRL_W:      return ".w";
-      default:                   return ".BAD";
-      }
-   }
-}
-
-static char
-disasm_inst_pred_inv(const struct disasm_inst *inst)
-{
-   return (inst->pred_inv) ? '-' : '+';
-}
-
-static const char *
-disasm_inst_exec_size(const struct disasm_inst *inst)
-{
-   switch (inst->exec_size) {
-   case GEN6_EXECSIZE_1:   return "1";
-   case GEN6_EXECSIZE_2:   return "2";
-   case GEN6_EXECSIZE_4:   return "4";
-   case GEN6_EXECSIZE_8:   return "8";
-   case GEN6_EXECSIZE_16:  return "16";
-   case GEN6_EXECSIZE_32:  return "32";
-   default:                return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_fc(const struct disasm_inst *inst)
-{
-   assert(inst->opcode == GEN6_OPCODE_MATH);
-
-   switch (inst->fc) {
-   case GEN6_MATH_INV:                 return "inv";
-   case GEN6_MATH_LOG:                 return "log";
-   case GEN6_MATH_EXP:                 return "exp";
-   case GEN6_MATH_SQRT:                return "sqrt";
-   case GEN6_MATH_RSQ:                 return "rsq";
-   case GEN6_MATH_SIN:                 return "sin";
-   case GEN6_MATH_COS:                 return "cos";
-   case GEN6_MATH_FDIV:                return "fdiv";
-   case GEN6_MATH_POW:                 return "pow";
-   case GEN6_MATH_INT_DIV:             return "int_div";
-   case GEN6_MATH_INT_DIV_QUOTIENT:    return "int_div_quotient";
-   case GEN6_MATH_INT_DIV_REMAINDER:   return "int_div_remainder";
-   case GEN8_MATH_INVM:                return "invm";
-   case GEN8_MATH_RSQRTM:              return "rsqrtm";
-   default:                            return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_sfid(const struct disasm_inst *inst)
-{
-   assert(inst->opcode == GEN6_OPCODE_SEND ||
-          inst->opcode == GEN6_OPCODE_SENDC);
-
-   switch (inst->sfid) {
-   case GEN6_SFID_NULL:          return "null";
-   case GEN6_SFID_SAMPLER:       return "sampler";
-   case GEN6_SFID_GATEWAY:       return "gateway";
-   case GEN6_SFID_DP_SAMPLER:    return "dp sampler";
-   case GEN6_SFID_DP_RC:         return "dp render";
-   case GEN6_SFID_URB:           return "urb";
-   case GEN6_SFID_SPAWNER:       return "spawner";
-   case GEN6_SFID_VME:           return "vme";
-   case GEN6_SFID_DP_CC:         return "dp const";
-   case GEN7_SFID_DP_DC0:        return "dp data 0";
-   case GEN7_SFID_PI:            return "pixel interp";
-   case GEN75_SFID_DP_DC1:       return "dp data 1";
-   default:                      return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_cond_modifier(const struct disasm_inst *inst)
-{
-   switch (inst->cond_modifier) {
-   case GEN6_COND_NONE:    return "";
-   case GEN6_COND_Z:       return ".z";
-   case GEN6_COND_NZ:      return ".nz";
-   case GEN6_COND_G:       return ".g";
-   case GEN6_COND_GE:      return ".ge";
-   case GEN6_COND_L:       return ".l";
-   case GEN6_COND_LE:      return ".le";
-   case GEN6_COND_O:       return ".o";
-   case GEN6_COND_U:       return ".u";
-   default:                return ".BAD";
-   }
-}
-
-static const char *
-disasm_inst_debug_ctrl(const struct disasm_inst *inst)
-{
-   return (inst->debug_ctrl) ? ".breakpoint" : "";
-}
-
-static const char *
-disasm_inst_saturate(const struct disasm_inst *inst)
-{
-   return (inst->saturate) ? ".sat" : "";
-}
-
-static const char *
-disasm_inst_flag_reg(const struct disasm_inst *inst)
-{
-   static const char *flag_names[2][2] = {
-      { "f0",   "f0.1" },
-      { "f1.0", "f1.1" },
-   };
-
-   return (inst->flag_reg <= 1 && inst->flag_subreg <= 1) ?
-      flag_names[inst->flag_reg][inst->flag_subreg] : "fBAD";
-}
-
-static const char *
-disasm_inst_access_mode(const struct disasm_inst *inst)
-{
-   switch (inst->access_mode) {
-   case GEN6_ALIGN_1:   return " align1";
-   case GEN6_ALIGN_16:  return " align16";
-   default:             return " alignBAD";
-   }
-}
-
-static const char *
-disasm_inst_mask_ctrl(const struct disasm_inst *inst)
-{
-   switch (inst->mask_ctrl) {
-   case GEN6_MASKCTRL_NORMAL: return "";
-   case GEN6_MASKCTRL_NOMASK: return " WE_all";
-   default:                   return " WE_BAD";
-   }
-}
-
-static const char *
-disasm_inst_dep_ctrl(const struct disasm_inst *inst)
-{
-   switch (inst->dep_ctrl) {
-   case GEN6_DEPCTRL_NORMAL:  return "";
-   case GEN6_DEPCTRL_NODDCLR: return " NoDDClr";
-   case GEN6_DEPCTRL_NODDCHK: return " NoDDChk";
-   case GEN6_DEPCTRL_NEITHER: return " NoDDClr,NoDDChk";
-   default:                   return " NoDDBAD";
-   }
-}
-
-static const char *
-disasm_inst_qtr_ctrl(const struct disasm_inst *inst)
-{
-   switch (inst->exec_size) {
-   case GEN6_EXECSIZE_8:
-      switch (inst->qtr_ctrl) {
-      case GEN6_QTRCTRL_1Q:   return " 1Q";
-      case GEN6_QTRCTRL_2Q:   return " 2Q";
-      case GEN6_QTRCTRL_3Q:   return " 3Q";
-      case GEN6_QTRCTRL_4Q:   return " 4Q";
-      default:                return " BADQ";
-      }
-      break;
-   case GEN6_EXECSIZE_16:
-      switch (inst->qtr_ctrl) {
-      case GEN6_QTRCTRL_1H:   return " 1H";
-      case GEN6_QTRCTRL_2H:   return " 2H";
-      default:                return " BADH";
-      }
-      break;
-   default:
-      return                  "";
-   }
-
-}
-
-static const char *
-disasm_inst_thread_ctrl(const struct disasm_inst *inst)
-{
-   switch (inst->thread_ctrl) {
-   case GEN6_THREADCTRL_NORMAL:  return "";
-   case GEN6_THREADCTRL_ATOMIC:  return " atomic";
-   case GEN6_THREADCTRL_SWITCH:  return " switch";
-   default:                      return " BAD";
-   }
-}
-
-static const char *
-disasm_inst_acc_wr_ctrl(const struct disasm_inst *inst)
-{
-   return (inst->acc_wr_ctrl) ? " AccWrEnable" : "";
-}
-
-static const char *
-disasm_inst_cmpt_ctrl(const struct disasm_inst *inst)
-{
-   return (inst->cmpt_ctrl) ? " compacted" : "";
-}
-
-static const char *
-disasm_inst_eot(const struct disasm_inst *inst)
-{
-   const uint32_t mdesc = inst->u.ud;
-
-   if (inst->opcode == GEN6_OPCODE_SEND ||
-       inst->opcode == GEN6_OPCODE_SENDC)
-      return (mdesc & GEN6_MSG_EOT) ? " EOT" : "";
-   else
-      return "";
-}
-
-static const char *
-disasm_inst_file(const struct disasm_inst *inst,
-                 const struct disasm_operand *operand,
-                 bool *multi_regs)
-{
-   switch (operand->file) {
-   case GEN6_FILE_ARF:
-      switch (operand->reg & 0xf0) {
-      case GEN6_ARF_NULL:  *multi_regs = false; return "null";
-      case GEN6_ARF_A0:    *multi_regs = true;  return "a";
-      case GEN6_ARF_ACC0:  *multi_regs = true;  return "acc";
-      case GEN6_ARF_F0:    *multi_regs = true;  return "f";
-      case GEN6_ARF_SR0:   *multi_regs = true;  return "sr";
-      case GEN6_ARF_CR0:   *multi_regs = true;  return "cr";
-      case GEN6_ARF_N0:    *multi_regs = true;  return "n";
-      case GEN6_ARF_IP:    *multi_regs = false; return "ip";
-      case GEN6_ARF_TDR:   *multi_regs = false; return "tdr";
-      case GEN7_ARF_TM0:   *multi_regs = true;  return "tm";
-      default:             *multi_regs = false; return "BAD";
-      }
-      break;
-   case GEN6_FILE_GRF:     *multi_regs = true;  return "g";
-   case GEN6_FILE_MRF:     *multi_regs = true;  return "m";
-   case GEN6_FILE_IMM:     *multi_regs = true;  return "";
-   default:                *multi_regs = false; return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_type(const struct disasm_inst *inst,
-                 const struct disasm_operand *operand)
-{
-   if (operand->file == GEN6_FILE_IMM) {
-      switch (operand->type) {
-      case GEN6_TYPE_UD:      return "UD";
-      case GEN6_TYPE_D:       return "D";
-      case GEN6_TYPE_UW:      return "UW";
-      case GEN6_TYPE_W:       return "W";
-      case GEN6_TYPE_UV_IMM:  return "UV";
-      case GEN6_TYPE_VF_IMM:  return "VF";
-      case GEN6_TYPE_V_IMM:   return "V";
-      case GEN6_TYPE_F:       return "F";
-      case GEN8_TYPE_DF_IMM:  return "DF";
-      case GEN8_TYPE_HF_IMM:  return "HF";
-      default:                return "BAD";
-      }
-   } else {
-      switch (operand->type) {
-      case GEN6_TYPE_UD:      return "UD";
-      case GEN6_TYPE_D:       return "D";
-      case GEN6_TYPE_UW:      return "UW";
-      case GEN6_TYPE_W:       return "W";
-      case GEN6_TYPE_UB:      return "UB";
-      case GEN6_TYPE_B:       return "B";
-      case GEN7_TYPE_DF:      return "DF";
-      case GEN6_TYPE_F:       return "F";
-      case GEN8_TYPE_UQ:      return "UQ";
-      case GEN8_TYPE_Q:       return "Q";
-      case GEN8_TYPE_HF:      return "HF";
-      default:                return "BAD";
-      }
-   }
-}
-
-static const char *
-disasm_inst_vert_stride(const struct disasm_inst *inst, unsigned vert_stride)
-{
-   switch (vert_stride) {
-   case GEN6_VERTSTRIDE_0:    return "0";
-   case GEN6_VERTSTRIDE_1:    return "1";
-   case GEN6_VERTSTRIDE_2:    return "2";
-   case GEN6_VERTSTRIDE_4:    return "4";
-   case GEN6_VERTSTRIDE_8:    return "8";
-   case GEN6_VERTSTRIDE_16:   return "16";
-   case GEN6_VERTSTRIDE_32:   return "32";
-   case GEN6_VERTSTRIDE_VXH:  return "VxH";
-   default:                   return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_width(const struct disasm_inst *inst, unsigned width)
-{
-   switch (width) {
-   case GEN6_WIDTH_1:   return "1";
-   case GEN6_WIDTH_2:   return "2";
-   case GEN6_WIDTH_4:   return "4";
-   case GEN6_WIDTH_8:   return "8";
-   case GEN6_WIDTH_16:  return "16";
-   default:             return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_horz_stride(const struct disasm_inst *inst, unsigned horz_stride)
-{
-   switch (horz_stride) {
-   case GEN6_HORZSTRIDE_0: return "0";
-   case GEN6_HORZSTRIDE_1: return "1";
-   case GEN6_HORZSTRIDE_2: return "2";
-   case GEN6_HORZSTRIDE_4: return "4";
-   default:                return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_writemask(const struct disasm_inst *inst, unsigned writemask)
-{
-   switch (writemask) {
-   case 0x0:   return ".";
-   case 0x1:   return ".x";
-   case 0x2:   return ".y";
-   case 0x3:   return ".xy";
-   case 0x4:   return ".z";
-   case 0x5:   return ".xz";
-   case 0x6:   return ".yz";
-   case 0x7:   return ".xyz";
-   case 0x8:   return ".w";
-   case 0x9:   return ".xw";
-   case 0xa:   return ".yw";
-   case 0xb:   return ".xyw";
-   case 0xc:   return ".zw";
-   case 0xd:   return ".xzw";
-   case 0xe:   return ".yzw";
-   case 0xf:   return "";
-   default:    return ".BAD";
-   }
-}
-
-static const char *
-disasm_inst_negate(const struct disasm_inst *inst, bool negate)
-{
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(8)) {
-      switch (inst->opcode) {
-      case GEN6_OPCODE_AND:
-      case GEN6_OPCODE_NOT:
-      case GEN6_OPCODE_OR:
-      case GEN6_OPCODE_XOR:
-         return (negate) ? "~" : "";
-         break;
-      default:
-         break;
-      }
-   }
-
-   return (negate) ? "-" : "";
-}
-
-static const char *
-disasm_inst_absolute(const struct disasm_inst *inst, bool absolute)
-{
-   return (absolute) ? "(abs)" : "";
-}
-
-static const char *
-disasm_inst_mdesc_sampler_op(const struct disasm_inst *inst, int op)
-{
-   switch (op) {
-   case GEN6_MSG_SAMPLER_SAMPLE:       return "sample";
-   case GEN6_MSG_SAMPLER_SAMPLE_B:     return "sample_b";
-   case GEN6_MSG_SAMPLER_SAMPLE_L:     return "sample_l";
-   case GEN6_MSG_SAMPLER_SAMPLE_C:     return "sample_c";
-   case GEN6_MSG_SAMPLER_SAMPLE_D:     return "sample_d";
-   case GEN6_MSG_SAMPLER_SAMPLE_B_C:   return "sample_b_c";
-   case GEN6_MSG_SAMPLER_SAMPLE_L_C:   return "sample_l_c";
-   case GEN6_MSG_SAMPLER_LD:           return "ld";
-   case GEN6_MSG_SAMPLER_GATHER4:      return "gather4";
-   case GEN6_MSG_SAMPLER_LOD:          return "lod";
-   case GEN6_MSG_SAMPLER_RESINFO:      return "resinfo";
-   case GEN6_MSG_SAMPLER_SAMPLEINFO:   return "sampleinfo";
-   case GEN7_MSG_SAMPLER_GATHER4_C:    return "gather4_c";
-   case GEN7_MSG_SAMPLER_GATHER4_PO:   return "gather4_po";
-   case GEN7_MSG_SAMPLER_GATHER4_PO_C: return "gather4_po_c";
-   case GEN7_MSG_SAMPLER_SAMPLE_D_C:   return "sample_d_c";
-   case GEN7_MSG_SAMPLER_SAMPLE_LZ:    return "sample_lz";
-   case GEN7_MSG_SAMPLER_SAMPLE_C_LC:  return "sample_c_lc";
-   case GEN7_MSG_SAMPLER_LD_LZ:        return "ld_lz";
-   case GEN7_MSG_SAMPLER_LD_MCS:       return "ld_mcs";
-   case GEN7_MSG_SAMPLER_LD2DMS:       return "ld2dms";
-   case GEN7_MSG_SAMPLER_LD2DSS:       return "ld2dss";
-   default:                            return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_mdesc_sampler_simd(const struct disasm_inst *inst, int simd)
-{
-   switch (simd) {
-   case GEN6_MSG_SAMPLER_SIMD4X2:   return "SIMD4x2";
-   case GEN6_MSG_SAMPLER_SIMD8:     return "SIMD8";
-   case GEN6_MSG_SAMPLER_SIMD16:    return "SIMD16";
-   case GEN6_MSG_SAMPLER_SIMD32_64: return "SIMD32";
-   default:                         return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_mdesc_urb_op(const struct disasm_inst *inst, int op)
-{
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(7)) {
-      switch (op) {
-      case GEN7_MSG_URB_WRITE_HWORD:   return "write HWord";
-      case GEN7_MSG_URB_WRITE_OWORD:   return "write OWord";
-      case GEN7_MSG_URB_READ_HWORD:    return "read HWord";
-      case GEN7_MSG_URB_READ_OWORD:    return "read OWord";
-      case GEN7_MSG_URB_ATOMIC_MOV:    return "atomic mov";
-      case GEN7_MSG_URB_ATOMIC_INC:    return "atomic inc";
-      default:                         return "BAD";
-      }
-   } else {
-      switch (op) {
-      case GEN6_MSG_URB_WRITE:         return "urb_write";
-      case GEN6_MSG_URB_FF_SYNC:       return "ff_sync";
-      default:                         return "BAD";
-      }
-   }
-}
-
-static const char *
-disasm_inst_mdesc_dp_op_gen6(const struct disasm_inst *inst,
-                             int sfid, int op)
-{
-   ILO_DEV_ASSERT(inst->dev, 6, 6);
-
-   switch (op) {
-   case GEN6_MSG_DP_OWORD_BLOCK_READ:           return "OWORD block read";
-   case GEN6_MSG_DP_RT_UNORM_READ:              return "RT UNORM read";
-   case GEN6_MSG_DP_OWORD_DUAL_BLOCK_READ:      return "OWORD dual block read";
-   case GEN6_MSG_DP_MEDIA_BLOCK_READ:           return "media block read";
-   case GEN6_MSG_DP_UNALIGNED_OWORD_BLOCK_READ: return "unaligned OWORD block read";
-   case GEN6_MSG_DP_DWORD_SCATTERED_READ:       return "DWORD scattered read";
-   case GEN6_MSG_DP_DWORD_ATOMIC_WRITE:         return "DWORD atomic write";
-   case GEN6_MSG_DP_OWORD_BLOCK_WRITE:          return "OWORD block write";
-   case GEN6_MSG_DP_OWORD_DUAL_BLOCK_WRITE:     return "OWORD dual block_write";
-   case GEN6_MSG_DP_MEDIA_BLOCK_WRITE:          return "media block write";
-   case GEN6_MSG_DP_DWORD_SCATTERED_WRITE:      return "DWORD scattered write";
-   case GEN6_MSG_DP_RT_WRITE:                   return "RT write";
-   case GEN6_MSG_DP_SVB_WRITE:                  return "SVB write";
-   case GEN6_MSG_DP_RT_UNORM_WRITE:             return "RT UNORM write";
-   default:                                     return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_mdesc_dp_op_gen7(const struct disasm_inst *inst,
-                             int sfid, int op)
-{
-   ILO_DEV_ASSERT(inst->dev, 7, 7);
-
-   switch (sfid) {
-   case GEN6_SFID_DP_SAMPLER:
-      switch (op) {
-      case GEN7_MSG_DP_SAMPLER_UNALIGNED_OWORD_BLOCK_READ: return "OWORD block read";
-      case GEN7_MSG_DP_SAMPLER_MEDIA_BLOCK_READ:         return "media block read";
-      default:                                           return "BAD";
-      }
-   case GEN6_SFID_DP_RC:
-      switch (op) {
-      case GEN7_MSG_DP_RC_MEDIA_BLOCK_READ:              return "media block read";
-      case GEN7_MSG_DP_RC_TYPED_SURFACE_READ:            return "typed surface read";
-      case GEN7_MSG_DP_RC_TYPED_ATOMIC_OP:               return "typed atomic op";
-      case GEN7_MSG_DP_RC_MEMORY_FENCE:                  return "memory fence";
-      case GEN7_MSG_DP_RC_MEDIA_BLOCK_WRITE:             return "media block write";
-      case GEN7_MSG_DP_RC_RT_WRITE:                      return "RT write";
-      case GEN7_MSG_DP_RC_TYPED_SURFACE_WRITE:           return "typed surface write";
-      default:                                           return "BAD";
-      }
-   case GEN6_SFID_DP_CC:
-      switch (op) {
-      case GEN7_MSG_DP_CC_OWORD_BLOCK_READ:              return "OWROD block read";
-      case GEN7_MSG_DP_CC_UNALIGNED_OWORD_BLOCK_READ:    return "unaligned OWORD block read";
-      case GEN7_MSG_DP_CC_OWORD_DUAL_BLOCK_READ:         return "OWORD dual block read";
-      case GEN7_MSG_DP_CC_DWORD_SCATTERED_READ:          return "DWORD scattered read";
-      default:                                           return "BAD";
-      }
-   case GEN7_SFID_DP_DC0:
-      switch (op) {
-      case GEN7_MSG_DP_DC0_OWORD_BLOCK_READ:             return "OWORD block read";
-      case GEN7_MSG_DP_DC0_UNALIGNED_OWORD_BLOCK_READ:   return "unaligned OWORD block read";
-      case GEN7_MSG_DP_DC0_OWORD_DUAL_BLOCK_READ:        return "OWORD dual block read";
-      case GEN7_MSG_DP_DC0_DWORD_SCATTERED_READ:         return "DWORD scattered read";
-      case GEN7_MSG_DP_DC0_BYTE_SCATTERED_READ:          return "BYTE scattered read";
-      case GEN7_MSG_DP_DC0_UNTYPED_SURFACE_READ:         return "untyped surface read";
-      case GEN7_MSG_DP_DC0_UNTYPED_ATOMIC_OP:            return "untyped atomic op";
-      case GEN7_MSG_DP_DC0_MEMORY_FENCE:                 return "memory fence";
-      case GEN7_MSG_DP_DC0_OWORD_BLOCK_WRITE:            return "OWORD block write";
-      case GEN7_MSG_DP_DC0_OWORD_DUAL_BLOCK_WRITE:       return "OWORD dual block write";
-      case GEN7_MSG_DP_DC0_DWORD_SCATTERED_WRITE:        return "OWORD scattered write";
-      case GEN7_MSG_DP_DC0_BYTE_SCATTERED_WRITE:         return "BYTE scattered write";
-      case GEN7_MSG_DP_DC0_UNTYPED_SURFACE_WRITE:        return "untyped surface write";
-      default:                                           return "BAD";
-      }
-   default:                                              return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_mdesc_dp_op_gen75(const struct disasm_inst *inst,
-                              int sfid, int op)
-{
-   ILO_DEV_ASSERT(inst->dev, 7.5, 8);
-
-   switch (sfid) {
-   case GEN6_SFID_DP_SAMPLER:
-      switch (op) {
-      case GEN75_MSG_DP_SAMPLER_READ_SURFACE_INFO:          return "read surface info";
-      case GEN75_MSG_DP_SAMPLER_UNALIGNED_OWORD_BLOCK_READ: return "unaligned OWORD block read";
-      case GEN75_MSG_DP_SAMPLER_MEDIA_BLOCK_READ:           return "media block read";
-      default:                                              return "BAD";
-      }
-
-   case GEN6_SFID_DP_RC:
-      switch (op) {
-      case GEN75_MSG_DP_RC_MEDIA_BLOCK_READ:                return "media block read";
-      case GEN75_MSG_DP_RC_MEMORY_FENCE:                    return "memory fence";
-      case GEN75_MSG_DP_RC_MEDIA_BLOCK_WRITE:               return "media block write";
-      case GEN75_MSG_DP_RC_RT_WRITE:                        return "RT write";
-      default:                                              return "BAD";
-      }
-   case GEN6_SFID_DP_CC:
-      switch (op) {
-      case GEN75_MSG_DP_CC_OWORD_BLOCK_READ:                return "OWROD block read";
-      case GEN75_MSG_DP_CC_UNALIGNED_OWORD_BLOCK_READ:      return "unaligned OWORD block read";
-      case GEN75_MSG_DP_CC_OWORD_DUAL_BLOCK_READ:           return "OWORD dual block read";
-      case GEN75_MSG_DP_CC_DWORD_SCATTERED_READ:            return "DWORD scattered read";
-      default:                                              return "BAD";
-      }
-   case GEN7_SFID_DP_DC0:
-      switch (op) {
-      case GEN75_MSG_DP_DC0_OWORD_BLOCK_READ:               return "OWORD block read";
-      case GEN75_MSG_DP_DC0_UNALIGNED_OWORD_BLOCK_READ:     return "unaligned OWORD block read";
-      case GEN75_MSG_DP_DC0_OWORD_DUAL_BLOCK_READ:          return "OWORD dual block read";
-      case GEN75_MSG_DP_DC0_DWORD_SCATTERED_READ:           return "DWORD scattered read";
-      case GEN75_MSG_DP_DC0_BYTE_SCATTERED_READ:            return "BYTE scattered read";
-      case GEN75_MSG_DP_DC0_MEMORY_FENCE:                   return "memory fence";
-      case GEN75_MSG_DP_DC0_OWORD_BLOCK_WRITE:              return "OWORD block write";
-      case GEN75_MSG_DP_DC0_OWORD_DUAL_BLOCK_WRITE:         return "OWORD dual block write";
-      case GEN75_MSG_DP_DC0_DWORD_SCATTERED_WRITE:          return "OWORD scattered write";
-      case GEN75_MSG_DP_DC0_BYTE_SCATTERED_WRITE:           return "BYTE scattered write";
-      default:                                              return "BAD";
-      }
-   case GEN75_SFID_DP_DC1:
-      switch (op) {
-      case GEN75_MSG_DP_DC1_UNTYPED_SURFACE_READ:           return "untyped surface read";
-      case GEN75_MSG_DP_DC1_UNTYPED_ATOMIC_OP:              return "DC untyped atomic op";
-      case GEN75_MSG_DP_DC1_UNTYPED_ATOMIC_OP_SIMD4X2:      return "DC untyped 4x2 atomic op";
-      case GEN75_MSG_DP_DC1_MEDIA_BLOCK_READ:               return "DC media block read";
-      case GEN75_MSG_DP_DC1_TYPED_SURFACE_READ:             return "DC typed surface read";
-      case GEN75_MSG_DP_DC1_TYPED_ATOMIC_OP:                return "DC typed atomic";
-      case GEN75_MSG_DP_DC1_TYPED_ATOMIC_OP_SIMD4X2:        return "DC typed 4x2 atomic op";
-      case GEN75_MSG_DP_DC1_UNTYPED_SURFACE_WRITE:          return "DC untyped surface write";
-      case GEN75_MSG_DP_DC1_MEDIA_BLOCK_WRITE:              return "DC media block write";
-      case GEN75_MSG_DP_DC1_ATOMIC_COUNTER_OP:              return "DC atomic counter op";
-      case GEN75_MSG_DP_DC1_ATOMIC_COUNTER_OP_SIMD4X2:      return "DC 4x2 atomic counter op";
-      case GEN75_MSG_DP_DC1_TYPED_SURFACE_WRITE:            return "DC typed surface write";
-      default:                                              return "BAD";
-      }
-   default:                                              return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_mdesc_dp_op(const struct disasm_inst *inst, int sfid, int op)
-{
-   switch (ilo_dev_gen(inst->dev)) {
-   case ILO_GEN(8):
-   case ILO_GEN(7.5):   return disasm_inst_mdesc_dp_op_gen75(inst, sfid, op);
-   case ILO_GEN(7):     return disasm_inst_mdesc_dp_op_gen7(inst, sfid, op);
-   case ILO_GEN(6):     return disasm_inst_mdesc_dp_op_gen6(inst, sfid, op);
-   default:             return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_mdesc_dp_untyped_surface_simd_mode(const struct disasm_inst *inst,
-                                               uint32_t mdesc)
-{
-   switch (mdesc & GEN7_MSG_DP_UNTYPED_MODE__MASK) {
-   case GEN7_MSG_DP_UNTYPED_MODE_SIMD4X2: return "SIMD4x2";
-   case GEN7_MSG_DP_UNTYPED_MODE_SIMD16:  return "SIMD16";
-   case GEN7_MSG_DP_UNTYPED_MODE_SIMD8:   return "SIMD8";
-   default:                               return "BAD";
-   }
-}
-
-static const char *
-disasm_inst_mdesc_dp_rt_write_simd_mode(const struct disasm_inst *inst,
-                                        uint32_t mdesc)
-{
-   switch (mdesc & GEN6_MSG_DP_RT_MODE__MASK) {
-   case GEN6_MSG_DP_RT_MODE_SIMD16:             return "SIMD16";
-   case GEN6_MSG_DP_RT_MODE_SIMD16_REPDATA:     return "SIMD16/RepData";
-   case GEN6_MSG_DP_RT_MODE_SIMD8_DUALSRC_LO:   return "SIMD8/DualSrcLow";
-   case GEN6_MSG_DP_RT_MODE_SIMD8_DUALSRC_HI:   return "SIMD8/DualSrcHigh";
-   case GEN6_MSG_DP_RT_MODE_SIMD8_LO:           return "SIMD8";
-   case GEN6_MSG_DP_RT_MODE_SIMD8_IMAGE_WR:     return "SIMD8/ImageWrite";
-   default:                                     return "BAD";
-   }
-}
-
-static bool
-disasm_inst_is_null(const struct disasm_inst *inst,
-                    const struct disasm_operand *operand)
-{
-   return (operand->file == GEN6_FILE_ARF && operand->reg == GEN6_ARF_NULL);
-}
-
-static int
-disasm_inst_type_size(const struct disasm_inst *inst,
-                      const struct disasm_operand *operand)
-{
-   assert(operand->file != GEN6_FILE_IMM);
-
-   switch (operand->type) {
-   case GEN6_TYPE_UD:      return 4;
-   case GEN6_TYPE_D:       return 4;
-   case GEN6_TYPE_UW:      return 2;
-   case GEN6_TYPE_W:       return 2;
-   case GEN6_TYPE_UB:      return 1;
-   case GEN6_TYPE_B:       return 1;
-   case GEN7_TYPE_DF:      return 8;
-   case GEN6_TYPE_F:       return 4;
-   default:                return 1;
-   }
-}
-
-static void
-disasm_printer_reset(struct disasm_printer *printer)
-{
-   printer->buf[0] = '\0';
-   printer->len = 0;
-}
-
-static const char *
-disasm_printer_get_string(struct disasm_printer *printer)
-{
-   return printer->buf;
-}
-
-static void _util_printf_format(2, 3)
-disasm_printer_add(struct disasm_printer *printer, const char *format, ...)
-{
-   const size_t avail = sizeof(printer->buf) - printer->len;
-   va_list ap;
-   int written;
-
-   va_start(ap, format);
-   written = vsnprintf(printer->buf + printer->len, avail, format, ap);
-   va_end(ap);
-
-   /* truncated */
-   if (written < 0 || written >= avail) {
-      memcpy(printer->buf + sizeof(printer->buf) - 4, "...", 4);
-      printer->len = sizeof(printer->buf) - 1;
-   } else {
-      printer->len += written;
-   }
-}
-
-/**
- * Pad to the specified column.
- */
-static void
-disasm_printer_column(struct disasm_printer *printer, int col)
-{
-   int len = DISASM_PRINTER_COLUMN_WIDTH * col;
-
-   if (len <= printer->len) {
-      if (!printer->len)
-         return;
-
-      /* at least one space */
-      len = printer->len + 1;
-   }
-
-   if (len >= sizeof(printer->buf)) {
-      len = sizeof(printer->buf) - 1;
-
-      if (len <= printer->len)
-         return;
-   }
-
-   memset(printer->buf + printer->len, ' ', len - printer->len);
-   printer->len = len;
-   printer->buf[printer->len] = '\0';
-}
-
-static void
-disasm_printer_add_op(struct disasm_printer *printer,
-                      const struct disasm_inst *inst)
-{
-   if (inst->pred_ctrl != GEN6_PREDCTRL_NONE) {
-      disasm_printer_add(printer, "(%c%s%s) ",
-            disasm_inst_pred_inv(inst),
-            disasm_inst_flag_reg(inst),
-            disasm_inst_pred_ctrl(inst));
-   }
-
-   disasm_printer_add(printer, "%s%s%s%s",
-         disasm_inst_opcode(inst),
-         disasm_inst_saturate(inst),
-         disasm_inst_debug_ctrl(inst),
-         disasm_inst_cond_modifier(inst));
-
-   if (inst->cond_modifier != GEN6_COND_NONE) {
-      switch (inst->opcode) {
-      case GEN6_OPCODE_SEL:
-      case GEN6_OPCODE_IF:
-      case GEN6_OPCODE_WHILE:
-         /* these do not update flag registers */
-         break;
-      default:
-         disasm_printer_add(printer, ".%s", disasm_inst_flag_reg(inst));
-         break;
-      }
-   }
-
-   if (inst->opcode == GEN6_OPCODE_MATH)
-      disasm_printer_add(printer, " %s", disasm_inst_fc(inst));
-   if (inst->opcode != GEN6_OPCODE_NOP)
-      disasm_printer_add(printer, "(%s)", disasm_inst_exec_size(inst));
-}
-
-static void
-disasm_printer_add_operand(struct disasm_printer *printer,
-                           const struct disasm_inst *inst,
-                           const struct disasm_operand *operand)
-{
-   const char *name;
-   bool multi_regs;
-
-   name = disasm_inst_file(inst, operand, &multi_regs);
-   if (!multi_regs) {
-      disasm_printer_add(printer, "%s", name);
-      return;
-   }
-
-   if (operand->file == GEN6_FILE_IMM) {
-      switch (operand->type) {
-      case GEN6_TYPE_UD:
-         disasm_printer_add(printer, "0x%08xUD", inst->u.ud);
-         break;
-      case GEN6_TYPE_D:
-         disasm_printer_add(printer, "%dD", inst->u.d);
-         break;
-      case GEN6_TYPE_UW:
-         disasm_printer_add(printer, "0x%04xUW", inst->u.uw);
-         break;
-      case GEN6_TYPE_W:
-         disasm_printer_add(printer, "%dW", inst->u.w);
-         break;
-      case GEN6_TYPE_UV_IMM:
-         disasm_printer_add(printer, "0x%08xUV", inst->u.ud);
-         break;
-      case GEN6_TYPE_VF_IMM:
-         disasm_printer_add(printer, "Vector Float");
-         break;
-      case GEN6_TYPE_V_IMM:
-         disasm_printer_add(printer, "0x%08xV", inst->u.ud);
-         break;
-      case GEN6_TYPE_F:
-         disasm_printer_add(printer, "%-gF", uif(inst->u.f));
-         break;
-      default:
-         disasm_printer_add(printer, "BAD");
-         break;
-      }
-
-      return;
-   }
-
-   if (operand->addr_mode == GEN6_ADDRMODE_DIRECT) {
-      unsigned reg, subreg;
-
-      reg = operand->reg;
-      if (operand->file == GEN6_FILE_ARF)
-         reg &= 0xf;
-
-      subreg = operand->subreg / disasm_inst_type_size(inst, operand);
-
-      if (subreg)
-         disasm_printer_add(printer, "%s%d.%d", name, reg, subreg);
-      else
-         disasm_printer_add(printer, "%s%d", name, reg);
-   } else {
-      disasm_printer_add(printer, "%s[a0.%d %d]",
-            name, operand->addr_subreg, operand->addr_imm);
-   }
-}
-
-static void
-disasm_printer_add_dst(struct disasm_printer *printer,
-                       const struct disasm_inst *inst,
-                       const struct disasm_dst_operand *dst)
-{
-   disasm_printer_add_operand(printer, inst, &dst->base);
-
-   /* dst is an immediate when in EU_INSTRUCTION_BRANCH_CONDITIONAL form */
-   if (disasm_inst_is_null(inst, &dst->base) ||
-       dst->base.file == GEN6_FILE_IMM)
-      return;
-
-   disasm_printer_add(printer, "<%s>%s%s",
-         disasm_inst_horz_stride(inst, dst->horz_stride),
-         disasm_inst_writemask(inst, dst->writemask),
-         disasm_inst_type(inst, &dst->base));
-}
-
-static void
-disasm_printer_add_src(struct disasm_printer *printer,
-                       const struct disasm_inst *inst,
-                       const struct disasm_src_operand *src)
-{
-   static const char swizzle_chars[4] = { 'x', 'y', 'z', 'w' };
-   char swizzle[5];
-
-   disasm_printer_add(printer, "%s%s",
-         disasm_inst_negate(inst, src->negate),
-         disasm_inst_absolute(inst, src->absolute));
-
-   disasm_printer_add_operand(printer, inst, &src->base);
-
-   if (disasm_inst_is_null(inst, &src->base) ||
-       src->base.file == GEN6_FILE_IMM)
-      return;
-
-   if (src->swizzle_x == 0 && src->swizzle_y == 1 &&
-       src->swizzle_z == 2 && src->swizzle_w == 3) {
-      swizzle[0] = '\0';
-   } else if (src->swizzle_x == src->swizzle_y &&
-              src->swizzle_x == src->swizzle_z &&
-              src->swizzle_x == src->swizzle_w) {
-      swizzle[0] = swizzle_chars[src->swizzle_x];
-      swizzle[1] = '\0';
-   } else {
-      swizzle[0] = swizzle_chars[src->swizzle_x];
-      swizzle[1] = swizzle_chars[src->swizzle_y];
-      swizzle[2] = swizzle_chars[src->swizzle_z];
-      swizzle[3] = swizzle_chars[src->swizzle_w];
-      swizzle[4] = '\0';
-   }
-
-   disasm_printer_add(printer, "<%s,%s,%s>%s%s",
-         disasm_inst_vert_stride(inst, src->vert_stride),
-         disasm_inst_width(inst, src->width),
-         disasm_inst_horz_stride(inst, src->horz_stride),
-         swizzle,
-         disasm_inst_type(inst, &src->base));
-}
-
-static void
-disasm_printer_add_ctrl(struct disasm_printer *printer,
-                        const struct disasm_inst *inst)
-{
-   if (inst->opcode == GEN6_OPCODE_NOP) {
-      disasm_printer_add(printer, ";");
-      return;
-   }
-
-   disasm_printer_add(printer, "{%s%s%s%s%s%s%s%s };",
-         disasm_inst_access_mode(inst),
-         disasm_inst_mask_ctrl(inst),
-         disasm_inst_dep_ctrl(inst),
-         disasm_inst_qtr_ctrl(inst),
-         disasm_inst_cmpt_ctrl(inst),
-         disasm_inst_thread_ctrl(inst),
-         disasm_inst_acc_wr_ctrl(inst),
-         disasm_inst_eot(inst));
-}
-
-static void
-disasm_printer_add_mdesc_sampler(struct disasm_printer *printer,
-                                 const struct disasm_inst *inst,
-                                 uint32_t mdesc)
-{
-   int op, simd;
-
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(7)) {
-      op = GEN_EXTRACT(mdesc, GEN7_MSG_SAMPLER_OP);
-      simd = GEN_EXTRACT(mdesc, GEN7_MSG_SAMPLER_SIMD);
-   } else {
-      op = GEN_EXTRACT(mdesc, GEN6_MSG_SAMPLER_OP);
-      simd = GEN_EXTRACT(mdesc, GEN6_MSG_SAMPLER_SIMD);
-   }
-
-   disasm_printer_add(printer,
-         "%s %s samp %d surf %d",
-         disasm_inst_mdesc_sampler_op(inst, op),
-         disasm_inst_mdesc_sampler_simd(inst, simd),
-         GEN_EXTRACT(mdesc, GEN6_MSG_SAMPLER_INDEX),
-         GEN_EXTRACT(mdesc, GEN6_MSG_SAMPLER_SURFACE));
-}
-
-static void
-disasm_printer_add_mdesc_urb(struct disasm_printer *printer,
-                             const struct disasm_inst *inst,
-                             uint32_t mdesc)
-{
-   int op, offset;
-   bool interleaved, complete, allocate, used;
-
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(7)) {
-      op = GEN_EXTRACT(mdesc, GEN7_MSG_URB_OP);
-      offset = GEN_EXTRACT(mdesc, GEN7_MSG_URB_GLOBAL_OFFSET);
-      interleaved = mdesc & GEN7_MSG_URB_INTERLEAVED;
-
-      complete = (ilo_dev_gen(inst->dev) >= ILO_GEN(8)) ?
-         false : (mdesc & GEN7_MSG_URB_COMPLETE);
-
-      allocate = false;
-      used = false;
-   } else {
-      op = GEN_EXTRACT(mdesc, GEN6_MSG_URB_OP);
-      offset = GEN_EXTRACT(mdesc, GEN6_MSG_URB_OFFSET);
-      interleaved = mdesc & GEN6_MSG_URB_INTERLEAVED;
-      complete = mdesc & GEN6_MSG_URB_COMPLETE;
-
-      allocate = mdesc & GEN6_MSG_URB_ALLOCATE;
-      used = mdesc & GEN6_MSG_URB_USED;
-   }
-
-   disasm_printer_add(printer, "%s offset %d%s%s%s%s",
-         disasm_inst_mdesc_urb_op(inst, op),
-         offset,
-         (interleaved) ? " interleave" : "",
-         (allocate) ? " allocate" : "",
-         (used) ? " used" : "",
-         (complete) ? " complete" : "");
-}
-
-static void
-disasm_printer_add_mdesc_spawner(struct disasm_printer *printer,
-                                 const struct disasm_inst *inst,
-                                 uint32_t mdesc)
-{
-   const char *requester, *op;
-
-   switch (mdesc & GEN6_MSG_TS_REQUESTER_TYPE__MASK) {
-   case GEN6_MSG_TS_REQUESTER_TYPE_ROOT:  requester = "root";  break;
-   case GEN6_MSG_TS_REQUESTER_TYPE_CHILD: requester = "child"; break;
-   default:                               requester = "BAD";   break;
-   }
-
-   switch (mdesc & GEN6_MSG_TS_OPCODE__MASK) {
-   case GEN6_MSG_TS_OPCODE_DEREF:
-      op = (mdesc & GEN6_MSG_TS_RESOURCE_SELECT_NO_DEREF) ?
-         "no deref" : "deref";
-      break;
-   case GEN6_MSG_TS_OPCODE_SPAWN:
-      op = (mdesc & GEN6_MSG_TS_RESOURCE_SELECT_ROOT) ?
-         "spawn root" : "spawn child";
-      break;
-   default:
-      op = "BAD";
-      break;
-   }
-
-   disasm_printer_add(printer, "%s thread %s", requester, op);
-}
-
-static void
-disasm_printer_add_mdesc_dp_sampler(struct disasm_printer *printer,
-                                    const struct disasm_inst *inst,
-                                    uint32_t mdesc)
-{
-   const int op = (ilo_dev_gen(inst->dev) >= ILO_GEN(7)) ?
-      GEN_EXTRACT(mdesc, GEN7_MSG_DP_OP) : GEN_EXTRACT(mdesc, GEN6_MSG_DP_OP);
-   const bool write_commit = (ilo_dev_gen(inst->dev) == ILO_GEN(6)) ?
-         (mdesc & GEN6_MSG_DP_SEND_WRITE_COMMIT) : 0;
-
-   disasm_printer_add(printer, "%s block size %d commit %d surf %d",
-         disasm_inst_mdesc_dp_op(inst, GEN6_SFID_DP_SAMPLER, op),
-         GEN_EXTRACT(mdesc, GEN6_MSG_DP_OWORD_BLOCK_SIZE),
-         write_commit,
-         GEN_EXTRACT(mdesc, GEN6_MSG_DP_SURFACE));
-}
-
-static void
-disasm_printer_add_mdesc_dp_dc0(struct disasm_printer *printer,
-                                const struct disasm_inst *inst,
-                                uint32_t mdesc)
-{
-   const int op = GEN_EXTRACT(mdesc, GEN7_MSG_DP_OP);
-
-   ILO_DEV_ASSERT(inst->dev, 7, 7.5);
-
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(7.5)) {
-      disasm_printer_add(printer, "%s ctrl 0x%x surf %d",
-            disasm_inst_mdesc_dp_op(inst, GEN7_SFID_DP_DC0, op),
-            GEN_EXTRACT(mdesc, GEN6_MSG_DP_CTRL),
-            GEN_EXTRACT(mdesc, GEN6_MSG_DP_SURFACE));
-   } else {
-      switch (op) {
-      case GEN7_MSG_DP_DC0_UNTYPED_SURFACE_READ:
-      case GEN7_MSG_DP_DC0_UNTYPED_SURFACE_WRITE:
-         disasm_printer_add(printer, "%s %s mask 0x%x surf %d",
-               disasm_inst_mdesc_dp_op(inst, GEN7_SFID_DP_DC0, op),
-               disasm_inst_mdesc_dp_untyped_surface_simd_mode(inst, mdesc),
-               GEN_EXTRACT(mdesc, GEN7_MSG_DP_UNTYPED_MASK),
-               GEN_EXTRACT(mdesc, GEN6_MSG_DP_SURFACE));
-         break;
-      default:
-         disasm_printer_add(printer, "%s ctrl 0x%x surf %d",
-               disasm_inst_mdesc_dp_op(inst, GEN7_SFID_DP_DC0, op),
-               GEN_EXTRACT(mdesc, GEN6_MSG_DP_CTRL),
-               GEN_EXTRACT(mdesc, GEN6_MSG_DP_SURFACE));
-         break;
-      }
-   }
-}
-
-static void
-disasm_printer_add_mdesc_dp_dc1(struct disasm_printer *printer,
-                                const struct disasm_inst *inst,
-                                uint32_t mdesc)
-{
-   const int op = GEN_EXTRACT(mdesc, GEN7_MSG_DP_OP);
-
-   ILO_DEV_ASSERT(inst->dev, 7.5, 7.5);
-
-   switch (op) {
-   case GEN75_MSG_DP_DC1_UNTYPED_SURFACE_READ:
-   case GEN75_MSG_DP_DC1_UNTYPED_SURFACE_WRITE:
-      disasm_printer_add(printer, "%s %s mask 0x%x surf %d",
-            disasm_inst_mdesc_dp_op(inst, GEN75_SFID_DP_DC1, op),
-            disasm_inst_mdesc_dp_untyped_surface_simd_mode(inst, mdesc),
-            GEN_EXTRACT(mdesc, GEN7_MSG_DP_UNTYPED_MASK),
-            GEN_EXTRACT(mdesc, GEN6_MSG_DP_SURFACE));
-      break;
-   default:
-      disasm_printer_add(printer, "%s ctrl 0x%x surf %d",
-            disasm_inst_mdesc_dp_op(inst, GEN75_SFID_DP_DC1, op),
-            GEN_EXTRACT(mdesc, GEN6_MSG_DP_CTRL),
-            GEN_EXTRACT(mdesc, GEN6_MSG_DP_SURFACE));
-      break;
-   }
-}
-
-static void
-disasm_printer_add_mdesc_dp_rc(struct disasm_printer *printer,
-                               const struct disasm_inst *inst,
-                               uint32_t mdesc)
-{
-   const int op = (ilo_dev_gen(inst->dev) >= ILO_GEN(7)) ?
-      GEN_EXTRACT(mdesc, GEN7_MSG_DP_OP) : GEN_EXTRACT(mdesc, GEN6_MSG_DP_OP);
-   bool is_rt_write;
-
-   if (ilo_dev_gen(inst->dev) >= ILO_GEN(7.5))
-      is_rt_write = (op == GEN75_MSG_DP_RC_RT_WRITE);
-   else if (ilo_dev_gen(inst->dev) >= ILO_GEN(7))
-      is_rt_write = (op == GEN7_MSG_DP_RC_RT_WRITE);
-   else
-      is_rt_write = (op == GEN6_MSG_DP_RT_WRITE);
-
-   disasm_printer_add(printer, "%s",
-         disasm_inst_mdesc_dp_op(inst, GEN6_SFID_DP_RC, op));
-
-   if (is_rt_write) {
-      disasm_printer_add(printer, " %s%s%s%s",
-            disasm_inst_mdesc_dp_rt_write_simd_mode(inst, mdesc),
-            (mdesc & GEN6_MSG_DP_RT_SLOTGRP_HI) ? " Hi" : "",
-            (mdesc & GEN6_MSG_DP_RT_LAST) ? " LastRT" : "",
-            (ilo_dev_gen(inst->dev) == ILO_GEN(6) &&
-             (mdesc & GEN6_MSG_DP_SEND_WRITE_COMMIT)) ? " WriteCommit" : "");
-   }
-
-   disasm_printer_add(printer, " surf %d",
-         GEN_EXTRACT(mdesc, GEN6_MSG_DP_SURFACE));
-}
-
-static void
-disasm_printer_add_mdesc(struct disasm_printer *printer,
-                         const struct disasm_inst *inst)
-{
-   const uint32_t mdesc = inst->u.ud;
-
-   assert(inst->opcode == GEN6_OPCODE_SEND ||
-          inst->opcode == GEN6_OPCODE_SENDC);
-   assert(inst->src1.base.file == GEN6_FILE_IMM);
-
-   disasm_printer_add(printer, "            %s (", disasm_inst_sfid(inst));
-
-   switch (inst->sfid) {
-   case GEN6_SFID_SAMPLER:
-      disasm_printer_add_mdesc_sampler(printer, inst, mdesc);
-      break;
-   case GEN6_SFID_DP_SAMPLER:
-      disasm_printer_add_mdesc_dp_sampler(printer, inst, mdesc);
-      break;
-   case GEN6_SFID_DP_RC:
-      disasm_printer_add_mdesc_dp_rc(printer, inst, mdesc);
-      break;
-   case GEN6_SFID_URB:
-      disasm_printer_add_mdesc_urb(printer, inst, mdesc);
-      break;
-   case GEN6_SFID_SPAWNER:
-      disasm_printer_add_mdesc_spawner(printer, inst, mdesc);
-      break;
-   case GEN7_SFID_DP_DC0:
-      disasm_printer_add_mdesc_dp_dc0(printer, inst, mdesc);
-      break;
-   case GEN75_SFID_DP_DC1:
-      disasm_printer_add_mdesc_dp_dc1(printer, inst, mdesc);
-      break;
-   case GEN6_SFID_DP_CC:
-   case GEN7_SFID_PI:
-   default:
-      break;
-   }
-
-   disasm_printer_add(printer, ") mlen %d rlen %d",
-         GEN_EXTRACT(mdesc, GEN6_MSG_MLEN),
-         GEN_EXTRACT(mdesc, GEN6_MSG_RLEN));
-}
-
-static void
-disasm_printer_print_inst(struct disasm_printer *printer,
-                          const struct disasm_inst *inst)
-{
-   int col = 0;
-
-   disasm_printer_reset(printer);
-
-   disasm_printer_column(printer, col++);
-   disasm_printer_add_op(printer, inst);
-
-   if (inst->has_jip || inst->has_uip) {
-      if (inst->has_jip) {
-         const int32_t jip = (ilo_dev_gen(inst->dev) >= ILO_GEN(8)) ?
-            inst->u.ip32.jip : inst->u.ip16.jip;
-
-         disasm_printer_column(printer, col++);
-         disasm_printer_add(printer, "JIP: %d", jip);
-      }
-
-      if (inst->has_uip) {
-         const int32_t uip = (ilo_dev_gen(inst->dev) >= ILO_GEN(8)) ?
-            inst->u.ip32.uip : inst->u.ip16.uip;
-
-         disasm_printer_column(printer, col++);
-         disasm_printer_add(printer, "UIP: %d", uip);
-      }
-   } else {
-      const int src_count = disasm_opcode_table[inst->opcode].src_count;
-
-      if (src_count) {
-         const struct disasm_src_operand *src[3] = {
-            &inst->src0, &inst->src1, &inst->u.src2
-         };
-         int i;
-
-         disasm_printer_column(printer, col++);
-         disasm_printer_add_dst(printer, inst, &inst->dst);
-
-         for (i = 0; i < src_count; i++) {
-            disasm_printer_column(printer, col++);
-            disasm_printer_add_src(printer, inst, src[i]);
-         }
-      }
-   }
-
-   if (inst->opcode == GEN6_OPCODE_SEND ||
-       inst->opcode == GEN6_OPCODE_SENDC) {
-      /* start a new line */
-      ilo_printf("%s\n", disasm_printer_get_string(printer));
-      disasm_printer_reset(printer);
-      col = 0;
-
-      disasm_printer_column(printer, col++);
-
-      disasm_printer_column(printer, col++);
-      disasm_printer_add_mdesc(printer, inst);
-   }
-
-   if (col < 4)
-      col = 4;
-
-   disasm_printer_column(printer, col++);
-   disasm_printer_add_ctrl(printer, inst);
-
-   ilo_printf("%s\n", disasm_printer_get_string(printer));
-}
-
-static void
-disasm_uncompact_3src(const struct ilo_dev *dev,
-                      uint64_t compact, uint32_t *dw)
-{
-   const struct toy_compaction_table *tbl =
-      toy_compiler_get_compaction_table(dev);
-   uint32_t src[3], tmp;
-   uint64_t tmp64;
-
-   ILO_DEV_ASSERT(dev, 8, 8);
-
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_OPCODE);
-   dw[0] = GEN_SHIFT32(tmp, GEN6_INST_OPCODE);
-
-   /* ControlIndex */
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_CONTROL_INDEX);
-   tmp = tbl->control_3src[tmp];
-
-   dw[0] |= (tmp & 0x1fffff) << GEN6_INST_ACCESSMODE__SHIFT;
-   dw[1] = (tmp >> 21) & ((ilo_dev_gen(dev) >= ILO_GEN(9)) ? 0x1f : 0x7);
-
-   /* SourceIndex */
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_SOURCE_INDEX);
-   tmp64 = tbl->source_3src[tmp];
-
-   dw[1] |= (tmp64 & 0x7ffff) << 5;
-   src[0] = ((tmp64 >> 19) & 0xff) << 1;
-   src[1] = ((tmp64 >> 27) & 0xff) << 1;
-   src[2] = ((tmp64 >> 35) & 0xff) << 1;
-   if (ilo_dev_gen(dev) >= ILO_GEN(9)) {
-      src[0] |= ((tmp64 >> 43) & 0x3) << 19;
-      src[1] |= ((tmp64 >> 45) & 0x3) << 19;
-      src[2] |= ((tmp64 >> 47) & 0x3) << 19;
-   } else {
-      src[0] |= ((tmp64 >> 43) & 0x1) << 19;
-      src[1] |= ((tmp64 >> 44) & 0x1) << 19;
-      src[2] |= ((tmp64 >> 45) & 0x1) << 19;
-   }
-
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_DST_REG);
-   dw[1] |= GEN_SHIFT32(tmp, GEN6_3SRC_DST_REG);
-
-   if (compact & GEN8_COMPACT_3SRC_SRC0_REPCTRL)
-      src[0] |= GEN6_3SRC_SRC_REPCTRL;
-
-   assert(compact & GEN8_COMPACT_3SRC_CMPTCTRL);
-
-   if (compact & GEN8_COMPACT_3SRC_DEBUGCTRL)
-      dw[0] |= GEN6_INST_DEBUGCTRL;
-   if (compact & GEN8_COMPACT_3SRC_SATURATE)
-      dw[0] |= GEN6_INST_SATURATE;
-
-   if (compact & GEN8_COMPACT_3SRC_SRC1_REPCTRL)
-      src[1] |= GEN6_3SRC_SRC_REPCTRL;
-   if (compact & GEN8_COMPACT_3SRC_SRC2_REPCTRL)
-      src[2] |= GEN6_3SRC_SRC_REPCTRL;
-
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_SRC0_SUBREG);
-   src[0] |= GEN_SHIFT32(tmp, GEN6_3SRC_SRC_SUBREG);
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_SRC1_SUBREG);
-   src[1] |= GEN_SHIFT32(tmp, GEN6_3SRC_SRC_SUBREG);
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_SRC2_SUBREG);
-   src[2] |= GEN_SHIFT32(tmp, GEN6_3SRC_SRC_SUBREG);
-
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_SRC0_REG);
-   src[0] |= GEN_SHIFT32(tmp, GEN6_3SRC_SRC_REG);
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_SRC1_REG);
-   src[1] |= GEN_SHIFT32(tmp, GEN6_3SRC_SRC_REG);
-   tmp = GEN_EXTRACT(compact, GEN8_COMPACT_3SRC_SRC2_REG);
-   src[2] |= GEN_SHIFT32(tmp, GEN6_3SRC_SRC_REG);
-
-   tmp64 = (uint64_t) src[2] << 42 |
-           (uint64_t) src[1] << 21 |
-           (uint64_t) src[0];
-   dw[2] = (uint32_t) tmp64;
-   dw[3] = (uint32_t) (tmp64 >> 32);
-}
-
-static void
-disasm_uncompact(const struct ilo_dev *dev,
-                 uint64_t compact, uint32_t *dw)
-{
-   const struct toy_compaction_table *tbl =
-      toy_compiler_get_compaction_table(dev);
-   bool src_is_imm;
-   uint32_t tmp;
-
-   ILO_DEV_ASSERT(dev, 6, 8);
-
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_OPCODE);
-   if (disasm_opcode_table[tmp].src_count == 3) {
-      disasm_uncompact_3src(dev, compact, dw);
-      return;
-   }
-
-   memset(dw, 0, sizeof(*dw) * 4);
-
-   dw[0] |= GEN_SHIFT32(tmp, GEN6_INST_OPCODE);
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7) && (compact & GEN6_COMPACT_DEBUGCTRL))
-      dw[0] |= GEN6_INST_DEBUGCTRL;
-
-   /* ControlIndex */
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_CONTROL_INDEX);
-   tmp = tbl->control[tmp];
-
-   dw[0] |= (tmp & 0xffff) << GEN6_INST_ACCESSMODE__SHIFT;
-   if (tmp & 0x10000)
-      dw[0] |= GEN6_INST_SATURATE;
-
-   if (ilo_dev_gen(dev) >= ILO_GEN(7))
-      dw[2] |= (tmp >> 17) << GEN6_INST_FLAG_SUBREG__SHIFT;
-
-   /* DataTypeIndex */
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_DATATYPE_INDEX);
-   tmp = tbl->datatype[tmp];
-
-   dw[1] |= (tmp & 0x7fff) << GEN6_INST_DST_FILE__SHIFT;
-   dw[1] |= (tmp >> 15) << GEN6_INST_DST_HORZSTRIDE__SHIFT;
-
-   /* SubRegIndex */
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_SUBREG_INDEX);
-   tmp = tbl->subreg[tmp];
-
-   dw[1] |= (tmp & 0x1f) << 16;
-   dw[2] |= ((tmp >> 5) & 0x1f);
-   dw[3] |= ((tmp >> 10) & 0x1f);
-
-   if (compact & GEN6_COMPACT_ACCWRCTRL)
-      dw[0] |= GEN6_INST_ACCWRCTRL;
-
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_CONDMODIFIER);
-   dw[0] |= GEN_SHIFT32(tmp, GEN6_INST_CONDMODIFIER);
-
-   if (ilo_dev_gen(dev) == ILO_GEN(6)) {
-      tmp = GEN_EXTRACT(compact, GEN6_COMPACT_FLAG_SUBREG);
-      dw[2] |= GEN_SHIFT32(compact, GEN6_INST_FLAG_SUBREG);
-   }
-
-   assert(compact & GEN6_COMPACT_CMPTCTRL);
-
-   /* Src0Index */
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_SRC0_INDEX);
-   tmp = tbl->src[tmp];
-   dw[2] |= tmp << 13;
-
-   src_is_imm = (GEN_EXTRACT(dw[1], GEN6_INST_SRC0_FILE) == GEN6_FILE_IMM) ||
-                (GEN_EXTRACT(dw[1], GEN6_INST_SRC1_FILE) == GEN6_FILE_IMM);
-
-   /* Src1Index */
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_SRC1_INDEX);
-   if (src_is_imm) {
-      if (tmp & 0x10)
-         tmp |= 0xfffff0;
-      dw[3] |= tmp << 8;
-   } else {
-      tmp = tbl->src[tmp];
-      dw[3] |= tmp << 13;
-   }
-
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_DST_REG);
-   dw[1] |= GEN_SHIFT32(tmp, GEN6_INST_DST_REG);
-
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_SRC0_REG);
-   dw[2] |= GEN_SHIFT32(tmp, GEN6_INST_SRC_REG);
-
-   tmp = GEN_EXTRACT(compact, GEN6_COMPACT_SRC1_REG);
-   if (src_is_imm)
-      dw[3] |= tmp;
-   else
-      dw[3] |= GEN_SHIFT32(tmp, GEN6_INST_SRC_REG);
-}
-
-void
-toy_compiler_disassemble(const struct ilo_dev *dev,
-                         const void *kernel, int size,
-                         bool dump_hex)
-{
-   const uint32_t *cur = (const uint32_t *) kernel;
-   const uint32_t *end = cur + size / sizeof(*cur);
-   struct disasm_printer printer;
-
-   disasm_printer_reset(&printer);
-
-   while (cur < end) {
-      struct disasm_inst inst;
-      const bool compacted = (cur[0] & GEN6_INST_CMPTCTRL);
-      const uint32_t *dw = cur;
-      uint32_t temp[4];
-
-      cur += (compacted) ? 2 : 4;
-      /* incomplete instruction */
-      if (cur > end)
-         break;
-
-      if (compacted) {
-         const uint64_t compact = (uint64_t) dw[1] << 32 | dw[0];
-         disasm_uncompact(dev, compact, temp);
-         dw = temp;
-      }
-
-      if (dump_hex) {
-         ilo_printf("0x%08x 0x%08x 0x%08x 0x%08x ",
-               dw[0], dw[1], dw[2], dw[3]);
-      }
-
-      memset(&inst, 0, sizeof(inst));
-      inst.dev = dev;
-      disasm_inst_decode(&inst, dw);
-      inst.cmpt_ctrl = compacted;
-
-      disasm_printer_print_inst(&printer, &inst);
-   }
-}
diff --git a/src/gallium/drivers/ilo/shader/toy_compiler_reg.h b/src/gallium/drivers/ilo/shader/toy_compiler_reg.h
deleted file mode 100644 (file)
index 70ad3fc..0000000
+++ /dev/null
@@ -1,800 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef TOY_REG_H
-#define TOY_REG_H
-
-#include "pipe/p_compiler.h"
-#include "util/u_debug.h" /* for assert() */
-#include "util/u_math.h" /* for union fi */
-
-/* a toy reg is 256-bit wide */
-#define TOY_REG_WIDTH        32
-
-/**
- * Register files.
- */
-enum toy_file {
-   /* virtual register file */
-   TOY_FILE_VRF,
-
-   TOY_FILE_ARF,
-   TOY_FILE_GRF,
-   TOY_FILE_MRF,
-   TOY_FILE_IMM,
-
-   TOY_FILE_COUNT,
-};
-
-/**
- * Register types.
- */
-enum toy_type {
-   TOY_TYPE_F,
-   TOY_TYPE_D,
-   TOY_TYPE_UD,
-   TOY_TYPE_W,
-   TOY_TYPE_UW,
-   TOY_TYPE_V, /* only valid for immediates */
-
-   TOY_TYPE_COUNT,
-};
-
-/**
- * Register rectangles.  The three numbers stand for vertical stride, width,
- * and horizontal stride respectively.
- */
-enum toy_rect {
-   TOY_RECT_LINEAR,
-   TOY_RECT_041,
-   TOY_RECT_010,
-   TOY_RECT_220,
-   TOY_RECT_440,
-   TOY_RECT_240,
-
-   TOY_RECT_COUNT,
-};
-
-/**
- * Source swizzles.  They are compatible with TGSI_SWIZZLE_x and hardware
- * values.
- */
-enum toy_swizzle {
-   TOY_SWIZZLE_X = 0,
-   TOY_SWIZZLE_Y = 1,
-   TOY_SWIZZLE_Z = 2,
-   TOY_SWIZZLE_W = 3,
-};
-
-/**
- * Destination writemasks.  They are compatible with TGSI_WRITEMASK_x and
- * hardware values.
- */
-enum toy_writemask {
-   TOY_WRITEMASK_X    = (1 << TOY_SWIZZLE_X),
-   TOY_WRITEMASK_Y    = (1 << TOY_SWIZZLE_Y),
-   TOY_WRITEMASK_Z    = (1 << TOY_SWIZZLE_Z),
-   TOY_WRITEMASK_W    = (1 << TOY_SWIZZLE_W),
-   TOY_WRITEMASK_XY   = (TOY_WRITEMASK_X | TOY_WRITEMASK_Y),
-   TOY_WRITEMASK_XZ   = (TOY_WRITEMASK_X | TOY_WRITEMASK_Z),
-   TOY_WRITEMASK_XW   = (TOY_WRITEMASK_X | TOY_WRITEMASK_W),
-   TOY_WRITEMASK_YZ   = (TOY_WRITEMASK_Y | TOY_WRITEMASK_Z),
-   TOY_WRITEMASK_YW   = (TOY_WRITEMASK_Y | TOY_WRITEMASK_W),
-   TOY_WRITEMASK_ZW   = (TOY_WRITEMASK_Z | TOY_WRITEMASK_W),
-   TOY_WRITEMASK_XYZ  = (TOY_WRITEMASK_X | TOY_WRITEMASK_Y | TOY_WRITEMASK_Z),
-   TOY_WRITEMASK_XYW  = (TOY_WRITEMASK_X | TOY_WRITEMASK_Y | TOY_WRITEMASK_W),
-   TOY_WRITEMASK_XZW  = (TOY_WRITEMASK_X | TOY_WRITEMASK_Z | TOY_WRITEMASK_W),
-   TOY_WRITEMASK_YZW  = (TOY_WRITEMASK_Y | TOY_WRITEMASK_Z | TOY_WRITEMASK_W),
-   TOY_WRITEMASK_XYZW = (TOY_WRITEMASK_X | TOY_WRITEMASK_Y |
-                         TOY_WRITEMASK_Z | TOY_WRITEMASK_W),
-};
-
-/**
- * Destination operand.
- */
-struct toy_dst {
-   unsigned file:3;              /* TOY_FILE_x */
-   unsigned type:4;              /* TOY_TYPE_x */
-   unsigned rect:3;              /* TOY_RECT_x */
-   unsigned indirect:1;          /* true or false */
-   unsigned indirect_subreg:6;   /* which subreg of a0? */
-
-   unsigned writemask:4;         /* TOY_WRITEMASK_x */
-   unsigned pad:11;
-
-   uint32_t val32;
-};
-
-/**
- * Source operand.
- */
-struct toy_src {
-   unsigned file:3;              /* TOY_FILE_x */
-   unsigned type:4;              /* TOY_TYPE_x */
-   unsigned rect:3;              /* TOY_RECT_x */
-   unsigned indirect:1;          /* true or false */
-   unsigned indirect_subreg:6;   /* which subreg of a0? */
-
-   unsigned swizzle_x:2;         /* TOY_SWIZZLE_x */
-   unsigned swizzle_y:2;         /* TOY_SWIZZLE_x */
-   unsigned swizzle_z:2;         /* TOY_SWIZZLE_x */
-   unsigned swizzle_w:2;         /* TOY_SWIZZLE_x */
-   unsigned absolute:1;          /* true or false */
-   unsigned negate:1;            /* true or false */
-   unsigned pad:5;
-
-   uint32_t val32;
-};
-
-/**
- * Return true if the file is virtual.
- */
-static inline bool
-toy_file_is_virtual(enum toy_file file)
-{
-   return (file == TOY_FILE_VRF);
-}
-
-/**
- * Return true if the file is a hardware one.
- */
-static inline bool
-toy_file_is_hw(enum toy_file file)
-{
-   return !toy_file_is_virtual(file);
-}
-
-/**
- * Return the size of the file.
- */
-static inline uint32_t
-toy_file_size(enum toy_file file)
-{
-   switch (file) {
-   case TOY_FILE_GRF:
-      return 256 * TOY_REG_WIDTH;
-   case TOY_FILE_MRF:
-      /* there is no MRF on GEN7+ */
-      return 256 * TOY_REG_WIDTH;
-   default:
-      assert(!"invalid toy file");
-      return 0;
-   }
-}
-
-/**
- * Return the size of the type.
- */
-static inline int
-toy_type_size(enum toy_type type)
-{
-   switch (type) {
-   case TOY_TYPE_F:
-   case TOY_TYPE_D:
-   case TOY_TYPE_UD:
-      return 4;
-   case TOY_TYPE_W:
-   case TOY_TYPE_UW:
-      return 2;
-   case TOY_TYPE_V:
-   default:
-      assert(!"invalid toy type");
-      return 0;
-   }
-}
-
-/**
- * Return true if the destination operand is null.
- */
-static inline bool
-tdst_is_null(struct toy_dst dst)
-{
-   /* GEN6_ARF_NULL happens to be 0 */
-   return (dst.file == TOY_FILE_ARF && dst.val32 == 0);
-}
-
-/**
- * Validate the destination operand.
- */
-static inline struct toy_dst
-tdst_validate(struct toy_dst dst)
-{
-   switch (dst.file) {
-   case TOY_FILE_VRF:
-   case TOY_FILE_ARF:
-   case TOY_FILE_MRF:
-      assert(!dst.indirect);
-      if (dst.file == TOY_FILE_MRF)
-         assert(dst.val32 < toy_file_size(dst.file));
-      break;
-   case TOY_FILE_GRF:
-      if (!dst.indirect)
-         assert(dst.val32 < toy_file_size(dst.file));
-      break;
-   case TOY_FILE_IMM:
-      /* yes, dst can be IMM of type W (for IF/ELSE/ENDIF/WHILE) */
-      assert(!dst.indirect);
-      assert(dst.type == TOY_TYPE_W);
-      break;
-   default:
-      assert(!"invalid dst file");
-      break;
-   }
-
-   switch (dst.type) {
-   case TOY_TYPE_V:
-      assert(!"invalid dst type");
-      break;
-   default:
-      break;
-   }
-
-   assert(dst.rect == TOY_RECT_LINEAR);
-   if (dst.file != TOY_FILE_IMM)
-      assert(dst.val32 % toy_type_size(dst.type) == 0);
-
-   assert(dst.writemask <= TOY_WRITEMASK_XYZW);
-
-   return dst;
-}
-
-/**
- * Change the type of the destination operand.
- */
-static inline struct toy_dst
-tdst_type(struct toy_dst dst, enum toy_type type)
-{
-   dst.type = type;
-   return tdst_validate(dst);
-}
-
-/**
- * Change the type of the destination operand to TOY_TYPE_D.
- */
-static inline struct toy_dst
-tdst_d(struct toy_dst dst)
-{
-   return tdst_type(dst, TOY_TYPE_D);
-}
-
-/**
- * Change the type of the destination operand to TOY_TYPE_UD.
- */
-static inline struct toy_dst
-tdst_ud(struct toy_dst dst)
-{
-   return tdst_type(dst, TOY_TYPE_UD);
-}
-
-/**
- * Change the type of the destination operand to TOY_TYPE_W.
- */
-static inline struct toy_dst
-tdst_w(struct toy_dst dst)
-{
-   return tdst_type(dst, TOY_TYPE_W);
-}
-
-/**
- * Change the type of the destination operand to TOY_TYPE_UW.
- */
-static inline struct toy_dst
-tdst_uw(struct toy_dst dst)
-{
-   return tdst_type(dst, TOY_TYPE_UW);
-}
-
-/**
- * Change the rectangle of the destination operand.
- */
-static inline struct toy_dst
-tdst_rect(struct toy_dst dst, enum toy_rect rect)
-{
-   dst.rect = rect;
-   return tdst_validate(dst);
-}
-
-/**
- * Apply writemask to the destination operand.  Note that the current
- * writemask is honored.
- */
-static inline struct toy_dst
-tdst_writemask(struct toy_dst dst, enum toy_writemask writemask)
-{
-   dst.writemask &= writemask;
-   return tdst_validate(dst);
-}
-
-/**
- * Offset the destination operand.
- */
-static inline struct toy_dst
-tdst_offset(struct toy_dst dst, int reg, int subreg)
-{
-   dst.val32 += reg * TOY_REG_WIDTH + subreg * toy_type_size(dst.type);
-   return tdst_validate(dst);
-}
-
-/**
- * Construct a destination operand.
- */
-static inline struct toy_dst
-tdst_full(enum toy_file file, enum toy_type type, enum toy_rect rect,
-          bool indirect, unsigned indirect_subreg,
-          enum toy_writemask writemask, uint32_t val32)
-{
-   struct toy_dst dst;
-
-   dst.file = file;
-   dst.type = type;
-   dst.rect = rect;
-   dst.indirect = indirect;
-   dst.indirect_subreg = indirect_subreg;
-   dst.writemask = writemask;
-   dst.pad = 0;
-
-   dst.val32 = val32;
-
-   return tdst_validate(dst);
-}
-
-/**
- * Construct a null destination operand.
- */
-static inline struct toy_dst
-tdst_null(void)
-{
-   static const struct toy_dst null_dst = {
-      .file = TOY_FILE_ARF,
-      .type = TOY_TYPE_F,
-      .rect = TOY_RECT_LINEAR,
-      .indirect = false,
-      .indirect_subreg = 0,
-      .writemask = TOY_WRITEMASK_XYZW,
-      .pad = 0,
-      .val32 = 0,
-   };
-
-   return null_dst;
-}
-
-/**
- * Construct a destination operand from a source operand.
- */
-static inline struct toy_dst
-tdst_from(struct toy_src src)
-{
-   const enum toy_writemask writemask =
-      (1 << src.swizzle_x) |
-      (1 << src.swizzle_y) |
-      (1 << src.swizzle_z) |
-      (1 << src.swizzle_w);
-
-   return tdst_full(src.file, src.type, src.rect,
-         src.indirect, src.indirect_subreg, writemask, src.val32);
-}
-
-/**
- * Construct a destination operand, assuming the type is TOY_TYPE_F, the
- * rectangle is TOY_RECT_LINEAR, and the writemask is TOY_WRITEMASK_XYZW.
- */
-static inline struct toy_dst
-tdst(enum toy_file file, unsigned reg, unsigned subreg_in_bytes)
-{
-   const enum toy_type type = TOY_TYPE_F;
-   const enum toy_rect rect = TOY_RECT_LINEAR;
-   const uint32_t val32 = reg * TOY_REG_WIDTH + subreg_in_bytes;
-
-   return tdst_full(file, type, rect,
-         false, 0, TOY_WRITEMASK_XYZW, val32);
-}
-
-/**
- * Construct an immediate destination operand of type TOY_TYPE_W.
- */
-static inline struct toy_dst
-tdst_imm_w(int16_t w)
-{
-   const union fi fi = { .i = w };
-
-   return tdst_full(TOY_FILE_IMM, TOY_TYPE_W, TOY_RECT_LINEAR,
-         false, 0, TOY_WRITEMASK_XYZW, fi.ui);
-}
-
-/**
- * Return true if the source operand is null.
- */
-static inline bool
-tsrc_is_null(struct toy_src src)
-{
-   /* GEN6_ARF_NULL happens to be 0 */
-   return (src.file == TOY_FILE_ARF && src.val32 == 0);
-}
-
-/**
- * Return true if the source operand is swizzled.
- */
-static inline bool
-tsrc_is_swizzled(struct toy_src src)
-{
-   return (src.swizzle_x != TOY_SWIZZLE_X ||
-           src.swizzle_y != TOY_SWIZZLE_Y ||
-           src.swizzle_z != TOY_SWIZZLE_Z ||
-           src.swizzle_w != TOY_SWIZZLE_W);
-}
-
-/**
- * Return true if the source operand is swizzled to the same channel.
- */
-static inline bool
-tsrc_is_swizzle1(struct toy_src src)
-{
-   return (src.swizzle_x == src.swizzle_y &&
-           src.swizzle_x == src.swizzle_z &&
-           src.swizzle_x == src.swizzle_w);
-}
-
-/**
- * Validate the source operand.
- */
-static inline struct toy_src
-tsrc_validate(struct toy_src src)
-{
-   switch (src.file) {
-   case TOY_FILE_VRF:
-   case TOY_FILE_ARF:
-   case TOY_FILE_MRF:
-      assert(!src.indirect);
-      if (src.file == TOY_FILE_MRF)
-         assert(src.val32 < toy_file_size(src.file));
-      break;
-   case TOY_FILE_GRF:
-      if (!src.indirect)
-         assert(src.val32 < toy_file_size(src.file));
-      break;
-   case TOY_FILE_IMM:
-      assert(!src.indirect);
-      break;
-   default:
-      assert(!"invalid src file");
-      break;
-   }
-
-   switch (src.type) {
-   case TOY_TYPE_V:
-      assert(src.file == TOY_FILE_IMM);
-      break;
-   default:
-      break;
-   }
-
-   if (src.file != TOY_FILE_IMM)
-      assert(src.val32 % toy_type_size(src.type) == 0);
-
-   assert(src.swizzle_x < 4 && src.swizzle_y < 4 &&
-          src.swizzle_z < 4 && src.swizzle_w < 4);
-
-   return src;
-}
-
-/**
- * Change the type of the source operand.
- */
-static inline struct toy_src
-tsrc_type(struct toy_src src, enum toy_type type)
-{
-   src.type = type;
-   return tsrc_validate(src);
-}
-
-/**
- * Change the type of the source operand to TOY_TYPE_D.
- */
-static inline struct toy_src
-tsrc_d(struct toy_src src)
-{
-   return tsrc_type(src, TOY_TYPE_D);
-}
-
-/**
- * Change the type of the source operand to TOY_TYPE_UD.
- */
-static inline struct toy_src
-tsrc_ud(struct toy_src src)
-{
-   return tsrc_type(src, TOY_TYPE_UD);
-}
-
-/**
- * Change the type of the source operand to TOY_TYPE_W.
- */
-static inline struct toy_src
-tsrc_w(struct toy_src src)
-{
-   return tsrc_type(src, TOY_TYPE_W);
-}
-
-/**
- * Change the type of the source operand to TOY_TYPE_UW.
- */
-static inline struct toy_src
-tsrc_uw(struct toy_src src)
-{
-   return tsrc_type(src, TOY_TYPE_UW);
-}
-
-/**
- * Change the rectangle of the source operand.
- */
-static inline struct toy_src
-tsrc_rect(struct toy_src src, enum toy_rect rect)
-{
-   src.rect = rect;
-   return tsrc_validate(src);
-}
-
-/**
- * Swizzle the source operand.  Note that the current swizzles are honored.
- */
-static inline struct toy_src
-tsrc_swizzle(struct toy_src src,
-             enum toy_swizzle swizzle_x, enum toy_swizzle swizzle_y,
-             enum toy_swizzle swizzle_z, enum toy_swizzle swizzle_w)
-{
-   const enum toy_swizzle current[4] = {
-      src.swizzle_x, src.swizzle_y,
-      src.swizzle_z, src.swizzle_w,
-   };
-
-   src.swizzle_x = current[swizzle_x];
-   src.swizzle_y = current[swizzle_y];
-   src.swizzle_z = current[swizzle_z];
-   src.swizzle_w = current[swizzle_w];
-
-   return tsrc_validate(src);
-}
-
-/**
- * Swizzle the source operand to the same channel.  Note that the current
- * swizzles are honored.
- */
-static inline struct toy_src
-tsrc_swizzle1(struct toy_src src, enum toy_swizzle swizzle)
-{
-   return tsrc_swizzle(src, swizzle, swizzle, swizzle, swizzle);
-}
-
-/**
- * Set absolute and unset negate of the source operand.
- */
-static inline struct toy_src
-tsrc_absolute(struct toy_src src)
-{
-   src.absolute = true;
-   src.negate = false;
-   return tsrc_validate(src);
-}
-
-/**
- * Negate the source operand.
- */
-static inline struct toy_src
-tsrc_negate(struct toy_src src)
-{
-   src.negate = !src.negate;
-   return tsrc_validate(src);
-}
-
-/**
- * Offset the source operand.
- */
-static inline struct toy_src
-tsrc_offset(struct toy_src src, int reg, int subreg)
-{
-   src.val32 += reg * TOY_REG_WIDTH + subreg * toy_type_size(src.type);
-   return tsrc_validate(src);
-}
-
-/**
- * Construct a source operand.
- */
-static inline struct toy_src
-tsrc_full(enum toy_file file, enum toy_type type,
-          enum toy_rect rect, bool indirect, unsigned indirect_subreg,
-          enum toy_swizzle swizzle_x, enum toy_swizzle swizzle_y,
-          enum toy_swizzle swizzle_z, enum toy_swizzle swizzle_w,
-          bool absolute, bool negate,
-          uint32_t val32)
-{
-   struct toy_src src;
-
-   src.file = file;
-   src.type = type;
-   src.rect = rect;
-   src.indirect = indirect;
-   src.indirect_subreg = indirect_subreg;
-   src.swizzle_x = swizzle_x;
-   src.swizzle_y = swizzle_y;
-   src.swizzle_z = swizzle_z;
-   src.swizzle_w = swizzle_w;
-   src.absolute = absolute;
-   src.negate = negate;
-   src.pad = 0;
-
-   src.val32 = val32;
-
-   return tsrc_validate(src);
-}
-
-/**
- * Construct a null source operand.
- */
-static inline struct toy_src
-tsrc_null(void)
-{
-   static const struct toy_src null_src = {
-      .file = TOY_FILE_ARF,
-      .type = TOY_TYPE_F,
-      .rect = TOY_RECT_LINEAR,
-      .indirect = false,
-      .indirect_subreg = 0,
-      .swizzle_x = TOY_SWIZZLE_X,
-      .swizzle_y = TOY_SWIZZLE_Y,
-      .swizzle_z = TOY_SWIZZLE_Z,
-      .swizzle_w = TOY_SWIZZLE_W,
-      .absolute = false,
-      .negate = false,
-      .pad = 0,
-      .val32 = 0,
-   };
-
-   return null_src;
-}
-
-/**
- * Construct a source operand from a destination operand.
- */
-static inline struct toy_src
-tsrc_from(struct toy_dst dst)
-{
-   enum toy_swizzle swizzle[4];
-
-   if (dst.writemask == TOY_WRITEMASK_XYZW) {
-      swizzle[0] = TOY_SWIZZLE_X;
-      swizzle[1] = TOY_SWIZZLE_Y;
-      swizzle[2] = TOY_SWIZZLE_Z;
-      swizzle[3] = TOY_SWIZZLE_W;
-   }
-   else {
-      const enum toy_swizzle first =
-         (dst.writemask & TOY_WRITEMASK_X) ? TOY_SWIZZLE_X :
-         (dst.writemask & TOY_WRITEMASK_Y) ? TOY_SWIZZLE_Y :
-         (dst.writemask & TOY_WRITEMASK_Z) ? TOY_SWIZZLE_Z :
-         (dst.writemask & TOY_WRITEMASK_W) ? TOY_SWIZZLE_W :
-         TOY_SWIZZLE_X;
-
-      swizzle[0] = (dst.writemask & TOY_WRITEMASK_X) ? TOY_SWIZZLE_X : first;
-      swizzle[1] = (dst.writemask & TOY_WRITEMASK_Y) ? TOY_SWIZZLE_Y : first;
-      swizzle[2] = (dst.writemask & TOY_WRITEMASK_Z) ? TOY_SWIZZLE_Z : first;
-      swizzle[3] = (dst.writemask & TOY_WRITEMASK_W) ? TOY_SWIZZLE_W : first;
-   }
-
-   return tsrc_full(dst.file, dst.type, dst.rect,
-                    dst.indirect, dst.indirect_subreg,
-                    swizzle[0], swizzle[1], swizzle[2], swizzle[3],
-                    false, false, dst.val32);
-}
-
-/**
- * Construct a source operand, assuming the type is TOY_TYPE_F, the
- * rectangle is TOY_RECT_LINEAR, and no swizzles/absolute/negate.
- */
-static inline struct toy_src
-tsrc(enum toy_file file, unsigned reg, unsigned subreg_in_bytes)
-{
-   const enum toy_type type = TOY_TYPE_F;
-   const enum toy_rect rect = TOY_RECT_LINEAR;
-   const uint32_t val32 = reg * TOY_REG_WIDTH + subreg_in_bytes;
-
-   return tsrc_full(file, type, rect, false, 0,
-                    TOY_SWIZZLE_X, TOY_SWIZZLE_Y,
-                    TOY_SWIZZLE_Z, TOY_SWIZZLE_W,
-                    false, false, val32);
-}
-
-/**
- * Construct an immediate source operand.
- */
-static inline struct toy_src
-tsrc_imm(enum toy_type type, uint32_t val32)
-{
-   return tsrc_full(TOY_FILE_IMM, type, TOY_RECT_LINEAR, false, 0,
-                    TOY_SWIZZLE_X, TOY_SWIZZLE_Y,
-                    TOY_SWIZZLE_Z, TOY_SWIZZLE_W,
-                    false, false, val32);
-}
-
-/**
- * Construct an immediate source operand of type TOY_TYPE_F.
- */
-static inline struct toy_src
-tsrc_imm_f(float f)
-{
-   const union fi fi = { .f = f };
-   return tsrc_imm(TOY_TYPE_F, fi.ui);
-}
-
-/**
- * Construct an immediate source operand of type TOY_TYPE_D.
- */
-static inline struct toy_src
-tsrc_imm_d(int32_t d)
-{
-   const union fi fi = { .i = d };
-   return tsrc_imm(TOY_TYPE_D, fi.ui);
-}
-
-/**
- * Construct an immediate source operand of type TOY_TYPE_UD.
- */
-static inline struct toy_src
-tsrc_imm_ud(uint32_t ud)
-{
-   const union fi fi = { .ui = ud };
-   return tsrc_imm(TOY_TYPE_UD, fi.ui);
-}
-
-/**
- * Construct an immediate source operand of type TOY_TYPE_W.
- */
-static inline struct toy_src
-tsrc_imm_w(int16_t w)
-{
-   const union fi fi = { .i = w };
-   return tsrc_imm(TOY_TYPE_W, fi.ui);
-}
-
-/**
- * Construct an immediate source operand of type TOY_TYPE_UW.
- */
-static inline struct toy_src
-tsrc_imm_uw(uint16_t uw)
-{
-   const union fi fi = { .ui = uw };
-   return tsrc_imm(TOY_TYPE_UW, fi.ui);
-}
-
-/**
- * Construct an immediate source operand of type TOY_TYPE_V.
- */
-static inline struct toy_src
-tsrc_imm_v(uint32_t v)
-{
-   return tsrc_imm(TOY_TYPE_V, v);
-}
-
-#endif /* TOY_REG_H */
diff --git a/src/gallium/drivers/ilo/shader/toy_helpers.h b/src/gallium/drivers/ilo/shader/toy_helpers.h
deleted file mode 100644 (file)
index 0c507d2..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef TOY_HELPERS_H
-#define TOY_HELPERS_H
-
-#include "toy_compiler.h"
-
-/**
- * Transpose a dst operand.
- *
- * Instead of processing a single vertex with each of its attributes in one
- * register, such as
- *
- *   r0 = [x0, y0, z0, w0]
- *
- * we want to process four vertices at a time
- *
- *   r0 = [x0, y0, z0, w0]
- *   r1 = [x1, y1, z1, w1]
- *   r2 = [x2, y2, z2, w2]
- *   r3 = [x3, y3, z3, w3]
- *
- * but with the attribute data "transposed"
- *
- *   r0 = [x0, x1, x2, x3]
- *   r1 = [y0, y1, y2, y3]
- *   r2 = [z0, z1, z2, z3]
- *   r3 = [w0, w1, w2, w3]
- *
- * This is also known as the SoA form.
- */
-static inline void
-tdst_transpose(struct toy_dst dst, struct toy_dst *trans)
-{
-   int i;
-
-   switch (dst.file) {
-   case TOY_FILE_VRF:
-      assert(!dst.indirect);
-      for (i = 0; i < 4; i++) {
-         if (dst.writemask & (1 << i)) {
-            trans[i] = tdst_offset(dst, i, 0);
-            trans[i].writemask = TOY_WRITEMASK_XYZW;
-         }
-         else {
-            trans[i] = tdst_null();
-         }
-      }
-      break;
-   case TOY_FILE_ARF:
-      assert(tdst_is_null(dst));
-      for (i = 0; i < 4; i++)
-         trans[i] = dst;
-      break;
-   case TOY_FILE_GRF:
-   case TOY_FILE_MRF:
-   case TOY_FILE_IMM:
-   default:
-      assert(!"unexpected file in dst transposition");
-      for (i = 0; i < 4; i++)
-         trans[i] = tdst_null();
-      break;
-   }
-}
-
-/**
- * Transpose a src operand.
- */
-static inline void
-tsrc_transpose(struct toy_src src, struct toy_src *trans)
-{
-   const enum toy_swizzle swizzle[4] = {
-      src.swizzle_x, src.swizzle_y,
-      src.swizzle_z, src.swizzle_w,
-   };
-   int i;
-
-   switch (src.file) {
-   case TOY_FILE_VRF:
-      assert(!src.indirect);
-      for (i = 0; i < 4; i++) {
-         trans[i] = tsrc_offset(src, swizzle[i], 0);
-         trans[i].swizzle_x = TOY_SWIZZLE_X;
-         trans[i].swizzle_y = TOY_SWIZZLE_Y;
-         trans[i].swizzle_z = TOY_SWIZZLE_Z;
-         trans[i].swizzle_w = TOY_SWIZZLE_W;
-      }
-      break;
-   case TOY_FILE_ARF:
-      assert(tsrc_is_null(src));
-      /* fall through */
-   case TOY_FILE_IMM:
-      for (i = 0; i < 4; i++)
-         trans[i] = src;
-      break;
-   case TOY_FILE_GRF:
-   case TOY_FILE_MRF:
-   default:
-      assert(!"unexpected file in src transposition");
-      for (i = 0; i < 4; i++)
-         trans[i] = tsrc_null();
-      break;
-   }
-}
-
-static inline struct toy_src
-tsrc_imm_mdesc(const struct toy_compiler *tc,
-               bool eot,
-               unsigned message_length,
-               unsigned response_length,
-               bool header_present,
-               uint32_t function_control)
-{
-   uint32_t desc;
-
-   assert(message_length >= 1 && message_length <= 15);
-   assert(response_length >= 0 && response_length <= 16);
-   assert(function_control < 1 << 19);
-
-   desc = eot << 31 |
-          message_length << 25 |
-          response_length << 20 |
-          header_present << 19 |
-          function_control;
-
-   return tsrc_imm_ud(desc);
-}
-
-static inline struct toy_src
-tsrc_imm_mdesc_sampler(const struct toy_compiler *tc,
-                       unsigned message_length,
-                       unsigned response_length,
-                       bool header_present,
-                       unsigned simd_mode,
-                       unsigned message_type,
-                       unsigned sampler_index,
-                       unsigned binding_table_index)
-{
-   const bool eot = false;
-   uint32_t ctrl;
-
-   assert(simd_mode < 4);
-   assert(sampler_index < 16);
-   assert(binding_table_index < 256);
-
-   if (ilo_dev_gen(tc->dev) >= ILO_GEN(7)) {
-      ctrl = simd_mode << 17 |
-             message_type << 12 |
-             sampler_index << 8 |
-             binding_table_index;
-   }
-   else {
-      ctrl = simd_mode << 16 |
-             message_type << 12 |
-             sampler_index << 8 |
-             binding_table_index;
-   }
-
-   return tsrc_imm_mdesc(tc, eot, message_length,
-         response_length, header_present, ctrl);
-}
-
-static inline struct toy_src
-tsrc_imm_mdesc_data_port(const struct toy_compiler *tc,
-                         bool eot,
-                         unsigned message_length,
-                         unsigned response_length,
-                         bool header_present,
-                         bool send_write_commit_message,
-                         unsigned message_type,
-                         unsigned message_specific_control,
-                         unsigned binding_table_index)
-{
-   uint32_t ctrl;
-
-   if (ilo_dev_gen(tc->dev) >= ILO_GEN(7)) {
-      assert(!send_write_commit_message);
-      assert((message_specific_control & 0x3f00) == message_specific_control);
-
-      ctrl = message_type << 14 |
-             (message_specific_control & 0x3f00) |
-             binding_table_index;
-   }
-   else {
-      assert(!send_write_commit_message ||
-             message_type == GEN6_MSG_DP_SVB_WRITE);
-      assert((message_specific_control & 0x1f00) == message_specific_control);
-
-      ctrl = send_write_commit_message << 17 |
-             message_type << 13 |
-             (message_specific_control & 0x1f00) |
-             binding_table_index;
-   }
-
-   return tsrc_imm_mdesc(tc, eot, message_length,
-         response_length, header_present, ctrl);
-}
-
-static inline struct toy_src
-tsrc_imm_mdesc_data_port_scratch(const struct toy_compiler *tc,
-                                 unsigned message_length,
-                                 unsigned response_length,
-                                 bool write_type,
-                                 bool dword_mode,
-                                 bool invalidate_after_read,
-                                 int num_registers,
-                                 int hword_offset)
-{
-   const bool eot = false;
-   const bool header_present = true;
-   uint32_t ctrl;
-
-   assert(ilo_dev_gen(tc->dev) >= ILO_GEN(7));
-   assert(num_registers == 1 || num_registers == 2 || num_registers == 4);
-
-   ctrl = 1 << 18 |
-          write_type << 17 |
-          dword_mode << 16 |
-          invalidate_after_read << 15 |
-          (num_registers - 1) << 12 |
-          hword_offset;
-
-   return tsrc_imm_mdesc(tc, eot, message_length,
-         response_length, header_present, ctrl);
-}
-
-static inline struct toy_src
-tsrc_imm_mdesc_urb(const struct toy_compiler *tc,
-                   bool eot,
-                   unsigned message_length,
-                   unsigned response_length,
-                   bool complete,
-                   bool used,
-                   bool allocate,
-                   unsigned swizzle_control,
-                   unsigned global_offset,
-                   unsigned urb_opcode)
-{
-   const bool header_present = true;
-   uint32_t ctrl;
-
-   if (ilo_dev_gen(tc->dev) >= ILO_GEN(8)) {
-      const bool per_slot_offset = false;
-
-      ctrl = per_slot_offset << 17 |
-             swizzle_control << 15 |
-             global_offset << 4 |
-             urb_opcode;
-   } else if (ilo_dev_gen(tc->dev) >= ILO_GEN(7)) {
-      const bool per_slot_offset = false;
-
-      ctrl = per_slot_offset << 16 |
-             complete << 15 |
-             swizzle_control << 14 |
-             global_offset << 3 |
-             urb_opcode;
-   } else {
-      ctrl = complete << 15 |
-             used << 14 |
-             allocate << 13 |
-             swizzle_control << 10 |
-             global_offset << 4 |
-             urb_opcode;
-   }
-
-   return tsrc_imm_mdesc(tc, eot, message_length,
-         response_length, header_present, ctrl);
-}
-
-#endif /* TOY_HELPERS_H */
diff --git a/src/gallium/drivers/ilo/shader/toy_legalize.c b/src/gallium/drivers/ilo/shader/toy_legalize.c
deleted file mode 100644 (file)
index d5d67ab..0000000
+++ /dev/null
@@ -1,641 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "pipe/p_shader_tokens.h"
-#include "toy_compiler.h"
-#include "toy_tgsi.h"
-#include "toy_helpers.h"
-#include "toy_legalize.h"
-
-/**
- * Lower an instruction to GEN6_OPCODE_SEND(C).
- */
-void
-toy_compiler_lower_to_send(struct toy_compiler *tc, struct toy_inst *inst,
-                           bool sendc, unsigned sfid)
-{
-   assert(inst->opcode >= 128);
-
-   inst->opcode = (sendc) ? GEN6_OPCODE_SENDC : GEN6_OPCODE_SEND;
-
-   /* thread control is reserved */
-   assert(inst->thread_ctrl == 0);
-
-   assert(inst->cond_modifier == GEN6_COND_NONE);
-   inst->cond_modifier = sfid;
-}
-
-static int
-math_op_to_func(unsigned opcode)
-{
-   switch (opcode) {
-   case TOY_OPCODE_INV:    return GEN6_MATH_INV;
-   case TOY_OPCODE_LOG:    return GEN6_MATH_LOG;
-   case TOY_OPCODE_EXP:    return GEN6_MATH_EXP;
-   case TOY_OPCODE_SQRT:   return GEN6_MATH_SQRT;
-   case TOY_OPCODE_RSQ:    return GEN6_MATH_RSQ;
-   case TOY_OPCODE_SIN:    return GEN6_MATH_SIN;
-   case TOY_OPCODE_COS:    return GEN6_MATH_COS;
-   case TOY_OPCODE_FDIV:   return GEN6_MATH_FDIV;
-   case TOY_OPCODE_POW:    return GEN6_MATH_POW;
-   case TOY_OPCODE_INT_DIV_QUOTIENT:   return GEN6_MATH_INT_DIV_QUOTIENT;
-   case TOY_OPCODE_INT_DIV_REMAINDER:  return GEN6_MATH_INT_DIV_REMAINDER;
-   default:
-       assert(!"unknown math opcode");
-       return -1;
-   }
-}
-
-/**
- * Lower virtual math opcodes to GEN6_OPCODE_MATH.
- */
-void
-toy_compiler_lower_math(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   struct toy_dst tmp;
-   int i;
-
-   /* see commit 250770b74d33bb8625c780a74a89477af033d13a */
-   for (i = 0; i < ARRAY_SIZE(inst->src); i++) {
-      if (tsrc_is_null(inst->src[i]))
-         break;
-
-      /* no swizzling in align1 */
-      /* XXX how about source modifiers? */
-      if (toy_file_is_virtual(inst->src[i].file) &&
-          !tsrc_is_swizzled(inst->src[i]) &&
-          !inst->src[i].absolute &&
-          !inst->src[i].negate)
-         continue;
-
-      tmp = tdst_type(tc_alloc_tmp(tc), inst->src[i].type);
-      tc_MOV(tc, tmp, inst->src[i]);
-      inst->src[i] = tsrc_from(tmp);
-   }
-
-   /* FC[0:3] */
-   assert(inst->cond_modifier == GEN6_COND_NONE);
-   inst->cond_modifier = math_op_to_func(inst->opcode);
-   /* FC[4:5] */
-   assert(inst->thread_ctrl == 0);
-   inst->thread_ctrl = 0;
-
-   inst->opcode = GEN6_OPCODE_MATH;
-   tc_move_inst(tc, inst);
-
-   /* no writemask in align1 */
-   if (inst->dst.writemask != TOY_WRITEMASK_XYZW) {
-      struct toy_dst dst = inst->dst;
-      struct toy_inst *inst2;
-
-      tmp = tc_alloc_tmp(tc);
-      tmp.type = inst->dst.type;
-      inst->dst = tmp;
-
-      inst2 = tc_MOV(tc, dst, tsrc_from(tmp));
-      inst2->pred_ctrl = inst->pred_ctrl;
-   }
-}
-
-static uint32_t
-absolute_imm(uint32_t imm32, enum toy_type type)
-{
-   union fi val = { .ui = imm32 };
-
-   switch (type) {
-   case TOY_TYPE_F:
-      val.f = fabs(val.f);
-      break;
-   case TOY_TYPE_D:
-      if (val.i < 0)
-         val.i = -val.i;
-      break;
-   case TOY_TYPE_W:
-      if ((int16_t) (val.ui & 0xffff) < 0)
-         val.i = -((int16_t) (val.ui & 0xffff));
-      break;
-   case TOY_TYPE_V:
-      assert(!"cannot take absoulte of immediates of type V");
-      break;
-   default:
-      break;
-   }
-
-   return val.ui;
-}
-
-static uint32_t
-negate_imm(uint32_t imm32, enum toy_type type)
-{
-   union fi val = { .ui = imm32 };
-
-   switch (type) {
-   case TOY_TYPE_F:
-      val.f = -val.f;
-      break;
-   case TOY_TYPE_D:
-   case TOY_TYPE_UD:
-      val.i = -val.i;
-      break;
-   case TOY_TYPE_W:
-   case TOY_TYPE_UW:
-      val.i = -((int16_t) (val.ui & 0xffff));
-      break;
-   default:
-      assert(!"negate immediate of unknown type");
-      break;
-   }
-
-   return val.ui;
-}
-
-static void
-validate_imm(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   bool move_inst = false;
-   int i;
-
-   for (i = 0; i < ARRAY_SIZE(inst->src); i++) {
-      struct toy_dst tmp;
-
-      if (tsrc_is_null(inst->src[i]))
-         break;
-
-      if (inst->src[i].file != TOY_FILE_IMM)
-         continue;
-
-      if (inst->src[i].absolute) {
-         inst->src[i].val32 =
-            absolute_imm(inst->src[i].val32, inst->src[i].type);
-         inst->src[i].absolute = false;
-      }
-
-      if (inst->src[i].negate) {
-         inst->src[i].val32 =
-            negate_imm(inst->src[i].val32, inst->src[i].type);
-         inst->src[i].negate = false;
-      }
-
-      /* this is the last operand */
-      if (i + 1 == ARRAY_SIZE(inst->src) || tsrc_is_null(inst->src[i + 1]))
-         break;
-
-      /* need to use a temp if this imm is not the last operand */
-      /* TODO we should simply swap the operands if the op is commutative */
-      tmp = tc_alloc_tmp(tc);
-      tmp = tdst_type(tmp, inst->src[i].type);
-      tc_MOV(tc, tmp, inst->src[i]);
-      inst->src[i] = tsrc_from(tmp);
-
-      move_inst = true;
-   }
-
-   if (move_inst)
-      tc_move_inst(tc, inst);
-}
-
-static void
-lower_opcode_mul(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   const enum toy_type inst_type = inst->dst.type;
-   const struct toy_dst acc0 =
-      tdst_type(tdst(TOY_FILE_ARF, GEN6_ARF_ACC0, 0), inst_type);
-   struct toy_inst *inst2;
-
-   /* only need to take care of integer multiplications */
-   if (inst_type != TOY_TYPE_UD && inst_type != TOY_TYPE_D)
-      return;
-
-   /* acc0 = (src0 & 0x0000ffff) * src1 */
-   tc_MUL(tc, acc0, inst->src[0], inst->src[1]);
-
-   /* acc0 = (src0 & 0xffff0000) * src1 + acc0 */
-   inst2 = tc_add2(tc, GEN6_OPCODE_MACH, tdst_type(tdst_null(), inst_type),
-         inst->src[0], inst->src[1]);
-   inst2->acc_wr_ctrl = true;
-
-   /* dst = acc0 & 0xffffffff */
-   tc_MOV(tc, inst->dst, tsrc_from(acc0));
-
-   tc_discard_inst(tc, inst);
-}
-
-static void
-lower_opcode_mac(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   const enum toy_type inst_type = inst->dst.type;
-
-   if (inst_type != TOY_TYPE_UD && inst_type != TOY_TYPE_D) {
-      const struct toy_dst acc0 = tdst(TOY_FILE_ARF, GEN6_ARF_ACC0, 0);
-
-      tc_MOV(tc, acc0, inst->src[2]);
-      inst->src[2] = tsrc_null();
-      tc_move_inst(tc, inst);
-   }
-   else {
-      struct toy_dst tmp = tdst_type(tc_alloc_tmp(tc), inst_type);
-      struct toy_inst *inst2;
-
-      inst2 = tc_MUL(tc, tmp, inst->src[0], inst->src[1]);
-      lower_opcode_mul(tc, inst2);
-
-      tc_ADD(tc, inst->dst, tsrc_from(tmp), inst->src[2]);
-
-      tc_discard_inst(tc, inst);
-   }
-}
-
-/**
- * Legalize the instructions for register allocation.
- */
-void
-toy_compiler_legalize_for_ra(struct toy_compiler *tc)
-{
-   struct toy_inst *inst;
-
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      switch (inst->opcode) {
-      case GEN6_OPCODE_MAC:
-         lower_opcode_mac(tc, inst);
-         break;
-      case GEN6_OPCODE_MAD:
-         /* TODO operands must be floats */
-         break;
-      case GEN6_OPCODE_MUL:
-         lower_opcode_mul(tc, inst);
-         break;
-      default:
-         if (inst->opcode > TOY_OPCODE_LAST_HW)
-            tc_fail(tc, "internal opcodes not lowered");
-      }
-   }
-
-   /* loop again as the previous pass may add new instructions */
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      validate_imm(tc, inst);
-   }
-}
-
-static void
-patch_while_jip(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   struct toy_inst *inst2;
-   int nest_level, dist;
-
-   nest_level = 0;
-   dist = -1;
-
-   /* search backward */
-   LIST_FOR_EACH_ENTRY_FROM_REV(inst2, inst->list.prev,
-         &tc->instructions, list) {
-      if (inst2->marker) {
-         if (inst2->opcode == TOY_OPCODE_DO) {
-            if (nest_level) {
-               nest_level--;
-            }
-            else {
-               /* the following instruction */
-               dist++;
-               break;
-            }
-         }
-
-         continue;
-      }
-
-      if (inst2->opcode == GEN6_OPCODE_WHILE)
-         nest_level++;
-
-      dist--;
-   }
-
-   if (ilo_dev_gen(tc->dev) >= ILO_GEN(8))
-      inst->src[1] = tsrc_imm_d(dist * 16);
-   else if (ilo_dev_gen(tc->dev) >= ILO_GEN(7))
-      inst->src[1] = tsrc_imm_w(dist * 2);
-   else
-      inst->dst = tdst_imm_w(dist * 2);
-}
-
-static void
-patch_if_else_jip(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   struct toy_inst *inst2;
-   int nest_level, dist;
-   int jip, uip;
-
-   nest_level = 0;
-   dist = 1;
-   jip = 0;
-   uip = 0;
-
-   /* search forward */
-   LIST_FOR_EACH_ENTRY_FROM(inst2, inst->list.next, &tc->instructions, list) {
-      if (inst2->marker)
-         continue;
-
-      if (inst2->opcode == GEN6_OPCODE_ENDIF) {
-         if (nest_level) {
-            nest_level--;
-         }
-         else {
-            uip = dist * 2;
-            if (!jip)
-               jip = uip;
-            break;
-         }
-      }
-      else if (inst2->opcode == GEN6_OPCODE_ELSE &&
-               inst->opcode == GEN6_OPCODE_IF) {
-         if (!nest_level) {
-            /* the following instruction */
-            jip = (dist + 1) * 2;
-
-            if (ilo_dev_gen(tc->dev) == ILO_GEN(6)) {
-               uip = jip;
-               break;
-            }
-         }
-      }
-      else if (inst2->opcode == GEN6_OPCODE_IF) {
-         nest_level++;
-      }
-
-      dist++;
-   }
-
-   if (ilo_dev_gen(tc->dev) >= ILO_GEN(8)) {
-      inst->dst.type = TOY_TYPE_D;
-      inst->src[0] = tsrc_imm_d(uip * 8);
-      inst->src[1] = tsrc_imm_d(jip * 8);
-   } else if (ilo_dev_gen(tc->dev) >= ILO_GEN(7)) {
-      /* what should the type be? */
-      inst->dst.type = TOY_TYPE_D;
-      inst->src[0].type = TOY_TYPE_D;
-      inst->src[1] = tsrc_imm_d(uip << 16 | jip);
-   } else {
-      inst->dst = tdst_imm_w(jip);
-   }
-}
-
-static void
-patch_endif_jip(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   struct toy_inst *inst2;
-   bool found = false;
-   int dist = 1;
-
-   /* search forward for instructions that may enable channels */
-   LIST_FOR_EACH_ENTRY_FROM(inst2, inst->list.next, &tc->instructions, list) {
-      if (inst2->marker)
-         continue;
-
-      switch (inst2->opcode) {
-      case GEN6_OPCODE_ENDIF:
-      case GEN6_OPCODE_ELSE:
-      case GEN6_OPCODE_WHILE:
-         found = true;
-         break;
-      default:
-         break;
-      }
-
-      if (found)
-         break;
-
-      dist++;
-   }
-
-   /* should we set dist to (dist - 1) or 1? */
-   if (!found)
-      dist = 1;
-
-   if (ilo_dev_gen(tc->dev) >= ILO_GEN(8))
-      inst->src[1] = tsrc_imm_d(dist * 16);
-   else if (ilo_dev_gen(tc->dev) >= ILO_GEN(7))
-      inst->src[1] = tsrc_imm_w(dist * 2);
-   else
-      inst->dst = tdst_imm_w(dist * 2);
-}
-
-static void
-patch_break_continue_jip(struct toy_compiler *tc, struct toy_inst *inst)
-{
-   struct toy_inst *inst2, *inst3;
-   int nest_level, dist, jip, uip;
-
-   nest_level = 0;
-   dist = 1;
-   jip = 1 * 2;
-   uip = 1 * 2;
-
-   /* search forward */
-   LIST_FOR_EACH_ENTRY_FROM(inst2, inst->list.next, &tc->instructions, list) {
-      if (inst2->marker) {
-         if (inst2->opcode == TOY_OPCODE_DO)
-            nest_level++;
-         continue;
-      }
-
-      if (inst2->opcode == GEN6_OPCODE_ELSE ||
-          inst2->opcode == GEN6_OPCODE_ENDIF ||
-          inst2->opcode == GEN6_OPCODE_WHILE) {
-         jip = dist * 2;
-         break;
-      }
-
-      dist++;
-   }
-
-   /* go on to determine uip */
-   inst3 = inst2;
-   LIST_FOR_EACH_ENTRY_FROM(inst2, &inst3->list, &tc->instructions, list) {
-      if (inst2->marker) {
-         if (inst2->opcode == TOY_OPCODE_DO)
-            nest_level++;
-         continue;
-      }
-
-      if (inst2->opcode == GEN6_OPCODE_WHILE) {
-         if (nest_level) {
-            nest_level--;
-         }
-         else {
-            /* the following instruction */
-            if (ilo_dev_gen(tc->dev) == ILO_GEN(6) &&
-                inst->opcode == GEN6_OPCODE_BREAK)
-               dist++;
-
-            uip = dist * 2;
-            break;
-         }
-      }
-
-      dist++;
-   }
-
-   /* should the type be D or W? */
-   inst->dst.type = TOY_TYPE_D;
-   if (ilo_dev_gen(tc->dev) >= ILO_GEN(8)) {
-      inst->src[0] = tsrc_imm_d(uip * 8);
-      inst->src[1] = tsrc_imm_d(jip * 8);
-   } else {
-      inst->src[0].type = TOY_TYPE_D;
-      inst->src[1] = tsrc_imm_d(uip << 16 | jip);
-   }
-}
-
-/**
- * Legalize the instructions for assembling.
- */
-void
-toy_compiler_legalize_for_asm(struct toy_compiler *tc)
-{
-   struct toy_inst *inst;
-   int pc = 0;
-
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      int i;
-
-      pc++;
-
-      /*
-       * From the Sandy Bridge PRM, volume 4 part 2, page 112:
-       *
-       *     "Specifically, for instructions with a single source, it only
-       *      uses the first source operand <src0>. In this case, the second
-       *      source operand <src1> must be set to null and also with the same
-       *      type as the first source operand <src0>.  It is a special case
-       *      when <src0> is an immediate, as an immediate <src0> uses DW3 of
-       *      the instruction word, which is normally used by <src1>.  In this
-       *      case, <src1> must be programmed with register file ARF and the
-       *      same data type as <src0>."
-       *
-       * Since we already fill unused operands with null, we only need to take
-       * care of the type.
-       */
-      if (tsrc_is_null(inst->src[1]))
-         inst->src[1].type = inst->src[0].type;
-
-      switch (inst->opcode) {
-      case GEN6_OPCODE_MATH:
-         /* math does not support align16 nor exec_size > 8 */
-         inst->access_mode = GEN6_ALIGN_1;
-
-         if (inst->exec_size == GEN6_EXECSIZE_16) {
-            /*
-             * From the Ivy Bridge PRM, volume 4 part 3, page 192:
-             *
-             *     "INT DIV function does not support SIMD16."
-             */
-            if (ilo_dev_gen(tc->dev) < ILO_GEN(7) ||
-                inst->cond_modifier == GEN6_MATH_INT_DIV_QUOTIENT ||
-                inst->cond_modifier == GEN6_MATH_INT_DIV_REMAINDER) {
-               struct toy_inst *inst2;
-
-               inst->exec_size = GEN6_EXECSIZE_8;
-               inst->qtr_ctrl = GEN6_QTRCTRL_1Q;
-
-               inst2 = tc_duplicate_inst(tc, inst);
-               inst2->qtr_ctrl = GEN6_QTRCTRL_2Q;
-               inst2->dst = tdst_offset(inst2->dst, 1, 0);
-               inst2->src[0] = tsrc_offset(inst2->src[0], 1, 0);
-               if (!tsrc_is_null(inst2->src[1]))
-                  inst2->src[1] = tsrc_offset(inst2->src[1], 1, 0);
-
-               pc++;
-            }
-         }
-         break;
-      case GEN6_OPCODE_IF:
-         if (ilo_dev_gen(tc->dev) >= ILO_GEN(7) &&
-             inst->cond_modifier != GEN6_COND_NONE) {
-            struct toy_inst *inst2;
-
-            inst2 = tc_duplicate_inst(tc, inst);
-
-            /* replace the original IF by CMP */
-            inst->opcode = GEN6_OPCODE_CMP;
-
-            /* predicate control instead of condition modifier */
-            inst2->dst = tdst_null();
-            inst2->src[0] = tsrc_null();
-            inst2->src[1] = tsrc_null();
-            inst2->cond_modifier = GEN6_COND_NONE;
-            inst2->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-
-            pc++;
-         }
-         break;
-      default:
-         break;
-      }
-
-      /* MRF to GRF */
-      if (ilo_dev_gen(tc->dev) >= ILO_GEN(7)) {
-         for (i = 0; i < ARRAY_SIZE(inst->src); i++) {
-            if (inst->src[i].file != TOY_FILE_MRF)
-               continue;
-            else if (tsrc_is_null(inst->src[i]))
-               break;
-
-            inst->src[i].file = TOY_FILE_GRF;
-         }
-
-         if (inst->dst.file == TOY_FILE_MRF)
-            inst->dst.file = TOY_FILE_GRF;
-      }
-   }
-
-   tc->num_instructions = pc;
-
-   /* set JIP/UIP */
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      switch (inst->opcode) {
-      case GEN6_OPCODE_IF:
-      case GEN6_OPCODE_ELSE:
-         patch_if_else_jip(tc, inst);
-         break;
-      case GEN6_OPCODE_ENDIF:
-         patch_endif_jip(tc, inst);
-         break;
-      case GEN6_OPCODE_WHILE:
-         patch_while_jip(tc, inst);
-         break;
-      case GEN6_OPCODE_BREAK:
-      case GEN6_OPCODE_CONT:
-         patch_break_continue_jip(tc, inst);
-         break;
-      default:
-         break;
-      }
-   }
-}
diff --git a/src/gallium/drivers/ilo/shader/toy_legalize.h b/src/gallium/drivers/ilo/shader/toy_legalize.h
deleted file mode 100644 (file)
index 8e2a120..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef TOY_LEGALIZE_H
-#define TOY_LEGALIZE_H
-
-#include "toy_compiler.h"
-#include "toy_tgsi.h"
-
-void
-toy_compiler_lower_to_send(struct toy_compiler *tc, struct toy_inst *inst,
-                           bool sendc, unsigned sfid);
-
-void
-toy_compiler_lower_math(struct toy_compiler *tc, struct toy_inst *inst);
-
-void
-toy_compiler_allocate_registers(struct toy_compiler *tc,
-                                int start_grf, int end_grf,
-                                int num_grf_per_vrf);
-
-void
-toy_compiler_legalize_for_ra(struct toy_compiler *tc);
-
-void
-toy_compiler_legalize_for_asm(struct toy_compiler *tc);
-
-#endif /* TOY_LEGALIZE_H */
diff --git a/src/gallium/drivers/ilo/shader/toy_legalize_ra.c b/src/gallium/drivers/ilo/shader/toy_legalize_ra.c
deleted file mode 100644 (file)
index 0499874..0000000
+++ /dev/null
@@ -1,628 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include <stdlib.h> /* for qsort() */
-#include "toy_compiler.h"
-#include "toy_legalize.h"
-
-/**
- * Live interval of a VRF register.
- */
-struct linear_scan_live_interval {
-   int vrf;
-   int startpoint;
-   int endpoint;
-
-   /*
-    * should this be assigned a consecutive register of the previous
-    * interval's?
-    */
-   bool consecutive;
-
-   int reg;
-
-   struct list_head list;
-};
-
-/**
- * Linear scan.
- */
-struct linear_scan {
-   struct linear_scan_live_interval *intervals;
-   int max_vrf, num_vrfs;
-
-   int num_regs;
-
-   struct list_head active_list;
-   int *free_regs;
-   int num_free_regs;
-
-   int *vrf_mapping;
-};
-
-/**
- * Return a chunk of registers to the free register pool.
- */
-static void
-linear_scan_free_regs(struct linear_scan *ls, int reg, int count)
-{
-   unsigned i;
-
-   for (i = 0; i < count; i++)
-      ls->free_regs[ls->num_free_regs++] = reg + count - 1 - i;
-}
-
-static int
-linear_scan_compare_regs(const void *elem1, const void *elem2)
-{
-   const int *reg1 = elem1;
-   const int *reg2 = elem2;
-
-   /* in reverse order */
-   return (*reg2 - *reg1);
-}
-
-/**
- * Allocate a chunk of registers from the free register pool.
- */
-static int
-linear_scan_allocate_regs(struct linear_scan *ls, int count)
-{
-   bool sorted = false;
-   int reg;
-
-   /* simple cases */
-   if (count > ls->num_free_regs)
-      return -1;
-   else if (count == 1)
-      return ls->free_regs[--ls->num_free_regs];
-
-   /* TODO a free register pool */
-   /* TODO reserve some regs for spilling */
-   while (true) {
-      bool found = false;
-      int start;
-
-      /*
-       * find a chunk of registers that have consecutive register
-       * numbers
-       */
-      for (start = ls->num_free_regs - 1; start >= count - 1; start--) {
-         int i;
-
-         for (i = 1; i < count; i++) {
-            if (ls->free_regs[start - i] != ls->free_regs[start] + i)
-               break;
-         }
-
-         if (i >= count) {
-            found = true;
-            break;
-         }
-      }
-
-      if (found) {
-         reg = ls->free_regs[start];
-
-         if (start != ls->num_free_regs - 1) {
-            start++;
-            memmove(&ls->free_regs[start - count],
-                    &ls->free_regs[start],
-                    sizeof(*ls->free_regs) * (ls->num_free_regs - start));
-         }
-         ls->num_free_regs -= count;
-         break;
-      }
-      else if (!sorted) {
-         /* sort and retry */
-         qsort(ls->free_regs, ls->num_free_regs, sizeof(*ls->free_regs),
-               linear_scan_compare_regs);
-         sorted = true;
-      }
-      else {
-         /* failed */
-         reg = -1;
-         break;
-      }
-   }
-
-   return reg;
-}
-
-/**
- * Add an interval to the active list.
- */
-static void
-linear_scan_add_active(struct linear_scan *ls,
-                       struct linear_scan_live_interval *interval)
-{
-   struct linear_scan_live_interval *pos;
-
-   /* keep the active list sorted by endpoints */
-   LIST_FOR_EACH_ENTRY(pos, &ls->active_list, list) {
-      if (pos->endpoint >= interval->endpoint)
-         break;
-   }
-
-   list_addtail(&interval->list, &pos->list);
-}
-
-/**
- * Remove an interval from the active list.
- */
-static void
-linear_scan_remove_active(struct linear_scan *ls,
-                          struct linear_scan_live_interval *interval)
-{
-   list_del(&interval->list);
-}
-
-/**
- * Remove intervals that are no longer active from the active list.
- */
-static void
-linear_scan_expire_active(struct linear_scan *ls, int pc)
-{
-   struct linear_scan_live_interval *interval, *next;
-
-   LIST_FOR_EACH_ENTRY_SAFE(interval, next, &ls->active_list, list) {
-      /*
-       * since we sort intervals on the active list by their endpoints, we
-       * know that this and the rest of the intervals are still active.
-       */
-      if (interval->endpoint >= pc)
-         break;
-
-      linear_scan_remove_active(ls, interval);
-
-      /* recycle the reg */
-      linear_scan_free_regs(ls, interval->reg, 1);
-   }
-}
-
-/**
- * Spill an interval.
- */
-static void
-linear_scan_spill(struct linear_scan *ls,
-                  struct linear_scan_live_interval *interval,
-                  bool is_active)
-{
-   assert(!"no spilling support");
-}
-
-/**
- * Spill a range of intervals.
- */
-static void
-linear_scan_spill_range(struct linear_scan *ls, int first, int count)
-{
-   unsigned i;
-
-   for (i = 0; i < count; i++) {
-      struct linear_scan_live_interval *interval = &ls->intervals[first + i];
-
-      linear_scan_spill(ls, interval, false);
-   }
-}
-
-/**
- * Perform linear scan to allocate registers for the intervals.
- */
-static bool
-linear_scan_run(struct linear_scan *ls)
-{
-   int i;
-
-   i = 0;
-   while (i < ls->num_vrfs) {
-      struct linear_scan_live_interval *first = &ls->intervals[i];
-      int reg, count;
-
-      /*
-       * GEN6_OPCODE_SEND may write to multiple consecutive registers and we need to
-       * support that
-       */
-      for (count = 1; i + count < ls->num_vrfs; count++) {
-         const struct linear_scan_live_interval *interval =
-            &ls->intervals[i + count];
-
-         if (interval->startpoint != first->startpoint ||
-             !interval->consecutive)
-            break;
-      }
-
-      reg = linear_scan_allocate_regs(ls, count);
-
-      /* expire intervals that are no longer active and try again */
-      if (reg < 0) {
-         linear_scan_expire_active(ls, first->startpoint);
-         reg = linear_scan_allocate_regs(ls, count);
-      }
-
-      /* have to spill some intervals */
-      if (reg < 0) {
-         struct linear_scan_live_interval *last_active =
-            container_of(ls->active_list.prev,
-                  (struct linear_scan_live_interval *) NULL, list);
-
-         /* heuristically spill the interval that ends last */
-         if (count > 1 || last_active->endpoint < first->endpoint) {
-            linear_scan_spill_range(ls, i, count);
-            i += count;
-            continue;
-         }
-
-         /* make some room for the new interval */
-         linear_scan_spill(ls, last_active, true);
-         reg = linear_scan_allocate_regs(ls, count);
-         if (reg < 0) {
-            assert(!"failed to spill any register");
-            return false;
-         }
-      }
-
-      while (count--) {
-         struct linear_scan_live_interval *interval = &ls->intervals[i++];
-
-         interval->reg = reg++;
-         linear_scan_add_active(ls, interval);
-
-         ls->vrf_mapping[interval->vrf] = interval->reg;
-
-         /*
-          * this should and must be the case because of how we initialized the
-          * intervals
-          */
-         assert(interval->vrf - first->vrf == interval->reg - first->reg);
-      }
-   }
-
-   return true;
-}
-
-/**
- * Add a new interval.
- */
-static void
-linear_scan_add_live_interval(struct linear_scan *ls, int vrf, int pc)
-{
-   if (ls->intervals[vrf].vrf)
-      return;
-
-   ls->intervals[vrf].vrf = vrf;
-   ls->intervals[vrf].startpoint = pc;
-
-   ls->num_vrfs++;
-   if (vrf > ls->max_vrf)
-      ls->max_vrf = vrf;
-}
-
-/**
- * Perform (oversimplified?) live variable analysis.
- */
-static void
-linear_scan_init_live_intervals(struct linear_scan *ls,
-                                struct toy_compiler *tc)
-{
-   const struct toy_inst *inst;
-   int pc, do_pc, while_pc;
-
-   pc = 0;
-   do_pc = -1;
-   while_pc = -1;
-
-   tc_head(tc);
-   while ((inst = tc_next_no_skip(tc)) != NULL) {
-      const int startpoint = (pc <= while_pc) ? do_pc : pc;
-      const int endpoint = (pc <= while_pc) ? while_pc : pc;
-      int vrf, i;
-
-      /*
-       * assume all registers used in this outermost loop are live through out
-       * the whole loop
-       */
-      if (inst->marker) {
-         if (pc > while_pc) {
-            struct toy_inst *inst2;
-            int loop_level = 1;
-
-            assert(inst->opcode == TOY_OPCODE_DO);
-            do_pc = pc;
-            while_pc = pc + 1;
-
-            /* find the matching GEN6_OPCODE_WHILE */
-            LIST_FOR_EACH_ENTRY_FROM(inst2, tc->iter_next,
-                  &tc->instructions, list) {
-               if (inst2->marker) {
-                  assert(inst->opcode == TOY_OPCODE_DO);
-                  loop_level++;
-                  continue;
-               }
-
-               if (inst2->opcode == GEN6_OPCODE_WHILE) {
-                  loop_level--;
-                  if (!loop_level)
-                     break;
-               }
-               while_pc++;
-            }
-         }
-
-         continue;
-      }
-
-      if (inst->dst.file == TOY_FILE_VRF) {
-         int num_dst;
-
-         /* TODO this is a hack */
-         if (inst->opcode == GEN6_OPCODE_SEND ||
-             inst->opcode == GEN6_OPCODE_SENDC) {
-            const uint32_t mdesc = inst->src[1].val32;
-            int response_length = (mdesc >> 20) & 0x1f;
-
-            num_dst = response_length;
-            if (num_dst > 1 && inst->exec_size == GEN6_EXECSIZE_16)
-               num_dst /= 2;
-         }
-         else {
-            num_dst = 1;
-         }
-
-         vrf = inst->dst.val32 / TOY_REG_WIDTH;
-
-         for (i = 0; i < num_dst; i++) {
-            /* first use */
-            if (!ls->intervals[vrf].vrf)
-               linear_scan_add_live_interval(ls, vrf, startpoint);
-
-            ls->intervals[vrf].endpoint = endpoint;
-            ls->intervals[vrf].consecutive = (i > 0);
-
-            vrf++;
-         }
-      }
-
-      for (i = 0; i < ARRAY_SIZE(inst->src); i++) {
-         if (inst->src[i].file != TOY_FILE_VRF)
-            continue;
-
-         vrf = inst->src[i].val32 / TOY_REG_WIDTH;
-
-         /* first use */
-         if (!ls->intervals[vrf].vrf)
-            linear_scan_add_live_interval(ls, vrf, startpoint);
-
-         ls->intervals[vrf].endpoint = endpoint;
-      }
-
-      pc++;
-   }
-}
-
-/**
- * Clean up after performing linear scan.
- */
-static void
-linear_scan_cleanup(struct linear_scan *ls)
-{
-   FREE(ls->vrf_mapping);
-   FREE(ls->intervals);
-   FREE(ls->free_regs);
-}
-
-static int
-linear_scan_compare_live_intervals(const void *elem1, const void *elem2)
-{
-   const struct linear_scan_live_interval *interval1 = elem1;
-   const struct linear_scan_live_interval *interval2 = elem2;
-
-   /* make unused elements appear at the end */
-   if (!interval1->vrf)
-      return 1;
-   else if (!interval2->vrf)
-      return -1;
-
-   /* sort by startpoints first, and then by vrf */
-   if (interval1->startpoint != interval2->startpoint)
-      return (interval1->startpoint - interval2->startpoint);
-   else
-      return (interval1->vrf - interval2->vrf);
-
-}
-
-/**
- * Prepare for linear scan.
- */
-static bool
-linear_scan_init(struct linear_scan *ls, int num_regs,
-                 struct toy_compiler *tc)
-{
-   int num_intervals, i;
-
-   memset(ls, 0, sizeof(*ls));
-
-   /* this may be much larger than ls->num_vrfs... */
-   num_intervals = tc->next_vrf;
-   ls->intervals = CALLOC(num_intervals, sizeof(ls->intervals[0]));
-   if (!ls->intervals)
-      return false;
-
-   linear_scan_init_live_intervals(ls, tc);
-   /* sort intervals by startpoints */
-   qsort(ls->intervals, num_intervals, sizeof(*ls->intervals),
-         linear_scan_compare_live_intervals);
-
-   ls->num_regs = num_regs;
-   ls->num_free_regs = num_regs;
-
-   ls->free_regs = MALLOC(ls->num_regs * sizeof(*ls->free_regs));
-   if (!ls->free_regs) {
-      FREE(ls->intervals);
-      return false;
-   }
-
-   /* add in reverse order as we will allocate from the tail */
-   for (i = 0; i < ls->num_regs; i++)
-      ls->free_regs[i] = num_regs - i - 1;
-
-   list_inithead(&ls->active_list);
-
-   ls->vrf_mapping = CALLOC(ls->max_vrf + 1, sizeof(*ls->vrf_mapping));
-   if (!ls->vrf_mapping) {
-      FREE(ls->intervals);
-      FREE(ls->free_regs);
-      return false;
-   }
-
-   return true;
-}
-
-/**
- * Allocate registers with linear scan.
- */
-static void
-linear_scan_allocation(struct toy_compiler *tc,
-                       int start_grf, int end_grf,
-                       int num_grf_per_vrf)
-{
-   const int num_grfs = end_grf - start_grf + 1;
-   struct linear_scan ls;
-   struct toy_inst *inst;
-
-   if (!linear_scan_init(&ls, num_grfs / num_grf_per_vrf, tc))
-      return;
-
-   if (!linear_scan_run(&ls)) {
-      tc_fail(tc, "failed to allocate registers");
-      return;
-   }
-
-
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      int i;
-
-      if (inst->dst.file == TOY_FILE_VRF) {
-         const uint32_t val32 = inst->dst.val32;
-         int reg = val32 / TOY_REG_WIDTH;
-         int subreg = val32 % TOY_REG_WIDTH;
-
-         /* map to GRF */
-         reg = ls.vrf_mapping[reg] * num_grf_per_vrf + start_grf;
-
-         inst->dst.file = TOY_FILE_GRF;
-         inst->dst.val32 = reg * TOY_REG_WIDTH + subreg;
-      }
-
-      for (i = 0; i < ARRAY_SIZE(inst->src); i++) {
-         const uint32_t val32 = inst->src[i].val32;
-         int reg, subreg;
-
-         if (inst->src[i].file != TOY_FILE_VRF)
-            continue;
-
-         reg = val32 / TOY_REG_WIDTH;
-         subreg = val32 % TOY_REG_WIDTH;
-
-         /* map to GRF */
-         reg = ls.vrf_mapping[reg] * num_grf_per_vrf + start_grf;
-
-         inst->src[i].file = TOY_FILE_GRF;
-         inst->src[i].val32 = reg * TOY_REG_WIDTH + subreg;
-      }
-   }
-
-   linear_scan_cleanup(&ls);
-}
-
-/**
- * Trivially allocate registers.
- */
-static void
-trivial_allocation(struct toy_compiler *tc,
-                   int start_grf, int end_grf,
-                   int num_grf_per_vrf)
-{
-   struct toy_inst *inst;
-   int max_grf = -1;
-
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      int i;
-
-      if (inst->dst.file == TOY_FILE_VRF) {
-         const uint32_t val32 = inst->dst.val32;
-         int reg = val32 / TOY_REG_WIDTH;
-         int subreg = val32 % TOY_REG_WIDTH;
-
-         reg = reg * num_grf_per_vrf + start_grf - 1;
-
-         inst->dst.file = TOY_FILE_GRF;
-         inst->dst.val32 = reg * TOY_REG_WIDTH + subreg;
-
-         if (reg > max_grf)
-            max_grf = reg;
-      }
-
-      for (i = 0; i < ARRAY_SIZE(inst->src); i++) {
-         const uint32_t val32 = inst->src[i].val32;
-         int reg, subreg;
-
-         if (inst->src[i].file != TOY_FILE_VRF)
-            continue;
-
-         reg = val32 / TOY_REG_WIDTH;
-         subreg = val32 % TOY_REG_WIDTH;
-
-         reg = reg * num_grf_per_vrf + start_grf - 1;
-
-         inst->src[i].file = TOY_FILE_GRF;
-         inst->src[i].val32 = reg * TOY_REG_WIDTH + subreg;
-
-         if (reg > max_grf)
-            max_grf = reg;
-      }
-   }
-
-   if (max_grf + num_grf_per_vrf - 1 > end_grf)
-      tc_fail(tc, "failed to allocate registers");
-}
-
-/**
- * Allocate GRF registers to VRF registers.
- */
-void
-toy_compiler_allocate_registers(struct toy_compiler *tc,
-                                int start_grf, int end_grf,
-                                int num_grf_per_vrf)
-{
-   if (true)
-      linear_scan_allocation(tc, start_grf, end_grf, num_grf_per_vrf);
-   else
-      trivial_allocation(tc, start_grf, end_grf, num_grf_per_vrf);
-}
diff --git a/src/gallium/drivers/ilo/shader/toy_optimize.c b/src/gallium/drivers/ilo/shader/toy_optimize.c
deleted file mode 100644 (file)
index 86fab96..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "toy_compiler.h"
-#include "toy_tgsi.h"
-#include "toy_optimize.h"
-
-/**
- * This just eliminates instructions with null dst so far.
- */
-static void
-eliminate_dead_code(struct toy_compiler *tc)
-{
-   struct toy_inst *inst;
-
-   tc_head(tc);
-   while ((inst = tc_next(tc)) != NULL) {
-      switch (inst->opcode) {
-      case GEN6_OPCODE_IF:
-      case GEN6_OPCODE_ELSE:
-      case GEN6_OPCODE_ENDIF:
-      case GEN6_OPCODE_WHILE:
-      case GEN6_OPCODE_BREAK:
-      case GEN6_OPCODE_CONT:
-      case GEN6_OPCODE_SEND:
-      case GEN6_OPCODE_SENDC:
-      case GEN6_OPCODE_NOP:
-         /* never eliminated */
-         break;
-      default:
-         if (tdst_is_null(inst->dst) || !inst->dst.writemask) {
-            /* math is always GEN6_COND_NORMAL */
-            if ((inst->opcode == GEN6_OPCODE_MATH ||
-                 inst->cond_modifier == GEN6_COND_NONE) &&
-                !inst->acc_wr_ctrl)
-               tc_discard_inst(tc, inst);
-         }
-         break;
-      }
-   }
-}
-
-void
-toy_compiler_optimize(struct toy_compiler *tc)
-{
-   eliminate_dead_code(tc);
-}
diff --git a/src/gallium/drivers/ilo/shader/toy_optimize.h b/src/gallium/drivers/ilo/shader/toy_optimize.h
deleted file mode 100644 (file)
index f65198c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef TOY_OPTIMIZE_H
-#define TOY_OPTIMIZE_H
-
-#include "toy_compiler.h"
-
-void
-toy_compiler_optimize(struct toy_compiler *tc);
-
-#endif /* TOY_OPTIMIZE_H */
diff --git a/src/gallium/drivers/ilo/shader/toy_tgsi.c b/src/gallium/drivers/ilo/shader/toy_tgsi.c
deleted file mode 100644 (file)
index 4d813f0..0000000
+++ /dev/null
@@ -1,2517 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#include "tgsi/tgsi_parse.h"
-#include "tgsi/tgsi_info.h"
-#include "tgsi/tgsi_strings.h"
-#include "util/u_hash_table.h"
-#include "toy_helpers.h"
-#include "toy_tgsi.h"
-
-/* map TGSI opcode to GEN opcode 1-to-1 */
-static const struct {
-   int opcode;
-   int num_dst;
-   int num_src;
-} aos_simple_opcode_map[TGSI_OPCODE_LAST] = {
-   [TGSI_OPCODE_ARL]          = { GEN6_OPCODE_RNDD,                1, 1 },
-   [TGSI_OPCODE_MOV]          = { GEN6_OPCODE_MOV,                 1, 1 },
-   [TGSI_OPCODE_RCP]          = { TOY_OPCODE_INV,                 1, 1 },
-   [TGSI_OPCODE_RSQ]          = { TOY_OPCODE_RSQ,                 1, 1 },
-   [TGSI_OPCODE_MUL]          = { GEN6_OPCODE_MUL,                 1, 2 },
-   [TGSI_OPCODE_ADD]          = { GEN6_OPCODE_ADD,                 1, 2 },
-   [TGSI_OPCODE_DP3]          = { GEN6_OPCODE_DP3,                 1, 2 },
-   [TGSI_OPCODE_DP4]          = { GEN6_OPCODE_DP4,                 1, 2 },
-   [TGSI_OPCODE_MIN]          = { GEN6_OPCODE_SEL,                 1, 2 },
-   [TGSI_OPCODE_MAX]          = { GEN6_OPCODE_SEL,                 1, 2 },
-   /* a later pass will move src[2] to accumulator */
-   [TGSI_OPCODE_MAD]          = { GEN6_OPCODE_MAC,                 1, 3 },
-   [TGSI_OPCODE_SQRT]         = { TOY_OPCODE_SQRT,                1, 1 },
-   [TGSI_OPCODE_FRC]          = { GEN6_OPCODE_FRC,                 1, 1 },
-   [TGSI_OPCODE_FLR]          = { GEN6_OPCODE_RNDD,                1, 1 },
-   [TGSI_OPCODE_ROUND]        = { GEN6_OPCODE_RNDE,                1, 1 },
-   [TGSI_OPCODE_EX2]          = { TOY_OPCODE_EXP,                 1, 1 },
-   [TGSI_OPCODE_LG2]          = { TOY_OPCODE_LOG,                 1, 1 },
-   [TGSI_OPCODE_POW]          = { TOY_OPCODE_POW,                 1, 2 },
-   [TGSI_OPCODE_DPH]          = { GEN6_OPCODE_DPH,                 1, 2 },
-   [TGSI_OPCODE_COS]          = { TOY_OPCODE_COS,                 1, 1 },
-   [TGSI_OPCODE_KILL]         = { TOY_OPCODE_KIL,                 0, 0 },
-   [TGSI_OPCODE_SIN]          = { TOY_OPCODE_SIN,                 1, 1 },
-   [TGSI_OPCODE_ARR]          = { GEN6_OPCODE_RNDZ,                1, 1 },
-   [TGSI_OPCODE_DP2]          = { GEN6_OPCODE_DP2,                 1, 2 },
-   [TGSI_OPCODE_IF]           = { GEN6_OPCODE_IF,                  0, 1 },
-   [TGSI_OPCODE_UIF]          = { GEN6_OPCODE_IF,                  0, 1 },
-   [TGSI_OPCODE_ELSE]         = { GEN6_OPCODE_ELSE,                0, 0 },
-   [TGSI_OPCODE_ENDIF]        = { GEN6_OPCODE_ENDIF,               0, 0 },
-   [TGSI_OPCODE_I2F]          = { GEN6_OPCODE_MOV,                 1, 1 },
-   [TGSI_OPCODE_NOT]          = { GEN6_OPCODE_NOT,                 1, 1 },
-   [TGSI_OPCODE_TRUNC]        = { GEN6_OPCODE_RNDZ,                1, 1 },
-   [TGSI_OPCODE_SHL]          = { GEN6_OPCODE_SHL,                 1, 2 },
-   [TGSI_OPCODE_AND]          = { GEN6_OPCODE_AND,                 1, 2 },
-   [TGSI_OPCODE_OR]           = { GEN6_OPCODE_OR,                  1, 2 },
-   [TGSI_OPCODE_MOD]          = { TOY_OPCODE_INT_DIV_REMAINDER,   1, 2 },
-   [TGSI_OPCODE_XOR]          = { GEN6_OPCODE_XOR,                 1, 2 },
-   [TGSI_OPCODE_EMIT]         = { TOY_OPCODE_EMIT,                0, 0 },
-   [TGSI_OPCODE_ENDPRIM]      = { TOY_OPCODE_ENDPRIM,             0, 0 },
-   [TGSI_OPCODE_NOP]          = { GEN6_OPCODE_NOP,                 0, 0 },
-   [TGSI_OPCODE_KILL_IF]      = { TOY_OPCODE_KIL,                 0, 1 },
-   [TGSI_OPCODE_END]          = { GEN6_OPCODE_NOP,                 0, 0 },
-   [TGSI_OPCODE_F2I]          = { GEN6_OPCODE_MOV,                 1, 1 },
-   [TGSI_OPCODE_IDIV]         = { TOY_OPCODE_INT_DIV_QUOTIENT,    1, 2 },
-   [TGSI_OPCODE_IMAX]         = { GEN6_OPCODE_SEL,                 1, 2 },
-   [TGSI_OPCODE_IMIN]         = { GEN6_OPCODE_SEL,                 1, 2 },
-   [TGSI_OPCODE_INEG]         = { GEN6_OPCODE_MOV,                 1, 1 },
-   [TGSI_OPCODE_ISHR]         = { GEN6_OPCODE_ASR,                 1, 2 },
-   [TGSI_OPCODE_F2U]          = { GEN6_OPCODE_MOV,                 1, 1 },
-   [TGSI_OPCODE_U2F]          = { GEN6_OPCODE_MOV,                 1, 1 },
-   [TGSI_OPCODE_UADD]         = { GEN6_OPCODE_ADD,                 1, 2 },
-   [TGSI_OPCODE_UDIV]         = { TOY_OPCODE_INT_DIV_QUOTIENT,    1, 2 },
-   /* a later pass will move src[2] to accumulator */
-   [TGSI_OPCODE_UMAD]         = { GEN6_OPCODE_MAC,                 1, 3 },
-   [TGSI_OPCODE_UMAX]         = { GEN6_OPCODE_SEL,                 1, 2 },
-   [TGSI_OPCODE_UMIN]         = { GEN6_OPCODE_SEL,                 1, 2 },
-   [TGSI_OPCODE_UMOD]         = { TOY_OPCODE_INT_DIV_REMAINDER,   1, 2 },
-   [TGSI_OPCODE_UMUL]         = { GEN6_OPCODE_MUL,                 1, 2 },
-   [TGSI_OPCODE_USHR]         = { GEN6_OPCODE_SHR,                 1, 2 },
-   [TGSI_OPCODE_UARL]         = { GEN6_OPCODE_MOV,                 1, 1 },
-   [TGSI_OPCODE_IABS]         = { GEN6_OPCODE_MOV,                 1, 1 },
-};
-
-static void
-aos_simple(struct toy_compiler *tc,
-           const struct tgsi_full_instruction *tgsi_inst,
-           struct toy_dst *dst,
-           struct toy_src *src)
-{
-   struct toy_inst *inst;
-   int opcode;
-   int cond_modifier = GEN6_COND_NONE;
-   int num_dst = tgsi_inst->Instruction.NumDstRegs;
-   int num_src = tgsi_inst->Instruction.NumSrcRegs;
-   int i;
-
-   opcode = aos_simple_opcode_map[tgsi_inst->Instruction.Opcode].opcode;
-   assert(num_dst == aos_simple_opcode_map[tgsi_inst->Instruction.Opcode].num_dst);
-   assert(num_src == aos_simple_opcode_map[tgsi_inst->Instruction.Opcode].num_src);
-   if (!opcode) {
-      assert(!"invalid aos_simple() call");
-      return;
-   }
-
-   /* no need to emit nop */
-   if (opcode == GEN6_OPCODE_NOP)
-      return;
-
-   inst = tc_add(tc);
-   if (!inst)
-      return;
-
-   inst->opcode = opcode;
-
-   switch (tgsi_inst->Instruction.Opcode) {
-   case TGSI_OPCODE_MIN:
-   case TGSI_OPCODE_IMIN:
-   case TGSI_OPCODE_UMIN:
-      cond_modifier = GEN6_COND_L;
-      break;
-   case TGSI_OPCODE_MAX:
-   case TGSI_OPCODE_IMAX:
-   case TGSI_OPCODE_UMAX:
-      cond_modifier = GEN6_COND_GE;
-      break;
-   case TGSI_OPCODE_IABS:
-      src[0] = tsrc_absolute(src[0]);
-      break;
-   case TGSI_OPCODE_IF:
-      cond_modifier = GEN6_COND_NZ;
-      num_src = 2;
-      assert(src[0].type == TOY_TYPE_F);
-      src[0] = tsrc_swizzle1(src[0], TOY_SWIZZLE_X);
-      src[1] = tsrc_imm_f(0.0f);
-      break;
-   case TGSI_OPCODE_UIF:
-      cond_modifier = GEN6_COND_NZ;
-      num_src = 2;
-      assert(src[0].type == TOY_TYPE_UD);
-      src[0] = tsrc_swizzle1(src[0], TOY_SWIZZLE_X);
-      src[1] = tsrc_imm_d(0);
-      break;
-   case TGSI_OPCODE_INEG:
-      src[0] = tsrc_negate(src[0]);
-      break;
-   case TGSI_OPCODE_RCP:
-   case TGSI_OPCODE_RSQ:
-   case TGSI_OPCODE_EX2:
-   case TGSI_OPCODE_LG2:
-   case TGSI_OPCODE_COS:
-   case TGSI_OPCODE_SIN:
-      src[0] = tsrc_swizzle1(src[0], TOY_SWIZZLE_X);
-      break;
-   case TGSI_OPCODE_POW:
-      src[0] = tsrc_swizzle1(src[0], TOY_SWIZZLE_X);
-      src[1] = tsrc_swizzle1(src[1], TOY_SWIZZLE_X);
-      break;
-   }
-
-   inst->cond_modifier = cond_modifier;
-
-   if (num_dst) {
-      assert(num_dst == 1);
-      inst->dst = dst[0];
-   }
-
-   assert(num_src <= ARRAY_SIZE(inst->src));
-   for (i = 0; i < num_src; i++)
-      inst->src[i] = src[i];
-}
-
-static void
-aos_set_on_cond(struct toy_compiler *tc,
-                const struct tgsi_full_instruction *tgsi_inst,
-                struct toy_dst *dst,
-                struct toy_src *src)
-{
-   struct toy_inst *inst;
-   int cond;
-   struct toy_src zero, one;
-
-   switch (tgsi_inst->Instruction.Opcode) {
-   case TGSI_OPCODE_SLT:
-   case TGSI_OPCODE_ISLT:
-   case TGSI_OPCODE_USLT:
-   case TGSI_OPCODE_FSLT:
-      cond = GEN6_COND_L;
-      break;
-   case TGSI_OPCODE_SGE:
-   case TGSI_OPCODE_ISGE:
-   case TGSI_OPCODE_USGE:
-   case TGSI_OPCODE_FSGE:
-      cond = GEN6_COND_GE;
-      break;
-   case TGSI_OPCODE_SEQ:
-   case TGSI_OPCODE_USEQ:
-   case TGSI_OPCODE_FSEQ:
-      cond = GEN6_COND_Z;
-      break;
-   case TGSI_OPCODE_SGT:
-      cond = GEN6_COND_G;
-      break;
-   case TGSI_OPCODE_SLE:
-      cond = GEN6_COND_LE;
-      break;
-   case TGSI_OPCODE_SNE:
-   case TGSI_OPCODE_USNE:
-   case TGSI_OPCODE_FSNE:
-      cond = GEN6_COND_NZ;
-      break;
-   default:
-      assert(!"invalid aos_set_on_cond() call");
-      return;
-   }
-
-   /* note that for integer versions, all bits are set */
-   switch (dst[0].type) {
-   case TOY_TYPE_F:
-   default:
-      zero = tsrc_imm_f(0.0f);
-      one = tsrc_imm_f(1.0f);
-      break;
-   case TOY_TYPE_D:
-      zero = tsrc_imm_d(0);
-      one = tsrc_imm_d(-1);
-      break;
-   case TOY_TYPE_UD:
-      zero = tsrc_imm_ud(0);
-      one = tsrc_imm_ud(~0);
-      break;
-   }
-
-   tc_MOV(tc, dst[0], zero);
-   tc_CMP(tc, tdst_null(), src[0], src[1], cond);
-   inst = tc_MOV(tc, dst[0], one);
-   inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-}
-
-static void
-aos_compare(struct toy_compiler *tc,
-            const struct tgsi_full_instruction *tgsi_inst,
-            struct toy_dst *dst,
-            struct toy_src *src)
-{
-   struct toy_inst *inst;
-   struct toy_src zero;
-
-   switch (tgsi_inst->Instruction.Opcode) {
-   case TGSI_OPCODE_CMP:
-      zero = tsrc_imm_f(0.0f);
-      break;
-   case TGSI_OPCODE_UCMP:
-      zero = tsrc_imm_ud(0);
-      break;
-   default:
-      assert(!"invalid aos_compare() call");
-      return;
-   }
-
-   tc_CMP(tc, tdst_null(), src[0], zero, GEN6_COND_L);
-   inst = tc_SEL(tc, dst[0], src[1], src[2], GEN6_COND_NONE);
-   inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-}
-
-static void
-aos_set_sign(struct toy_compiler *tc,
-             const struct tgsi_full_instruction *tgsi_inst,
-             struct toy_dst *dst,
-             struct toy_src *src)
-{
-   struct toy_inst *inst;
-   struct toy_src zero, one, neg_one;
-
-   switch (tgsi_inst->Instruction.Opcode) {
-   case TGSI_OPCODE_SSG:
-      zero = tsrc_imm_f(0.0f);
-      one = tsrc_imm_f(1.0f);
-      neg_one = tsrc_imm_f(-1.0f);
-      break;
-   case TGSI_OPCODE_ISSG:
-      zero = tsrc_imm_d(0);
-      one = tsrc_imm_d(1);
-      neg_one = tsrc_imm_d(-1);
-      break;
-   default:
-      assert(!"invalid aos_set_sign() call");
-      return;
-   }
-
-   tc_MOV(tc, dst[0], zero);
-
-   tc_CMP(tc, tdst_null(), src[0], zero, GEN6_COND_G);
-   inst = tc_MOV(tc, dst[0], one);
-   inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-
-   tc_CMP(tc, tdst_null(), src[0], zero, GEN6_COND_L);
-   inst = tc_MOV(tc, dst[0], neg_one);
-   inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-}
-
-static void
-aos_tex(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   struct toy_inst *inst;
-   enum toy_opcode opcode;
-   int i;
-
-   switch (tgsi_inst->Instruction.Opcode) {
-   case TGSI_OPCODE_TEX:
-      opcode = TOY_OPCODE_TGSI_TEX;
-      break;
-   case TGSI_OPCODE_TXD:
-      opcode = TOY_OPCODE_TGSI_TXD;
-      break;
-   case TGSI_OPCODE_TXP:
-      opcode = TOY_OPCODE_TGSI_TXP;
-      break;
-   case TGSI_OPCODE_TXB:
-      opcode = TOY_OPCODE_TGSI_TXB;
-      break;
-   case TGSI_OPCODE_TXL:
-      opcode = TOY_OPCODE_TGSI_TXL;
-      break;
-   case TGSI_OPCODE_TXF:
-      opcode = TOY_OPCODE_TGSI_TXF;
-      break;
-   case TGSI_OPCODE_TXQ:
-      opcode = TOY_OPCODE_TGSI_TXQ;
-      break;
-   case TGSI_OPCODE_TXQ_LZ:
-      opcode = TOY_OPCODE_TGSI_TXQ_LZ;
-      break;
-   case TGSI_OPCODE_TEX2:
-      opcode = TOY_OPCODE_TGSI_TEX2;
-      break;
-   case TGSI_OPCODE_TXB2:
-      opcode = TOY_OPCODE_TGSI_TXB2;
-      break;
-   case TGSI_OPCODE_TXL2:
-      opcode = TOY_OPCODE_TGSI_TXL2;
-      break;
-   default:
-      assert(!"unsupported texturing opcode");
-      return;
-      break;
-   }
-
-   assert(tgsi_inst->Instruction.Texture);
-
-   inst = tc_add(tc);
-   inst->opcode = opcode;
-   inst->tex.target = tgsi_inst->Texture.Texture;
-
-   assert(tgsi_inst->Instruction.NumSrcRegs <= ARRAY_SIZE(inst->src));
-   assert(tgsi_inst->Instruction.NumDstRegs == 1);
-
-   inst->dst = dst[0];
-   for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++)
-      inst->src[i] = src[i];
-
-   for (i = 0; i < tgsi_inst->Texture.NumOffsets; i++)
-      tc_fail(tc, "texelFetchOffset unsupported");
-}
-
-static void
-aos_sample(struct toy_compiler *tc,
-           const struct tgsi_full_instruction *tgsi_inst,
-           struct toy_dst *dst,
-           struct toy_src *src)
-{
-   struct toy_inst *inst;
-   enum toy_opcode opcode;
-   int i;
-
-   assert(!"sampling untested");
-
-   switch (tgsi_inst->Instruction.Opcode) {
-   case TGSI_OPCODE_SAMPLE:
-      opcode = TOY_OPCODE_TGSI_SAMPLE;
-      break;
-   case TGSI_OPCODE_SAMPLE_I:
-      opcode = TOY_OPCODE_TGSI_SAMPLE_I;
-      break;
-   case TGSI_OPCODE_SAMPLE_I_MS:
-      opcode = TOY_OPCODE_TGSI_SAMPLE_I_MS;
-      break;
-   case TGSI_OPCODE_SAMPLE_B:
-      opcode = TOY_OPCODE_TGSI_SAMPLE_B;
-      break;
-   case TGSI_OPCODE_SAMPLE_C:
-      opcode = TOY_OPCODE_TGSI_SAMPLE_C;
-      break;
-   case TGSI_OPCODE_SAMPLE_C_LZ:
-      opcode = TOY_OPCODE_TGSI_SAMPLE_C_LZ;
-      break;
-   case TGSI_OPCODE_SAMPLE_D:
-      opcode = TOY_OPCODE_TGSI_SAMPLE_D;
-      break;
-   case TGSI_OPCODE_SAMPLE_L:
-      opcode = TOY_OPCODE_TGSI_SAMPLE_L;
-      break;
-   case TGSI_OPCODE_GATHER4:
-      opcode = TOY_OPCODE_TGSI_GATHER4;
-      break;
-   case TGSI_OPCODE_SVIEWINFO:
-      opcode = TOY_OPCODE_TGSI_SVIEWINFO;
-      break;
-   case TGSI_OPCODE_SAMPLE_POS:
-      opcode = TOY_OPCODE_TGSI_SAMPLE_POS;
-      break;
-   case TGSI_OPCODE_SAMPLE_INFO:
-      opcode = TOY_OPCODE_TGSI_SAMPLE_INFO;
-      break;
-   default:
-      assert(!"unsupported sampling opcode");
-      return;
-      break;
-   }
-
-   inst = tc_add(tc);
-   inst->opcode = opcode;
-
-   assert(tgsi_inst->Instruction.NumSrcRegs <= ARRAY_SIZE(inst->src));
-   assert(tgsi_inst->Instruction.NumDstRegs == 1);
-
-   inst->dst = dst[0];
-   for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++)
-      inst->src[i] = src[i];
-}
-
-static void
-aos_LIT(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   struct toy_inst *inst;
-
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_XW), tsrc_imm_f(1.0f));
-
-   if (!(dst[0].writemask & TOY_WRITEMASK_YZ))
-      return;
-
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_YZ), tsrc_imm_f(0.0f));
-
-   tc_CMP(tc, tdst_null(),
-         tsrc_swizzle1(src[0], TOY_SWIZZLE_X),
-         tsrc_imm_f(0.0f),
-         GEN6_COND_G);
-
-   inst = tc_MOV(tc,
-         tdst_writemask(dst[0], TOY_WRITEMASK_Y),
-         tsrc_swizzle1(src[0], TOY_SWIZZLE_X));
-   inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-
-   /* clamp W to (-128, 128)? */
-   inst = tc_POW(tc,
-         tdst_writemask(dst[0], TOY_WRITEMASK_Z),
-         tsrc_swizzle1(src[0], TOY_SWIZZLE_Y),
-         tsrc_swizzle1(src[0], TOY_SWIZZLE_W));
-   inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-}
-
-static void
-aos_EXP(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   struct toy_src src0 = tsrc_swizzle1(src[0], TOY_SWIZZLE_X);
-
-   if (dst[0].writemask & TOY_WRITEMASK_X) {
-      struct toy_dst tmp =
-         tdst_d(tdst_writemask(tc_alloc_tmp(tc), TOY_WRITEMASK_X));
-
-      tc_RNDD(tc, tmp, src0);
-
-      /* construct the floating point number manually */
-      tc_ADD(tc, tmp, tsrc_from(tmp), tsrc_imm_d(127));
-      tc_SHL(tc, tdst_d(tdst_writemask(dst[0], TOY_WRITEMASK_X)),
-            tsrc_from(tmp), tsrc_imm_d(23));
-   }
-
-   tc_FRC(tc, tdst_writemask(dst[0], TOY_WRITEMASK_Y), src0);
-   tc_EXP(tc, tdst_writemask(dst[0], TOY_WRITEMASK_Z), src0);
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_W), tsrc_imm_f(1.0f));
-}
-
-static void
-aos_LOG(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   struct toy_src src0 = tsrc_swizzle1(src[0], TOY_SWIZZLE_X);
-
-   if (dst[0].writemask & TOY_WRITEMASK_XY) {
-      struct toy_dst tmp;
-
-      tmp = tdst_d(tdst_writemask(tc_alloc_tmp(tc), TOY_WRITEMASK_X));
-
-      /* exponent */
-      tc_SHR(tc, tmp, tsrc_absolute(tsrc_d(src0)), tsrc_imm_d(23));
-      tc_ADD(tc, tdst_writemask(dst[0], TOY_WRITEMASK_X),
-            tsrc_from(tmp), tsrc_imm_d(-127));
-
-      /* mantissa  */
-      tc_AND(tc, tmp, tsrc_d(src0), tsrc_imm_d((1 << 23) - 1));
-      tc_OR(tc, tdst_writemask(tdst_d(dst[0]), TOY_WRITEMASK_Y),
-            tsrc_from(tmp), tsrc_imm_d(127 << 23));
-   }
-
-   tc_LOG(tc, tdst_writemask(dst[0], TOY_WRITEMASK_Z), src0);
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_W), tsrc_imm_f(1.0f));
-}
-
-static void
-aos_DST(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_X), tsrc_imm_f(1.0f));
-   tc_MUL(tc, tdst_writemask(dst[0], TOY_WRITEMASK_Y), src[0], src[1]);
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_Z), src[0]);
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_W), src[1]);
-}
-
-static void
-aos_LRP(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   struct toy_dst tmp = tc_alloc_tmp(tc);
-
-   tc_ADD(tc, tmp, tsrc_negate(src[0]), tsrc_imm_f(1.0f));
-   tc_MUL(tc, tmp, tsrc_from(tmp), src[2]);
-   tc_MAC(tc, dst[0], src[0], src[1], tsrc_from(tmp));
-}
-
-static void
-aos_DP2A(struct toy_compiler *tc,
-         const struct tgsi_full_instruction *tgsi_inst,
-         struct toy_dst *dst,
-         struct toy_src *src)
-{
-   struct toy_dst tmp = tc_alloc_tmp(tc);
-
-   assert(!"DP2A untested");
-
-   tc_DP2(tc, tmp, src[0], src[1]);
-   tc_ADD(tc, dst[0], tsrc_swizzle1(tsrc_from(tmp), TOY_SWIZZLE_X), src[2]);
-}
-
-static void
-aos_CLAMP(struct toy_compiler *tc,
-          const struct tgsi_full_instruction *tgsi_inst,
-          struct toy_dst *dst,
-          struct toy_src *src)
-{
-   assert(!"CLAMP untested");
-
-   tc_SEL(tc, dst[0], src[0], src[1], GEN6_COND_GE);
-   tc_SEL(tc, dst[0], src[2], tsrc_from(dst[0]), GEN6_COND_L);
-}
-
-static void
-aos_XPD(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   struct toy_dst tmp = tc_alloc_tmp(tc);
-
-   tc_MUL(tc, tdst_writemask(tmp, TOY_WRITEMASK_XYZ),
-         tsrc_swizzle(src[0], TOY_SWIZZLE_Z, TOY_SWIZZLE_X,
-                              TOY_SWIZZLE_Y, TOY_SWIZZLE_W),
-         tsrc_swizzle(src[1], TOY_SWIZZLE_Y, TOY_SWIZZLE_Z,
-                              TOY_SWIZZLE_X, TOY_SWIZZLE_W));
-
-   tc_MAC(tc, tdst_writemask(dst[0], TOY_WRITEMASK_XYZ),
-         tsrc_swizzle(src[0], TOY_SWIZZLE_Y, TOY_SWIZZLE_Z,
-                              TOY_SWIZZLE_X, TOY_SWIZZLE_W),
-         tsrc_swizzle(src[1], TOY_SWIZZLE_Z, TOY_SWIZZLE_X,
-                              TOY_SWIZZLE_Y, TOY_SWIZZLE_W),
-         tsrc_negate(tsrc_from(tmp)));
-
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_W),
-         tsrc_imm_f(1.0f));
-}
-
-static void
-aos_PK2H(struct toy_compiler *tc,
-         const struct tgsi_full_instruction *tgsi_inst,
-         struct toy_dst *dst,
-         struct toy_src *src)
-{
-   const struct toy_src h1 = tsrc_ud(tsrc_swizzle1(src[0], TOY_SWIZZLE_X));
-   const struct toy_src h2 = tsrc_ud(tsrc_swizzle1(src[0], TOY_SWIZZLE_Y));
-   struct toy_dst tmp = tdst_ud(tc_alloc_tmp(tc));
-
-   assert(!"PK2H untested");
-
-   tc_SHL(tc, tmp, h2, tsrc_imm_ud(16));
-   tc_OR(tc, tdst_ud(dst[0]), h1, tsrc_from(tmp));
-}
-
-static void
-aos_UP2H(struct toy_compiler *tc,
-         const struct tgsi_full_instruction *tgsi_inst,
-         struct toy_dst *dst,
-         struct toy_src *src)
-{
-   assert(!"UP2H untested");
-
-   tc_AND(tc, tdst_writemask(tdst_ud(dst[0]), TOY_WRITEMASK_XZ),
-         tsrc_ud(src[0]), tsrc_imm_ud(0xffff));
-   tc_SHR(tc, tdst_writemask(tdst_ud(dst[0]), TOY_WRITEMASK_YW),
-         tsrc_ud(src[0]), tsrc_imm_ud(16));
-}
-
-static void
-aos_SCS(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   assert(!"SCS untested");
-
-   tc_add1(tc, TOY_OPCODE_COS,
-         tdst_writemask(dst[0], TOY_WRITEMASK_X), src[0]);
-
-   tc_add1(tc, TOY_OPCODE_SIN,
-         tdst_writemask(dst[0], TOY_WRITEMASK_Y), src[0]);
-
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_Z), tsrc_imm_f(0.0f));
-   tc_MOV(tc, tdst_writemask(dst[0], TOY_WRITEMASK_W), tsrc_imm_f(1.0f));
-}
-
-static void
-aos_DIV(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   struct toy_dst tmp = tc_alloc_tmp(tc);
-
-   assert(!"DIV untested");
-
-   tc_INV(tc, tmp, src[1]);
-   tc_MUL(tc, dst[0], src[0], tsrc_from(tmp));
-}
-
-static void
-aos_BRK(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   tc_add0(tc, GEN6_OPCODE_BREAK);
-}
-
-static void
-aos_CEIL(struct toy_compiler *tc,
-         const struct tgsi_full_instruction *tgsi_inst,
-         struct toy_dst *dst,
-         struct toy_src *src)
-{
-   struct toy_dst tmp = tc_alloc_tmp(tc);
-
-   tc_RNDD(tc, tmp, tsrc_negate(src[0]));
-   tc_MOV(tc, dst[0], tsrc_negate(tsrc_from(tmp)));
-}
-
-static void
-aos_SAD(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst,
-        struct toy_src *src)
-{
-   struct toy_dst tmp = tc_alloc_tmp(tc);
-
-   assert(!"SAD untested");
-
-   tc_ADD(tc, tmp, src[0], tsrc_negate(src[1]));
-   tc_ADD(tc, dst[0], tsrc_absolute(tsrc_from(tmp)), src[2]);
-}
-
-static void
-aos_CONT(struct toy_compiler *tc,
-         const struct tgsi_full_instruction *tgsi_inst,
-         struct toy_dst *dst,
-         struct toy_src *src)
-{
-   tc_add0(tc, GEN6_OPCODE_CONT);
-}
-
-static void
-aos_BGNLOOP(struct toy_compiler *tc,
-            const struct tgsi_full_instruction *tgsi_inst,
-            struct toy_dst *dst,
-            struct toy_src *src)
-{
-   struct toy_inst *inst;
-
-   inst = tc_add0(tc, TOY_OPCODE_DO);
-   /* this is just a marker */
-   inst->marker = true;
-}
-
-static void
-aos_ENDLOOP(struct toy_compiler *tc,
-            const struct tgsi_full_instruction *tgsi_inst,
-            struct toy_dst *dst,
-            struct toy_src *src)
-{
-   tc_add0(tc, GEN6_OPCODE_WHILE);
-}
-
-static void
-aos_unsupported(struct toy_compiler *tc,
-                const struct tgsi_full_instruction *tgsi_inst,
-                struct toy_dst *dst,
-                struct toy_src *src)
-{
-   const char *name = tgsi_get_opcode_name(tgsi_inst->Instruction.Opcode);
-
-   ilo_warn("unsupported TGSI opcode: TGSI_OPCODE_%s\n", name);
-
-   tc_fail(tc, "unsupported TGSI instruction");
-}
-
-static const toy_tgsi_translate aos_translate_table[TGSI_OPCODE_LAST] = {
-   [TGSI_OPCODE_ARL]          = aos_simple,
-   [TGSI_OPCODE_MOV]          = aos_simple,
-   [TGSI_OPCODE_LIT]          = aos_LIT,
-   [TGSI_OPCODE_RCP]          = aos_simple,
-   [TGSI_OPCODE_RSQ]          = aos_simple,
-   [TGSI_OPCODE_EXP]          = aos_EXP,
-   [TGSI_OPCODE_LOG]          = aos_LOG,
-   [TGSI_OPCODE_MUL]          = aos_simple,
-   [TGSI_OPCODE_ADD]          = aos_simple,
-   [TGSI_OPCODE_DP3]          = aos_simple,
-   [TGSI_OPCODE_DP4]          = aos_simple,
-   [TGSI_OPCODE_DST]          = aos_DST,
-   [TGSI_OPCODE_MIN]          = aos_simple,
-   [TGSI_OPCODE_MAX]          = aos_simple,
-   [TGSI_OPCODE_SLT]          = aos_set_on_cond,
-   [TGSI_OPCODE_SGE]          = aos_set_on_cond,
-   [TGSI_OPCODE_MAD]          = aos_simple,
-   [TGSI_OPCODE_LRP]          = aos_LRP,
-   [TGSI_OPCODE_SQRT]         = aos_simple,
-   [TGSI_OPCODE_DP2A]         = aos_DP2A,
-   [TGSI_OPCODE_FRC]          = aos_simple,
-   [TGSI_OPCODE_CLAMP]        = aos_CLAMP,
-   [TGSI_OPCODE_FLR]          = aos_simple,
-   [TGSI_OPCODE_ROUND]        = aos_simple,
-   [TGSI_OPCODE_EX2]          = aos_simple,
-   [TGSI_OPCODE_LG2]          = aos_simple,
-   [TGSI_OPCODE_POW]          = aos_simple,
-   [TGSI_OPCODE_XPD]          = aos_XPD,
-   [TGSI_OPCODE_DPH]          = aos_simple,
-   [TGSI_OPCODE_COS]          = aos_simple,
-   [TGSI_OPCODE_DDX]          = aos_unsupported,
-   [TGSI_OPCODE_DDY]          = aos_unsupported,
-   [TGSI_OPCODE_KILL]         = aos_simple,
-   [TGSI_OPCODE_PK2H]         = aos_PK2H,
-   [TGSI_OPCODE_PK2US]        = aos_unsupported,
-   [TGSI_OPCODE_PK4B]         = aos_unsupported,
-   [TGSI_OPCODE_PK4UB]        = aos_unsupported,
-   [TGSI_OPCODE_SEQ]          = aos_set_on_cond,
-   [TGSI_OPCODE_SGT]          = aos_set_on_cond,
-   [TGSI_OPCODE_SIN]          = aos_simple,
-   [TGSI_OPCODE_SLE]          = aos_set_on_cond,
-   [TGSI_OPCODE_SNE]          = aos_set_on_cond,
-   [TGSI_OPCODE_TEX]          = aos_tex,
-   [TGSI_OPCODE_TXD]          = aos_tex,
-   [TGSI_OPCODE_TXP]          = aos_tex,
-   [TGSI_OPCODE_UP2H]         = aos_UP2H,
-   [TGSI_OPCODE_UP2US]        = aos_unsupported,
-   [TGSI_OPCODE_UP4B]         = aos_unsupported,
-   [TGSI_OPCODE_UP4UB]        = aos_unsupported,
-   [TGSI_OPCODE_ARR]          = aos_simple,
-   [TGSI_OPCODE_CAL]          = aos_unsupported,
-   [TGSI_OPCODE_RET]          = aos_unsupported,
-   [TGSI_OPCODE_SSG]          = aos_set_sign,
-   [TGSI_OPCODE_CMP]          = aos_compare,
-   [TGSI_OPCODE_SCS]          = aos_SCS,
-   [TGSI_OPCODE_TXB]          = aos_tex,
-   [TGSI_OPCODE_DIV]          = aos_DIV,
-   [TGSI_OPCODE_DP2]          = aos_simple,
-   [TGSI_OPCODE_TXL]          = aos_tex,
-   [TGSI_OPCODE_BRK]          = aos_BRK,
-   [TGSI_OPCODE_IF]           = aos_simple,
-   [TGSI_OPCODE_UIF]          = aos_simple,
-   [TGSI_OPCODE_ELSE]         = aos_simple,
-   [TGSI_OPCODE_ENDIF]        = aos_simple,
-   [TGSI_OPCODE_PUSHA]        = aos_unsupported,
-   [TGSI_OPCODE_POPA]         = aos_unsupported,
-   [TGSI_OPCODE_CEIL]         = aos_CEIL,
-   [TGSI_OPCODE_I2F]          = aos_simple,
-   [TGSI_OPCODE_NOT]          = aos_simple,
-   [TGSI_OPCODE_TRUNC]        = aos_simple,
-   [TGSI_OPCODE_SHL]          = aos_simple,
-   [TGSI_OPCODE_AND]          = aos_simple,
-   [TGSI_OPCODE_OR]           = aos_simple,
-   [TGSI_OPCODE_MOD]          = aos_simple,
-   [TGSI_OPCODE_XOR]          = aos_simple,
-   [TGSI_OPCODE_SAD]          = aos_SAD,
-   [TGSI_OPCODE_TXF]          = aos_tex,
-   [TGSI_OPCODE_TXQ]          = aos_tex,
-   [TGSI_OPCODE_CONT]         = aos_CONT,
-   [TGSI_OPCODE_EMIT]         = aos_simple,
-   [TGSI_OPCODE_ENDPRIM]      = aos_simple,
-   [TGSI_OPCODE_BGNLOOP]      = aos_BGNLOOP,
-   [TGSI_OPCODE_BGNSUB]       = aos_unsupported,
-   [TGSI_OPCODE_ENDLOOP]      = aos_ENDLOOP,
-   [TGSI_OPCODE_ENDSUB]       = aos_unsupported,
-   [TGSI_OPCODE_TXQ_LZ]       = aos_tex,
-   [TGSI_OPCODE_NOP]          = aos_simple,
-   [TGSI_OPCODE_FSEQ]         = aos_set_on_cond,
-   [TGSI_OPCODE_FSGE]         = aos_set_on_cond,
-   [TGSI_OPCODE_FSLT]         = aos_set_on_cond,
-   [TGSI_OPCODE_FSNE]         = aos_set_on_cond,
-   [TGSI_OPCODE_CALLNZ]       = aos_unsupported,
-   [TGSI_OPCODE_BREAKC]       = aos_unsupported,
-   [TGSI_OPCODE_KILL_IF]      = aos_simple,
-   [TGSI_OPCODE_END]          = aos_simple,
-   [TGSI_OPCODE_F2I]          = aos_simple,
-   [TGSI_OPCODE_IDIV]         = aos_simple,
-   [TGSI_OPCODE_IMAX]         = aos_simple,
-   [TGSI_OPCODE_IMIN]         = aos_simple,
-   [TGSI_OPCODE_INEG]         = aos_simple,
-   [TGSI_OPCODE_ISGE]         = aos_set_on_cond,
-   [TGSI_OPCODE_ISHR]         = aos_simple,
-   [TGSI_OPCODE_ISLT]         = aos_set_on_cond,
-   [TGSI_OPCODE_F2U]          = aos_simple,
-   [TGSI_OPCODE_U2F]          = aos_simple,
-   [TGSI_OPCODE_UADD]         = aos_simple,
-   [TGSI_OPCODE_UDIV]         = aos_simple,
-   [TGSI_OPCODE_UMAD]         = aos_simple,
-   [TGSI_OPCODE_UMAX]         = aos_simple,
-   [TGSI_OPCODE_UMIN]         = aos_simple,
-   [TGSI_OPCODE_UMOD]         = aos_simple,
-   [TGSI_OPCODE_UMUL]         = aos_simple,
-   [TGSI_OPCODE_USEQ]         = aos_set_on_cond,
-   [TGSI_OPCODE_USGE]         = aos_set_on_cond,
-   [TGSI_OPCODE_USHR]         = aos_simple,
-   [TGSI_OPCODE_USLT]         = aos_set_on_cond,
-   [TGSI_OPCODE_USNE]         = aos_set_on_cond,
-   [TGSI_OPCODE_SWITCH]       = aos_unsupported,
-   [TGSI_OPCODE_CASE]         = aos_unsupported,
-   [TGSI_OPCODE_DEFAULT]      = aos_unsupported,
-   [TGSI_OPCODE_ENDSWITCH]    = aos_unsupported,
-   [TGSI_OPCODE_SAMPLE]       = aos_sample,
-   [TGSI_OPCODE_SAMPLE_I]     = aos_sample,
-   [TGSI_OPCODE_SAMPLE_I_MS]  = aos_sample,
-   [TGSI_OPCODE_SAMPLE_B]     = aos_sample,
-   [TGSI_OPCODE_SAMPLE_C]     = aos_sample,
-   [TGSI_OPCODE_SAMPLE_C_LZ]  = aos_sample,
-   [TGSI_OPCODE_SAMPLE_D]     = aos_sample,
-   [TGSI_OPCODE_SAMPLE_L]     = aos_sample,
-   [TGSI_OPCODE_GATHER4]      = aos_sample,
-   [TGSI_OPCODE_SVIEWINFO]    = aos_sample,
-   [TGSI_OPCODE_SAMPLE_POS]   = aos_sample,
-   [TGSI_OPCODE_SAMPLE_INFO]  = aos_sample,
-   [TGSI_OPCODE_UARL]         = aos_simple,
-   [TGSI_OPCODE_UCMP]         = aos_compare,
-   [TGSI_OPCODE_IABS]         = aos_simple,
-   [TGSI_OPCODE_ISSG]         = aos_set_sign,
-   [TGSI_OPCODE_LOAD]         = aos_unsupported,
-   [TGSI_OPCODE_STORE]        = aos_unsupported,
-   [TGSI_OPCODE_MFENCE]       = aos_unsupported,
-   [TGSI_OPCODE_LFENCE]       = aos_unsupported,
-   [TGSI_OPCODE_SFENCE]       = aos_unsupported,
-   [TGSI_OPCODE_BARRIER]      = aos_unsupported,
-   [TGSI_OPCODE_ATOMUADD]     = aos_unsupported,
-   [TGSI_OPCODE_ATOMXCHG]     = aos_unsupported,
-   [TGSI_OPCODE_ATOMCAS]      = aos_unsupported,
-   [TGSI_OPCODE_ATOMAND]      = aos_unsupported,
-   [TGSI_OPCODE_ATOMOR]       = aos_unsupported,
-   [TGSI_OPCODE_ATOMXOR]      = aos_unsupported,
-   [TGSI_OPCODE_ATOMUMIN]     = aos_unsupported,
-   [TGSI_OPCODE_ATOMUMAX]     = aos_unsupported,
-   [TGSI_OPCODE_ATOMIMIN]     = aos_unsupported,
-   [TGSI_OPCODE_ATOMIMAX]     = aos_unsupported,
-   [TGSI_OPCODE_TEX2]         = aos_tex,
-   [TGSI_OPCODE_TXB2]         = aos_tex,
-   [TGSI_OPCODE_TXL2]         = aos_tex,
-};
-
-static void
-soa_passthrough(struct toy_compiler *tc,
-                const struct tgsi_full_instruction *tgsi_inst,
-                struct toy_dst *dst_,
-                struct toy_src *src_)
-{
-   const toy_tgsi_translate translate =
-      aos_translate_table[tgsi_inst->Instruction.Opcode];
-
-   translate(tc, tgsi_inst, dst_, src_);
-}
-
-static void
-soa_per_channel(struct toy_compiler *tc,
-                const struct tgsi_full_instruction *tgsi_inst,
-                struct toy_dst *dst_,
-                struct toy_src *src_)
-{
-   struct toy_dst dst[TGSI_FULL_MAX_DST_REGISTERS][4];
-   struct toy_src src[TGSI_FULL_MAX_SRC_REGISTERS][4];
-   int i, ch;
-
-   for (i = 0; i < tgsi_inst->Instruction.NumDstRegs; i++)
-      tdst_transpose(dst_[i], dst[i]);
-   for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++)
-      tsrc_transpose(src_[i], src[i]);
-
-   /* emit the same instruction four times for the four channels */
-   for (ch = 0; ch < 4; ch++) {
-      struct toy_dst aos_dst[TGSI_FULL_MAX_DST_REGISTERS];
-      struct toy_src aos_src[TGSI_FULL_MAX_SRC_REGISTERS];
-
-      for (i = 0; i < tgsi_inst->Instruction.NumDstRegs; i++)
-         aos_dst[i] = dst[i][ch];
-      for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++)
-         aos_src[i] = src[i][ch];
-
-      aos_translate_table[tgsi_inst->Instruction.Opcode](tc,
-            tgsi_inst, aos_dst, aos_src);
-   }
-}
-
-static void
-soa_scalar_replicate(struct toy_compiler *tc,
-                     const struct tgsi_full_instruction *tgsi_inst,
-                     struct toy_dst *dst_,
-                     struct toy_src *src_)
-{
-   struct toy_dst dst0[4], tmp;
-   struct toy_src srcx[TGSI_FULL_MAX_SRC_REGISTERS];
-   int opcode, i;
-
-   assert(tgsi_inst->Instruction.NumDstRegs == 1);
-
-   tdst_transpose(dst_[0], dst0);
-   for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++) {
-      struct toy_src tmp[4];
-
-      tsrc_transpose(src_[i], tmp);
-      /* only the X channels */
-      srcx[i] = tmp[0];
-   }
-
-   tmp = tc_alloc_tmp(tc);
-
-   opcode = aos_simple_opcode_map[tgsi_inst->Instruction.Opcode].opcode;
-   assert(opcode);
-
-   switch (tgsi_inst->Instruction.Opcode) {
-   case TGSI_OPCODE_RCP:
-   case TGSI_OPCODE_RSQ:
-   case TGSI_OPCODE_SQRT:
-   case TGSI_OPCODE_EX2:
-   case TGSI_OPCODE_LG2:
-   case TGSI_OPCODE_COS:
-   case TGSI_OPCODE_SIN:
-      tc_add1(tc, opcode, tmp, srcx[0]);
-      break;
-   case TGSI_OPCODE_POW:
-      tc_add2(tc, opcode, tmp, srcx[0], srcx[1]);
-      break;
-   default:
-      assert(!"invalid soa_scalar_replicate() call");
-      return;
-   }
-
-   /* replicate the result */
-   for (i = 0; i < 4; i++)
-      tc_MOV(tc, dst0[i], tsrc_from(tmp));
-}
-
-static void
-soa_dot_product(struct toy_compiler *tc,
-                const struct tgsi_full_instruction *tgsi_inst,
-                struct toy_dst *dst_,
-                struct toy_src *src_)
-{
-   struct toy_dst dst0[4], tmp;
-   struct toy_src src[TGSI_FULL_MAX_SRC_REGISTERS][4];
-   int i;
-
-   tdst_transpose(dst_[0], dst0);
-   for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++)
-      tsrc_transpose(src_[i], src[i]);
-
-   tmp = tc_alloc_tmp(tc);
-
-   switch (tgsi_inst->Instruction.Opcode) {
-   case TGSI_OPCODE_DP2:
-      tc_MUL(tc, tmp, src[0][1], src[1][1]);
-      tc_MAC(tc, tmp, src[0][0], src[1][0], tsrc_from(tmp));
-      break;
-   case TGSI_OPCODE_DP2A:
-      tc_MAC(tc, tmp, src[0][1], src[1][1], src[2][0]);
-      tc_MAC(tc, tmp, src[0][0], src[1][0], tsrc_from(tmp));
-      break;
-   case TGSI_OPCODE_DP3:
-      tc_MUL(tc, tmp, src[0][2], src[1][2]);
-      tc_MAC(tc, tmp, src[0][1], src[1][1], tsrc_from(tmp));
-      tc_MAC(tc, tmp, src[0][0], src[1][0], tsrc_from(tmp));
-      break;
-   case TGSI_OPCODE_DPH:
-      tc_MAC(tc, tmp, src[0][2], src[1][2], src[1][3]);
-      tc_MAC(tc, tmp, src[0][1], src[1][1], tsrc_from(tmp));
-      tc_MAC(tc, tmp, src[0][0], src[1][0], tsrc_from(tmp));
-      break;
-   case TGSI_OPCODE_DP4:
-      tc_MUL(tc, tmp, src[0][3], src[1][3]);
-      tc_MAC(tc, tmp, src[0][2], src[1][2], tsrc_from(tmp));
-      tc_MAC(tc, tmp, src[0][1], src[1][1], tsrc_from(tmp));
-      tc_MAC(tc, tmp, src[0][0], src[1][0], tsrc_from(tmp));
-      break;
-   default:
-      assert(!"invalid soa_dot_product() call");
-      return;
-   }
-
-   for (i = 0; i < 4; i++)
-      tc_MOV(tc, dst0[i], tsrc_from(tmp));
-}
-
-static void
-soa_partial_derivative(struct toy_compiler *tc,
-                       const struct tgsi_full_instruction *tgsi_inst,
-                       struct toy_dst *dst_,
-                       struct toy_src *src_)
-{
-   if (tgsi_inst->Instruction.Opcode == TGSI_OPCODE_DDX)
-      tc_add1(tc, TOY_OPCODE_DDX, dst_[0], src_[0]);
-   else
-      tc_add1(tc, TOY_OPCODE_DDY, dst_[0], src_[0]);
-}
-
-static void
-soa_if(struct toy_compiler *tc,
-       const struct tgsi_full_instruction *tgsi_inst,
-       struct toy_dst *dst_,
-       struct toy_src *src_)
-{
-   struct toy_src src0[4];
-
-   assert(tsrc_is_swizzle1(src_[0]));
-   tsrc_transpose(src_[0], src0);
-
-   if (tgsi_inst->Instruction.Opcode == TGSI_OPCODE_IF)
-      tc_IF(tc, tdst_null(), src0[0], tsrc_imm_f(0.0f), GEN6_COND_NZ);
-   else
-      tc_IF(tc, tdst_null(), src0[0], tsrc_imm_d(0), GEN6_COND_NZ);
-}
-
-static void
-soa_LIT(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst_,
-        struct toy_src *src_)
-{
-   struct toy_inst *inst;
-   struct toy_dst dst0[4];
-   struct toy_src src0[4];
-
-   tdst_transpose(dst_[0], dst0);
-   tsrc_transpose(src_[0], src0);
-
-   tc_MOV(tc, dst0[0], tsrc_imm_f(1.0f));
-   tc_MOV(tc, dst0[1], src0[0]);
-   tc_POW(tc, dst0[2], src0[1], src0[3]);
-   tc_MOV(tc, dst0[3], tsrc_imm_f(1.0f));
-
-   /*
-    * POW is calculated first because math with pred_ctrl is broken here.
-    * But, why?
-    */
-   tc_CMP(tc, tdst_null(), src0[0], tsrc_imm_f(0.0f), GEN6_COND_L);
-   inst = tc_MOV(tc, dst0[1], tsrc_imm_f(0.0f));
-   inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-   inst = tc_MOV(tc, dst0[2], tsrc_imm_f(0.0f));
-   inst->pred_ctrl = GEN6_PREDCTRL_NORMAL;
-}
-
-static void
-soa_EXP(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst_,
-        struct toy_src *src_)
-{
-   struct toy_dst dst0[4];
-   struct toy_src src0[4];
-
-   assert(!"SoA EXP untested");
-
-   tdst_transpose(dst_[0], dst0);
-   tsrc_transpose(src_[0], src0);
-
-   if (!tdst_is_null(dst0[0])) {
-      struct toy_dst tmp = tdst_d(tc_alloc_tmp(tc));
-
-      tc_RNDD(tc, tmp, src0[0]);
-
-      /* construct the floating point number manually */
-      tc_ADD(tc, tmp, tsrc_from(tmp), tsrc_imm_d(127));
-      tc_SHL(tc, tdst_d(dst0[0]), tsrc_from(tmp), tsrc_imm_d(23));
-   }
-
-   tc_FRC(tc, dst0[1], src0[0]);
-   tc_EXP(tc, dst0[2], src0[0]);
-   tc_MOV(tc, dst0[3], tsrc_imm_f(1.0f));
-}
-
-static void
-soa_LOG(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst_,
-        struct toy_src *src_)
-{
-   struct toy_dst dst0[4];
-   struct toy_src src0[4];
-
-   assert(!"SoA LOG untested");
-
-   tdst_transpose(dst_[0], dst0);
-   tsrc_transpose(src_[0], src0);
-
-   if (dst_[0].writemask & TOY_WRITEMASK_XY) {
-      struct toy_dst tmp = tdst_d(tc_alloc_tmp(tc));
-
-      /* exponent */
-      tc_SHR(tc, tmp, tsrc_absolute(tsrc_d(src0[0])), tsrc_imm_d(23));
-      tc_ADD(tc, dst0[0], tsrc_from(tmp), tsrc_imm_d(-127));
-
-      /* mantissa  */
-      tc_AND(tc, tmp, tsrc_d(src0[0]), tsrc_imm_d((1 << 23) - 1));
-      tc_OR(tc, dst0[1], tsrc_from(tmp), tsrc_imm_d(127 << 23));
-   }
-
-   tc_LOG(tc, dst0[2], src0[0]);
-   tc_MOV(tc, dst0[3], tsrc_imm_f(1.0f));
-}
-
-static void
-soa_DST(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst_,
-        struct toy_src *src_)
-{
-   struct toy_dst dst0[4];
-   struct toy_src src[2][4];
-
-   tdst_transpose(dst_[0], dst0);
-   tsrc_transpose(src_[0], src[0]);
-   tsrc_transpose(src_[1], src[1]);
-
-   tc_MOV(tc, dst0[0], tsrc_imm_f(1.0f));
-   tc_MUL(tc, dst0[1], src[0][1], src[1][1]);
-   tc_MOV(tc, dst0[2], src[0][2]);
-   tc_MOV(tc, dst0[3], src[1][3]);
-}
-
-static void
-soa_XPD(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst_,
-        struct toy_src *src_)
-{
-   struct toy_dst dst0[4];
-   struct toy_src src[2][4];
-
-   tdst_transpose(dst_[0], dst0);
-   tsrc_transpose(src_[0], src[0]);
-   tsrc_transpose(src_[1], src[1]);
-
-   /* dst.x = src0.y * src1.z - src1.y * src0.z */
-   tc_MUL(tc, dst0[0], src[0][2], src[1][1]);
-   tc_MAC(tc, dst0[0], src[0][1], src[1][2], tsrc_negate(tsrc_from(dst0[0])));
-
-   /* dst.y = src0.z * src1.x - src1.z * src0.x */
-   tc_MUL(tc, dst0[1], src[0][0], src[1][2]);
-   tc_MAC(tc, dst0[1], src[0][2], src[1][0], tsrc_negate(tsrc_from(dst0[1])));
-
-   /* dst.z = src0.x * src1.y - src1.x * src0.y */
-   tc_MUL(tc, dst0[2], src[0][1], src[1][0]);
-   tc_MAC(tc, dst0[2], src[0][0], src[1][1], tsrc_negate(tsrc_from(dst0[2])));
-
-   tc_MOV(tc, dst0[3], tsrc_imm_f(1.0f));
-}
-
-static void
-soa_PK2H(struct toy_compiler *tc,
-         const struct tgsi_full_instruction *tgsi_inst,
-         struct toy_dst *dst_,
-         struct toy_src *src_)
-{
-   struct toy_dst tmp = tdst_ud(tc_alloc_tmp(tc));
-   struct toy_dst dst0[4];
-   struct toy_src src0[4];
-   int i;
-
-   assert(!"SoA PK2H untested");
-
-   tdst_transpose(dst_[0], dst0);
-   tsrc_transpose(src_[0], src0);
-
-   tc_SHL(tc, tmp, src0[1], tsrc_imm_ud(16));
-   tc_OR(tc, tmp, src0[0], tsrc_from(tmp));
-
-   for (i = 0; i < 4; i++)
-      tc_MOV(tc, dst0[i], tsrc_from(tmp));
-}
-
-static void
-soa_UP2H(struct toy_compiler *tc,
-         const struct tgsi_full_instruction *tgsi_inst,
-         struct toy_dst *dst_,
-         struct toy_src *src_)
-{
-   struct toy_dst dst0[4];
-   struct toy_src src0[4];
-
-   assert(!"SoA UP2H untested");
-
-   tdst_transpose(dst_[0], dst0);
-   tsrc_transpose(src_[0], src0);
-
-   tc_AND(tc, tdst_ud(dst0[0]), tsrc_ud(src0[0]), tsrc_imm_ud(0xffff));
-   tc_SHR(tc, tdst_ud(dst0[1]), tsrc_ud(src0[1]), tsrc_imm_ud(16));
-   tc_AND(tc, tdst_ud(dst0[2]), tsrc_ud(src0[2]), tsrc_imm_ud(0xffff));
-   tc_SHR(tc, tdst_ud(dst0[3]), tsrc_ud(src0[3]), tsrc_imm_ud(16));
-
-}
-
-static void
-soa_SCS(struct toy_compiler *tc,
-        const struct tgsi_full_instruction *tgsi_inst,
-        struct toy_dst *dst_,
-        struct toy_src *src_)
-{
-   struct toy_dst dst0[4];
-   struct toy_src src0[4];
-
-   tdst_transpose(dst_[0], dst0);
-   tsrc_transpose(src_[0], src0);
-
-   tc_add1(tc, TOY_OPCODE_COS, dst0[0], src0[0]);
-   tc_add1(tc, TOY_OPCODE_SIN, dst0[1], src0[0]);
-   tc_MOV(tc, dst0[2], tsrc_imm_f(0.0f));
-   tc_MOV(tc, dst0[3], tsrc_imm_f(1.0f));
-}
-
-static void
-soa_unsupported(struct toy_compiler *tc,
-                const struct tgsi_full_instruction *tgsi_inst,
-                struct toy_dst *dst_,
-                struct toy_src *src_)
-{
-   const struct tgsi_opcode_info *info =
-      tgsi_get_opcode_info(tgsi_inst->Instruction.Opcode);
-
-   ilo_warn("unsupported TGSI opcode in SoA form: TGSI_OPCODE_%s\n",
-         info->mnemonic);
-
-   tc_fail(tc, "unsupported TGSI instruction in SoA form");
-}
-
-static const toy_tgsi_translate soa_translate_table[TGSI_OPCODE_LAST] = {
-   [TGSI_OPCODE_ARL]          = soa_per_channel,
-   [TGSI_OPCODE_MOV]          = soa_per_channel,
-   [TGSI_OPCODE_LIT]          = soa_LIT,
-   [TGSI_OPCODE_RCP]          = soa_scalar_replicate,
-   [TGSI_OPCODE_RSQ]          = soa_scalar_replicate,
-   [TGSI_OPCODE_EXP]          = soa_EXP,
-   [TGSI_OPCODE_LOG]          = soa_LOG,
-   [TGSI_OPCODE_MUL]          = soa_per_channel,
-   [TGSI_OPCODE_ADD]          = soa_per_channel,
-   [TGSI_OPCODE_DP3]          = soa_dot_product,
-   [TGSI_OPCODE_DP4]          = soa_dot_product,
-   [TGSI_OPCODE_DST]          = soa_DST,
-   [TGSI_OPCODE_MIN]          = soa_per_channel,
-   [TGSI_OPCODE_MAX]          = soa_per_channel,
-   [TGSI_OPCODE_SLT]          = soa_per_channel,
-   [TGSI_OPCODE_SGE]          = soa_per_channel,
-   [TGSI_OPCODE_MAD]          = soa_per_channel,
-   [TGSI_OPCODE_LRP]          = soa_per_channel,
-   [TGSI_OPCODE_SQRT]         = soa_scalar_replicate,
-   [TGSI_OPCODE_DP2A]         = soa_dot_product,
-   [TGSI_OPCODE_FRC]          = soa_per_channel,
-   [TGSI_OPCODE_CLAMP]        = soa_per_channel,
-   [TGSI_OPCODE_FLR]          = soa_per_channel,
-   [TGSI_OPCODE_ROUND]        = soa_per_channel,
-   [TGSI_OPCODE_EX2]          = soa_scalar_replicate,
-   [TGSI_OPCODE_LG2]          = soa_scalar_replicate,
-   [TGSI_OPCODE_POW]          = soa_scalar_replicate,
-   [TGSI_OPCODE_XPD]          = soa_XPD,
-   [TGSI_OPCODE_DPH]          = soa_dot_product,
-   [TGSI_OPCODE_COS]          = soa_scalar_replicate,
-   [TGSI_OPCODE_DDX]          = soa_partial_derivative,
-   [TGSI_OPCODE_DDY]          = soa_partial_derivative,
-   [TGSI_OPCODE_KILL]         = soa_passthrough,
-   [TGSI_OPCODE_PK2H]         = soa_PK2H,
-   [TGSI_OPCODE_PK2US]        = soa_unsupported,
-   [TGSI_OPCODE_PK4B]         = soa_unsupported,
-   [TGSI_OPCODE_PK4UB]        = soa_unsupported,
-   [TGSI_OPCODE_SEQ]          = soa_per_channel,
-   [TGSI_OPCODE_SGT]          = soa_per_channel,
-   [TGSI_OPCODE_SIN]          = soa_scalar_replicate,
-   [TGSI_OPCODE_SLE]          = soa_per_channel,
-   [TGSI_OPCODE_SNE]          = soa_per_channel,
-   [TGSI_OPCODE_TEX]          = soa_passthrough,
-   [TGSI_OPCODE_TXD]          = soa_passthrough,
-   [TGSI_OPCODE_TXP]          = soa_passthrough,
-   [TGSI_OPCODE_UP2H]         = soa_UP2H,
-   [TGSI_OPCODE_UP2US]        = soa_unsupported,
-   [TGSI_OPCODE_UP4B]         = soa_unsupported,
-   [TGSI_OPCODE_UP4UB]        = soa_unsupported,
-   [TGSI_OPCODE_ARR]          = soa_per_channel,
-   [TGSI_OPCODE_CAL]          = soa_unsupported,
-   [TGSI_OPCODE_RET]          = soa_unsupported,
-   [TGSI_OPCODE_SSG]          = soa_per_channel,
-   [TGSI_OPCODE_CMP]          = soa_per_channel,
-   [TGSI_OPCODE_SCS]          = soa_SCS,
-   [TGSI_OPCODE_TXB]          = soa_passthrough,
-   [TGSI_OPCODE_DIV]          = soa_per_channel,
-   [TGSI_OPCODE_DP2]          = soa_dot_product,
-   [TGSI_OPCODE_TXL]          = soa_passthrough,
-   [TGSI_OPCODE_BRK]          = soa_passthrough,
-   [TGSI_OPCODE_IF]           = soa_if,
-   [TGSI_OPCODE_UIF]          = soa_if,
-   [TGSI_OPCODE_ELSE]         = soa_passthrough,
-   [TGSI_OPCODE_ENDIF]        = soa_passthrough,
-   [TGSI_OPCODE_PUSHA]        = soa_unsupported,
-   [TGSI_OPCODE_POPA]         = soa_unsupported,
-   [TGSI_OPCODE_CEIL]         = soa_per_channel,
-   [TGSI_OPCODE_I2F]          = soa_per_channel,
-   [TGSI_OPCODE_NOT]          = soa_per_channel,
-   [TGSI_OPCODE_TRUNC]        = soa_per_channel,
-   [TGSI_OPCODE_SHL]          = soa_per_channel,
-   [TGSI_OPCODE_AND]          = soa_per_channel,
-   [TGSI_OPCODE_OR]           = soa_per_channel,
-   [TGSI_OPCODE_MOD]          = soa_per_channel,
-   [TGSI_OPCODE_XOR]          = soa_per_channel,
-   [TGSI_OPCODE_SAD]          = soa_per_channel,
-   [TGSI_OPCODE_TXF]          = soa_passthrough,
-   [TGSI_OPCODE_TXQ]          = soa_passthrough,
-   [TGSI_OPCODE_CONT]         = soa_passthrough,
-   [TGSI_OPCODE_EMIT]         = soa_unsupported,
-   [TGSI_OPCODE_ENDPRIM]      = soa_unsupported,
-   [TGSI_OPCODE_BGNLOOP]      = soa_passthrough,
-   [TGSI_OPCODE_BGNSUB]       = soa_unsupported,
-   [TGSI_OPCODE_ENDLOOP]      = soa_passthrough,
-   [TGSI_OPCODE_ENDSUB]       = soa_unsupported,
-   [TGSI_OPCODE_TXQ_LZ]       = soa_passthrough,
-   [TGSI_OPCODE_NOP]          = soa_passthrough,
-   [TGSI_OPCODE_FSEQ]         = soa_per_channel,
-   [TGSI_OPCODE_FSGE]         = soa_per_channel,
-   [TGSI_OPCODE_FSLT]         = soa_per_channel,
-   [TGSI_OPCODE_FSNE]         = soa_per_channel,
-   [TGSI_OPCODE_CALLNZ]       = soa_unsupported,
-   [TGSI_OPCODE_BREAKC]       = soa_unsupported,
-   [TGSI_OPCODE_KILL_IF]          = soa_passthrough,
-   [TGSI_OPCODE_END]          = soa_passthrough,
-   [TGSI_OPCODE_F2I]          = soa_per_channel,
-   [TGSI_OPCODE_IDIV]         = soa_per_channel,
-   [TGSI_OPCODE_IMAX]         = soa_per_channel,
-   [TGSI_OPCODE_IMIN]         = soa_per_channel,
-   [TGSI_OPCODE_INEG]         = soa_per_channel,
-   [TGSI_OPCODE_ISGE]         = soa_per_channel,
-   [TGSI_OPCODE_ISHR]         = soa_per_channel,
-   [TGSI_OPCODE_ISLT]         = soa_per_channel,
-   [TGSI_OPCODE_F2U]          = soa_per_channel,
-   [TGSI_OPCODE_U2F]          = soa_per_channel,
-   [TGSI_OPCODE_UADD]         = soa_per_channel,
-   [TGSI_OPCODE_UDIV]         = soa_per_channel,
-   [TGSI_OPCODE_UMAD]         = soa_per_channel,
-   [TGSI_OPCODE_UMAX]         = soa_per_channel,
-   [TGSI_OPCODE_UMIN]         = soa_per_channel,
-   [TGSI_OPCODE_UMOD]         = soa_per_channel,
-   [TGSI_OPCODE_UMUL]         = soa_per_channel,
-   [TGSI_OPCODE_USEQ]         = soa_per_channel,
-   [TGSI_OPCODE_USGE]         = soa_per_channel,
-   [TGSI_OPCODE_USHR]         = soa_per_channel,
-   [TGSI_OPCODE_USLT]         = soa_per_channel,
-   [TGSI_OPCODE_USNE]         = soa_per_channel,
-   [TGSI_OPCODE_SWITCH]       = soa_unsupported,
-   [TGSI_OPCODE_CASE]         = soa_unsupported,
-   [TGSI_OPCODE_DEFAULT]      = soa_unsupported,
-   [TGSI_OPCODE_ENDSWITCH]    = soa_unsupported,
-   [TGSI_OPCODE_SAMPLE]       = soa_passthrough,
-   [TGSI_OPCODE_SAMPLE_I]     = soa_passthrough,
-   [TGSI_OPCODE_SAMPLE_I_MS]  = soa_passthrough,
-   [TGSI_OPCODE_SAMPLE_B]     = soa_passthrough,
-   [TGSI_OPCODE_SAMPLE_C]     = soa_passthrough,
-   [TGSI_OPCODE_SAMPLE_C_LZ]  = soa_passthrough,
-   [TGSI_OPCODE_SAMPLE_D]     = soa_passthrough,
-   [TGSI_OPCODE_SAMPLE_L]     = soa_passthrough,
-   [TGSI_OPCODE_GATHER4]      = soa_passthrough,
-   [TGSI_OPCODE_SVIEWINFO]    = soa_passthrough,
-   [TGSI_OPCODE_SAMPLE_POS]   = soa_passthrough,
-   [TGSI_OPCODE_SAMPLE_INFO]  = soa_passthrough,
-   [TGSI_OPCODE_UARL]         = soa_per_channel,
-   [TGSI_OPCODE_UCMP]         = soa_per_channel,
-   [TGSI_OPCODE_IABS]         = soa_per_channel,
-   [TGSI_OPCODE_ISSG]         = soa_per_channel,
-   [TGSI_OPCODE_LOAD]         = soa_unsupported,
-   [TGSI_OPCODE_STORE]        = soa_unsupported,
-   [TGSI_OPCODE_MFENCE]       = soa_unsupported,
-   [TGSI_OPCODE_LFENCE]       = soa_unsupported,
-   [TGSI_OPCODE_SFENCE]       = soa_unsupported,
-   [TGSI_OPCODE_BARRIER]      = soa_unsupported,
-   [TGSI_OPCODE_ATOMUADD]     = soa_unsupported,
-   [TGSI_OPCODE_ATOMXCHG]     = soa_unsupported,
-   [TGSI_OPCODE_ATOMCAS]      = soa_unsupported,
-   [TGSI_OPCODE_ATOMAND]      = soa_unsupported,
-   [TGSI_OPCODE_ATOMOR]       = soa_unsupported,
-   [TGSI_OPCODE_ATOMXOR]      = soa_unsupported,
-   [TGSI_OPCODE_ATOMUMIN]     = soa_unsupported,
-   [TGSI_OPCODE_ATOMUMAX]     = soa_unsupported,
-   [TGSI_OPCODE_ATOMIMIN]     = soa_unsupported,
-   [TGSI_OPCODE_ATOMIMAX]     = soa_unsupported,
-   [TGSI_OPCODE_TEX2]         = soa_passthrough,
-   [TGSI_OPCODE_TXB2]         = soa_passthrough,
-   [TGSI_OPCODE_TXL2]         = soa_passthrough,
-};
-
-static bool
-ra_dst_is_indirect(const struct tgsi_full_dst_register *d)
-{
-   return (d->Register.Indirect ||
-         (d->Register.Dimension && d->Dimension.Indirect));
-}
-
-static int
-ra_dst_index(const struct tgsi_full_dst_register *d)
-{
-   assert(!d->Register.Indirect);
-   return d->Register.Index;
-}
-
-static int
-ra_dst_dimension(const struct tgsi_full_dst_register *d)
-{
-   if (d->Register.Dimension) {
-      assert(!d->Dimension.Indirect);
-      return d->Dimension.Index;
-   }
-   else {
-      return 0;
-   }
-}
-
-static bool
-ra_is_src_indirect(const struct tgsi_full_src_register *s)
-{
-   return (s->Register.Indirect ||
-         (s->Register.Dimension && s->Dimension.Indirect));
-}
-
-static int
-ra_src_index(const struct tgsi_full_src_register *s)
-{
-   assert(!s->Register.Indirect);
-   return s->Register.Index;
-}
-
-static int
-ra_src_dimension(const struct tgsi_full_src_register *s)
-{
-   if (s->Register.Dimension) {
-      assert(!s->Dimension.Indirect);
-      return s->Dimension.Index;
-   }
-   else {
-      return 0;
-   }
-}
-
-/**
- * Infer the type of either the sources or the destination.
- */
-static enum toy_type
-ra_infer_opcode_type(int tgsi_opcode, bool is_dst)
-{
-   enum tgsi_opcode_type type;
-
-   if (is_dst)
-      type = tgsi_opcode_infer_dst_type(tgsi_opcode);
-   else
-      type = tgsi_opcode_infer_src_type(tgsi_opcode);
-
-   switch (type) {
-   case TGSI_TYPE_UNSIGNED:
-      return TOY_TYPE_UD;
-   case TGSI_TYPE_SIGNED:
-      return TOY_TYPE_D;
-   case TGSI_TYPE_FLOAT:
-      return TOY_TYPE_F;
-   case TGSI_TYPE_UNTYPED:
-   case TGSI_TYPE_VOID:
-   case TGSI_TYPE_DOUBLE:
-   default:
-      assert(!"unsupported TGSI type");
-      return TOY_TYPE_UD;
-   }
-}
-
-/**
- * Return the type of an operand of the specified instruction.
- */
-static enum toy_type
-ra_get_type(struct toy_tgsi *tgsi, const struct tgsi_full_instruction *tgsi_inst,
-            int operand, bool is_dst)
-{
-   enum toy_type type;
-   enum tgsi_file_type file;
-
-   /* we need to look at both src and dst for MOV */
-   /* XXX it should not be this complex */
-   if (tgsi_inst->Instruction.Opcode == TGSI_OPCODE_MOV) {
-      const enum tgsi_file_type dst_file = tgsi_inst->Dst[0].Register.File;
-      const enum tgsi_file_type src_file = tgsi_inst->Src[0].Register.File;
-
-      if (dst_file == TGSI_FILE_ADDRESS || src_file == TGSI_FILE_ADDRESS) {
-         type = TOY_TYPE_D;
-      }
-      else if (src_file == TGSI_FILE_IMMEDIATE &&
-               !tgsi_inst->Src[0].Register.Indirect) {
-         const int src_idx = tgsi_inst->Src[0].Register.Index;
-         type = tgsi->imm_data.types[src_idx];
-      }
-      else {
-         /* this is the best we can do */
-         type = TOY_TYPE_F;
-      }
-
-      return type;
-   }
-   else if (tgsi_inst->Instruction.Opcode == TGSI_OPCODE_UCMP) {
-      if (!is_dst && operand == 0)
-         type = TOY_TYPE_UD;
-      else
-         type = TOY_TYPE_F;
-
-      return type;
-   }
-
-   type = ra_infer_opcode_type(tgsi_inst->Instruction.Opcode, is_dst);
-
-   /* fix the type */
-   file = (is_dst) ?
-      tgsi_inst->Dst[operand].Register.File :
-      tgsi_inst->Src[operand].Register.File;
-   switch (file) {
-   case TGSI_FILE_SAMPLER:
-   case TGSI_FILE_IMAGE:
-   case TGSI_FILE_SAMPLER_VIEW:
-      type = TOY_TYPE_D;
-      break;
-   case TGSI_FILE_ADDRESS:
-      assert(type == TOY_TYPE_D);
-      break;
-   default:
-      break;
-   }
-
-   return type;
-}
-
-/**
- * Allocate a VRF register.
- */
-static int
-ra_alloc_reg(struct toy_tgsi *tgsi, enum tgsi_file_type file)
-{
-   const int count = (tgsi->aos) ? 1 : 4;
-   return tc_alloc_vrf(tgsi->tc, count);
-}
-
-/**
- * Construct the key for VRF mapping look-up.
- */
-static void *
-ra_get_map_key(enum tgsi_file_type file, unsigned dim, unsigned index)
-{
-   intptr_t key;
-
-   /* this is ugly... */
-   assert(file  < 1 << 4);
-   assert(dim   < 1 << 12);
-   assert(index < 1 << 16);
-   key = (file << 28) | (dim << 16) | index;
-
-   return intptr_to_pointer(key);
-}
-
-/**
- * Map a TGSI register to a VRF register.
- */
-static int
-ra_map_reg(struct toy_tgsi *tgsi, enum tgsi_file_type file,
-           int dim, int index, bool *is_new)
-{
-   void *key, *val;
-   intptr_t vrf;
-
-   key = ra_get_map_key(file, dim, index);
-
-   /*
-    * because we allocate vrf from 1 and on, val is never NULL as long as the
-    * key exists
-    */
-   val = util_hash_table_get(tgsi->reg_mapping, key);
-   if (val) {
-      vrf = pointer_to_intptr(val);
-
-      if (is_new)
-         *is_new = false;
-   }
-   else {
-      vrf = (intptr_t) ra_alloc_reg(tgsi, file);
-
-      /* add to the mapping */
-      val = intptr_to_pointer(vrf);
-      util_hash_table_set(tgsi->reg_mapping, key, val);
-
-      if (is_new)
-         *is_new = true;
-   }
-
-   return (int) vrf;
-}
-
-/**
- * Return true if the destination aliases any of the sources.
- */
-static bool
-ra_dst_is_aliasing(const struct tgsi_full_instruction *tgsi_inst, int dst_index)
-{
-   const struct tgsi_full_dst_register *d = &tgsi_inst->Dst[dst_index];
-   int i;
-
-   /* we need a scratch register for indirect dst anyway */
-   if (ra_dst_is_indirect(d))
-      return true;
-
-   for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++) {
-      const struct tgsi_full_src_register *s = &tgsi_inst->Src[i];
-
-      if (s->Register.File != d->Register.File)
-         continue;
-
-      /*
-       * we can go on to check dimension and index respectively, but
-       * keep it simple for now
-       */
-      if (ra_is_src_indirect(s))
-         return true;
-      if (ra_src_dimension(s) == ra_dst_dimension(d) &&
-          ra_src_index(s) == ra_dst_index(d))
-         return true;
-   }
-
-   return false;
-}
-
-/**
- * Return the toy register for a TGSI destination operand.
- */
-static struct toy_dst
-ra_get_dst(struct toy_tgsi *tgsi,
-           const struct tgsi_full_instruction *tgsi_inst, int dst_index,
-           bool *is_scratch)
-{
-   const struct tgsi_full_dst_register *d = &tgsi_inst->Dst[dst_index];
-   bool need_vrf = false;
-   struct toy_dst dst;
-
-   switch (d->Register.File) {
-   case TGSI_FILE_NULL:
-      dst = tdst_null();
-      break;
-   case TGSI_FILE_OUTPUT:
-   case TGSI_FILE_TEMPORARY:
-   case TGSI_FILE_ADDRESS:
-   case TGSI_FILE_PREDICATE:
-      need_vrf = true;
-      break;
-   default:
-      assert(!"unhandled dst file");
-      dst = tdst_null();
-      break;
-   }
-
-   if (need_vrf) {
-      /* XXX we do not always need a scratch given the conditions... */
-      const bool need_scratch =
-         (ra_dst_is_indirect(d) || ra_dst_is_aliasing(tgsi_inst, dst_index) ||
-          tgsi_inst->Instruction.Saturate);
-      const enum toy_type type = ra_get_type(tgsi, tgsi_inst, dst_index, true);
-      int vrf;
-
-      if (need_scratch) {
-         vrf = ra_alloc_reg(tgsi, d->Register.File);
-      }
-      else {
-         vrf = ra_map_reg(tgsi, d->Register.File,
-               ra_dst_dimension(d), ra_dst_index(d), NULL);
-      }
-
-      if (is_scratch)
-         *is_scratch = need_scratch;
-
-      dst = tdst_full(TOY_FILE_VRF, type, TOY_RECT_LINEAR,
-            false, 0, d->Register.WriteMask, vrf * TOY_REG_WIDTH);
-   }
-
-   return dst;
-}
-
-static struct toy_src
-ra_get_src_for_vrf(const struct tgsi_full_src_register *s,
-                   enum toy_type type, int vrf)
-{
-   return tsrc_full(TOY_FILE_VRF, type, TOY_RECT_LINEAR,
-                    false, 0,
-                    s->Register.SwizzleX, s->Register.SwizzleY,
-                    s->Register.SwizzleZ, s->Register.SwizzleW,
-                    s->Register.Absolute, s->Register.Negate,
-                    vrf * TOY_REG_WIDTH);
-}
-
-static int
-init_tgsi_reg(struct toy_tgsi *tgsi, struct toy_inst *inst,
-              enum tgsi_file_type file, int index,
-              const struct tgsi_ind_register *indirect,
-              const struct tgsi_dimension *dimension,
-              const struct tgsi_ind_register *dim_indirect)
-{
-   struct toy_src src;
-   int num_src = 0;
-
-   /* src[0]: TGSI file */
-   inst->src[num_src++] = tsrc_imm_d(file);
-
-   /* src[1]: TGSI dimension */
-   inst->src[num_src++] = tsrc_imm_d((dimension) ? dimension->Index : 0);
-
-   /* src[2]: TGSI dimension indirection */
-   if (dim_indirect) {
-      const int vrf = ra_map_reg(tgsi, dim_indirect->File, 0,
-            dim_indirect->Index, NULL);
-
-      src = tsrc(TOY_FILE_VRF, vrf, 0);
-      src = tsrc_swizzle1(tsrc_d(src), indirect->Swizzle);
-   }
-   else {
-      src = tsrc_imm_d(0);
-   }
-
-   inst->src[num_src++] = src;
-
-   /* src[3]: TGSI index */
-   inst->src[num_src++] = tsrc_imm_d(index);
-
-   /* src[4]: TGSI index indirection */
-   if (indirect) {
-      const int vrf = ra_map_reg(tgsi, indirect->File, 0,
-            indirect->Index, NULL);
-
-      src = tsrc(TOY_FILE_VRF, vrf, 0);
-      src = tsrc_swizzle1(tsrc_d(src), indirect->Swizzle);
-   }
-   else {
-      src = tsrc_imm_d(0);
-   }
-
-   inst->src[num_src++] = src;
-
-   return num_src;
-}
-
-static struct toy_src
-ra_get_src_indirect(struct toy_tgsi *tgsi,
-                    const struct tgsi_full_instruction *tgsi_inst,
-                    int src_index)
-{
-   const struct tgsi_full_src_register *s = &tgsi_inst->Src[src_index];
-   bool need_vrf = false, is_resource = false;
-   struct toy_src src;
-
-   switch (s->Register.File) {
-   case TGSI_FILE_NULL:
-      src = tsrc_null();
-      break;
-   case TGSI_FILE_SAMPLER:
-   case TGSI_FILE_IMAGE:
-   case TGSI_FILE_SAMPLER_VIEW:
-      is_resource = true;
-      /* fall through */
-   case TGSI_FILE_CONSTANT:
-   case TGSI_FILE_INPUT:
-   case TGSI_FILE_SYSTEM_VALUE:
-   case TGSI_FILE_TEMPORARY:
-   case TGSI_FILE_ADDRESS:
-   case TGSI_FILE_IMMEDIATE:
-   case TGSI_FILE_PREDICATE:
-      need_vrf = true;
-      break;
-   default:
-      assert(!"unhandled src file");
-      src = tsrc_null();
-      break;
-   }
-
-   if (need_vrf) {
-      const enum toy_type type = ra_get_type(tgsi, tgsi_inst, src_index, false);
-      int vrf;
-
-      if (is_resource) {
-         assert(!s->Register.Dimension);
-         assert(s->Register.Indirect);
-
-         vrf = ra_map_reg(tgsi, s->Indirect.File, 0, s->Indirect.Index, NULL);
-      }
-      else {
-         vrf = ra_alloc_reg(tgsi, s->Register.File);
-      }
-
-      src = ra_get_src_for_vrf(s, type, vrf);
-
-      /* emit indirect fetch */
-      if (!is_resource) {
-         struct toy_inst *inst;
-
-         inst = tc_add(tgsi->tc);
-         inst->opcode = TOY_OPCODE_TGSI_INDIRECT_FETCH;
-         inst->dst = tdst_from(src);
-         inst->dst.writemask = TOY_WRITEMASK_XYZW;
-
-         init_tgsi_reg(tgsi, inst, s->Register.File, s->Register.Index,
-               (s->Register.Indirect) ? &s->Indirect : NULL,
-               (s->Register.Dimension) ? &s->Dimension : NULL,
-               (s->Dimension.Indirect) ? &s->DimIndirect : NULL);
-      }
-   }
-
-   return src;
-}
-
-/**
- * Return the toy register for a TGSI source operand.
- */
-static struct toy_src
-ra_get_src(struct toy_tgsi *tgsi,
-           const struct tgsi_full_instruction *tgsi_inst,
-           int src_index)
-{
-   const struct tgsi_full_src_register *s = &tgsi_inst->Src[src_index];
-   bool need_vrf = false;
-   struct toy_src src;
-
-   if (ra_is_src_indirect(s))
-      return ra_get_src_indirect(tgsi, tgsi_inst, src_index);
-
-   switch (s->Register.File) {
-   case TGSI_FILE_NULL:
-      src = tsrc_null();
-      break;
-   case TGSI_FILE_CONSTANT:
-   case TGSI_FILE_INPUT:
-   case TGSI_FILE_SYSTEM_VALUE:
-      need_vrf = true;
-      break;
-   case TGSI_FILE_TEMPORARY:
-   case TGSI_FILE_ADDRESS:
-   case TGSI_FILE_PREDICATE:
-      need_vrf = true;
-      break;
-   case TGSI_FILE_SAMPLER:
-   case TGSI_FILE_IMAGE:
-   case TGSI_FILE_SAMPLER_VIEW:
-      assert(!s->Register.Dimension);
-      src = tsrc_imm_d(s->Register.Index);
-      break;
-   case TGSI_FILE_IMMEDIATE:
-      {
-         const uint32_t *imm;
-         enum toy_type imm_type;
-         bool is_scalar;
-
-         imm = toy_tgsi_get_imm(tgsi, s->Register.Index, &imm_type);
-
-         is_scalar =
-            (imm[s->Register.SwizzleX] == imm[s->Register.SwizzleY] &&
-             imm[s->Register.SwizzleX] == imm[s->Register.SwizzleZ] &&
-             imm[s->Register.SwizzleX] == imm[s->Register.SwizzleW]);
-
-         if (is_scalar) {
-            const enum toy_type type =
-               ra_get_type(tgsi, tgsi_inst, src_index, false);
-
-            /* ignore imm_type */
-            src = tsrc_imm_ud(imm[s->Register.SwizzleX]);
-            src.type = type;
-            src.absolute = s->Register.Absolute;
-            src.negate = s->Register.Negate;
-         }
-         else {
-            need_vrf = true;
-         }
-      }
-      break;
-   default:
-      assert(!"unhandled src file");
-      src = tsrc_null();
-      break;
-   }
-
-   if (need_vrf) {
-      const enum toy_type type = ra_get_type(tgsi, tgsi_inst, src_index, false);
-      bool is_new;
-      int vrf;
-
-      vrf = ra_map_reg(tgsi, s->Register.File,
-            ra_src_dimension(s), ra_src_index(s), &is_new);
-
-      src = ra_get_src_for_vrf(s, type, vrf);
-
-      if (is_new) {
-         switch (s->Register.File) {
-         case TGSI_FILE_TEMPORARY:
-         case TGSI_FILE_ADDRESS:
-         case TGSI_FILE_PREDICATE:
-            {
-               struct toy_dst dst = tdst_from(src);
-               dst.writemask = TOY_WRITEMASK_XYZW;
-
-               /* always initialize registers before use */
-               if (tgsi->aos) {
-                  tc_MOV(tgsi->tc, dst, tsrc_type(tsrc_imm_d(0), type));
-               }
-               else {
-                  struct toy_dst tdst[4];
-                  int i;
-
-                  tdst_transpose(dst, tdst);
-
-                  for (i = 0; i < 4; i++) {
-                     tc_MOV(tgsi->tc, tdst[i],
-                           tsrc_type(tsrc_imm_d(0), type));
-                  }
-               }
-            }
-            break;
-         default:
-            break;
-         }
-      }
-
-   }
-
-   return src;
-}
-
-static void
-parse_instruction(struct toy_tgsi *tgsi,
-                  const struct tgsi_full_instruction *tgsi_inst)
-{
-   struct toy_dst dst[TGSI_FULL_MAX_DST_REGISTERS];
-   struct toy_src src[TGSI_FULL_MAX_SRC_REGISTERS];
-   bool dst_is_scratch[TGSI_FULL_MAX_DST_REGISTERS];
-   toy_tgsi_translate translate;
-   int i;
-
-   /* convert TGSI registers to toy registers */
-   for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++)
-      src[i] = ra_get_src(tgsi, tgsi_inst, i);
-   for (i = 0; i < tgsi_inst->Instruction.NumDstRegs; i++)
-      dst[i] = ra_get_dst(tgsi, tgsi_inst, i, &dst_is_scratch[i]);
-
-   /* translate the instruction */
-   translate = tgsi->translate_table[tgsi_inst->Instruction.Opcode];
-   if (!translate) {
-      if (tgsi->translate_table == soa_translate_table)
-         soa_unsupported(tgsi->tc, tgsi_inst, dst, src);
-      else
-         aos_unsupported(tgsi->tc, tgsi_inst, dst, src);
-   }
-   translate(tgsi->tc, tgsi_inst, dst, src);
-
-   /* write the result to the real destinations if needed */
-   for (i = 0; i < tgsi_inst->Instruction.NumDstRegs; i++) {
-      const struct tgsi_full_dst_register *d = &tgsi_inst->Dst[i];
-
-      if (!dst_is_scratch[i])
-         continue;
-
-      tgsi->tc->templ.saturate = tgsi_inst->Instruction.Saturate;
-
-      /* emit indirect store */
-      if (ra_dst_is_indirect(d)) {
-         struct toy_inst *inst;
-
-         inst = tc_add(tgsi->tc);
-         inst->opcode = TOY_OPCODE_TGSI_INDIRECT_STORE;
-         inst->dst = dst[i];
-
-         init_tgsi_reg(tgsi, inst, d->Register.File, d->Register.Index,
-               (d->Register.Indirect) ? &d->Indirect : NULL,
-               (d->Register.Dimension) ? &d->Dimension : NULL,
-               (d->Dimension.Indirect) ? &d->DimIndirect : NULL);
-      }
-      else {
-         const enum toy_type type = ra_get_type(tgsi, tgsi_inst, i, true);
-         struct toy_dst real_dst;
-         int vrf;
-
-         vrf = ra_map_reg(tgsi, d->Register.File,
-               ra_dst_dimension(d), ra_dst_index(d), NULL);
-         real_dst = tdst_full(TOY_FILE_VRF, type, TOY_RECT_LINEAR,
-               false, 0, d->Register.WriteMask, vrf * TOY_REG_WIDTH);
-
-         if (tgsi->aos) {
-            tc_MOV(tgsi->tc, real_dst, tsrc_from(dst[i]));
-         }
-         else {
-            struct toy_dst tdst[4];
-            struct toy_src tsrc[4];
-            int j;
-
-            tdst_transpose(real_dst, tdst);
-            tsrc_transpose(tsrc_from(dst[i]), tsrc);
-
-            for (j = 0; j < 4; j++)
-               tc_MOV(tgsi->tc, tdst[j], tsrc[j]);
-         }
-      }
-
-      tgsi->tc->templ.saturate = false;
-   }
-
-   switch (tgsi_inst->Instruction.Opcode) {
-   case TGSI_OPCODE_KILL_IF:
-   case TGSI_OPCODE_KILL:
-      tgsi->uses_kill = true;
-      break;
-   }
-
-   for (i = 0; i < tgsi_inst->Instruction.NumSrcRegs; i++) {
-      const struct tgsi_full_src_register *s = &tgsi_inst->Src[i];
-      if (s->Register.File == TGSI_FILE_CONSTANT && s->Register.Indirect)
-         tgsi->const_indirect = true;
-   }
-
-   /* remember channels written */
-   for (i = 0; i < tgsi_inst->Instruction.NumDstRegs; i++) {
-      const struct tgsi_full_dst_register *d = &tgsi_inst->Dst[i];
-
-      if (d->Register.File != TGSI_FILE_OUTPUT)
-         continue;
-      for (i = 0; i < tgsi->num_outputs; i++) {
-         if (tgsi->outputs[i].index == d->Register.Index) {
-            tgsi->outputs[i].undefined_mask &= ~d->Register.WriteMask;
-            break;
-         }
-      }
-   }
-}
-
-static void
-decl_add_in(struct toy_tgsi *tgsi, const struct tgsi_full_declaration *decl)
-{
-   static const struct tgsi_declaration_interp default_interp = {
-      TGSI_INTERPOLATE_PERSPECTIVE, false, 0,
-   };
-   const struct tgsi_declaration_interp *interp =
-      (decl->Declaration.Interpolate) ? &decl->Interp: &default_interp;
-   int index;
-
-   if (decl->Range.Last >= ARRAY_SIZE(tgsi->inputs)) {
-      assert(!"invalid IN");
-      return;
-   }
-
-   for (index = decl->Range.First; index <= decl->Range.Last; index++) {
-      const int slot = tgsi->num_inputs++;
-
-      tgsi->inputs[slot].index = index;
-      tgsi->inputs[slot].usage_mask = decl->Declaration.UsageMask;
-      if (decl->Declaration.Semantic) {
-         tgsi->inputs[slot].semantic_name = decl->Semantic.Name;
-         tgsi->inputs[slot].semantic_index = decl->Semantic.Index;
-      }
-      else {
-         tgsi->inputs[slot].semantic_name = TGSI_SEMANTIC_GENERIC;
-         tgsi->inputs[slot].semantic_index = index;
-      }
-      tgsi->inputs[slot].interp = interp->Interpolate;
-      tgsi->inputs[slot].centroid = interp->Location == TGSI_INTERPOLATE_LOC_CENTROID;
-   }
-}
-
-static void
-decl_add_out(struct toy_tgsi *tgsi, const struct tgsi_full_declaration *decl)
-{
-   int index;
-
-   if (decl->Range.Last >= ARRAY_SIZE(tgsi->outputs)) {
-      assert(!"invalid OUT");
-      return;
-   }
-
-   assert(decl->Declaration.Semantic);
-
-   for (index = decl->Range.First; index <= decl->Range.Last; index++) {
-      const int slot = tgsi->num_outputs++;
-
-      tgsi->outputs[slot].index = index;
-      tgsi->outputs[slot].undefined_mask = TOY_WRITEMASK_XYZW;
-      tgsi->outputs[slot].usage_mask = decl->Declaration.UsageMask;
-      tgsi->outputs[slot].semantic_name = decl->Semantic.Name;
-      tgsi->outputs[slot].semantic_index = decl->Semantic.Index;
-   }
-}
-
-static void
-decl_add_sv(struct toy_tgsi *tgsi, const struct tgsi_full_declaration *decl)
-{
-   int index;
-
-   if (decl->Range.Last >= ARRAY_SIZE(tgsi->system_values)) {
-      assert(!"invalid SV");
-      return;
-   }
-
-   for (index = decl->Range.First; index <= decl->Range.Last; index++) {
-      const int slot = tgsi->num_system_values++;
-
-      tgsi->system_values[slot].index = index;
-      if (decl->Declaration.Semantic) {
-         tgsi->system_values[slot].semantic_name = decl->Semantic.Name;
-         tgsi->system_values[slot].semantic_index = decl->Semantic.Index;
-      }
-      else {
-         tgsi->system_values[slot].semantic_name = TGSI_SEMANTIC_GENERIC;
-         tgsi->system_values[slot].semantic_index = index;
-      }
-   }
-}
-
-/**
- * Emit an instruction to fetch the value of a TGSI register.
- */
-static void
-fetch_source(struct toy_tgsi *tgsi, enum tgsi_file_type file, int dim, int idx)
-{
-   struct toy_dst dst;
-   int vrf;
-   enum toy_opcode opcode;
-   enum toy_type type = TOY_TYPE_F;
-
-   switch (file) {
-   case TGSI_FILE_INPUT:
-      opcode = TOY_OPCODE_TGSI_IN;
-      break;
-   case TGSI_FILE_CONSTANT:
-      opcode = TOY_OPCODE_TGSI_CONST;
-      break;
-   case TGSI_FILE_SYSTEM_VALUE:
-      opcode = TOY_OPCODE_TGSI_SV;
-      break;
-   case TGSI_FILE_IMMEDIATE:
-      opcode = TOY_OPCODE_TGSI_IMM;
-      toy_tgsi_get_imm(tgsi, idx, &type);
-      break;
-   default:
-      /* no need to fetch */
-      return;
-      break;
-   }
-
-   vrf = ra_map_reg(tgsi, file, dim, idx, NULL);
-   dst = tdst(TOY_FILE_VRF, vrf, 0);
-   dst = tdst_type(dst, type);
-
-   tc_add2(tgsi->tc, opcode, dst, tsrc_imm_d(dim), tsrc_imm_d(idx));
-}
-
-static void
-parse_declaration(struct toy_tgsi *tgsi,
-                  const struct tgsi_full_declaration *decl)
-{
-   int i;
-
-   switch (decl->Declaration.File) {
-   case TGSI_FILE_INPUT:
-      decl_add_in(tgsi, decl);
-      break;
-   case TGSI_FILE_OUTPUT:
-      decl_add_out(tgsi, decl);
-      break;
-   case TGSI_FILE_SYSTEM_VALUE:
-      decl_add_sv(tgsi, decl);
-      break;
-   case TGSI_FILE_IMMEDIATE:
-      /* immediates should be declared with TGSI_TOKEN_TYPE_IMMEDIATE */
-      assert(!"unexpected immediate declaration");
-      break;
-   case TGSI_FILE_CONSTANT:
-      if (tgsi->const_count <= decl->Range.Last)
-         tgsi->const_count = decl->Range.Last + 1;
-      break;
-   case TGSI_FILE_NULL:
-   case TGSI_FILE_TEMPORARY:
-   case TGSI_FILE_SAMPLER:
-   case TGSI_FILE_PREDICATE:
-   case TGSI_FILE_ADDRESS:
-   case TGSI_FILE_IMAGE:
-   case TGSI_FILE_SAMPLER_VIEW:
-      /* nothing to do */
-      break;
-   default:
-      assert(!"unhandled TGSI file");
-      break;
-   }
-
-   /* fetch the registers now */
-   for (i = decl->Range.First; i <= decl->Range.Last; i++) {
-      const int dim = (decl->Declaration.Dimension) ? decl->Dim.Index2D : 0;
-      fetch_source(tgsi, decl->Declaration.File, dim, i);
-   }
-}
-
-static int
-add_imm(struct toy_tgsi *tgsi, enum toy_type type, const uint32_t *buf)
-{
-   /* reallocate the buffer if necessary */
-   if (tgsi->imm_data.cur >= tgsi->imm_data.size) {
-      const int cur_size = tgsi->imm_data.size;
-      int new_size;
-      enum toy_type *new_types;
-      uint32_t (*new_buf)[4];
-
-      new_size = (cur_size) ? cur_size << 1 : 16;
-      while (new_size <= tgsi->imm_data.cur)
-         new_size <<= 1;
-
-      new_buf = REALLOC(tgsi->imm_data.buf,
-            cur_size * sizeof(new_buf[0]),
-            new_size * sizeof(new_buf[0]));
-      new_types = REALLOC(tgsi->imm_data.types,
-            cur_size * sizeof(new_types[0]),
-            new_size * sizeof(new_types[0]));
-      if (!new_buf || !new_types) {
-         FREE(new_buf);
-         FREE(new_types);
-         return -1;
-      }
-
-      tgsi->imm_data.buf = new_buf;
-      tgsi->imm_data.types = new_types;
-      tgsi->imm_data.size = new_size;
-   }
-
-   tgsi->imm_data.types[tgsi->imm_data.cur] = type;
-   memcpy(&tgsi->imm_data.buf[tgsi->imm_data.cur],
-         buf, sizeof(tgsi->imm_data.buf[0]));
-
-   return tgsi->imm_data.cur++;
-}
-
-static void
-parse_immediate(struct toy_tgsi *tgsi, const struct tgsi_full_immediate *imm)
-{
-   enum toy_type type;
-   uint32_t imm_buf[4];
-   int idx;
-
-   switch (imm->Immediate.DataType) {
-   case TGSI_IMM_FLOAT32:
-      type = TOY_TYPE_F;
-      imm_buf[0] = fui(imm->u[0].Float);
-      imm_buf[1] = fui(imm->u[1].Float);
-      imm_buf[2] = fui(imm->u[2].Float);
-      imm_buf[3] = fui(imm->u[3].Float);
-      break;
-   case TGSI_IMM_INT32:
-      type = TOY_TYPE_D;
-      imm_buf[0] = (uint32_t) imm->u[0].Int;
-      imm_buf[1] = (uint32_t) imm->u[1].Int;
-      imm_buf[2] = (uint32_t) imm->u[2].Int;
-      imm_buf[3] = (uint32_t) imm->u[3].Int;
-      break;
-   case TGSI_IMM_UINT32:
-      type = TOY_TYPE_UD;
-      imm_buf[0] = imm->u[0].Uint;
-      imm_buf[1] = imm->u[1].Uint;
-      imm_buf[2] = imm->u[2].Uint;
-      imm_buf[3] = imm->u[3].Uint;
-      break;
-   default:
-      assert(!"unhandled TGSI imm type");
-      type = TOY_TYPE_F;
-      memset(imm_buf, 0, sizeof(imm_buf));
-      break;
-   }
-
-   idx = add_imm(tgsi, type, imm_buf);
-   if (idx >= 0)
-      fetch_source(tgsi, TGSI_FILE_IMMEDIATE, 0, idx);
-   else
-      tc_fail(tgsi->tc, "failed to add TGSI imm");
-}
-
-static void
-parse_property(struct toy_tgsi *tgsi, const struct tgsi_full_property *prop)
-{
-   switch (prop->Property.PropertyName) {
-   case TGSI_PROPERTY_VS_PROHIBIT_UCPS:
-      tgsi->props.vs_prohibit_ucps = prop->u[0].Data;
-      break;
-   case TGSI_PROPERTY_FS_COORD_ORIGIN:
-      tgsi->props.fs_coord_origin = prop->u[0].Data;
-      break;
-   case TGSI_PROPERTY_FS_COORD_PIXEL_CENTER:
-      tgsi->props.fs_coord_pixel_center = prop->u[0].Data;
-      break;
-   case TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS:
-      tgsi->props.fs_color0_writes_all_cbufs = prop->u[0].Data;
-      break;
-   case TGSI_PROPERTY_FS_DEPTH_LAYOUT:
-      tgsi->props.fs_depth_layout = prop->u[0].Data;
-      break;
-   case TGSI_PROPERTY_GS_INPUT_PRIM:
-      tgsi->props.gs_input_prim = prop->u[0].Data;
-      break;
-   case TGSI_PROPERTY_GS_OUTPUT_PRIM:
-      tgsi->props.gs_output_prim = prop->u[0].Data;
-      break;
-   case TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES:
-      tgsi->props.gs_max_output_vertices = prop->u[0].Data;
-      break;
-   default:
-      assert(!"unhandled TGSI property");
-      break;
-   }
-}
-
-static void
-parse_token(struct toy_tgsi *tgsi, const union tgsi_full_token *token)
-{
-   switch (token->Token.Type) {
-   case TGSI_TOKEN_TYPE_DECLARATION:
-      parse_declaration(tgsi, &token->FullDeclaration);
-      break;
-   case TGSI_TOKEN_TYPE_IMMEDIATE:
-      parse_immediate(tgsi, &token->FullImmediate);
-      break;
-   case TGSI_TOKEN_TYPE_INSTRUCTION:
-      parse_instruction(tgsi, &token->FullInstruction);
-      break;
-   case TGSI_TOKEN_TYPE_PROPERTY:
-      parse_property(tgsi, &token->FullProperty);
-      break;
-   default:
-      assert(!"unhandled TGSI token type");
-      break;
-   }
-}
-
-static enum pipe_error
-dump_reg_mapping(void *key, void *val, void *data)
-{
-   int tgsi_file, tgsi_dim, tgsi_index;
-   uint32_t sig, vrf;
-
-   sig = (uint32_t) pointer_to_intptr(key);
-   vrf = (uint32_t) pointer_to_intptr(val);
-
-   /* see ra_get_map_key() */
-   tgsi_file =  (sig >> 28) & 0xf;
-   tgsi_dim =   (sig >> 16) & 0xfff;
-   tgsi_index = (sig >> 0)  & 0xffff;
-
-   if (tgsi_dim) {
-      ilo_printf("  v%d:\t%s[%d][%d]\n", vrf,
-                 tgsi_file_name(tgsi_file), tgsi_dim, tgsi_index);
-   }
-   else {
-      ilo_printf("  v%d:\t%s[%d]\n", vrf,
-                 tgsi_file_name(tgsi_file), tgsi_index);
-   }
-
-   return PIPE_OK;
-}
-
-/**
- * Dump the TGSI translator, currently only the register mapping.
- */
-void
-toy_tgsi_dump(const struct toy_tgsi *tgsi)
-{
-   util_hash_table_foreach(tgsi->reg_mapping, dump_reg_mapping, NULL);
-}
-
-/**
- * Clean up the TGSI translator.
- */
-void
-toy_tgsi_cleanup(struct toy_tgsi *tgsi)
-{
-   FREE(tgsi->imm_data.buf);
-   FREE(tgsi->imm_data.types);
-
-   util_hash_table_destroy(tgsi->reg_mapping);
-}
-
-static unsigned
-reg_mapping_hash(void *key)
-{
-   return (unsigned) pointer_to_intptr(key);
-}
-
-static int
-reg_mapping_compare(void *key1, void *key2)
-{
-   return (key1 != key2);
-}
-
-/**
- * Initialize the TGSI translator.
- */
-static bool
-init_tgsi(struct toy_tgsi *tgsi, struct toy_compiler *tc, bool aos)
-{
-   memset(tgsi, 0, sizeof(*tgsi));
-
-   tgsi->tc = tc;
-   tgsi->aos = aos;
-   tgsi->translate_table = (aos) ? aos_translate_table : soa_translate_table;
-
-   /* create a mapping of TGSI registers to VRF reigsters */
-   tgsi->reg_mapping =
-      util_hash_table_create(reg_mapping_hash, reg_mapping_compare);
-
-   return (tgsi->reg_mapping != NULL);
-}
-
-/**
- * Translate TGSI tokens into toy instructions.
- */
-void
-toy_compiler_translate_tgsi(struct toy_compiler *tc,
-                            const struct tgsi_token *tokens, bool aos,
-                            struct toy_tgsi *tgsi)
-{
-   struct tgsi_parse_context parse;
-
-   if (!init_tgsi(tgsi, tc, aos)) {
-      tc_fail(tc, "failed to initialize TGSI translator");
-      return;
-   }
-
-   tgsi_parse_init(&parse, tokens);
-   while (!tgsi_parse_end_of_tokens(&parse)) {
-      tgsi_parse_token(&parse);
-      parse_token(tgsi, &parse.FullToken);
-   }
-   tgsi_parse_free(&parse);
-}
-
-/**
- * Map the TGSI register to VRF register.
- */
-int
-toy_tgsi_get_vrf(const struct toy_tgsi *tgsi,
-                 enum tgsi_file_type file, int dimension, int index)
-{
-   void *key, *val;
-
-   key = ra_get_map_key(file, dimension, index);
-
-   val = util_hash_table_get(tgsi->reg_mapping, key);
-
-   return (val) ? pointer_to_intptr(val) : -1;
-}
diff --git a/src/gallium/drivers/ilo/shader/toy_tgsi.h b/src/gallium/drivers/ilo/shader/toy_tgsi.h
deleted file mode 100644 (file)
index 38be9f4..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2012-2013 LunarG, Inc.
- *
- * 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 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:
- *    Chia-I Wu <olv@lunarg.com>
- */
-
-#ifndef TOY_TGSI_H
-#define TOY_TGSI_H
-
-#include "pipe/p_state.h"
-#include "pipe/p_shader_tokens.h"
-#include "toy_compiler.h"
-
-struct tgsi_token;
-struct tgsi_full_instruction;
-struct util_hash_table;
-
-typedef void (*toy_tgsi_translate)(struct toy_compiler *tc,
-      const struct tgsi_full_instruction *tgsi_inst,
-      struct toy_dst *dst,
-      struct toy_src *src);
-
-struct toy_tgsi {
-   struct toy_compiler *tc;
-   bool aos;
-   const toy_tgsi_translate *translate_table;
-
-   struct util_hash_table *reg_mapping;
-
-   struct {
-      bool vs_prohibit_ucps;
-      int fs_coord_origin;
-      int fs_coord_pixel_center;
-      bool fs_color0_writes_all_cbufs;
-      int fs_depth_layout;
-      int gs_input_prim;
-      int gs_output_prim;
-      int gs_max_output_vertices;
-   } props;
-
-   struct {
-      enum toy_type *types;
-      uint32_t (*buf)[4];
-      int cur, size;
-   } imm_data;
-
-   struct {
-      int index:16;
-      unsigned usage_mask:4;        /* TGSI_WRITEMASK_x */
-      unsigned semantic_name:8;     /* TGSI_SEMANTIC_x */
-      unsigned semantic_index:8;
-      unsigned interp:4;            /* TGSI_INTERPOLATE_x */
-      unsigned centroid:1;
-   } inputs[PIPE_MAX_SHADER_INPUTS];
-   int num_inputs;
-
-   struct {
-      int index:16;
-      unsigned undefined_mask:4;
-      unsigned usage_mask:4;        /* TGSI_WRITEMASK_x */
-      unsigned semantic_name:8;     /* TGSI_SEMANTIC_x */
-      unsigned semantic_index:8;
-   } outputs[PIPE_MAX_SHADER_OUTPUTS];
-   int num_outputs;
-
-   struct {
-      int index:16;
-      unsigned semantic_name:8;     /* TGSI_SEMANTIC_x */
-      unsigned semantic_index:8;
-   } system_values[8];
-   int num_system_values;
-
-   int const_count;
-   bool const_indirect;
-
-   bool uses_kill;
-};
-
-/**
- * Find the slot of the TGSI input.
- */
-static inline int
-toy_tgsi_find_input(const struct toy_tgsi *tgsi, int index)
-{
-   int slot;
-
-   for (slot = 0; slot < tgsi->num_inputs; slot++) {
-      if (tgsi->inputs[slot].index == index)
-         return slot;
-   }
-
-   return -1;
-}
-
-/**
- * Find the slot of the TGSI system value.
- */
-static inline int
-toy_tgsi_find_system_value(const struct toy_tgsi *tgsi, int index)
-{
-   int slot;
-
-   for (slot = 0; slot < tgsi->num_system_values; slot++) {
-      if (tgsi->system_values[slot].index == index)
-         return slot;
-   }
-
-   return -1;
-}
-
-/**
- * Return the immediate data of the TGSI immediate.
- */
-static inline const uint32_t *
-toy_tgsi_get_imm(const struct toy_tgsi *tgsi, unsigned index,
-                 enum toy_type *type)
-{
-   const uint32_t *imm;
-
-   if (index >= tgsi->imm_data.cur)
-      return NULL;
-
-   imm = tgsi->imm_data.buf[index];
-   if (type)
-      *type = tgsi->imm_data.types[index];
-
-   return imm;
-}
-
-void
-toy_compiler_translate_tgsi(struct toy_compiler *tc,
-                            const struct tgsi_token *tokens, bool aos,
-                            struct toy_tgsi *tgsi);
-
-void
-toy_tgsi_cleanup(struct toy_tgsi *tgsi);
-
-int
-toy_tgsi_get_vrf(const struct toy_tgsi *tgsi,
-                 enum tgsi_file_type file, int dimension, int index);
-
-void
-toy_tgsi_dump(const struct toy_tgsi *tgsi);
-
-#endif /* TOY_TGSI_H */