spirv-val: Label new Vulkan OpPtrAccessChain VUs (#4975)

diff --git a/source/val/validate_memory.cpp b/source/val/validate_memory.cpp
index 8a66bee..09fd2b6 100644
--- a/source/val/validate_memory.cpp
+++ b/source/val/validate_memory.cpp
@@ -1436,12 +1436,14 @@
     if (base_type_storage_class == SpvStorageClassWorkgroup) {
       if (!_.HasCapability(SpvCapabilityVariablePointers)) {
         return _.diag(SPV_ERROR_INVALID_DATA, inst)
+               << _.VkErrorID(7651)
                << "OpPtrAccessChain Base operand pointing to Workgroup "
                   "storage class must use VariablePointers capability";
       }
     } else if (base_type_storage_class == SpvStorageClassStorageBuffer) {
       if (!_.features().variable_pointers) {
         return _.diag(SPV_ERROR_INVALID_DATA, inst)
+               << _.VkErrorID(7652)
                << "OpPtrAccessChain Base operand pointing to StorageBuffer "
                   "storage class must use VariablePointers or "
                   "VariablePointersStorageBuffer capability";
@@ -1449,6 +1451,7 @@
     } else if (base_type_storage_class !=
                SpvStorageClassPhysicalStorageBuffer) {
       return _.diag(SPV_ERROR_INVALID_DATA, inst)
+             << _.VkErrorID(7650)
              << "OpPtrAccessChain Base operand must point to Workgroup, "
                 "StorageBuffer, or PhysicalStorageBuffer storage class";
     }
diff --git a/source/val/validation_state.cpp b/source/val/validation_state.cpp
index a5f1de0..64a0a1a 100644
--- a/source/val/validation_state.cpp
+++ b/source/val/validation_state.cpp
@@ -2144,6 +2144,12 @@
       return VUID_WRAP(VUID-StandaloneSpirv-ExecutionModel-07320);
     case 7290:
       return VUID_WRAP(VUID-StandaloneSpirv-Input-07290);
+    case 7650:
+      return VUID_WRAP(VUID-StandaloneSpirv-Base-07650);
+    case 7651:
+      return VUID_WRAP(VUID-StandaloneSpirv-Base-07651);
+    case 7652:
+      return VUID_WRAP(VUID-StandaloneSpirv-Base-07652);
     default:
       return "";  // unknown id
   }
diff --git a/test/val/val_memory_test.cpp b/test/val/val_memory_test.cpp
index 780aeed..d0735dc 100644
--- a/test/val/val_memory_test.cpp
+++ b/test/val/val_memory_test.cpp
@@ -4857,6 +4857,8 @@
   CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_2);
   EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_2));
   EXPECT_THAT(getDiagnosticString(),
+              AnyVUID("VUID-StandaloneSpirv-Base-07652"));
+  EXPECT_THAT(getDiagnosticString(),
               HasSubstr("OpPtrAccessChain Base operand pointing to "
                         "StorageBuffer storage class must use VariablePointers "
                         "or VariablePointersStorageBuffer capability"));
@@ -4892,6 +4894,8 @@
   CompileSuccessfully(spirv, SPV_ENV_VULKAN_1_2);
   EXPECT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions(SPV_ENV_VULKAN_1_2));
   EXPECT_THAT(getDiagnosticString(),
+              AnyVUID("VUID-StandaloneSpirv-Base-07651"));
+  EXPECT_THAT(getDiagnosticString(),
               HasSubstr("OpPtrAccessChain Base operand pointing to Workgroup "
                         "storage class must use VariablePointers capability"));
 }