Merge branch 'mesa_7_7_branch'
[mesa.git] / src / mesa / drivers / dri / r300 / r300_context.h
index 5c575441d7b381376744828e9948ad25106a5de3..54a92a2e44727b7f14b839fa1d639a51a2a257d7 100644 (file)
@@ -51,22 +51,6 @@ typedef struct r300_context r300ContextRec;
 typedef struct r300_context *r300ContextPtr;
 
 
-/* From http://gcc. gnu.org/onlinedocs/gcc-3.2.3/gcc/Variadic-Macros.html .
-   I suppose we could inline this and use macro to fetch out __LINE__ and stuff in case we run into trouble
-   with other compilers ... GLUE!
-*/
-#define WARN_ONCE(a, ...)      { \
-       static int warn##__LINE__=1; \
-       if(warn##__LINE__){ \
-               fprintf(stderr, "*********************************WARN_ONCE*********************************\n"); \
-               fprintf(stderr, "File %s function %s line %d\n", \
-                       __FILE__, __FUNCTION__, __LINE__); \
-               fprintf(stderr,  a, ## __VA_ARGS__);\
-               fprintf(stderr, "***************************************************************************\n"); \
-               warn##__LINE__=0;\
-               } \
-       }
-
 #include "r300_vertprog.h"
 
 
@@ -250,6 +234,10 @@ typedef struct r300_context *r300ContextPtr;
 #define R300_ZS_CNTL_2         3
 #define R300_ZS_CMDSIZE                4
 
+#define R300_ZSB_CMD_0         0
+#define R300_ZSB_CNTL_0                1
+#define R300_ZSB_CMDSIZE       2
+
 #define R300_ZB_CMD_0          0
 #define R300_ZB_OFFSET         1
 #define R300_ZB_PITCH          2
@@ -290,6 +278,12 @@ typedef struct r300_context *r300ContextPtr;
 #define R300_TEX_CMDSIZE       (MAX_TEXTURE_UNITS+1)
 */
 
+#define R300_QUERYOBJ_CMD_0  0
+#define R300_QUERYOBJ_DATA_0 1
+#define R300_QUERYOBJ_CMD_1  2
+#define R300_QUERYOBJ_DATA_1  3
+#define R300_QUERYOBJ_CMDSIZE  4
+
 /**
  * Cache for hardware register state.
  */
@@ -353,6 +347,7 @@ struct r300_hw_state {
        struct radeon_state_atom rb3d_aaresolve_ctl;    /* (4E88) */
        struct radeon_state_atom rb3d_discard_src_pixel_lte_threshold;  /* (4E88) I saw it only written on RV350 hardware..  */
        struct radeon_state_atom zs;    /* zstencil control (4F00) */
+       struct radeon_state_atom zsb;   /* zstencil bf */
        struct radeon_state_atom zstencil_format;
        struct radeon_state_atom zb;    /* z buffer (4F20) */
        struct radeon_state_atom zb_depthclearvalue;    /* (4F28) */
@@ -360,6 +355,7 @@ struct r300_hw_state {
        struct radeon_state_atom zb_hiz_offset; /* (4F44) */
        struct radeon_state_atom zb_hiz_pitch;  /* (4F54) */
 
+       struct radeon_state_atom vap_flush;
        struct radeon_state_atom vpi;   /* vp instructions */
        struct radeon_state_atom vpp;   /* vp parameters */
        struct radeon_state_atom vps;   /* vertex point size (?) */
@@ -380,7 +376,6 @@ struct r300_hw_state {
                struct radeon_state_atom border_color;
        } tex;
        struct radeon_state_atom txe;   /* tex enable (4104) */
-
        radeonTexObj *textures[R300_MAX_TEXTURE_UNITS];
 };
 
@@ -395,11 +390,17 @@ struct r300_hw_state {
 #include "tnl_dd/t_dd_vertex.h"
 #undef TAG
 
+struct r300_vertex_program_key {
+       GLbitfield FpReads;
+       GLuint FogAttr;
+       GLuint WPosAttr;
+};
+
 struct r300_vertex_program {
        struct gl_vertex_program *Base;
        struct r300_vertex_program *next;
 
-       struct r300_vertex_program_external_state key;
+       struct r300_vertex_program_key key;
        struct r300_vertex_program_code code;
 
        GLboolean error;
@@ -422,12 +423,16 @@ struct r300_vertex_program_cont {
 */
 struct r300_fragment_program {
        GLboolean error;
-       struct gl_program *Base;
        struct r300_fragment_program *next;
        struct r300_fragment_program_external_state state;
 
        struct rX00_fragment_program_code code;
        GLbitfield InputsRead;
+
+       /* attribute that we are sending the WPOS in */
+       gl_frag_attrib wpos_attr;
+       /* attribute that we are sending the fog coordinate in */
+       gl_frag_attrib fog_attr;
 };
 
 struct r300_fragment_program_cont {
@@ -468,11 +473,12 @@ struct r300_vertex_buffer {
        struct vertex_attribute {
                /* generic */
                GLubyte element;
-               GLvoid *data;
-               GLboolean free_needed;
                GLuint stride;
                GLuint dwords;
                GLubyte size; /* number of components */
+               GLboolean is_named_bo;
+               struct radeon_bo *bo;
+               GLint bo_offset;
 
                /* hw specific */
                uint32_t data_type:4;
@@ -487,12 +493,14 @@ struct r300_vertex_buffer {
 };
 
 struct r300_index_buffer {
-       GLvoid *ptr;
+       struct radeon_bo *bo;
+       int bo_offset;
+
        GLboolean is_32bit;
-       GLboolean free_needed;
        GLuint count;
 };
 
+
 /**
  * \brief R300 context structure.
  */
@@ -522,10 +530,14 @@ struct r300_context {
        struct r300_swtcl_info swtcl;
        struct r300_vertex_buffer vbuf;
        struct r300_index_buffer ind_buf;
-       GLboolean vap_flush_needed;
 
        uint32_t fallback;
 
+       struct {
+               struct r300_vertex_program_code vp_code;
+               struct rX00_fragment_program_code fp_code;
+       } blit;
+
        DECLARE_RENDERINPUTS(render_inputs_bitset);
 };
 
@@ -542,6 +554,8 @@ extern void r300InitShaderFunctions(r300ContextPtr r300);
 
 extern void r300InitDraw(GLcontext *ctx);
 
+extern void r300_init_texcopy_functions(struct dd_function_table *table);
+
 #define r300PackFloat32 radeonPackFloat32
 #define r300PackFloat24 radeonPackFloat24