[Mesa-dev] [PATCH 1/2] st/mesa: derive a stencil sampler format from the actual texture format

Brian Paul brianp at vmware.com
Mon Jul 11 14:23:16 PDT 2011


On 07/11/2011 02:33 PM, Marek Olšák wrote:
> ---
>   src/mesa/state_tracker/st_cb_drawpixels.c |   70 +++++++++++------------------
>   1 files changed, 26 insertions(+), 44 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
> index dca3324..f25656a 100644
> --- a/src/mesa/state_tracker/st_cb_drawpixels.c
> +++ b/src/mesa/state_tracker/st_cb_drawpixels.c
> @@ -273,26 +273,6 @@ make_passthrough_vertex_shader(struct st_context *st,
>
>
>   /**
> - * Return a texture base format for drawing/copying an image
> - * of the given format.
> - */
> -static GLenum
> -base_format(GLenum format)
> -{
> -   switch (format) {
> -   case GL_DEPTH_COMPONENT:
> -      return GL_DEPTH_COMPONENT;
> -   case GL_DEPTH_STENCIL:
> -      return GL_DEPTH_STENCIL;
> -   case GL_STENCIL_INDEX:
> -      return GL_STENCIL_INDEX;
> -   default:
> -      return GL_RGBA;
> -   }
> -}
> -
> -
> -/**
>    * Return a texture internalFormat for drawing/copying an image
>    * of the given format and type.
>    */
> @@ -999,7 +979,6 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
>      GLboolean write_stencil = GL_FALSE, write_depth = GL_FALSE;
>      struct pipe_sampler_view *sv[2];
>      int num_sampler_view = 1;
> -   enum pipe_format stencil_format = PIPE_FORMAT_NONE;
>      struct st_fp_variant *fpv;
>
>      if (format == GL_DEPTH_STENCIL)
> @@ -1014,28 +993,6 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
>         /* can we write to stencil if not fallback */
>         if (!pipe->screen->get_param(pipe->screen, PIPE_CAP_SHADER_STENCIL_EXPORT))
>   	 goto stencil_fallback;
> -
> -      tex_format = st_choose_format(st->pipe->screen, base_format(format),
> -                                    GL_NONE, GL_NONE,
> -                                    PIPE_TEXTURE_2D,
> -				    0, PIPE_BIND_SAMPLER_VIEW);
> -
> -      switch (tex_format) {
> -      case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
> -         stencil_format = PIPE_FORMAT_X24S8_USCALED;
> -         break;
> -      case PIPE_FORMAT_S8_USCALED_Z24_UNORM:
> -         stencil_format = PIPE_FORMAT_S8X24_USCALED;
> -         break;
> -      case PIPE_FORMAT_Z32_FLOAT_S8X24_USCALED:
> -         stencil_format = PIPE_FORMAT_X32_S8X24_USCALED;
> -         break;
> -      case PIPE_FORMAT_S8_USCALED:
> -         stencil_format = PIPE_FORMAT_S8_USCALED;
> -         break;
> -      default:
> -         goto stencil_fallback;
> -      }
>      }
>
>      /* Mesa state should be up to date by now */
> @@ -1080,7 +1037,32 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
>            sv[0] = st_create_texture_sampler_view(st->pipe, pt);
>
>            if (sv[0]) {
> -	    if (write_stencil) {
> +            /* Create a second sampler view to read stencil.
> +             * 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_USCALED:
> +               case PIPE_FORMAT_X24S8_USCALED:
> +                  stencil_format = PIPE_FORMAT_X24S8_USCALED;
> +                  break;
> +               case PIPE_FORMAT_S8_USCALED_Z24_UNORM:
> +               case PIPE_FORMAT_S8X24_USCALED:
> +                  stencil_format = PIPE_FORMAT_S8X24_USCALED;
> +                  break;
> +               case PIPE_FORMAT_Z32_FLOAT_S8X24_USCALED:
> +               case PIPE_FORMAT_X32_S8X24_USCALED:
> +                  stencil_format = PIPE_FORMAT_X32_S8X24_USCALED;
> +                  break;
> +               case PIPE_FORMAT_S8_USCALED:
> +                  stencil_format = PIPE_FORMAT_S8_USCALED;
> +                  break;
> +               default:
> +                  assert(0);
> +               }
> +
>   	       sv[1] = st_create_texture_sampler_view_format(st->pipe, pt,
>                                                                stencil_format);
>   	       num_sampler_view++;


Reviewed-by: Brian Paul <brianp at vmware.com>


More information about the mesa-dev mailing list