spirv-val: Update VUID from 1.3.228 Vulkan spec (#4936)

Co-authored-by: alan-baker <alanbaker@google.com>
diff --git a/source/val/validate_scopes.cpp b/source/val/validate_scopes.cpp
index 5fb661b..e978180 100644
--- a/source/val/validate_scopes.cpp
+++ b/source/val/validate_scopes.cpp
@@ -265,11 +265,12 @@
     }
 
     if (value == SpvScopeWorkgroup) {
-      std::string errorVUID = _.VkErrorID(4639);
+      std::string errorVUID = _.VkErrorID(7321);
       _.function(inst->function()->id())
           ->RegisterExecutionModelLimitation(
               [errorVUID](SpvExecutionModel model, std::string* message) {
                 if (model != SpvExecutionModelGLCompute &&
+                    model != SpvExecutionModelTessellationControl &&
                     model != SpvExecutionModelTaskNV &&
                     model != SpvExecutionModelMeshNV &&
                     model != SpvExecutionModelTaskEXT &&
@@ -277,13 +278,31 @@
                   if (message) {
                     *message = errorVUID +
                                "Workgroup Memory Scope is limited to MeshNV, "
-                               "TaskNV, MeshEXT, TaskEXT and GLCompute "
-                               "execution model";
+                               "TaskNV, MeshEXT, TaskEXT, TessellationControl, "
+                               "and GLCompute execution model";
                   }
                   return false;
                 }
                 return true;
               });
+
+      if (_.memory_model() == SpvMemoryModelGLSL450) {
+        errorVUID = _.VkErrorID(7320);
+        _.function(inst->function()->id())
+            ->RegisterExecutionModelLimitation(
+                [errorVUID](SpvExecutionModel model, std::string* message) {
+                  if (model == SpvExecutionModelTessellationControl) {
+                    if (message) {
+                      *message =
+                          errorVUID +
+                          "Workgroup Memory Scope can't be used with "
+                          "TessellationControl using GLSL450 Memory Model";
+                    }
+                    return false;
+                  }
+                  return true;
+                });
+      }
     }
   }
 
diff --git a/source/val/validation_state.cpp b/source/val/validation_state.cpp
index d826acd..fa8c624 100644
--- a/source/val/validation_state.cpp
+++ b/source/val/validation_state.cpp
@@ -1970,8 +1970,8 @@
       return VUID_WRAP(VUID-StandaloneSpirv-None-04637);
     case 4638:
       return VUID_WRAP(VUID-StandaloneSpirv-None-04638);
-    case 4639:
-      return VUID_WRAP(VUID-StandaloneSpirv-None-04639);
+    case 7321:
+      return VUID_WRAP(VUID-StandaloneSpirv-None-07321);
     case 4640:
       return VUID_WRAP(VUID-StandaloneSpirv-None-04640);
     case 4641:
@@ -2110,6 +2110,8 @@
       return VUID_WRAP(VUID-StandaloneSpirv-Uniform-06925);
     case 6997:
       return VUID_WRAP(VUID-StandaloneSpirv-SubgroupVoteKHR-06997);
+    case 7320:
+      return VUID_WRAP(VUID-StandaloneSpirv-ExecutionModel-07320);
     case 7290:
       return VUID_WRAP(VUID-StandaloneSpirv-Input-07290);
     default:
diff --git a/test/val/val_barriers_test.cpp b/test/val/val_barriers_test.cpp
index 2569de0..073a0f6 100644
--- a/test/val/val_barriers_test.cpp
+++ b/test/val/val_barriers_test.cpp
@@ -416,11 +416,12 @@
   CompileSuccessfully(GenerateVulkanVertexShaderCode(body), SPV_ENV_VULKAN_1_1);
   EXPECT_EQ(SPV_ERROR_INVALID_ID, ValidateInstructions(SPV_ENV_VULKAN_1_1));
   EXPECT_THAT(getDiagnosticString(),
-              AnyVUID("VUID-StandaloneSpirv-None-04639"));
-  EXPECT_THAT(getDiagnosticString(),
-              HasSubstr("Workgroup Memory Scope is limited to MeshNV, "
-                        "TaskNV, MeshEXT, TaskEXT and GLCompute "
-                        "execution model"));
+              AnyVUID("VUID-StandaloneSpirv-None-07321"));
+  EXPECT_THAT(
+      getDiagnosticString(),
+      HasSubstr("Workgroup Memory Scope is limited to MeshNV, "
+                "TaskNV, MeshEXT, TaskEXT, TessellationControl, and GLCompute "
+                "execution model"));
 }
 
 TEST_F(ValidateBarriers,