r600g : add basic loop support.
[mesa.git] / src / gallium / drivers / r600 / r600_shader.h
index 45ab88b58f562f62418adb3736e1c8e41c1443eb..2ee7780ead0a6e611d10aeb6556c9ec8c5f05afd 100644 (file)
 #ifndef R600_SHADER_H
 #define R600_SHADER_H
 
-#include "r600_compiler.h"
-#include "radeon.h"
-
-struct r600_state;
-
-struct r600_shader_vfetch {
-       struct r600_shader_vfetch       *next;
-       struct r600_shader_vfetch       *prev;
-       unsigned                        cf_addr;
-       unsigned                        sel[4];
-       unsigned                        chan[4];
-       unsigned                        dsel[4];
-};
-
-struct r600_shader_operand {
-       struct c_vector                 *vector;
-       unsigned                        sel;
-       unsigned                        chan;
-       unsigned                        neg;
-       unsigned                        abs;
-};
-
-struct r600_shader_inst {
-       unsigned                        is_op3;
-       unsigned                        opcode;
-       unsigned                        inst;
-       struct r600_shader_operand      src[3];
-       struct r600_shader_operand      dst;
-       unsigned                        last;
-};
-
-struct r600_shader_alu {
-       struct r600_shader_alu          *next;
-       struct r600_shader_alu          *prev;
-       unsigned                        nalu;
-       unsigned                        nliteral;
-       struct r600_shader_inst         alu[5];
-       u32                             literal[4];
-};
-
-struct r600_shader_node {
-       struct r600_shader_node         *next;
-       struct r600_shader_node         *prev;
-       unsigned                        cf_id;          /**< cf index (in dw) in byte code */
-       unsigned                        cf_addr;        /**< instructions index (in dw) in byte code */
-       unsigned                        nslot;          /**< number of slot (2 dw) needed by this node */
-       unsigned                        nfetch;
-       struct c_node                   *node;          /**< compiler node from which this node originate */
-       struct r600_shader_vfetch       vfetch;         /**< list of vfetch instructions */
-       struct r600_shader_alu          alu;            /**< list of alu instructions */
-};
+#include "r600_asm.h"
 
 struct r600_shader_io {
-       unsigned        name;
-       unsigned        gpr;
-       int             sid;
+       unsigned                name;
+       unsigned                gpr;
+       unsigned                done;
+       int                     sid;
+       unsigned                interpolate;
 };
 
 struct r600_shader {
-       unsigned                        stack_size;             /**< stack size needed by this shader */
-       unsigned                        ngpr;                   /**< number of GPR needed by this shader */
-       unsigned                        nconstant;              /**< number of constants used by this shader */
-       unsigned                        nresource;              /**< number of resources used by this shader */
-       unsigned                        noutput;
-       unsigned                        ninput;
-       unsigned                        nvector;
-       unsigned                        ncf;                    /**< total number of cf clauses */
-       unsigned                        nslot;                  /**< total number of slots (2 dw) */
-       unsigned                        flat_shade;             /**< are we flat shading */
-       struct r600_shader_node         nodes;                  /**< list of node */
-       struct r600_shader_node         *cur_node;              /**< current node (used during nodes list creation) */
-       struct r600_shader_io           input[32];
-       struct r600_shader_io           output[32];
-       /* TODO replace GPR by some better register allocator */
-       struct c_vector                 **gpr;
-       unsigned                        ndw;                    /**< bytes code size in dw */
-       u32                             *bcode;                 /**< bytes code */
-       enum pipe_format                resource_format[160];   /**< format of resource */
-       struct c_shader                 cshader;
+       unsigned                processor_type;
+       struct r600_bc          bc;
+       boolean                 flat_shade;
+       unsigned                ninput;
+       unsigned                noutput;
+       struct r600_shader_io   input[32];
+       struct r600_shader_io   output[32];
+       enum radeon_family      family;
 };
 
-void r600_shader_cleanup(struct r600_shader *rshader);
-int r600_shader_register(struct r600_shader *rshader);
-int r600_shader_node(struct r600_shader *shader);
-void r600_shader_node_place(struct r600_shader *rshader);
-int r600_shader_find_gpr(struct r600_shader *rshader, struct c_vector *v,
-                       unsigned swizzle, unsigned *sel, unsigned *chan);
-int r600_shader_vfetch_bytecode(struct r600_shader *rshader,
-                               struct r600_shader_node *rnode,
-                               struct r600_shader_vfetch *vfetch,
-                               unsigned *cid);
-int r600_shader_update(struct r600_shader *rshader,
-                       enum pipe_format *resource_format);
-int r600_shader_legalize(struct r600_shader *rshader);
-
-int r700_shader_translate(struct r600_shader *rshader);
-
-int c_shader_from_tgsi(struct c_shader *shader, unsigned type,
-                       const struct tgsi_token *tokens);
-int r600_shader_register(struct r600_shader *rshader);
-int r600_shader_translate_rec(struct r600_shader *rshader, struct c_node *node);
-int r700_shader_translate(struct r600_shader *rshader);
-int r600_shader_insert_fetch(struct c_shader *shader);
-
 #endif