Skip to content

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

Merged
bors-servo merged 1 commit intoservo:masterfrom
MortimerGoro:sampler_float_mobile
Jun 17, 2017
Merged

Fix FLOAT texture sampling precision problems on some mobile GPUs#1395
bors-servo merged 1 commit intoservo:masterfrom
MortimerGoro:sampler_float_mobile

Conversation

@MortimerGoro
Copy link
Copy Markdown
Contributor

@MortimerGoro 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
Copy Markdown
Member

glennw commented Jun 17, 2017

Looks good, thanks!

@bors-servo r+

@bors-servo
Copy link
Copy Markdown
Contributor

📌 Commit 74cb194 has been approved by glennw

@bors-servo
Copy link
Copy Markdown
Contributor

⌛ Testing commit 74cb194 with merge 6c7b99d...

bors-servo pushed 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
Copy Markdown
Contributor

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

@bors-servo bors-servo merged commit 74cb194 into servo:master Jun 17, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants