[Mesa-dev] v3d: Difference between TransformFeedback Gallium <-> Vulkan

LCID Fire lcid-fire at gmx.net
Mon Aug 26 07:01:59 UTC 2019


For a few weeks now I am working on implementing Vulkan for VideoCore 6 AKA 42 (using V3D/DRM). Don't hold you breath ;)

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.
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.
 
So far my idea would be to implement TF similar to Intel and instead of iterating over "streamout targets" I would iterate XFBs.
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.
 
Any information would be appreciated.


More information about the mesa-dev mailing list