OSDN Git Service

[r300] Further document FG_ALPHA_FUNC (renamed from R300_PP_ALPHA_TEST) and finally...
authorChristoph Brill <egore911@egore911.de>
Mon, 25 Feb 2008 20:35:13 +0000 (21:35 +0100)
committerChristoph Brill <egore911@egore911.de>
Mon, 25 Feb 2008 20:35:13 +0000 (21:35 +0100)
src/mesa/drivers/dri/r300/r300_cmdbuf.c
src/mesa/drivers/dri/r300/r300_emit.c
src/mesa/drivers/dri/r300/r300_ioctl.c
src/mesa/drivers/dri/r300/r300_reg.h
src/mesa/drivers/dri/r300/r300_state.c

index 951af7f..21ae712 100644 (file)
@@ -402,7 +402,7 @@ void r300InitCmdBuf(r300ContextPtr r300)
        ALLOC_STATE(fogc, always, R300_FOGC_CMDSIZE, 0);
        r300->hw.fogc.cmd[R300_FOGC_CMD_0] = cmdpacket0(R300_FOG_COLOR_R, 3);
        ALLOC_STATE(at, always, R300_AT_CMDSIZE, 0);
-       r300->hw.at.cmd[R300_AT_CMD_0] = cmdpacket0(R300_PP_ALPHA_TEST, 2);
+       r300->hw.at.cmd[R300_AT_CMD_0] = cmdpacket0(FG_ALPHA_FUNC, 2);
        ALLOC_STATE(fg_depth_src, always, 2, 0);
        r300->hw.fg_depth_src.cmd[0] = cmdpacket0(R300_FG_DEPTH_SRC, R300_FG_DEPTH_SRC_SHADER);
        ALLOC_STATE(fpp, variable, R300_FPP_CMDSIZE, 0);
index 761b618..e4600f5 100644 (file)
@@ -542,7 +542,7 @@ void r300EmitCacheFlush(r300ContextPtr rmesa)
        drm_radeon_cmd_header_t *cmd = NULL;
 
        reg_start(R300_RB3D_DSTCACHE_CTLSTAT, 0);
-       e32(R300_RB3D_DSTCACHE_UNKNOWN_0A);
+       e32(RB3D_DSTCACHE_CTLSTAT_DC_FREE_FREE_3D_TAGS | RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_FLUSH_DIRTY_3D);
 
        reg_start(ZB_ZCACHE_CTLSTAT, 0);
        e32(ZB_ZCACHE_CTLSTAT_ZC_FREE_FREE);
index 1cd74e3..d9eaedd 100644 (file)
@@ -252,7 +252,7 @@ static void r300EmitClearState(GLcontext * ctx)
        efloat(0.0);
 
        R300_STATECHANGE(r300, at);
-       reg_start(R300_PP_ALPHA_TEST, 0);
+       reg_start(FG_ALPHA_FUNC, 0);
        e32(0x0);
 
        R300_STATECHANGE(r300, bld);
index 0e06886..182d7fe 100644 (file)
@@ -1473,18 +1473,39 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 /* Constant Factor for Fog Blending */
 #define R300_FG_FOG_FACTOR                  0x4bc4
 
-#define R300_PP_ALPHA_TEST                  0x4BD4
+/* Fog: Alpha function */
+#define FG_ALPHA_FUNC                            0x4bd4
 #       define R300_REF_ALPHA_MASK               0x000000ff
-#       define R300_ALPHA_TEST_FAIL              (0 << 8)
-#       define R300_ALPHA_TEST_LESS              (1 << 8)
-#       define R300_ALPHA_TEST_LEQUAL            (3 << 8)
-#       define R300_ALPHA_TEST_EQUAL             (2 << 8)
-#       define R300_ALPHA_TEST_GEQUAL            (6 << 8)
-#       define R300_ALPHA_TEST_GREATER           (4 << 8)
-#       define R300_ALPHA_TEST_NEQUAL            (5 << 8)
-#       define R300_ALPHA_TEST_PASS              (7 << 8)
-#       define R300_ALPHA_TEST_OP_MASK           (7 << 8)
-#       define R300_ALPHA_TEST_ENABLE            (1 << 11)
+#       define FG_ALPHA_FUNC_NEVER                     (0 << 8)
+#       define FG_ALPHA_FUNC_LESS                      (1 << 8)
+#       define FG_ALPHA_FUNC_EQUAL                     (2 << 8)
+#       define FG_ALPHA_FUNC_LE                        (3 << 8)
+#       define FG_ALPHA_FUNC_GREATER                   (4 << 8)
+#       define FG_ALPHA_FUNC_NOTEQUAL                  (5 << 8)
+#       define FG_ALPHA_FUNC_GE                        (6 << 8)
+#       define FG_ALPHA_FUNC_ALWAYS                    (7 << 8)
+#       define R300_ALPHA_TEST_OP_MASK                 (7 << 8)
+#       define FG_ALPHA_FUNC_DISABLE                   (0 << 11)
+#       define FG_ALPHA_FUNC_ENABLE                    (1 << 11)
+#       define FG_ALPHA_FUNC_10BIT                     (0 << 12)
+#       define FG_ALPHA_FUNC_8BIT                      (1 << 12)
+/* gap in AMD spec */
+#       define FG_ALPHA_FUNC_MASK_DISABLE              (0 << 16)
+#       define FG_ALPHA_FUNC_MASK_ENABLE               (1 << 16)
+#       define FG_ALPHA_FUNC_CFG_2_OF_4                (0 << 17)
+#       define FG_ALPHA_FUNC_CFG_3_OF_6                (1 << 17)
+/* gap in AMD spec */
+#       define FG_ALPHA_FUNC_DITH_DISABLE              (0 << 20)
+#       define FG_ALPHA_FUNC_DITH_ENABLE               (1 << 20)
+/* gap in AMD spec */
+#       define FG_ALPHA_FUNC_OFFSET_DISABLE            (0 << 24) /* Not supported in R520. Default R300 and RV350 behaviour. */
+#       define FG_ALPHA_FUNC_OFFSET_ENABLE             (1 << 24) /* Not supported in R520 */
+#       define FG_ALPHA_FUNC_DISC_ZERO_MASK_DISABLE    (0 << 25)
+#       define FG_ALPHA_FUNC_DISC_ZERO_MASK_ENABLE     (1 << 25)
+/* gap in AMD spec */
+#       define FG_ALPHA_FUNC_FP16_DISABLE              (0 << 28)
+#       define FG_ALPHA_FUNC_FP16_ENABLE               (1 << 28)
+/* gap in AMD spec */
 
 /* Where does the depth come from? */
 #define R300_FG_DEPTH_SRC                  0x4bd8
@@ -1572,7 +1593,14 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_BLEND_MASK                       (63)
 #       define R300_SRC_BLEND_SHIFT                  (16)
 #       define R300_DST_BLEND_SHIFT                  (24)
+
+/* Constant color used by the blender. Pipelined through the blender.
+ * Note: For R520, this field is ignored, use RB3D_CONSTANT_COLOR_GB__BLUE,
+ * RB3D_CONSTANT_COLOR_GB__GREEN, etc. instead.
+ */
 #define R300_RB3D_BLEND_COLOR               0x4E10
+
+
 /* 3D Color Channel Mask. If all the channels used in the current color format
  * are disabled, then the cb will discard all the incoming quads. Pipelined
  * through the blender.
@@ -1595,6 +1623,12 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #      define RB3D_COLOR_CHANNEL_MASK_RED_MASK3   (1 << 14)
 #      define RB3D_COLOR_CHANNEL_MASK_ALPHA_MASK3 (1 << 15)
 
+/* Clear color that is used when the color mask is set to 00. Unpipelined.
+ * Program this register with a 32-bit value in ARGB8888 or ARGB2101010
+ * formats, ignoring the fields.
+ */
+#define RB3D_COLOR_CLEAR_VALUE                   0x4e14
+
 /* gap */
 
 /* Color Compare Color. Stalls the 2d/3d datapath until it is idle. */
@@ -1654,12 +1688,27 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 /* gap */
 
-/* Guess by Vladimir.
+/* Destination Color Buffer Cache Control/Status. If the cb is in e2 mode, then
+ * a flush or free will not occur upon a write to this register, but a sync
+ * will be immediately sent if one is requested. If both DC_FLUSH and DC_FREE
+ * are zero but DC_FINISH is one, then a sync will be sent immediately -- the
+ * cb will not wait for all the previous operations to complete before sending
+ * the sync. Unpipelined except when DC_FINISH and DC_FREE are both set to
+ * zero.
+ *
  * Set to 0A before 3D operations, set to 02 afterwards.
  */
-#define R300_RB3D_DSTCACHE_CTLSTAT          0x4E4C
-#       define R300_RB3D_DSTCACHE_UNKNOWN_02             0x00000002
-#       define R300_RB3D_DSTCACHE_UNKNOWN_0A             0x0000000A
+#define R300_RB3D_DSTCACHE_CTLSTAT               0x4e4c
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_NO_EFFECT         (0 << 0)
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_NO_EFFECT_1       (1 << 0)
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_FLUSH_DIRTY_3D    (2 << 0)
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FLUSH_FLUSH_DIRTY_3D_1  (3 << 0)
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FREE_NO_EFFECT          (0 << 2)
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FREE_NO_EFFECT_1        (1 << 2)
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FREE_FREE_3D_TAGS       (2 << 2)
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FREE_FREE_3D_TAGS_1     (3 << 2)
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FINISH_NO_SIGNAL        (0 << 4)
+#      define RB3D_DSTCACHE_CTLSTAT_DC_FINISH_SIGNAL           (1 << 4)
 
 #define R300_RB3D_DITHER_CTL 0x4E50
 #      define R300_RB3D_DITHER_CTL_DITHER_MODE_TRUNCATE         (0 << 0)
@@ -1708,9 +1757,35 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #      define RB3D_DISCARD_SRC_PIXEL_THRESHOLD_ALPHA_SHIFT 24
 #      define RB3D_DISCARD_SRC_PIXEL_THRESHOLD_ALPHA_MASK 0xff000000
 
+/* 3D ROP Control. Stalls the 2d/3d datapath until it is idle. */
+#define RB3D_ROPCNTL                             0x4e18
+/* TODO: fill in content here */
+
 /* Color Compare Flip. Stalls the 2d/3d datapath until it is idle. */
 #define RB3D_CLRCMP_FLIPE                        0x4e1c
 
+/* Sets the fifo sizes */
+#define RB3D_FIFO_SIZE                           0x4ef4
+#      define RB3D_FIFO_SIZE_OP_FIFO_SIZE_FULL   (0 << 0)
+#      define RB3D_FIFO_SIZE_OP_FIFO_SIZE_HALF   (1 << 0)
+#      define RB3D_FIFO_SIZE_OP_FIFO_SIZE_QUATER (2 << 0)
+#      define RB3D_FIFO_SIZE_OP_FIFO_SIZE_EIGTHS (3 << 0)
+/* gap in AMD spec */
+
+/* Constant color used by the blender. Pipelined through the blender. */
+#define RB3D_CONSTANT_COLOR_AR                   0x4ef8
+#      define RB3D_CONSTANT_COLOR_AR_RED_MASK    0x0000ffff
+#      define RB3D_CONSTANT_COLOR_AR_RED_SHIFT   0
+#      define RB3D_CONSTANT_COLOR_AR_ALPHA_MASK  0xffff0000
+#      define RB3D_CONSTANT_COLOR_AR_ALPHA_SHIFT 16
+
+/* Constant color used by the blender. Pipelined through the blender. */
+#define RB3D_CONSTANT_COLOR_GB                   0x4efc
+#      define RB3D_CONSTANT_COLOR_AR_BLUE_MASK   0x0000ffff
+#      define RB3D_CONSTANT_COLOR_AR_BLUE_SHIFT  0
+#      define RB3D_CONSTANT_COLOR_AR_GREEN_MASK  0xffff0000
+#      define RB3D_CONSTANT_COLOR_AR_GREEN_SHIFT 16
+
 /* gap */
 /* There seems to be no "write only" setting, so use Z-test = ALWAYS
  * for this.
index bdb8106..970561c 100644 (file)
@@ -400,34 +400,34 @@ static void r300SetAlphaState(GLcontext * ctx)
 
        switch (ctx->Color.AlphaFunc) {
        case GL_NEVER:
-               pp_misc |= R300_ALPHA_TEST_FAIL;
+               pp_misc |= FG_ALPHA_FUNC_NEVER;
                break;
        case GL_LESS:
-               pp_misc |= R300_ALPHA_TEST_LESS;
+               pp_misc |= FG_ALPHA_FUNC_LESS;
                break;
        case GL_EQUAL:
-               pp_misc |= R300_ALPHA_TEST_EQUAL;
+               pp_misc |= FG_ALPHA_FUNC_EQUAL;
                break;
        case GL_LEQUAL:
-               pp_misc |= R300_ALPHA_TEST_LEQUAL;
+               pp_misc |= FG_ALPHA_FUNC_LE;
                break;
        case GL_GREATER:
-               pp_misc |= R300_ALPHA_TEST_GREATER;
+               pp_misc |= FG_ALPHA_FUNC_GREATER;
                break;
        case GL_NOTEQUAL:
-               pp_misc |= R300_ALPHA_TEST_NEQUAL;
+               pp_misc |= FG_ALPHA_FUNC_NOTEQUAL;
                break;
        case GL_GEQUAL:
-               pp_misc |= R300_ALPHA_TEST_GEQUAL;
+               pp_misc |= FG_ALPHA_FUNC_GE;
                break;
        case GL_ALWAYS:
-               /*pp_misc |= R300_ALPHA_TEST_PASS; */
+               /*pp_misc |= FG_ALPHA_FUNC_ALWAYS; */
                really_enabled = GL_FALSE;
                break;
        }
 
        if (really_enabled) {
-               pp_misc |= R300_ALPHA_TEST_ENABLE;
+               pp_misc |= FG_ALPHA_FUNC_ENABLE;
                pp_misc |= (refByte & R300_REF_ALPHA_MASK);
        } else {
                pp_misc = 0x0;