i915_context.h revision 7287964f944d7e2bcf409b758163ab75c61b0f8e
1253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /**************************************************************************
2253066d716e3039522eeb7b072811cccd89b4a82José Fonseca *
3253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
4253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * All Rights Reserved.
5253066d716e3039522eeb7b072811cccd89b4a82José Fonseca *
6253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a
7253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * copy of this software and associated documentation files (the
8253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * "Software"), to deal in the Software without restriction, including
9253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * without limitation the rights to use, copy, modify, merge, publish,
10253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * distribute, sub license, and/or sell copies of the Software, and to
11253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * permit persons to whom the Software is furnished to do so, subject to
12253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * the following conditions:
13253066d716e3039522eeb7b072811cccd89b4a82José Fonseca *
14253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * The above copyright notice and this permission notice (including the
15253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * next paragraph) shall be included in all copies or substantial portions
16253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * of the Software.
17253066d716e3039522eeb7b072811cccd89b4a82José Fonseca *
18253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25253066d716e3039522eeb7b072811cccd89b4a82José Fonseca *
26253066d716e3039522eeb7b072811cccd89b4a82José Fonseca **************************************************************************/
27253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
28253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#ifndef I915_CONTEXT_H
29253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CONTEXT_H
30253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
31253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
32253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#include "pipe/p_context.h"
33253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#include "pipe/p_defines.h"
34253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#include "pipe/p_state.h"
35253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
36253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#include "draw/draw_vertex.h"
37253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
38c208a2c791fa24c7c5887fc496738cbddbfafc72José Fonseca#include "tgsi/tgsi_scan.h"
39253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
407287964f944d7e2bcf409b758163ab75c61b0f8eJakob Bornecrantz#include "util/u_slab.h"
417287964f944d7e2bcf409b758163ab75c61b0f8eJakob Bornecrantz
42253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
43bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstruct i915_winsys;
44bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstruct i915_winsys_buffer;
45bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstruct i915_winsys_batchbuffer;
46d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
47d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
48253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_TEX_UNITS 8
49253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
50253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_MODES4       0
51253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_DEPTHSCALE_0 1 /* just the header */
52253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_DEPTHSCALE_1 2
53253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_IAB          3
54253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BC_0         4 /* just the header */
55253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BC_1         5
56253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BFO_0        6
57253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BFO_1        7
58253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_STP_0        8
59253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_STP_1        9
60253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_SC_ENA_0     10
61253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_SC_RECT_0    11
62253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_SC_RECT_1    12
63253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_SC_RECT_2    13
64253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_DYNAMIC          14
65253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
66253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
67253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S0         0
68253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S1         1
69253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S2         2
70253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S3         3
71253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S4         4
72253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S5         5
73253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S6         6
74253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S7         7
75253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_IMMEDIATE        8
76253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
77253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* These must mach the order of LI0_STATE_* bits, as they will be used
78253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * to generate hardware packets:
79253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
80253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_STATIC         0
81253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_DYNAMIC        1 /* handled specially */
82253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_SAMPLER        2
83253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_MAP            3
84253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_PROGRAM        4
85253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_CONSTANTS      5
86253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_CACHE            6
87253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
88253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_CONSTANT  32
89253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
90253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
91253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/** See constant_flags[] below */
92253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CONSTFLAG_USER 0x1f
93253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
94253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
95253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/**
96253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Subclass of pipe_shader_state
97253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
98253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_fragment_shader
99253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
100253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_shader_state state;
101253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
102253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct tgsi_shader_info info;
103253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
104253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint *program;
105253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint program_len;
106253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
107253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /**
108253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * constants introduced during translation.
109253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * These are placed at the end of the constant buffer and grow toward
110253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * the beginning (eg: slot 31, 30 29, ...)
111253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * User-provided constants start at 0.
112253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * This allows both types of constants to co-exist (until there's too many)
113253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * and doesn't require regenerating/changing the fragment program to
114253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * shuffle constants around.
115253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
116253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint num_constants;
117253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   float constants[I915_MAX_CONSTANT][4];
118253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
119253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /**
120253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * Status of each constant
121253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * if I915_CONSTFLAG_PARAM, the value must be taken from the corresponding
122253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * slot of the user's constant buffer. (set by pipe->set_constant_buffer())
123253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * Else, the bitmask indicates which components are occupied by immediates.
124253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
125253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   ubyte constant_flags[I915_MAX_CONSTANT];
126253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
127253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
128253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
129253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_cache_context;
130253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
131253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Use to calculate differences between state emitted to hardware and
132253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * current driver-calculated state.
133253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
134253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_state
135253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
136253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned immediate[I915_MAX_IMMEDIATE];
137253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned dynamic[I915_MAX_DYNAMIC];
138253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
139253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   float constants[PIPE_SHADER_TYPES][I915_MAX_CONSTANT][4];
140253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /** number of constants passed in through a constant buffer */
141253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint num_user_constants[PIPE_SHADER_TYPES];
142253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
143253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* texture sampler state */
144253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sampler[I915_TEX_UNITS][3];
145253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sampler_enable_flags;
146253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sampler_enable_nr;
147253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
148253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* texture image buffers */
149253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned texbuffer[I915_TEX_UNITS][2];
150253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
151253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /** Describes the current hardware vertex layout */
152253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct vertex_info vertex_info;
1538e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger
154253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned id;			/* track lost context events */
155253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
156253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
157253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_blend_state {
158253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned iab;
159253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned modes4;
160253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS5;
161253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS6;
162253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
163253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
164253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_depth_stencil_state {
165253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned stencil_modes4;
166253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned bfo[2];
167253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned stencil_LIS5;
168253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned depth_LIS6;
169253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
170253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
171253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_rasterizer_state {
1725ad488908b39b8f2278a00c9d2cbce76dd925ad1Vinson Lee   unsigned light_twoside : 1;
173253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned st;
174253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   enum interp_mode color_interp;
175253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
176253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS4;
177253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS7;
178253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sc[1];
179253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
180253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct pipe_rasterizer_state *templ;
181253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
182253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   union { float f; unsigned u; } ds[2];
183253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
184253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
185253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_sampler_state {
186253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned state[3];
187253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct pipe_sampler_state *templ;
188d9d1e39d95fef4a8da15147956ff0c3e0a188b5bJakob Bornecrantz   unsigned minlod;
189d9d1e39d95fef4a8da15147956ff0c3e0a188b5bJakob Bornecrantz   unsigned maxlod;
190253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
191253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
1928e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheideggerstruct i915_velems_state {
1938e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger   unsigned count;
194e8983f70b41ea92a9527cb618db011b5dd136626Roland Scheidegger   struct pipe_vertex_element velem[PIPE_MAX_ATTRIBS];
1958e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger};
1968e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger
197253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
198a95e694eaf3b40c86fbe8116fc3b5f1add365898Daniel Vetterstruct i915_context {
199e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz   struct pipe_context base;
200e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz
201bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz   struct i915_winsys *iws;
202d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
203253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct draw_context *draw;
204253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
205253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* The most recent drawing state as set by the driver:
206253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
207253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_blend_state           *blend;
208253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_sampler_state         *sampler[PIPE_MAX_SAMPLERS];
209253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_depth_stencil_state   *depth_stencil;
210253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_rasterizer_state      *rasterizer;
211253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
212253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct i915_fragment_shader *fs;
213253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
214253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_blend_color blend_color;
215388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger   struct pipe_stencil_ref stencil_ref;
216253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_clip_state clip;
2171278507e3bf2e83c7027820a0d313de267a440ffRoland Scheidegger   /* XXX unneded */
218287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *constants[PIPE_SHADER_TYPES];
219253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_framebuffer_state framebuffer;
220253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_poly_stipple poly_stipple;
221253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_scissor_state scissor;
2221f5285f99771243b636deb9ae0a17c54f818fac6michal   struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS];
223253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_viewport_state viewport;
224253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
2256d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   struct pipe_index_buffer index_buffer;
226253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
227253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned dirty;
228253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
229253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned num_samplers;
2301f5285f99771243b636deb9ae0a17c54f818fac6michal   unsigned num_fragment_sampler_views;
231253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned num_vertex_buffers;
232253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
233bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz   struct i915_winsys_batchbuffer *batch;
234253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
235253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /** Vertex buffer */
236bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz   struct i915_winsys_buffer *vbo;
237cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz   size_t vbo_offset;
238cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz   unsigned vbo_flushed;
239253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
240253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct i915_state current;
241253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned hardware_dirty;
2427287964f944d7e2bcf409b758163ab75c61b0f8eJakob Bornecrantz
2437287964f944d7e2bcf409b758163ab75c61b0f8eJakob Bornecrantz   struct util_slab_mempool transfer_pool;
244253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
245253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
246253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* A flag for each state_tracker state object:
247253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
248253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VIEWPORT      0x1
249253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_RASTERIZER    0x2
250253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FS            0x4
251253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_BLEND         0x8
252253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_CLIP          0x10
253253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SCISSOR       0x20
254253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_STIPPLE       0x40
255253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FRAMEBUFFER   0x80
256253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_ALPHA_TEST    0x100
257253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_DEPTH_STENCIL 0x200
258253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SAMPLER       0x400
2591f5285f99771243b636deb9ae0a17c54f818fac6michal#define I915_NEW_SAMPLER_VIEW  0x800
260253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_CONSTANTS     0x1000
261253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VBO           0x2000
262253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VS            0x4000
263253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
264253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
265253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Driver's internally generated state flags:
266253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
267253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VERTEX_FORMAT    0x10000
268253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
269253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
270253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Dirty flags for hardware emit
271253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
272253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_STATIC            (1<<I915_CACHE_STATIC)
273253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_DYNAMIC           (1<<I915_CACHE_DYNAMIC)
274253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_SAMPLER           (1<<I915_CACHE_SAMPLER)
275253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_MAP               (1<<I915_CACHE_MAP)
276253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_PROGRAM           (1<<I915_CACHE_PROGRAM)
277253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_CONSTANTS         (1<<I915_CACHE_CONSTANTS)
278253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_IMMEDIATE         (1<<(I915_MAX_CACHE+0))
279a185d439bdab24750d9c22e42a723f6baa23b730Brian Paul#define I915_HW_INVARIANT         (1<<(I915_MAX_CACHE+1))
280253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
281253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
282253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
283253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_emit.c:
284253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
285253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_render_stage( struct i915_context *i915 );
286253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
287253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
288253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
289253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_vbuf.c:
290253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
291253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_vbuf_stage( struct i915_context *i915 );
292253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
293253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
294253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
295253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_state_emit.c:
296253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
297253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_emit_hardware_state(struct i915_context *i915 );
298253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
299253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
300253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
301253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
302253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_clear.c:
303253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
304eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzervoid i915_clear( struct pipe_context *pipe, unsigned buffers, const float *rgba,
305eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer                 double depth, unsigned stencil);
306253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
307253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
308253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
309287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell *
310253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
311253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_state_functions( struct i915_context *i915 );
312253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_flush_functions( struct i915_context *i915 );
313253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_string_functions( struct i915_context *i915 );
314253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
315253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
3167f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell/************************************************************************
3177f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell * i915_context.c
3187f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell */
3197f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwellstruct pipe_context *i915_create_context(struct pipe_screen *screen,
3207f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell					 void *priv);
321253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
322253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
323b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell/***********************************************************************
324253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Inline conversion functions.  These are better-typed than the
325253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * macros used previously:
326253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
327253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastatic INLINE struct i915_context *
328253066d716e3039522eeb7b072811cccd89b4a82José Fonsecai915_context( struct pipe_context *pipe )
329253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
330253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   return (struct i915_context *)pipe;
331253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}
332253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
333253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
334253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#endif
335