Home | History | Annotate | Download | only in llvmpipe
      1 /**************************************************************************
      2  *
      3  * Copyright 2007 VMware, Inc.
      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 VMWARE 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 #ifndef LP_SETUP_H
     28 #define LP_SETUP_H
     29 
     30 #include "pipe/p_compiler.h"
     31 #include "lp_jit.h"
     32 
     33 struct draw_context;
     34 struct vertex_info;
     35 
     36 
     37 struct pipe_resource;
     38 struct pipe_query;
     39 struct pipe_surface;
     40 struct pipe_blend_color;
     41 struct pipe_screen;
     42 struct pipe_framebuffer_state;
     43 struct lp_fragment_shader_variant;
     44 struct lp_jit_context;
     45 struct llvmpipe_query;
     46 struct pipe_fence_handle;
     47 struct lp_setup_variant;
     48 struct lp_setup_context;
     49 
     50 void lp_setup_reset( struct lp_setup_context *setup );
     51 
     52 struct lp_setup_context *
     53 lp_setup_create( struct pipe_context *pipe,
     54                  struct draw_context *draw );
     55 
     56 void
     57 lp_setup_clear(struct lp_setup_context *setup,
     58                const union pipe_color_union *clear_color,
     59                double clear_depth,
     60                unsigned clear_stencil,
     61                unsigned flags);
     62 
     63 
     64 
     65 void
     66 lp_setup_flush( struct lp_setup_context *setup,
     67                 struct pipe_fence_handle **fence,
     68                 const char *reason);
     69 
     70 
     71 void
     72 lp_setup_bind_framebuffer( struct lp_setup_context *setup,
     73                            const struct pipe_framebuffer_state *fb );
     74 
     75 void
     76 lp_setup_set_triangle_state( struct lp_setup_context *setup,
     77                              unsigned cullmode,
     78                              boolean front_is_ccw,
     79                              boolean scissor,
     80                              boolean half_pixel_center,
     81                              boolean bottom_edge_rule);
     82 
     83 void
     84 lp_setup_set_line_state( struct lp_setup_context *setup,
     85                          float line_width);
     86 
     87 void
     88 lp_setup_set_point_state( struct lp_setup_context *setup,
     89                           float point_size,
     90                           boolean point_size_per_vertex,
     91                           uint sprite_coord_enable,
     92                           uint sprite_coord_origin);
     93 
     94 void
     95 lp_setup_set_setup_variant( struct lp_setup_context *setup,
     96 			    const struct lp_setup_variant *variant );
     97 
     98 void
     99 lp_setup_set_fs_variant( struct lp_setup_context *setup,
    100                          struct lp_fragment_shader_variant *variant );
    101 
    102 void
    103 lp_setup_set_fs_constants(struct lp_setup_context *setup,
    104                           unsigned num,
    105                           struct pipe_constant_buffer *buffers);
    106 
    107 void
    108 lp_setup_set_alpha_ref_value( struct lp_setup_context *setup,
    109                               float alpha_ref_value );
    110 
    111 void
    112 lp_setup_set_stencil_ref_values( struct lp_setup_context *setup,
    113                                  const ubyte refs[2] );
    114 
    115 void
    116 lp_setup_set_blend_color( struct lp_setup_context *setup,
    117                           const struct pipe_blend_color *blend_color );
    118 
    119 void
    120 lp_setup_set_scissors( struct lp_setup_context *setup,
    121                        const struct pipe_scissor_state *scissors );
    122 
    123 void
    124 lp_setup_set_viewports(struct lp_setup_context *setup,
    125                        unsigned num_viewports,
    126                        const struct pipe_viewport_state *viewports);
    127 
    128 void
    129 lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup,
    130                                     unsigned num,
    131                                     struct pipe_sampler_view **views);
    132 
    133 void
    134 lp_setup_set_fragment_sampler_state(struct lp_setup_context *setup,
    135                                     unsigned num,
    136                                     struct pipe_sampler_state **samplers);
    137 
    138 unsigned
    139 lp_setup_is_resource_referenced( const struct lp_setup_context *setup,
    140                                 const struct pipe_resource *texture );
    141 
    142 void
    143 lp_setup_set_flatshade_first( struct lp_setup_context *setup,
    144                               boolean flatshade_first );
    145 
    146 void
    147 lp_setup_set_rasterizer_discard( struct lp_setup_context *setup,
    148                                  boolean rasterizer_discard );
    149 
    150 void
    151 lp_setup_set_vertex_info( struct lp_setup_context *setup,
    152                           struct vertex_info *info );
    153 
    154 void
    155 lp_setup_begin_query(struct lp_setup_context *setup,
    156                      struct llvmpipe_query *pq);
    157 
    158 void
    159 lp_setup_end_query(struct lp_setup_context *setup,
    160                    struct llvmpipe_query *pq);
    161 
    162 static inline unsigned
    163 lp_clamp_viewport_idx(int idx)
    164 {
    165    return (PIPE_MAX_VIEWPORTS > idx && idx >= 0) ? idx : 0;
    166 }
    167 
    168 #endif
    169