1946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca/************************************************************************** 2946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 3946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * All Rights Reserved. 5946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 6946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * copy of this software and associated documentation files (the 8946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * "Software"), to deal in the Software without restriction, including 9946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * permit persons to whom the Software is furnished to do so, subject to 12946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * the following conditions: 13946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 14946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * The above copyright notice and this permission notice (including the 15946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * next paragraph) shall be included in all copies or substantial portions 16946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * of the Software. 17946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 18946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 26946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca **************************************************************************/ 27946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 28946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca/* Authors: Keith Whitwell <keith@tungstengraphics.com> 29946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca */ 30946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 31c9a5930fe45a0a0299769bd2b672ca516d1bf39eJosé Fonseca#ifndef LP_CONTEXT_H 32c9a5930fe45a0a0299769bd2b672ca516d1bf39eJosé Fonseca#define LP_CONTEXT_H 33946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 34946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "pipe/p_context.h" 35946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 36946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "draw/draw_vertex.h" 37946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 38946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "lp_tex_sample.h" 39c022e15d1e56ba3a9c6b74eef6556d6063e2e322José Fonseca#include "lp_jit.h" 406ce68ad3ca242076bbb93fdd99bb448f87a31d15José Fonseca#include "lp_setup.h" 4117c9d7eea7b3365c59455a731fcb81e69bb86ce2Roland Scheidegger#include "lp_state_fs.h" 425b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell#include "lp_state_setup.h" 43946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 44946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 45946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct llvmpipe_vbuf_render; 46946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct draw_context; 47946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct draw_stage; 48946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct lp_fragment_shader; 49946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct lp_vertex_shader; 502d6b39f05edcd575b1e10d53f96a38bec848fa67José Fonsecastruct lp_blend_state; 513160cbabccf1f7d8bdf344242507b9c3082f15c6José Fonsecastruct lp_setup_context; 525b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwellstruct lp_setup_variant; 53f89730385532056e89e3b9053c244a67f84e323eRoland Scheideggerstruct lp_velems_state; 54946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 55946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct llvmpipe_context { 56946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_context pipe; /**< base class */ 57946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 58946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** Constant state objects */ 5997b4681d7e1ccf40d1584436ade7c70fc1893e27José Fonseca const struct pipe_blend_state *blend; 60b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul struct pipe_sampler_state *samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; 61b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul 62946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca const struct pipe_depth_stencil_alpha_state *depth_stencil; 63946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca const struct pipe_rasterizer_state *rasterizer; 6473af91e938eb27b001404f11195fb06ff9b08903José Fonseca struct lp_fragment_shader *fs; 65946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca const struct lp_vertex_shader *vs; 66a6d9d18faecef9963be3e4b64a21b89889b4670dKeith Whitwell const struct lp_geometry_shader *gs; 67f89730385532056e89e3b9053c244a67f84e323eRoland Scheidegger const struct lp_velems_state *velems; 68b5e381d9783f17c9a527ac38122444eac6807566Zack Rusin const struct lp_so_state *so; 69946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 70946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** Other rendering state */ 71d904ed88c1d957f662497343de7dc3e9fa743e47José Fonseca struct pipe_blend_color blend_color; 726a509ec6dd16f93758a308a0f0eb1b032f099693Roland Scheidegger struct pipe_stencil_ref stencil_ref; 73946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_clip_state clip; 74a6d9d18faecef9963be3e4b64a21b89889b4670dKeith Whitwell struct pipe_resource *constants[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS]; 75946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_framebuffer_state framebuffer; 76946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_poly_stipple poly_stipple; 77946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_scissor_state scissor; 78b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul struct pipe_sampler_view *sampler_views[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; 79b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul 80946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_viewport_state viewport; 81946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS]; 826d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu struct pipe_index_buffer index_buffer; 83b5e381d9783f17c9a527ac38122444eac6807566Zack Rusin struct { 84b5e381d9783f17c9a527ac38122444eac6807566Zack Rusin struct llvmpipe_resource *buffer[PIPE_MAX_SO_BUFFERS]; 85b5e381d9783f17c9a527ac38122444eac6807566Zack Rusin int offset[PIPE_MAX_SO_BUFFERS]; 86b5e381d9783f17c9a527ac38122444eac6807566Zack Rusin int so_count[PIPE_MAX_SO_BUFFERS]; 87b5e381d9783f17c9a527ac38122444eac6807566Zack Rusin int num_buffers; 88b5e381d9783f17c9a527ac38122444eac6807566Zack Rusin } so_target; 89cab2fed135bc1edf7b65ddca3236020638427061Brian Paul struct pipe_resource *mapped_vs_tex[PIPE_MAX_SAMPLERS]; 90946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 91b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul unsigned num_samplers[PIPE_SHADER_TYPES]; 92b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul unsigned num_sampler_views[PIPE_SHADER_TYPES]; 93b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul 94946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca unsigned num_vertex_buffers; 95946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 96c9a5930fe45a0a0299769bd2b672ca516d1bf39eJosé Fonseca unsigned dirty; /**< Mask of LP_NEW_x flags */ 97946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 9886afe8250edaa2e6129c937a62a695f616c48d70Qicheng Christopher Li int active_query_count; 99946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 100946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** Mapped vertex buffers */ 101946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca ubyte *mapped_vbuffer[PIPE_MAX_ATTRIBS]; 102946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 103946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** Vertex format */ 104946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct vertex_info vertex_info; 10557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 1067f0dc5ea1bb330c6589125baf4017c51a14dce8eHui Qi Tay /** Which vertex shader output slot contains color */ 107546c5ffa11d70631348e5776df7a4168f07600f6Keith Whitwell int color_slot[2]; 1087f0dc5ea1bb330c6589125baf4017c51a14dce8eHui Qi Tay 1097f0dc5ea1bb330c6589125baf4017c51a14dce8eHui Qi Tay /** Which vertex shader output slot contains bcolor */ 110546c5ffa11d70631348e5776df7a4168f07600f6Keith Whitwell int bcolor_slot[2]; 1117f0dc5ea1bb330c6589125baf4017c51a14dce8eHui Qi Tay 11257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /** Which vertex shader output slot contains point size */ 11357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay int psize_slot; 114946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 115315f8daab1598a4de709d469a559b5aa09107404Hui Qi Tay /**< minimum resolvable depth value, for polygon offset */ 116315f8daab1598a4de709d469a559b5aa09107404Hui Qi Tay double mrd; 117315f8daab1598a4de709d469a559b5aa09107404Hui Qi Tay 1186b65685def525a8023ee936e82e53af2bc4e38b2Keith Whitwell /** The tiling engine */ 1193160cbabccf1f7d8bdf344242507b9c3082f15c6José Fonseca struct lp_setup_context *setup; 1205b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell struct lp_setup_variant setup_variant; 1216b65685def525a8023ee936e82e53af2bc4e38b2Keith Whitwell 122946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** The primitive drawing context */ 123946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct draw_context *draw; 12489498d01531cd515c769e570bf799c39fbafc8fbKeith Whitwell 1250f55a95b2faa16cc008143c53a8b82b19c5d750aKeith Whitwell unsigned tex_timestamp; 1266b65685def525a8023ee936e82e53af2bc4e38b2Keith Whitwell boolean no_rast; 127c022e15d1e56ba3a9c6b74eef6556d6063e2e322José Fonseca 128efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul /** List of all fragment shader variants */ 12917c9d7eea7b3365c59455a731fcb81e69bb86ce2Roland Scheidegger struct lp_fs_variant_list_item fs_variants_list; 13017c9d7eea7b3365c59455a731fcb81e69bb86ce2Roland Scheidegger unsigned nr_fs_variants; 1316cf7245f6938e27c9b8a1742f27659aec017bbdcJosé Fonseca unsigned nr_fs_instrs; 1325b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell 1335b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell struct lp_setup_variant_list_item setup_variants_list; 1345b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell unsigned nr_setup_variants; 135ab14915dce41b26faabba878446b0ec0c8734434Dave Airlie 136ab14915dce41b26faabba878446b0ec0c8734434Dave Airlie /** Conditional query object and mode */ 137ab14915dce41b26faabba878446b0ec0c8734434Dave Airlie struct pipe_query *render_cond_query; 138ab14915dce41b26faabba878446b0ec0c8734434Dave Airlie uint render_cond_mode; 139946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca}; 140946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 141946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 142efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul/** 143efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul * Fragment and setup variant count, used to trigger garbage collection. 144efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul * This is global since all variants in all contexts will be free when 145efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul * we do garbage collection. 146efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul */ 147efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paulextern unsigned llvmpipe_variant_count; 148efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul 149efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul 1507f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwellstruct pipe_context * 1517f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwellllvmpipe_create_context( struct pipe_screen *screen, void *priv ); 1527f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell 1530b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšákstruct pipe_resource * 1540b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšákllvmpipe_user_buffer_create(struct pipe_screen *screen, 1550b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšák void *ptr, 1560b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšák unsigned bytes, 1570b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšák unsigned bind_flags); 1580b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšák 1597f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell 160946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastatic INLINE struct llvmpipe_context * 161946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecallvmpipe_context( struct pipe_context *pipe ) 162946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 163946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca return (struct llvmpipe_context *)pipe; 164946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 165946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 166c9a5930fe45a0a0299769bd2b672ca516d1bf39eJosé Fonseca#endif /* LP_CONTEXT_H */ 167946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 168