1253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /**************************************************************************
2253066d716e3039522eeb7b072811cccd89b4a82José Fonseca *
3877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * Copyright 2003 VMware, Inc.
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.
21877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * IN NO EVENT SHALL VMWARE 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
40e7a73b75a0dbd599187b8980b2e1e1cb5dfdaf6dMarek Olšák#include "util/slab.h"
41fb3b712b84528b192834d3ba3df557b25bbe6e6eDaniel Vetter#include "util/u_blitter.h"
427287964f944d7e2bcf409b758163ab75c61b0f8eJakob Bornecrantz
43253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
44bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstruct i915_winsys;
45bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstruct i915_winsys_buffer;
46bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstruct i915_winsys_batchbuffer;
47d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
48d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
49253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_TEX_UNITS 8
50253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
51253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_MODES4       0
52253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_DEPTHSCALE_0 1 /* just the header */
53fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesin#define I915_DYNAMIC_DEPTHSCALE_1 2
54253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_IAB          3
55253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BC_0         4 /* just the header */
56253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BC_1         5
57fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesin#define I915_DYNAMIC_BFO_0        6
58253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_DYNAMIC_BFO_1        7
59fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesin#define I915_DYNAMIC_STP_0        8
60fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesin#define I915_DYNAMIC_STP_1        9
61fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesin#define I915_DYNAMIC_SC_ENA_0     10
62fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesin#define I915_DYNAMIC_SC_RECT_0    11
63fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesin#define I915_DYNAMIC_SC_RECT_1    12
64fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesin#define I915_DYNAMIC_SC_RECT_2    13
65253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_DYNAMIC          14
66253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
67253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
68253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S0         0
69253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S1         1
70253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S2         2
71253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S3         3
72253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S4         4
73253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S5         5
74253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S6         6
75253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_IMMEDIATE_S7         7
76253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_IMMEDIATE        8
77253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
78253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* These must mach the order of LI0_STATE_* bits, as they will be used
79253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * to generate hardware packets:
80253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
81fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesin#define I915_CACHE_STATIC         0
82253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_DYNAMIC        1 /* handled specially */
83253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_SAMPLER        2
84253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_MAP            3
85253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_PROGRAM        4
86253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CACHE_CONSTANTS      5
87253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_CACHE            6
88253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
89253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_MAX_CONSTANT  32
90253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
91253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
92253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/** See constant_flags[] below */
93253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CONSTFLAG_USER 0x1f
94253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
95253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
96253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/**
97253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Subclass of pipe_shader_state
98253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
99253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_fragment_shader
100253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
101253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_shader_state state;
102253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
103253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct tgsi_shader_info info;
104253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
1051a69b50b3b441ce8f7a00af3a7f02c37df50f6c3Stéphane Marchesin   struct draw_fragment_shader *draw_data;
1061a69b50b3b441ce8f7a00af3a7f02c37df50f6c3Stéphane Marchesin
1078e4540ec2a82e72be491bc8fe23c10551d29a96cStéphane Marchesin   uint *decl;
1088e4540ec2a82e72be491bc8fe23c10551d29a96cStéphane Marchesin   uint decl_len;
1098e4540ec2a82e72be491bc8fe23c10551d29a96cStéphane Marchesin
110253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint *program;
111253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint program_len;
112253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
113253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /**
114253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * constants introduced during translation.
115253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * These are placed at the end of the constant buffer and grow toward
116253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * the beginning (eg: slot 31, 30 29, ...)
117253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * User-provided constants start at 0.
118253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * This allows both types of constants to co-exist (until there's too many)
119253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * and doesn't require regenerating/changing the fragment program to
120253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * shuffle constants around.
121253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
122253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint num_constants;
123253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   float constants[I915_MAX_CONSTANT][4];
124253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
125253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /**
126253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * Status of each constant
127253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * if I915_CONSTFLAG_PARAM, the value must be taken from the corresponding
128253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * slot of the user's constant buffer. (set by pipe->set_constant_buffer())
129253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    * Else, the bitmask indicates which components are occupied by immediates.
130253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
131253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   ubyte constant_flags[I915_MAX_CONSTANT];
132abb436526974bd090853c0927ece0839f9143393Stéphane Marchesin
133abb436526974bd090853c0927ece0839f9143393Stéphane Marchesin   /**
134abb436526974bd090853c0927ece0839f9143393Stéphane Marchesin    * The mapping between generics and hw texture coords.
135abb436526974bd090853c0927ece0839f9143393Stéphane Marchesin    * We need to share this between the vertex and fragment stages.
136abb436526974bd090853c0927ece0839f9143393Stéphane Marchesin    **/
137abb436526974bd090853c0927ece0839f9143393Stéphane Marchesin   int generic_mapping[I915_TEX_UNITS];
138253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
139253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
140253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
141253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_cache_context;
142253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
143253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Use to calculate differences between state emitted to hardware and
144253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * current driver-calculated state.
145253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
146fc1fbb2dc183f979d30b8abc8b235c3a8ff32839Stéphane Marchesinstruct i915_state
147253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
148253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned immediate[I915_MAX_IMMEDIATE];
149253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned dynamic[I915_MAX_DYNAMIC];
150253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
151253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /** number of constants passed in through a constant buffer */
152253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   uint num_user_constants[PIPE_SHADER_TYPES];
153253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
154253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* texture sampler state */
155253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sampler[I915_TEX_UNITS][3];
156253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sampler_enable_flags;
157253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sampler_enable_nr;
158253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
159253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* texture image buffers */
1600220a428d7e8df487e3cbd8c6cdd8ca2f39117adStéphane Marchesin   unsigned texbuffer[I915_TEX_UNITS][3];
161253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
162253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /** Describes the current hardware vertex layout */
163253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct vertex_info vertex_info;
1648e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger
165beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter   /* static state (dst/depth buffer state) */
166beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter   struct i915_winsys_buffer *cbuf_bo;
167beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter   unsigned cbuf_flags;
168beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter   struct i915_winsys_buffer *depth_bo;
169beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter   unsigned depth_flags;
170beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter   unsigned dst_buf_vars;
171f58c11af72303a7b8ec480b4f216e4a17882e0f4Daniel Vetter   uint32_t draw_offset;
172f58c11af72303a7b8ec480b4f216e4a17882e0f4Daniel Vetter   uint32_t draw_size;
17323d4a0569dcb70bdfd748bf7e1f5102289bfad6bStéphane Marchesin   uint32_t target_fixup_format;
174305bcda4b583641bab5a7bfa6ce4e30a8559a868Daniel Vetter   uint32_t fixup_swizzle;
175beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter
176253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned id;			/* track lost context events */
177253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
178253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
179253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_blend_state {
180253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned iab;
181253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned modes4;
182253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS5;
183253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS6;
184253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
185253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
186253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_depth_stencil_state {
187253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned stencil_modes4;
188253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned bfo[2];
189253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned stencil_LIS5;
190253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned depth_LIS6;
191253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
192253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
193253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_rasterizer_state {
1949c76ba04f845077d51912cc11970232cc9160294Stéphane Marchesin   struct pipe_rasterizer_state templ;
1959c76ba04f845077d51912cc11970232cc9160294Stéphane Marchesin
1965ad488908b39b8f2278a00c9d2cbce76dd925ad1Vinson Lee   unsigned light_twoside : 1;
197253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned st;
198253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
199253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS4;
200253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned LIS7;
201253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned sc[1];
202253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
203253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   union { float f; unsigned u; } ds[2];
204253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
205253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
206253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_sampler_state {
207a7534d8943d74e81299b2ee4edc462baac9d1331Stéphane Marchesin   struct pipe_sampler_state templ;
208253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned state[3];
209d9d1e39d95fef4a8da15147956ff0c3e0a188b5bJakob Bornecrantz   unsigned minlod;
210d9d1e39d95fef4a8da15147956ff0c3e0a188b5bJakob Bornecrantz   unsigned maxlod;
211253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
212253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
2138e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheideggerstruct i915_velems_state {
2148e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger   unsigned count;
215e8983f70b41ea92a9527cb618db011b5dd136626Roland Scheidegger   struct pipe_vertex_element velem[PIPE_MAX_ATTRIBS];
2168e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger};
2178e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger
218253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
219a95e694eaf3b40c86fbe8116fc3b5f1add365898Daniel Vetterstruct i915_context {
220e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz   struct pipe_context base;
221e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz
222bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz   struct i915_winsys *iws;
223d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz
224253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct draw_context *draw;
225253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
226253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /* The most recent drawing state as set by the driver:
227253066d716e3039522eeb7b072811cccd89b4a82José Fonseca    */
228253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_blend_state           *blend;
22920bf508a42b0fdd5b094842b1bbeb412ce3f8505Stéphane Marchesin   const struct i915_sampler_state         *fragment_sampler[PIPE_MAX_SAMPLERS];
23020bf508a42b0fdd5b094842b1bbeb412ce3f8505Stéphane Marchesin   struct pipe_sampler_state               *vertex_samplers[PIPE_MAX_SAMPLERS];
231253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_depth_stencil_state   *depth_stencil;
232253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   const struct i915_rasterizer_state      *rasterizer;
233253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
234253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct i915_fragment_shader *fs;
235253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
236dca9e3c4779936970dac796872a2399cd0437f63Stéphane Marchesin   void *vs;
237dca9e3c4779936970dac796872a2399cd0437f63Stéphane Marchesin
238dca9e3c4779936970dac796872a2399cd0437f63Stéphane Marchesin   struct i915_velems_state *velems;
239dca9e3c4779936970dac796872a2399cd0437f63Stéphane Marchesin   unsigned nr_vertex_buffers;
240dca9e3c4779936970dac796872a2399cd0437f63Stéphane Marchesin   struct pipe_vertex_buffer vertex_buffers[PIPE_MAX_ATTRIBS];
241dca9e3c4779936970dac796872a2399cd0437f63Stéphane Marchesin
242253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_blend_color blend_color;
243388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger   struct pipe_stencil_ref stencil_ref;
244253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_clip_state clip;
245287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell   struct pipe_resource *constants[PIPE_SHADER_TYPES];
246253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_framebuffer_state framebuffer;
24705265bee8554241d98e741643d62ad2f8d270192Stéphane Marchesin   struct pipe_poly_stipple poly_stipple;
248253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_scissor_state scissor;
2491f5285f99771243b636deb9ae0a17c54f818fac6Michal Krol   struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS];
2508a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin   struct pipe_sampler_view *vertex_sampler_views[PIPE_MAX_SAMPLERS];
251253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct pipe_viewport_state viewport;
2526d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu   struct pipe_index_buffer index_buffer;
253253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
254253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned dirty;
255253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
256cab2fed135bc1edf7b65ddca3236020638427061Brian Paul   struct pipe_resource *mapped_vs_tex[PIPE_MAX_SAMPLERS];
257cab2fed135bc1edf7b65ddca3236020638427061Brian Paul   struct i915_winsys_buffer* mapped_vs_tex_buffer[PIPE_MAX_SAMPLERS];
2588a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin
259253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned num_samplers;
2601f5285f99771243b636deb9ae0a17c54f818fac6Michal Krol   unsigned num_fragment_sampler_views;
2618a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin   unsigned num_vertex_samplers;
2628a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin   unsigned num_vertex_sampler_views;
263253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
264bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz   struct i915_winsys_batchbuffer *batch;
265253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
266253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   /** Vertex buffer */
267bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz   struct i915_winsys_buffer *vbo;
268cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz   size_t vbo_offset;
269cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz   unsigned vbo_flushed;
270253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
271253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   struct i915_state current;
272253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   unsigned hardware_dirty;
273288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter   unsigned immediate_dirty : I915_MAX_IMMEDIATE;
274288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter   unsigned dynamic_dirty : I915_MAX_DYNAMIC;
275288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter   unsigned static_dirty : 4;
276288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter   unsigned flush_dirty : 2;
2777287964f944d7e2bcf409b758163ab75c61b0f8eJakob Bornecrantz
278342016010a515ccc4492924ca260d7ff76ecb1b5Daniel Vetter   struct i915_winsys_buffer *validation_buffers[2 + 1 + I915_TEX_UNITS];
279342016010a515ccc4492924ca260d7ff76ecb1b5Daniel Vetter   int num_validation_buffers;
280342016010a515ccc4492924ca260d7ff76ecb1b5Daniel Vetter
281e7a73b75a0dbd599187b8980b2e1e1cb5dfdaf6dMarek Olšák   struct slab_mempool transfer_pool;
282e7a73b75a0dbd599187b8980b2e1e1cb5dfdaf6dMarek Olšák   struct slab_mempool texture_transfer_pool;
283f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter
284b97889f543085f516fc1c821c621790399d57fa5Stéphane Marchesin   /* state for tracking flushes */
285b97889f543085f516fc1c821c621790399d57fa5Stéphane Marchesin   int last_fired_vertices;
286b97889f543085f516fc1c821c621790399d57fa5Stéphane Marchesin   int fired_vertices;
287b97889f543085f516fc1c821c621790399d57fa5Stéphane Marchesin   int queued_vertices;
288e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin
289f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter   /** blitter/hw-clear */
290f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter   struct blitter_context* blitter;
291253066d716e3039522eeb7b072811cccd89b4a82José Fonseca};
292253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
293253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* A flag for each state_tracker state object:
294253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
295253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VIEWPORT      0x1
296253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_RASTERIZER    0x2
297253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FS            0x4
298253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_BLEND         0x8
299253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_CLIP          0x10
300253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SCISSOR       0x20
301253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_STIPPLE       0x40
302253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FRAMEBUFFER   0x80
303253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_ALPHA_TEST    0x100
304253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_DEPTH_STENCIL 0x200
305253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SAMPLER       0x400
3061f5285f99771243b636deb9ae0a17c54f818fac6Michal Krol#define I915_NEW_SAMPLER_VIEW  0x800
3072e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_VS_CONSTANTS  0x1000
3082e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_FS_CONSTANTS  0x2000
3092e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_GS_CONSTANTS  0x4000
3102e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_VBO           0x8000
3112e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_VS            0x10000
312253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
313253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
314253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Driver's internally generated state flags:
315253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
316253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VERTEX_FORMAT    0x10000
317253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
318253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
319253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Dirty flags for hardware emit
320253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
321253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_STATIC            (1<<I915_CACHE_STATIC)
322253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_DYNAMIC           (1<<I915_CACHE_DYNAMIC)
323253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_SAMPLER           (1<<I915_CACHE_SAMPLER)
324253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_MAP               (1<<I915_CACHE_MAP)
325253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_PROGRAM           (1<<I915_CACHE_PROGRAM)
326253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_CONSTANTS         (1<<I915_CACHE_CONSTANTS)
327253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_IMMEDIATE         (1<<(I915_MAX_CACHE+0))
328a185d439bdab24750d9c22e42a723f6baa23b730Brian Paul#define I915_HW_INVARIANT         (1<<(I915_MAX_CACHE+1))
329d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter#define I915_HW_FLUSH             (1<<(I915_MAX_CACHE+1))
330d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter
331d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter/* hw flush handling */
332d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter#define I915_FLUSH_CACHE		1
333d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter#define I915_PIPELINE_FLUSH		2
334d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter
335288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter/* split up static state */
336288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter#define I915_DST_BUF_COLOR              1
337288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter#define I915_DST_BUF_DEPTH              2
338288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter#define I915_DST_VARS                   4
339288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter#define I915_DST_RECT                   8
340288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter
341a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline
342d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vettervoid i915_set_flush_dirty(struct i915_context *i915, unsigned flush)
343d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter{
344d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter   i915->hardware_dirty |= I915_HW_FLUSH;
345d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter   i915->flush_dirty |= flush;
346d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter}
347253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
348253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
349253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
350253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_emit.c:
351253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
352253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_render_stage( struct i915_context *i915 );
353253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
354253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
355253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
356253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_vbuf.c:
357253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
358253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_vbuf_stage( struct i915_context *i915 );
359253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
360253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
361253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
3628a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin * i915_state.c:
3638a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin */
364b1d93d2aa8395608e77f1c538aa2234ced3dda75Stéphane Marchesinvoid i915_prepare_vertex_sampling(struct i915_context *i915);
3658a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesinvoid i915_cleanup_vertex_sampling(struct i915_context *i915);
3668a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin
3678a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin
3688a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin
3698a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin/***********************************************************************
370253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_state_emit.c:
371253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
372253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_emit_hardware_state(struct i915_context *i915 );
373253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
374253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
375253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
376253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
377253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_clear.c:
378253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
3796dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlievoid i915_clear_blitter(struct pipe_context *pipe, unsigned buffers,
3806dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie                        const union pipe_color_union *color,
3816358e6371b31671acbfa7c00336673f62ee928c5Daniel Vetter                        double depth, unsigned stencil);
3826dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlievoid i915_clear_render(struct pipe_context *pipe, unsigned buffers,
3836dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie                       const union pipe_color_union *color,
3846358e6371b31671acbfa7c00336673f62ee928c5Daniel Vetter                       double depth, unsigned stencil);
3856dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlievoid i915_clear_emit(struct pipe_context *pipe, unsigned buffers,
3866dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie                     const union pipe_color_union *color,
387fb3b712b84528b192834d3ba3df557b25bbe6e6eDaniel Vetter                     double depth, unsigned stencil,
388fb3b712b84528b192834d3ba3df557b25bbe6e6eDaniel Vetter                     unsigned destx, unsigned desty, unsigned width, unsigned height);
389253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
390253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
391253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/***********************************************************************
392287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell *
393253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
394253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_state_functions( struct i915_context *i915 );
395253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_flush_functions( struct i915_context *i915 );
396253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_string_functions( struct i915_context *i915 );
397253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
398253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
3997f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell/************************************************************************
4007f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell * i915_context.c
4017f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell */
4027f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwellstruct pipe_context *i915_create_context(struct pipe_screen *screen,
4030fc21ecfc0891d239f20bf7724e51bc75503570cMarek Olšák					 void *priv, unsigned flags);
404253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
405253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
406b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell/***********************************************************************
407253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Inline conversion functions.  These are better-typed than the
408253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * macros used previously:
409253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */
410a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct i915_context *
411253066d716e3039522eeb7b072811cccd89b4a82José Fonsecai915_context( struct pipe_context *pipe )
412253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{
413253066d716e3039522eeb7b072811cccd89b4a82José Fonseca   return (struct i915_context *)pipe;
414253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}
415253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
416253066d716e3039522eeb7b072811cccd89b4a82José Fonseca
417253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#endif
418