[Mesa-dev] Determinism in the results of llvmpipe?

Roland Scheidegger sroland at vmware.com
Tue Nov 29 16:42:34 UTC 2016


Am 29.11.2016 um 17:21 schrieb Andrew A.:
>> Am 29.11.2016 um 15:18 schrieb Jose Fonseca:
>>> Actually, IIUC https://github.com/divVerent/s2tc/wiki/libtxc_dxtn picks
>>> colors at random, so its possible you have the same version of s2tc
>>> library, but random colors are being picked.
>>>
>>> If so, you might to hack s2tc to not pick colors at random, or just
>>> avoid S3TC textures if you can.
>>>
>>
>> IIRC the "randomness" had no actual random bits in it, so as long as the
>> same library is used on both machines the results should be the same.
>> Albeit from the pictures it indeed looks like one has full decoding and
>> the other not (it's not jist the obvious issues on the "D" but it's not
>> quite smooth elsewhere neither).
>>
>> (Albeit I'm not quite sure if you have similar cpus, the  E3-1275 v3 is
>> Haswell which has AVX2, the CPU E5-2673 v3 doesn't seem to exist or at
>> least it's not in intel's database - if that's a v2 instead it would be
>> Ivy Bridge lacking AVX2, just featuring AVX1. In this case you can still
>> get slightly different results from texture sampling due to potentially
>> different choice of AoS vs. SoA sampling, albeit nothing which would
>> explain what you're seeing unless there's a bug somewhere...)
>>
>> Roland
> 
> The problem was indeed different versions of libtxc being used, so I
> settled on using a consistent version of that library across the
> systems, and now all is well.
> 
> I'm not sure why the 2673v3 is not in the arc, but whatever it is,
> /proc/cpuinfo confirms it supports avx2.
> The closest I could find in the ARC is:
> http://ark.intel.com/products/81709/Intel-Xeon-Processor-E5-2670-v3-30M-Cache-2_30-GHz
> Perhaps this 2673v3 was a stepping only shipped to customers like
> MS/Amazon for use on Azure/AWS, but that's just a hunch.
Ah ok.

> By the way,
> is there an environment variable to lock mesa/llvmpipe to use AVX1 and
> not AVX2?

Nope. If you want to disable certain features like avx2 you need to set
has_avx2 to 0 in lp_build_init()
(src/gallium/auxiliary/gallivm/lp_bld_init.c). (If you want to guarantee
identical results between machines supporting AVX and AVX2, you'd almost
certainly also want to disable fma too).
Messing with these flags is actually a bit hackish, and I'm not sure
there's generally much benefit exposing them (since just "avx" isn't
really all that useful, and there's quite a few flags, some of which
depend on others).
Since you mentioned you run it in a VM, in this case it might be
possible to limit the cpu capabilities which are exposed to the guest
easily.

Roland



More information about the mesa-dev mailing list