Mesa (master): r600g: fixup z format translations.

Dave Airlie airlied at kemper.freedesktop.org
Fri Aug 6 05:04:45 UTC 2010


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Aug  6 15:06:25 2010 +1000

r600g: fixup z format translations.

this enables GL_EXT_packed_depth_stencil. fbo-d24s8 passes

---

 src/gallium/drivers/r600/r600_state.c         |   20 +-------------------
 src/gallium/drivers/r600/r600_state_inlines.h |   24 +++++++++++++++++++++++-
 2 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
index e43e4af..8214561 100644
--- a/src/gallium/drivers/r600/r600_state.c
+++ b/src/gallium/drivers/r600/r600_state.c
@@ -706,22 +706,6 @@ static int r600_cb0(struct r600_context *rctx, struct radeon_state *rstate)
 	return radeon_state_pm4(rstate);
 }
 
-static int r600_db_format(unsigned pformat, unsigned *format)
-{
-	switch (pformat) {
-	case PIPE_FORMAT_Z24X8_UNORM:
-		*format = V_028010_DEPTH_X8_24;
-		return 0;
-	case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
-		*format = V_028010_DEPTH_8_24;
-		return 0;
-	default:
-		*format = V_028010_DEPTH_INVALID;
-		R600_ERR("unsupported %d\n", pformat);
-		return -EINVAL;
-	}
-}
-
 static int r600_db(struct r600_context *rctx, struct radeon_state *rstate)
 {
 	struct r600_screen *rscreen = rctx->screen;
@@ -746,9 +730,7 @@ static int r600_db(struct r600_context *rctx, struct radeon_state *rstate)
 	level = state->zsbuf->level;
 	pitch = (rtex->pitch[level] / rtex->bpt) / 8 - 1;
 	slice = (rtex->pitch[level] / rtex->bpt) * state->zsbuf->height / 64 - 1;
-	if (r600_db_format(state->zsbuf->texture->format, &format)) {
-		return -EINVAL;
-	}
+	format = r600_translate_dbformat(state->zsbuf->texture->format);
 	rstate->states[R600_DB__DB_DEPTH_BASE] = 0x00000000;
 	rstate->states[R600_DB__DB_DEPTH_INFO] = 0x00010000 |
 					S_028010_FORMAT(format);
diff --git a/src/gallium/drivers/r600/r600_state_inlines.h b/src/gallium/drivers/r600/r600_state_inlines.h
index b45089d..4a955da 100644
--- a/src/gallium/drivers/r600/r600_state_inlines.h
+++ b/src/gallium/drivers/r600/r600_state_inlines.h
@@ -129,6 +129,20 @@ static INLINE uint32_t r600_translate_ds_func(int func)
 	return func;
 }
 
+static uint32_t r600_translate_dbformat(enum pipe_format format)
+{
+	switch (format) {
+	case PIPE_FORMAT_Z16_UNORM:
+		return V_028010_DEPTH_16;
+	case PIPE_FORMAT_Z24X8_UNORM:
+		return V_028010_DEPTH_X8_24;
+	case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
+		return V_028010_DEPTH_8_24;
+	default:
+		return ~0;
+	}
+}
+
 static uint32_t r600_translate_colorswap(enum pipe_format format)
 {
 	switch (format) {
@@ -168,6 +182,10 @@ static uint32_t r600_translate_colorswap(enum pipe_format format)
 //        case PIPE_FORMAT_R8SG8SB8UX8U_NORM:
 		return SWAP_STD_REV;
 
+	case PIPE_FORMAT_Z24X8_UNORM:
+	case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
+		return SWAP_STD;
+
         case PIPE_FORMAT_R10G10B10A2_UNORM:
         case PIPE_FORMAT_R10G10B10X2_SNORM:
         case PIPE_FORMAT_B10G10R10A2_UNORM:
@@ -234,6 +252,10 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
         case PIPE_FORMAT_R10SG10SB10SA2U_NORM:
 		return V_0280A0_COLOR_10_10_10_2;
 
+	case PIPE_FORMAT_Z24X8_UNORM:
+	case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
+		return V_0280A0_COLOR_24_8;
+
 		/* 64-bit buffers. */
         case PIPE_FORMAT_R16G16B16A16_UNORM:
         case PIPE_FORMAT_R16G16B16A16_SNORM:
@@ -271,7 +293,7 @@ static INLINE boolean r600_is_colorbuffer_format_supported(enum pipe_format form
 
 static INLINE boolean r600_is_zs_format_supported(enum pipe_format format)
 {
-	return TRUE;
+	return r600_translate_dbformat(format) != ~0;
 }
 
 static INLINE boolean r600_is_vertex_format_supported(enum pipe_format format)




More information about the mesa-commit mailing list