Mesa (master): r300g: emit MSPOS regs

Marek Olšák mareko at kemper.freedesktop.org
Mon Apr 26 05:22:51 UTC 2010


Module: Mesa
Branch: master
Commit: 2579fe4044012a552c8be222ffae76b48de13592
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2579fe4044012a552c8be222ffae76b48de13592

Author: Marek Olšák <maraeo at gmail.com>
Date:   Mon Apr 26 06:29:10 2010 +0200

r300g: emit MSPOS regs

---

 src/gallium/drivers/r300/r300_state_invariant.c |   14 ++++++++------
 src/gallium/drivers/r300/r300_texture.c         |    4 ++--
 src/gallium/drivers/r300/r300_winsys.h          |    2 +-
 src/gallium/winsys/radeon/drm/radeon_drm.c      |    4 ++--
 src/gallium/winsys/radeon/drm/radeon_r300.c     |    4 ++--
 src/gallium/winsys/radeon/drm/radeon_winsys.h   |    8 ++++++--
 6 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_state_invariant.c b/src/gallium/drivers/r300/r300_state_invariant.c
index 64d1d18..cd9443f 100644
--- a/src/gallium/drivers/r300/r300_state_invariant.c
+++ b/src/gallium/drivers/r300/r300_state_invariant.c
@@ -43,15 +43,17 @@ void r300_emit_invariant_state(struct r300_context* r300,
 {
     CS_LOCALS(r300);
 
+    if (r300->rws->get_value(r300->rws, R300_VID_DRM_2_3_0)) {
+        /* Subpixel multisampling for AA. */
+        BEGIN_CS(4);
+        OUT_CS_REG(R300_GB_MSPOS0, 0x66666666);
+        OUT_CS_REG(R300_GB_MSPOS1, 0x6666666);
+        END_CS;
+    }
+
     BEGIN_CS(12 + (r300->screen->caps.has_tcl ? 2 : 0));
 
     /*** Graphics Backend (GB) ***/
-    /* Subpixel multisampling for AA
-     * These are commented out because glisse's CS checker doesn't like them.
-     * I presume these will be re-enabled later.
-     * OUT_CS_REG(R300_GB_MSPOS0, 0x66666666);
-     * OUT_CS_REG(R300_GB_MSPOS1, 0x6666666);
-     */
     /* Source of fog depth */
     OUT_CS_REG(R300_GB_SELECT, R300_GB_FOG_SELECT_1_1_W);
 
diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c
index 8bebeac..cfa61b0 100644
--- a/src/gallium/drivers/r300/r300_texture.c
+++ b/src/gallium/drivers/r300/r300_texture.c
@@ -762,12 +762,12 @@ static unsigned r300_texture_get_nblocksy(struct r300_texture* tex,
 static void r300_texture_3d_fix_mipmapping(struct r300_screen *screen,
                                            struct r300_texture *tex)
 {
-    /* The kernels <= 2.6.34-rc3 compute the size of mipmapped 3D textures
+    /* The kernels <= 2.6.34-rc4 compute the size of mipmapped 3D textures
      * incorrectly. This is a workaround to prevent CS from being rejected. */
 
     unsigned i, size;
 
-    if (screen->rws->get_value(screen->rws, R300_VID_TEX3D_MIP_BUG) &&
+    if (screen->rws->get_value(screen->rws, R300_VID_DRM_2_3_0) &&
         tex->b.b.target == PIPE_TEXTURE_3D &&
         tex->b.b.last_level > 0) {
         size = 0;
diff --git a/src/gallium/drivers/r300/r300_winsys.h b/src/gallium/drivers/r300/r300_winsys.h
index 2bd4017..fa00a0c 100644
--- a/src/gallium/drivers/r300/r300_winsys.h
+++ b/src/gallium/drivers/r300/r300_winsys.h
@@ -39,7 +39,7 @@ enum r300_value_id {
     R300_VID_GB_PIPES,
     R300_VID_Z_PIPES,
     R300_VID_SQUARE_TILING_SUPPORT,
-    R300_VID_TEX3D_MIP_BUG,
+    R300_VID_DRM_2_3_0,
 };
 
 enum r300_reference_domain { /* bitfield */
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm.c b/src/gallium/winsys/radeon/drm/radeon_drm.c
index 8c22738..8d981b2 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm.c
@@ -100,8 +100,8 @@ static void do_ioctls(int fd, struct radeon_libdrm_winsys* winsys)
                            version->version_minor >= 1;
 #endif
 
-    /* XXX */
-    winsys->tex3d_mip_bug = TRUE;
+    winsys->drm_2_3_0 = version->version_major > 2 ||
+                        version->version_minor >= 3;
 
     info.request = RADEON_INFO_DEVICE_ID;
     retval = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info));
diff --git a/src/gallium/winsys/radeon/drm/radeon_r300.c b/src/gallium/winsys/radeon/drm/radeon_r300.c
index 2fcf7cf..90675ad 100644
--- a/src/gallium/winsys/radeon/drm/radeon_r300.c
+++ b/src/gallium/winsys/radeon/drm/radeon_r300.c
@@ -265,8 +265,8 @@ static uint32_t radeon_get_value(struct r300_winsys_screen *rws,
 	return ws->z_pipes;
     case R300_VID_SQUARE_TILING_SUPPORT:
         return ws->squaretiling;
-    case R300_VID_TEX3D_MIP_BUG:
-        return ws->tex3d_mip_bug;
+    case R300_VID_DRM_2_3_0:
+        return ws->drm_2_3_0;
     }
     return 0;
 }
diff --git a/src/gallium/winsys/radeon/drm/radeon_winsys.h b/src/gallium/winsys/radeon/drm/radeon_winsys.h
index 396f258..ca789be 100644
--- a/src/gallium/winsys/radeon/drm/radeon_winsys.h
+++ b/src/gallium/winsys/radeon/drm/radeon_winsys.h
@@ -60,8 +60,12 @@ struct radeon_libdrm_winsys {
     /* Square tiling support. */
     boolean squaretiling;
 
-    /* Square tiling support. */
-    boolean tex3d_mip_bug;
+    /* DRM 2.3.0
+     *   - R500 VAP regs
+     *   - MSPOS regs
+     *   - Fixed texture 3D size calculation
+     */
+    boolean drm_2_3_0;
 
     /* DRM FD */
     int fd;




More information about the mesa-commit mailing list