diff options
author | Alyssa Rosenzweig <alyssa@rosenzweig.io> | 2023-03-19 22:12:09 -0400 |
---|---|---|
committer | Alyssa Rosenzweig <alyssa@rosenzweig.io> | 2023-05-07 09:10:37 -0400 |
commit | d72e1418ce4f66c42f20779f50f40091d3d310b0 (patch) | |
tree | e0bc5e07ceb3f08acffe7dd07e85c9611677bdd2 /docs | |
parent | 25646c7772c0bdda9ddf29490130e3a653d4c6aa (diff) | |
download | mesa-d72e1418ce4f66c42f20779f50f40091d3d310b0.tar.gz |
asahi: Implement transform feedback
This code was originally based on the Panfrost implementation, but has been
improved in a number of ways.
1. Transform feedback programs are dispatched generically with Gallium calls,
rather than emitting something hardware-specific. This is cleaner and
portable to future GPUs.
2. Transform feedback with indexed draws is now fixed, by lowering to an index
buffer pull.
3. Transform feedback with buffer overflows is now fixed, by correctly
bounds checking in transform feedback programs.
4. Transform feedback with strips/fans/loops are fixed, by correctly
tessellating to the underlying primitives as required by OpenGL.
5. Transform feedback with QUADS is fixed, by tessellating to triangles as
required by OpenGL.
That said, the code is still not in its final form.
1. It still does not support indirect draws. This will require a substantial
overhaul to do tracking on the GPU instead of the CPU. Currently we force
unroll indirect draws (slow but kosher in GL, treif in Vulkan). This isn't
hard to solve but I'm not going to duplicate the code until the algorithms
are otherwise complete because it's a lot easier to hack on the CPU versions
than the GPU versions.
2. It still does not support primitive restart. This has especially nasty
interactions with transform feedback. Again we force unroll to non-primitive
restart forms, again slow but kosher in GL but treif in Vulkan. This is a lot
harder to deal with. I sketched out something really nasty in my notebook
(hinging on efficient GPU prefix sums) but I'm not in a hurry to type this
out.
3. There will be interactions with geometry and tessellation shaders and I don't
think I can get the core code here future-proofed without actually bringing
up the new shader stages.
As such, this is a hard fork of the panfrost code for now, I'm not trying to
share the code (although it *would* clear out almost all of panfrost's transform
feedback related piglit failures).
Passes dEQP-GLES3.functional.transform_feedback.* and most of the relevant
piglits.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22891>
Diffstat (limited to 'docs')
-rw-r--r-- | docs/features.txt | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/docs/features.txt b/docs/features.txt index f8e88faf89d..34709295c87 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -54,7 +54,7 @@ GL 3.0, GLSL 1.30 --- all DONE: freedreno, i965, nv50, nvc0, r600, radeonsi, llv GL_EXT_draw_buffers2 (Per-buffer blend and masks) DONE (v3d, asahi) GL_EXT_texture_compression_rgtc DONE (all drivers that support GL_EXT_texture_snorm) GL_ARB_texture_rg DONE (v3d, lima, asahi) - GL_EXT_transform_feedback (Transform feedback) DONE (v3d) + GL_EXT_transform_feedback (Transform feedback) DONE (v3d, asahi) GL_ARB_vertex_array_object (Vertex array objects) DONE (v3d, vc4, lima, asahi) GL_EXT_framebuffer_sRGB (sRGB framebuffer format) DONE (v3d, vc4, lima, asahi) glClearBuffer commands DONE @@ -136,8 +136,8 @@ GL 4.0, GLSL 4.00 --- all DONE: freedreno/a6xx, i965/gen7+, nvc0, r600, radeonsi GL_ARB_texture_cube_map_array DONE (freedreno/a4xx+, i965/gen6+, nv50, softpipe, v3d) GL_ARB_texture_gather DONE (freedreno, i965/gen6+, nv50, softpipe, v3d, panfrost, asahi) GL_ARB_texture_query_lod DONE (freedreno, i965, nv50, softpipe, v3d, panfrost) - GL_ARB_transform_feedback2 DONE (freedreno/a3xx+, i965/gen6+, nv50, softpipe, v3d, panfrost) - GL_ARB_transform_feedback3 DONE (freedreno/a3xx+, i965/gen7+, softpipe, ) + GL_ARB_transform_feedback2 DONE (freedreno/a3xx+, i965/gen6+, nv50, softpipe, v3d, panfrost, asahi) + GL_ARB_transform_feedback3 DONE (freedreno/a3xx+, i965/gen7+, softpipe, asahi) GL 4.1, GLSL 4.10 --- all DONE: freedreno/a6xx, i965/gen7+, nvc0, r600, radeonsi, llvmpipe, virgl, zink, d3d12 @@ -156,7 +156,7 @@ GL 4.2, GLSL 4.20 -- all DONE: freedreno/a6xx, i965/gen7+, nvc0, r600, radeonsi, GL_ARB_compressed_texture_pixel_storage DONE (all drivers) GL_ARB_shader_atomic_counters DONE (freedreno/a5xx+, i965, softpipe, v3d, panfrost) GL_ARB_texture_storage DONE (all drivers) - GL_ARB_transform_feedback_instanced DONE (freedreno, i965, nv50, softpipe, v3d) + GL_ARB_transform_feedback_instanced DONE (freedreno, i965, nv50, softpipe, v3d, asahi) GL_ARB_base_instance DONE (freedreno, i965, nv50, softpipe, v3d) GL_ARB_shader_image_load_store DONE (freedreno/a5xx+, i965, softpipe, panfrost) GL_ARB_conservative_depth DONE (all drivers that support GLSL 1.30) |