draw: corrections to allow for different cliptest cases
[mesa.git] / src / gallium / drivers / r600 / r600_context.h
index e89cab31bc3f87079e1490b1a62cf216388a5346..d104531d365688d2f8e31515a855d2f24d0489ba 100644 (file)
@@ -34,6 +34,8 @@
 #include "radeon.h"
 #include "r600_shader.h"
 
+struct u_upload_mgr;
+
 #define R600_QUERY_STATE_STARTED       (1 << 0)
 #define R600_QUERY_STATE_ENDED         (1 << 1)
 #define R600_QUERY_STATE_SUSPENDED     (1 << 2)
@@ -49,7 +51,7 @@ struct r600_query {
        boolean                                 flushed;
        unsigned                                state;
        /* The buffer where query results are stored. */
-       struct radeon_bo                        *buffer;
+       struct radeon_ws_bo                     *buffer;
        unsigned                                buffer_size;
        /* linked list of queries */
        struct list_head                        list;
@@ -96,6 +98,7 @@ enum pipe_state_type {
 };
 
 #define R600_MAX_RSTATE                16
+#define R600_STATE_FLAG_DSA_FLUSH 1
 
 struct r600_context_state {
        union pipe_states               state;
@@ -103,8 +106,9 @@ struct r600_context_state {
        unsigned                        type;
        struct radeon_state             rstate[R600_MAX_RSTATE];
        struct r600_shader              shader;
-       struct radeon_bo                *bo;
+       struct radeon_ws_bo             *bo;
        unsigned                        nrstate;
+       unsigned                        flags;
 };
 
 struct r600_vertex_element
@@ -125,6 +129,7 @@ struct r600_draw {
        struct pipe_resource    *index_buffer;
        unsigned                index_buffer_offset;
        unsigned                min_index, max_index;
+       unsigned                index_bias;
 };
 
 struct r600_context_hw_states {
@@ -150,7 +155,9 @@ struct r600_shader_sampler_states {
 };
 
 struct r600_context;
+struct r600_screen;
 struct r600_resource;
+struct r600_resource_texture;
 
 struct r600_context_hw_state_vtbl {
        void (*blend)(struct r600_context *rctx,
@@ -191,10 +198,14 @@ extern struct r600_context_hw_state_vtbl eg_hw_state_vtbl;
 
 struct r600_context {
        struct pipe_context             context;
+       struct blitter_context          *blitter;
+       struct pipe_framebuffer_state   *pframebuffer;
+       unsigned                        family;
+       void                            *custom_dsa_flush;
+       struct list_head                query_list;
        struct r600_screen              *screen;
        struct radeon                   *rw;
-       struct radeon_ctx               ctx;
-       struct blitter_context          *blitter;
+       struct radeon_ctx               *ctx;
        struct radeon_draw              draw;
        struct r600_context_hw_state_vtbl *vtbl;
        struct radeon_state             config;
@@ -231,7 +242,11 @@ struct r600_context {
        struct pipe_vertex_buffer       vertex_buffer[PIPE_MAX_ATTRIBS];
        struct pipe_index_buffer        index_buffer;
        struct pipe_blend_color         blend_color;
-       struct list_head                query_list;
+
+       /* upload managers */
+       struct u_upload_mgr *upload_vb;
+       struct u_upload_mgr *upload_ib;
+       bool any_user_vbs;
 };
 
 /* Convenience cast wrapper. */
@@ -265,6 +280,7 @@ extern int r600_pipe_shader_create(struct pipe_context *ctx,
                        const struct tgsi_token *tokens);
 extern int r600_pipe_shader_update(struct pipe_context *ctx,
                                struct r600_context_state *rstate);
+extern int r600_find_vs_semantic_index(struct r600_context *rctx, struct r600_shader *rshader, int id);
 
 #define R600_ERR(fmt, args...) \
        fprintf(stderr, "EE %s/%s:%d - "fmt, __FILE__, __func__, __LINE__, ##args)
@@ -289,4 +305,8 @@ void eg_set_constant_buffer(struct pipe_context *ctx,
                            uint shader, uint index,
                            struct pipe_resource *buffer);
 
+int r600_upload_index_buffer(struct r600_context *rctx,
+                             struct r600_draw *draw);
+int r600_upload_user_buffers(struct r600_context *rctx);
+
 #endif