r600g: remove unused variable
[mesa.git] / src / gallium / drivers / r600 / r600_pipe.h
index 0aaec4be9b0f193895079c8144756ac66c66c36e..7b6eb3509b41899b866c65cc7450e915c08a3669 100644 (file)
 #define R600_BIG_ENDIAN 0
 #endif
 
+enum r600_atom_flags {
+       /* When set, atoms are added at the beginning of the dirty list
+        * instead of the end. */
+       EMIT_EARLY = (1 << 0)
+};
+
+/* This encapsulates a state or an operation which can emitted into the GPU
+ * command stream. It's not limited to states only, it can be used for anything
+ * that wants to write commands into the CS (e.g. cache flushes). */
+struct r600_atom {
+       void (*emit)(struct r600_context *ctx, struct r600_atom *state);
+
+       unsigned                num_dw;
+       enum r600_atom_flags    flags;
+       bool                    dirty;
+
+       struct list_head        head;
+};
+
+struct r600_atom_surface_sync {
+       struct r600_atom atom;
+       unsigned flush_flags; /* CP_COHER_CNTL */
+};
+
 enum r600_pipe_state_id {
        R600_PIPE_STATE_BLEND = 0,
        R600_PIPE_STATE_BLEND_COLOR,
@@ -93,6 +117,7 @@ struct r600_screen {
        struct r600_pipe_fences         fences;
 
        unsigned                        num_contexts;
+       unsigned                        use_surface;
 
        /* for thread-safe write accessing to num_contexts */
        pipe_mutex                      mutex_num_contexts;
@@ -251,6 +276,11 @@ struct r600_context {
 
        unsigned default_ps_gprs, default_vs_gprs;
 
+       /* States based on r600_state. */
+       struct list_head                dirty_states;
+       struct r600_atom_surface_sync   atom_surface_sync;
+       struct r600_atom                atom_r6xx_flush_and_inv;
+
        /* Below are variables from the old r600_context.
         */
        struct radeon_winsys_cs *cs;
@@ -265,9 +295,6 @@ struct r600_context {
        unsigned                ctx_pm4_ndwords;
        unsigned                init_dwords;
 
-       unsigned                creloc;
-       struct r600_resource    **bo;
-
        /* The list of active queries. Only one query of each type can be active. */
        struct list_head        active_query_list;
        unsigned                num_cs_dw_queries_suspend;
@@ -275,7 +302,6 @@ struct r600_context {
 
        unsigned                backend_mask;
        unsigned                max_db; /* for OQ */
-       unsigned                num_dest_buffers;
        unsigned                flags;
        boolean                 predicate_drawing;
        struct r600_range       ps_resources;
@@ -290,6 +316,26 @@ struct r600_context {
        unsigned                *vs_so_stride_in_dw;
 };
 
+static INLINE void r600_emit_atom(struct r600_context *rctx, struct r600_atom *atom)
+{
+       atom->emit(rctx, atom);
+       atom->dirty = false;
+       if (atom->head.next && atom->head.prev)
+               LIST_DELINIT(&atom->head);
+}
+
+static INLINE void r600_atom_dirty(struct r600_context *rctx, struct r600_atom *state)
+{
+       if (!state->dirty) {
+               if (state->flags & EMIT_EARLY) {
+                       LIST_ADD(&state->head, &rctx->dirty_states);
+               } else {
+                       LIST_ADDTAIL(&state->head, &rctx->dirty_states);
+               }
+               state->dirty = true;
+       }
+}
+
 /* evergreen_state.c */
 void evergreen_init_state_functions(struct r600_context *rctx);
 void evergreen_init_config(struct r600_context *rctx);
@@ -384,6 +430,9 @@ void r600_translate_index_buffer(struct r600_context *r600,
                                 unsigned count);
 
 /* r600_state_common.c */
+void r600_init_common_atoms(struct r600_context *rctx);
+unsigned r600_get_cb_flush_flags(struct r600_context *rctx);
+void r600_texture_barrier(struct pipe_context *ctx);
 void r600_set_index_buffer(struct pipe_context *ctx,
                           const struct pipe_index_buffer *ib);
 void r600_set_vertex_buffers(struct pipe_context *ctx, unsigned count,
@@ -422,6 +471,8 @@ void r600_set_so_targets(struct pipe_context *ctx,
 void r600_set_pipe_stencil_ref(struct pipe_context *ctx,
                               const struct pipe_stencil_ref *state);
 void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info);
+uint32_t r600_translate_stencil_op(int s_op);
+uint32_t r600_translate_fill(uint32_t func);
 
 /*
  * common helpers