-
Notifications
You must be signed in to change notification settings - Fork 175
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
feature: Renderer Framebuffer type #1637
base: master
Are you sure you want to change the base?
Conversation
5243a78
to
66f198f
Compare
Have you seen this fix pop-os/cosmic-comp#1078, or any similar issues, or are the synchronization issues this fixes currently theoretical and not reproducible? |
Yes I could reproduce it and the first commit already fixed that, given that this synchronizes the imports. The second commit fixes synchronization across the board for shared contexts, but we haven't run into this in cosmic-comp as we don't bind shared-textures, but just render them. |
Not having an |
Needing a |
There's a CI failure, but it looks simple enough. I like changing I guess I might need to think about it for a while before I have any sense if the |
66f198f
to
cfd0cb2
Compare
https://morestina.net/blog/1868/self-referential-types-for-fun-and-profit was the inspiration for this once I realized that this is simply self-referential. Though I'll leave seeing though those lifetime to you. I have stared long enough at the code to be confident, that it is sound, but I would really like somebody to come to the same conclusion. 😅 |
I think smithay/src/backend/renderer/element/texture.rs Lines 594 to 597 in fe31867
|
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #1637 +/- ##
==========================================
- Coverage 19.33% 19.31% -0.02%
==========================================
Files 171 171
Lines 28375 28391 +16
==========================================
Hits 5485 5485
- Misses 22890 22906 +16
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
5786ade
to
29d7079
Compare
frame: Option<<<R::Device as ApiDevice>::Renderer as RendererSuper>::Frame<'frame, 'buffer>>, | ||
framebuffer: | ||
Option<AliasableBox<<<R::Device as ApiDevice>::Renderer as RendererSuper>::Framebuffer<'frame>>>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There should probably be a comment mentioning that frame
borrows framebuffer
, and the order of the fields should be preserved to maintain the drop order.
Okay, after reading through https://morestina.net/blog/1868/self-referential-types-for-fun-and-profit, and looking through that part of the code here, I understand why this makes the struct self-referential, and it seems like a relatively straightforward case of that. As the article mentions, So I think that part of the code looks correct, as does everything else here. Alternatives:
So overall, this seems like a good approach. Hopefully Rust will have a better way to deal with self-referential types at some point. |
Superseeds #1616.
Original description:
I lied, I did the refactor. The changes to
Renderer
andBind
are fairly small, however the fallout was huge, but since none of this compiles without all the other changes, I wasn't sure how to split this apart further. Please excuse the giant PR/commit everybody.