| |
| 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 |