VK_KHR_shader_atomic_int64 covers OpAtomic{Load|Store}
diff --git a/source/val/validate_atomics.cpp b/source/val/validate_atomics.cpp
index 6c3a73c..5c4587d 100644
--- a/source/val/validate_atomics.cpp
+++ b/source/val/validate_atomics.cpp
@@ -209,6 +209,8 @@
case SpvOpAtomicOr:
case SpvOpAtomicXor:
case SpvOpAtomicIAdd:
+ case SpvOpAtomicLoad:
+ case SpvOpAtomicStore:
case SpvOpAtomicExchange:
case SpvOpAtomicCompareExchange: {
if (_.GetBitWidth(result_type) == 64 &&
diff --git a/test/val/val_atomics_test.cpp b/test/val/val_atomics_test.cpp
index bbbbddd..036a9db 100644
--- a/test/val/val_atomics_test.cpp
+++ b/test/val/val_atomics_test.cpp
@@ -276,9 +276,10 @@
CompileSuccessfully(GenerateShaderCode(body), SPV_ENV_VULKAN_1_0);
ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_0));
- EXPECT_THAT(getDiagnosticString(),
- HasSubstr("AtomicLoad: according to the Vulkan spec atomic "
- "Result Type needs to be a 32-bit int scalar type"));
+ EXPECT_THAT(
+ getDiagnosticString(),
+ HasSubstr(
+ "AtomicLoad: 64-bit atomics require the Int64Atomics capability"));
}
TEST_F(ValidateAtomics, VK_KHR_shader_atomic_int64Success) {
@@ -304,6 +305,12 @@
%val18 = OpAtomicIAdd %s64 %s64_var %device %relaxed %s64_1
%val19 = OpAtomicExchange %s64 %s64_var %device %relaxed %s64_1
%val20 = OpAtomicCompareExchange %s64 %s64_var %device %relaxed %relaxed %s64_1 %s64_1
+
+%val21 = OpAtomicLoad %u64 %u64_var %device %relaxed
+%val22 = OpAtomicLoad %s64 %s64_var %device %relaxed
+
+OpAtomicStore %u64_var %device %relaxed %u64_1
+OpAtomicStore %s64_var %device %relaxed %s64_1
)";
CompileSuccessfully(GenerateShaderCode(body, "OpCapability Int64Atomics\n"),