1debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell/**************************************************************************
22e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz *
3877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * Copyright 2007 VMware, Inc.
4debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * All Rights Reserved.
52e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz *
6debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a
7debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * copy of this software and associated documentation files (the
8debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * "Software"), to deal in the Software without restriction, including
9debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish,
10debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to
11debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to
12debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * the following conditions:
132e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz *
14debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * The above copyright notice and this permission notice (including the
15debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * next paragraph) shall be included in all copies or substantial portions
16debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * of the Software.
172e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz *
18debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
22debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
252e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz *
26debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell **************************************************************************/
27debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell /*
28debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell  * Authors:
29877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca  *   Keith Whitwell <keithw@vmware.com>
30debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell  */
312e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz
32debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell#include "i915_state_inlines.h"
33debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell#include "i915_context.h"
34debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell#include "i915_state.h"
35debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell#include "i915_reg.h"
364f25420bdd834e81a3e22733304efc5261c2998aBrian Paul#include "util/u_memory.h"
37debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
38debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
39b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz/* Convinience function to check immediate state.
40b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz */
41b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz
42a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void set_immediate(struct i915_context *i915,
43b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz                                 unsigned offset,
44b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz                                 const unsigned state)
45b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz{
46b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   if (i915->current.immediate[offset] == state)
47b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz      return;
48b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz
49b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   i915->current.immediate[offset] = state;
50b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   i915->immediate_dirty |= 1 << offset;
51b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   i915->hardware_dirty |= I915_HW_IMMEDIATE;
52b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz}
53b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz
54b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz
55debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
56debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell/***********************************************************************
572e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz * S0,S1: Vertex buffer state.
58f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca */
59f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonsecastatic void upload_S0S1(struct i915_context *i915)
60f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca{
61f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca   unsigned LIS0, LIS1;
62f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca
632e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz   /* I915_NEW_VBO
642e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz    */
65cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz   LIS0 = i915->vbo_offset;
66f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca
67b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   /* Need to force this */
68b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   if (i915->dirty & I915_NEW_VBO) {
69b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz      i915->immediate_dirty |= 1 << I915_IMMEDIATE_S0;
70b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz      i915->hardware_dirty |= I915_HW_IMMEDIATE;
71b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   }
72b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz
732e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz   /* I915_NEW_VERTEX_SIZE
74f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca    */
75f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca   {
76f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca      unsigned vertex_size = i915->current.vertex_info.size;
77f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca
78f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca      LIS1 = ((vertex_size << 24) |
792e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz              (vertex_size << 16));
80f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca   }
81f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca
82b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   set_immediate(i915, I915_IMMEDIATE_S0, LIS0);
83b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   set_immediate(i915, I915_IMMEDIATE_S1, LIS1);
84f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca}
85f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca
86f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonsecaconst struct i915_tracked_state i915_upload_S0S1 = {
87e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   "imm S0 S1",
88e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   upload_S0S1,
89e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   I915_NEW_VBO | I915_NEW_VERTEX_FORMAT
90f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca};
91f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca
92f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca
93f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca
94f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca/***********************************************************************
95debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell * S4: Vertex format, rasterization state
96debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell */
97debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwellstatic void upload_S2S4(struct i915_context *i915)
98debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell{
9940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell   unsigned LIS2, LIS4;
1006d88515190ed7500e201706cc14d30072ba42d6fBrian Paul
1012e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz   /* I915_NEW_VERTEX_FORMAT
1022e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz    */
1036d88515190ed7500e201706cc14d30072ba42d6fBrian Paul   {
1046d88515190ed7500e201706cc14d30072ba42d6fBrian Paul      LIS2 = i915->current.vertex_info.hwfmt[1];
1056d88515190ed7500e201706cc14d30072ba42d6fBrian Paul      LIS4 = i915->current.vertex_info.hwfmt[0];
1066d88515190ed7500e201706cc14d30072ba42d6fBrian Paul      assert(LIS4); /* should never be zero? */
1076d88515190ed7500e201706cc14d30072ba42d6fBrian Paul   }
108debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
109cc2629f5912d1c608f830ab63f6c4e0875d2fcefZack Rusin   LIS4 |= i915->rasterizer->LIS4;
110debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
111b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   set_immediate(i915, I915_IMMEDIATE_S2, LIS2);
112b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   set_immediate(i915, I915_IMMEDIATE_S4, LIS4);
113debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell}
114debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
115debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwellconst struct i915_tracked_state i915_upload_S2S4 = {
116e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   "imm S2 S4",
117e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   upload_S2S4,
118e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   I915_NEW_RASTERIZER | I915_NEW_VERTEX_FORMAT
119debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell};
120debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
121debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
122debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
123debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell/***********************************************************************
124debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell */
1252e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantzstatic void upload_S5(struct i915_context *i915)
126debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell{
12740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell   unsigned LIS5 = 0;
128debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
1292e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz   /* I915_NEW_DEPTH_STENCIL
1302e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz    */
1311d8c31b47bd34a43e1f78a9f21a0c02c57c58479Zack Rusin   LIS5 |= i915->depth_stencil->stencil_LIS5;
132388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger   /* hope it's safe to set stencil ref value even if stencil test is disabled? */
133388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger   LIS5 |= i915->stencil_ref.ref_value[0] << S5_STENCIL_REF_SHIFT;
134debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
1352e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz   /* I915_NEW_BLEND
1362e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz    */
137b6d50abd7d483029469a0faaa28e8e2f2f742c6dZack Rusin   LIS5 |= i915->blend->LIS5;
138debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
139debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell#if 0
1402e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz   /* I915_NEW_RASTERIZER
1412e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz    */
14269cfc16cb670804b272e88abac5ed3856bb70fa8Jakob Bornecrantz   if (i915->rasterizer->LIS7) {
143debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell      LIS5 |= S5_GLOBAL_DEPTH_OFFSET_ENABLE;
144debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell   }
145debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell#endif
146debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
147b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   set_immediate(i915, I915_IMMEDIATE_S5, LIS5);
148debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell}
149debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
150debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwellconst struct i915_tracked_state i915_upload_S5 = {
151e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   "imm S5",
152e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   upload_S5,
153e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   I915_NEW_DEPTH_STENCIL | I915_NEW_BLEND | I915_NEW_RASTERIZER
154debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell};
155debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
156debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
1572e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz
158debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell/***********************************************************************
159debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell */
1602e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantzstatic void upload_S6(struct i915_context *i915)
161debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell{
162cfc23bc54c8cae2615d447bc199ff87ef7e9298eJakob Bornecrantz   unsigned LIS6 = (2 << S6_TRISTRIP_PV_SHIFT);
163cfc23bc54c8cae2615d447bc199ff87ef7e9298eJakob Bornecrantz
164cfc23bc54c8cae2615d447bc199ff87ef7e9298eJakob Bornecrantz   /* I915_NEW_FRAMEBUFFER
165cfc23bc54c8cae2615d447bc199ff87ef7e9298eJakob Bornecrantz    */
166cfc23bc54c8cae2615d447bc199ff87ef7e9298eJakob Bornecrantz   if (i915->framebuffer.cbufs[0])
167cfc23bc54c8cae2615d447bc199ff87ef7e9298eJakob Bornecrantz      LIS6 |= S6_COLOR_WRITE_ENABLE;
168debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
169debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell   /* I915_NEW_BLEND
170debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell    */
171b6d50abd7d483029469a0faaa28e8e2f2f742c6dZack Rusin   LIS6 |= i915->blend->LIS6;
172debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
1731d8c31b47bd34a43e1f78a9f21a0c02c57c58479Zack Rusin   /* I915_NEW_DEPTH
174debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell    */
1751d8c31b47bd34a43e1f78a9f21a0c02c57c58479Zack Rusin   LIS6 |= i915->depth_stencil->depth_LIS6;
176debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
177b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   set_immediate(i915, I915_IMMEDIATE_S6, LIS6);
178debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell}
179debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
180debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwellconst struct i915_tracked_state i915_upload_S6 = {
18142b8b2be8553390f2e5f847759e886b910b550ccJakob Bornecrantz   "imm S6",
182e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   upload_S6,
183e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   I915_NEW_BLEND | I915_NEW_DEPTH_STENCIL | I915_NEW_FRAMEBUFFER
184debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell};
185debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
186debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
1872e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz
188debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell/***********************************************************************
189debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell */
1902e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantzstatic void upload_S7(struct i915_context *i915)
191debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell{
1929f2c56fbd68826ba877afb6c10d239e6f52314f5Stéphane Marchesin#if 0
1935961732c1b59403b4e736fa354a64d4a0e5d8af2Michal Krol   unsigned LIS7;
194debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
195294401814d1d89cc731de1c22c25333aa5d59374Zack Rusin   /* I915_NEW_RASTERIZER
196debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell    */
1975961732c1b59403b4e736fa354a64d4a0e5d8af2Michal Krol   LIS7 = i915->rasterizer->LIS7;
198debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
199b9baad2aff6ddc5145d91cbfb81d083a21990a80Jakob Bornecrantz   set_immediate(i915, I915_IMMEDIATE_S7, LIS7);
20069cfc16cb670804b272e88abac5ed3856bb70fa8Jakob Bornecrantz#endif
201debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell}
202debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
203debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwellconst struct i915_tracked_state i915_upload_S7 = {
204e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   "imm S7",
205e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   upload_S7,
206e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   I915_NEW_RASTERIZER
207debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell};
208debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
209debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
2102e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz
2112e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz/***********************************************************************
2122e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz */
213debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwellstatic const struct i915_tracked_state *atoms[] = {
214f39a520892259bc3ff13b47423fb86cd7714c70aJosé Fonseca   &i915_upload_S0S1,
215debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell   &i915_upload_S2S4,
216debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell   &i915_upload_S5,
217debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell   &i915_upload_S6,
218debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell   &i915_upload_S7
219debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell};
220debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
221e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantzstatic void update_immediate(struct i915_context *i915)
222debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell{
223debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell   int i;
224debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell
225951bf8b4a64c9793d10e963889e74fc1659ddb4bBrian Paul   for (i = 0; i < ARRAY_SIZE(atoms); i++)
226debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell      if (i915->dirty & atoms[i]->dirty)
2272e7a90546d42eb84d4b5b381dc2c709416d07186Jakob Bornecrantz         atoms[i]->update(i915);
228debb4884e3bdf1e632ff79e728a59c1920cc2d15Keith Whitwell}
229e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz
230e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantzstruct i915_tracked_state i915_hw_immediate = {
231e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   "immediate",
232e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz   update_immediate,
23305e7f7f4388bde882b7ce74124000a4d435affffZoë Blade   ~0 /* all state atoms, because we do internal checking */
234e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz};
235