Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix FLOAT texture sampling precision problems on some mobile GPUs #1395

Merged
merged 1 commit into from Jun 17, 2017

Conversation

@MortimerGoro
Copy link
Contributor

MortimerGoro commented Jun 16, 2017

Hi,

I'm working on running WebGL/WebVR demos on a Samsung Galaxy S7. I found that WR renders a white screen in all WebGL or CSS demos, even the simple ones. It's weird because it works correctly on other old Android phones such as Nexus 4 (released 5-6 years ago). I thought that it was caused by a GPU driver issue but after heavy debugging I found that texelFetch was getting corrupt values for big float values (e.g. local_clip_rect). They are stored correctly on the texture data but clamped to maximum half_float value (65504.0) when computed in the shaders.

Adding highp precision qualifier to the FLOAT sampler2D fixes the issue. Samsung Galaxy S7 has Mali-T880 GPU. The precision qualifier wasn't need on other Android mobiles I have tested (mostly Adreno GPUs).


This change is Reviewable

@glennw
Copy link
Member

glennw commented Jun 17, 2017

Looks good, thanks!

@bors-servo r+

@bors-servo
Copy link
Contributor

bors-servo commented Jun 17, 2017

📌 Commit 74cb194 has been approved by glennw

@bors-servo
Copy link
Contributor

bors-servo commented Jun 17, 2017

Testing commit 74cb194 with merge 6c7b99d...

bors-servo added a commit that referenced this pull request Jun 17, 2017
Fix FLOAT texture sampling precision problems on some mobile GPUs

Hi,

I'm working on running WebGL/WebVR demos on a Samsung Galaxy S7. I found that WR renders a white screen in all WebGL or CSS demos, even the simple ones. It's weird because it works correctly on other old Android phones such as Nexus 4 (released 5-6 years ago). I thought that it was caused by a GPU driver issue but after heavy debugging I found that texelFetch was getting corrupt values for big float values (e.g. local_clip_rect). They are stored correctly on the texture data but clamped to maximum half_float value (65504.0) when computed in the shaders.

Adding highp precision qualifier to the FLOAT sampler2D fixes the issue. Samsung Galaxy S7 has Mali-T880 GPU. The precision qualifier wasn't need on other Android mobiles I have tested (mostly Adreno GPUs).

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/webrender/1395)
<!-- Reviewable:end -->
@bors-servo
Copy link
Contributor

bors-servo commented Jun 17, 2017

☀️ Test successful - status-travis
Approved by: glennw
Pushing 6c7b99d to master...

@bors-servo bors-servo merged commit 74cb194 into servo:master Jun 17, 2017
3 checks passed
3 checks passed
continuous-integration/appveyor/pr AppVeyor build succeeded
Details
continuous-integration/travis-ci/pr The Travis CI build passed
Details
homu Test successful
Details
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

3 participants
You can’t perform that action at this time.