[Mesa-dev] Spec bug? Transform feedback after tessellation control shader

Ian Romanick idr at freedesktop.org
Tue Mar 17 11:58:56 PDT 2015


On 03/17/2015 11:33 AM, Marek Olšák wrote:
> Hi,
> 
> The GL 4.5 Core spec is inconsistent. The "11.1.2.1 Output Variables"
> section says that transform feedback is allowed after a tessellation
> control shader if a tessellation evaluation shader isn't present:
> 
> "Each program object can specify a set of output variables from one
> shader to be recorded in transform feedback mode (see section 13.2).
> The variables that can be recorded are those emitted by the first
> active shader, in order, from the following list:
> * geometry shader
> * tessellation evaluation shader
> * tessellation control shader
> * vertex shader"
> 
> Even glTransformFeedbackVaryings allows it:
> 
> "If the set of output variables to record in transform feedback mode
> is specified by TransformFeedbackVaryings, a program will fail to link
> if:
> * the count specified by TransformFeedbackVaryings is non-zero, but the
> program object has no vertex, tessellation control, tessellation evaluation, or
> geometry shader;"
> 
> However, the "13.2 Transform Feedback" section doesn't mention any
> tessellation control shader:
> 
> "The data captured in transform feedback mode depends on the active
> programs on each of the shader stages. If a program is active for the
> geometry shader stage, transform feedback captures the vertices of
> each primitive emitted by the geometry shader. Otherwise, if a program
> is active for the tessellation evaluation shader stage, transform
> feedback captures each primitive produced by the tessellation
> primitive generator, whose vertices are processed by the tessellation
> evaluation shader. Otherwise, transform feedback captures each
> primitive processed by the vertex shader."
> 
> Also, glBeginTransformFeedback doesn't allow GL_PATCHES, which is the
> only output primitive type of the tessellation control shader:
> 
> "primitiveMode must be TRIANGLES, LINES, or POINTS, and specifies the
> output type of primitives that will be recorded into the buffer
> objects bound for transform feedback"

And to make matters worse, the ARB_tessellation_shader spec has the
following issue.  The resolution of this issue seems to contradict the
rest of the extension spec.

    (8) Should coupling of tessellation control and evaluation shaders be
        required?

      RESOLVED:  No.  A tessellation control shader without an evaluation
      shader might be used in conjunction with transform feedback to generate
      regular transformed patches.  Also, if the set of patches provided by
      the application is already in a form usable by the tessellator, the
      tessellation control shader may be bypassed.  In this use case, the
      application would be required to provide default tessellation levels via
      the PatchParameterfv API, since no shader would be available to compute
      them.

      It may be useful to have a patch produced by a tessellation control
      shader to be fed directly to a geometry shader that performs some
      operation on full patches, rather than individual triangles of a
      tessellated patch.  However, such capability is not provided in this
      extension.

This definitely smells like a spec bug.  You should submit a bug in the
internal Khronos bugzilla and CC my @intel address.

> The question is: Is transform feedback really allowed after the
> tessellation control shader? I hope not, because our hardware can't do
> it.
> 
> Thanks,
> 
> Marek
> 
> PS: The spec mentions "tesellation shader" twice. There is no
> "tesellation shader" in OpenGL even if you ignore the bad spelling.
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list