[Mesa-dev] [PATCH 2/2] mesa: Speedup the xrgb -> argb special case in fast_read_rgba_pixels_memcpy
Ian Romanick
idr at freedesktop.org
Tue Mar 12 09:56:49 PDT 2013
On 03/11/2013 06:23 PM, Marek Olšák wrote:
> On Mon, Mar 11, 2013 at 6:49 PM, Ian Romanick <idr at freedesktop.org> wrote:
>> Once upon a time Matt Turner was talking about using pixman to accelerate
>> operations like this in Mesa. It has a lot of highly optimized paths for
>> just this sort of thing. Since it's used by other projects, it gets a lot
>> more testing, etc. It may be worth looking at using that to solve this
>> problem.
>
> I think that using pixman or any other CPU-based solution is a waste
> of time (for dedicated GPUs at least). The OpenGL packing and
> unpacking can be implemented entirely on the GPU using streamout and
> TBOs, and we generally only want memcpy on the CPU side. That would
> also allow us to finally accelerate pixel buffer objects.
That's probably true for dedicated GPUs. I suspect it depends a lot on
the hardware and how the driver implements the mappings, etc. I know
some of the closed-source drivers can still implement glMapBuffer and
friends by giving the app some malloc'ed memory and doing a copy to some
GPU memory. In those cases, you can still get the conversion for free
during the copy.
> For now, the easiest and fastest solution is to do a blit, which
> should cover swizzling and format conversions. We just need a lot of
> texture formats or do swizzling in the fragment shader. The
> destination of the blit can be a temporary texture allocated in GTT.
> The author of the patch (at least I think it's him) has actually
> started working on the blit-based solution for ReadPixels in st/mesa
> and the time spent in ReadPixels went from 2300 ms to 9 ms (so he can
> still use additional 7.6 ms for rendering and be at 60 fps).
The tricky part for a pure-GPU implementation is all the @#$&*! pixel
packing modes. That's where having a faster fallback using a robust
library like pixmap would (should, anyway) both make things faster and
let us delete code.
More information about the mesa-dev
mailing list