Original Post
Hello,
I am working on a Direct3D game (Myst-like) using DirectX9.
I have already created a demo and tried it on some computers (one XP, one Vista, 2x Windows 7 and some others) and it worked fine.
I tried to install it on a IBM Lenovo machine, a T420 which has 2 embedded video cards (one IBM for low consumption, one NVIDIA for performance). The managing of these two cards is fully tranparant for the users, Windows 7 takes care of switching the cards when needed. Moreover, when I enumarate the available display adapters, only the IBM one is listed (GetAdapterCount() returns 1 - followed by GetAdapterIdentifier() which returns the IBM card description).
This is for the context.
Now, the demo was not working very well on this Lenovo. Investigating a little bit and debugging the code, I noticed some of the directX calls (most of them during the rendering phase) where not returning D3D_OK (whereas texture are loaded correctly and everything seems fine) and then made the program to crash (because I check all directX calls and display error message and exit when an error is seen - which is working fine on the other computers I tried).
I decided not to check the status of DirectX calls during the rendering (I just check, before using a texture for example, that the texture has been correctly loaded, if not, I skip the display of this texture and continue rendering ..) and now everything works fine on the Lenovo. The demo is just running well, no crash any more, and no display artifacts noticeable.
Maybe my initial code was too strict, I mean to exit the game with an error when one of the DirectX call has failed (but as I said, working well until Lenovo experience).
What is the good practice ? Should I investigate more on the Lenovo or could I accept a rendering procedure whose some DirectX calls are failing .. in any case they will be performed on next calls to rendering function .. which is confirmed because no display artefacts at the end..).
Note : before each call to rendering function my code is already checking if the device is lost, and if lost, waits if not ready to be reseted and reset as soon as ready.
Thanks in advance for your answer.
-amarhys
I am working on a Direct3D game (Myst-like) using DirectX9.
I have already created a demo and tried it on some computers (one XP, one Vista, 2x Windows 7 and some others) and it worked fine.
I tried to install it on a IBM Lenovo machine, a T420 which has 2 embedded video cards (one IBM for low consumption, one NVIDIA for performance). The managing of these two cards is fully tranparant for the users, Windows 7 takes care of switching the cards when needed. Moreover, when I enumarate the available display adapters, only the IBM one is listed (GetAdapterCount() returns 1 - followed by GetAdapterIdentifier() which returns the IBM card description).
This is for the context.
Now, the demo was not working very well on this Lenovo. Investigating a little bit and debugging the code, I noticed some of the directX calls (most of them during the rendering phase) where not returning D3D_OK (whereas texture are loaded correctly and everything seems fine) and then made the program to crash (because I check all directX calls and display error message and exit when an error is seen - which is working fine on the other computers I tried).
I decided not to check the status of DirectX calls during the rendering (I just check, before using a texture for example, that the texture has been correctly loaded, if not, I skip the display of this texture and continue rendering ..) and now everything works fine on the Lenovo. The demo is just running well, no crash any more, and no display artifacts noticeable.
Maybe my initial code was too strict, I mean to exit the game with an error when one of the DirectX call has failed (but as I said, working well until Lenovo experience).
What is the good practice ? Should I investigate more on the Lenovo or could I accept a rendering procedure whose some DirectX calls are failing .. in any case they will be performed on next calls to rendering function .. which is confirmed because no display artefacts at the end..).
Note : before each call to rendering function my code is already checking if the device is lost, and if lost, waits if not ready to be reseted and reset as soon as ready.
Thanks in advance for your answer.
-amarhys