X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fsoftpipe%2Fsp_state.h;h=af6b9782afa42111d1c6bb6238fbae463a15b682;hb=f154555733a7c49d4b2bd53ba11fb1545144f5ad;hp=525bf23734a193e29377d35bc1f82bf80ebeff23;hpb=695cc370a280a637f411f5ff3877b3fd1c05e424;p=mesa.git diff --git a/src/gallium/drivers/softpipe/sp_state.h b/src/gallium/drivers/softpipe/sp_state.h index 525bf23734a..af6b9782afa 100644 --- a/src/gallium/drivers/softpipe/sp_state.h +++ b/src/gallium/drivers/softpipe/sp_state.h @@ -1,6 +1,6 @@ /************************************************************************** * - * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. + * Copyright 2007 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -18,14 +18,14 @@ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * **************************************************************************/ -/* Authors: Keith Whitwell +/* Authors: Keith Whitwell */ #ifndef SP_STATE_H @@ -56,38 +56,55 @@ struct tgsi_sampler; +struct tgsi_image; +struct tgsi_buffer; struct tgsi_exec_machine; struct vertex_info; -/** - * Subclass of pipe_shader_state (though it doesn't really need to be). - * - * This is starting to look an awful lot like a quad pipeline stage... - */ -struct sp_fragment_shader { - struct pipe_shader_state shader; +struct sp_fragment_shader_variant_key +{ + boolean polygon_stipple; +}; + +struct sp_fragment_shader_variant +{ + const struct tgsi_token *tokens; + struct sp_fragment_shader_variant_key key; struct tgsi_shader_info info; + unsigned stipple_sampler_unit; + + /* See comments about this elsewhere */ +#if 0 struct draw_fragment_shader *draw_shader; +#endif - boolean origin_lower_left; /**< fragment shader uses lower left position origin? */ - boolean pixel_center_integer; /**< fragment shader uses integer pixel center? */ + void (*prepare)(const struct sp_fragment_shader_variant *shader, + struct tgsi_exec_machine *machine, + struct tgsi_sampler *sampler, + struct tgsi_image *image, + struct tgsi_buffer *buffer); - void (*prepare)( const struct sp_fragment_shader *shader, - struct tgsi_exec_machine *machine, - struct tgsi_sampler **samplers); + unsigned (*run)(const struct sp_fragment_shader_variant *shader, + struct tgsi_exec_machine *machine, + struct quad_header *quad, + bool early_depth_test); - /* Run the shader - this interface will get cleaned up in the - * future: - */ - unsigned (*run)( const struct sp_fragment_shader *shader, - struct tgsi_exec_machine *machine, - struct quad_header *quad ); + /* Deletes this instance of the object */ + void (*delete)(struct sp_fragment_shader_variant *shader, + struct tgsi_exec_machine *machine); + struct sp_fragment_shader_variant *next; +}; - void (*delete)( struct sp_fragment_shader * ); + +/** Subclass of pipe_shader_state */ +struct sp_fragment_shader { + struct pipe_shader_state shader; + struct sp_fragment_shader_variant *variants; + struct draw_fragment_shader *draw_shader; }; @@ -111,9 +128,16 @@ struct sp_velems_state { }; struct sp_so_state { - struct pipe_stream_output_state base; + struct pipe_stream_output_info base; }; +/** Subclass of pipe_compute_state */ +struct sp_compute_shader { + struct pipe_compute_state shader; + struct tgsi_token *tokens; + struct tgsi_shader_info info; + int max_sampler; /* -1 if no samplers */ +}; void softpipe_init_blend_funcs(struct pipe_context *pipe); @@ -137,24 +161,26 @@ void softpipe_init_vertex_funcs(struct pipe_context *pipe); void -softpipe_set_framebuffer_state(struct pipe_context *, - const struct pipe_framebuffer_state *); +softpipe_init_image_funcs(struct pipe_context *pipe); void -softpipe_update_derived( struct softpipe_context *softpipe ); +softpipe_set_framebuffer_state(struct pipe_context *, + const struct pipe_framebuffer_state *); void -softpipe_draw_vbo(struct pipe_context *pipe, - const struct pipe_draw_info *info); +softpipe_update_derived(struct softpipe_context *softpipe, unsigned prim); void -softpipe_draw_stream_output(struct pipe_context *pipe, unsigned mode); +softpipe_set_sampler_views(struct pipe_context *pipe, + enum pipe_shader_type shader, + unsigned start, + unsigned num, + struct pipe_sampler_view **views); -void -softpipe_map_transfers(struct softpipe_context *sp); void -softpipe_unmap_transfers(struct softpipe_context *sp); +softpipe_draw_vbo(struct pipe_context *pipe, + const struct pipe_draw_info *info); void softpipe_map_texture_surfaces(struct softpipe_context *sp); @@ -163,11 +189,41 @@ void softpipe_unmap_texture_surfaces(struct softpipe_context *sp); -struct vertex_info * -softpipe_get_vertex_info(struct softpipe_context *softpipe); - struct vertex_info * softpipe_get_vbuf_vertex_info(struct softpipe_context *softpipe); +struct sp_fragment_shader_variant * +softpipe_find_fs_variant(struct softpipe_context *softpipe, + struct sp_fragment_shader *fs, + const struct sp_fragment_shader_variant_key *key); + + +struct sp_fragment_shader_variant * +softpipe_find_fs_variant(struct softpipe_context *softpipe, + struct sp_fragment_shader *fs, + const struct sp_fragment_shader_variant_key *key); + +void +softpipe_prepare_vertex_sampling(struct softpipe_context *ctx, + unsigned num, + struct pipe_sampler_view **views); +void +softpipe_cleanup_vertex_sampling(struct softpipe_context *ctx); + + +void +softpipe_prepare_geometry_sampling(struct softpipe_context *ctx, + unsigned num, + struct pipe_sampler_view **views); +void +softpipe_cleanup_geometry_sampling(struct softpipe_context *ctx); + + +void +softpipe_launch_grid(struct pipe_context *context, + const struct pipe_grid_info *info); + +void +softpipe_update_compute_samplers(struct softpipe_context *softpipe); #endif