cso_context.h revision 51d139f03898e5e46af6363c6bba131455738cc4
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 38extern "C" { 39#endif 40 41struct cso_context; 42 43struct cso_context *cso_create_context( struct pipe_context *pipe ); 44 45void cso_release_all( struct cso_context *ctx ); 46 47void cso_destroy_context( struct cso_context *cso ); 48 49 50 51enum pipe_error cso_set_blend( struct cso_context *cso, 52 const struct pipe_blend_state *blend ); 53void cso_save_blend(struct cso_context *cso); 54void cso_restore_blend(struct cso_context *cso); 55 56 57 58enum pipe_error cso_set_depth_stencil_alpha( struct cso_context *cso, 59 const struct pipe_depth_stencil_alpha_state *dsa ); 60void cso_save_depth_stencil_alpha(struct cso_context *cso); 61void cso_restore_depth_stencil_alpha(struct cso_context *cso); 62 63 64 65enum pipe_error cso_set_rasterizer( struct cso_context *cso, 66 const struct pipe_rasterizer_state *rasterizer ); 67void cso_save_rasterizer(struct cso_context *cso); 68void cso_restore_rasterizer(struct cso_context *cso); 69 70 71 72enum pipe_error cso_set_samplers( struct cso_context *cso, 73 unsigned count, 74 const struct pipe_sampler_state **states ); 75void cso_save_samplers(struct cso_context *cso); 76void cso_restore_samplers(struct cso_context *cso); 77 78/* Alternate interface to support state trackers that like to modify 79 * samplers one at a time: 80 */ 81enum pipe_error cso_single_sampler( struct cso_context *cso, 82 unsigned nr, 83 const struct pipe_sampler_state *states ); 84 85void cso_single_sampler_done( struct cso_context *cso ); 86 87enum pipe_error cso_set_vertex_samplers(struct cso_context *cso, 88 unsigned count, 89 const struct pipe_sampler_state **states); 90 91void 92cso_save_vertex_samplers(struct cso_context *cso); 93 94void 95cso_restore_vertex_samplers(struct cso_context *cso); 96 97enum pipe_error 98cso_single_vertex_sampler(struct cso_context *cso, 99 unsigned nr, 100 const struct pipe_sampler_state *states); 101 102void 103cso_single_vertex_sampler_done(struct cso_context *cso); 104 105 106 107enum pipe_error cso_set_sampler_textures( struct cso_context *cso, 108 uint count, 109 struct pipe_texture **textures ); 110void cso_save_sampler_textures( struct cso_context *cso ); 111void cso_restore_sampler_textures( struct cso_context *cso ); 112 113 114 115enum pipe_error 116cso_set_vertex_sampler_textures(struct cso_context *cso, 117 uint count, 118 struct pipe_texture **textures); 119void 120cso_save_vertex_sampler_textures(struct cso_context *cso); 121void 122cso_restore_vertex_sampler_textures(struct cso_context *cso); 123 124 125enum pipe_error cso_set_vertex_elements(struct cso_context *ctx, 126 unsigned count, 127 const struct pipe_vertex_element *states); 128void cso_save_vertex_elements(struct cso_context *ctx); 129void cso_restore_vertex_elements(struct cso_context *ctx); 130 131 132/* These aren't really sensible -- most of the time the api provides 133 * object semantics for shaders anyway, and the cases where it doesn't 134 * (eg mesa's internall-generated texenv programs), it will be up to 135 * the state tracker to implement their own specialized caching. 136 */ 137enum pipe_error cso_set_fragment_shader_handle(struct cso_context *ctx, 138 void *handle ); 139void cso_delete_fragment_shader(struct cso_context *ctx, void *handle ); 140/* 141enum pipe_error cso_set_fragment_shader( struct cso_context *cso, 142 const struct pipe_shader_state *shader ); 143*/ 144void cso_save_fragment_shader(struct cso_context *cso); 145void cso_restore_fragment_shader(struct cso_context *cso); 146 147 148enum pipe_error cso_set_vertex_shader_handle(struct cso_context *ctx, 149 void *handle ); 150void cso_delete_vertex_shader(struct cso_context *ctx, void *handle ); 151/* 152enum pipe_error cso_set_vertex_shader( struct cso_context *cso, 153 const struct pipe_shader_state *shader ); 154*/ 155void cso_save_vertex_shader(struct cso_context *cso); 156void cso_restore_vertex_shader(struct cso_context *cso); 157 158 159enum pipe_error cso_set_geometry_shader_handle(struct cso_context *ctx, 160 void *handle); 161void cso_delete_geometry_shader(struct cso_context *ctx, void *handle); 162void cso_save_geometry_shader(struct cso_context *cso); 163void cso_restore_geometry_shader(struct cso_context *cso); 164 165 166enum pipe_error cso_set_framebuffer(struct cso_context *cso, 167 const struct pipe_framebuffer_state *fb); 168void cso_save_framebuffer(struct cso_context *cso); 169void cso_restore_framebuffer(struct cso_context *cso); 170 171 172enum pipe_error cso_set_viewport(struct cso_context *cso, 173 const struct pipe_viewport_state *vp); 174void cso_save_viewport(struct cso_context *cso); 175void cso_restore_viewport(struct cso_context *cso); 176 177 178enum pipe_error cso_set_blend_color(struct cso_context *cso, 179 const struct pipe_blend_color *bc); 180 181 182enum pipe_error cso_set_stencil_ref(struct cso_context *cso, 183 const struct pipe_stencil_ref *sr); 184void cso_save_stencil_ref(struct cso_context *cso); 185void cso_restore_stencil_ref(struct cso_context *cso); 186 187 188#ifdef __cplusplus 189} 190#endif 191 192#endif 193