r600g: remove unused variable
[mesa.git] / src / gallium / drivers / r600 / r600_pipe.h
index 0c6d72dc72f99da33c7fb7ccf8642d78bf4116c2..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;
@@ -126,6 +151,7 @@ struct r600_pipe_dsa {
        struct r600_pipe_state          rstate;
        unsigned                        alpha_ref;
        unsigned                        db_render_override;
+       unsigned                        db_render_control;
        ubyte                           valuemask[2];
        ubyte                           writemask[2];
 };
@@ -198,7 +224,7 @@ struct r600_stencil_ref
        ubyte writemask[2];
 };
 
-struct r600_pipe_context {
+struct r600_context {
        struct pipe_context             context;
        struct blitter_context          *blitter;
        enum radeon_family              family;
@@ -208,7 +234,6 @@ struct r600_pipe_context {
        struct r600_screen              *screen;
        struct radeon_winsys            *ws;
        struct r600_pipe_state          *states[R600_PIPE_NSTATES];
-       struct r600_context             ctx;
        struct r600_vertex_element      *vertex_elements;
        struct r600_pipe_resource_state fs_resource[PIPE_MAX_ATTRIBS];
        struct pipe_framebuffer_state   framebuffer;
@@ -250,17 +275,76 @@ struct r600_pipe_context {
        boolean                         have_depth_texture, have_depth_fb;
 
        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;
+
+       struct r600_range       *range;
+       unsigned                nblocks;
+       struct r600_block       **blocks;
+       struct list_head        dirty;
+       struct list_head        resource_dirty;
+       struct list_head        enable_list;
+       unsigned                pm4_dirty_cdwords;
+       unsigned                ctx_pm4_ndwords;
+       unsigned                init_dwords;
+
+       /* 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;
+       unsigned                num_cs_dw_streamout_end;
+
+       unsigned                backend_mask;
+       unsigned                max_db; /* for OQ */
+       unsigned                flags;
+       boolean                 predicate_drawing;
+       struct r600_range       ps_resources;
+       struct r600_range       vs_resources;
+       struct r600_range       fs_resources;
+       int                     num_ps_resources, num_vs_resources, num_fs_resources;
+
+       unsigned                num_so_targets;
+       struct r600_so_target   *so_targets[PIPE_MAX_SO_BUFFERS];
+       boolean                 streamout_start;
+       unsigned                streamout_append_bitmask;
+       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_pipe_context *rctx);
-void evergreen_init_config(struct r600_pipe_context *rctx);
+void evergreen_init_state_functions(struct r600_context *rctx);
+void evergreen_init_config(struct r600_context *rctx);
 void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader *shader);
 void evergreen_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shader);
 void evergreen_fetch_shader(struct pipe_context *ctx, struct r600_vertex_element *ve);
-void *evergreen_create_db_flush_dsa(struct r600_pipe_context *rctx);
-void evergreen_polygon_offset_update(struct r600_pipe_context *rctx);
-void evergreen_pipe_init_buffer_resource(struct r600_pipe_context *rctx,
+void *evergreen_create_db_flush_dsa(struct r600_context *rctx);
+void evergreen_polygon_offset_update(struct r600_context *rctx);
+void evergreen_pipe_init_buffer_resource(struct r600_context *rctx,
                                         struct r600_pipe_resource_state *rstate);
 void evergreen_pipe_mod_buffer_resource(struct pipe_context *ctx,
                                        struct r600_pipe_resource_state *rstate,
@@ -274,10 +358,10 @@ boolean evergreen_is_format_supported(struct pipe_screen *screen,
                                      unsigned usage);
 
 /* r600_blit.c */
-void r600_init_blit_functions(struct r600_pipe_context *rctx);
+void r600_init_blit_functions(struct r600_context *rctx);
 void r600_blit_uncompress_depth(struct pipe_context *ctx, struct r600_resource_texture *texture);
 void r600_blit_push_depth(struct pipe_context *ctx, struct r600_resource_texture *texture);
-void r600_flush_depth_textures(struct r600_pipe_context *rctx);
+void r600_flush_depth_textures(struct r600_context *rctx);
 
 /* r600_buffer.c */
 bool r600_init_resource(struct r600_screen *rscreen,
@@ -289,7 +373,7 @@ struct pipe_resource *r600_buffer_create(struct pipe_screen *screen,
 struct pipe_resource *r600_user_buffer_create(struct pipe_screen *screen,
                                              void *ptr, unsigned bytes,
                                              unsigned bind);
-void r600_upload_index_buffer(struct r600_pipe_context *rctx,
+void r600_upload_index_buffer(struct r600_context *rctx,
                              struct pipe_index_buffer *ib, unsigned count);
 
 
@@ -298,10 +382,10 @@ void r600_flush(struct pipe_context *ctx, struct pipe_fence_handle **fence,
                unsigned flags);
 
 /* r600_query.c */
-void r600_init_query_functions(struct r600_pipe_context *rctx);
+void r600_init_query_functions(struct r600_context *rctx);
 
 /* r600_resource.c */
-void r600_init_context_resource_functions(struct r600_pipe_context *r600);
+void r600_init_context_resource_functions(struct r600_context *r600);
 
 /* r600_shader.c */
 int r600_pipe_shader_create(struct pipe_context *ctx, struct r600_pipe_shader *shader);
@@ -310,21 +394,21 @@ int r600_find_vs_semantic_index(struct r600_shader *vs,
                                struct r600_shader *ps, int id);
 
 /* r600_state.c */
-void r600_update_sampler_states(struct r600_pipe_context *rctx);
-void r600_init_state_functions(struct r600_pipe_context *rctx);
-void r600_init_config(struct r600_pipe_context *rctx);
+void r600_update_sampler_states(struct r600_context *rctx);
+void r600_init_state_functions(struct r600_context *rctx);
+void r600_init_config(struct r600_context *rctx);
 void r600_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader *shader);
 void r600_pipe_shader_vs(struct pipe_context *ctx, struct r600_pipe_shader *shader);
 void r600_fetch_shader(struct pipe_context *ctx, struct r600_vertex_element *ve);
-void *r600_create_db_flush_dsa(struct r600_pipe_context *rctx);
-void r600_polygon_offset_update(struct r600_pipe_context *rctx);
-void r600_pipe_init_buffer_resource(struct r600_pipe_context *rctx,
+void *r600_create_db_flush_dsa(struct r600_context *rctx);
+void r600_polygon_offset_update(struct r600_context *rctx);
+void r600_pipe_init_buffer_resource(struct r600_context *rctx,
                                    struct r600_pipe_resource_state *rstate);
 void r600_pipe_mod_buffer_resource(struct r600_pipe_resource_state *rstate,
                                   struct r600_resource *rbuffer,
                                   unsigned offset, unsigned stride,
                                   enum radeon_bo_usage usage);
-void r600_adjust_gprs(struct r600_pipe_context *rctx);
+void r600_adjust_gprs(struct r600_context *rctx);
 boolean r600_is_format_supported(struct pipe_screen *screen,
                                 enum pipe_format format,
                                 enum pipe_texture_target target,
@@ -333,7 +417,7 @@ boolean r600_is_format_supported(struct pipe_screen *screen,
 
 /* r600_texture.c */
 void r600_init_screen_texture_functions(struct pipe_screen *screen);
-void r600_init_surface_functions(struct r600_pipe_context *r600);
+void r600_init_surface_functions(struct r600_context *r600);
 uint32_t r600_translate_texformat(struct pipe_screen *screen, enum pipe_format format,
                                  const unsigned char *swizzle_view,
                                  uint32_t *word4_p, uint32_t *yuv_format_p);
@@ -341,11 +425,14 @@ unsigned r600_texture_get_offset(struct r600_resource_texture *rtex,
                                        unsigned level, unsigned layer);
 
 /* r600_translate.c */
-void r600_translate_index_buffer(struct r600_pipe_context *r600,
+void r600_translate_index_buffer(struct r600_context *r600,
                                 struct pipe_index_buffer *ib,
                                 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,
@@ -384,11 +471,13 @@ 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
  */
-static INLINE u32 S_FIXED(float value, u32 frac_bits)
+static INLINE uint32_t S_FIXED(float value, uint32_t frac_bits)
 {
        return value * (1 << frac_bits);
 }