flyinghead / flycast

Flycast is a multiplatform Sega Dreamcast, Naomi, Naomi 2 and Atomiswave emulator
GNU General Public License v2.0
1.4k stars 170 forks source link

[Bisected] Commit has broken graphics on Intel XE (MESA) #1694

Open vanfanel opened 1 day ago

vanfanel commented 1 day ago

Platform / OS / Hardware: Debian Linux (Testing and Stable)

Flycast version: GIT code, the bug is about an specific commit

Hardware: Intel XE graphics integrated on i5-1235U

Description of the Issue

This commit has broken graphics on Intel XE hardware (MESA, latest stable): https://github.com/flyinghead/flycast/commit/4d73cc8e13424072c7458fd2e965c7fda9a5425a

For example: -Daytona USA 2001: VMU menu heavily garbled, in-game graphics with missing elements like car parts, etc -DOA2: Missing hair on some characters during the intro/demo. -Jet Grind Radio: Runs veeeeery slow and main character is missing.

NOTE: Use pixel-precise alpha-sorting and full framebuffer emulation to match my configuration and see the same results.

MastaG commented 1 day ago

So it's okay without full framebuffer emulation?

flyinghead commented 1 day ago

Are you using standalone or libretro?

The mentioned commit uses a new vulkan extension when available to avoid unnecessary work. However it should only really matter when using flat shading, which isn't used by many games, and not the ones listed here. Pretending the extension exists without enabling it doesn't affect Daytona USA for example. So this could indicate a MESA issue.

vanfanel commented 23 hours ago

@flyinghead I'm using libretro. MESA is latest stable but I have also tried with latest MESA gitlab code, with the same results. If someone tests this on Intel graphics (ANV) they will see the same for sure.

@MastaG Full Framebuffer Emulation OFF causes Daytona to be invisible, no graphics at all. That's the only difference it makes for the games I tested.

flyinghead commented 23 hours ago

Can you test standalone? I spotted a new validation error due to this commit on the libretro core (causing retroarch to crash at start up here). But it only affects the core.

vanfanel commented 23 hours ago

@flyinghead I have noticed that the mentioned problems don't happen if I set "Alpha Sorting" to "Per Triangle (Normal)" instead of "Per Pixel", but that means Daytona has missing parts on the player cart, bad clouds on the Soul Calibur intro, etc. (ie: all the problems expected that are caused by the lack of per-pixel alpha sorting).

As for standalone, I will do a build and test tonight, now I have to depart for work.

flyinghead commented 17 hours ago

I fixed the error that was crashing retroarch at start up. I also removed the use of the new extension where it's not necessary. This could help the issue.

vanfanel commented 11 hours ago

@flyinghead I did an standalone build with the latest GIT code (including your latest commits of course) and the problem is present there, too. So, yes: standalone is equally affected. And your latest commit didn't fix it, sadly.

flyinghead commented 27 minutes ago

Could you try to disable the use of the new extension completely? To do this, modify line 467 in core/rend/vulkan/vulkan_context.cpp to read:

            // Enable VK_EXT_provoking_vertex if available
            provokingVertexSupported = false;

This is for standalone. For the libretro core, modify line 181 in core/rend/vulkan/vulkan_context_lr.cpp:

        // Enable VK_EXT_provoking_vertex if available
        VulkanContext::Instance()->provokingVertexSupported = false;
vanfanel commented 1 minute ago

@flyinghead I did the changes you pointed me to, and the same problems persist, sorry.