i915_context.h revision 7f41f5447c8f9113c8956901e1c5fff6081ecd94
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
40253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
41d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstruct intel_winsys;
42d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstruct intel_buffer;
43d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantzstruct intel_batchbuffer;
44d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
45d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
46253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_TEX_UNITS 8
47253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
48253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_MODES4       0
49253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_DEPTHSCALE_0 1 /* just the header */
50253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_DEPTHSCALE_1 2
51253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_IAB          3
52253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BC_0         4 /* just the header */
53253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BC_1         5
54253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BFO_0        6
55253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BFO_1        7
56253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_STP_0        8
57253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_STP_1        9
58253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_SC_ENA_0     10
59253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_SC_RECT_0    11
60253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_SC_RECT_1    12
61253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_SC_RECT_2    13
62253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_DYNAMIC          14
63253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
64253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
65253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S0         0
66253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S1         1
67253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S2         2
68253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S3         3
69253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S4         4
70253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S5         5
71253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S6         6
72253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S7         7
73253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_IMMEDIATE        8
74253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
75253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* These must mach the order of LI0_STATE_* bits, as they will be used
76253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * to generate hardware packets:
77253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
78253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_STATIC         0
79253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_DYNAMIC        1 /* handled specially */
80253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_SAMPLER        2
81253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_MAP            3
82253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_PROGRAM        4
83253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_CONSTANTS      5
84253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_CACHE            6
85253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
86253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_CONSTANT  32
87253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
88253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
89253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/** See constant_flags[] below */
90253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CONSTFLAG_USER 0x1f
91253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
92253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
93253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/**
94253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Subclass of pipe_shader_state
95253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
96253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_fragment_shader
97253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
98253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_shader_state state;
99253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
100253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct tgsi_shader_info info;
101253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
102253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint *program;
103253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint program_len;
104253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
105253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /**
106253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * constants introduced during translation.
107253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * These are placed at the end of the constant buffer and grow toward
108253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * the beginning (eg: slot 31, 30 29, ...)
109253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * User-provided constants start at 0.
110253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * This allows both types of constants to co-exist (until there's too many)
111253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * and doesn't require regenerating/changing the fragment program to
112253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * shuffle constants around.
113253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
114253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint num_constants;
115253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   float constants[I915_MAX_CONSTANT][4];
116253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
117253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /**
118253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * Status of each constant
119253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * if I915_CONSTFLAG_PARAM, the value must be taken from the corresponding
120253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * slot of the user's constant buffer. (set by pipe->set_constant_buffer())
121253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * Else, the bitmask indicates which components are occupied by immediates.
122253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
123253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   ubyte constant_flags[I915_MAX_CONSTANT];
124253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
125253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
126253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
127253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_cache_context;
128253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
129253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Use to calculate differences between state emitted to hardware and
130253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * current driver-calculated state.
131253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
132253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_state
133253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
134253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned immediate[I915_MAX_IMMEDIATE];
135253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned dynamic[I915_MAX_DYNAMIC];
136253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
137253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   float constants[PIPE_SHADER_TYPES][I915_MAX_CONSTANT][4];
138253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /** number of constants passed in through a constant buffer */
139253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint num_user_constants[PIPE_SHADER_TYPES];
140253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
141253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* texture sampler state */
142253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sampler[I915_TEX_UNITS][3];
143253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sampler_enable_flags;
144253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sampler_enable_nr;
145253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
146253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* texture image buffers */
147253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned texbuffer[I915_TEX_UNITS][2];
148253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
149253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /** Describes the current hardware vertex layout */
150253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct vertex_info vertex_info;
151253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
152253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned id;			/* track lost context events */
153253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
154253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
155253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_blend_state {
156253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned iab;
157253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned modes4;
158253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS5;
159253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS6;
160253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
161253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
162253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_depth_stencil_state {
163253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned stencil_modes4;
164253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned bfo[2];
165253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned stencil_LIS5;
166253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned depth_LIS6;
167253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
168253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
169253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_rasterizer_state {
1705ad488908b39b8f2278a00c9d2cbce76dd925ad1Vinson Lee   unsigned light_twoside : 1;
171253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned st;
172253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   enum interp_mode color_interp;
173253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
174253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS4;
175253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS7;
176253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sc[1];
177253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
178253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct pipe_rasterizer_state *templ;
179253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
180253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   union { float f; unsigned u; } ds[2];
181253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
182253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
183253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_sampler_state {
184253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned state[3];
185253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct pipe_sampler_state *templ;
186d9d1e39d95fef4a8da15147956ff0c3e0a188b5bJakob Bornecrantz   unsigned minlod;
187d9d1e39d95fef4a8da15147956ff0c3e0a188b5bJakob Bornecrantz   unsigned maxlod;
188253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
189253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
190253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_texture {
191253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_texture base;
192253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
193253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* Derived from the above:
194253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
1954ddd65967915ca4846f2831bc676c878a29dae4aJosé Fonseca   unsigned stride;
1964ddd65967915ca4846f2831bc676c878a29dae4aJosé Fonseca   unsigned depth_stride;          /* per-image on i945? */
1974ddd65967915ca4846f2831bc676c878a29dae4aJosé Fonseca   unsigned total_nblocksy;
198253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
199d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   unsigned sw_tiled; /**< tiled with software flags */
200d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   unsigned hw_tiled; /**< tiled with hardware fences */
201f52ab4cc22bfb6708724f3c3966ce734d605cdddJakob Bornecrantz
202253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned nr_images[PIPE_MAX_TEXTURE_LEVELS];
203253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
204253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* Explicitly store the offset of each image for each cube face or
205253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * depth value.  Pretty much have to accept that hardware formats
206253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * are going to be so diverse that there is no unified way to
207253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * compute the offsets of depth/cube images within a mipmap level,
208253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * so have to store them as a lookup table:
209253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
210253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned *image_offset[PIPE_MAX_TEXTURE_LEVELS];   /**< array [depth] of offsets */
211253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
212253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* The data is held here:
213253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
214d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct intel_buffer *buffer;
215253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
216253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
217253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_context
218253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
219e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz   struct pipe_context base;
220e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz
221d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct intel_winsys *iws;
222d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
223253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct draw_context *draw;
224253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
225253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* The most recent drawing state as set by the driver:
226253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
227253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_blend_state           *blend;
228253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_sampler_state         *sampler[PIPE_MAX_SAMPLERS];
229253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_depth_stencil_state   *depth_stencil;
230253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_rasterizer_state      *rasterizer;
231253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
232253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct i915_fragment_shader *fs;
233253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
234253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_blend_color blend_color;
235253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_clip_state clip;
2361278507e3bf2e83c7027820a0d313de267a440ffRoland Scheidegger   /* XXX unneded */
2371278507e3bf2e83c7027820a0d313de267a440ffRoland Scheidegger   struct pipe_buffer *constants[PIPE_SHADER_TYPES];
238253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_framebuffer_state framebuffer;
239253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_poly_stipple poly_stipple;
240253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_scissor_state scissor;
241253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct i915_texture *texture[PIPE_MAX_SAMPLERS];
242253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_viewport_state viewport;
243253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
244253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
245253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned dirty;
246253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
247253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned num_samplers;
248253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned num_textures;
249253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned num_vertex_elements;
250253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned num_vertex_buffers;
251253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
252d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct intel_batchbuffer *batch;
253253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
254253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /** Vertex buffer */
255d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz   struct intel_buffer *vbo;
256cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz   size_t vbo_offset;
257cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz   unsigned vbo_flushed;
258253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
259253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct i915_state current;
260253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned hardware_dirty;
261253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
262253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned debug;
263253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
264253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
265253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* A flag for each state_tracker state object:
266253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
267253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VIEWPORT      0x1
268253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_RASTERIZER    0x2
269253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FS            0x4
270253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_BLEND         0x8
271253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_CLIP          0x10
272253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SCISSOR       0x20
273253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_STIPPLE       0x40
274253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FRAMEBUFFER   0x80
275253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_ALPHA_TEST    0x100
276253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_DEPTH_STENCIL 0x200
277253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SAMPLER       0x400
278253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_TEXTURE       0x800
279253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_CONSTANTS     0x1000
280253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VBO           0x2000
281253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VS            0x4000
282253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
283253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
284253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Driver's internally generated state flags:
285253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
286253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VERTEX_FORMAT    0x10000
287253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
288253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
289253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Dirty flags for hardware emit
290253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
291253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_STATIC            (1<<I915_CACHE_STATIC)
292253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_DYNAMIC           (1<<I915_CACHE_DYNAMIC)
293253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_SAMPLER           (1<<I915_CACHE_SAMPLER)
294253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_MAP               (1<<I915_CACHE_MAP)
295253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_PROGRAM           (1<<I915_CACHE_PROGRAM)
296253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_CONSTANTS         (1<<I915_CACHE_CONSTANTS)
297253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_IMMEDIATE         (1<<(I915_MAX_CACHE+0))
298253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_INVARIENT         (1<<(I915_MAX_CACHE+1))
299253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
300253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
301253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
302253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_emit.c:
303253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
304253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_render_stage( struct i915_context *i915 );
305253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
306253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
307253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
308253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_vbuf.c:
309253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
310253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_vbuf_stage( struct i915_context *i915 );
311253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
312253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
313253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
314253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_state_emit.c:
315253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
316253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_emit_hardware_state(struct i915_context *i915 );
317253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
318253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
319253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
320253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
321253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_clear.c:
322253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
323eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzervoid i915_clear( struct pipe_context *pipe, unsigned buffers, const float *rgba,
324eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer                 double depth, unsigned stencil);
325253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
326253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
327253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
328253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_surface.c:
329253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
330253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_surface_functions( struct i915_context *i915 );
331253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
332253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_state_functions( struct i915_context *i915 );
333253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_flush_functions( struct i915_context *i915 );
334253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_string_functions( struct i915_context *i915 );
335253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
336253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
3377f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell/************************************************************************
3387f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell * i915_context.c
3397f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell */
3407f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwellstruct pipe_context *i915_create_context(struct pipe_screen *screen,
3417f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell					 void *priv);
342253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
343253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
344253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
345253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Inline conversion functions.  These are better-typed than the
346253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * macros used previously:
347253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
348253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastatic INLINE struct i915_context *
349253066d716e3039522eeb7b072811cccd89b4a82José Fonsecai915_context( struct pipe_context *pipe )
350253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
351253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   return (struct i915_context *)pipe;
352253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}
353253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
354253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
355253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
356253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#endif
357