libretro / RetroArch

Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3.
http://www.libretro.com
GNU General Public License v3.0
10.08k stars 1.81k forks source link

(Video) D3D8 or DDRAW mode for old x86 machines #6903

Open eugene-s-nesdev opened 6 years ago

eugene-s-nesdev commented 6 years ago

https://forums.libretro.com/t/how-to-force-d3d8-output-for-old-intel-atom/16464

I have an asus eeepc 1015PEM (intel atom N550) with GMA3150 graphics, that has OpenGL 1.x and partial DX9 support. It crashes on both GL and D3D9 modes So, lastest Retroarch works only in GDI-mode on this machine. OS is Win7x64

How to set video_driver = “d3d8”? seems it locked on windows retroarch builds P.S: i tried msvc-2003-x86 builds too, but it has only “none” and “GDI” drivers available

hizzlekizzle commented 6 years ago

There is no d3d8 renderer currently. On a GPU that underpowered, GDI is your only option, but being software rendered, fullscreen will probably not be full speed.

ghost commented 6 years ago

@hizzlekizzle What is this then? https://github.com/libretro/RetroArch/blob/master/gfx/drivers/d3d8.c Doesn't the Xbox OG use d3d8 exclusively? I thought that driver was working... @twinaphex any input?

inactive123 commented 6 years ago

The D3D8 driver should work, however, it's dependent on dynamic libraries that it has to find for D3D8. So, if those system libraries can be found on your system, it should work. If not, you might have to install some old DirectX SDKs.

I think you have to compile it with ./configure --enable-d3d8 --disable-d3d9. It will then bake in the D3D8 driver instead of the D3D9 driver when you run make.

There is no DirectDraw driver. It'd be nice to have one though.

ghost commented 6 years ago

Yea I believe Windows no longer ships with the DirectX8 runtime, nor does the later DX runtimes include it, so you'll need to install it explicitly.

August 2007 should be the last release to include the DX8 (and earlier) runtimes.

eugene-s-nesdev commented 6 years ago

I've found SwiftShader Direct3D renderer *.dll (it's software d3d9 renderer, lay it into RetroArch folder) It cannot run fullspeed on intel Atom N550 (~30FPS only), but you can see root of the problem

This is comparsion between native Intel GMA 3150 d3d9 and Software D3D9 swiftshader emulation: compare.zip

Main issue is "Fragment profile ps_2_0" vs "Fragment profile ps_3_0" GMA3150 have a black screen instead of RGUI with OSD overlay over it

eugene-s-nesdev commented 6 years ago

How i can pay bounty for this issue (and what price need for this)? I guess DirectDraw support will have very important meaning, especially for old machines with Win9x systems.

ghost commented 6 years ago

You can add money to this issue here: https://www.bountysource.com/issues/59931478-video-d3d8-or-ddraw-mode-for-old-x86-machines

But have you tried what I mentioned above?

inactive123 commented 5 years ago

DirectDraw could be a good idea yes. It could potentially be faster than GDI yet still backwards compatible enough.

eugene-s-nesdev commented 5 years ago

Very nice. Lastest nightly retroarch builds have GL1 support: video_driver = "gl1" and it works like a charm on that eeepc netbook.

I tested bluemsx, fceumm, gambatte, mgba, genesis-plus-gx, mednafen_pce_fast, snes9x, mesen, quicknes and nestopia cores. It works all, except nestopia, that gives black screen with sound working.

LibretroAdmin commented 2 years ago

There is now a Direct3D8 driver, although it might not be in the latest Windows build. I might need to find a clever way to have d3d8, d3d9, d3d10, d3d11, and d3d12 all in the same build.