Removing some regs that are wrong and adding some comments to r300_reg.h .
authorAapo Tahkola <aet@rasterburn.org>
Thu, 10 Feb 2005 10:45:54 +0000 (10:45 +0000)
committerAapo Tahkola <aet@rasterburn.org>
Thu, 10 Feb 2005 10:45:54 +0000 (10:45 +0000)
src/mesa/drivers/dri/r300/r300_cmdbuf.c
src/mesa/drivers/dri/r300/r300_context.h
src/mesa/drivers/dri/r300/r300_reg.h
src/mesa/drivers/dri/r300/r300_render.c
src/mesa/drivers/dri/r300/r300_state.c

index ae0f9fb6b4e5f22f7f52b54628d684b84226dabd..99c1f23dfdd16f4fedb3926901d9b4c0a59141fb 100644 (file)
@@ -371,10 +371,6 @@ void r300InitCmdBuf(r300ContextPtr r300)
                r300->hw.rr.cmd[R300_RR_CMD_0] = cmducs(R300_RS_ROUTE_0, 1);
        ALLOC_STATE( unk43A4, always, 3, "unk43A4", 0 );
                r300->hw.unk43A4.cmd[0] = cmducs(0x43A4, 2);
-#ifdef EXP_C           
-       ALLOC_STATE( lsp, always, 3, "lsp", 0 );
-               r300->hw.lsp.cmd[0] = cmducs(R300_RE_LINE_STIPPLE_PTRN1, 2);
-#endif         
        ALLOC_STATE( unk43E8, always, 2, "unk43E8", 0 );
                r300->hw.unk43E8.cmd[0] = cmducs(0x43E8, 1);
        ALLOC_STATE( fp, always, R300_FP_CMDSIZE, "fp", 0 );
@@ -505,9 +501,6 @@ void r300InitCmdBuf(r300ContextPtr r300)
        insert_at_tail(&r300->hw.atomlist, &r300->hw.ri);
        insert_at_tail(&r300->hw.atomlist, &r300->hw.rr);
        insert_at_tail(&r300->hw.atomlist, &r300->hw.unk43A4);
-#ifdef EXP_C           
-       insert_at_tail(&r300->hw.atomlist, &r300->hw.lsp);
-#endif 
        insert_at_tail(&r300->hw.atomlist, &r300->hw.unk43E8);
        insert_at_tail(&r300->hw.atomlist, &r300->hw.fp);
        insert_at_tail(&r300->hw.atomlist, &r300->hw.fpt);
index 6b027f380b4f64316649606d2a2b1f7b10e9288f..bd15d76a5b430da26227ecc0a2585588933c1471 100644 (file)
@@ -420,9 +420,6 @@ struct r300_hw_state {
        struct r300_state_atom ri;      /* rs interpolators (4310) */
        struct r300_state_atom rr;      /* rs route (4330) */
        struct r300_state_atom unk43A4; /* (43A4) */
-#ifdef EXP_C
-       struct r300_state_atom lsp;     /* line stipple pattern */
-#endif 
        struct r300_state_atom unk43E8; /* (43E8) */
        struct r300_state_atom fp;      /* fragment program cntl + nodes (4600) */
        struct r300_state_atom fpt;     /* texi - (4620) */
index 1f90da2a7ac7b4e41b2f2676b738adae31c32414..1d4cd1fcbc4ee624f98cdd76c85c802c399a986c 100644 (file)
@@ -16,12 +16,6 @@ I am fairly certain that they are correct unless stated otherwise in comments.
 #define R300_SE_VPORT_ZSCALE                0x1DA8
 #define R300_SE_VPORT_ZOFFSET               0x1DAC
 
-/*
-VB mode colorbuffer clears are broken with these too so these would
-probably work also. --aet
-*/
-#define R300_SE_ZBIAS_FACTOR                0x1DB0
-#define R300_SE_ZBIAS_CONSTANT              0x1DB4
 
 /* This register is written directly and also starts data section in many 3d CP_PACKET3's */
 #define R300_VAP_VF_CNTL       0x2084
@@ -238,7 +232,15 @@ probably work also. --aet
 // experiments so far have shown that both *must* point to an instruction
 // inside the vertex program, otherwise the GPU locks up.
 // fglrx usually sets CNTL_3_UNKNOWN to the end of the program and
-// CNTL_1_UNKNOWN somewhere in the middle, but the criteria are not clear. */
+// CNTL_1_UNKNOWN somewhere in the middle, but the criteria are not clear. 
+
+// Some tests would indicate that CNTL_3_UNKNOWN is set to program len - 
+// number of "temp to result instrutions". I havent yet seen a case where 
+// "temp to result instrutions" have not been moved at the end of program.
+// However tests have shown that fgls vertex program implementation is
+// not perfect and im having hard-time trusting
+// it at the time being. -aet
+*/
 #define R300_VAP_PVS_CNTL_1                 0x22D0
 #       define R300_PVS_CNTL_1_PROGRAM_START_SHIFT   0
 #       define R300_PVS_CNTL_1_UNKNOWN_SHIFT         10
@@ -427,7 +429,7 @@ probably work also. --aet
 #       define R300_POINTSIZE_MAX             (R300_POINTSIZE_Y_MASK / 6)
 
 /* The line width is given in multiples of 6.
-   00020018 == 4.0, 0002001e == 5.0  */
+   R300_LINE_CNT_UNK1 must be on to obtain expected results. */
 #define R300_RE_LINE_CNT                      0x4234
 #       define R300_LINESIZE_SHIFT            0
 #       define R300_LINESIZE_MASK             (0xFFFF << 0) /* GUESS */
@@ -439,10 +441,11 @@ probably work also. --aet
 
 #define R300_RE_POLYGON_MODE                  0x4288
 
-#define R300_RE_LINE_STIPPLE_PTRN1            0x43E0
-#define R300_RE_LINE_STIPPLE_PTRN2            0x43E4
-
-
+/* Not sure why there are duplicate of factor and constant values. 
+   My best guess so far is that there are seperate zbiases for test and write. 
+   Ordering might be wrong.
+   Some of the tests indicate that fgl has a fallback implementation of zbias
+   via pixel shaders. */
 #define R300_RE_ZBIAS_T_FACTOR                0x42A4
 #define R300_RE_ZBIAS_T_CONSTANT              0x42A8
 #define R300_RE_ZBIAS_W_FACTOR                0x42AC
@@ -452,6 +455,9 @@ probably work also. --aet
    perform depth test (see --vb-triangles in r300_demo)
    Don't know about other chips. - Vladimir
    This is set to 3 when GL_POLYGON_OFFSET_FILL is on.
+   My guess is that there are two bits for each zbias primitive (FILL, LINE, POINT).
+   One to enable depth test and one for depth write.
+   Yet this doesnt explain why depth writes work ...
     */
 #define R300_RE_OCCLUSION_CNTL             0x42B4
 #      define R300_OCCLUSION_ON                (1<<1)
@@ -1192,12 +1198,14 @@ probably work also. --aet
 #define R300_VPI_OUT_OP_MIN                     (8 << 0)
 #define R300_VPI_OUT_OP_SGE                     (9 << 0)
 #define R300_VPI_OUT_OP_SLT                     (10 << 0)
+#define R300_VPI_OUT_OP_UNK1                    (12 << 0) /* Used in GL_POINT_DISTANCE_ATTENUATION_ARB */
 #define R300_VPI_OUT_OP_EXP                     (65 << 0)
 #define R300_VPI_OUT_OP_LOG                     (66 << 0)
 #define R300_VPI_OUT_OP_LIT                     (68 << 0)
 #define R300_VPI_OUT_OP_POW                     (69 << 0)
 #define R300_VPI_OUT_OP_RCP                     (70 << 0)
 #define R300_VPI_OUT_OP_RSQ                     (72 << 0)
+#define R300_VPI_OUT_OP_UNK2                    (73 << 0) /* Used in GL_POINT_DISTANCE_ATTENUATION_ARB */
 #define R300_VPI_OUT_OP_EX2                     (75 << 0)
 #define R300_VPI_OUT_OP_LG2                     (76 << 0)
 #define R300_VPI_OUT_OP_MAD_2                   (128 << 0)
index 56c8a5af4df8bd2a7a25b79b5c511baac00fc529..342c529d42eca4a813458a2d57a2cf67ddbe202f 100644 (file)
@@ -690,7 +690,7 @@ static GLboolean r300_run_render(GLcontext *ctx,
        
    #if 1
        
-       #if 1
+       #if 0
         return r300_run_immediate_render(ctx, stage);
        #else 
         return r300_run_vb_render(ctx, stage);
index 6952bf2b0b243f2e71ccdcedeb5ca364a610ca3a..bbbf674ee1a6142cd88dde0dfbcfdd0d4d103681 100644 (file)
@@ -1935,11 +1935,6 @@ void r300ResetHwState(r300ContextPtr r300)
        r300->hw.unk43A4.cmd[1] = 0x0000001C;
        r300->hw.unk43A4.cmd[2] = 0x2DA49525;
        
-#ifdef EXP_C
-       r300->hw.lsp.cmd[1] = rand()%(~0); //0x00b405a0;
-       r300->hw.lsp.cmd[2] = foobar++;// 0x00efe81f;
-#endif
-               
        r300->hw.unk43E8.cmd[1] = 0x00FFFFFF;
 
        #if 0