layers: Validate subgroup uniform control flow
diff --git a/layers/shader_validation.cpp b/layers/shader_validation.cpp
index c1ae37d..142f7d4 100644
--- a/layers/shader_validation.cpp
+++ b/layers/shader_validation.cpp
@@ -2103,6 +2103,24 @@
                     }
                     break;
                 }
+                case spv::ExecutionModeSubgroupUniformControlFlowKHR: {
+                    if (!enabled_features.shader_subgroup_uniform_control_flow_features.shaderSubgroupUniformControlFlow ||
+                        (phys_dev_ext_props.subgroup_properties.supportedStages & stage) == 0 ||
+                        module_state->static_data_.has_invocation_repack_instruction) {
+                        std::stringstream msg;
+                        if (!enabled_features.shader_subgroup_uniform_control_flow_features.shaderSubgroupUniformControlFlow) {
+                            msg << "shaderSubgroupUniformControlFlow feature must be enabled";
+                        } else if ((phys_dev_ext_props.subgroup_properties.supportedStages & stage) == 0) {
+                            msg << "stage" << string_VkShaderStageFlagBits(stage)
+                                << " must be in VkPhysicalDeviceSubgroupProperties::supportedStages("
+                                << string_VkShaderStageFlags(phys_dev_ext_props.subgroup_properties.supportedStages) << ")";
+                        } else {
+                            msg << "the shader must not use any invocation repack instructions";
+                        }
+                        skip |= LogError(device, "VUID-RuntimeSpirv-SubgroupUniformControlFlowKHR-06379",
+                                         "If ExecutionModeSubgroupUniformControlFlowKHR is used %s.", msg.str().c_str());
+                    }
+                } break;
             }
         }
     }