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 eglGetProcAddress for core OpenGL entrypoints #94

Merged
merged 2 commits into from Apr 2, 2017

Conversation

@MortimerGoro
Copy link
Collaborator

MortimerGoro commented Mar 30, 2017

Hi,

The upgrade to the new gleam has broken offscreen EGL based contexts & Android WebGL on Servo. This is because eglProcAddress can't be used to resolve core OpenGL function entry points on many implementations. Loading core functions with eglProcAddress is only possible in EGL 1.5.

@MortimerGoro MortimerGoro force-pushed the MortimerGoro:egl_dlsym branch from d4e4065 to b8cfd78 Mar 30, 2017
@MortimerGoro MortimerGoro force-pushed the MortimerGoro:egl_dlsym branch from b8cfd78 to 59f2701 Mar 30, 2017
@@ -38,5 +40,8 @@ gdi32-sys = "0.2"
user32-sys = "0.2"
kernel32-sys = "0.2"

[target.'cfg(any(target_os="macos", target_os="windows"))'.dependencies]
[target.'cfg(any(target_os="macos", target_os="windows", target_os="android"))'.dependencies]
lazy_static = "0.2"

This comment has been minimized.

Copy link
@kvark

kvark Mar 30, 2017

Member

interesting, so we can have a dependency mentioned twice?

lazy_static! {
static ref GL_LIB: Option<lib::Library> = {
if cfg!(target_os = "android") {
lib::Library::new("libGLESv2.so").ok()

This comment has been minimized.

Copy link
@kvark

kvark Mar 30, 2017

Member

This doesn't support run-time selection of the GL backend. E.g. one may want to run with GLES on Linux desktop.

This comment has been minimized.

Copy link
@MortimerGoro

MortimerGoro Mar 30, 2017

Author Collaborator

That would require a change in the API because get_proc_address trait is static and we can't know the user preference. We could work on that on a separate issue/PR, it's less critical in this moment.

This comment has been minimized.

Copy link
@emilio

emilio Mar 31, 2017

Member

Perhaps we should be using or_else and not platform-cfgs?

Library::new("libGLESv2.so").or_else(|| lib::Library::new("libGL.so"))?

let addr = CString::new(addr.as_bytes()).unwrap().as_ptr();
egl::GetProcAddress(addr as *const _) as *const ()
if let Some(ref lib) = *GL_LIB {
let symbol: lib::Symbol<unsafe extern fn()> = lib.get(addr.as_bytes()).unwrap();

This comment has been minimized.

Copy link
@emilio

emilio Mar 31, 2017

Member

Perhaps returning ptr::null instead of unwrapping?

egl::GetProcAddress(addr as *const _) as *const ()
if let Some(ref lib) = *GL_LIB {
let symbol: lib::Symbol<unsafe extern fn()> = lib.get(addr.as_bytes()).unwrap();
return *symbol.deref() as *const();

This comment has been minimized.

Copy link
@emilio

emilio Mar 31, 2017

Member

nit: space after const

lazy_static! {
static ref GL_LIB: Option<lib::Library> = {
if cfg!(target_os = "android") {
lib::Library::new("libGLESv2.so").ok()

This comment has been minimized.

Copy link
@emilio

emilio Mar 31, 2017

Member

Perhaps we should be using or_else and not platform-cfgs?

Library::new("libGLESv2.so").or_else(|| lib::Library::new("libGL.so"))?

@MortimerGoro MortimerGoro force-pushed the MortimerGoro:egl_dlsym branch 2 times, most recently from eb403c5 to 06e074e Mar 31, 2017
@MortimerGoro
Copy link
Collaborator Author

MortimerGoro commented Mar 31, 2017

Curiosity: using or_else or other closuse patterns within the lazy_static macro causes some obscure errors: possibly related issue here rust-lang/rust#24680

} else {
lib::Library::new("libGL.so").ok()
}
let names = ["libGLESv2.so", "libGLES.so", "libGLESv3.so"];

This comment has been minimized.

Copy link
@emilio

emilio Mar 31, 2017

Member

Still need libGL?

let names = ["libGLESv2.so", "libGLES.so", "libGLESv3.so"];
for name in &names {
let lib = lib::Library::new(name);
if lib.is_ok() {

This comment has been minimized.

Copy link
@emilio

emilio Mar 31, 2017

Member
if let Ok(lib) = lib::Library::new(name) {
    return Some(lib);
}

May be slightly clearer, your call.

@MortimerGoro MortimerGoro force-pushed the MortimerGoro:egl_dlsym branch from 06e074e to a48fcdc Mar 31, 2017
@MortimerGoro
Copy link
Collaborator Author

MortimerGoro commented Mar 31, 2017

@emilio I added libGL.so for desktop GL on linux. Ideally we should have a way to choose the desired library version instead of the predefined order.

@emilio emilio merged commit 0e1dbd1 into servo:master Apr 2, 2017
1 check passed
1 check passed
continuous-integration/travis-ci/pr The Travis CI build passed
Details
@emilio
Copy link
Member

emilio commented Apr 2, 2017

LGTM, thanks :)

bors-servo added a commit to servo/servo that referenced this pull request Apr 3, 2017
Fix Android issues: update servo-glutin & offscreen_gl_context

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/16237)
<!-- Reviewable:end -->
bors-servo added a commit to servo/servo that referenced this pull request Apr 3, 2017
Fix Android issues: update servo-glutin & offscreen_gl_context

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/16237)
<!-- Reviewable:end -->
bors-servo added a commit to servo/servo that referenced this pull request Apr 3, 2017
Fix Android issues: update servo-glutin & offscreen_gl_context

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/16237)
<!-- Reviewable:end -->
moz-v2v-gh pushed a commit to mozilla/gecko-dev that referenced this pull request Apr 4, 2017
…reen_gl_context (from MortimerGoro:update_glutin_offscreen); r=jdm

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: f659d43bd403e4ac1305990ba704f23b4a6cd5e6

--HG--
extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
extra : subtree_revision : 76e38ca77cc9227bfaa6f30cc6445cdfcbacf29c
mcmanus pushed a commit to mcmanus/gecko that referenced this pull request Apr 4, 2017
…reen_gl_context (from MortimerGoro:update_glutin_offscreen); r=jdm

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: f659d43bd403e4ac1305990ba704f23b4a6cd5e6
Manishearth pushed a commit to Manishearth/gecko-dev that referenced this pull request Apr 11, 2017
…reen_gl_context (from MortimerGoro:update_glutin_offscreen); r=jdm

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: f659d43bd403e4ac1305990ba704f23b4a6cd5e6
JerryShih pushed a commit to JerryShih/gecko-dev that referenced this pull request Apr 12, 2017
…reen_gl_context (from MortimerGoro:update_glutin_offscreen); r=jdm

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: f659d43bd403e4ac1305990ba704f23b4a6cd5e6
gecko-dev-updater pushed a commit to marco-c/gecko-dev-comments-removed that referenced this pull request Oct 1, 2019
…reen_gl_context (from MortimerGoro:update_glutin_offscreen); r=jdm

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: f659d43bd403e4ac1305990ba704f23b4a6cd5e6

UltraBlame original commit: 7f9f301f0bb21e330116c34f393514bcf20bc451
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified that referenced this pull request Oct 1, 2019
…reen_gl_context (from MortimerGoro:update_glutin_offscreen); r=jdm

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: f659d43bd403e4ac1305990ba704f23b4a6cd5e6

UltraBlame original commit: 7f9f301f0bb21e330116c34f393514bcf20bc451
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified-and-comments-removed that referenced this pull request Oct 1, 2019
…reen_gl_context (from MortimerGoro:update_glutin_offscreen); r=jdm

<!-- Please describe your changes on the following line: -->
See servo/surfman#94 and servo/glutin#121

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

<!-- Either: -->
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: f659d43bd403e4ac1305990ba704f23b4a6cd5e6

UltraBlame original commit: 7f9f301f0bb21e330116c34f393514bcf20bc451
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.