more r500 vs r300 kickin
[mesa.git] / src / mesa / drivers / dri / r300 / r300_context.h
index 6615bc79fb3edc10153d12a37665dea909c12a0d..4f8b7591c20972495e7b52319cefb7a1bd8b22cd 100644 (file)
@@ -330,6 +330,8 @@ struct r300_state_atom {
 #define R300_RI_INTERP_7       8
 #define R300_RI_CMDSIZE                9
 
+#define R500_RI_CMDSIZE               17
+
 #define R300_RR_CMD_0          0       /* rr is variable size (at least 1) */
 #define R300_RR_ROUTE_0                1
 #define R300_RR_ROUTE_1                2
@@ -418,6 +420,13 @@ struct r300_state_atom {
 #define R300_VPP_PARAM_0       1
 #define R300_VPP_CMDSIZE       1025    /* 256 4-component parameters */
 
+#define R300_VPUCP_CMD_0               0
+#define R300_VPUCP_X            1
+#define R300_VPUCP_Y            2
+#define R300_VPUCP_Z            3
+#define R300_VPUCP_W            4
+#define R300_VPUCP_CMDSIZE     5       /* 256 4-component parameters */
+
 #define R300_VPS_CMD_0         0
 #define R300_VPS_ZERO_0                1
 #define R300_VPS_ZERO_1                2
@@ -446,23 +455,23 @@ struct r300_hw_state {
        struct r300_state_atom vap_cntl;
        struct r300_state_atom vof;     /* VAP output format register 0x2090 */
        struct r300_state_atom vte;     /* (20B0) */
-       struct r300_state_atom unk2134; /* (2134) */
+       struct r300_state_atom vap_vf_max_vtx_indx;     /* Maximum Vertex Indx Clamp (2134) */
        struct r300_state_atom vap_cntl_status;
        struct r300_state_atom vir[2];  /* vap input route (2150/21E0) */
        struct r300_state_atom vic;     /* vap input control (2180) */
-       struct r300_state_atom unk21DC; /* (21DC) */
-       struct r300_state_atom unk221C; /* (221C) */
+       struct r300_state_atom vap_psc_sgn_norm_cntl; /* Programmable Stream Control Signed Normalize Control (21DC) */
+       struct r300_state_atom vap_clip_cntl;
        struct r300_state_atom vap_clip;
-       struct r300_state_atom unk2288; /* (2288) */
+       struct r300_state_atom vap_pvs_vtx_timeout_reg; /* Vertex timeout register (2288) */
        struct r300_state_atom pvs;     /* pvs_cntl (22D0) */
        struct r300_state_atom gb_enable;       /* (4008) */
        struct r300_state_atom gb_misc; /* Multisampling position shifts ? (4010) */
-       struct r300_state_atom unk4200; /* (4200) */
-       struct r300_state_atom unk4214; /* (4214) */
+       struct r300_state_atom ga_point_s0;     /* S Texture Coordinate of Vertex 0 for Point texture stuffing (LLC) (4200) */
+       struct r300_state_atom ga_triangle_stipple;     /* (4214) */
        struct r300_state_atom ps;      /* pointsize (421C) */
-       struct r300_state_atom unk4230; /* (4230) */
+       struct r300_state_atom ga_point_minmax; /* (4230) */
        struct r300_state_atom lcntl;   /* line control */
-       struct r300_state_atom unk4260; /* (4260) */
+       struct r300_state_atom ga_line_stipple; /* (4260) */
        struct r300_state_atom shade;
        struct r300_state_atom polygon_mode;
        struct r300_state_atom fogp;    /* fog parameters (4294) */
@@ -471,40 +480,42 @@ struct r300_hw_state {
        struct r300_state_atom zbs;     /* zbias (42A4) */
        struct r300_state_atom occlusion_cntl;
        struct r300_state_atom cul;     /* cull cntl (42B8) */
-       struct r300_state_atom unk42C0; /* (42C0) */
+       struct r300_state_atom su_depth_scale;  /* (42C0) */
        struct r300_state_atom rc;      /* rs control (4300) */
        struct r300_state_atom ri;      /* rs interpolators (4310) */
        struct r300_state_atom rr;      /* rs route (4330) */
-       struct r300_state_atom unk43A4; /* (43A4) */
-       struct r300_state_atom unk43E8; /* (43E8) */
+       struct r300_state_atom sc_hyperz;       /* (43A4) */
+       struct r300_state_atom sc_screendoor;   /* (43E8) */
        struct r300_state_atom fp;      /* fragment program cntl + nodes (4600) */
        struct r300_state_atom fpt;     /* texi - (4620) */
-       struct r300_state_atom unk46A4; /* (46A4) */
+       struct r300_state_atom us_out_fmt;      /* (46A4) */
+       struct r300_state_atom r500fp;  /* r500 fp instructions */
        struct r300_state_atom fpi[4];  /* fp instructions (46C0/47C0/48C0/49C0) */
        struct r300_state_atom fogs;    /* fog state (4BC0) */
        struct r300_state_atom fogc;    /* fog color (4BC8) */
        struct r300_state_atom at;      /* alpha test (4BD4) */
-       struct r300_state_atom unk4BD8; /* (4BD8) */
+       struct r300_state_atom fg_depth_src;    /* (4BD8) */
        struct r300_state_atom fpp;     /* 0x4C00 and following */
-       struct r300_state_atom unk4E00; /* (4E00) */
+       struct r300_state_atom rb3d_cctl;       /* (4E00) */
        struct r300_state_atom bld;     /* blending (4E04) */
        struct r300_state_atom cmk;     /* colormask (4E0C) */
        struct r300_state_atom blend_color;     /* constant blend color */
        struct r300_state_atom cb;      /* colorbuffer (4E28) */
-       struct r300_state_atom unk4E50; /* (4E50) */
-       struct r300_state_atom unk4E88; /* (4E88) */
-       struct r300_state_atom unk4EA0; /* (4E88) I saw it only written on RV350 hardware..  */
+       struct r300_state_atom rb3d_dither_ctl; /* (4E50) */
+       struct r300_state_atom rb3d_aaresolve_ctl;      /* (4E88) */
+       struct r300_state_atom rb3d_discard_src_pixel_lte_threshold;    /* (4E88) I saw it only written on RV350 hardware..  */
        struct r300_state_atom zs;      /* zstencil control (4F00) */
        struct r300_state_atom zstencil_format;
        struct r300_state_atom zb;      /* z buffer (4F20) */
-       struct r300_state_atom unk4F28; /* (4F28) */
+       struct r300_state_atom zb_depthclearvalue;      /* (4F28) */
        struct r300_state_atom unk4F30; /* (4F30) */
-       struct r300_state_atom unk4F44; /* (4F44) */
-       struct r300_state_atom unk4F54; /* (4F54) */
+       struct r300_state_atom zb_hiz_offset;   /* (4F44) */
+       struct r300_state_atom zb_hiz_pitch;    /* (4F54) */
 
        struct r300_state_atom vpi;     /* vp instructions */
        struct r300_state_atom vpp;     /* vp parameters */
        struct r300_state_atom vps;     /* vertex point size (?) */
+       struct r300_state_atom vpucp[6];        /* vp user clip plane - 6 */
        /* 8 texture units */
        /* the state is grouped by function and not by
           texture unit. This makes single unit updates
@@ -568,19 +579,10 @@ struct r300_vertex_shader_fragment {
        union {
                GLuint d[VSF_MAX_FRAGMENT_LENGTH];
                float f[VSF_MAX_FRAGMENT_LENGTH];
-               VERTEX_SHADER_INSTRUCTION i[VSF_MAX_FRAGMENT_LENGTH / 4];
+               GLuint i[VSF_MAX_FRAGMENT_LENGTH];
        } body;
 };
 
-#define VSF_DEST_PROGRAM       0x0
-#define VSF_DEST_MATRIX0       0x200
-#define VSF_DEST_MATRIX1       0x204
-#define VSF_DEST_MATRIX2       0x208
-#define VSF_DEST_VECTOR0       0x20c
-#define VSF_DEST_VECTOR1       0x20d
-#define VSF_DEST_UNKNOWN1      0x400
-#define VSF_DEST_UNKNOWN2      0x406
-
 struct r300_vertex_shader_state {
        struct r300_vertex_shader_fragment program;
 };
@@ -605,6 +607,7 @@ extern int hw_tcl_on;
 struct r300_vertex_program_key {
        GLuint InputsRead;
        GLuint OutputsWritten;
+       GLuint OutputsAdded;
 };
 
 struct r300_vertex_program {