Skip to content

Commit 3fb5254

Browse files
dneto0gfxstrand
andauthored
Vulkan 1.4 support (#5899)
* Add a Vulkan 1.4 environment * Fix test: Vulkan 1.3 accepts SPIR-V 1.6 * Fix comments about Vulkan 1.4 * Add test cases for Vulkan 1.4, optimizer ir_context tests --------- Co-authored-by: Faith Ekstrand <faith.ekstrand@collabora.com>
1 parent 7d5bc35 commit 3fb5254

File tree

6 files changed

+66
-8
lines changed

6 files changed

+66
-8
lines changed

include/spirv-tools/libspirv.h

+2
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,7 @@ SPIRV_TOOLS_EXPORT const char* spvSoftwareVersionDetailsString(void);
540540
// SPV_ENV_VULKAN_1_1_SPIRV_1_4 -> SPIR-V 1.4
541541
// SPV_ENV_VULKAN_1_2 -> SPIR-V 1.5
542542
// SPV_ENV_VULKAN_1_3 -> SPIR-V 1.6
543+
// SPV_ENV_VULKAN_1_4 -> SPIR-V 1.6
543544
// Consult the description of API entry points for specific rules.
544545
typedef enum {
545546
SPV_ENV_UNIVERSAL_1_0, // SPIR-V 1.0 latest revision, no other restrictions.
@@ -577,6 +578,7 @@ typedef enum {
577578

578579
SPV_ENV_UNIVERSAL_1_6, // SPIR-V 1.6 latest revision, no other restrictions.
579580
SPV_ENV_VULKAN_1_3, // Vulkan 1.3 latest revision.
581+
SPV_ENV_VULKAN_1_4, // Vulkan 1.4 latest revision.
580582

581583
SPV_ENV_MAX // Keep this as the last enum value.
582584
} spv_target_env;

source/ext_inst.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ spv_result_t spvExtInstTableGet(spv_ext_inst_table* pExtInstTable,
102102
case SPV_ENV_VULKAN_1_2:
103103
case SPV_ENV_UNIVERSAL_1_6:
104104
case SPV_ENV_VULKAN_1_3:
105+
case SPV_ENV_VULKAN_1_4:
105106
*pExtInstTable = &kTable_1_0;
106107
return SPV_SUCCESS;
107108
default:

source/spirv_target_env.cpp

+12-2
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ const char* spvTargetEnvDescription(spv_target_env env) {
7979
return "SPIR-V 1.6";
8080
case SPV_ENV_VULKAN_1_3:
8181
return "SPIR-V 1.6 (under Vulkan 1.3 semantics)";
82+
case SPV_ENV_VULKAN_1_4:
83+
return "SPIR-V 1.6 (under Vulkan 1.4 semantics)";
8284
case SPV_ENV_MAX:
8385
assert(false && "Invalid target environment value.");
8486
break;
@@ -122,6 +124,7 @@ uint32_t spvVersionForTargetEnv(spv_target_env env) {
122124
return SPV_SPIRV_VERSION_WORD(1, 5);
123125
case SPV_ENV_UNIVERSAL_1_6:
124126
case SPV_ENV_VULKAN_1_3:
127+
case SPV_ENV_VULKAN_1_4:
125128
return SPV_SPIRV_VERSION_WORD(1, 6);
126129
case SPV_ENV_MAX:
127130
assert(false && "Invalid target environment value.");
@@ -147,6 +150,7 @@ inline constexpr std::pair<const char*, spv_target_env> spvTargetEnvNameMap[] =
147150
{"vulkan1.1", SPV_ENV_VULKAN_1_1},
148151
{"vulkan1.2", SPV_ENV_VULKAN_1_2},
149152
{"vulkan1.3", SPV_ENV_VULKAN_1_3},
153+
{"vulkan1.4", SPV_ENV_VULKAN_1_4},
150154
{"spv1.0", SPV_ENV_UNIVERSAL_1_0},
151155
{"spv1.1", SPV_ENV_UNIVERSAL_1_1},
152156
{"spv1.2", SPV_ENV_UNIVERSAL_1_2},
@@ -254,7 +258,8 @@ static const VulkanEnv ordered_vulkan_envs[] = {
254258
{SPV_ENV_VULKAN_1_1, VULKAN_VER(1, 1), SPIRV_VER(1, 3)},
255259
{SPV_ENV_VULKAN_1_1_SPIRV_1_4, VULKAN_VER(1, 1), SPIRV_VER(1, 4)},
256260
{SPV_ENV_VULKAN_1_2, VULKAN_VER(1, 2), SPIRV_VER(1, 5)},
257-
{SPV_ENV_VULKAN_1_3, VULKAN_VER(1, 3), SPIRV_VER(1, 6)}};
261+
{SPV_ENV_VULKAN_1_3, VULKAN_VER(1, 3), SPIRV_VER(1, 6)},
262+
{SPV_ENV_VULKAN_1_4, VULKAN_VER(1, 4), SPIRV_VER(1, 6)}};
258263

259264
bool spvParseVulkanEnv(uint32_t vulkan_ver, uint32_t spirv_ver,
260265
spv_target_env* env) {
@@ -295,6 +300,7 @@ bool spvIsVulkanEnv(spv_target_env env) {
295300
case SPV_ENV_VULKAN_1_1_SPIRV_1_4:
296301
case SPV_ENV_VULKAN_1_2:
297302
case SPV_ENV_VULKAN_1_3:
303+
case SPV_ENV_VULKAN_1_4:
298304
return true;
299305
case SPV_ENV_WEBGPU_0:
300306
assert(false && "Deprecated target environment value.");
@@ -325,6 +331,7 @@ bool spvIsOpenCLEnv(spv_target_env env) {
325331
case SPV_ENV_VULKAN_1_2:
326332
case SPV_ENV_UNIVERSAL_1_6:
327333
case SPV_ENV_VULKAN_1_3:
334+
case SPV_ENV_VULKAN_1_4:
328335
return false;
329336
case SPV_ENV_OPENCL_1_2:
330337
case SPV_ENV_OPENCL_EMBEDDED_1_2:
@@ -367,6 +374,7 @@ bool spvIsOpenGLEnv(spv_target_env env) {
367374
case SPV_ENV_VULKAN_1_2:
368375
case SPV_ENV_UNIVERSAL_1_6:
369376
case SPV_ENV_VULKAN_1_3:
377+
case SPV_ENV_VULKAN_1_4:
370378
return false;
371379
case SPV_ENV_OPENGL_4_0:
372380
case SPV_ENV_OPENGL_4_1:
@@ -406,6 +414,7 @@ bool spvIsValidEnv(spv_target_env env) {
406414
case SPV_ENV_VULKAN_1_2:
407415
case SPV_ENV_UNIVERSAL_1_6:
408416
case SPV_ENV_VULKAN_1_3:
417+
case SPV_ENV_VULKAN_1_4:
409418
case SPV_ENV_OPENGL_4_0:
410419
case SPV_ENV_OPENGL_4_1:
411420
case SPV_ENV_OPENGL_4_2:
@@ -442,7 +451,8 @@ std::string spvLogStringForEnv(spv_target_env env) {
442451
case SPV_ENV_VULKAN_1_1:
443452
case SPV_ENV_VULKAN_1_1_SPIRV_1_4:
444453
case SPV_ENV_VULKAN_1_2:
445-
case SPV_ENV_VULKAN_1_3: {
454+
case SPV_ENV_VULKAN_1_3:
455+
case SPV_ENV_VULKAN_1_4: {
446456
return "Vulkan";
447457
}
448458
case SPV_ENV_UNIVERSAL_1_0:

source/table.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ spv_context spvContextCreate(spv_target_env env) {
4343
case SPV_ENV_VULKAN_1_2:
4444
case SPV_ENV_UNIVERSAL_1_6:
4545
case SPV_ENV_VULKAN_1_3:
46+
case SPV_ENV_VULKAN_1_4:
4647
break;
4748
default:
4849
return nullptr;

test/opt/ir_context_test.cpp

+15-5
Original file line numberDiff line numberDiff line change
@@ -1155,10 +1155,7 @@ struct TargetEnvCompareTestData {
11551155

11561156
using TargetEnvCompareTest = ::testing::TestWithParam<TargetEnvCompareTestData>;
11571157

1158-
TEST_P(TargetEnvCompareTest, Case) {
1159-
// If new environments are added, then we must update the list of tests.
1160-
ASSERT_EQ(SPV_ENV_VULKAN_1_3 + 1, SPV_ENV_MAX);
1161-
1158+
TEST_P(TargetEnvCompareTest, IsTargetEnvAtLeast) {
11621159
const auto& tc = GetParam();
11631160

11641161
std::unique_ptr<Module> module(new Module());
@@ -1422,6 +1419,8 @@ TEST_F(IRContextTest, RemovesMultipleCapabilities) {
14221419
1);
14231420
}
14241421

1422+
// If new environments are added, then we must update the list of tests.
1423+
static_assert(SPV_ENV_VULKAN_1_4 + 1 == SPV_ENV_MAX);
14251424
INSTANTIATE_TEST_SUITE_P(
14261425
TestCase, TargetEnvCompareTest,
14271426
::testing::Values(
@@ -1464,6 +1463,7 @@ INSTANTIATE_TEST_SUITE_P(
14641463
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_1},
14651464
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_2},
14661465
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_1, SPV_ENV_UNIVERSAL_1_3},
1466+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_0},
14671467
TargetEnvCompareTestData{SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_1},
14681468
TargetEnvCompareTestData{SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_1},
14691469
TargetEnvCompareTestData{SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_1},
@@ -1473,14 +1473,24 @@ INSTANTIATE_TEST_SUITE_P(
14731473
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_3},
14741474
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_4},
14751475
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_2, SPV_ENV_UNIVERSAL_1_5},
1476+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_1},
14761477
TargetEnvCompareTestData{SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_2},
14771478
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_0},
14781479
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_1},
14791480
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_2},
14801481
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_3},
14811482
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_4},
14821483
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_5},
1483-
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_6}));
1484+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_3, SPV_ENV_UNIVERSAL_1_6},
1485+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_2},
1486+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_0},
1487+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_1},
1488+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_2},
1489+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_3},
1490+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_4},
1491+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_5},
1492+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_6},
1493+
TargetEnvCompareTestData{SPV_ENV_VULKAN_1_4, SPV_ENV_VULKAN_1_3}));
14841494

14851495
} // namespace
14861496
} // namespace opt

test/val/val_version_test.cpp

+35-1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ std::string version(spv_target_env env) {
7979
return "1.5";
8080
case SPV_ENV_UNIVERSAL_1_6:
8181
case SPV_ENV_VULKAN_1_3:
82+
case SPV_ENV_VULKAN_1_4:
8283
return "1.6";
8384
default:
8485
return "0";
@@ -117,6 +118,7 @@ INSTANTIATE_TEST_SUITE_P(Universal, ValidateVersion,
117118
std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_VULKAN_1_1_SPIRV_1_4,vulkan_spirv, true),
118119
std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
119120
std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
121+
std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
120122
std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_0, vulkan_spirv, true),
121123
std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_1, vulkan_spirv, true),
122124
std::make_tuple(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_OPENGL_4_2, vulkan_spirv, true),
@@ -135,6 +137,7 @@ INSTANTIATE_TEST_SUITE_P(Universal, ValidateVersion,
135137
std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
136138
std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
137139
std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
140+
std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
138141
std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
139142
std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
140143
std::make_tuple(SPV_ENV_UNIVERSAL_1_1, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
@@ -153,6 +156,7 @@ INSTANTIATE_TEST_SUITE_P(Universal, ValidateVersion,
153156
std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
154157
std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
155158
std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
159+
std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
156160
std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
157161
std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
158162
std::make_tuple(SPV_ENV_UNIVERSAL_1_2, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
@@ -171,6 +175,7 @@ INSTANTIATE_TEST_SUITE_P(Universal, ValidateVersion,
171175
std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
172176
std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
173177
std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
178+
std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
174179
std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
175180
std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
176181
std::make_tuple(SPV_ENV_UNIVERSAL_1_3, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
@@ -189,6 +194,7 @@ INSTANTIATE_TEST_SUITE_P(Universal, ValidateVersion,
189194
std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
190195
std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
191196
std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
197+
std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
192198
std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
193199
std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
194200
std::make_tuple(SPV_ENV_UNIVERSAL_1_4, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
@@ -207,6 +213,7 @@ INSTANTIATE_TEST_SUITE_P(Universal, ValidateVersion,
207213
std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, false),
208214
std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
209215
std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
216+
std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
210217
std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
211218
std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
212219
std::make_tuple(SPV_ENV_UNIVERSAL_1_5, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
@@ -225,6 +232,7 @@ INSTANTIATE_TEST_SUITE_P(Universal, ValidateVersion,
225232
std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, false),
226233
std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_2, vulkan_spirv, false),
227234
std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
235+
std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
228236
std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
229237
std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
230238
std::make_tuple(SPV_ENV_UNIVERSAL_1_6, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
@@ -248,6 +256,7 @@ INSTANTIATE_TEST_SUITE_P(Vulkan, ValidateVersion,
248256
std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
249257
std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
250258
std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
259+
std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
251260
std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_OPENGL_4_0, vulkan_spirv, true),
252261
std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_OPENGL_4_1, vulkan_spirv, true),
253262
std::make_tuple(SPV_ENV_VULKAN_1_0, SPV_ENV_OPENGL_4_2, vulkan_spirv, true),
@@ -266,6 +275,7 @@ INSTANTIATE_TEST_SUITE_P(Vulkan, ValidateVersion,
266275
std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
267276
std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
268277
std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
278+
std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
269279
std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
270280
std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
271281
std::make_tuple(SPV_ENV_VULKAN_1_1, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
@@ -284,6 +294,7 @@ INSTANTIATE_TEST_SUITE_P(Vulkan, ValidateVersion,
284294
std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, true),
285295
std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
286296
std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
297+
std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
287298
std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
288299
std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
289300
std::make_tuple(SPV_ENV_VULKAN_1_1_SPIRV_1_4, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
@@ -302,6 +313,7 @@ INSTANTIATE_TEST_SUITE_P(Vulkan, ValidateVersion,
302313
std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, false),
303314
std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_2, vulkan_spirv, true),
304315
std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
316+
std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
305317
std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
306318
std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
307319
std::make_tuple(SPV_ENV_VULKAN_1_2, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
@@ -320,11 +332,33 @@ INSTANTIATE_TEST_SUITE_P(Vulkan, ValidateVersion,
320332
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, false),
321333
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_2, vulkan_spirv, false),
322334
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
335+
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
323336
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
324337
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
325338
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
326339
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_3, vulkan_spirv, false),
327-
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_5, vulkan_spirv, false)
340+
std::make_tuple(SPV_ENV_VULKAN_1_3, SPV_ENV_OPENGL_4_5, vulkan_spirv, false),
341+
342+
// Assembling for Vulkan 1.4 produces SPIR-V 1.6
343+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_0, vulkan_spirv, false),
344+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_1, vulkan_spirv, false),
345+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_2, vulkan_spirv, false),
346+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_3, vulkan_spirv, false),
347+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_4, vulkan_spirv, false),
348+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_5, vulkan_spirv, false),
349+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_UNIVERSAL_1_6, vulkan_spirv, true),
350+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_VULKAN_1_0, vulkan_spirv, false),
351+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_VULKAN_1_1, vulkan_spirv, false),
352+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_VULKAN_1_1_SPIRV_1_4, vulkan_spirv, false),
353+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_VULKAN_1_2, vulkan_spirv, false),
354+
// Vulkan 1.3 accepts SPIR-V 1.6
355+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_VULKAN_1_3, vulkan_spirv, true),
356+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_VULKAN_1_4, vulkan_spirv, true),
357+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_OPENGL_4_0, vulkan_spirv, false),
358+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_OPENGL_4_1, vulkan_spirv, false),
359+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_OPENGL_4_2, vulkan_spirv, false),
360+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_OPENGL_4_3, vulkan_spirv, false),
361+
std::make_tuple(SPV_ENV_VULKAN_1_4, SPV_ENV_OPENGL_4_5, vulkan_spirv, false)
328362
)
329363
);
330364

0 commit comments

Comments
 (0)