summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2010-04-26 06:29:10 +0200
committerMarek Olšák <maraeo@gmail.com>2010-04-26 07:22:00 +0200
commit2579fe4044012a552c8be222ffae76b48de13592 (patch)
treec1694e1e78ad2fe06f2e6ca7600e465d35a67f82
parentb9e637e8cf1cba99c138f5ca2d79ae5afefb1020 (diff)
r300g: emit MSPOS regs
-rw-r--r--src/gallium/drivers/r300/r300_state_invariant.c14
-rw-r--r--src/gallium/drivers/r300/r300_texture.c4
-rw-r--r--src/gallium/drivers/r300/r300_winsys.h2
-rw-r--r--src/gallium/winsys/radeon/drm/radeon_drm.c4
-rw-r--r--src/gallium/winsys/radeon/drm/radeon_r300.c4
-rw-r--r--src/gallium/winsys/radeon/drm/radeon_winsys.h8
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 64d1d18b45..cd9443fa26 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 8bebeacf86..cfa61b0b3f 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 2bd40176d1..fa00a0cba9 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 8c22738004..8d981b22e3 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 2fcf7cf982..90675ada96 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 396f258c31..ca789be8e9 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;