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