X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fstate_tracker%2Fst_context.h;h=0a322022149a5cd2ebcbe7d7835c25a3adb53ffb;hb=95739f19ccc8d3915c437238ca057ddbecd193c6;hp=ae73817c0e6f9c3a8bd14d1ee6cc6b1660667f58;hpb=b8030c6561e019e079b5be2fe64ec804df4bfa03;p=mesa.git diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h index ae73817c0e6..0a322022149 100644 --- a/src/mesa/state_tracker/st_context.h +++ b/src/mesa/state_tracker/st_context.h @@ -29,26 +29,17 @@ #define ST_CONTEXT_H #include "main/mtypes.h" -#include "shader/prog_cache.h" #include "pipe/p_state.h" +#include "state_tracker/st_api.h" - -struct st_context; -struct st_texture_object; -struct st_fragment_program; +struct bitmap_cache; +struct blit_state; +struct dd_function_table; struct draw_context; struct draw_stage; -struct cso_cache; -struct cso_blend; struct gen_mipmap_state; -struct blit_state; -struct bitmap_cache; - - -/** XXX we'd like to get rid of these */ -#define FRONT_STATUS_UNDEFINED 0 -#define FRONT_STATUS_DIRTY 1 -#define FRONT_STATUS_COPY_OF_BACK 2 +struct st_context; +struct st_fragment_program; #define ST_NEW_MESA 0x1 /* Mesa state has changed */ @@ -56,6 +47,7 @@ struct bitmap_cache; #define ST_NEW_VERTEX_PROGRAM 0x4 #define ST_NEW_FRAMEBUFFER 0x8 #define ST_NEW_EDGEFLAGS_DATA 0x10 +#define ST_NEW_GEOMETRY_PROGRAM 0x20 struct st_state_flags { @@ -73,7 +65,9 @@ struct st_tracked_state { struct st_context { - GLcontext *ctx; + struct st_context_iface iface; + + struct gl_context *ctx; struct pipe_context *pipe; @@ -82,6 +76,12 @@ struct st_context struct draw_stage *selection_stage; /**< For GL_SELECT rendermode */ struct draw_stage *rastpos_stage; /**< For glRasterPos */ + + /* On old libGL's for linux we need to invalidate the drawables + * on glViewpport calls, this is set via a option. + */ + boolean invalidate_on_gl_viewport; + /* Some state is contained in constant objects. * Other state is just parameter values. */ @@ -90,31 +90,27 @@ struct st_context struct pipe_depth_stencil_alpha_state depth_stencil; struct pipe_rasterizer_state rasterizer; struct pipe_sampler_state samplers[PIPE_MAX_SAMPLERS]; - struct pipe_sampler_state *sampler_list[PIPE_MAX_SAMPLERS]; + struct pipe_sampler_state vertex_samplers[PIPE_MAX_VERTEX_SAMPLERS]; struct pipe_clip_state clip; - struct pipe_buffer *constants[2]; + struct { + void *ptr; + unsigned size; + } constants[PIPE_SHADER_TYPES]; struct pipe_framebuffer_state framebuffer; struct pipe_sampler_view *sampler_views[PIPE_MAX_SAMPLERS]; + struct pipe_sampler_view *sampler_vertex_views[PIPE_MAX_VERTEX_SAMPLERS]; struct pipe_scissor_state scissor; struct pipe_viewport_state viewport; + unsigned sample_mask; GLuint num_samplers; + GLuint num_vertex_samplers; GLuint num_textures; + GLuint num_vertex_textures; GLuint poly_stipple[32]; /**< In OpenGL's bottom-to-top order */ } state; - struct { - struct st_tracked_state tracked_state[PIPE_SHADER_TYPES]; - } constants; - - /* XXX unused: */ - struct { - struct gl_fragment_program *fragment_program; - } cb; - - GLuint frontbuffer_status; /**< one of FRONT_STATUS_ (XXX to be removed) */ - char vendor[100]; char renderer[100]; @@ -128,8 +124,11 @@ struct st_context struct st_vertex_program *vp; /**< Currently bound vertex program */ struct st_fragment_program *fp; /**< Currently bound fragment program */ + struct st_geometry_program *gp; /**< Currently bound geometry program */ - struct st_vp_varient *vp_varient; + struct st_vp_variant *vp_variant; + struct st_fp_variant *fp_variant; + struct st_gp_variant *gp_variant; struct gl_texture_object *default_texture; @@ -140,7 +139,7 @@ struct st_context GLuint user_prog_sn; /**< user fragment program serial no. */ struct st_fragment_program *combined_prog; GLuint combined_prog_sn; - struct pipe_texture *pixelmap_texture; + struct pipe_resource *pixelmap_texture; struct pipe_sampler_view *pixelmap_sampler_view; boolean pixelmap_enabled; /**< use the pixelmap texture? */ } pixel_xfer; @@ -148,18 +147,18 @@ struct st_context /** for glBitmap */ struct { struct pipe_rasterizer_state rasterizer; - struct pipe_sampler_state sampler; + struct pipe_sampler_state samplers[2]; enum pipe_format tex_format; void *vs; float vertices[4][3][4]; /**< vertex pos + color + texcoord */ - struct pipe_buffer *vbuf; + struct pipe_resource *vbuf; unsigned vbuf_slot; /* next free slot in vbuf */ struct bitmap_cache *cache; } bitmap; /** for glDraw/CopyPixels */ struct { - struct st_fragment_program *z_shader; + struct gl_fragment_program *shaders[4]; void *vert_shaders[2]; /**< ureg shaders */ } drawpix; @@ -171,8 +170,9 @@ struct st_context void *vs; void *fs; float vertices[4][2][4]; /**< vertex pos + color */ - struct pipe_buffer *vbuf; + struct pipe_resource *vbuf; unsigned vbuf_slot; + boolean enable_ds_separate; } clear; /** used for anything using util_draw_vertex_buffer */ @@ -180,38 +180,64 @@ struct st_context void *passthrough_fs; /**< simple pass-through frag shader */ + enum pipe_texture_target internal_target; struct gen_mipmap_state *gen_mipmap; struct blit_state *blit; struct cso_context *cso_context; int force_msaa; + void *winsys_drawable_handle; + + /* User vertex buffers. */ + struct { + struct pipe_resource *buffer; + + /** Element size */ + GLuint element_size; + + /** Attribute stride */ + GLsizei stride; + } user_attrib[PIPE_MAX_ATTRIBS]; + unsigned num_user_attribs; + + /* Active render condition. */ + struct pipe_query *render_condition; + unsigned condition_mode; + + int32_t draw_stamp; + int32_t read_stamp; }; /* Need this so that we can implement Mesa callbacks in this module. */ -static INLINE struct st_context *st_context(GLcontext *ctx) +static INLINE struct st_context *st_context(struct gl_context *ctx) { return ctx->st; } /** - * Wrapper for GLframebuffer. + * Wrapper for struct gl_framebuffer. * This is an opaque type to the outside world. */ struct st_framebuffer { - GLframebuffer Base; + struct gl_framebuffer Base; void *Private; - GLuint InitWidth, InitHeight; + + struct st_framebuffer_iface *iface; + enum st_attachment_type statts[ST_ATTACHMENT_COUNT]; + unsigned num_statts; + int32_t stamp; + int32_t iface_stamp; }; extern void st_init_driver_functions(struct dd_function_table *functions); -void st_invalidate_state(GLcontext * ctx, GLuint new_state); +void st_invalidate_state(struct gl_context * ctx, GLuint new_state); @@ -250,5 +276,13 @@ st_fb_orientation(const struct gl_framebuffer *fb) extern int st_get_msaa(void); +extern struct st_context * +st_create_context(gl_api api, struct pipe_context *pipe, + const struct gl_config *visual, + struct st_context *share); + +extern void +st_destroy_context(struct st_context *st); + #endif