r600g: set correct pitch/offset for depth textures in flushed state.
[mesa.git] / src / gallium / drivers / r600 / r600_asm.h
index f2016af3e7264efa1eeceb4d7caa3012cbe0357b..b91d9b5b41b8444730cd590faaf91feec47c9924 100644 (file)
@@ -25,8 +25,8 @@
 
 #include "util/u_double_list.h"
 
-#define NUM_OF_CYCLES 3
-#define NUM_OF_COMPONENTS 4
+struct r600_vertex_element;
+struct r600_pipe_context;
 
 struct r600_bc_alu_src {
        unsigned                        sel;
@@ -34,6 +34,7 @@ struct r600_bc_alu_src {
        unsigned                        neg;
        unsigned                        abs;
        unsigned                        rel;
+       u32                             *value;
 };
 
 struct r600_bc_alu_dst {
@@ -46,19 +47,15 @@ struct r600_bc_alu_dst {
 
 struct r600_bc_alu {
        struct list_head                list;
-       struct list_head                bs_list; /* bank swizzle list */
        struct r600_bc_alu_src          src[3];
        struct r600_bc_alu_dst          dst;
        unsigned                        inst;
        unsigned                        last;
        unsigned                        is_op3;
        unsigned                        predicate;
-       unsigned                        nliteral;
-       unsigned                        literal_added;
        unsigned                        bank_swizzle;
        unsigned                        bank_swizzle_force;
-       u32                             value[4];
-       int                             hw_gpr[NUM_OF_CYCLES][NUM_OF_COMPONENTS];
+       unsigned                        omod;
 };
 
 struct r600_bc_tex {
@@ -119,9 +116,16 @@ struct r600_bc_output {
        unsigned                        swizzle_y;
        unsigned                        swizzle_z;
        unsigned                        swizzle_w;
+       unsigned                        burst_count;
        unsigned                        barrier;
 };
 
+struct r600_bc_kcache {
+       unsigned                        bank;
+       unsigned                        mode;
+       unsigned                        addr;
+};
+
 struct r600_bc_cf {
        struct list_head                list;
        unsigned                        inst;
@@ -131,18 +135,15 @@ struct r600_bc_cf {
        unsigned                        cond;
        unsigned                        pop_count;
        unsigned                        cf_addr; /* control flow addr */
-       unsigned                        kcache0_mode;
-       unsigned                        kcache1_mode;
-       unsigned                        kcache0_addr;
-       unsigned                        kcache1_addr;
-       unsigned                        kcache0_bank;
-       unsigned                        kcache1_bank;
+       struct r600_bc_kcache           kcache[2];
        unsigned                        r6xx_uses_waterfall;
        struct list_head                alu;
        struct list_head                tex;
        struct list_head                vtx;
        struct r600_bc_output           output;
        struct r600_bc_alu              *curr_bs_head;
+       struct r600_bc_alu              *prev_bs_head;
+       struct r600_bc_alu              *prev2_bs_head;
 };
 
 #define FC_NONE                                0
@@ -188,18 +189,24 @@ struct r600_bc {
 
 /* eg_asm.c */
 int eg_bc_cf_build(struct r600_bc *bc, struct r600_bc_cf *cf);
+void eg_cf_vtx(struct r600_vertex_element *ve, u32 *bytecode, unsigned count);
 
 /* r600_asm.c */
 int r600_bc_init(struct r600_bc *bc, enum radeon_family family);
 void r600_bc_clear(struct r600_bc *bc);
 int r600_bc_add_alu(struct r600_bc *bc, const struct r600_bc_alu *alu);
-int r600_bc_add_literal(struct r600_bc *bc, const u32 *value);
 int r600_bc_add_vtx(struct r600_bc *bc, const struct r600_bc_vtx *vtx);
 int r600_bc_add_tex(struct r600_bc *bc, const struct r600_bc_tex *tex);
 int r600_bc_add_output(struct r600_bc *bc, const struct r600_bc_output *output);
 int r600_bc_build(struct r600_bc *bc);
 int r600_bc_add_cfinst(struct r600_bc *bc, int inst);
 int r600_bc_add_alu_type(struct r600_bc *bc, const struct r600_bc_alu *alu, int type);
+void r600_bc_special_constants(u32 value, unsigned *sel, unsigned *neg);
+void r600_bc_dump(struct r600_bc *bc);
+void r600_cf_vtx(struct r600_vertex_element *ve, u32 *bytecode, unsigned count);
+void r600_cf_vtx_tc(struct r600_vertex_element *ve, u32 *bytecode, unsigned count);
+
+int r600_vertex_elements_build_fetch_shader(struct r600_pipe_context *rctx, struct r600_vertex_element *ve);
 
 /* r700_asm.c */
 int r700_bc_alu_build(struct r600_bc *bc, struct r600_bc_alu *alu, unsigned id);