initial support for PIPE_FORMAT_Z24_S8
This commit is contained in:
@@ -171,6 +171,7 @@ static INLINE uint pf_get(pipe_format_rgbazs_t f, uint shift, uint mask)
|
||||
#define _PIPE_FORMAT_RRRG _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_R, PIPE_FORMAT_COMP_R, PIPE_FORMAT_COMP_R, PIPE_FORMAT_COMP_G )
|
||||
#define _PIPE_FORMAT_Z000 _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_Z, PIPE_FORMAT_COMP_0, PIPE_FORMAT_COMP_0, PIPE_FORMAT_COMP_0 )
|
||||
#define _PIPE_FORMAT_SZ00 _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_S, PIPE_FORMAT_COMP_Z, PIPE_FORMAT_COMP_0, PIPE_FORMAT_COMP_0 )
|
||||
#define _PIPE_FORMAT_ZS00 _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_Z, PIPE_FORMAT_COMP_S, PIPE_FORMAT_COMP_0, PIPE_FORMAT_COMP_0 )
|
||||
#define _PIPE_FORMAT_S000 _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_S, PIPE_FORMAT_COMP_0, PIPE_FORMAT_COMP_0, PIPE_FORMAT_COMP_0 )
|
||||
|
||||
/**
|
||||
@@ -222,6 +223,7 @@ static INLINE uint pf_rev(pipe_format_ycbcr_t f)
|
||||
#define PIPE_FORMAT_U_Z32 _PIPE_FORMAT_RGBAZS_8N( _PIPE_FORMAT_Z000, 4, 0, 0, 0, PIPE_FORMAT_TYPE_UNORM ) /**< uint Z/depth */
|
||||
#define PIPE_FORMAT_F_Z32 _PIPE_FORMAT_RGBAZS_8N( _PIPE_FORMAT_Z000, 4, 0, 0, 0, PIPE_FORMAT_TYPE_FLOAT ) /**< float Z/depth */
|
||||
#define PIPE_FORMAT_S8_Z24 _PIPE_FORMAT_RGBAZS_8N( _PIPE_FORMAT_SZ00, 1, 3, 0, 0, PIPE_FORMAT_TYPE_UNORM ) /**< 8-bit stencil + 24-bit Z */
|
||||
#define PIPE_FORMAT_Z24_S8 _PIPE_FORMAT_RGBAZS_8N( _PIPE_FORMAT_ZS00, 3, 1, 0, 0, PIPE_FORMAT_TYPE_UNORM ) /**< 24-bit Z + 8-bit stencil */
|
||||
#define PIPE_FORMAT_U_S8 _PIPE_FORMAT_RGBAZS_8N( _PIPE_FORMAT_S000, 1, 0, 0, 0, PIPE_FORMAT_TYPE_UNORM ) /**< 8-bit stencil */
|
||||
#define PIPE_FORMAT_R64_FLOAT _PIPE_FORMAT_RGBAZS_64( _PIPE_FORMAT_R000, 1, 0, 0, 0, PIPE_FORMAT_TYPE_FLOAT )
|
||||
#define PIPE_FORMAT_R64G64_FLOAT _PIPE_FORMAT_RGBAZS_64( _PIPE_FORMAT_RG00, 1, 1, 0, 0, PIPE_FORMAT_TYPE_FLOAT )
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user