gallium: change comments to remove 'state tracker'
[mesa.git] / src / gallium / drivers / i915 / i915_state.c
index c5ec0c6c076325676b2f4305fabaa6bd72acb0fe..d8a5edfebf40b23810358ce01c2d3326655dce47 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  * 
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * Copyright 2007 VMware, Inc.
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * 
  **************************************************************************/
 
-/* Authors:  Keith Whitwell <keith@tungstengraphics.com>
+/* Authors:  Keith Whitwell <keithw@vmware.com>
  */
 
 
 #include "draw/draw_context.h"
+#include "util/u_helpers.h"
 #include "util/u_inlines.h"
 #include "util/u_math.h"
 #include "util/u_memory.h"
@@ -41,6 +42,7 @@
 #include "i915_state_inlines.h"
 #include "i915_fpc.h"
 #include "i915_resource.h"
+#include "i915_state.h"
 
 /* The i915 (and related graphics cores) do not support GL_CLAMP.  The
  * Intel drivers for "other operating systems" implement GL_CLAMP as
@@ -93,7 +95,6 @@ static unsigned translate_mip_filter( unsigned filter )
    }
 }
 
-
 /* None of this state is actually used for anything yet.
  */
 static void *
@@ -112,14 +113,14 @@ i915_create_blend_state(struct pipe_context *pipe,
       unsigned dstA   = blend->rt[0].alpha_dst_factor;
 
       /* Special handling for MIN/MAX filter modes handled at
-       * state_tracker level.
+       * frontend level.
        */
 
       if (srcA != srcRGB ||
-         dstA != dstRGB ||
-         eqA != eqRGB) {
+          dstA != dstRGB ||
+          eqA != eqRGB) {
 
-        cso_data->iab = (_3DSTATE_INDEPENDENT_ALPHA_BLEND_CMD |
+         cso_data->iab = (_3DSTATE_INDEPENDENT_ALPHA_BLEND_CMD |
                           IAB_MODIFY_ENABLE |
                           IAB_ENABLE |
                           IAB_MODIFY_FUNC |
@@ -130,7 +131,7 @@ i915_create_blend_state(struct pipe_context *pipe,
                           (i915_translate_blend_func(eqA) << IAB_FUNC_SHIFT));
       }
       else {
-        cso_data->iab = (_3DSTATE_INDEPENDENT_ALPHA_BLEND_CMD |
+         cso_data->iab = (_3DSTATE_INDEPENDENT_ALPHA_BLEND_CMD |
                           IAB_MODIFY_ENABLE |
                           0);
       }
@@ -146,7 +147,7 @@ i915_create_blend_state(struct pipe_context *pipe,
    if (blend->dither)
       cso_data->LIS5 |= S5_COLOR_DITHER_ENABLE;
 
-   /* XXX here take the target fixup into account */
+   /* We potentially do some fixup at emission for non-BGRA targets */
    if ((blend->rt[0].colormask & PIPE_MASK_R) == 0)
       cso_data->LIS5 |= S5_WRITEDISABLE_RED;
 
@@ -275,7 +276,7 @@ i915_create_sampler_state(struct pipe_context *pipe,
       maxlod = CLAMP(maxlod, 0, 16 * 11);
 
       if (minlod > maxlod)
-        maxlod = minlod;
+         maxlod = minlod;
 
       cso->minlod = minlod;
       cso->maxlod = maxlod;
@@ -291,40 +292,36 @@ i915_create_sampler_state(struct pipe_context *pipe,
    return cso;
 }
 
-static void i915_fixup_bind_sampler_states(struct pipe_context *pipe,
-                                           unsigned num, void **sampler)
-{
-   struct i915_context *i915 = i915_context(pipe);
-
-   i915->saved_nr_samplers = num;
-   memcpy(&i915->saved_samplers, sampler, sizeof(void *) * num);
-
-   i915->saved_bind_sampler_states(pipe, num, sampler);
-}
-
 static void
 i915_bind_vertex_sampler_states(struct pipe_context *pipe,
-                                unsigned num_samplers,
+                                unsigned start,
+                                unsigned num,
                                 void **samplers)
 {
    struct i915_context *i915 = i915_context(pipe);
    unsigned i;
 
-   assert(num_samplers <= PIPE_MAX_VERTEX_SAMPLERS);
+   assert(start + num <= ARRAY_SIZE(i915->vertex_samplers));
 
    /* Check for no-op */
-   if (num_samplers == i915->num_vertex_samplers &&
-       !memcmp(i915->vertex_samplers, samplers, num_samplers * sizeof(void *)))
+   if (num == i915->num_vertex_samplers &&
+       !memcmp(i915->vertex_samplers + start, samplers,
+              num * sizeof(void *)))
       return;
 
-   for (i = 0; i < num_samplers; ++i)
-      i915->vertex_samplers[i] = samplers[i];
-   for (i = num_samplers; i < PIPE_MAX_VERTEX_SAMPLERS; ++i)
-      i915->vertex_samplers[i] = NULL;
+   for (i = 0; i < num; ++i)
+      i915->vertex_samplers[i + start] = samplers[i];
 
-   i915->num_vertex_samplers = num_samplers;
+   /* find highest non-null samplers[] entry */
+   {
+      unsigned j = MAX2(i915->num_vertex_samplers, start + num);
+      while (j > 0 && i915->vertex_samplers[j - 1] == NULL)
+         j--;
+      i915->num_vertex_samplers = j;
+   }
 
    draw_set_samplers(i915->draw,
+                     PIPE_SHADER_VERTEX,
                      i915->vertex_samplers,
                      i915->num_vertex_samplers);
 }
@@ -332,26 +329,53 @@ i915_bind_vertex_sampler_states(struct pipe_context *pipe,
 
 
 static void i915_bind_fragment_sampler_states(struct pipe_context *pipe,
-                                     unsigned num, void **sampler)
+                                              unsigned start,
+                                              unsigned num,
+                                              void **samplers)
 {
    struct i915_context *i915 = i915_context(pipe);
    unsigned i;
 
    /* Check for no-op */
    if (num == i915->num_samplers &&
-       !memcmp(i915->sampler, sampler, num * sizeof(void *)))
+       !memcmp(i915->fragment_sampler + start, samplers,
+               num * sizeof(void *)))
       return;
 
    for (i = 0; i < num; ++i)
-      i915->sampler[i] = sampler[i];
-   for (i = num; i < PIPE_MAX_SAMPLERS; ++i)
-      i915->sampler[i] = NULL;
+      i915->fragment_sampler[i + start] = samplers[i];
 
-   i915->num_samplers = num;
+   /* find highest non-null samplers[] entry */
+   {
+      unsigned j = MAX2(i915->num_samplers, start + num);
+      while (j > 0 && i915->fragment_sampler[j - 1] == NULL)
+         j--;
+      i915->num_samplers = j;
+   }
 
    i915->dirty |= I915_NEW_SAMPLER;
 }
 
+
+static void
+i915_bind_sampler_states(struct pipe_context *pipe,
+                         enum pipe_shader_type shader,
+                         unsigned start, unsigned num_samplers,
+                         void **samplers)
+{
+   switch (shader) {
+   case PIPE_SHADER_VERTEX:
+      i915_bind_vertex_sampler_states(pipe, start, num_samplers, samplers);
+      break;
+   case PIPE_SHADER_FRAGMENT:
+      i915_bind_fragment_sampler_states(pipe, start, num_samplers, samplers);
+      break;
+   default:
+      ;
+   }
+}
+
+
 static void i915_delete_sampler_state(struct pipe_context *pipe,
                                       void *sampler)
 {
@@ -369,15 +393,15 @@ i915_prepare_vertex_sampling(struct i915_context *i915)
    unsigned i,j;
    uint32_t row_stride[PIPE_MAX_TEXTURE_LEVELS];
    uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS];
-   const void* data[PIPE_MAX_TEXTURE_LEVELS];
+   uint32_t mip_offsets[PIPE_MAX_TEXTURE_LEVELS];
    unsigned num = i915->num_vertex_sampler_views;
    struct pipe_sampler_view **views = i915->vertex_sampler_views;
 
-   assert(num <= PIPE_MAX_VERTEX_SAMPLERS);
+   assert(num <= PIPE_MAX_SAMPLERS);
    if (!num)
       return;
 
-   for (i = 0; i < PIPE_MAX_VERTEX_SAMPLERS; i++) {
+   for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
       struct pipe_sampler_view *view = i < num ? views[i] : NULL;
 
       if (view) {
@@ -390,25 +414,26 @@ i915_prepare_vertex_sampling(struct i915_context *i915)
           */
          pipe_resource_reference(&i915->mapped_vs_tex[i], tex);
 
-        i915->mapped_vs_tex_buffer[i] = i915_tex->buffer;
+         i915->mapped_vs_tex_buffer[i] = i915_tex->buffer;
          addr = iws->buffer_map(iws,
                                 i915_tex->buffer,
                                 FALSE /* read only */);
 
          /* Setup array of mipmap level pointers */
-        /* FIXME: handle 3D textures? */
+         /* FIXME: handle 3D textures? */
          for (j = view->u.tex.first_level; j <= tex->last_level; j++) {
-            unsigned offset = i915_texture_offset(i915_tex, j , 0 /* FIXME depth */);
-            data[j] = addr + offset;
+            mip_offsets[j] = i915_texture_offset(i915_tex, j , 0 /* FIXME depth */);
             row_stride[j] = i915_tex->stride;
-            img_stride[j] = 0; /* FIXME */;
+            img_stride[j] = 0; /* FIXME */
          }
 
          draw_set_mapped_texture(i915->draw,
+                                 PIPE_SHADER_VERTEX,
                                  i,
                                  tex->width0, tex->height0, tex->depth0,
                                  view->u.tex.first_level, tex->last_level,
-                                 row_stride, img_stride, data);
+                                 0, 0, addr,
+                                 row_stride, img_stride, mip_offsets);
       } else
          i915->mapped_vs_tex[i] = NULL;
    }
@@ -419,7 +444,7 @@ i915_cleanup_vertex_sampling(struct i915_context *i915)
 {
    struct i915_winsys *iws = i915->iws;
    unsigned i;
-   for (i = 0; i < Elements(i915->mapped_vs_tex); i++) {
+   for (i = 0; i < ARRAY_SIZE(i915->mapped_vs_tex); i++) {
       if (i915->mapped_vs_tex_buffer[i]) { 
          iws->buffer_unmap(iws, i915->mapped_vs_tex_buffer[i]);
          pipe_resource_reference(&i915->mapped_vs_tex[i], NULL);
@@ -507,7 +532,7 @@ i915_create_depth_stencil_state(struct pipe_context *pipe,
                           (func << S6_DEPTH_TEST_FUNC_SHIFT));
 
       if (depth_stencil->depth.writemask)
-        cso->depth_LIS6 |= S6_DEPTH_WRITE_ENABLE;
+         cso->depth_LIS6 |= S6_DEPTH_WRITE_ENABLE;
    }
 
    if (depth_stencil->alpha.enabled) {
@@ -542,7 +567,9 @@ static void i915_delete_depth_stencil_state(struct pipe_context *pipe,
 }
 
 
-static void i915_set_scissor_state( struct pipe_context *pipe,
+static void i915_set_scissor_states( struct pipe_context *pipe,
+                                     unsigned start_slot,
+                                     unsigned num_scissors,
                                  const struct pipe_scissor_state *scissor )
 {
    struct i915_context *i915 = i915_context(pipe);
@@ -579,19 +606,6 @@ i915_create_fs_state(struct pipe_context *pipe,
    return ifs;
 }
 
-static void
-i915_fixup_bind_fs_state(struct pipe_context *pipe, void *shader)
-{
-   struct i915_context *i915 = i915_context(pipe);
-
-   if (i915->saved_fs == shader)
-      return;
-
-   i915->saved_fs = shader;
-
-   i915->saved_bind_fs_state(pipe, shader);
-}
-
 static void
 i915_bind_fs_state(struct pipe_context *pipe, void *shader)
 {
@@ -612,17 +626,14 @@ void i915_delete_fs_state(struct pipe_context *pipe, void *shader)
 {
    struct i915_fragment_shader *ifs = (struct i915_fragment_shader *) shader;
 
-   if (ifs->decl) {
-      FREE(ifs->decl);
-      ifs->decl = NULL;
-   }
+   FREE(ifs->decl);
+   ifs->decl = NULL;
+
+   FREE(ifs->program);
+   ifs->program = NULL;
+   FREE((struct tgsi_token *)ifs->state.tokens);
+   ifs->state.tokens = NULL;
 
-   if (ifs->program) {
-      FREE(ifs->program);
-      ifs->program = NULL;
-      FREE((struct tgsi_token *)ifs->state.tokens);
-      ifs->state.tokens = NULL;
-   }
    ifs->program_len = 0;
    ifs->decl_len = 0;
 
@@ -644,10 +655,10 @@ static void i915_bind_vs_state(struct pipe_context *pipe, void *shader)
 {
    struct i915_context *i915 = i915_context(pipe);
 
-   if (i915->saved_vs == shader)
+   if (i915->vs == shader)
       return;
 
-   i915->saved_vs = shader;
+   i915->vs = shader;
 
    /* just pass-through to draw module */
    draw_bind_vertex_shader(i915->draw, (struct draw_vertex_shader *) shader);
@@ -664,8 +675,8 @@ static void i915_delete_vs_state(struct pipe_context *pipe, void *shader)
 }
 
 static void i915_set_constant_buffer(struct pipe_context *pipe,
-                                     uint shader, uint index,
-                                     struct pipe_constant_buffer *cb)
+                                     enum pipe_shader_type shader, uint index,
+                                     const struct pipe_constant_buffer *cb)
 {
    struct i915_context *i915 = i915_context(pipe);
    struct pipe_resource *buf = cb ? cb->buffer : NULL;
@@ -719,27 +730,6 @@ static void i915_set_constant_buffer(struct pipe_context *pipe,
 }
 
 
-static void
-i915_fixup_set_fragment_sampler_views(struct pipe_context *pipe,
-                                      unsigned num,
-                                      struct pipe_sampler_view **views)
-{
-   struct i915_context *i915 = i915_context(pipe);
-   int i;
-
-   for (i = 0; i < num; i++)
-      pipe_sampler_view_reference(&i915->saved_sampler_views[i],
-                                  views[i]);
-
-   for (i = num; i < i915->saved_nr_sampler_views; i++)
-      pipe_sampler_view_reference(&i915->saved_sampler_views[i],
-                                  NULL);
-
-   i915->saved_nr_sampler_views = num;
-
-   i915->saved_set_sampler_views(pipe, num, views);
-}
-
 static void i915_set_fragment_sampler_views(struct pipe_context *pipe,
                                             unsigned num,
                                             struct pipe_sampler_view **views)
@@ -754,13 +744,12 @@ static void i915_set_fragment_sampler_views(struct pipe_context *pipe,
        !memcmp(i915->fragment_sampler_views, views, num * sizeof(struct pipe_sampler_view *)))
       return;
 
-   for (i = 0; i < num; i++)
-      pipe_sampler_view_reference(&i915->fragment_sampler_views[i],
-                                  views[i]);
+   for (i = 0; i < num; i++) {
+      pipe_sampler_view_reference(&i915->fragment_sampler_views[i], views[i]);
+   }
 
    for (i = num; i < i915->num_fragment_sampler_views; i++)
-      pipe_sampler_view_reference(&i915->fragment_sampler_views[i],
-                                  NULL);
+      pipe_sampler_view_reference(&i915->fragment_sampler_views[i], NULL);
 
    i915->num_fragment_sampler_views = num;
 
@@ -775,7 +764,7 @@ i915_set_vertex_sampler_views(struct pipe_context *pipe,
    struct i915_context *i915 = i915_context(pipe);
    uint i;
 
-   assert(num <= PIPE_MAX_VERTEX_SAMPLERS);
+   assert(num <= ARRAY_SIZE(i915->vertex_sampler_views));
 
    /* Check for no-op */
    if (num == i915->num_vertex_sampler_views &&
@@ -783,7 +772,7 @@ i915_set_vertex_sampler_views(struct pipe_context *pipe,
       return;
    }
 
-   for (i = 0; i < PIPE_MAX_VERTEX_SAMPLERS; i++) {
+   for (i = 0; i < ARRAY_SIZE(i915->vertex_sampler_views); i++) {
       struct pipe_sampler_view *view = i < num ? views[i] : NULL;
 
       pipe_sampler_view_reference(&i915->vertex_sampler_views[i], view);
@@ -792,11 +781,51 @@ i915_set_vertex_sampler_views(struct pipe_context *pipe,
    i915->num_vertex_sampler_views = num;
 
    draw_set_sampler_views(i915->draw,
+                          PIPE_SHADER_VERTEX,
                           i915->vertex_sampler_views,
                           i915->num_vertex_sampler_views);
 }
 
 
+static void
+i915_set_sampler_views(struct pipe_context *pipe, enum pipe_shader_type shader,
+                       unsigned start, unsigned num,
+                       struct pipe_sampler_view **views)
+{
+   assert(start == 0);
+   switch (shader) {
+   case PIPE_SHADER_FRAGMENT:
+      i915_set_fragment_sampler_views(pipe, num, views);
+      break;
+   case PIPE_SHADER_VERTEX:
+      i915_set_vertex_sampler_views(pipe, num, views);
+      break;
+   default:
+      ;
+   }
+}
+
+
+struct pipe_sampler_view *
+i915_create_sampler_view_custom(struct pipe_context *pipe,
+                                struct pipe_resource *texture,
+                                const struct pipe_sampler_view *templ,
+                                unsigned width0,
+                                unsigned height0)
+{
+   struct pipe_sampler_view *view = CALLOC_STRUCT(pipe_sampler_view);
+
+   if (view) {
+      *view = *templ;
+      view->reference.count = 1;
+      view->texture = NULL;
+      pipe_resource_reference(&view->texture, texture);
+      view->context = pipe;
+   }
+
+   return view;
+}
+
 static struct pipe_sampler_view *
 i915_create_sampler_view(struct pipe_context *pipe,
                          struct pipe_resource *texture,
@@ -850,7 +879,7 @@ static void i915_set_clip_state( struct pipe_context *pipe,
 {
    struct i915_context *i915 = i915_context(pipe);
 
-   i915->saved_clip = *clip;
+   i915->clip = *clip;
 
    draw_set_clip_state(i915->draw, clip);
 
@@ -859,10 +888,12 @@ static void i915_set_clip_state( struct pipe_context *pipe,
 
 
 
-/* Called when driver state tracker notices changes to the viewport
+/* Called when gallium frontends notice changes to the viewport
  * matrix:
  */
-static void i915_set_viewport_state( struct pipe_context *pipe,
+static void i915_set_viewport_states( struct pipe_context *pipe,
+                                      unsigned start_slot,
+                                      unsigned num_viewports,
                                     const struct pipe_viewport_state *viewport )
 {
    struct i915_context *i915 = i915_context(pipe);
@@ -870,7 +901,8 @@ static void i915_set_viewport_state( struct pipe_context *pipe,
    i915->viewport = *viewport; /* struct copy */
 
    /* pass the viewport info to the draw module */
-   draw_set_viewport_state(i915->draw, &i915->viewport);
+   draw_set_viewport_states(i915->draw, start_slot, num_viewports,
+                            &i915->viewport);
 
    i915->dirty |= I915_NEW_VIEWPORT;
 }
@@ -883,7 +915,6 @@ i915_create_rasterizer_state(struct pipe_context *pipe,
    struct i915_rasterizer_state *cso = CALLOC_STRUCT( i915_rasterizer_state );
 
    cso->templ = *rasterizer;
-   cso->color_interp = rasterizer->flatshade ? INTERP_CONSTANT : INTERP_LINEAR;
    cso->light_twoside = rasterizer->light_twoside;
    cso->ds[0].u = _3DSTATE_DEPTH_OFFSET_SCALE;
    cso->ds[1].f = rasterizer->offset_scale;
@@ -969,34 +1000,18 @@ static void i915_delete_rasterizer_state(struct pipe_context *pipe,
 }
 
 static void i915_set_vertex_buffers(struct pipe_context *pipe,
-                                    unsigned count,
+                                    unsigned start_slot, unsigned count,
                                     const struct pipe_vertex_buffer *buffers)
 {
    struct i915_context *i915 = i915_context(pipe);
    struct draw_context *draw = i915->draw;
-   int i;
 
-   util_copy_vertex_buffers(i915->saved_vertex_buffers,
-                            &i915->saved_nr_vertex_buffers,
-                            buffers, count);
-#if 0
-   /* XXX doesn't look like this is needed */
-   /* unmap old */
-   for (i = 0; i < i915->num_vertex_buffers; i++) {
-      draw_set_mapped_vertex_buffer(draw, i, NULL);
-   }
-#endif
+   util_set_vertex_buffers_count(i915->vertex_buffers,
+                                 &i915->nr_vertex_buffers,
+                                 buffers, start_slot, count);
 
    /* pass-through to draw module */
-   draw_set_vertex_buffers(draw, count, buffers);
-
-   /* map new */
-   for (i = 0; i < count; i++) {
-      const void *buf = buffers[i].user_buffer;
-      if (!buf)
-            buf = i915_buffer(buffers[i].buffer)->data;
-      draw_set_mapped_vertex_buffer(draw, i, buf);
-   }
+   draw_set_vertex_buffers(draw, start_slot, count, buffers);
 }
 
 static void *
@@ -1021,10 +1036,10 @@ i915_bind_vertex_elements_state(struct pipe_context *pipe,
    struct i915_context *i915 = i915_context(pipe);
    struct i915_velems_state *i915_velems = (struct i915_velems_state *) velems;
 
-   if (i915->saved_velems == velems)
+   if (i915->velems == velems)
       return;
 
-   i915->saved_velems = velems;
+   i915->velems = velems;
 
    /* pass-through to draw module */
    if (i915_velems) {
@@ -1039,17 +1054,6 @@ i915_delete_vertex_elements_state(struct pipe_context *pipe, void *velems)
    FREE( velems );
 }
 
-static void i915_set_index_buffer(struct pipe_context *pipe,
-                                  const struct pipe_index_buffer *ib)
-{
-   struct i915_context *i915 = i915_context(pipe);
-
-   if (ib)
-      memcpy(&i915->index_buffer, ib, sizeof(i915->index_buffer));
-   else
-      memset(&i915->index_buffer, 0, sizeof(i915->index_buffer));
-}
-
 static void
 i915_set_sample_mask(struct pipe_context *pipe,
                      unsigned sample_mask)
@@ -1064,8 +1068,7 @@ i915_init_state_functions( struct i915_context *i915 )
    i915->base.delete_blend_state = i915_delete_blend_state;
 
    i915->base.create_sampler_state = i915_create_sampler_state;
-   i915->base.bind_fragment_sampler_states = i915_bind_fragment_sampler_states;
-   i915->base.bind_vertex_sampler_states = i915_bind_vertex_sampler_states;
+   i915->base.bind_sampler_states = i915_bind_sampler_states;
    i915->base.delete_sampler_state = i915_delete_sampler_state;
 
    i915->base.create_depth_stencil_alpha_state = i915_create_depth_stencil_state;
@@ -1093,23 +1096,10 @@ i915_init_state_functions( struct i915_context *i915 )
    i915->base.set_framebuffer_state = i915_set_framebuffer_state;
 
    i915->base.set_polygon_stipple = i915_set_polygon_stipple;
-   i915->base.set_scissor_state = i915_set_scissor_state;
-   i915->base.set_fragment_sampler_views = i915_set_fragment_sampler_views;
-   i915->base.set_vertex_sampler_views = i915_set_vertex_sampler_views;
+   i915->base.set_scissor_states = i915_set_scissor_states;
+   i915->base.set_sampler_views = i915_set_sampler_views;
    i915->base.create_sampler_view = i915_create_sampler_view;
    i915->base.sampler_view_destroy = i915_sampler_view_destroy;
-   i915->base.set_viewport_state = i915_set_viewport_state;
+   i915->base.set_viewport_states = i915_set_viewport_states;
    i915->base.set_vertex_buffers = i915_set_vertex_buffers;
-   i915->base.set_index_buffer = i915_set_index_buffer;
-}
-
-void
-i915_init_fixup_state_functions( struct i915_context *i915 )
-{
-   i915->saved_bind_fs_state = i915->base.bind_fs_state;
-   i915->base.bind_fs_state = i915_fixup_bind_fs_state;
-   i915->saved_bind_sampler_states = i915->base.bind_fragment_sampler_states;
-   i915->base.bind_fragment_sampler_states = i915_fixup_bind_sampler_states;
-   i915->saved_set_sampler_views = i915->base.set_fragment_sampler_views;
-   i915->base.set_fragment_sampler_views = i915_fixup_set_fragment_sampler_views;
 }