Home | History | Annotate | Download | only in cso_cache
      1 /**************************************************************************
      2  *
      3  * Copyright 2007-2008 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 
     29 #ifndef CSO_CONTEXT_H
     30 #define CSO_CONTEXT_H
     31 
     32 #include "pipe/p_context.h"
     33 #include "pipe/p_state.h"
     34 #include "pipe/p_defines.h"
     35 
     36 
     37 #ifdef	__cplusplus
     38 extern "C" {
     39 #endif
     40 
     41 struct cso_context;
     42 struct u_vbuf;
     43 
     44 struct cso_context *cso_create_context( struct pipe_context *pipe );
     45 
     46 void cso_release_all( struct cso_context *ctx );
     47 
     48 void cso_destroy_context( struct cso_context *cso );
     49 
     50 
     51 
     52 enum pipe_error cso_set_blend( struct cso_context *cso,
     53                                const struct pipe_blend_state *blend );
     54 void cso_save_blend(struct cso_context *cso);
     55 void cso_restore_blend(struct cso_context *cso);
     56 
     57 
     58 
     59 enum pipe_error cso_set_depth_stencil_alpha( struct cso_context *cso,
     60                                              const struct pipe_depth_stencil_alpha_state *dsa );
     61 void cso_save_depth_stencil_alpha(struct cso_context *cso);
     62 void cso_restore_depth_stencil_alpha(struct cso_context *cso);
     63 
     64 
     65 
     66 enum pipe_error cso_set_rasterizer( struct cso_context *cso,
     67                                     const struct pipe_rasterizer_state *rasterizer );
     68 void cso_save_rasterizer(struct cso_context *cso);
     69 void cso_restore_rasterizer(struct cso_context *cso);
     70 
     71 
     72 enum pipe_error
     73 cso_set_samplers(struct cso_context *cso,
     74                  unsigned shader_stage,
     75                  unsigned count,
     76                  const struct pipe_sampler_state **states);
     77 
     78 void
     79 cso_save_samplers(struct cso_context *cso, unsigned shader_stage);
     80 
     81 void
     82 cso_restore_samplers(struct cso_context *cso, unsigned shader_stage);
     83 
     84 /* Alternate interface to support state trackers that like to modify
     85  * samplers one at a time:
     86  */
     87 enum pipe_error
     88 cso_single_sampler(struct cso_context *cso,
     89                    unsigned shader_stage,
     90                    unsigned count,
     91                    const struct pipe_sampler_state *states);
     92 
     93 void
     94 cso_single_sampler_done(struct cso_context *cso, unsigned shader_stage);
     95 
     96 
     97 enum pipe_error cso_set_vertex_elements(struct cso_context *ctx,
     98                                         unsigned count,
     99                                         const struct pipe_vertex_element *states);
    100 void cso_save_vertex_elements(struct cso_context *ctx);
    101 void cso_restore_vertex_elements(struct cso_context *ctx);
    102 
    103 
    104 void cso_set_vertex_buffers(struct cso_context *ctx,
    105                             unsigned count,
    106                             const struct pipe_vertex_buffer *buffers);
    107 void cso_save_vertex_buffers(struct cso_context *ctx);
    108 void cso_restore_vertex_buffers(struct cso_context *ctx);
    109 
    110 
    111 void cso_set_stream_outputs(struct cso_context *ctx,
    112                             unsigned num_targets,
    113                             struct pipe_stream_output_target **targets,
    114                             unsigned append_bitmask);
    115 void cso_save_stream_outputs(struct cso_context *ctx);
    116 void cso_restore_stream_outputs(struct cso_context *ctx);
    117 
    118 
    119 /*
    120  * We don't provide shader caching in CSO.  Most of the time the api provides
    121  * object semantics for shaders anyway, and the cases where it doesn't
    122  * (eg mesa's internally-generated texenv programs), it will be up to
    123  * the state tracker to implement their own specialized caching.
    124  */
    125 
    126 enum pipe_error cso_set_fragment_shader_handle(struct cso_context *ctx,
    127                                                void *handle );
    128 void cso_delete_fragment_shader(struct cso_context *ctx, void *handle );
    129 void cso_save_fragment_shader(struct cso_context *cso);
    130 void cso_restore_fragment_shader(struct cso_context *cso);
    131 
    132 
    133 enum pipe_error cso_set_vertex_shader_handle(struct cso_context *ctx,
    134                                              void *handle );
    135 void cso_delete_vertex_shader(struct cso_context *ctx, void *handle );
    136 void cso_save_vertex_shader(struct cso_context *cso);
    137 void cso_restore_vertex_shader(struct cso_context *cso);
    138 
    139 
    140 enum pipe_error cso_set_geometry_shader_handle(struct cso_context *ctx,
    141                                                void *handle);
    142 void cso_delete_geometry_shader(struct cso_context *ctx, void *handle);
    143 void cso_save_geometry_shader(struct cso_context *cso);
    144 void cso_restore_geometry_shader(struct cso_context *cso);
    145 
    146 
    147 enum pipe_error cso_set_framebuffer(struct cso_context *cso,
    148                                     const struct pipe_framebuffer_state *fb);
    149 void cso_save_framebuffer(struct cso_context *cso);
    150 void cso_restore_framebuffer(struct cso_context *cso);
    151 
    152 
    153 enum pipe_error cso_set_viewport(struct cso_context *cso,
    154                                  const struct pipe_viewport_state *vp);
    155 void cso_save_viewport(struct cso_context *cso);
    156 void cso_restore_viewport(struct cso_context *cso);
    157 
    158 
    159 enum pipe_error cso_set_blend_color(struct cso_context *cso,
    160                                     const struct pipe_blend_color *bc);
    161 
    162 enum pipe_error cso_set_sample_mask(struct cso_context *cso,
    163                                     unsigned stencil_mask);
    164 void cso_save_sample_mask(struct cso_context *ctx);
    165 void cso_restore_sample_mask(struct cso_context *ctx);
    166 
    167 enum pipe_error cso_set_stencil_ref(struct cso_context *cso,
    168                                     const struct pipe_stencil_ref *sr);
    169 void cso_save_stencil_ref(struct cso_context *cso);
    170 void cso_restore_stencil_ref(struct cso_context *cso);
    171 
    172 
    173 /* clip state */
    174 
    175 void
    176 cso_set_clip(struct cso_context *cso,
    177              const struct pipe_clip_state *clip);
    178 
    179 void
    180 cso_save_clip(struct cso_context *cso);
    181 
    182 void
    183 cso_restore_clip(struct cso_context *cso);
    184 
    185 
    186 /* sampler view state */
    187 
    188 void
    189 cso_set_sampler_views(struct cso_context *cso,
    190                       unsigned shader_stage,
    191                       unsigned count,
    192                       struct pipe_sampler_view **views);
    193 
    194 void
    195 cso_save_sampler_views(struct cso_context *cso, unsigned shader_stage);
    196 
    197 void
    198 cso_restore_sampler_views(struct cso_context *cso, unsigned shader_stage);
    199 
    200 
    201 
    202 /* drawing */
    203 
    204 void
    205 cso_set_index_buffer(struct cso_context *cso,
    206                      const struct pipe_index_buffer *ib);
    207 
    208 void
    209 cso_draw_vbo(struct cso_context *cso,
    210              const struct pipe_draw_info *info);
    211 
    212 /* helper drawing function */
    213 void
    214 cso_draw_arrays(struct cso_context *cso, uint mode, uint start, uint count);
    215 
    216 #ifdef	__cplusplus
    217 }
    218 #endif
    219 
    220 #endif
    221