lp_context.h revision 73af91e938eb27b001404f11195fb06ff9b08903
159907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner/************************************************************************** 259907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * 359907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 459907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * All Rights Reserved. 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner * 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner * Permission is hereby granted, free of charge, to any person obtaining a 759907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * copy of this software and associated documentation files (the 859907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * "Software"), to deal in the Software without restriction, including 959907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * without limitation the rights to use, copy, modify, merge, publish, 101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump * distribute, sub license, and/or sell copies of the Software, and to 1159907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * permit persons to whom the Software is furnished to do so, subject to 1259907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * the following conditions: 1359907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * 1459907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * The above copyright notice and this permission notice (including the 15e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor * next paragraph) shall be included in all copies or substantial portions 162d88708cbe4e4ec5e04e4acb6bd7f5be68557379John McCall * of the Software. 17781472fe99a120098c631b0cbe33c89f8cef5e70John McCall * 18826a3457f737f1fc45a22954fd1bfde38160c165Ted Kremenek * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1959907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20199c3d6cd16aebbb9c7f0d42af9d922c9628bf70Ken Dyck * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21384aff8b94bb0d1ad6c5667b90621e5699815bb2John McCall * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22c4a1dea2dc56bd1357ec91b829a0b9e68229a13eDaniel Dunbar * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 232324512285caac0332bbbc6e4cab6245d2a370a1Ted Kremenek * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 247ff22b259d4d4729f701679e3a7f0e242365e07fTed Kremenek * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f8c4921c73d73123e2b79221ad4f1775ce984cfdMike Stump * 26f8c4921c73d73123e2b79221ad4f1775ce984cfdMike Stump **************************************************************************/ 27f8c4921c73d73123e2b79221ad4f1775ce984cfdMike Stump 2859907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner/* Authors: Keith Whitwell <keith@tungstengraphics.com> 29f8c4921c73d73123e2b79221ad4f1775ce984cfdMike Stump */ 30f8c4921c73d73123e2b79221ad4f1775ce984cfdMike Stump 313bfc5f49e0e37e235bb0d33bcbcb36af9d1f84abTom Care#ifndef LP_CONTEXT_H 32691ebc3f3225542e5abd85e107ebdbec907cf510Eric Christopher#define LP_CONTEXT_H 3326a31428f130b66f61834d1b4d1cf72f590f70b9Nate Begeman 347da71020b97c69b95831bd03d35e8e8404bfdea0Fariborz Jahanian#include "pipe/p_context.h" 35a1f3dba77b7418575c1ff539ffa74ebaa068280cZhongxing Xu 3659907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner#include "draw/draw_vertex.h" 37781472fe99a120098c631b0cbe33c89f8cef5e70John McCall 3859907c4d8f6fc8aacfdaa0273bd7a9c140fbb45fChris Lattner#include "lp_quad_pipe.h" 3960800081361b0ffc114877b8abbc81cb57b4edf6Chris Lattner#include "lp_tex_sample.h" 4060800081361b0ffc114877b8abbc81cb57b4edf6Chris Lattner 4108f92e3a5dead1f1ee656678a7f06e43279d6e50Chris Lattner 4208f92e3a5dead1f1ee656678a7f06e43279d6e50Chris Lattnerstruct llvmpipe_vbuf_render; 4360800081361b0ffc114877b8abbc81cb57b4edf6Chris Lattnerstruct draw_context; 4408f92e3a5dead1f1ee656678a7f06e43279d6e50Chris Lattnerstruct draw_stage; 4560800081361b0ffc114877b8abbc81cb57b4edf6Chris Lattnerstruct llvmpipe_tile_cache; 464403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynnstruct llvmpipe_tex_tile_cache; 474403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynnstruct lp_fragment_shader; 484403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynnstruct lp_vertex_shader; 494403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynnstruct lp_blend_state; 504403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynn 514403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynn 524403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynnstruct llvmpipe_context { 534a2614e94672c47395abcde60518776fbebec589Sebastian Redl struct pipe_context pipe; /**< base class */ 544a2614e94672c47395abcde60518776fbebec589Sebastian Redl 554a2614e94672c47395abcde60518776fbebec589Sebastian Redl /** Constant state objects */ 564a2614e94672c47395abcde60518776fbebec589Sebastian Redl struct lp_blend_state *blend; 574a2614e94672c47395abcde60518776fbebec589Sebastian Redl const struct pipe_sampler_state *sampler[PIPE_MAX_SAMPLERS]; 584a2614e94672c47395abcde60518776fbebec589Sebastian Redl const struct pipe_depth_stencil_alpha_state *depth_stencil; 594403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynn const struct pipe_rasterizer_state *rasterizer; 604403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynn struct lp_fragment_shader *fs; 61efaff195ba1fa55b6fe0b0b2435b81451387d241Ted Kremenek const struct lp_vertex_shader *vs; 62efaff195ba1fa55b6fe0b0b2435b81451387d241Ted Kremenek 634403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynn /** Other rendering state */ 644403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynn uint8_t ALIGN16_ATTRIB blend_color[4][16]; 654403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynn struct pipe_clip_state clip; 664403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynn struct pipe_constant_buffer constants[PIPE_SHADER_TYPES]; 674403a5e1f956fa86d515492dbe7c7a2817d8780dRyan Flynn struct pipe_framebuffer_state framebuffer; 6860800081361b0ffc114877b8abbc81cb57b4edf6Chris Lattner struct pipe_poly_stipple poly_stipple; 6960d7b3a319d84d688752be3870615ac0f111fb16John McCall struct pipe_scissor_state scissor; 70d406bf0e8c17012110a8476d03c6f9a97b56ecf7Anders Carlsson struct pipe_texture *texture[PIPE_MAX_SAMPLERS]; 7160d7b3a319d84d688752be3870615ac0f111fb16John McCall struct pipe_viewport_state viewport; 722def48394f6d48bde0dec2b514193c2b533265b5Douglas Gregor struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS]; 73946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner struct pipe_vertex_element vertex_element[PIPE_MAX_ATTRIBS]; 74946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner 75946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner unsigned num_samplers; 76946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner unsigned num_textures; 77946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner unsigned num_vertex_elements; 78946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner unsigned num_vertex_buffers; 79946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner 80946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner unsigned dirty; /**< Mask of LP_NEW_x flags */ 81946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner 82946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner /* Counter for occlusion queries. Note this supports overlapping 83946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner * queries. 84946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner */ 85946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner uint64_t occlusion_count; 86946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner unsigned active_query_count; 87946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner 88946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner /** Mapped vertex buffers */ 89946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner ubyte *mapped_vbuffer[PIPE_MAX_ATTRIBS]; 90946928f48c96bddf3cfa126862f5ab69c2d904a0Chris Lattner 91d406bf0e8c17012110a8476d03c6f9a97b56ecf7Anders Carlsson /** Mapped constant buffers */ 9230ce344307f8a8b00054021307015571f83c7364Chris Lattner void *mapped_constants[PIPE_SHADER_TYPES]; 93925e60d3fa706f31886027c876989af79eb0e0d2Chris Lattner 941b9a0793955070738cac6f04b5abe9496be9b317Chris Lattner /** Vertex format */ 95690398188ea5b428f06aa13c7d4ce6eb741ad4f9Chris Lattner struct vertex_info vertex_info; 960eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl struct vertex_info vertex_info_vbuf; 97d406bf0e8c17012110a8476d03c6f9a97b56ecf7Anders Carlsson 9849ff7a1c8c67d56e62d3b4627463b705c0d5008cTed Kremenek /** Which vertex shader output slot contains point size */ 9930ce344307f8a8b00054021307015571f83c7364Chris Lattner int psize_slot; 1000eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl 1010eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl /* The reduced version of the primitive supplied by the state 102d406bf0e8c17012110a8476d03c6f9a97b56ecf7Anders Carlsson * tracker. 1031b9a0793955070738cac6f04b5abe9496be9b317Chris Lattner */ 1041b9a0793955070738cac6f04b5abe9496be9b317Chris Lattner unsigned reduced_api_prim; 1051b9a0793955070738cac6f04b5abe9496be9b317Chris Lattner 1061b9a0793955070738cac6f04b5abe9496be9b317Chris Lattner /* The reduced primitive after unfilled triangles, wide-line 1071b9a0793955070738cac6f04b5abe9496be9b317Chris Lattner * decomposition, etc, are taken into account. This is the 1081b9a0793955070738cac6f04b5abe9496be9b317Chris Lattner * primitive actually rasterized. 1090eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl */ 1100eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl unsigned reduced_prim; 111d406bf0e8c17012110a8476d03c6f9a97b56ecf7Anders Carlsson 112e771a7ac11fb27f0e734e5de4d858f2c268895e5Benjamin Kramer /** Derived from scissor and surface bounds: */ 113e771a7ac11fb27f0e734e5de4d858f2c268895e5Benjamin Kramer struct pipe_scissor_state cliprect; 114e771a7ac11fb27f0e734e5de4d858f2c268895e5Benjamin Kramer 115e771a7ac11fb27f0e734e5de4d858f2c268895e5Benjamin Kramer unsigned line_stipple_counter; 1169ac6f62a77be5b281a7ddc24a16669b457ac47c2Eli Friedman 1179ac6f62a77be5b281a7ddc24a16669b457ac47c2Eli Friedman /** Software quad rendering pipeline */ 1189ac6f62a77be5b281a7ddc24a16669b457ac47c2Eli Friedman struct { 1199ac6f62a77be5b281a7ddc24a16669b457ac47c2Eli Friedman struct quad_stage *shade; 1209ac6f62a77be5b281a7ddc24a16669b457ac47c2Eli Friedman struct quad_stage *depth_test; 1213b1e26b708e8d00d4ba10ff857201bae2aff6baeBenjamin Kramer struct quad_stage *blend; 1229ac6f62a77be5b281a7ddc24a16669b457ac47c2Eli Friedman 1239ac6f62a77be5b281a7ddc24a16669b457ac47c2Eli Friedman struct quad_stage *first; /**< points to one of the above stages */ 124d38617c8a50f9729c254ab76cd359af797c6739bEli Friedman } quad; 1250eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl 1260eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl /** TGSI exec things */ 1270eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl struct { 1284493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar struct lp_shader_sampler vert_samplers[PIPE_MAX_SAMPLERS]; 1290eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl struct lp_shader_sampler *vert_samplers_list[PIPE_MAX_SAMPLERS]; 1300eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl struct lp_shader_sampler frag_samplers[PIPE_MAX_SAMPLERS]; 131d406bf0e8c17012110a8476d03c6f9a97b56ecf7Anders Carlsson struct lp_shader_sampler *frag_samplers_list[PIPE_MAX_SAMPLERS]; 132d5f8a4fd4d6dfb0415b93bb7ab721bba5cab1332Daniel Dunbar } tgsi; 1330eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl 1340eb23307222bda7ad95d968eac4e1ab30864b213Sebastian Redl /** The primitive drawing context */ 135d406bf0e8c17012110a8476d03c6f9a97b56ecf7Anders Carlsson struct draw_context *draw; 136d875fed28578835de89cd407e9db4be788596d7cEli Friedman struct draw_stage *setup; 137d875fed28578835de89cd407e9db4be788596d7cEli Friedman struct draw_stage *vbuf; 138d875fed28578835de89cd407e9db4be788596d7cEli Friedman struct llvmpipe_vbuf_render *vbuf_render; 139d406bf0e8c17012110a8476d03c6f9a97b56ecf7Anders Carlsson 14075c29a012793292ff4578015a9113bf086156d7fChris Lattner boolean dirty_render_cache; 14175c29a012793292ff4578015a9113bf086156d7fChris Lattner 14275c29a012793292ff4578015a9113bf086156d7fChris Lattner struct llvmpipe_tile_cache *cbuf_cache[PIPE_MAX_COLOR_BUFS]; 14375c29a012793292ff4578015a9113bf086156d7fChris Lattner struct llvmpipe_tile_cache *zsbuf_cache; 14475c29a012793292ff4578015a9113bf086156d7fChris Lattner 14575c29a012793292ff4578015a9113bf086156d7fChris Lattner unsigned tex_timestamp; 14675c29a012793292ff4578015a9113bf086156d7fChris Lattner struct llvmpipe_tex_tile_cache *tex_cache[PIPE_MAX_SAMPLERS]; 14775c29a012793292ff4578015a9113bf086156d7fChris Lattner 14875c29a012793292ff4578015a9113bf086156d7fChris Lattner unsigned no_rast : 1; 14975c29a012793292ff4578015a9113bf086156d7fChris Lattner}; 1505caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner 1515caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner 1525caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattnerstatic INLINE struct llvmpipe_context * 1535caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattnerllvmpipe_context( struct pipe_context *pipe ) 1545caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner{ 1555caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner return (struct llvmpipe_context *)pipe; 1565caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner} 1575caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner 1585caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner#endif /* LP_CONTEXT_H */ 1595caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner 1605caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner