NVidia Shield

I got an hour of flawless performance out of RetroArch Android on the Shield today when setting the refreshrate to 59.94Hz.

It was a total revelation. I was the happiest man alive for over an hour.

And then… at some specific point in time after that blissful hour… audio crackling happened out of nowhere again. Goddamn.

Android is just hopeless if you’re attempting frameskip 0. It really is. I get so sad having this absolutely great device called the Shield and then to be stuck with an OS that simply can’t deliver on absolutely mission-critical stuff like making sure audio and video are perfectly in sync without any audio crackling going on or video skipping. And it needs to be able to do that CONSTANTLY - not just for an hour, or half an hour. The runtime performance state needs to be TOTALLY PREDICTABLE.

Thankfully, it seems that finally game developers are starting to tell the truth about Android - Carmack is my hero today for doing exactly that -

www.youtube.com/watch?v=w1sjRD7NSec&feature=youtu.be&t=8m19sfo

6:10 “I’m still obviously an iOS user for most of my day-to-day stuff - […] I looked at it three years ago and I thought it was really very awful [especially compared to Apple]. But you look at periods of relative change”

6:30 - “It’s only when you get into the native development kit that things really falls apart in terms of things not looking really well cooked at all”

Short story - Android ‘looks at least usable now’, ‘Like I was playing Sonic on it, and Sonic is not supposed to be dropping frames. That is supposed to be the essence of what Sonic is about. And you do get the occasional stutter that I would lay the blame at Android’ - ‘you can still see the warts of Android’ - ‘when you do a PS and you see pages of stuff scrolling by, what is all this crap and how is it making my experience better?’

23:20

“It’s especially pathetic on Android if you want to load a texture in on Android, you wind up loading it into Java, making a native buffer, passing that native buffer to the driver, which will copy it into some other place which will MAYBE be GPU-related.”

Really, this is what the Android crowd doesn’t get - when I’m bashing Android, I WANT IT to be better so that I at some point in time no longer have to deal with iOS. Trust me, I’d rather buy a Shield and get RetroArch out of the box running flawlessly rather than having to buy a pricy iPad and then having to jailbreak it to get dynarecs working and to EVEN be able to install RetroArch to begin with without a developer license. But what is the current state of it now? Well, it is what it is.

Could also be down to some power management issue - when fully powered and playing it runs just fine at 59.94Hz with no audio crackling or video tearing noticeable (this is with threaded video turned off).

Hey guys, I’ve been playing with this hours now. Would someone please kindly tell me the right settings to enable diagonals on the analog stick or even have the D-Pad work at all for that matter. Thanks!

If Android is that much of a problem, why not see if you can wipe the OS clean from the device altogether, and install the full blown desktop version of Windows 7? Someone is already attempting to do this and has made progress so far.

Wait until we get our new version out (0.9.9.4). I am still working out a few kinks so that you will get a better experience on this thing.

where can i read more about it?

Anyway,

I have had it running pretty stable at 60Hz for a couple of straight hours at least.

So far all of the cores are fullspeed - audio crackling doesn’t seem to happen except for one exception - PCSX ReARMed with some games (listed below).

Games that ran at 60Hz internally (like nearly every 3D/2D fighter, like Tekken 3/Tekken 2/Tobal 2) run flawlessly. There is no issue there. Hell, I can even get the occasional 30Hz game like Ridge Racer Type 4 to run just fine.

There seems to be a problem with a lot of games that ran internally at 30Hz though (Final Fantasy 7/Chrono Cross/Crash Bandicoot 1/Resident Evil 1). These all produce audio crackles right now. The absolute worst offender here is Chrono Cross - it’s a total crapshoot when threaded video is not enabled.

You can avoid these issues by using the new threaded video mode option with adaptive jittering - but honestly, I don’t consider it good enough compared to static syncing and Vsync. Hopefully we can find a way to fix these issues with the PSX core on Shield with static syncing.

Other than that, it’s looking to be a great device indeed. While Android still sucks, this is definitely the best Android experience I’ve had so far with an Android-based device. Could be a real game changer if they have Google’s ear and Google actually starts ramming through the kind of performance/stability improvements that game developers demand. So more pressure needs to be put on these Google guys so that everyone benefits in the end - things have been languishing for far too long.

Regarding performance -

VBA Next - runs everything at fullspeed. This one is in the bag. Look ma - no dynarecs. Next thing I might try is seeing if regular VBA-M (non-Next) will still run at fullspeed as well.

Tyrquake - at resolution 640x480 (remember - this is software rendered - using the unoptimised and slow as hell C software video routines- which have never been fast really - and Michael Abrash’ optimized x86 ASM rasterizer is 32bit x86-only) - you can run Tyrquake at more or less a locked 50fps cap - at 60fps mode it hovers between 55 and 60. Believe it or not but this is very impressive - the PS3 and 360 can only dream of matching that kind of performance.

Mednafen PSX - Hovers between 35 and 40fps and has occasional spikes to 44 - 48fps. An interpreter CPU core for PSX AND an unoptimised PSX GPU - and it’s already running at such speeds. I’m quite impressed. The PS3 by comparison ran Mednafen PSX at 18 to 21fps - so this is quite good.

Mednafen Virtual Boy - Fullspeed with every game - with no speed hacks.

SNES9x mainline (non-Next) - Fullspeed with every game - with no alterations to the codebase. Plays Yoshi’s Island at fullspeed for instance - and so does the other SuperFX games. SA1 games like Jikkyou Oshaberi Parodius are fullspeed too.

Desmume - With our ARM JIT core Sonic Rush is running at 35fps. Yeah - looks like Exophase’s closed-source/payware emu has that audience entirely to himself sad to say. Also, there are quite some serious bugs in the ARM JIT core - so I see the Desmume core only being really usable on PC in the near foreseeable future.

Ninja Warriors (FBA) - This is the crazy Taito arcade game from the late '80s with the three monitors placed next to each other - this game’s performance is a total crapshoot on a PS3/360 (something like 25/30fps) - yet it runs fullspeed here on the Shield.

Now - given the big performance leaps . here is what I want to try when I have more time - which is NOT this weekend -

bSNES core - test if Performance core can run at fullspeed on this thing. Mupen64 - Try if it can run most games at fullspeed with the cached MIPS CPU interpreter on Shield - thereby dodging the less accurate Ari64 recompiler which still has known game-breaking bugs in a lot of games.

I also did some shader performance tests -note that the performance you get with the scale factors below depends on the framebufer screen resolution of the core you’re running -

5xBR-v3.7c-lq - Fullspeed at 3x scale (with Picodrive 32X/SNES9x/etc). Remember that this is the low quality version. Regular quality 5xBR is too slow.

DDT-extended - Fullspeed at 3x scale (with Gambatte).

Lanczos16 - Fullspeed at 3x scale (with Gambatte).

4xSoft - Fullspeed.

On that note - we really need multi-pass support for GLSL eventually. However, I hope that can be done while keeping our main workflow intact for shaders - in that we write the Cg shader first and then convert to GLSL through a script.

Sounds really good any eta on the playstore update

I was thinking of launching yesterday (Friday) but I really want to sort out this PSX issue with the games that the GPU runs at 30Hz internally since it kinda sours on the whole experience right now.

So probably more realistic is after Monday since I also need to do some work stuff over the weekend which I have been neglecting for too long now.

Thanks for the heads up how is the 32x preformance 9n shield

Fullspeed of course - the only game on 32X that requires a beefy CPU is Virtua Fighter 32X - and that runs fullspeed as well (it is shy of just 2 fps BTW on an iPad 2/Mini).

But really - 32X will run most games at fullspeed even on a Cortex A8 CPU - so it’s not a real performance-intensive usecase. At least Knuckles Chaotix will run at fullspeed on even the least-demanding ARMv7 CPU out there.

Just out of interest are the 32x cd games working lol

Multipass GLSL is exactly the same as Cg. The cg2glsl converter even converts cgps for you (to glslp).

Multipass GLSL is exactly the same as Cg. The cg2glsl converter even converts cgps for you (to glslp).[/quote]

I guess one of the Game Boy shader files broke then during conversion since it wasn’t applying anything for me.

On that note - there are still some issues with the shader conversion process - waterpaint-mudlord for instance doesn’t work even though the Cg-to-GLSL compiler didn’t throw up an error.

EDIT: Yeah, multipass works - cool - I wasn’t expecting it to :).

You can’t expect cg2glsl to work with every single shader out there. The cgc compiler always finds a way to make the source difficult to post-process. There is a crazy amount of hacks and workarounds in it. And since the GLSL source you get out is kinda awkward, it’s much easier to hit compiler bugs even if it’s valid GLSL.

I might have to write my own Cg cross compiler in the future, but I hope it won’t come to that …

There is no windows 7 port for ARM… can’t be done progress?? source?

What’s the difference between mainline Snes9x and Snes9x-next?

I guess savestates are not compatible between both

Noob question but is there a nvidia shield controll layout that works.? I manually set it up but then I wasn’t able to get into the menu. Does someone have a layout I can use?