blob: e3a514b16532000d93e7f0b7a9f7008d304465ed [file] [log] [blame]
case mismatch_number_of_declarations
version 310 es
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable1;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable1;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable1;
mediump float variable2;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable1 + variable2);
}
""
end
case mismatch_order
version 310 es
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable1;
mediump float variable2;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable1 + variable2;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable2;
mediump float variable1;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable1 + variable2);
}
""
end
case mismatch_type
version 310 es
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump vec2 variable;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable.y;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable);
}
""
end
case mismatch_member_name
version 310 es
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable1;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable1;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable2;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable2);
}
""
end
case mismatch_member_unsized_sized_array
version 310 es
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable[];
};
out mediump float vtx_val;
void main()
{
vtx_val = variable[0];
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable[1];
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable[0]);
}
""
end
case mismatch_member_array_size
version 310 es
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable[1];
};
out mediump float vtx_val;
void main()
{
vtx_val = variable[0];
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable[2];
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable[0]);
}
""
end
case mismatch_with_and_without_instance_name
version 310 es
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
} instanceName;
out mediump float vtx_val;
void main()
{
vtx_val = instanceName.variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable);
}
""
end
case mismatch_block_array_size
version 310 es
desc "Shader storage block mismatch: different number of declarations"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
expect link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
} instanceName[1];
out mediump float vtx_val;
void main()
{
vtx_val = instanceName[0].variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
} instanceName[2];
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + instanceName[0].variable + instanceName[1].variable);
}
""
end
case ambiguous_variable_name_1
version 310 es
desc "Unnamed shader storage block variable and global variable with identical names"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
expect compile_or_link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
float variable;
layout(binding=0) buffer BufferBlockName
{
mediump float variable;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val);
}
""
end
case ambiguous_variable_name_2
version 310 es
desc "Two unnamed shader storage blocks with variables with identical names"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 1
expect compile_or_link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockNameA
{
mediump float variable;
};
layout(binding=1) buffer BufferBlockNameB
{
mediump float variable;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val);
}
""
end
case ambiguous_variable_name_3
version 310 es
desc "Two unnamed shader storage blocks in different stages with variables with identical names"
require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0
require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0
# language to make link error explicitly defined. ("Within an interface, ...")
require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
expect link_fail
vertex ""
#version 310 es
${VERTEX_DECLARATIONS}
layout(binding=0) buffer BufferBlockNameA
{
mediump float variable;
};
out mediump float vtx_val;
void main()
{
vtx_val = variable;
${VERTEX_OUTPUT}
}
""
fragment ""
#version 310 es
precision mediump float;
${FRAGMENT_DECLARATIONS}
layout(binding=1) buffer BufferBlockNameB
{
mediump float variable;
};
in mediump float vtx_val;
void main()
{
${FRAG_COLOR} = vec4(vtx_val + variable);
}
""
end