gallium: add util_format_stencil_only helper function
used for stencil sampler views. Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
a730838a42
commit
76db2c121c
|
@ -881,6 +881,35 @@ util_format_linear(enum pipe_format format)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a depth-stencil format, return the corresponding stencil-only format.
|
||||
* For stencil-only formats, return the format unchanged.
|
||||
*/
|
||||
static INLINE enum pipe_format
|
||||
util_format_stencil_only(enum pipe_format format)
|
||||
{
|
||||
switch (format) {
|
||||
/* mask out the depth component */
|
||||
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
|
||||
return PIPE_FORMAT_X24S8_UINT;
|
||||
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||
return PIPE_FORMAT_S8X24_UINT;
|
||||
case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
|
||||
return PIPE_FORMAT_X32_S8X24_UINT;
|
||||
|
||||
/* stencil only formats */
|
||||
case PIPE_FORMAT_X24S8_UINT:
|
||||
case PIPE_FORMAT_S8X24_UINT:
|
||||
case PIPE_FORMAT_X32_S8X24_UINT:
|
||||
case PIPE_FORMAT_S8_UINT:
|
||||
return format;
|
||||
|
||||
default:
|
||||
assert(0);
|
||||
return PIPE_FORMAT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the number of components stored.
|
||||
* Formats with block size != 1x1 will always have 1 component (the block).
|
||||
|
|
|
@ -1165,27 +1165,8 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
|
|||
* The stencil is written using the shader stencil export
|
||||
* functionality. */
|
||||
if (write_stencil) {
|
||||
enum pipe_format stencil_format = PIPE_FORMAT_NONE;
|
||||
|
||||
switch (pt->format) {
|
||||
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
|
||||
case PIPE_FORMAT_X24S8_UINT:
|
||||
stencil_format = PIPE_FORMAT_X24S8_UINT;
|
||||
break;
|
||||
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||
case PIPE_FORMAT_S8X24_UINT:
|
||||
stencil_format = PIPE_FORMAT_S8X24_UINT;
|
||||
break;
|
||||
case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
|
||||
case PIPE_FORMAT_X32_S8X24_UINT:
|
||||
stencil_format = PIPE_FORMAT_X32_S8X24_UINT;
|
||||
break;
|
||||
case PIPE_FORMAT_S8_UINT:
|
||||
stencil_format = PIPE_FORMAT_S8_UINT;
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
enum pipe_format stencil_format =
|
||||
util_format_stencil_only(pt->format);
|
||||
|
||||
sv[1] = st_create_texture_sampler_view_format(st->pipe, pt,
|
||||
stencil_format);
|
||||
|
|
Loading…
Reference in New Issue