This will break depth/stencil clears.
On Fri, Dec 4, 2015 at 9:18 AM, Edward O'Callaghan <eocallag...@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 <eocallag...@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@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