summaryrefslogtreecommitdiffstats
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorBrian <[email protected]>2007-11-20 08:30:10 -0700
committerBrian <[email protected]>2007-11-20 08:30:10 -0700
commit0191570f024ba787799ca2bccd46549a8af74aa9 (patch)
tree24d2f85dad2588eb031fd6a9455c71d493ce1bfe /src/mesa/state_tracker
parentc4f9fbb57f6e941a3b896b52c69665f7dced2350 (diff)
initial support for PIPE_FORMAT_Z24_S8
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_cb_clear.c8
-rw-r--r--src/mesa/state_tracker/st_cb_readpixels.c9
-rw-r--r--src/mesa/state_tracker/st_format.c9
3 files changed, 22 insertions, 4 deletions
diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c
index 3e591170da7..219a5afcbdd 100644
--- a/src/mesa/state_tracker/st_cb_clear.c
+++ b/src/mesa/state_tracker/st_cb_clear.c
@@ -91,6 +91,8 @@ depth_value(GLuint pipeFormat, GLfloat value)
return (uint) (value * 0xffffffff);
case PIPE_FORMAT_S8_Z24:
return (uint) (value * 0xffffff);
+ case PIPE_FORMAT_Z24_S8:
+ return ((uint) (value * 0xffffff)) << 8;
default:
assert(0);
return 0;
@@ -103,7 +105,7 @@ is_depth_stencil_format(GLuint pipeFormat)
{
switch (pipeFormat) {
case PIPE_FORMAT_S8_Z24:
- /*case PIPE_FORMAT_Z24_S8:*/
+ case PIPE_FORMAT_Z24_S8:
return GL_TRUE;
default:
return GL_FALSE;
@@ -521,11 +523,9 @@ clear_depth_stencil_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
case PIPE_FORMAT_S8_Z24:
clearValue |= ctx->Stencil.Clear << 24;
break;
-#if 0
case PIPE_FORMAT_Z24_S8:
- clearValue = (clearValue << 8) | clearVal;
+ clearValue |= clearValue | ctx->Stencil.Clear;
break;
-#endif
default:
assert(0);
}
diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c
index c347a0b6888..2e7c01672a1 100644
--- a/src/mesa/state_tracker/st_cb_readpixels.c
+++ b/src/mesa/state_tracker/st_cb_readpixels.c
@@ -100,6 +100,15 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
}
}
break;
+ case PIPE_FORMAT_Z24_S8:
+ {
+ const uint *src = (uint *) stmap + srcY * ps->region->pitch + x;
+ GLint k;
+ for (k = 0; k < width; k++) {
+ values[k] = src[k] & 0xff;
+ }
+ }
+ break;
default:
assert(0);
}
diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
index ddba6509415..c6b5bc968f0 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -320,6 +320,9 @@ default_depth_format(
if (pipe->is_format_supported( pipe, PIPE_FORMAT_S8_Z24 )) {
return PIPE_FORMAT_S8_Z24;
}
+ if (pipe->is_format_supported( pipe, PIPE_FORMAT_Z24_S8 )) {
+ return PIPE_FORMAT_Z24_S8;
+ }
return PIPE_FORMAT_NONE;
}
@@ -486,6 +489,8 @@ st_choose_pipe_format(struct pipe_context *pipe, GLint internalFormat,
case GL_DEPTH_COMPONENT24:
if (pipe->is_format_supported( pipe, PIPE_FORMAT_S8_Z24 ))
return PIPE_FORMAT_S8_Z24;
+ if (pipe->is_format_supported( pipe, PIPE_FORMAT_Z24_S8 ))
+ return PIPE_FORMAT_Z24_S8;
/* fall-through */
case GL_DEPTH_COMPONENT32:
if (pipe->is_format_supported( pipe, PIPE_FORMAT_U_Z32 ))
@@ -503,12 +508,16 @@ st_choose_pipe_format(struct pipe_context *pipe, GLint internalFormat,
return PIPE_FORMAT_U_S8;
if (pipe->is_format_supported( pipe, PIPE_FORMAT_S8_Z24 ))
return PIPE_FORMAT_S8_Z24;
+ if (pipe->is_format_supported( pipe, PIPE_FORMAT_Z24_S8 ))
+ return PIPE_FORMAT_Z24_S8;
return PIPE_FORMAT_NONE;
case GL_DEPTH_STENCIL_EXT:
case GL_DEPTH24_STENCIL8_EXT:
if (pipe->is_format_supported( pipe, PIPE_FORMAT_S8_Z24 ))
return PIPE_FORMAT_S8_Z24;
+ if (pipe->is_format_supported( pipe, PIPE_FORMAT_Z24_S8 ))
+ return PIPE_FORMAT_Z24_S8;
return PIPE_FORMAT_NONE;
default: