hrydgard/ppsspp

[Android] [Mali GPU] [OpenGL] Lastest build blackscreen on buffered rendering mode

Opened this issue · 17 comments

What happens?

As the title say, last working build d4b695c

Issue started 864d138

What should happen?

No blackscreen on buffered rendering mode

What hardware, operating system, and PPSSPP version? On desktop, GPU matters for graphical issues.

Android 6.0.1
OpenGL 2.0
Mali-450

@unknownbrackets here's the ge dump
PPSSPP GE Dump.zip
tried to different games

It's working fine on Adreno. Are you using a post-processing shader?

-[Unknown]

It's working fine on Adreno. Are you using a post-processing shader?

-[Unknown]

No, default settings only.

My ScreenRecording
recording_20200515_094046.zip
Game works fine in skip-buffered rendering also game audio also still playing while in blackscreen but not captured during screenrecording (I forget to enable audio recording 😅)

Tried ppsspp-v1.9.3-806-g192198ef3-android still blackscreen :(

I'm using Realme C2 Android 9 Pie and my games runs fine on buffered rendering.

@Gamemulatorer what games are you using?

@Gamemulatorer what games are you using?

All of my games are blackscreen on buffered rendering but not on skip-buffered rendering see my screenrecording above comment.

I think this issue can only reproduce on old android devices with old gpu like Mali 400 & 450 on OpenGL 2.0?

Confirmed! issue can only reproduce on Mali GPU with OpenGL 2.0, I tested the latest git build on Mali-t720 GPU with OpenGL 3.1 and it's work fine on it.

Wacky. I'll try to use my Galaxy S3 to debug this later.

Just did a quick check to confirm the repro and yeah, I got it. Getting a lot of the following:

W/PPSSPP ( 6672): [G3D] Got an error after init: 00000500 (GL_INVALID_ENUM)

So it should be fairly easy to track down when I have more time later. Looks like we're accidentally now using some feature that's too new on GLES 2.0 devices.

The error happens when doing indexed draws with index type = GL_UNSIGNED_INT. This is not supported on older GLES devices, only GL_UNSIGNED_SHORT. Should be a pretty easy fix.

Was gonna make the index format a parameter of the draw call, but in D3D9 the index format is specified when creating the index buffer! Ugh.

I think I'll just only support 16-bit indices in thin3d.

I think it makes sense to specify it on create for all backends, but yeah, 16-bit only sounds simpler...

I guess that means softgpu was broken before on GLES2...

-[Unknown]

So it seems indeed.

@hrydgard thanks! for the quick fixed.
Vampire Chronicles also works now unlike in the previous build started on ForceSoftwareRenderer implementation for this game that always stuck on blackscreen.
Screenshot_20200516-054612

That makes sense, the problem that caused the blackscreen was exactly how the software renderer was working before. Now that they're using shared code, the fix affected both.

-[Unknown]