[Mesa-dev] [PATCH] llvmpipe: fix PIPE_FORMAT_Z24_UNORM_S8_UINT depth on big endian

Roland Scheidegger sroland at vmware.com
Mon Sep 15 14:29:14 PDT 2014


Am 15.09.2014 22:48, schrieb Dave Airlie:
>>
>> I never really looked at the big endian stuff so I have no idea if this
>> is right. I thought though the channel shift thing now should work
>> without endianness awareness if you fetch one 32bit number and then
>> break it up into parts with shifts due to the channel information being
>> adjusted for big/little endian. I could be wrong though, but if it
>> doesn't work that means there's probably some more mixup elsewhere (util
>> or llvmpipe code for clearing has its own conversion, and obviously the
>> format fetch used for depth texturing needs to match too).
>>
> 
> Well I was mainly look at the code in u_format_zs.c that has big
> endian handlers, and since this code directly loads from memory I
> assumed it would need the same treatment,

Yeah that looks like a reasonable assumption. Maybe they aren't treated
like the color non-array formats (should they?).
There's a lot of code which needs to match at the end, and some is
hardcoded:
- depth fetch in llvmpipe
- format fetch in gallivm
- util_pack_mask_z() and friends used for clearing
- the actual clearing (which unlike color doesn't use util code for
conversion) in lp_rast_clear_zstencil()
- all the autogened conversion code for reading/writing


> however it seems a bit more subtle since we regress a few tests, but
> pass a couple of hundred more, so I'll see if I can figure out what
> else is missing.
> 

Well if it mostly fixes things I'd say go for it.

Roland



More information about the mesa-dev mailing list