Hardware before gen8 does not have full stencil texturing support and therefore the signaling for stencil index mode cannot be done through the texture itself - but via driver specific context instead.
Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c | 3 --- src/mesa/drivers/dri/i965/brw_state.h | 10 ++++++++++ src/mesa/drivers/dri/i965/gen8_surface_state.c | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c index cc7fdbe..f505b62 100644 --- a/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c +++ b/src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c @@ -430,9 +430,6 @@ brw_meta_stencil_blit(struct brw_context *brw, set_read_rb_tex_image(brw, &blit, &target); - _mesa_TexParameteri(target, GL_DEPTH_STENCIL_TEXTURE_MODE, - GL_STENCIL_INDEX); - prog = setup_program(ctx, target != GL_TEXTURE_2D); setup_bounding_rect(prog, orig_dims); setup_drawing_rect(prog, &dims); diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index c52a977..c680763 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -212,6 +212,16 @@ void brw_configure_w_tiled(const struct intel_mipmap_tree *mt, unsigned *pitch, uint32_t *tiling, unsigned *format); +static inline bool +brw_use_stencil_index_mode(const struct brw_context *brw, + struct gl_texture_object *tex_obj) +{ + const struct gl_texture_image *img = tex_obj->Image[0][tex_obj->BaseLevel]; + + return (tex_obj->StencilSampling && img->_BaseFormat == GL_DEPTH_STENCIL) || + (brw->meta_blit.is_active && brw->meta_blit.use_stencil_index_mode); +} + uint32_t brw_format_for_mesa_format(mesa_format mesa_format); GLuint translate_tex_target(GLenum target); diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c b/src/mesa/drivers/dri/i965/gen8_surface_state.c index 406f68e..cd2fb40 100644 --- a/src/mesa/drivers/dri/i965/gen8_surface_state.c +++ b/src/mesa/drivers/dri/i965/gen8_surface_state.c @@ -141,7 +141,7 @@ gen8_update_texture_surface(struct gl_context *ctx, return; } - if (tObj->StencilSampling && firstImage->_BaseFormat == GL_DEPTH_STENCIL) { + if (brw_use_stencil_index_mode(brw, tObj)) { mt = mt->stencil_mt; format = MESA_FORMAT_S_UINT8; } -- 1.8.3.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev