[Mesa-dev] [RFC 12/13] i965: support for YUV formatted external textures

Pohjolainen, Topi topi.pohjolainen at intel.com
Tue Feb 26 23:32:15 PST 2013

On Tue, Feb 26, 2013 at 12:28:14PM -0500, Kristian H?gsberg wrote:
> On Tue, Feb 26, 2013 at 8:19 AM, Topi Pohjolainen
> <topi.pohjolainen at intel.com> wrote:
> > Namely YUV420, YVU420 (YV12) and NV12. Here one extends the shader
> > program with instructions that sample the separate Y- and U/V-planes
> > and convert the YUV to RGB as specified by ITU-R BT.601. Packed
> > formats are handled through the normal paths.
> I didn't read the entire patch series yet, but this doesn't sound
> right.  You can't handle packed (YUYV) buffers through normal
> sampling.  If you're filtering, you end up blending the wrong
> components.  If you're sampling the buffer as 32 bpp, you'll blend Y
> components not with their neighboring pixel but the pixel one over, as
> each sample has two Y components.  If you sample the texture as 16bpp,
> you end up blending the U and V components as you sample.  The trick
> is to set up two textures for the same buffer and sample Y using a 16
> bpp texture and sample the U and V components using a 32 bpp buffer.

Here the first two (YUV420, YVU420) have all the components in different planes
and I'm giving each plane its own sampling surface, and hence sampling them
separately as R8_UNORM. The packed UV-plane of NV12 I'm treating in turn as
having two channels (sampling using R8G8_UNORM). Does that make sense? I haven't
written support for anything more complex yet, but it is good to know your trick
if the need arises.


More information about the mesa-dev mailing list