glsl: always enable transform feedback mode when xfb_stride defined
This enables in shader defined transform feedback mode even if the only place xfb_stride is defined is on the global out. We don't worry about xfb_buffer since Issue 22 c) in the spec says: "If the shader has an "xfb_buffer" qualifier identifying a buffer, but doesn't declare "xfb_offset" on anything associated with it, what happens? ... variables not qualified with "xfb_offset" are not captured, which makes the associated "xfb_buffer" qualifier irrelevant." Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -113,6 +113,16 @@ process_xfb_layout_qualifiers(void *mem_ctx, const gl_shader *sh,
|
||||
{
|
||||
bool has_xfb_qualifiers = false;
|
||||
|
||||
/* We still need to enable transform feedback mode even if xfb_stride is
|
||||
* only applied to a global out. Also we don't bother to propagate
|
||||
* xfb_stride to interface block members so this will catch that case also.
|
||||
*/
|
||||
for (unsigned j = 0; j < MAX_FEEDBACK_BUFFERS; j++) {
|
||||
if (sh->TransformFeedback.BufferStride[j]) {
|
||||
has_xfb_qualifiers = true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach_in_list(ir_instruction, node, sh->ir) {
|
||||
ir_variable *var = node->as_variable();
|
||||
if (!var || var->data.mode != ir_var_shader_out)
|
||||
|
Reference in New Issue
Block a user