| 5491 | std::tuple<std::string, std::string, std::string, spv_target_env>>; |
| 5492 | |
| 5493 | CodeGenerator GetSizedVariableCodeGenerator(bool is_8bit, bool buffer_block) { |
| 5494 | CodeGenerator generator; |
| 5495 | generator.capabilities_ = "OpCapability Shader\nOpCapability Linkage\n"; |
| 5496 | generator.extensions_ = |
| 5497 | "OpExtension \"SPV_KHR_16bit_storage\"\nOpExtension " |
| 5498 | "\"SPV_KHR_8bit_storage\"\n"; |
| 5499 | generator.memory_model_ = "OpMemoryModel Logical GLSL450\n"; |
| 5500 | if (is_8bit) { |
| 5501 | generator.before_types_ = |
| 5502 | "OpMemberDecorate %char_buffer_block 0 Offset 0\n"; |
| 5503 | if (buffer_block) |
| 5504 | generator.before_types_ += "OpDecorate %char_buffer_block BufferBlock\n"; |
| 5505 | |
| 5506 | generator.types_ = R"(%void = OpTypeVoid |
| 5507 | %char = OpTypeInt 8 0 |
| 5508 | %char4 = OpTypeVector %char 4 |
| 5509 | %char_buffer_block = OpTypeStruct %char |
| 5510 | )"; |
| 5511 | } else { |
| 5512 | generator.before_types_ = |
| 5513 | "OpMemberDecorate %half_buffer_block 0 Offset 0\n" |
| 5514 | "OpMemberDecorate %short_buffer_block 0 Offset 0\n"; |
| 5515 | if (buffer_block) { |
| 5516 | generator.before_types_ += |
| 5517 | "OpDecorate %half_buffer_block BufferBlock\n" |
| 5518 | "OpDecorate %short_buffer_block BufferBlock\n"; |
| 5519 | } |
| 5520 | |
| 5521 | generator.types_ = R"(%void = OpTypeVoid |
| 5522 | %short = OpTypeInt 16 0 |
| 5523 | %half = OpTypeFloat 16 |
| 5524 | %short4 = OpTypeVector %short 4 |
| 5525 | %half4 = OpTypeVector %half 4 |
| 5526 | %mat4x4 = OpTypeMatrix %half4 4 |
| 5527 | %short_buffer_block = OpTypeStruct %short |
| 5528 | %half_buffer_block = OpTypeStruct %half |
| 5529 | )"; |
| 5530 | } |
| 5531 | generator.after_types_ = R"(%void_fn = OpTypeFunction %void |
| 5532 | %func = OpFunction %void None %void_fn |
| 5533 | %entry = OpLabel |
| 5534 | )"; |
| 5535 | generator.add_at_the_end_ = "OpReturn\nOpFunctionEnd\n"; |
| 5536 | return generator; |
| 5537 | } |
| 5538 | |
| 5539 | TEST_P(ValidateSizedVariable, Capability) { |
| 5540 | const std::string storage_class = std::get<0>(GetParam()); |