i915_context.h revision bc88c95990f871a206a8fe93e7541f1f41841f7e
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 41bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstruct i915_winsys; 42bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstruct i915_winsys_buffer; 43bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantzstruct i915_winsys_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; 1518e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger 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 1908e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheideggerstruct i915_velems_state { 1918e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger unsigned count; 192e8983f70b41ea92a9527cb618db011b5dd136626Roland Scheidegger struct pipe_vertex_element velem[PIPE_MAX_ATTRIBS]; 1938e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger}; 1948e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger 195e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul#define I915_MAX_TEXTURE_2D_LEVELS 11 /* max 1024x1024 */ 196e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul#define I915_MAX_TEXTURE_3D_LEVELS 8 /* max 128x128x128 */ 197e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul 198253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_texture { 199253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_texture base; 200253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 201253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /* Derived from the above: 202253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 2034ddd65967915ca4846f2831bc676c878a29dae4aJosé Fonseca unsigned stride; 2044ddd65967915ca4846f2831bc676c878a29dae4aJosé Fonseca unsigned depth_stride; /* per-image on i945? */ 2054ddd65967915ca4846f2831bc676c878a29dae4aJosé Fonseca unsigned total_nblocksy; 206253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 207d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz unsigned sw_tiled; /**< tiled with software flags */ 208d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz unsigned hw_tiled; /**< tiled with hardware fences */ 209f52ab4cc22bfb6708724f3c3966ce734d605cdddJakob Bornecrantz 210e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul unsigned nr_images[I915_MAX_TEXTURE_2D_LEVELS]; 211253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 212253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /* Explicitly store the offset of each image for each cube face or 213253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * depth value. Pretty much have to accept that hardware formats 214253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * are going to be so diverse that there is no unified way to 215253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * compute the offsets of depth/cube images within a mipmap level, 216253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * so have to store them as a lookup table: 217253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 218e0d4f3202e213ae790a272eba7e96a40f68a6822Brian Paul unsigned *image_offset[I915_MAX_TEXTURE_2D_LEVELS]; /**< array [depth] of offsets */ 219253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 220253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /* The data is held here: 221253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 222bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_buffer *buffer; 223253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}; 224253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 225253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_context 226253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{ 227e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz struct pipe_context base; 228e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz 229bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys *iws; 230d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 231253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct draw_context *draw; 232253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 233253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /* The most recent drawing state as set by the driver: 234253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 235253066d716e3039522eeb7b072811cccd89b4a82José Fonseca const struct i915_blend_state *blend; 236253066d716e3039522eeb7b072811cccd89b4a82José Fonseca const struct i915_sampler_state *sampler[PIPE_MAX_SAMPLERS]; 237253066d716e3039522eeb7b072811cccd89b4a82José Fonseca const struct i915_depth_stencil_state *depth_stencil; 238253066d716e3039522eeb7b072811cccd89b4a82José Fonseca const struct i915_rasterizer_state *rasterizer; 239253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 240253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct i915_fragment_shader *fs; 241253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 242253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_blend_color blend_color; 243388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger struct pipe_stencil_ref stencil_ref; 244253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_clip_state clip; 2451278507e3bf2e83c7027820a0d313de267a440ffRoland Scheidegger /* XXX unneded */ 2461278507e3bf2e83c7027820a0d313de267a440ffRoland Scheidegger struct pipe_buffer *constants[PIPE_SHADER_TYPES]; 247253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_framebuffer_state framebuffer; 248253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_poly_stipple poly_stipple; 249253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_scissor_state scissor; 2501f5285f99771243b636deb9ae0a17c54f818fac6michal struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS]; 251253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_viewport_state viewport; 252253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS]; 253253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 254253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned dirty; 255253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 256253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned num_samplers; 2571f5285f99771243b636deb9ae0a17c54f818fac6michal unsigned num_fragment_sampler_views; 258253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned num_vertex_buffers; 259253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 260bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_batchbuffer *batch; 261253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 262253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /** Vertex buffer */ 263bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_buffer *vbo; 264cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz size_t vbo_offset; 265cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz unsigned vbo_flushed; 266253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 267253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct i915_state current; 268253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned hardware_dirty; 269253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 270253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned debug; 271253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}; 272253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 273253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* A flag for each state_tracker state object: 274253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 275253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VIEWPORT 0x1 276253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_RASTERIZER 0x2 277253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FS 0x4 278253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_BLEND 0x8 279253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_CLIP 0x10 280253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SCISSOR 0x20 281253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_STIPPLE 0x40 282253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FRAMEBUFFER 0x80 283253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_ALPHA_TEST 0x100 284253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_DEPTH_STENCIL 0x200 285253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SAMPLER 0x400 2861f5285f99771243b636deb9ae0a17c54f818fac6michal#define I915_NEW_SAMPLER_VIEW 0x800 287253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_CONSTANTS 0x1000 288253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VBO 0x2000 289253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VS 0x4000 290253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 291253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 292253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Driver's internally generated state flags: 293253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 294253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VERTEX_FORMAT 0x10000 295253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 296253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 297253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Dirty flags for hardware emit 298253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 299253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_STATIC (1<<I915_CACHE_STATIC) 300253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_DYNAMIC (1<<I915_CACHE_DYNAMIC) 301253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_SAMPLER (1<<I915_CACHE_SAMPLER) 302253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_MAP (1<<I915_CACHE_MAP) 303253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_PROGRAM (1<<I915_CACHE_PROGRAM) 304253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_CONSTANTS (1<<I915_CACHE_CONSTANTS) 305253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_IMMEDIATE (1<<(I915_MAX_CACHE+0)) 306253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_INVARIENT (1<<(I915_MAX_CACHE+1)) 307253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 308253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 309253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 310253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_emit.c: 311253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 312253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_render_stage( struct i915_context *i915 ); 313253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 314253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 315253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 316253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_vbuf.c: 317253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 318253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_vbuf_stage( struct i915_context *i915 ); 319253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 320253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 321253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 322253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_state_emit.c: 323253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 324253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_emit_hardware_state(struct i915_context *i915 ); 325253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 326253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 327253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 328253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 329253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_clear.c: 330253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 331eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzervoid i915_clear( struct pipe_context *pipe, unsigned buffers, const float *rgba, 332eb168e26aa63f11a47d70c4555cae30691a2cd57Michel Dänzer double depth, unsigned stencil); 333253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 334253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 335253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 336253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_surface.c: 337253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 338253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_surface_functions( struct i915_context *i915 ); 339253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 340253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_state_functions( struct i915_context *i915 ); 341253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_flush_functions( struct i915_context *i915 ); 342253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_string_functions( struct i915_context *i915 ); 343253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 344253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 3457f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell/************************************************************************ 3467f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell * i915_context.c 3477f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell */ 3487f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwellstruct pipe_context *i915_create_context(struct pipe_screen *screen, 3497f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell void *priv); 350253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 351253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 352253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 353b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell * i915_texture.c 354b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell */ 355b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwellvoid i915_init_texture_functions(struct i915_context *i915 ); 356b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell 357b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell 358b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell/*********************************************************************** 359253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Inline conversion functions. These are better-typed than the 360253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * macros used previously: 361253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 362253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastatic INLINE struct i915_context * 363253066d716e3039522eeb7b072811cccd89b4a82José Fonsecai915_context( struct pipe_context *pipe ) 364253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{ 365253066d716e3039522eeb7b072811cccd89b4a82José Fonseca return (struct i915_context *)pipe; 366253066d716e3039522eeb7b072811cccd89b4a82José Fonseca} 367253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 368253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 369253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 370253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#endif 371