I don't think this is a good idea. 1D and buffer resources are fundamentally incompatible, it is highly illegal to use targets in views which are incompatible, so I'd rather not see such atrocities in shared code. I think you really want to fix up your resource_copy_region implementation one way or another so it can do gpu copies for buffers.
Roland Am 22.11.2017 um 15:43 schrieb Rob Clark: > It is useful for staging/shadow transfers for drivers to be able to blit > BUFFERs. Treat them as R8 1D textures for this purpose. > > Signed-off-by: Rob Clark <[email protected]> > --- > This works at least if 1D textures are linear, so I suppose might not > work for all drivers. Although I'm not entirely sure what the point > of a tiled 1D texture is. And I guess drivers for which this wouldn't > work could continue to just not use u_blitter for BUFFERs. > > src/gallium/auxiliary/util/u_blitter.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/auxiliary/util/u_blitter.c > b/src/gallium/auxiliary/util/u_blitter.c > index 476ef08737e..7ba7b5aa57d 100644 > --- a/src/gallium/auxiliary/util/u_blitter.c > +++ b/src/gallium/auxiliary/util/u_blitter.c > @@ -1445,7 +1445,10 @@ void util_blitter_default_dst_texture(struct > pipe_surface *dst_templ, > unsigned dstz) > { > memset(dst_templ, 0, sizeof(*dst_templ)); > - dst_templ->format = util_format_linear(dst->format); > + if (dst->target == PIPE_BUFFER) > + dst_templ->format = PIPE_FORMAT_R8_UINT; > + else > + dst_templ->format = util_format_linear(dst->format); > dst_templ->u.tex.level = dstlevel; > dst_templ->u.tex.first_layer = dstz; > dst_templ->u.tex.last_layer = dstz; > @@ -1482,7 +1485,12 @@ void util_blitter_default_src_texture(struct > blitter_context *blitter, > else > src_templ->target = src->target; > > - src_templ->format = util_format_linear(src->format); > + if (src->target == PIPE_BUFFER) { > + src_templ->target = PIPE_TEXTURE_1D; > + src_templ->format = PIPE_FORMAT_R8_UINT; > + } else { > + src_templ->format = util_format_linear(src->format); > + } > src_templ->u.tex.first_level = srclevel; > src_templ->u.tex.last_level = srclevel; > src_templ->u.tex.first_layer = 0; > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
