75 Commits

Author SHA1 Message Date
auto-submit[bot]
ebe91c2a5c Reverts "[Impeller] adds a plus advanced blend for f16 pixel formats (#51589)" (flutter/engine#51741)
Reverts: flutter/engine#51589
Initiated by: jonahwilliams
Reason for reverting: draw vertices devicelab test is crashing due to SIGABRT in blend contents

![image](https://github.com/flutter/engine/assets/8975114/8bfaec63-29e9-43c2-8954-181d0ad1c413)

Original PR Author: gaaclarke

Reviewed By: {jonahwilliams}

This change reverts the following previous change:
fixes https://github.com/flutter/flutter/issues/142549

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-03-28 05:41:48 +00:00
gaaclarke
d96b1f7e73 [Impeller] adds a plus advanced blend for f16 pixel formats (flutter/engine#51589)
fixes https://github.com/flutter/flutter/issues/142549

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-03-27 23:48:24 +00:00
Chinmay Garde
6a151f5c40 [Impeller] Make masks type safe. (flutter/engine#51369)
Uses the utility added in https://github.com/flutter/engine/pull/51361

I counted the removal of 58 static casts. There was one addition made to the original utility however. Vulkan HPP was promoting all enums to its own mask type. This in itself is problematic but we got away with it because there was no one else doing this kind of promotion. Till we added our own utility. To avoid polluting the namespace with methods that may cause ambiguity, enums that are masks must explicitly be marked as maskable with `IMPELLER_ENUM_IS_MASK` in the `impeller` namespace.

No change in functionality.
2024-03-13 00:12:21 +00:00
Jonah Williams
1322186f32 [Impeller] add a per-frame trace event for heap usage on Vulkan. (flutter/engine#51246)
Part of https://github.com/flutter/flutter/issues/144617

Adds MemoryBudgetUsageMB which includes the MB of VMA allocated GPU and host memory, approximately per frame. This will be recorded in the devicelab and used to track how much memory pressure we're creating.

Split out from https://github.com/flutter/engine/pull/51187 since that was reverted (and doing big changes is a bad idea anyway).
2024-03-07 01:40:04 +00:00
auto-submit[bot]
e3e37f2bee Reverts "[Impeller] fold memory check into allocator_vk (#51187)" (flutter/engine#51243)
Reverts: flutter/engine#51187
Initiated by: jonahwilliams
Reason for reverting: unexpected benchmark regression

https://flutter-flutter-perf.skia.org/e/?queries=device_type%3DPixel_7_Pro%26sub_result%3D90th_percentile_frame_rasterizer_time_millis%26sub_result%3D99th_percentile_frame_rasterizer_time_millis%26sub_result%3Daverage_frame_rasterizer_time_millis%26sub_result%3Dworst_frame_rasterizer_time_millis%26test%3Dnew_gallery_impeller__transition_perf&selected=commit%3D396
Original PR Author: jonahwilliams

Reviewed By: {matanlurey}

This change reverts the following previous change:
Various cleanups to Vulkan allocator implementation:

1. Fixes https://github.com/flutter/flutter/issues/137454
2. Fold device transient cap check into allocator.
3. adds debug tracking for total memory usage in MB (a followup change needs to be made to driver to plumb it through)
4. Small cleanups to mock vulkan so an allocator can be created from it.
5. depth/stencil shouldn't be input attachments.

Part of https://github.com/flutter/flutter/issues/144617
2024-03-06 23:52:25 +00:00
Jonah Williams
749903e027 [Impeller] fold memory check into allocator_vk (flutter/engine#51187)
Various cleanups to Vulkan allocator implementation:

1. Fixes https://github.com/flutter/flutter/issues/137454
2. Fold device transient cap check into allocator.
3. adds debug tracking for total memory usage in MB (a followup change needs to be made to driver to plumb it through)
4. Small cleanups to mock vulkan so an allocator can be created from it.
5. depth/stencil shouldn't be input attachments.

Part of https://github.com/flutter/flutter/issues/144617
2024-03-06 20:10:55 +00:00
Jason Simmons
a72fddf954 [Impeller] Apply padding for alignment when doing HostBuffer::Emplace with a callback (flutter/engine#51221) 2024-03-06 18:58:46 +00:00
Jonah Williams
edb8430817 [Impeller] various StC fixes for GPU -> CPU readback plus BufferBindingGLES error (flutter/engine#50951)
More debugging for https://github.com/flutter/engine/pull/50856

Potentially related to https://github.com/flutter/flutter/issues/141472
2024-02-27 20:35:18 +00:00
Dan Field
e10db251ff [Impeller] Move impeller/image to impeller/playground/image (flutter/engine#50480)
Deletes usage in Scene of this code, which was the only non-test location that used it.

This code imports Skia based code to decompress PNG images, and it's not clear when we'd need it outside of tests at this point.

It is otherwise a pretty thin wrapper around a texture allocation.

Fixes https://github.com/flutter/flutter/issues/143194
2024-02-09 00:42:24 +00:00
gaaclarke
8a98a0be33 [Impeller] blur: removed ability to request out of bounds mip_counts (flutter/engine#50290)
b/323402168

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-02-02 20:44:54 +00:00
Nishant Kumar
f27cfea630 winding order from tesellator.h to formats.h (flutter/engine#49865)
i have removed WindingOrder from tesellator.h and moved it to formats.h . Fixes https://github.com/flutter/flutter/issues/138832

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2024-01-25 21:05:18 +00:00
Jonah Williams
31a5d5d5c9 [Impeller] use const std::unique_ptr ref for Sampler type. (flutter/engine#49974)
The backend specific sampler libraries hold a strong reference to the native sampler objects and never clear this cache. As a result of this, we don't theoretically need rendering commands to increment a shared_ptr ref count - instead the sampler library can provide the Sampler object as a const ref and guarantee that it continues to be valid.

This allows us to reduce the amount of refcount ops for commands that use samplers.

Additionally, the sampler library uses nullptr as a sentinel for failing to construct a sampler object. Since sampler already has an isValid member that is checked - we can replace this with a specific invalid object subtype.
2024-01-24 18:14:42 +00:00
Jonah Williams
2505092c79 [Impeller] remove frame counter that was unused in Vulkan allocator. (flutter/engine#49913)
This was from a previous attempt to reduce allocation pressure using per-thread pools, but they don't actually work since as soon as a pool needs to allocate a new block we end up locking on some vk device calls,
2024-01-22 22:35:13 +00:00
Jonah Williams
e7be989feb Reland: Encode directly to command buffer. (flutter/engine#49821)
The original change was reverted as it broke the GPU tracer reset logic. The previous logic assumed that the first started command buffer would also be the first submitted command buffer. With the direct encoding, this is no longer the case - so we shift the logic so that we reset query pools once at startup and then after the queries are finished being recorded.

This might actually be better in general since we should be doing less work in the frame workload.
2024-01-19 19:21:47 +00:00
auto-submit[bot]
a501e644c2 Reverts "[Impeller] Encode directly to command buffer for Vulkan." (flutter/engine#49818)
Reverts flutter/engine#49780
Initiated by: jonahwilliams
This change reverts the following previous change:
Original Description:
Part of https://github.com/flutter/flutter/issues/140804

Rather than using impeller::Command, the impeller::RenderPass records most state directly into the Vulkan command buffer. This should remove allocation/free overhead of the intermediary structures and make further improvements to the backend even easier. This required a number of other changes to the renderer:

1. The render pass holds a strong ptr to the context. This helps avoid locking continually while encoding, which is quite slow.
2. barriers need to be encoded on the _producing_ side, and not the consuming side. This is because we'll actually run the consuming code before the producing code. i.e. we transition to shader read at the end of a render pass instead of when binding.
3. I've updated the binding code to also provide the descriptor type so that we don't need to look it up from the desc. set.
4. I added a test render pass class that records commands.
2024-01-17 01:18:17 +00:00
Jonah Williams
97e3fdb511 [Impeller] Encode directly to command buffer for Vulkan. (flutter/engine#49780)
Part of https://github.com/flutter/flutter/issues/140804

Rather than using impeller::Command, the impeller::RenderPass records most state directly into the Vulkan command buffer. This should remove allocation/free overhead of the intermediary structures and make further improvements to the backend even easier. This required a number of other changes to the renderer:

1. The render pass holds a strong ptr to the context. This helps avoid locking continually while encoding, which is quite slow.
2. barriers need to be encoded on the _producing_ side, and not the consuming side. This is because we'll actually run the consuming code before the producing code. i.e. we transition to shader read at the end of a render pass instead of when binding.
3. I've updated the binding code to also provide the descriptor type so that we don't need to look it up from the desc. set.
4. I added a test render pass class that records commands.
2024-01-16 21:52:54 +00:00
gaaclarke
85d2ba69cf [Impeller]: new blur - adds mips for backdrop filters (flutter/engine#49607)
If the new blur flag is on and a blur is used as a backdrop filter, the
rendered texture will now have mipmaps which will make the downscaling
step of the blur have more signal (and thus be less shimmery).

issue: https://github.com/flutter/flutter/issues/140193
fixes: https://github.com/flutter/flutter/issues/140949

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide] and the [C++,
Objective-C, Java style guides].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I added new tests to check the change I am making or feature I am
adding, or the PR is [test-exempt]. See [testing the engine] for
instructions on writing and running engine tests.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I signed the [CLA].
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[C++, Objective-C, Java style guides]:
https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
[testing the engine]:
https://github.com/flutter/flutter/wiki/Testing-the-engine
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat
2024-01-12 14:18:06 -08:00
Jonah Williams
06ee89691e [Impeller] remove Buffer type and associated abstractions. (flutter/engine#49702)
Now that the HostBuffer isn't implementing Buffer, there is really no reason to have a Buffer/DeviceBuffer split. make BufferViews use a DeviceBuffer, and remove the data ptr from buffer views (as we can always reach into the device buffer).

Makes some other cleanups too, since we always use a std::shared_ptr<DeviceBuffer>, then we can eliminated the shared_from_this call for AsBufferView by making this a static method.
2024-01-12 20:22:11 +00:00
Dan Field
4681274469 [Impeller] Vulkan runtime effects/fragment program API (flutter/engine#49543)
Fixes https://github.com/flutter/flutter/issues/122823
Fixes https://github.com/flutter/flutter/issues/129659
Fixes https://github.com/flutter/flutter/issues/123741

This patch makes runtime stage/fragment program stuff work on Vulkan for Android.

It will need flutter/flutter#140976 for that to become a reality for flutter_tools users.

Compiling with relaxed Vulkan semantics still has an issue: shaders that use `sampler2D` with an explicitly set `location` on the `layout` will fail to compile with an error documented in https://github.com/flutter/flutter/issues/141219.

I think there might still be some issues with fragment programs on Vulkan, but this should at least be a good starting point and unblocks ink_sparkle.frag usage in the framework.

I've deleted some runtime_stage related code that would never get used - for example, enum related code that indicates we might support a bunch of data types that we do not and probably never will support in this API.
2024-01-11 02:25:05 +00:00
Jonah Williams
c18d6e3a08 [Impeller] reland: write directly to device buffer. (flutter/engine#49691)
Reland of https://github.com/flutter/engine/pull/49505

---

part of https://github.com/flutter/flutter/issues/140804

We can't use the existing host buffer abstraction as that requires us to collect all allocations up front. By itself, this isn't sufficient for #140804 , because we'll need a way to mark ranges as dirty and/or flush if we don't have host coherent memory. But by itself this change should be beneficial as we'll create fewer device buffers and should do less allocation in general.

The size of the device buffers is 1024 Kb, somewhat arbitrarily chosen.
2024-01-10 22:10:03 +00:00
auto-submit[bot]
6236178dac Reverts "[Impeller] have Hostbuffer write directly to block allocated device buffers." (flutter/engine#49688)
Reverts flutter/engine#49505
Initiated by: jonahwilliams
This change reverts the following previous change:
Original Description:
part of https://github.com/flutter/flutter/issues/140804

We can't use the existing host buffer abstraction as that requires us to collect all allocations up front. By itself, this isn't sufficient for #140804 , because we'll need a way to mark ranges as dirty and/or flush if we don't have host coherent memory. But by itself this change should be beneficial as we'll create fewer device buffers and should do less allocation in general.

The size of the device buffers is 1024 Kb, somewhat arbitrarily chosen.
2024-01-10 21:09:18 +00:00
Jonah Williams
eaae4c5d1a [Impeller] have Hostbuffer write directly to block allocated device buffers. (flutter/engine#49505)
part of https://github.com/flutter/flutter/issues/140804

We can't use the existing host buffer abstraction as that requires us to collect all allocations up front. By itself, this isn't sufficient for #140804 , because we'll need a way to mark ranges as dirty and/or flush if we don't have host coherent memory. But by itself this change should be beneficial as we'll create fewer device buffers and should do less allocation in general.

The size of the device buffers is 1024 Kb, somewhat arbitrarily chosen.
2024-01-10 17:18:07 +00:00
Dan Field
1255dfd26a Start wiring up fragment program for OpenGLES (flutter/engine#49347)
Makes fragment programs work for OpenGLES backend.

Fixes https://github.com/flutter/flutter/issues/113715
Fixes https://github.com/flutter/flutter/issues/105538
I cannot find a dedicated issue for this, but there probably is someone somewhere and I don't want to file a new one for it.
2024-01-02 22:11:05 +00:00
Dan Field
ae9289f5c1 [Impeller] Make IPLR files multi-platform (flutter/engine#49253)
This is part of the work towards supporting OpenGLES and Vulkan for runtime stage shaders.

Removes some redundant work we had around SkSL. Now only bundles the shaders we actually ask for from the command line.

@bdero, we should figure out if this is the right approach for flutter_gpu.

With this change, the IPLR format goes from having a root table of shader related information to a root table of shader information per `sksl`, `metal`, `opengles`, and `vulkan` platforms. 

This may end up allowing us to revert https://github.com/flutter/engine/pull/47278, but I'm not sure I understand all the implications of that at this point.

I have run some but not all tests locally.
2023-12-21 06:17:26 +00:00
Jonah Williams
5b67468e21 [Impeller] Compute ContextContentOptions key via bit manipulating (instead of hashing each property). (flutter/engine#48902)
The hash function we use for pipeline hashncash is actually pretty slow. Since all of the properties we hash on fit in 64 bits, we can compute a hash value directly. From local benchmarking this is about twice as fast, which still leaves quite a bit of room for future improvement (faster hashmap? not using a hashmap at all?)
2023-12-13 19:57:06 +00:00
Matan Lurey
e5799fc85c Migrate impeller/**.h to header guards. (flutter/engine#48962)
Automatically generated by https://github.com/flutter/engine/pull/48903.

Progress towards https://github.com/flutter/flutter/issues/133415.
2023-12-12 18:03:26 -08:00
Jonah Williams
3bef2b4693 [Impeller] dont allocate capture strings in release mode. (flutter/engine#48760)
I'm not exactly sure why, but this seems to stop the allocation of capture labels in release mode.

Fixes https://github.com/flutter/flutter/issues/138908
2023-12-08 21:55:58 +00:00
Jonah Williams
8b54eb6bf5 [Impeller] Store Buffer/Texture bindings in vector instead of map. (flutter/engine#48719)
Places the binding data in a vector, since they key was only meaningful on metal but not used anywhere. I don't think that we need to specificially handle the case where our own contents bind the same contents multiple times, but interested to discuss if folks disagree.
2023-12-06 19:32:41 +00:00
Jonah Williams
82a8b5ddcf [Impeller] Vulkan framebuffer fetch via VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS (flutter/engine#48458)
Support framebuffer fetch on devices that have the extension VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS which gives us a fairly easy way to add subpass self dependencies.

Part of https://github.com/flutter/flutter/issues/120223
2023-12-06 00:55:59 +00:00
Jonah Williams
8aeac570ad [Impeller] Prefer moving vertex buffer, place on command instead of binding object. (flutter/engine#48630)
Placing the vertex buffer on the binding object meant that we were actually paying 2x the size cost for it (one for vertex bindings, one for fragment bindings). By moving this object onto command itself, we reduce the size and avoid spliting up the command state in a weird way.

Also updates most of the contents to prefer moving the VertexBuffer.
2023-12-05 21:02:52 +00:00
Jonah Williams
7bad7a0150 [Impeller] Delete tessellation control/eval shader support. (flutter/engine#48649)
We have no plans to ever use these for anything.
2023-12-05 17:11:11 +00:00
Jonah Williams
4fae86b741 [Impeller] Document what some of this shader metadata is. (flutter/engine#48647)
ext_res_0 ?!! its just `binding` but for Metal.
2023-12-05 16:03:07 +00:00
Jonah Williams
02e3d985dc [Impeller] Move BufferView/Texture/Sampler when binding. (flutter/engine#48628)
Most of the time we are passing an rvalue into this functions anyway, so in theory moving should be faster. Right?
2023-12-04 23:53:06 +00:00
Dan Field
112e8a2d4b Remove some trivial forward declares from Impeller (flutter/engine#48635)
Towards https://github.com/flutter/flutter/issues/133417#issuecomment-1839273553

I'll request a test exemption for this as it's a semantics-only refactor.

There are still a bunch of other forward declares in Impeller that make things confusing for tooling, but some of those will require less trivial changes to interfaces.
2023-12-04 20:53:06 +00:00
Brandon DeRosier
c49cfdc9a9 [Flutter GPU] Texture binding, index binding, attachments, depth state. (flutter/engine#48386)
Now rendering textured 3D models!

* Combined depth+stencil attachment.
* Allow for multiple color attachments.
* Add blend mode configuration.
* Fix uniform ordering for vertex shaders.
* Texture binding and sampling options.
* Index buffer binding.
* Depth configuration.
2023-11-26 19:47:16 -08:00
Jonah Williams
811d365669 [Impeller] make host buffer state internally ref counted. (flutter/engine#48303)
std::shared_from_this is actually incredibly slow, and dominates the cost of host buffer allocation at 20x more expensive than the memcpy. We can remove the usage of shared_from_this by making an internal class hold the actual allocation/buffer state instead.

### Before

![image](https://github.com/flutter/engine/assets/8975114/d6cd69c7-de1d-4b05-bd76-1d9a3353e350)

146 ms / 647ms = ~20%
### After

33 ms / 540 ms = ~6%

![image](https://github.com/flutter/engine/assets/8975114/e624dd94-9718-404a-a0f8-b359df9f0109)
2023-11-22 03:24:18 +00:00
Jonah Williams
6da29df7ee [Impeller] Clang tidy even more (flutter/engine#48102)
Also removes alot of includes of fml macros, which I know is always safe to remove.
2023-11-16 23:15:00 +00:00
Jim Graham
9a968220c3 [Impeller] Make IsEmpty methods on Rect and Size NaN-aware (flutter/engine#47725)
Removes unused or redundant overloads and fixes the IsEmpty method on Size to be both simpler (2 comparisons vs. 4) and NaN-aware. Rect automatically uses the new code via delegation to the Size object.
2023-11-07 21:10:13 +00:00
Jonah Williams
f821ed1550 [Impeller] Fix EntityPassTarget::Flip with implict MSAA. (flutter/engine#47701)
This allows backdrop filters to work with GLES and MSAA.

The swap implementation was only swapping out the resolve texture. But with implicit msaa resolve, the resolve texture and msaa texture are the same - so both need to be swapped.

Fixes https://github.com/flutter/flutter/issues/137301
2023-11-06 18:56:07 +00:00
Brandon DeRosier
480a99ac7e [Impeller] Include cstdint everywhere that uint32_t is used. (flutter/engine#47533)
Sprinkle cstdint everywhere that it's used. Unblocks the next impeller-cmake bump.

Ran into include issues during the build for the most recent impeller-cmake bump: https://github.com/bdero/impeller-cmake/pull/20

Going to add an optional libcxx STL build to help avoid stuff like this later (in the AAOS action items).
2023-11-01 01:42:14 +00:00
Chinmay Garde
04a5b59d59 [Impeller] Remove use of FML_DISALLOW_<FOO> macros in Impeller. (flutter/engine#47307)
Really not convinced this is easier to read but maybe I just need to get used to it. Besides, good to just stick to the style guide uniformly.

Followup from https://github.com/flutter/engine/pull/47278#discussion_r1371971876

Can do this for the rest of the engine and remove the macros if this is fine.
2023-10-25 17:43:24 +00:00
chunhtai
ce34c72049 [Impeller] Curve components in stroke path use start directions as their initial offsets (flutter/engine#46203)
The golden changes should test the change 

fixes https://github.com/flutter/flutter/issues/135225

This is what it should look like
![image](https://github.com/flutter/engine/assets/47866232/21df1ff5-95c5-4f2d-a5ae-97e06b6ee3b4)

but because the first point offset uses the direction to the second point, the line draws like this
![image](https://github.com/flutter/engine/assets/47866232/bbd1204d-cb92-4d6b-9c83-c8c76db4c946)

so it miss the yellow part( the reason the missing pixel in the original issue) and overdraw the purple part
![image](https://github.com/flutter/engine/assets/47866232/6f01f06f-d737-47bf-a4a7-bd0096308849)

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2023-10-24 19:20:56 +00:00
chunhtai
e333e342c8 Revert "[Impeller] Fixes stroke path geometry that can draw outside o… (flutter/engine#46334)
…f path if the path ends at sharp turn. (#45252)"

This reverts commit 5238bbae830c11247ae6cc5989e8ce8ced59c24d.

introduced a regression
https://github.com/flutter/flutter/issues/135225

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2023-09-27 22:59:08 +00:00
gaaclarke
0a381989a4 Revert "[Impeller] Patch the compiler to account for subpass inputs and PSO metadata." (flutter/engine#45777)
Reverts flutter/engine#45739
fixes https://github.com/flutter/flutter/issues/134666
2023-09-13 18:46:14 +00:00
chunhtai
5238bbae83 [Impeller] Fixes stroke path geometry that can draw outside of path if the path ends at sharp turn. (flutter/engine#45252)
Fixes https://github.com/flutter/flutter/issues/133032

The issue is that when we draw a line we always try to draw a complete rectangle from point 1 to point2 before drawing the join and the next line
![Untitled drawing (7)](https://github.com/flutter/engine/assets/47866232/c51aa4a8-bd8e-4764-9941-4e2968b4fb8e)

This becomes a problem if there is a sharp turn
![Untitled drawing (6)](https://github.com/flutter/engine/assets/47866232/2b743792-52b7-402d-b2e8-f08ed47c0943)

![Untitled drawing (5)](https://github.com/flutter/engine/assets/47866232/794a75c9-5e87-4548-a264-7dd9cf088ae7)

Notice there will be a slight over drawing at the bottom.

The solution then is to not draw the rect first before drawing the join. It will be the join's responsibility to draw the complete the rect from the line start to the join.

This should also save a lot of repeatedly drawing during the join
![rect](https://github.com/flutter/engine/assets/47866232/24802df6-69b5-4543-8d09-fcfbff4cedbb)

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2023-09-13 17:27:04 +00:00
Chinmay Garde
6631e24259 [Impeller] Patch the compiler to account for subpass inputs and PSO metadata. (flutter/engine#45739)
Towards https://github.com/flutter/flutter/issues/128911

Drive by fixes https://github.com/flutter/flutter/issues/123795
2023-09-12 23:39:16 +00:00
Brandon DeRosier
4e8b7c4afa [Impeller] Document the capabilities. (flutter/engine#45253)
Add docstrings for the capabilities. Include examples/extra detail for the more confusing concepts.

Also renames a couple of capabilities for consistency with format terminology:
* SupportsDecalTileMode -> SupportsDecalSamplerAddressMode
* SupportsMemorylessTextures -> SupportsDeviceTransientTextures

PR is built on https://github.com/flutter/engine/pull/45240 (waiting for tree to reopen).
2023-08-29 23:42:56 +00:00
Brandon DeRosier
2e61f4d1a8 [Impeller] Reland debug captures and inspector. (flutter/engine#45094)
Original PR: https://github.com/flutter/engine/pull/43764
2023-08-25 15:13:01 -07:00
Zachary Anderson
328f1fb459 Revert "[Impeller] Add debug captures and inspector." (flutter/engine#45062)
Reverts flutter/engine#43764

Broke the wide gamut test on framework CI
https://github.com/flutter/flutter/pull/133255


https://ci.chromium.org/ui/p/flutter/builders/prod/Mac_ios%20wide_gamut_ios/3186/overview
2023-08-24 08:50:42 -07:00
Jonah Williams
3959803727 [Impeller] Don't place vertex buffer bindings in the Binding map. (flutter/engine#45040)
The metal backend is the only backend that doesn't treat binding the vertex buffer specially. For the GLES and Vulkan backend, we can instead pull it out of the cmd map entirely.

This will make it easier to partially inline the map into the bindings object.

https://github.com/flutter/flutter/issues/133199
2023-08-24 15:41:47 +00:00