X Tutup
Skip to content

Add all PowerVR devices to the transform feedback shader cache ban list#111329

Merged
Repiteo merged 1 commit intogodotengine:masterfrom
clayjohn:GLES-disable-PVR-shader-cache
Oct 20, 2025
Merged

Add all PowerVR devices to the transform feedback shader cache ban list#111329
Repiteo merged 1 commit intogodotengine:masterfrom
clayjohn:GLES-disable-PVR-shader-cache

Conversation

@clayjohn
Copy link
Member

@clayjohn clayjohn commented Oct 6, 2025

Based on the feedback from @kisg and the comments in #94915 it seems safest to just disable the shader cache for transform feedback shaders for all PowerVR devices. From what we have learned the latest devices may no longer have the bug that causes this crash. But for users it is much better for us to put a stop to this crash once and for all, and then later evaluate opting in to drivers above a certain version threshold.

We should merge this PR soon for 4.6 and then prioritize it for 4.5.2 so that we can quickly help reduce crash rates for released games

@clayjohn clayjohn added this to the 4.x milestone Oct 6, 2025
@clayjohn clayjohn force-pushed the GLES-disable-PVR-shader-cache branch from 97e3dc8 to 8b023eb Compare October 6, 2025 16:45
@clayjohn clayjohn changed the title Gles disable pvr shader cache Add another device to the transform feedback shader cache ban list Oct 6, 2025
@akien-mga akien-mga added the cherrypick:4.5 Considered for cherry-picking into a future 4.5.x release label Oct 10, 2025
@clayjohn clayjohn force-pushed the GLES-disable-PVR-shader-cache branch from 02be35b to 42a76b7 Compare October 17, 2025 22:29
@clayjohn clayjohn modified the milestones: 4.x, 4.6 Oct 17, 2025
@clayjohn clayjohn requested a review from Alex2782 October 17, 2025 22:34
@clayjohn clayjohn marked this pull request as ready for review October 17, 2025 22:34
@clayjohn clayjohn requested a review from a team as a code owner October 17, 2025 22:34
@Alex2782
Copy link
Member

#94915 (comment)
I'll be trying to test GPUParticles2D on Firebase Test Lab in the next few days.

Is there anything else I should test?

@clayjohn clayjohn changed the title Add another device to the transform feedback shader cache ban list Add all PowerVR devices to the transform feedback shader cache ban list Oct 18, 2025
@clayjohn
Copy link
Member Author

#94915 (comment) I'll be trying to test GPUParticles2D on Firebase Test Lab in the next few days.

Is there anything else I should test?

Nope. The bug this fixes is caused by loading particle shaders from the cache. So the only thing that needs to be tested is particles and multiple runs so the cache is triggered

@akien-mga
Copy link
Member

akien-mga commented Oct 18, 2025

Needs rebase to pass CI (and the commit can be amended with s/more/all/ to reflect the latest state).

BTW, #111729 (comment) might he a hint of this issue also affecting latest Pixel 10, so excluding all PowerVR devices does seem like the best approach.

@clayjohn clayjohn force-pushed the GLES-disable-PVR-shader-cache branch from 756a5df to b20466d Compare October 18, 2025 17:28
@clayjohn
Copy link
Member Author

Updated! Should be good to go now

@akien-mga akien-mga added the cherrypick:4.4 Considered for cherry-picking into a future 4.4.x release label Oct 18, 2025
Copy link
Member

@Calinou Calinou left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me.

Copy link
Member

@Alex2782 Alex2782 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, I can't restart the app on Firebase Test Lab to test the cache. Restarting the app ends the session. Let's implement these changes and see if they reduce the crash rate in the Android Godot Editor.


Tests on Firebase Test Lab

power-vr-test.zip

extends Control

func _ready():
	
	await get_tree().create_timer(3.0).timeout
	%GPUParticles2D.visible = true
	
	if FileAccess.file_exists("user://shader_cache_tested.txt"):
		print("Second launch")
	else:
		var f = FileAccess.open("user://shader_cache_tested.txt", FileAccess.WRITE)
		f.store_string("done")
		f.close()
		print("First launch")
		await get_tree().create_timer(5.0).timeout
		restart_app()

func restart_app():
	var exe = OS.get_executable_path()
	OS.create_process(exe, [])
	get_tree().quit()

moto g54 5G

On this device, the video runs longer (the test session was active for a longer time); on other devices, the session ends immediately. However, restarting worked on my Samsung Tab S7, Android 13.

web-build_20251019_riol_cancunf-34-en_US-landscape_video.mp4

Devices: Pixel 10, Galaxy A12, moto g54 5G, Galaxy A03s

No crash reproduced with GPUParticles2D (first start, without cache)
v4.5.stable.official [876b290]

@Repiteo Repiteo merged commit bb63baa into godotengine:master Oct 20, 2025
20 checks passed
@Repiteo
Copy link
Contributor

Repiteo commented Oct 20, 2025

Thanks!

@akien-mga
Copy link
Member

Cherry-picked for 4.5.2.

@akien-mga
Copy link
Member

Cherry-picked for 4.4.2.

@akien-mga akien-mga removed cherrypick:4.4 Considered for cherry-picking into a future 4.4.x release cherrypick:4.5 Considered for cherry-picking into a future 4.5.x release labels Jan 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

X Tutup