|
8a50b42b
|
2020-10-24T19:29:12
|
|
Metal: Convert index & vertex format on GPU when possible.
- When converting vertex buffer:
- if there is no render pass active, use compute shader to convert.
- if there is a render pass active and device supports explicit memory
barrier then convert the buffer in vertex shader with direct buffer
write and insert a memory barrier.
- if there is a render pass active and device doesn't support explicit
memory barrier then convert the buffer on CPU.
Bug: angleproject:2634
Change-Id: I5346e3a2adb855f40e46a3912d9db404a4482e0f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2434025
Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
|
|
37e84651
|
2020-09-27T13:47:36
|
|
Metal: Partially implement EXT_debug_marker
Partially implemented to make it easier to debug.
Only debug group is supported for now.
Bug: angleproject:2634
Change-Id: I029dd4283790fb57a6964aad89c37d092e3378e5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2433331
Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
0e5e6078
|
2020-09-26T23:31:24
|
|
Metal: Use MipmapNativeLevel class to store native mip lvl
This is to avoid wrong native level in Metal, for example, not taking
into account the OpenGL base level.
Bug: angleproject:2634
Change-Id: I3a7a3ac41bdbd91a47755bb4ca11bd579c182e04
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2433326
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
6dfd855a
|
2020-03-25T03:02:08
|
|
Metal: Implement fence sync
Bug: angleproject:2634
Change-Id: If1f7bb12c0e661c8e4b5677798a92440995819e4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2433325
Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
6136cbcb
|
2020-09-23T21:31:05
|
|
Metal: Implement transform feedback
- XFB is currently emulated by writing to storage buffers.
- Metal doesn't allow vertex shader to both write to storage buffers and
to stage output (i.e clip position). So if GL_RASTERIZER_DISCARD is
NOT enabled, the draw with XFB enabled will have 2 passes:
+ First pass: vertex shader writes to XFB buffers + not write to stage
output + disable rasterizer.
+ Second pass: vertex shader writes to stage output (i.e.
[[position]]) + enable rasterizer. If GL_RASTERIZER_DISCARD is
enabled, the second pass is omitted.
+ This effectively executes the same vertex shader twice. TODO:
possible improvement is writing vertex outputs to buffer in first
pass then re-use that buffer as input for second pass which has a
passthrough vertex shader.
- If GL_RASTERIZER_DISCARD is enabled, and XFB is enabled:
+ Only first pass above will be executed, and the render pass will use
an empty 1x1 texture attachment since rasterization is not needed.
- If GL_RASTERIZER_DISCARD is enabled, but XFB is NOT enabled:
+ we still enable Metal rasterizer.
+ but vertex shader must emulate the discard by writing gl_Position =
(-3, -3, -3, 1). This effectively moves the vertex out of clip
space's visible area.
+ This is because GLSL still allows vertex shader to write to stage
output when rasterizer is disabled. However, Metal doesn't allow
that. In Metal, if rasterizer is disabled, then vertex shader must
not write to stage output.
- See src/libANGLE/renderer/metal/doc/TransformFeedback.md for more
details.
Bug: angleproject:2634
Change-Id: I6c700e031052560326b7f660ee7597202d38e6aa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2408594
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
|
|
1677cf14
|
2020-09-13T20:14:59
|
|
Metal: Implement Uniform buffers
Uniform buffer is implemented in two forms:
- If number of ubo used in shader program is low, each buffer will use
one discrete Metal buffer slot.
- If number of ubo used is large, they will be embedded into one Metal
argument buffer. Argument buffer is similar to Vulkan descriptor set.
This is due to limit of number of Metal's discrete buffer slots which
is only 31 and over half of them are already used by vertex
attributes, default uniforms, driver uniforms, etc. The downside is
that whenever a buffer binding is changed, the argument buffer must be
updated also.
Added empty TransformFeedbackMtl implementation to enable ES3 context
creation on Metal.
Bug: angleproject:2634
Change-Id: I69325696fac735cb45ab88ab55468c0991abc317
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2408593
Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
|
|
bdecaf33
|
2020-08-04T20:16:27
|
|
Metal: Implement PBO.
Bug: angleproject:2634
Change-Id: I77f085227298bf46361825d1886e04830dc9987a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2336558
Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
50704dc3
|
2020-08-04T12:08:00
|
|
Metal: Implement EXT_occlusion_query_boolean.
- Metal's occlusion(called visibility) query operates per render pass.
Implementation details are in
src/libANGLE/renderer/metal/doc/OcclusionQueries.md.
- New tests:
- OcclusionQueriesTest.ClearNotCounted.
- OcclusionQueriesTest.MultiQueries (failure on OpenGL/D3D11
back-end).
Bug: angleproject:2634
Change-Id: Idd1327b5472d0e8c2b69307a7f04a1da4a847a40
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2336121
Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com>
Reviewed-by: back sept 10 - Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
|
|
91004654
|
2020-08-25T01:08:00
|
|
Metal: Implement ANGLE_robust_resource_initialization.
Bug: angleproject:4929
Bug: angleproject:2634
Change-Id: Ib99b810059420e69d939f1bbb644c2b95de62850
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2374826
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
|
|
acda9dde
|
2020-08-08T18:36:57
|
|
Metal: Implement GL_OES_texture_3D
Bug: angleproject:2634
Change-Id: I8c46493ac28fe1bbfdb29ee3a60b23076bbc4c0c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2336119
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
|
|
113c5e29
|
2020-05-11T22:49:03
|
|
Metal: deferred render command encoder creation.
MTLRenderCommandEncoder creation will be deferred until a render pass
ends.
Commands will be stored into a back-end owned buffer during render pass.
At the end of the render pass, those commands will be re-encoded into an
actual MTLRenderCommandEncoder.
Benefits:
- Useful for future implementation of occlusion query buffer where it
could be allocated right before the end of a render pass to be big
enough to store all queries within the render pass.
- It's possible to change load option (deferred clear) as long as there
is no draw call issued yet. This is not implemented yet.
- Possibility of commands' re-ordering.
Bug: angleproject:2634
Change-Id: I1348716aa882c0540d9120bf175d8dac13fb58bd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2193196
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
d1860ea1
|
2019-11-19T23:04:00
|
|
Metal: support OES_depth_texture
Also added Depth32 & Depth16 texture data upload tests.
Bug: angleproject:2634
Change-Id: I103f1cda1dc915f0dc8b04f7aaa2d8c0f9220cda
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1919281
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
e5b474c6
|
2019-11-19T23:04:00
|
|
Metal: support ANGLE_instance_arrays/EXT_instance_arrays
Also added TRIANGLE_FAN & LINE_LOOP instanced draws test cases.
Bug: angleproject:2634
Change-Id: I84740a7221ab49710cf23767c81fa2d303aad364
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1919280
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
05af7590
|
2019-11-20T01:04:00
|
|
Metal: Fix FramebufferMtl's read-after-delete
Due to late verification, ContextMtl might call onFinishedDrawingToFrameBuffer()
on a deleted framebuffer object inside syncState()
Fix:
- Switch to call onStartedDrawingToFrameBuffer() on new FBO instead of
calling onFinishedDrawingToFrameBuffer() on old (and possibly deleted)
FBO.
- Also discard framebuffer only takes effect per render pass. The
discard flag will be reset when render pass starts.
Bug: angleproject:4144
Change-Id: I7c6c96862892f1c241ce4af3b61862fa4b710a94
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1924101
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
fe26bae4
|
2019-10-29T18:38:53
|
|
Metal backend implementation pt 2
This is without Metal specific shader translator implemented yet.
Bug: angleproject:2634
Change-Id: I95d589442251c9ba111bd05a2dc379a36739046c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1855069
Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|