Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign uphandle external raw buffer #776
Conversation
|
|
|
Looks sane, thanks @JerryShih ! |
| // UpdateExternalBuffer(alloc.x, alloc.y, alloc.width, alloc.height, | ||
| // request.x, request.y, request.width, request.height, | ||
| // external_image_id, bpp, stride) | ||
| UpdateForExternalBuffer(u32, u32, u32, u32, u32, u32, u32, u32, ExternalImageId, u32, Option<u32>), |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
| @@ -342,10 +342,18 @@ pub enum RenderTargetMode { | |||
| } | |||
|
|
|||
| pub enum TextureUpdateOp { | |||
| // Create(image.width, image.height, format, filter, mode, buffer) | |||
This comment has been minimized.
This comment has been minimized.
kvark
Jan 26, 2017
Member
I believe, a better option than doing comments in this style is to use stronger types and/or the named fields, which are self-descriptive. E.g:
Create {
width: u32,
height: u32,
format: ImageFormat,
filter: TextureFilter,
mode: RenderTargetMode,
buffer: Option<Arc<Vec<u8>>>,
}
This comment has been minimized.
This comment has been minimized.
| // UpdateExternalBuffer(alloc.x, alloc.y, alloc.width, alloc.height, | ||
| // request.x, request.y, request.width, request.height, | ||
| // external_image_id, bpp, stride) | ||
| UpdateForExternalBuffer(u32, u32, u32, u32, u32, u32, u32, u32, ExternalImageId, u32, Option<u32>), |
This comment has been minimized.
This comment has been minimized.
kvark
Jan 26, 2017
Member
Do we have to pass the bpp with the update? It seems to me that this should be derived from the ImageFormat, which is either taken from the (already created) texture info.
This comment has been minimized.
This comment has been minimized.
JerryShih
Jan 28, 2017
Author
Contributor
If we try to find the texture info at renderer, we should reference to the texture structure in device[1]. Then, we need to have additional accessor for this texture structure and a bpp calculation function in render or device. Just pass a bpp is the simplest way.
| Create(u32, u32, ImageFormat, TextureFilter, RenderTargetMode, Option<Arc<Vec<u8>>>), | ||
| // Create(image.width, image.height, format, filter, mode, external_image_id) | ||
| CreateForExternalBuffer(u32, u32, ImageFormat, TextureFilter, RenderTargetMode, ExternalImageId), |
This comment has been minimized.
This comment has been minimized.
kvark
Jan 26, 2017
Member
It looks like the handling of Create versus CreateForExternalBuffer shares a lot of code. I think it would be cleaner to merge those by just having Option<ImageData> as the last parameter.
The Update cases are much different though, so it's reasonable to keep them separate.
This comment has been minimized.
This comment has been minimized.
| @@ -594,6 +600,42 @@ impl TextureCache { | |||
| } | |||
| } | |||
|
|
|||
| pub fn insert_image_border_updating_operation(src: &[u8], | |||
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
| pub fn insert_image_border_updating_operation(src: &[u8], | ||
| alloc_x: u32, | ||
| alloc_y: u32, | ||
| alloc_width: u32, |
This comment has been minimized.
This comment has been minimized.
kvark
Jan 26, 2017
Member
let's use rectangles (DeviceUintRect) here for both the allocation and request regions
This comment has been minimized.
This comment has been minimized.
| request_height: u32, | ||
| stride: Option<u32>, | ||
| bpp: u32, | ||
| op: &mut BorderUpdatingMethod) { |
This comment has been minimized.
This comment has been minimized.
kvark
Jan 26, 2017
Member
Let's pass this in as a closure. You only use it with temporary structs anyway, and using a closure would remove a lot of boilerplate.
This comment has been minimized.
This comment has been minimized.
| ImageData::ExternalBuffer(id) => { | ||
| match result.kind { | ||
| AllocationKind::TexturePage => { | ||
| let update_op = TextureUpdate { |
This comment has been minimized.
This comment has been minimized.
kvark
Jan 26, 2017
Member
let's move the assignment and self.pending_updates population to after the match, as in:
let update_op = match result.kind {...};
self.pending_updates(update_op);
This comment has been minimized.
This comment has been minimized.
JerryShih
Jan 28, 2017
Author
Contributor
Please check whether if it's still a problem after reordering the match expressions in my new patch.
|
These changes look good to me once the comments from @kvark are resolved. The texture cache in general could do with some refactoring and cleanup, but that can happen later (and include the improved ideas for border updating). |
|
Reviewed 4 of 7 files at r1, 1 of 3 files at r2, 2 of 2 files at r3. Comments from Reviewable |
|
This looks good - let's get it rebased and squashed, then we should be ready for merge (@kvark may want to do a final pass over it too). |
|
Review status: all files reviewed at latest revision, 7 unresolved discussions, some commit checks failed. webrender/src/internal_types.rs, line 345 at r1 (raw file): Previously, JerryShih (Jerry) wrote…
Done. webrender/src/internal_types.rs, line 348 at r1 (raw file): Previously, JerryShih (Jerry) wrote…
Done. webrender/src/texture_cache.rs, line 603 at r1 (raw file): Previously, JerryShih (Jerry) wrote…
Done. webrender/src/texture_cache.rs, line 606 at r1 (raw file): Previously, JerryShih (Jerry) wrote…
Done. webrender/src/texture_cache.rs, line 614 at r1 (raw file): Previously, JerryShih (Jerry) wrote…
Done. Comments from Reviewable |
caeb847
to
d7e6e83
|
Thanks @JerryShih ! |
|
@bors-servo r+ |
|
|
…ebase, r=kvark handle external raw buffer @nical @glennw @kvark Here are the patch sets to support external raw buffer. What I do here are: 1) extract texture border updating into utility function[[1]](https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-d52ac938b0c681e0d7bb3f946e47489fR603). 2) if the imageData is an external raw buffer, pass all parameters used by the utility function[[1]](https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-d52ac938b0c681e0d7bb3f946e47489fR603) to renderer. Then, replay that function at renderer with all passed parameters. 3) at the renderer side, use ExternalImageHandler[[2]](https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-f5062b694b9fe53fc1757ed483d577d9R959) to get the external buffer from WR client. [1] https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-d52ac938b0c681e0d7bb3f946e47489fR603 [2] https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-f5062b694b9fe53fc1757ed483d577d9R959 <!-- 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/776) <!-- Reviewable:end -->
|
@bors-servo clean retry force |
|
|
|
@bors-servo retry |
|
@bors-servo r+ |
|
|
|
|
@bors-servo retry |
|
@bors-servo r+ |
|
|
|
|
@bors-servo retry |
…ebase, r=glennw handle external raw buffer @nical @glennw @kvark Here are the patch sets to support external raw buffer. What I do here are: 1) extract texture border updating into utility function[[1]](https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-d52ac938b0c681e0d7bb3f946e47489fR603). 2) if the imageData is an external raw buffer, pass all parameters used by the utility function[[1]](https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-d52ac938b0c681e0d7bb3f946e47489fR603) to renderer. Then, replay that function at renderer with all passed parameters. 3) at the renderer side, use ExternalImageHandler[[2]](https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-f5062b694b9fe53fc1757ed483d577d9R959) to get the external buffer from WR client. [1] https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-d52ac938b0c681e0d7bb3f946e47489fR603 [2] https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-f5062b694b9fe53fc1757ed483d577d9R959 <!-- 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/776) <!-- Reviewable:end -->
|
Merging manually while bors is broken. |
JerryShih commentedJan 24, 2017
•
edited by larsbergstrom
#723
@nical @glennw @kvark
Here are the patch sets to support external raw buffer.
What I do here are:
[1]
https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-d52ac938b0c681e0d7bb3f946e47489fR603
[2]
https://github.com/servo/webrender/compare/master...JerryShih:issue-723-handle-external-raw-buffer-rebase?expand=1#diff-f5062b694b9fe53fc1757ed483d577d9R959
This change is