Putting S8 last in the list is like not putting it there at all. Marek
On Mon, Apr 6, 2015 at 5:07 AM, Dave Airlie <airl...@gmail.com> wrote: > 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. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/mesa/state_tracker/st_atom_texture.c | 14 ++++++++++---- > src/mesa/state_tracker/st_extensions.c | 3 +++ > src/mesa/state_tracker/st_format.c | 23 ++++++++++------------- > 3 files changed, 23 insertions(+), 17 deletions(-) > > diff --git a/src/mesa/state_tracker/st_atom_texture.c > b/src/mesa/state_tracker/st_atom_texture.c > index eff28fc..04ba864 100644 > --- a/src/mesa/state_tracker/st_atom_texture.c > +++ b/src/mesa/state_tracker/st_atom_texture.c > @@ -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) { > diff --git a/src/mesa/state_tracker/st_extensions.c > b/src/mesa/state_tracker/st_extensions.c > index bc20f73..25932dd 100644 > --- a/src/mesa/state_tracker/st_extensions.c > +++ b/src/mesa/state_tracker/st_extensions.c > @@ -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); > > diff --git a/src/mesa/state_tracker/st_format.c > b/src/mesa/state_tracker/st_format.c > index 72dbf3b..b9afb91 100644 > --- a/src/mesa/state_tracker/st_format.c > +++ b/src/mesa/state_tracker/st_format.c > @@ -1167,8 +1167,8 @@ static const struct format_mapping format_map[] = { > { GL_STENCIL_INDEX, GL_STENCIL_INDEX1_EXT, GL_STENCIL_INDEX4_EXT, > GL_STENCIL_INDEX8_EXT, GL_STENCIL_INDEX16_EXT, 0 }, > { > - PIPE_FORMAT_S8_UINT, PIPE_FORMAT_Z24_UNORM_S8_UINT, > - PIPE_FORMAT_S8_UINT_Z24_UNORM, 0 > + PIPE_FORMAT_Z24_UNORM_S8_UINT, > + PIPE_FORMAT_S8_UINT_Z24_UNORM, PIPE_FORMAT_S8_UINT, 0 > } > }, > > @@ -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 > -- > 2.3.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev