Skip to content

Commit c96fe8b

Browse files
spirv-val: Re-enable OpControlBarrier VU (KhronosGroup#5527)
1 parent 5dbdc7b commit c96fe8b

File tree

3 files changed

+22
-23
lines changed

3 files changed

+22
-23
lines changed

source/val/validate_memory_semantics.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,15 +203,12 @@ spv_result_t ValidateMemorySemantics(ValidationState_t& _,
203203
"storage class";
204204
}
205205

206-
#if 0
207-
// TODO([email protected]): this check fails Vulkan CTS, reenable once fixed.
208206
if (opcode == spv::Op::OpControlBarrier && value && !includes_storage_class) {
209207
return _.diag(SPV_ERROR_INVALID_DATA, inst)
210-
<< spvOpcodeString(opcode)
208+
<< _.VkErrorID(4650) << spvOpcodeString(opcode)
211209
<< ": expected Memory Semantics to include a Vulkan-supported "
212210
"storage class if Memory Semantics is not None";
213211
}
214-
#endif
215212
}
216213

217214
if (opcode == spv::Op::OpAtomicFlagClear &&

source/val/validation_state.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2125,6 +2125,8 @@ std::string ValidationState_t::VkErrorID(uint32_t id,
21252125
return VUID_WRAP(VUID-StandaloneSpirv-None-04644);
21262126
case 4645:
21272127
return VUID_WRAP(VUID-StandaloneSpirv-None-04645);
2128+
case 4650:
2129+
return VUID_WRAP(VUID-StandaloneSpirv-OpControlBarrier-04650);
21282130
case 4651:
21292131
return VUID_WRAP(VUID-StandaloneSpirv-OpVariable-04651);
21302132
case 4652:

test/val/val_barriers_test.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ OpControlBarrier %subgroup %cross_device %none
410410
TEST_F(ValidateBarriers,
411411
OpControlBarrierVulkan1p1WorkgroupNonComputeMemoryFailure) {
412412
const std::string body = R"(
413-
OpControlBarrier %subgroup %workgroup %acquire
413+
OpControlBarrier %subgroup %workgroup %acquire_release_workgroup
414414
)";
415415

416416
CompileSuccessfully(GenerateVulkanVertexShaderCode(body), SPV_ENV_VULKAN_1_1);
@@ -427,7 +427,7 @@ OpControlBarrier %subgroup %workgroup %acquire
427427
TEST_F(ValidateBarriers,
428428
OpControlBarrierVulkan1p1WorkgroupNonComputeExecutionFailure) {
429429
const std::string body = R"(
430-
OpControlBarrier %workgroup %subgroup %acquire
430+
OpControlBarrier %workgroup %subgroup %acquire_release_workgroup
431431
)";
432432

433433
CompileSuccessfully(GenerateVulkanVertexShaderCode(body), SPV_ENV_VULKAN_1_1);
@@ -442,7 +442,7 @@ OpControlBarrier %workgroup %subgroup %acquire
442442

443443
TEST_F(ValidateBarriers, OpControlBarrierVulkan1p1WorkgroupComputeSuccess) {
444444
const std::string body = R"(
445-
OpControlBarrier %workgroup %workgroup %acquire
445+
OpControlBarrier %workgroup %workgroup %acquire_uniform_workgroup
446446
)";
447447

448448
CompileSuccessfully(GenerateShaderCode(body), SPV_ENV_VULKAN_1_1);
@@ -451,7 +451,7 @@ OpControlBarrier %workgroup %workgroup %acquire
451451

452452
TEST_F(ValidateBarriers, OpControlBarrierVulkan1p1WorkgroupNonComputeSuccess) {
453453
const std::string body = R"(
454-
OpControlBarrier %subgroup %subgroup %acquire
454+
OpControlBarrier %subgroup %subgroup %acquire_uniform_workgroup
455455
)";
456456

457457
CompileSuccessfully(GenerateVulkanVertexShaderCode(body), SPV_ENV_VULKAN_1_1);
@@ -495,15 +495,15 @@ OpControlBarrier %device %device %acquire_and_release_uniform
495495
"AcquireRelease or SequentiallyConsistent"));
496496
}
497497

498-
// TODO([email protected]): the corresponding check fails Vulkan CTS,
499-
// reenable once fixed.
500-
TEST_F(ValidateBarriers, DISABLED_OpControlBarrierVulkanSubgroupStorageClass) {
498+
TEST_F(ValidateBarriers, OpControlBarrierVulkanSubgroupStorageClass) {
501499
const std::string body = R"(
502500
OpControlBarrier %workgroup %device %acquire_release_subgroup
503501
)";
504502

505503
CompileSuccessfully(GenerateShaderCode(body), SPV_ENV_VULKAN_1_0);
506504
ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
505+
EXPECT_THAT(getDiagnosticString(),
506+
AnyVUID("VUID-StandaloneSpirv-OpControlBarrier-04650"));
507507
EXPECT_THAT(
508508
getDiagnosticString(),
509509
HasSubstr(
@@ -513,7 +513,7 @@ OpControlBarrier %workgroup %device %acquire_release_subgroup
513513

514514
TEST_F(ValidateBarriers, OpControlBarrierSubgroupExecutionFragment1p1) {
515515
const std::string body = R"(
516-
OpControlBarrier %subgroup %subgroup %acquire_release_subgroup
516+
OpControlBarrier %subgroup %subgroup %acquire_release_workgroup
517517
)";
518518

519519
CompileSuccessfully(GenerateShaderCode(body, "", "Fragment"),
@@ -523,7 +523,7 @@ OpControlBarrier %subgroup %subgroup %acquire_release_subgroup
523523

524524
TEST_F(ValidateBarriers, OpControlBarrierWorkgroupExecutionFragment1p1) {
525525
const std::string body = R"(
526-
OpControlBarrier %workgroup %workgroup %acquire_release
526+
OpControlBarrier %workgroup %workgroup %acquire_release_workgroup
527527
)";
528528

529529
CompileSuccessfully(GenerateShaderCode(body, "", "Fragment"),
@@ -541,7 +541,7 @@ OpControlBarrier %workgroup %workgroup %acquire_release
541541

542542
TEST_F(ValidateBarriers, OpControlBarrierSubgroupExecutionFragment1p0) {
543543
const std::string body = R"(
544-
OpControlBarrier %subgroup %workgroup %acquire_release
544+
OpControlBarrier %subgroup %workgroup %acquire_release_workgroup
545545
)";
546546

547547
CompileSuccessfully(GenerateShaderCode(body, "", "Fragment"),
@@ -556,7 +556,7 @@ OpControlBarrier %subgroup %workgroup %acquire_release
556556

557557
TEST_F(ValidateBarriers, OpControlBarrierSubgroupExecutionVertex1p1) {
558558
const std::string body = R"(
559-
OpControlBarrier %subgroup %subgroup %acquire_release_subgroup
559+
OpControlBarrier %subgroup %subgroup %acquire_release_workgroup
560560
)";
561561

562562
CompileSuccessfully(GenerateShaderCode(body, "", "Vertex"),
@@ -566,7 +566,7 @@ OpControlBarrier %subgroup %subgroup %acquire_release_subgroup
566566

567567
TEST_F(ValidateBarriers, OpControlBarrierWorkgroupExecutionVertex1p1) {
568568
const std::string body = R"(
569-
OpControlBarrier %workgroup %workgroup %acquire_release
569+
OpControlBarrier %workgroup %workgroup %acquire_release_workgroup
570570
)";
571571

572572
CompileSuccessfully(GenerateShaderCode(body, "", "Vertex"),
@@ -584,7 +584,7 @@ OpControlBarrier %workgroup %workgroup %acquire_release
584584

585585
TEST_F(ValidateBarriers, OpControlBarrierSubgroupExecutionVertex1p0) {
586586
const std::string body = R"(
587-
OpControlBarrier %subgroup %workgroup %acquire_release
587+
OpControlBarrier %subgroup %workgroup %acquire_release_workgroup
588588
)";
589589

590590
CompileSuccessfully(GenerateShaderCode(body, "", "Vertex"),
@@ -599,7 +599,7 @@ OpControlBarrier %subgroup %workgroup %acquire_release
599599

600600
TEST_F(ValidateBarriers, OpControlBarrierSubgroupExecutionGeometry1p1) {
601601
const std::string body = R"(
602-
OpControlBarrier %subgroup %subgroup %acquire_release_subgroup
602+
OpControlBarrier %subgroup %subgroup %acquire_release_workgroup
603603
)";
604604

605605
CompileSuccessfully(
@@ -610,7 +610,7 @@ OpControlBarrier %subgroup %subgroup %acquire_release_subgroup
610610

611611
TEST_F(ValidateBarriers, OpControlBarrierWorkgroupExecutionGeometry1p1) {
612612
const std::string body = R"(
613-
OpControlBarrier %workgroup %workgroup %acquire_release
613+
OpControlBarrier %workgroup %workgroup %acquire_release_workgroup
614614
)";
615615

616616
CompileSuccessfully(
@@ -629,7 +629,7 @@ OpControlBarrier %workgroup %workgroup %acquire_release
629629

630630
TEST_F(ValidateBarriers, OpControlBarrierSubgroupExecutionGeometry1p0) {
631631
const std::string body = R"(
632-
OpControlBarrier %subgroup %workgroup %acquire_release
632+
OpControlBarrier %subgroup %workgroup %acquire_release_workgroup
633633
)";
634634

635635
CompileSuccessfully(
@@ -646,7 +646,7 @@ OpControlBarrier %subgroup %workgroup %acquire_release
646646
TEST_F(ValidateBarriers,
647647
OpControlBarrierSubgroupExecutionTessellationEvaluation1p1) {
648648
const std::string body = R"(
649-
OpControlBarrier %subgroup %subgroup %acquire_release_subgroup
649+
OpControlBarrier %subgroup %subgroup %acquire_release_workgroup
650650
)";
651651

652652
CompileSuccessfully(GenerateShaderCode(body, "OpCapability Tessellation\n",
@@ -658,7 +658,7 @@ OpControlBarrier %subgroup %subgroup %acquire_release_subgroup
658658
TEST_F(ValidateBarriers,
659659
OpControlBarrierWorkgroupExecutionTessellationEvaluation1p1) {
660660
const std::string body = R"(
661-
OpControlBarrier %workgroup %workgroup %acquire_release
661+
OpControlBarrier %workgroup %workgroup %acquire_release_workgroup
662662
)";
663663

664664
CompileSuccessfully(GenerateShaderCode(body, "OpCapability Tessellation\n",
@@ -678,7 +678,7 @@ OpControlBarrier %workgroup %workgroup %acquire_release
678678
TEST_F(ValidateBarriers,
679679
OpControlBarrierSubgroupExecutionTessellationEvaluation1p0) {
680680
const std::string body = R"(
681-
OpControlBarrier %subgroup %workgroup %acquire_release
681+
OpControlBarrier %subgroup %workgroup %acquire_release_workgroup
682682
)";
683683

684684
CompileSuccessfully(GenerateShaderCode(body, "OpCapability Tessellation\n",

0 commit comments

Comments
 (0)