[Mesa-dev] [RFC PATCH 3/4] mesa: Prefer non-swizzled formats when prefer_no_swizzle set

Chris Forbes chrisf at ijw.co.nz
Tue Mar 11 12:51:32 PDT 2014


There's cases where BGRA or ARGB or whatever avoids having to juggle
things either in texture upload paths, or blits to scanout buffers --
if we didn't care about that, then yes, we could just default to the
canonical layout.

I think we can also detect the cases for views via
type==format==GL_NONE in mesa, and possibly avoid the parameter -- but
that doesn't help for ARB_shader_image_load_store.

-- Chris

On Wed, Mar 12, 2014 at 8:47 AM, Francisco Jerez <currojerez at riseup.net> wrote:
> Chris Forbes <chrisf at ijw.co.nz> writes:
>
>> Hi Michel, and thanks for the quick feedback.
>>
>> This is why it's tagged RFC :)
>>
>> After thinking about it a bit more, I'm not convinced it's the right
>> thing either.
>>
>> You're right, the spec is very careful not to say anything about the
>> memory layout. The 4.2 core profile spec, section 3.9.20 defines
>> reinterpretation of texels in a roundabout way to avoid having to
>> specify the memory layout:
>>
>> "
>>     The re-interpretation for image
>>     loads and the read portion of image atomics is performed as though data were
>>     copied from the texel of the bound texture to a similar texel
>> represented in the
>>     format of the image unit. Similarly, the re-interpretation for
>> image stores and the
>>     write portion of image atomics is performed as though data were
>> copied from a
>>     texel represented in the format of the image unit to the texel in
>> the bound texture.
>>     In both cases, this copy operation would be performed by:
>>
>>      - reading the texel from the source format to scratch memory according to
>>        the process described for GetTexImage (see section 6.1.4), using default
>>        pixel storage modes and <format> and <type> parameters corresponding
>>        to the source format in table 3.22; and
>>
>>      - writing the texel from scratch memory to the destination format according
>>        to the process described for TexSubImage3D (see section 3.9.4),
>> using default
>>        pixel storage modes and <format> and <type> parameters corresponding
>>        to the destination format in table 3.22
>> "
>>
>> My underspecified "exact matching format" and "correct order" are then
>> those which make the above operations just a memcpy, so we don't
>> actually have to do anything beyond aliasing the memory.
>>
>> I suppose there might be implementations which want to do other things.
>>
>
> Yeah, that's right, an implementation of ARB_shader_image_load_store or
> ARB_texture_view is still free to store the texture components in any
> memory layout it pleases.  If the memory layout used internally is just
> a (consistently) swizzled variant of what's specified by
> ARB_image_load_store, the implementation may still avoid the copy in
> many cases, but the approach of this patch series seems like the best
> thing to do to me.
>
> Is there any reason we need the 'prefer_no_swizzle' argument?  Can't we
> just default to the "canonical" layout if it's supported?
>
>> CC'ing Francisco on this as he was working on
>> ARB_shader_image_load_store, which first introduces this -- I care
>> mostly about the ARB_texture_view bits, which defines reinterpretation
>> of a texture's data store by piggybacking on the load_store
>> definition.
>>
>> -- Chris
>>
>> On Tue, Mar 11, 2014 at 3:42 PM, Michel Dänzer <michel at daenzer.net> wrote:
>>> On Mon, 2014-03-10 at 22:20 +1300, Chris Forbes wrote:
>>>> If prefer_no_swizzle is set, try:
>>>> - The exact matching format
>>>> - Formats with the required components in the correct order, plus a junk
>>>>   component
>>>
>>> How are 'exact matching' and 'correct order' defined? My understanding
>>> of GL internal formats is that they just specify which components are
>>> there and possibly their sizes, but nothing about their memory layout.
>>> If my understanding is correct, I think it's a bad idea to hardcode
>>> driver / platform specific preferences here like this.
>>>
>>> I think you would either need to take the 'format' parameter into
>>> account as well, or just use a driver specific ChooseTextureFormat hook.
>>>
>>>
>>> --
>>> Earthling Michel Dänzer            |                  http://www.amd.com
>>> Libre software enthusiast          |                Mesa and X developer
>>>


More information about the mesa-dev mailing list