So, I could potentially do this for a5xx, which actually has a sort of blit engine. But for earlier gen's, everything is a glDraw(), and I don't want to duplicate the functionality of u_blitter.
I suppose I could bypass util_blitter_blit() and use util_blitter_blit_generic() directly.. BR, -R On Wed, Nov 22, 2017 at 10:14 AM, Roland Scheidegger <[email protected]> wrote: > 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
