1253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /************************************************************************** 2253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * 3253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 4253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * All Rights Reserved. 5253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * 6253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * copy of this software and associated documentation files (the 8253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * "Software"), to deal in the Software without restriction, including 9253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * permit persons to whom the Software is furnished to do so, subject to 12253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * the following conditions: 13253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * 14253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * The above copyright notice and this permission notice (including the 15253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * next paragraph) shall be included in all copies or substantial portions 16253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * of the Software. 17253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * 18253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * 26253066d716e3039522eeb7b072811cccd89b4a82José Fonseca **************************************************************************/ 27253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 28253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#ifndef I915_CONTEXT_H 29253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_CONTEXT_H 30253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 31253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 32253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#include "pipe/p_context.h" 33253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#include "pipe/p_defines.h" 34253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#include "pipe/p_state.h" 35253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 36253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#include "draw/draw_vertex.h" 37253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 38c208a2c791fa24c7c5887fc496738cbddbfafc72José Fonseca#include "tgsi/tgsi_scan.h" 39253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 407287964f944d7e2bcf409b758163ab75c61b0f8eJakob Bornecrantz#include "util/u_slab.h" 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; 15845fc069600ddbfe07a0a0cd5280161a8c7c55dd0Stéphane Marchesin boolean sampler_srgb[I915_TEX_UNITS]; 15945fc069600ddbfe07a0a0cd5280161a8c7c55dd0Stéphane Marchesin int srgb_const_offset; 160253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 161253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /* texture image buffers */ 162253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned texbuffer[I915_TEX_UNITS][2]; 163253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 164253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /** Describes the current hardware vertex layout */ 165253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct vertex_info vertex_info; 1668e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger 167beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter /* static state (dst/depth buffer state) */ 168beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter struct i915_winsys_buffer *cbuf_bo; 169beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter unsigned cbuf_flags; 170beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter struct i915_winsys_buffer *depth_bo; 171beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter unsigned depth_flags; 172beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter unsigned dst_buf_vars; 173f58c11af72303a7b8ec480b4f216e4a17882e0f4Daniel Vetter uint32_t draw_offset; 174f58c11af72303a7b8ec480b4f216e4a17882e0f4Daniel Vetter uint32_t draw_size; 17523d4a0569dcb70bdfd748bf7e1f5102289bfad6bStéphane Marchesin uint32_t target_fixup_format; 176305bcda4b583641bab5a7bfa6ce4e30a8559a868Daniel Vetter uint32_t fixup_swizzle; 177beaf039f972490bc62ec87401441d4b754ae86b0Daniel Vetter 178253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned id; /* track lost context events */ 179253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}; 180253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 181253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_blend_state { 182253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned iab; 183253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned modes4; 184253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned LIS5; 185253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned LIS6; 186253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}; 187253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 188253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_depth_stencil_state { 189253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned stencil_modes4; 190253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned bfo[2]; 191253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned stencil_LIS5; 192253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned depth_LIS6; 193253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}; 194253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 195253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_rasterizer_state { 1969c76ba04f845077d51912cc11970232cc9160294Stéphane Marchesin struct pipe_rasterizer_state templ; 1979c76ba04f845077d51912cc11970232cc9160294Stéphane Marchesin 1985ad488908b39b8f2278a00c9d2cbce76dd925ad1Vinson Lee unsigned light_twoside : 1; 199253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned st; 200253066d716e3039522eeb7b072811cccd89b4a82José Fonseca enum interp_mode color_interp; 201253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 202253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned LIS4; 203253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned LIS7; 204253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned sc[1]; 205253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 206253066d716e3039522eeb7b072811cccd89b4a82José Fonseca union { float f; unsigned u; } ds[2]; 207253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}; 208253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 209253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct i915_sampler_state { 210a7534d8943d74e81299b2ee4edc462baac9d1331Stéphane Marchesin struct pipe_sampler_state templ; 211253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned state[3]; 212d9d1e39d95fef4a8da15147956ff0c3e0a188b5bJakob Bornecrantz unsigned minlod; 213d9d1e39d95fef4a8da15147956ff0c3e0a188b5bJakob Bornecrantz unsigned maxlod; 214253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}; 215253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 2168e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheideggerstruct i915_velems_state { 2178e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger unsigned count; 218e8983f70b41ea92a9527cb618db011b5dd136626Roland Scheidegger struct pipe_vertex_element velem[PIPE_MAX_ATTRIBS]; 2198e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger}; 2208e2df0dcb92b7b092b35df3d35591c31d5f2ca5fRoland Scheidegger 221253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 222a95e694eaf3b40c86fbe8116fc3b5f1add365898Daniel Vetterstruct i915_context { 223e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz struct pipe_context base; 224e1741dbe45ef1f43432457fab088275ecf953d17Jakob Bornecrantz 225bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys *iws; 226d2110064c2075a8537d4b7f87ba894ebaa6ccb33Jakob Bornecrantz 227253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct draw_context *draw; 228253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 229253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /* The most recent drawing state as set by the driver: 230253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 231253066d716e3039522eeb7b072811cccd89b4a82José Fonseca const struct i915_blend_state *blend; 232253066d716e3039522eeb7b072811cccd89b4a82José Fonseca const struct i915_sampler_state *sampler[PIPE_MAX_SAMPLERS]; 233cab2fed135bc1edf7b65ddca3236020638427061Brian Paul struct pipe_sampler_state *vertex_samplers[PIPE_MAX_SAMPLERS]; 234253066d716e3039522eeb7b072811cccd89b4a82José Fonseca const struct i915_depth_stencil_state *depth_stencil; 235253066d716e3039522eeb7b072811cccd89b4a82José Fonseca const struct i915_rasterizer_state *rasterizer; 236253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 237253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct i915_fragment_shader *fs; 238253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 239253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_blend_color blend_color; 240388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger struct pipe_stencil_ref stencil_ref; 241253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_clip_state clip; 242287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *constants[PIPE_SHADER_TYPES]; 243253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_framebuffer_state framebuffer; 24405265bee8554241d98e741643d62ad2f8d270192Stéphane Marchesin struct pipe_poly_stipple poly_stipple; 245253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_scissor_state scissor; 2461f5285f99771243b636deb9ae0a17c54f818fac6michal struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS]; 2478a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin struct pipe_sampler_view *vertex_sampler_views[PIPE_MAX_SAMPLERS]; 248253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct pipe_viewport_state viewport; 2496d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu struct pipe_index_buffer index_buffer; 250253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 251253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned dirty; 252253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 253cab2fed135bc1edf7b65ddca3236020638427061Brian Paul struct pipe_resource *mapped_vs_tex[PIPE_MAX_SAMPLERS]; 254cab2fed135bc1edf7b65ddca3236020638427061Brian Paul struct i915_winsys_buffer* mapped_vs_tex_buffer[PIPE_MAX_SAMPLERS]; 2558a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin 256253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned num_samplers; 2571f5285f99771243b636deb9ae0a17c54f818fac6michal unsigned num_fragment_sampler_views; 2588a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin unsigned num_vertex_samplers; 2598a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin unsigned num_vertex_sampler_views; 260253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 261bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_batchbuffer *batch; 262253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 263253066d716e3039522eeb7b072811cccd89b4a82José Fonseca /** Vertex buffer */ 264bc88c95990f871a206a8fe93e7541f1f41841f7eJakob Bornecrantz struct i915_winsys_buffer *vbo; 265cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz size_t vbo_offset; 266cb5e05d99c40d4f7ab1ecbb42a6390caf3966ba4Jakob Bornecrantz unsigned vbo_flushed; 267253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 268253066d716e3039522eeb7b072811cccd89b4a82José Fonseca struct i915_state current; 269253066d716e3039522eeb7b072811cccd89b4a82José Fonseca unsigned hardware_dirty; 270288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter unsigned immediate_dirty : I915_MAX_IMMEDIATE; 271288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter unsigned dynamic_dirty : I915_MAX_DYNAMIC; 272288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter unsigned static_dirty : 4; 273288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter unsigned flush_dirty : 2; 2747287964f944d7e2bcf409b758163ab75c61b0f8eJakob Bornecrantz 275342016010a515ccc4492924ca260d7ff76ecb1b5Daniel Vetter struct i915_winsys_buffer *validation_buffers[2 + 1 + I915_TEX_UNITS]; 276342016010a515ccc4492924ca260d7ff76ecb1b5Daniel Vetter int num_validation_buffers; 277342016010a515ccc4492924ca260d7ff76ecb1b5Daniel Vetter 2787287964f944d7e2bcf409b758163ab75c61b0f8eJakob Bornecrantz struct util_slab_mempool transfer_pool; 2791a69b50b3b441ce8f7a00af3a7f02c37df50f6c3Stéphane Marchesin struct util_slab_mempool texture_transfer_pool; 280f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter 281b97889f543085f516fc1c821c621790399d57fa5Stéphane Marchesin /* state for tracking flushes */ 282b97889f543085f516fc1c821c621790399d57fa5Stéphane Marchesin int last_fired_vertices; 283b97889f543085f516fc1c821c621790399d57fa5Stéphane Marchesin int fired_vertices; 284b97889f543085f516fc1c821c621790399d57fa5Stéphane Marchesin int queued_vertices; 285e53b41f2632af26c79c4f7ed5b0fdb86a1feb602Stéphane Marchesin 286f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter /** blitter/hw-clear */ 287f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter struct blitter_context* blitter; 288f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter 289f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter /** State tracking needed by u_blitter for save/restore. */ 290f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter void *saved_fs; 291f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter void (*saved_bind_fs_state)(struct pipe_context *pipe, void *shader); 292f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter void *saved_vs; 293f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter struct pipe_clip_state saved_clip; 294f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter struct i915_velems_state *saved_velems; 295f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter unsigned saved_nr_vertex_buffers; 296f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter struct pipe_vertex_buffer saved_vertex_buffers[PIPE_MAX_ATTRIBS]; 297f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter unsigned saved_nr_samplers; 298f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter void *saved_samplers[PIPE_MAX_SAMPLERS]; 299f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter void (*saved_bind_sampler_states)(struct pipe_context *pipe, 300f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter unsigned num, void **sampler); 301f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter unsigned saved_nr_sampler_views; 302f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter struct pipe_sampler_view *saved_sampler_views[PIPE_MAX_SAMPLERS]; 303f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter void (*saved_set_sampler_views)(struct pipe_context *pipe, 304f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vetter unsigned num, struct pipe_sampler_view **views); 305253066d716e3039522eeb7b072811cccd89b4a82José Fonseca}; 306253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 307253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* A flag for each state_tracker state object: 308253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 309253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VIEWPORT 0x1 310253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_RASTERIZER 0x2 311253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FS 0x4 312253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_BLEND 0x8 313253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_CLIP 0x10 314253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SCISSOR 0x20 315253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_STIPPLE 0x40 316253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_FRAMEBUFFER 0x80 317253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_ALPHA_TEST 0x100 318253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_DEPTH_STENCIL 0x200 319253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_SAMPLER 0x400 3201f5285f99771243b636deb9ae0a17c54f818fac6michal#define I915_NEW_SAMPLER_VIEW 0x800 3212e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_VS_CONSTANTS 0x1000 3222e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_FS_CONSTANTS 0x2000 3232e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_GS_CONSTANTS 0x4000 3242e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_VBO 0x8000 3252e60aa511dd232f88697d1cc2091442caaef79b2Jakob Bornecrantz#define I915_NEW_VS 0x10000 326253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 327253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 328253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Driver's internally generated state flags: 329253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 330253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_NEW_VERTEX_FORMAT 0x10000 331253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 332253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 333253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/* Dirty flags for hardware emit 334253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 335253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_STATIC (1<<I915_CACHE_STATIC) 336253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_DYNAMIC (1<<I915_CACHE_DYNAMIC) 337253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_SAMPLER (1<<I915_CACHE_SAMPLER) 338253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_MAP (1<<I915_CACHE_MAP) 339253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_PROGRAM (1<<I915_CACHE_PROGRAM) 340253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_CONSTANTS (1<<I915_CACHE_CONSTANTS) 341253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#define I915_HW_IMMEDIATE (1<<(I915_MAX_CACHE+0)) 342a185d439bdab24750d9c22e42a723f6baa23b730Brian Paul#define I915_HW_INVARIANT (1<<(I915_MAX_CACHE+1)) 343d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter#define I915_HW_FLUSH (1<<(I915_MAX_CACHE+1)) 344d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter 345d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter/* hw flush handling */ 346d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter#define I915_FLUSH_CACHE 1 347d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter#define I915_PIPELINE_FLUSH 2 348d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter 349288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter/* split up static state */ 350288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter#define I915_DST_BUF_COLOR 1 351288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter#define I915_DST_BUF_DEPTH 2 352288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter#define I915_DST_VARS 4 353288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter#define I915_DST_RECT 8 354288504fac7b659da6bd45f22ccfb39d130250f9cDaniel Vetter 355d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetterstatic INLINE 356d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vettervoid i915_set_flush_dirty(struct i915_context *i915, unsigned flush) 357d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter{ 358d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter i915->hardware_dirty |= I915_HW_FLUSH; 359d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter i915->flush_dirty |= flush; 360d42c9433b0a3d9b3a198261d8037ce0d4595452dDaniel Vetter} 361253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 362253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 363253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 364253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_emit.c: 365253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 366253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_render_stage( struct i915_context *i915 ); 367253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 368253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 369253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 370253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_prim_vbuf.c: 371253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 372253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastruct draw_stage *i915_draw_vbuf_stage( struct i915_context *i915 ); 373253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 374253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 375253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 3768a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin * i915_state.c: 3778a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin */ 378b1d93d2aa8395608e77f1c538aa2234ced3dda75Stéphane Marchesinvoid i915_prepare_vertex_sampling(struct i915_context *i915); 3798a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesinvoid i915_cleanup_vertex_sampling(struct i915_context *i915); 3808a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin 3818a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin 3828a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin 3838a22064d316efcdc0d0107fe227a2ed5a746c4f8Stéphane Marchesin/*********************************************************************** 384253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_state_emit.c: 385253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 386253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_emit_hardware_state(struct i915_context *i915 ); 387253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 388253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 389253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 390253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 391253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * i915_clear.c: 392253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 3936dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlievoid i915_clear_blitter(struct pipe_context *pipe, unsigned buffers, 3946dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie const union pipe_color_union *color, 3956358e6371b31671acbfa7c00336673f62ee928c5Daniel Vetter double depth, unsigned stencil); 3966dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlievoid i915_clear_render(struct pipe_context *pipe, unsigned buffers, 3976dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie const union pipe_color_union *color, 3986358e6371b31671acbfa7c00336673f62ee928c5Daniel Vetter double depth, unsigned stencil); 3996dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlievoid i915_clear_emit(struct pipe_context *pipe, unsigned buffers, 4006dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie const union pipe_color_union *color, 401fb3b712b84528b192834d3ba3df557b25bbe6e6eDaniel Vetter double depth, unsigned stencil, 402fb3b712b84528b192834d3ba3df557b25bbe6e6eDaniel Vetter unsigned destx, unsigned desty, unsigned width, unsigned height); 403253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 404253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 405253066d716e3039522eeb7b072811cccd89b4a82José Fonseca/*********************************************************************** 406287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell * 407253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 408253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_state_functions( struct i915_context *i915 ); 409f0c56e2a23ec3a6ffa5aebe613a469e39601e7afDaniel Vettervoid i915_init_fixup_state_functions( struct i915_context *i915 ); 410253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_flush_functions( struct i915_context *i915 ); 411253066d716e3039522eeb7b072811cccd89b4a82José Fonsecavoid i915_init_string_functions( struct i915_context *i915 ); 412253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 413253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 4147f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell/************************************************************************ 4157f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell * i915_context.c 4167f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell */ 4177f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwellstruct pipe_context *i915_create_context(struct pipe_screen *screen, 4187f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell void *priv); 419253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 420253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 421b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell/*********************************************************************** 422253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * Inline conversion functions. These are better-typed than the 423253066d716e3039522eeb7b072811cccd89b4a82José Fonseca * macros used previously: 424253066d716e3039522eeb7b072811cccd89b4a82José Fonseca */ 425253066d716e3039522eeb7b072811cccd89b4a82José Fonsecastatic INLINE struct i915_context * 426253066d716e3039522eeb7b072811cccd89b4a82José Fonsecai915_context( struct pipe_context *pipe ) 427253066d716e3039522eeb7b072811cccd89b4a82José Fonseca{ 428253066d716e3039522eeb7b072811cccd89b4a82José Fonseca return (struct i915_context *)pipe; 429253066d716e3039522eeb7b072811cccd89b4a82José Fonseca} 430253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 431253066d716e3039522eeb7b072811cccd89b4a82José Fonseca 432253066d716e3039522eeb7b072811cccd89b4a82José Fonseca#endif 433