Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sub license, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial portions
  16.  * of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  21.  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
  22.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  23.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  24.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  **************************************************************************/
  27.  
  28. /* Authors:  Keith Whitwell <keith@tungstengraphics.com>
  29.  */
  30.  
  31. #ifndef LP_CONTEXT_H
  32. #define LP_CONTEXT_H
  33.  
  34. #include "pipe/p_context.h"
  35.  
  36. #include "draw/draw_vertex.h"
  37. #include "util/u_blitter.h"
  38.  
  39. #include "lp_tex_sample.h"
  40. #include "lp_jit.h"
  41. #include "lp_setup.h"
  42. #include "lp_state_fs.h"
  43. #include "lp_state_setup.h"
  44.  
  45.  
  46. struct llvmpipe_vbuf_render;
  47. struct draw_context;
  48. struct draw_stage;
  49. struct lp_fragment_shader;
  50. struct lp_vertex_shader;
  51. struct lp_blend_state;
  52. struct lp_setup_context;
  53. struct lp_setup_variant;
  54. struct lp_velems_state;
  55.  
  56. struct llvmpipe_context {
  57.    struct pipe_context pipe;  /**< base class */
  58.  
  59.    /** Constant state objects */
  60.    const struct pipe_blend_state *blend;
  61.    struct pipe_sampler_state *samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS];
  62.  
  63.    const struct pipe_depth_stencil_alpha_state *depth_stencil;
  64.    const struct pipe_rasterizer_state *rasterizer;
  65.    struct lp_fragment_shader *fs;
  66.    const struct lp_vertex_shader *vs;
  67.    const struct lp_geometry_shader *gs;
  68.    const struct lp_velems_state *velems;
  69.    const struct lp_so_state *so;
  70.  
  71.    /** Other rendering state */
  72.    struct pipe_blend_color blend_color;
  73.    struct pipe_stencil_ref stencil_ref;
  74.    struct pipe_clip_state clip;
  75.    struct pipe_constant_buffer constants[PIPE_SHADER_TYPES][LP_MAX_TGSI_CONST_BUFFERS];
  76.    struct pipe_framebuffer_state framebuffer;
  77.    struct pipe_poly_stipple poly_stipple;
  78.    struct pipe_scissor_state scissors[PIPE_MAX_VIEWPORTS];
  79.    struct pipe_sampler_view *sampler_views[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_SAMPLER_VIEWS];
  80.  
  81.    struct pipe_viewport_state viewports[PIPE_MAX_VIEWPORTS];
  82.    struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
  83.    struct pipe_index_buffer index_buffer;
  84.    struct pipe_resource *mapped_vs_tex[PIPE_MAX_SHADER_SAMPLER_VIEWS];
  85.    struct pipe_resource *mapped_gs_tex[PIPE_MAX_SHADER_SAMPLER_VIEWS];
  86.  
  87.    unsigned num_samplers[PIPE_SHADER_TYPES];
  88.    unsigned num_sampler_views[PIPE_SHADER_TYPES];
  89.  
  90.    unsigned num_vertex_buffers;
  91.  
  92.    struct draw_so_target *so_targets[PIPE_MAX_SO_BUFFERS];
  93.    int num_so_targets;
  94.    struct pipe_query_data_so_statistics so_stats;
  95.    unsigned num_primitives_generated;
  96.  
  97.    struct pipe_query_data_pipeline_statistics pipeline_statistics;
  98.    unsigned active_statistics_queries;
  99.  
  100.    unsigned active_occlusion_queries;
  101.  
  102.    unsigned dirty; /**< Mask of LP_NEW_x flags */
  103.  
  104.    /** Mapped vertex buffers */
  105.    ubyte *mapped_vbuffer[PIPE_MAX_ATTRIBS];
  106.    
  107.    /** Vertex format */
  108.    struct vertex_info vertex_info;
  109.    
  110.    /** Which vertex shader output slot contains color */
  111.    int color_slot[2];
  112.  
  113.    /** Which vertex shader output slot contains bcolor */
  114.    int bcolor_slot[2];
  115.  
  116.    /** Which vertex shader output slot contains point size */
  117.    int psize_slot;
  118.  
  119.    /** Which vertex shader output slot contains viewport index */
  120.    int viewport_index_slot;
  121.  
  122.    /** Which geometry shader output slot contains layer */
  123.    int layer_slot;
  124.  
  125.    /**< minimum resolvable depth value, for polygon offset */  
  126.    double mrd;
  127.    
  128.    /** The tiling engine */
  129.    struct lp_setup_context *setup;
  130.    struct lp_setup_variant setup_variant;
  131.  
  132.    /** The primitive drawing context */
  133.    struct draw_context *draw;
  134.  
  135.    struct blitter_context *blitter;
  136.  
  137.    unsigned tex_timestamp;
  138.    boolean no_rast;
  139.  
  140.    /** List of all fragment shader variants */
  141.    struct lp_fs_variant_list_item fs_variants_list;
  142.    unsigned nr_fs_variants;
  143.    unsigned nr_fs_instrs;
  144.  
  145.    struct lp_setup_variant_list_item setup_variants_list;
  146.    unsigned nr_setup_variants;
  147.  
  148.    /** Conditional query object and mode */
  149.    struct pipe_query *render_cond_query;
  150.    uint render_cond_mode;
  151.    boolean render_cond_cond;
  152. };
  153.  
  154.  
  155. /**
  156.  * Fragment and setup variant count, used to trigger garbage collection.
  157.  * This is global since all variants in all contexts will be free when
  158.  * we do garbage collection.
  159.  */
  160. extern unsigned llvmpipe_variant_count;
  161.  
  162.  
  163. struct pipe_context *
  164. llvmpipe_create_context( struct pipe_screen *screen, void *priv );
  165.  
  166. struct pipe_resource *
  167. llvmpipe_user_buffer_create(struct pipe_screen *screen,
  168.                             void *ptr,
  169.                             unsigned bytes,
  170.                             unsigned bind_flags);
  171.  
  172.  
  173. static INLINE struct llvmpipe_context *
  174. llvmpipe_context( struct pipe_context *pipe )
  175. {
  176.    return (struct llvmpipe_context *)pipe;
  177. }
  178.  
  179. #endif /* LP_CONTEXT_H */
  180.  
  181.