st/mesa: remove trailing whitespace in st_format.c
[mesa.git] / src / mesa / state_tracker / st_context.h
index 2d81c4ca63117ddac909690cda472fe9c34dab92..ff207039d78a5169ebc62f2ea273ab4e0b293157 100644 (file)
 #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 */
@@ -57,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 {
@@ -76,7 +67,7 @@ struct st_context
 {
    struct st_context_iface iface;
 
-   GLcontext *ctx;
+   struct gl_context *ctx;
 
    struct pipe_context *pipe;
 
@@ -85,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.
     */
@@ -93,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_texture *sampler_texture[PIPE_MAX_SAMPLERS];
+      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];
 
@@ -131,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;
 
@@ -143,25 +139,26 @@ 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;
 
    /** 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;
 
@@ -173,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 */
@@ -182,6 +180,7 @@ 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;
 
@@ -189,26 +188,41 @@ struct st_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;
 };
 
 
 /* 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];
@@ -219,7 +233,7 @@ struct st_framebuffer
 
 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);
 
 
 
@@ -258,5 +272,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