[Mesa-users] Rer: How I succeeded in building Mesa llvmpipe 64-bit on Windows

Jose Fonseca jfonseca at vmware.com
Thu Nov 1 04:36:41 PDT 2012



----- Original Message -----
> 
> Dear Jose,
> 
> I followed your suggestion and modified os_thread.h (line 180) to
> enable the conditional variables. A simple change of #if 0 to #if 1
> was enough, as all code was already there.
> 
> I recompiled and compared performance and behavior.
> 
> - CPU is now busy to 80-90%.
> - Performance on some intense tests is massively boosted. On CPUs
> with many cores this performance benefit scale directly with number
> of cores.
> 
> - The renderings themselves looked all fine.
> 
> - My simple benchmark tool reproducibly crashed on application exit,
> with a white-screen. Also toggling with other applications
> sporadically showed simiar behavior. I only have few other Opengl
> applications that are 64 bits, they did NOT show this problem.

If you could dig a bit deeped (by attaching a debugger and seeing the stack trace), we might be able to fix it.

> The measurements have been conducted on my Core i5-520 laptop with
> Win7 64.
> I used a very simple OpenGL benchmark in order to be able to compare
> to Microsoft's OpenGL software renderer. Also I did not find good
> 64-bit tools to benchmark OpenGL on Windows.
> (http://homepage.virgin.net/roy.longbottom/64%20bit%20graphics%20tests.htm)
> 
> 
> MESA 9.0
>                   ........................ Frames Per Second
>                   ........................
>    Resolution    Single   Single    Multi    Multi     More    More+
>        Wire    Tiled
>                   Plain  Texture    Plain  Texture  Texture  Texture
>                    Kitchen  Kitchen
> 
>  1600  900 32     81.60    80.06    71.51    67.74    45.65    40.12
>     24.72     5.13
>  1600  900 32     83.26    82.97    70.80    68.58    45.56    40.10
>     25.94     5.15
> 
> MESA 9.0 cond var
>  1600  900 32    111.84   102.59    90.92    84.51    60.71    50.28
>     28.98    18.54
>  1600  900 32     93.28    95.90    86.29    82.76    59.13    49.37
>     28.54    18.36

Thanks for your results. That settles it then.

> As for your second request:
> 
> The condition right now is: #if 0 && defined (_WIN32_WINNT) &&
> (_WIN32_WINNT >= 0x0600)
> 
> According to Windows documentation, WINVER and _WIN32_WINNT are
> already fine to check for Windows version on runtime.
> See http://msdn.microsoft.com/en-us/library/aa383745(v=vs.85).aspx
> 
> So I am not sure why we are not changing the line to:
> #if (_WIN32_WINNT >= 0x0600)

These are compile time checks, not runtime checks.

We need to define _WIN32_WINNT in order to get the prototypes of the latest APIs, but we don't want to use them inconditionally.

We will need to use a runtime check like explained on http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx , and also use GetProcAddress for conditional variable functions, otherwise the DLL won't be even loaded on XP due to the missing symbols.

Jose


More information about the mesa-users mailing list