r600g: Close a memory leak of llvm byte streams
[mesa.git] / src / gallium / drivers / r600 / r600_pipe.h
index 199b0f05fef5bec0072ba724aaeae2c89099d80f..a60a498c9f956e30e35af59a5a8c9d8a5aaf63f4 100644 (file)
@@ -35,7 +35,7 @@
 #include "r600_resource.h"
 #include "evergreen_compute.h"
 
-#define R600_NUM_ATOMS 22
+#define R600_NUM_ATOMS 28
 
 #define R600_MAX_CONST_BUFFERS 2
 #define R600_MAX_CONST_BUFFER_SIZE 4096
@@ -84,6 +84,14 @@ struct r600_cb_misc_state {
        bool dual_src_blend;
 };
 
+struct r600_clip_misc_state {
+       struct r600_atom atom;
+       unsigned pa_cl_clip_cntl;   /* from rasterizer    */
+       unsigned pa_cl_vs_out_cntl; /* from vertex shader */
+       unsigned clip_plane_enable; /* from rasterizer    */
+       unsigned clip_dist_write;   /* from vertex shader */
+};
+
 struct r600_alphatest_state {
        struct r600_atom atom;
        unsigned sx_alpha_test_control; /* this comes from dsa state */
@@ -92,6 +100,27 @@ struct r600_alphatest_state {
        bool cb0_export_16bpc; /* from set_framebuffer_state */
 };
 
+struct r600_vgt_state {
+       struct r600_atom atom;
+       uint32_t vgt_multi_prim_ib_reset_en;
+       uint32_t vgt_multi_prim_ib_reset_indx;
+};
+
+struct r600_vgt2_state {
+       struct r600_atom atom;
+       uint32_t vgt_indx_offset;
+};
+
+struct r600_blend_color {
+       struct r600_atom atom;
+       struct pipe_blend_color state;
+};
+
+struct r600_clip_state {
+       struct r600_atom atom;
+       struct pipe_clip_state state;
+};
+
 struct r600_cs_shader_state {
        struct r600_atom atom;
        struct r600_pipe_compute *shader;
@@ -122,11 +151,8 @@ struct r600_viewport_state {
 
 enum r600_pipe_state_id {
        R600_PIPE_STATE_BLEND = 0,
-       R600_PIPE_STATE_BLEND_COLOR,
-       R600_PIPE_STATE_CLIP,
        R600_PIPE_STATE_SCISSOR,
        R600_PIPE_STATE_RASTERIZER,
-       R600_PIPE_STATE_VGT,
        R600_PIPE_STATE_FRAMEBUFFER,
        R600_PIPE_STATE_DSA,
        R600_PIPE_STATE_POLYGON_OFFSET,
@@ -336,13 +362,10 @@ struct r600_context {
        unsigned                        compute_cb_target_mask;
        unsigned                        db_shader_control;
        unsigned                        pa_sc_line_stipple;
-       unsigned                        pa_cl_clip_cntl;
        /* for saving when using blitter */
-       struct pipe_clip_state          clip;
        struct r600_pipe_shader_selector        *ps_shader;
        struct r600_pipe_shader_selector        *vs_shader;
        struct r600_pipe_rasterizer     *rasterizer;
-       struct r600_pipe_state          vgt;
        struct r600_pipe_state          spi;
        struct pipe_query               *current_render_cond;
        unsigned                        current_render_cond_mode;
@@ -374,10 +397,15 @@ struct r600_context {
        struct r600_command_buffer      start_compute_cs_cmd;
        /* Register states. */
        struct r600_alphatest_state     alphatest_state;
+       struct r600_blend_color         blend_color;
        struct r600_cb_misc_state       cb_misc_state;
+       struct r600_clip_misc_state     clip_misc_state;
+       struct r600_clip_state          clip_state;
        struct r600_db_misc_state       db_misc_state;
        struct r600_seamless_cube_map   seamless_cube_map;
        struct r600_stencil_ref_state   stencil_ref;
+       struct r600_vgt_state           vgt_state;
+       struct r600_vgt2_state          vgt2_state;
        struct r600_sample_mask         sample_mask;
        struct r600_viewport_state      viewport;
        /* Shaders and shader resources. */
@@ -458,6 +486,10 @@ struct r600_context {
         * for anything useful. */
        struct r600_resource *dummy_fmask;
        struct r600_resource *dummy_cmask;
+
+       /* Last draw state (-1 = unset). */
+       int                     last_primitive_type; /* Last primitive type used in draw_vbo. */
+       int                     last_start_instance;
 };
 
 static INLINE void r600_emit_atom(struct r600_context *rctx, struct r600_atom *atom)
@@ -580,6 +612,10 @@ void r600_translate_index_buffer(struct r600_context *r600,
 /* r600_state_common.c */
 void r600_init_common_state_functions(struct r600_context *rctx);
 void r600_emit_alphatest_state(struct r600_context *rctx, struct r600_atom *atom);
+void r600_emit_blend_color(struct r600_context *rctx, struct r600_atom *atom);
+void r600_emit_vgt_state(struct r600_context *rctx, struct r600_atom *atom);
+void r600_emit_vgt2_state(struct r600_context *rctx, struct r600_atom *atom);
+void r600_emit_clip_misc_state(struct r600_context *rctx, struct r600_atom *atom);
 void r600_emit_stencil_ref(struct r600_context *rctx, struct r600_atom *atom);
 void r600_emit_viewport_state(struct r600_context *rctx, struct r600_atom *atom);
 void r600_init_atom(struct r600_context *rctx, struct r600_atom *atom, unsigned id,