st/mesa: add ARB_texture_stencil8 support (v4)
if we support stencil texturing, enable texture_stencil8 there is no requirement to support native S8 for this, the texture can be converted to x24s8 fine. v2: fold fixes from Marek in: a) put S8 last in the list b) fix renderable to always test for d/s renderable fixup the texture case to use a stencil only format for picking the format for the texture view. v3: hit fallback for getteximage v4: put s8 back in front, it shouldn't get picked now (Ilia) Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
782e71cc07
commit
6cc49c4ce1
|
@ -287,16 +287,22 @@ st_get_texture_sampler_view_from_stobj(struct st_context *st,
|
|||
enum pipe_format format)
|
||||
{
|
||||
struct pipe_sampler_view **sv;
|
||||
|
||||
const struct st_texture_image *firstImage;
|
||||
if (!stObj || !stObj->pt) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
sv = st_texture_get_sampler_view(st, stObj);
|
||||
|
||||
if (stObj->base.StencilSampling &&
|
||||
util_format_is_depth_and_stencil(format))
|
||||
format = util_format_stencil_only(format);
|
||||
if (util_format_is_depth_and_stencil(format)) {
|
||||
if (stObj->base.StencilSampling)
|
||||
format = util_format_stencil_only(format);
|
||||
else {
|
||||
firstImage = st_texture_image_const(_mesa_base_tex_image(&stObj->base));
|
||||
if (firstImage->base._BaseFormat == GL_STENCIL_INDEX)
|
||||
format = util_format_stencil_only(format);
|
||||
}
|
||||
}
|
||||
|
||||
/* if sampler view has changed dereference it */
|
||||
if (*sv) {
|
||||
|
|
|
@ -950,7 +950,7 @@ st_GetTexImage(struct gl_context * ctx,
|
|||
|
||||
/* XXX Fallback to _mesa_GetTexImage_sw for depth-stencil formats
|
||||
* due to an incomplete stencil blit implementation in some drivers. */
|
||||
if (format == GL_DEPTH_STENCIL) {
|
||||
if (format == GL_DEPTH_STENCIL || format == GL_STENCIL_INDEX) {
|
||||
goto fallback;
|
||||
}
|
||||
|
||||
|
|
|
@ -650,6 +650,9 @@ void st_init_extensions(struct pipe_screen *screen,
|
|||
ARRAY_SIZE(vertex_mapping), PIPE_BUFFER,
|
||||
PIPE_BIND_VERTEX_BUFFER);
|
||||
|
||||
if (extensions->ARB_stencil_texturing)
|
||||
extensions->ARB_texture_stencil8 = GL_TRUE;
|
||||
|
||||
/* Figure out GLSL support. */
|
||||
glsl_feature_level = screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL);
|
||||
|
||||
|
|
|
@ -1942,11 +1942,6 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target,
|
|||
GLint internalFormat,
|
||||
GLenum format, GLenum type)
|
||||
{
|
||||
const boolean want_renderable =
|
||||
internalFormat == 3 || internalFormat == 4 ||
|
||||
internalFormat == GL_RGB || internalFormat == GL_RGBA ||
|
||||
internalFormat == GL_RGB8 || internalFormat == GL_RGBA8 ||
|
||||
internalFormat == GL_BGRA;
|
||||
struct st_context *st = st_context(ctx);
|
||||
enum pipe_format pFormat;
|
||||
unsigned bindings;
|
||||
|
@ -1962,15 +1957,17 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target,
|
|||
}
|
||||
|
||||
/* GL textures may wind up being render targets, but we don't know
|
||||
* that in advance. Specify potential render target flags now.
|
||||
* that in advance. Specify potential render target flags now for formats
|
||||
* that we know should always be renderable.
|
||||
*/
|
||||
bindings = PIPE_BIND_SAMPLER_VIEW;
|
||||
if (want_renderable) {
|
||||
if (_mesa_is_depth_or_stencil_format(internalFormat))
|
||||
bindings |= PIPE_BIND_DEPTH_STENCIL;
|
||||
else
|
||||
if (_mesa_is_depth_or_stencil_format(internalFormat))
|
||||
bindings |= PIPE_BIND_DEPTH_STENCIL;
|
||||
else if (internalFormat == 3 || internalFormat == 4 ||
|
||||
internalFormat == GL_RGB || internalFormat == GL_RGBA ||
|
||||
internalFormat == GL_RGB8 || internalFormat == GL_RGBA8 ||
|
||||
internalFormat == GL_BGRA)
|
||||
bindings |= PIPE_BIND_RENDER_TARGET;
|
||||
}
|
||||
|
||||
/* GLES allows the driver to choose any format which matches
|
||||
* the format+type combo, because GLES only supports unsized internal
|
||||
|
|
Loading…
Reference in New Issue