[Mesa-dev] [PATCH] gallium/drivers/nouveau: Clean up clear_texture()

Ilia Mirkin imirkin at alum.mit.edu
Fri Dec 4 06:26:06 PST 2015


This will break depth/stencil clears.

On Fri, Dec 4, 2015 at 9:18 AM, Edward O'Callaghan
<eocallaghan at alterapraxis.com> wrote:
> We should translate and set the format before dispatching
> the call to pipe->create_surface(), instead of creating
> a surface with the given format and changing it after.
>
> Signed-off-by: Edward O'Callaghan <eocallaghan at alterapraxis.com>
> ---
>  src/gallium/drivers/nouveau/nv50/nv50_surface.c | 72 ++++++++++++-------------
>  1 file changed, 35 insertions(+), 37 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_surface.c b/src/gallium/drivers/nouveau/nv50/nv50_surface.c
> index 86be1b4..6364aa3 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_surface.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_surface.c
> @@ -447,8 +447,42 @@ nv50_clear_texture(struct pipe_context *pipe,
>                     const void *data)
>  {
>     struct pipe_surface tmpl = {{0}}, *sf;
> +   union pipe_color_union color;
> +   float depth = 0;
> +   uint8_t stencil = 0;
> +   unsigned clear = 0;
> +
> +   switch (util_format_get_blocksizebits(res->format)) {
> +   case 128:
> +      tmpl.format = PIPE_FORMAT_R32G32B32A32_UINT;
> +      memcpy(&color.ui, data, 128 / 8);
> +      break;
> +   case 64:
> +      tmpl.format = PIPE_FORMAT_R32G32_UINT;
> +      memcpy(&color.ui, data, 64 / 8);
> +      memset(&color.ui[2], 0, 64 / 8);
> +      break;
> +   case 32:
> +      tmpl.format = PIPE_FORMAT_R32_UINT;
> +      memcpy(&color.ui, data, 32 / 8);
> +      memset(&color.ui[1], 0, 96 / 8);
> +      break;
> +   case 16:
> +      tmpl.format = PIPE_FORMAT_R16_UINT;
> +      color.ui[0] = util_cpu_to_le32(
> +         util_le16_to_cpu(*(unsigned short *)data));
> +      memset(&color.ui[1], 0, 96 / 8);
> +      break;
> +   case 8:
> +      tmpl.format = PIPE_FORMAT_R8_UINT;
> +      color.ui[0] = util_cpu_to_le32(*(unsigned char *)data);
> +      memset(&color.ui[1], 0, 96 / 8);
> +      break;
> +   default:
> +      assert(!"Unknown texel element size");
> +      return;
> +   }
>
> -   tmpl.format = res->format;
>     tmpl.u.tex.first_layer = box->z;
>     tmpl.u.tex.last_layer = box->z + box->depth - 1;
>     tmpl.u.tex.level = level;
> @@ -457,9 +491,6 @@ nv50_clear_texture(struct pipe_context *pipe,
>        return;
>
>     if (util_format_is_depth_or_stencil(res->format)) {
> -      float depth = 0;
> -      uint8_t stencil = 0;
> -      unsigned clear = 0;
>        const struct util_format_description *desc =
>           util_format_description(res->format);
>
> @@ -474,39 +505,6 @@ nv50_clear_texture(struct pipe_context *pipe,
>        pipe->clear_depth_stencil(pipe, sf, clear, depth, stencil,
>                                  box->x, box->y, box->width, box->height);
>     } else {
> -      union pipe_color_union color;
> -
> -      switch (util_format_get_blocksizebits(res->format)) {
> -      case 128:
> -         sf->format = PIPE_FORMAT_R32G32B32A32_UINT;
> -         memcpy(&color.ui, data, 128 / 8);
> -         break;
> -      case 64:
> -         sf->format = PIPE_FORMAT_R32G32_UINT;
> -         memcpy(&color.ui, data, 64 / 8);
> -         memset(&color.ui[2], 0, 64 / 8);
> -         break;
> -      case 32:
> -         sf->format = PIPE_FORMAT_R32_UINT;
> -         memcpy(&color.ui, data, 32 / 8);
> -         memset(&color.ui[1], 0, 96 / 8);
> -         break;
> -      case 16:
> -         sf->format = PIPE_FORMAT_R16_UINT;
> -         color.ui[0] = util_cpu_to_le32(
> -            util_le16_to_cpu(*(unsigned short *)data));
> -         memset(&color.ui[1], 0, 96 / 8);
> -         break;
> -      case 8:
> -         sf->format = PIPE_FORMAT_R8_UINT;
> -         color.ui[0] = util_cpu_to_le32(*(unsigned char *)data);
> -         memset(&color.ui[1], 0, 96 / 8);
> -         break;
> -      default:
> -         assert(!"Unknown texel element size");
> -         return;
> -      }
> -
>        pipe->clear_render_target(pipe, sf, &color,
>                                  box->x, box->y, box->width, box->height);
>     }
> --
> 2.5.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list