1fd4e5da5Sopenharmony_ci// Copyright (c) 2018 Google LLC.
2fd4e5da5Sopenharmony_ci//
3fd4e5da5Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
4fd4e5da5Sopenharmony_ci// you may not use this file except in compliance with the License.
5fd4e5da5Sopenharmony_ci// You may obtain a copy of the License at
6fd4e5da5Sopenharmony_ci//
7fd4e5da5Sopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
8fd4e5da5Sopenharmony_ci//
9fd4e5da5Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software
10fd4e5da5Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS,
11fd4e5da5Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fd4e5da5Sopenharmony_ci// See the License for the specific language governing permissions and
13fd4e5da5Sopenharmony_ci// limitations under the License.
14fd4e5da5Sopenharmony_ci
15fd4e5da5Sopenharmony_ci#include <string>
16fd4e5da5Sopenharmony_ci#include <tuple>
17fd4e5da5Sopenharmony_ci
18fd4e5da5Sopenharmony_ci#include "gmock/gmock.h"
19fd4e5da5Sopenharmony_ci#include "test/val/val_fixtures.h"
20fd4e5da5Sopenharmony_ci
21fd4e5da5Sopenharmony_cinamespace spvtools {
22fd4e5da5Sopenharmony_cinamespace val {
23fd4e5da5Sopenharmony_cinamespace {
24fd4e5da5Sopenharmony_ci
25fd4e5da5Sopenharmony_ciusing ::testing::HasSubstr;
26fd4e5da5Sopenharmony_ci
27fd4e5da5Sopenharmony_ciusing ValidateVersion = spvtest::ValidateBase<
28fd4e5da5Sopenharmony_ci    std::tuple<spv_target_env, spv_target_env, std::string, bool>>;
29fd4e5da5Sopenharmony_ci
30fd4e5da5Sopenharmony_ciconst std::string vulkan_spirv = R"(
31fd4e5da5Sopenharmony_ciOpCapability Shader
32fd4e5da5Sopenharmony_ciOpMemoryModel Logical GLSL450
33fd4e5da5Sopenharmony_ciOpEntryPoint Fragment %func "func"
34fd4e5da5Sopenharmony_ciOpExecutionMode %func OriginUpperLeft
35fd4e5da5Sopenharmony_ci%void = OpTypeVoid
36fd4e5da5Sopenharmony_ci%functy = OpTypeFunction %void
37fd4e5da5Sopenharmony_ci%func = OpFunction %void None %functy
38fd4e5da5Sopenharmony_ci%1 = OpLabel
39fd4e5da5Sopenharmony_ciOpReturn
40fd4e5da5Sopenharmony_ciOpFunctionEnd
41fd4e5da5Sopenharmony_ci)";
42fd4e5da5Sopenharmony_ci
43fd4e5da5Sopenharmony_ciconst std::string opencl_spirv = R"(
44fd4e5da5Sopenharmony_ciOpCapability Addresses
45fd4e5da5Sopenharmony_ciOpCapability Kernel
46fd4e5da5Sopenharmony_ciOpCapability Linkage
47fd4e5da5Sopenharmony_ciOpMemoryModel Physical32 OpenCL
48fd4e5da5Sopenharmony_ci)";
49fd4e5da5Sopenharmony_ci
50fd4e5da5Sopenharmony_cistd::string version(spv_target_env env) {
51fd4e5da5Sopenharmony_ci  switch (env) {
52fd4e5da5Sopenharmony_ci    case SPV_ENV_UNIVERSAL_1_0:
53fd4e5da5Sopenharmony_ci    case SPV_ENV_VULKAN_1_0:
54fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENGL_4_0:
55fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENGL_4_1:
56fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENGL_4_2:
57fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENGL_4_3:
58fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENGL_4_5:
59fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENCL_1_2:
60fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENCL_2_0:
61fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENCL_EMBEDDED_2_0:
62fd4e5da5Sopenharmony_ci      return "1.0";
63fd4e5da5Sopenharmony_ci    case SPV_ENV_UNIVERSAL_1_1:
64fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENCL_2_1:
65fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENCL_EMBEDDED_2_1:
66fd4e5da5Sopenharmony_ci      return "1.1";
67fd4e5da5Sopenharmony_ci    case SPV_ENV_UNIVERSAL_1_2:
68fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENCL_2_2:
69fd4e5da5Sopenharmony_ci    case SPV_ENV_OPENCL_EMBEDDED_2_2:
70fd4e5da5Sopenharmony_ci      return "1.2";
71fd4e5da5Sopenharmony_ci    case SPV_ENV_UNIVERSAL_1_3:
72fd4e5da5Sopenharmony_ci    case SPV_ENV_VULKAN_1_1:
73fd4e5da5Sopenharmony_ci      return "1.3";
74fd4e5da5Sopenharmony_ci    case SPV_ENV_UNIVERSAL_1_4:
75fd4e5da5Sopenharmony_ci    case SPV_ENV_VULKAN_1_1_SPIRV_1_4:
76fd4e5da5Sopenharmony_ci      return "1.4";
77fd4e5da5Sopenharmony_ci    case SPV_ENV_UNIVERSAL_1_5:
78fd4e5da5Sopenharmony_ci    case SPV_ENV_VULKAN_1_2:
79fd4e5da5Sopenharmony_ci      return "1.5";
80fd4e5da5Sopenharmony_ci    case SPV_ENV_UNIVERSAL_1_6:
81fd4e5da5Sopenharmony_ci    case SPV_ENV_VULKAN_1_3:
82fd4e5da5Sopenharmony_ci      return "1.6";
83fd4e5da5Sopenharmony_ci    default:
84fd4e5da5Sopenharmony_ci      return "0";
85fd4e5da5Sopenharmony_ci  }
86fd4e5da5Sopenharmony_ci}
87fd4e5da5Sopenharmony_ci
88fd4e5da5Sopenharmony_ciTEST_P(ValidateVersion, version) {
89fd4e5da5Sopenharmony_ci  CompileSuccessfully(std::get<2>(GetParam()), std::get<0>(GetParam()));
90fd4e5da5Sopenharmony_ci  spv_result_t res = ValidateInstructions(std::get<1>(GetParam()));
91fd4e5da5Sopenharmony_ci  if (std::get<3>(GetParam())) {
92fd4e5da5Sopenharmony_ci    ASSERT_EQ(SPV_SUCCESS, res);
93fd4e5da5Sopenharmony_ci  } else {
94fd4e5da5Sopenharmony_ci    ASSERT_EQ(SPV_ERROR_WRONG_VERSION, res);
95fd4e5da5Sopenharmony_ci
96fd4e5da5Sopenharmony_ci    std::string msg = "Invalid SPIR-V binary version ";
97fd4e5da5Sopenharmony_ci    msg += version(std::get<0>(GetParam()));
98fd4e5da5Sopenharmony_ci    msg += " for target environment ";
99fd4e5da5Sopenharmony_ci    msg += spvTargetEnvDescription(std::get<1>(GetParam()));
100fd4e5da5Sopenharmony_ci    EXPECT_THAT(getDiagnosticString(), HasSubstr(msg));
101fd4e5da5Sopenharmony_ci  }
102fd4e5da5Sopenharmony_ci}
103fd4e5da5Sopenharmony_ci
104fd4e5da5Sopenharmony_ci// clang-format off
105fd4e5da5Sopenharmony_ciINSTANTIATE_TEST_SUITE_P(Universal, ValidateVersion,
106fd4e5da5Sopenharmony_ci  ::testing::Values(
107fd4e5da5Sopenharmony_ci    //         Binary version,        Target environment
108fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, true),
109fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, true),
110fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, true),
111fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, true),
112fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, true),
113fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
114fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
115fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_VULKAN_1_0,    vulkan_spirv, true),
116fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_VULKAN_1_1,    vulkan_spirv, true),
117fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_VULKAN_1_1_SPIRV_1_4,vulkan_spirv, true),
118fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
119fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
120fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_0,    vulkan_spirv, true),
121fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_1,    vulkan_spirv, true),
122fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_2,    vulkan_spirv, true),
123fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_3,    vulkan_spirv, true),
124fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_5,    vulkan_spirv, true),
125fd4e5da5Sopenharmony_ci
126fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
127fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, true),
128fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, true),
129fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, true),
130fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, true),
131fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
132fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
133fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
134fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_VULKAN_1_1,    vulkan_spirv, true),
135fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
136fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
137fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
138fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
139fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
140fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
141fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
142fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false),
143fd4e5da5Sopenharmony_ci
144fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
145fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
146fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, true),
147fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, true),
148fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, true),
149fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
150fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
151fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
152fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_VULKAN_1_1,    vulkan_spirv, true),
153fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
154fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
155fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
156fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
157fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
158fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
159fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
160fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false),
161fd4e5da5Sopenharmony_ci
162fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
163fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
164fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, false),
165fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, true),
166fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, true),
167fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
168fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
169fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
170fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_1,    vulkan_spirv, true),
171fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
172fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
173fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
174fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
175fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
176fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
177fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
178fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false),
179fd4e5da5Sopenharmony_ci
180fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
181fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
182fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, false),
183fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, false),
184fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, true),
185fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
186fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
187fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
188fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_1,    vulkan_spirv, false),
189fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
190fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
191fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
192fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
193fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
194fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
195fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
196fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false),
197fd4e5da5Sopenharmony_ci
198fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
199fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
200fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, false),
201fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, false),
202fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, false),
203fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
204fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
205fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
206fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_1,    vulkan_spirv, false),
207fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, false),
208fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
209fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
210fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
211fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
212fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
213fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
214fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false),
215fd4e5da5Sopenharmony_ci
216fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
217fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
218fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, false),
219fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, false),
220fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, false),
221fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, false),
222fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
223fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
224fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_1,    vulkan_spirv, false),
225fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, false),
226fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_2,    vulkan_spirv, false),
227fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
228fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
229fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
230fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
231fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
232fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false)
233fd4e5da5Sopenharmony_ci  )
234fd4e5da5Sopenharmony_ci);
235fd4e5da5Sopenharmony_ci
236fd4e5da5Sopenharmony_ciINSTANTIATE_TEST_SUITE_P(Vulkan, ValidateVersion,
237fd4e5da5Sopenharmony_ci  ::testing::Values(
238fd4e5da5Sopenharmony_ci    //         Binary version,        Target environment
239fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, true),
240fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, true),
241fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, true),
242fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, true),
243fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, true),
244fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
245fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
246fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_0,    vulkan_spirv, true),
247fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_1,    vulkan_spirv, true),
248fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
249fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
250fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
251fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_OPENGL_4_0,    vulkan_spirv, true),
252fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_OPENGL_4_1,    vulkan_spirv, true),
253fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_OPENGL_4_2,    vulkan_spirv, true),
254fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_OPENGL_4_3,    vulkan_spirv, true),
255fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_OPENGL_4_5,    vulkan_spirv, true),
256fd4e5da5Sopenharmony_ci
257fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
258fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
259fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, false),
260fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, true),
261fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, true),
262fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
263fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
264fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
265fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_1,    vulkan_spirv, true),
266fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
267fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
268fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
269fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
270fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
271fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
272fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
273fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false),
274fd4e5da5Sopenharmony_ci
275fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
276fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
277fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, false),
278fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, false),
279fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, true),
280fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
281fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
282fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
283fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_VULKAN_1_1,    vulkan_spirv, false),
284fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
285fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
286fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
287fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
288fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
289fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
290fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
291fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false),
292fd4e5da5Sopenharmony_ci
293fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
294fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
295fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, false),
296fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, false),
297fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, false),
298fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, true),
299fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
300fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
301fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_1,    vulkan_spirv, false),
302fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, false),
303fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_2,    vulkan_spirv, true),
304fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
305fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
306fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
307fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
308fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
309fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false),
310fd4e5da5Sopenharmony_ci
311fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
312fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
313fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, false),
314fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, false),
315fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, false),
316fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, false),
317fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
318fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_0,    vulkan_spirv, false),
319fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_1,    vulkan_spirv, false),
320fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, false),
321fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_2,    vulkan_spirv, false),
322fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_3,    vulkan_spirv, true),
323fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_0,    vulkan_spirv, false),
324fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_1,    vulkan_spirv, false),
325fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_2,    vulkan_spirv, false),
326fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_3,    vulkan_spirv, false),
327fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_5,    vulkan_spirv, false)
328fd4e5da5Sopenharmony_ci  )
329fd4e5da5Sopenharmony_ci);
330fd4e5da5Sopenharmony_ci
331fd4e5da5Sopenharmony_ciINSTANTIATE_TEST_SUITE_P(OpenCL, ValidateVersion,
332fd4e5da5Sopenharmony_ci  ::testing::Values(
333fd4e5da5Sopenharmony_ci    //         Binary version,     Target environment
334fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_UNIVERSAL_1_0,       opencl_spirv, true),
335fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_UNIVERSAL_1_1,       opencl_spirv, true),
336fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_UNIVERSAL_1_2,       opencl_spirv, true),
337fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_UNIVERSAL_1_3,       opencl_spirv, true),
338fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_UNIVERSAL_1_4,       opencl_spirv, true),
339fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_UNIVERSAL_1_5,       opencl_spirv, true),
340fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_UNIVERSAL_1_6,       opencl_spirv, true),
341fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_OPENCL_2_0,          opencl_spirv, true),
342fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_OPENCL_2_1,          opencl_spirv, true),
343fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_OPENCL_2_2,          opencl_spirv, true),
344fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_OPENCL_EMBEDDED_2_0, opencl_spirv, true),
345fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_OPENCL_EMBEDDED_2_1, opencl_spirv, true),
346fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_OPENCL_EMBEDDED_2_2, opencl_spirv, true),
347fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_0, SPV_ENV_OPENCL_1_2,          opencl_spirv, true),
348fd4e5da5Sopenharmony_ci
349fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_UNIVERSAL_1_0,       opencl_spirv, true),
350fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_UNIVERSAL_1_1,       opencl_spirv, true),
351fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_UNIVERSAL_1_2,       opencl_spirv, true),
352fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_UNIVERSAL_1_3,       opencl_spirv, true),
353fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_UNIVERSAL_1_4,       opencl_spirv, true),
354fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_UNIVERSAL_1_5,       opencl_spirv, true),
355fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_UNIVERSAL_1_6,       opencl_spirv, true),
356fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_OPENCL_2_0,          opencl_spirv, true),
357fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_OPENCL_2_1,          opencl_spirv, true),
358fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_OPENCL_2_2,          opencl_spirv, true),
359fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_OPENCL_EMBEDDED_2_0, opencl_spirv, true),
360fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_OPENCL_EMBEDDED_2_1, opencl_spirv, true),
361fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_OPENCL_EMBEDDED_2_2, opencl_spirv, true),
362fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_1, SPV_ENV_OPENCL_1_2,          opencl_spirv, true),
363fd4e5da5Sopenharmony_ci
364fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_UNIVERSAL_1_0,       opencl_spirv, false),
365fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_UNIVERSAL_1_1,       opencl_spirv, false),
366fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_UNIVERSAL_1_2,       opencl_spirv, true),
367fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_UNIVERSAL_1_3,       opencl_spirv, true),
368fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_UNIVERSAL_1_4,       opencl_spirv, true),
369fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_UNIVERSAL_1_5,       opencl_spirv, true),
370fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_UNIVERSAL_1_6,       opencl_spirv, true),
371fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_OPENCL_2_0,          opencl_spirv, false),
372fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_OPENCL_2_1,          opencl_spirv, false),
373fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_OPENCL_2_2,          opencl_spirv, true),
374fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_OPENCL_EMBEDDED_2_0, opencl_spirv, false),
375fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_OPENCL_EMBEDDED_2_1, opencl_spirv, false),
376fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_OPENCL_EMBEDDED_2_2, opencl_spirv, true),
377fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_2_2, SPV_ENV_OPENCL_1_2,          opencl_spirv, false),
378fd4e5da5Sopenharmony_ci
379fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_UNIVERSAL_1_0,       opencl_spirv, true),
380fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_UNIVERSAL_1_1,       opencl_spirv, true),
381fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_UNIVERSAL_1_2,       opencl_spirv, true),
382fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_UNIVERSAL_1_3,       opencl_spirv, true),
383fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_UNIVERSAL_1_4,       opencl_spirv, true),
384fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_UNIVERSAL_1_5,       opencl_spirv, true),
385fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_UNIVERSAL_1_6,       opencl_spirv, true),
386fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_OPENCL_2_0,          opencl_spirv, true),
387fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_OPENCL_2_1,          opencl_spirv, true),
388fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_OPENCL_2_2,          opencl_spirv, true),
389fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_OPENCL_EMBEDDED_2_0, opencl_spirv, true),
390fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_OPENCL_EMBEDDED_2_1, opencl_spirv, true),
391fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_OPENCL_EMBEDDED_2_2, opencl_spirv, true),
392fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_1_2, SPV_ENV_OPENCL_1_2,          opencl_spirv, true)
393fd4e5da5Sopenharmony_ci  )
394fd4e5da5Sopenharmony_ci);
395fd4e5da5Sopenharmony_ci
396fd4e5da5Sopenharmony_ciINSTANTIATE_TEST_SUITE_P(OpenCLEmbedded, ValidateVersion,
397fd4e5da5Sopenharmony_ci  ::testing::Values(
398fd4e5da5Sopenharmony_ci    //         Binary version,              Target environment
399fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_UNIVERSAL_1_0,       opencl_spirv, true),
400fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_UNIVERSAL_1_1,       opencl_spirv, true),
401fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_UNIVERSAL_1_2,       opencl_spirv, true),
402fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_UNIVERSAL_1_3,       opencl_spirv, true),
403fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_OPENCL_2_0,          opencl_spirv, true),
404fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_OPENCL_2_1,          opencl_spirv, true),
405fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_OPENCL_2_2,          opencl_spirv, true),
406fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_OPENCL_EMBEDDED_2_0, opencl_spirv, true),
407fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_OPENCL_EMBEDDED_2_1, opencl_spirv, true),
408fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_OPENCL_EMBEDDED_2_2, opencl_spirv, true),
409fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_0, SPV_ENV_OPENCL_1_2,          opencl_spirv, true),
410fd4e5da5Sopenharmony_ci
411fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_UNIVERSAL_1_0,       opencl_spirv, true),
412fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_UNIVERSAL_1_1,       opencl_spirv, true),
413fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_UNIVERSAL_1_2,       opencl_spirv, true),
414fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_UNIVERSAL_1_3,       opencl_spirv, true),
415fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_OPENCL_2_0,          opencl_spirv, true),
416fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_OPENCL_2_1,          opencl_spirv, true),
417fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_OPENCL_2_2,          opencl_spirv, true),
418fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_OPENCL_EMBEDDED_2_0, opencl_spirv, true),
419fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_OPENCL_EMBEDDED_2_1, opencl_spirv, true),
420fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_OPENCL_EMBEDDED_2_2, opencl_spirv, true),
421fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_1, SPV_ENV_OPENCL_1_2,          opencl_spirv, true),
422fd4e5da5Sopenharmony_ci
423fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_UNIVERSAL_1_0,       opencl_spirv, false),
424fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_UNIVERSAL_1_1,       opencl_spirv, false),
425fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_UNIVERSAL_1_2,       opencl_spirv, true),
426fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_UNIVERSAL_1_3,       opencl_spirv, true),
427fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_OPENCL_2_0,          opencl_spirv, false),
428fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_OPENCL_2_1,          opencl_spirv, false),
429fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_OPENCL_2_2,          opencl_spirv, true),
430fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_OPENCL_EMBEDDED_2_0, opencl_spirv, false),
431fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_OPENCL_EMBEDDED_2_1, opencl_spirv, false),
432fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_OPENCL_EMBEDDED_2_2, opencl_spirv, true),
433fd4e5da5Sopenharmony_ci    std::make_tuple(SPV_ENV_OPENCL_EMBEDDED_2_2, SPV_ENV_OPENCL_1_2,          opencl_spirv, false)
434fd4e5da5Sopenharmony_ci  )
435fd4e5da5Sopenharmony_ci);
436fd4e5da5Sopenharmony_ci// clang-format on
437fd4e5da5Sopenharmony_ci
438fd4e5da5Sopenharmony_ci}  // namespace
439fd4e5da5Sopenharmony_ci}  // namespace val
440fd4e5da5Sopenharmony_ci}  // namespace spvtools
441