intel / DRI2: When available, use DRI2GetBuffersWithFormat
[mesa.git] / src / mesa / state_tracker / st_context.h
index 46c16e45e66e817d9a26de57e048bd300249ec91..f840579a4042f627d98168105cf8800e51b00ba6 100644 (file)
@@ -53,6 +53,7 @@ struct bitmap_cache;
 #define ST_NEW_MESA                    0x1 /* Mesa state has changed */
 #define ST_NEW_FRAGMENT_PROGRAM        0x2
 #define ST_NEW_VERTEX_PROGRAM          0x4
+#define ST_NEW_FRAMEBUFFER             0x8
 
 
 struct st_state_flags {
@@ -92,16 +93,17 @@ struct st_context
       struct pipe_constant_buffer constants[2];
       struct pipe_framebuffer_state framebuffer;
       struct pipe_texture *sampler_texture[PIPE_MAX_SAMPLERS];
-      struct pipe_poly_stipple poly_stipple;
       struct pipe_scissor_state scissor;
       struct pipe_viewport_state viewport;
 
       GLuint num_samplers;
       GLuint num_textures;
+
+      GLuint poly_stipple[32];  /**< In OpenGL's bottom-to-top order */
    } state;
 
    struct {
-      struct st_tracked_state tracked_state[2];
+      struct st_tracked_state tracked_state[PIPE_SHADER_TYPES];
    } constants;
 
    /* XXX unused: */
@@ -114,13 +116,10 @@ struct st_context
    char vendor[100];
    char renderer[100];
 
-   /* State to be validated:
-    */
-   struct st_tracked_state **atoms;
-   GLuint nr_atoms;
-
    struct st_state_flags dirty;
 
+   GLboolean missing_textures;
+
    GLfloat polygon_offset_scale; /* ?? */
 
    /** Mapping from VERT_RESULT_x to post-transformed vertex slot */
@@ -129,6 +128,8 @@ struct st_context
    struct st_vertex_program *vp;    /**< Currently bound vertex program */
    struct st_fragment_program *fp;  /**< Currently bound fragment program */
 
+   struct gl_texture_object *default_texture;
+
    struct {
       struct gl_program_cache *cache;
       struct st_fragment_program *program;  /**< cur pixel transfer prog */
@@ -144,11 +145,11 @@ struct st_context
    struct {
       struct pipe_rasterizer_state rasterizer;
       struct pipe_sampler_state sampler;
-      struct pipe_shader_state vert_shader;
       enum pipe_format tex_format;
       void *vs;
       float vertices[4][3][4];  /**< vertex pos + color + texcoord */
       struct pipe_buffer *vbuf;
+      unsigned vbuf_slot;       /* next free slot in vbuf */
       struct bitmap_cache *cache;
    } bitmap;
 
@@ -160,14 +161,13 @@ struct st_context
 
    /** for glClear */
    struct {
-      struct pipe_shader_state vert_shader;
-      struct pipe_shader_state frag_shader;
       struct pipe_rasterizer_state raster;
       struct pipe_viewport_state viewport;
       void *vs;
       void *fs;
       float vertices[4][2][4];  /**< vertex pos + color */
       struct pipe_buffer *vbuf;
+      unsigned vbuf_slot;
    } clear;
 
    void *passthrough_fs;  /**< simple pass-through frag shader */
@@ -176,6 +176,8 @@ struct st_context
    struct blit_state *blit;
 
    struct cso_context *cso_context;
+
+   int force_msaa;
 };
 
 
@@ -233,4 +235,12 @@ st_fb_orientation(const struct gl_framebuffer *fb)
 }
 
 
+/** clear-alloc a struct-sized object, with casting */
+#define ST_CALLOC_STRUCT(T)   (struct T *) _mesa_calloc(sizeof(struct T))
+
+
+extern int
+st_get_msaa(void);
+
+
 #endif