[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