1946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca/************************************************************************** 2946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 3877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * Copyright 2007 VMware, Inc. 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. 21877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * IN NO EVENT SHALL VMWARE 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 28877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca/* Authors: Keith Whitwell <keithw@vmware.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" 37ff2d192ec50e6a8cbaa8f14bca989fe5b61a3c46Marek Olšák#include "util/u_blitter.h" 38946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 39946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "lp_tex_sample.h" 40c022e15d1e56ba3a9c6b74eef6556d6063e2e322José Fonseca#include "lp_jit.h" 416ce68ad3ca242076bbb93fdd99bb448f87a31d15José Fonseca#include "lp_setup.h" 4217c9d7eea7b3365c59455a731fcb81e69bb86ce2Roland Scheidegger#include "lp_state_fs.h" 435b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell#include "lp_state_setup.h" 44946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 45946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 46946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct llvmpipe_vbuf_render; 47946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct draw_context; 48946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct draw_stage; 49b995a010e688bc4d4557e973e5e28091c378e881José Fonsecastruct draw_vertex_shader; 50946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct lp_fragment_shader; 512d6b39f05edcd575b1e10d53f96a38bec848fa67José Fonsecastruct lp_blend_state; 523160cbabccf1f7d8bdf344242507b9c3082f15c6José Fonsecastruct lp_setup_context; 535b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwellstruct lp_setup_variant; 54f89730385532056e89e3b9053c244a67f84e323eRoland Scheideggerstruct lp_velems_state; 55946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 56946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecastruct llvmpipe_context { 57946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_context pipe; /**< base class */ 58946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 59946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** Constant state objects */ 6097b4681d7e1ccf40d1584436ade7c70fc1893e27José Fonseca const struct pipe_blend_state *blend; 61b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul struct pipe_sampler_state *samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; 62b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul 63946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca const struct pipe_depth_stencil_alpha_state *depth_stencil; 64946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca const struct pipe_rasterizer_state *rasterizer; 6573af91e938eb27b001404f11195fb06ff9b08903José Fonseca struct lp_fragment_shader *fs; 66b995a010e688bc4d4557e973e5e28091c378e881José Fonseca struct draw_vertex_shader *vs; 67a6d9d18faecef9963be3e4b64a21b89889b4670dKeith Whitwell const struct lp_geometry_shader *gs; 68f89730385532056e89e3b9053c244a67f84e323eRoland Scheidegger const struct lp_velems_state *velems; 69b5e381d9783f17c9a527ac38122444eac6807566Zack Rusin const struct lp_so_state *so; 70946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 71946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** Other rendering state */ 722d368b982af5e6566c7da7fd2bc8b190af28188bJosé Fonseca unsigned sample_mask; 73d904ed88c1d957f662497343de7dc3e9fa743e47José Fonseca struct pipe_blend_color blend_color; 746a509ec6dd16f93758a308a0f0eb1b032f099693Roland Scheidegger struct pipe_stencil_ref stencil_ref; 75946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_clip_state clip; 763427466e6dbbb8db7c1ecda6b3859ca1cc5827a3Brian Paul struct pipe_constant_buffer constants[PIPE_SHADER_TYPES][LP_MAX_TGSI_CONST_BUFFERS]; 77946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_framebuffer_state framebuffer; 78946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_poly_stipple poly_stipple; 7997b8ae429ec64003e258764db12ea69d4e978f6dZack Rusin struct pipe_scissor_state scissors[PIPE_MAX_VIEWPORTS]; 80c789b981b244333cfc903bcd1e2fefc010500013Roland Scheidegger struct pipe_sampler_view *sampler_views[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_SAMPLER_VIEWS]; 81b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul 8297b8ae429ec64003e258764db12ea69d4e978f6dZack Rusin struct pipe_viewport_state viewports[PIPE_MAX_VIEWPORTS]; 83946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS]; 846d28bf917fb1d741d90fd3f05c22769376021fcaChia-I Wu struct pipe_index_buffer index_buffer; 85946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 86b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul unsigned num_samplers[PIPE_SHADER_TYPES]; 87b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul unsigned num_sampler_views[PIPE_SHADER_TYPES]; 88b3538d356316b282d6408f710f2df5f06bf315f5Brian Paul 89946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca unsigned num_vertex_buffers; 90946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 9177b26564c3f0395bf3e744abbf6d0e7aa9d2c8daDave Airlie struct draw_so_target *so_targets[PIPE_MAX_SO_BUFFERS]; 9277b26564c3f0395bf3e744abbf6d0e7aa9d2c8daDave Airlie int num_so_targets; 9377b26564c3f0395bf3e744abbf6d0e7aa9d2c8daDave Airlie struct pipe_query_data_so_statistics so_stats; 9477b26564c3f0395bf3e744abbf6d0e7aa9d2c8daDave Airlie 9580ee4a407a2668f6a6a410c3e56ae9910510f773Zack Rusin struct pipe_query_data_pipeline_statistics pipeline_statistics; 9680ee4a407a2668f6a6a410c3e56ae9910510f773Zack Rusin unsigned active_statistics_queries; 9780ee4a407a2668f6a6a410c3e56ae9910510f773Zack Rusin 982e4da1f59444c550e4b1e31dd5cfec39d7ef2a26Roland Scheidegger unsigned active_occlusion_queries; 99946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 1002e4da1f59444c550e4b1e31dd5cfec39d7ef2a26Roland Scheidegger unsigned dirty; /**< Mask of LP_NEW_x flags */ 101946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 102946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** Mapped vertex buffers */ 103946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca ubyte *mapped_vbuffer[PIPE_MAX_ATTRIBS]; 104946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 105946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** Vertex format */ 106946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct vertex_info vertex_info; 10757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 1087f0dc5ea1bb330c6589125baf4017c51a14dce8eHui Qi Tay /** Which vertex shader output slot contains color */ 1098e3a76791f208e67392b7b7a2e63eca32945ac7bRoland Scheidegger int8_t color_slot[2]; 1107f0dc5ea1bb330c6589125baf4017c51a14dce8eHui Qi Tay 1117f0dc5ea1bb330c6589125baf4017c51a14dce8eHui Qi Tay /** Which vertex shader output slot contains bcolor */ 1128e3a76791f208e67392b7b7a2e63eca32945ac7bRoland Scheidegger int8_t bcolor_slot[2]; 1137f0dc5ea1bb330c6589125baf4017c51a14dce8eHui Qi Tay 11457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /** Which vertex shader output slot contains point size */ 1158e3a76791f208e67392b7b7a2e63eca32945ac7bRoland Scheidegger int8_t psize_slot; 116946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 11797b8ae429ec64003e258764db12ea69d4e978f6dZack Rusin /** Which vertex shader output slot contains viewport index */ 1188e3a76791f208e67392b7b7a2e63eca32945ac7bRoland Scheidegger int8_t viewport_index_slot; 11997b8ae429ec64003e258764db12ea69d4e978f6dZack Rusin 120d8146f240e628e70d4c07f7e805a179f70c36e23Roland Scheidegger /** Which geometry shader output slot contains layer */ 1218e3a76791f208e67392b7b7a2e63eca32945ac7bRoland Scheidegger int8_t layer_slot; 122d8146f240e628e70d4c07f7e805a179f70c36e23Roland Scheidegger 123d6b3a193d4d525c5048ebf793e6a63fd98f92d64Zack Rusin /** A fake frontface output for unfilled primitives */ 1248e3a76791f208e67392b7b7a2e63eca32945ac7bRoland Scheidegger int8_t face_slot; 125af7ba989fb5a39925a0a1261ed281fe7f48a16cfRoland Scheidegger 126f9e2c24326869542c9b43220f63dd9841c6de38fMatthew McClure /** Depth format and bias settings. */ 127f9e2c24326869542c9b43220f63dd9841c6de38fMatthew McClure boolean floating_point_depth; 128f9e2c24326869542c9b43220f63dd9841c6de38fMatthew McClure double mrd; /**< minimum resolvable depth value, for polygon offset */ 129f9e2c24326869542c9b43220f63dd9841c6de38fMatthew McClure 1306b65685def525a8023ee936e82e53af2bc4e38b2Keith Whitwell /** The tiling engine */ 1313160cbabccf1f7d8bdf344242507b9c3082f15c6José Fonseca struct lp_setup_context *setup; 1325b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell struct lp_setup_variant setup_variant; 1336b65685def525a8023ee936e82e53af2bc4e38b2Keith Whitwell 134946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca /** The primitive drawing context */ 135946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct draw_context *draw; 13689498d01531cd515c769e570bf799c39fbafc8fbKeith Whitwell 137ff2d192ec50e6a8cbaa8f14bca989fe5b61a3c46Marek Olšák struct blitter_context *blitter; 138ff2d192ec50e6a8cbaa8f14bca989fe5b61a3c46Marek Olšák 1390f55a95b2faa16cc008143c53a8b82b19c5d750aKeith Whitwell unsigned tex_timestamp; 1406b65685def525a8023ee936e82e53af2bc4e38b2Keith Whitwell boolean no_rast; 141c022e15d1e56ba3a9c6b74eef6556d6063e2e322José Fonseca 142efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul /** List of all fragment shader variants */ 14317c9d7eea7b3365c59455a731fcb81e69bb86ce2Roland Scheidegger struct lp_fs_variant_list_item fs_variants_list; 14417c9d7eea7b3365c59455a731fcb81e69bb86ce2Roland Scheidegger unsigned nr_fs_variants; 1456cf7245f6938e27c9b8a1742f27659aec017bbdcJosé Fonseca unsigned nr_fs_instrs; 1465b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell 1475b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell struct lp_setup_variant_list_item setup_variants_list; 1485b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell unsigned nr_setup_variants; 149ab14915dce41b26faabba878446b0ec0c8734434Dave Airlie 150ab14915dce41b26faabba878446b0ec0c8734434Dave Airlie /** Conditional query object and mode */ 151ab14915dce41b26faabba878446b0ec0c8734434Dave Airlie struct pipe_query *render_cond_query; 152ab14915dce41b26faabba878446b0ec0c8734434Dave Airlie uint render_cond_mode; 153793e8e3d7ed816cc9a066245dde798afdcf8b581Roland Scheidegger boolean render_cond_cond; 15483c62597fc8eb38bf274fa1a3ca03c6adafb4bf9Mathias Fröhlich 15583c62597fc8eb38bf274fa1a3ca03c6adafb4bf9Mathias Fröhlich /** The LLVMContext to use for LLVM related work */ 15683c62597fc8eb38bf274fa1a3ca03c6adafb4bf9Mathias Fröhlich LLVMContextRef context; 157946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca}; 158946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 159946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 1607f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwellstruct pipe_context * 1610fc21ecfc0891d239f20bf7724e51bc75503570cMarek Olšákllvmpipe_create_context(struct pipe_screen *screen, void *priv, 1620fc21ecfc0891d239f20bf7724e51bc75503570cMarek Olšák unsigned flags); 1637f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell 1640b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšákstruct pipe_resource * 1650b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšákllvmpipe_user_buffer_create(struct pipe_screen *screen, 1660b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšák void *ptr, 1670b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšák unsigned bytes, 1681d28650b551bb516fdff99d0a196c1fa133f6d05Roland Scheidegger unsigned bind_flags); 1690b7d48cbad86eaac21fce3793da41b46db8be3b4Marek Olšák 1707f41f5447c8f9113c8956901e1c5fff6081ecd94Keith Whitwell 171a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct llvmpipe_context * 172946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecallvmpipe_context( struct pipe_context *pipe ) 173946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 174946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca return (struct llvmpipe_context *)pipe; 175946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 176946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 177c9a5930fe45a0a0299769bd2b672ca516d1bf39eJosé Fonseca#endif /* LP_CONTEXT_H */ 178946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 179