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

Marek Olšák maraeo at gmail.com
Tue Mar 17 12:55:08 PDT 2015


Did you mean "Khronos Public Bugzilla"?

Marek

On Tue, Mar 17, 2015 at 7:58 PM, Ian Romanick <idr at freedesktop.org> wrote:
> 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