[Mesa-dev] Difference between TransformFeedback Gallium <-> Vulkan (V3D)

Daniel Stone daniel at fooishbar.org
Mon Aug 26 11:42:57 UTC 2019


Hi Andreas,

On Sun, 25 Aug 2019 at 21:11, Andreas Bergmeier <abergmeier at gmx.net> wrote:
> For a few weeks now I am working on implementing Vulkan for VideoCore 6 AKA 42 (using V3D/DRM). Don't hold you breath ;)

Great! I can't say much about the specifics of VideoCore hardware, but
at least for some of the common parts ...

> Currently I am trying to understand what is necessary or how to interact with V3D. So I am looking at TransformFeedback because it interacts with quite a few other parts of the pipeline and still seems less mangled into the big logic than other features. So I am comparing how Gallium (V3D) is handling TF in the state tracker VS how Vulkan (Intel) is handling the Extension.
>
> The following is what I so far think I gathered:
> 1. GV3D is handling TransformFeedback directly with other bound parts of the pipeline (e.g. `emit_state` in _v3dx_emit.c_). It seems to look into the shader and associated TF specs. It seems to use "streamout targets", although I do not yet understand what these are really. Then it passes all the offsets, indices and finally resources to V3D.

'Stream out' is basically just what DirectX calls its version of
transform feedback. The idea is the same: capturing output from
vertex/geometry stages.

> 2. The Vulkan Extension only knows about CounterBuffers and iterates over these. Intel seems to call TF -> XF? and subsequently the buffers XFB. Have also not yet gathered what is the difference and what all the gazillion acronyms mean.

'XFB' is the most widely-used acronym for transform, as 'trans' or
'cross' can abbreviate to X. 'TF' is not as widely used as XFB.

> So far my idea would be to implement TF similar to Intel and instead of iterating over "streamout targets" I would iterate XFBs.

So these would really be the same thing. A streamout target is where
the VC4 writes its output stream of data from these shading stages,
and a counter buffer is where Vulkan writes the output stream of data
from these shading stages.

> The problem with this approach is, that it will not be easy to mimic `cl_emit` calls similar to Gallium.
> My question now is which parts of V3D emits have a dependency.
>
> I would assume that I can move TRANSFORM_FEEDBACK_SPECS and TRANSFORM_FEEDBACK_ENABLE to cmd state flush in Vulkan.
> `vkCmdBeginTransformFeedbackEXT` shoudl then only need TRANSFORM_FEEDBACK_BUFFER and TRANSFORM_FEEDBACK_OUTPUT_ADDRESS.
>
> Sorry if this is a bit confusing - I am really just trying to figure this out one by one.

This is getting more into the specifics of how you've structured the
driver, as well as hardware specifics, but it sounds about right to
me.

Cheers,
Daniel


More information about the mesa-dev mailing list