Fixed bug 1338 - Direct3D renderer should set D3DCREATE_FPU_PRESERVE for not behaving vastly different on doubles (causes 3rd party lib crashes!)
authorSam Lantinga <slouken@libsdl.org>
Thu, 29 Dec 2011 05:18:16 -0500
changeset 6115 d4621a7e0faa
parent 6114 d166819bf2b3
child 6116 66f48d6bf735
Fixed bug 1338 - Direct3D renderer should set D3DCREATE_FPU_PRESERVE for not behaving vastly different on doubles (causes 3rd party lib crashes!) Jonas Thiem 2011-11-29 12:28:02 PST Direct3D renderer should set D3DCREATE_FPU_PRESERVE for not behaving vastly different to OpenGL/software rendering on doubles and break some libraries really badly. Most notable affected example: Lua, which does the most unpredictable things which are really almost impossible to debug/find out for beginners who never heard this culprit exists. Since I believe all renderers should behave the same on that doubles simply work as expected in a program, this should really be changed! (also this wasted a few days of my life wondering why everything in my program was so broken)
src/render/direct3d/SDL_render_d3d.c
--- a/src/render/direct3d/SDL_render_d3d.c	Thu Dec 29 05:13:55 2011 -0500
+++ b/src/render/direct3d/SDL_render_d3d.c	Thu Dec 29 05:18:16 2011 -0500
@@ -441,11 +441,11 @@
     result = IDirect3D9_CreateDevice(data->d3d, data->adapter,
                                      D3DDEVTYPE_HAL,
                                      pparams.hDeviceWindow,
-                                     (caps.
+                                     D3DCREATE_FPU_PRESERVE | ((caps.
                                       DevCaps &
                                       D3DDEVCAPS_HWTRANSFORMANDLIGHT) ?
                                      D3DCREATE_HARDWARE_VERTEXPROCESSING :
-                                     D3DCREATE_SOFTWARE_VERTEXPROCESSING,
+                                     D3DCREATE_SOFTWARE_VERTEXPROCESSING),
                                      &pparams, &data->device);
     if (FAILED(result)) {
         D3D_DestroyRenderer(renderer);