diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index f5928e482266d480179554dbaf879d8029b02364..4664c344b524ed69d520d1c6fbaac265a58db885 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -2531,6 +2531,11 @@ static bool validate_shader_capabilities(layer_data *dev_data, shader_module con
                                               VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME);
                     break;
 
+                case spv::CapabilityGeometryShaderPassthroughNV:
+                    pass &= require_extension(report_data, dev_data->device_extensions.nv_geometry_shader_passthrough_enabled,
+                                              VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME);
+                    break;
+
                 default:
                     // Spirv-validator should catch these errors
                     break;
@@ -3842,6 +3847,7 @@ static void checkDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo,
     dev_data->device_extensions.khr_descriptor_update_template_enabled = false;
     dev_data->device_extensions.khr_shader_draw_parameters_enabled = false;
     dev_data->device_extensions.khr_maintenance1_enabled = false;
+    dev_data->device_extensions.nv_geometry_shader_passthrough_enabled = false;
 
     for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) {
@@ -3862,6 +3868,9 @@ static void checkDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo,
         if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_MAINTENANCE1_EXTENSION_NAME) == 0) {
             dev_data->device_extensions.khr_maintenance1_enabled = true;
         }
+        if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME) == 0) {
+            dev_data->device_extensions.nv_geometry_shader_passthrough_enabled = true;
+        }
     }
 }
 
diff --git a/layers/core_validation_types.h b/layers/core_validation_types.h
index b55e4f8668263546c3e916124e3d845dce513b78..83bb835928f8e148d60a1dda168b0d856affc373 100644
--- a/layers/core_validation_types.h
+++ b/layers/core_validation_types.h
@@ -791,6 +791,7 @@ struct devExts {
     bool khr_descriptor_update_template_enabled;
     bool khr_shader_draw_parameters_enabled;
     bool khr_maintenance1_enabled;
+    bool nv_geometry_shader_passthrough_enabled;
     std::unordered_map<VkSwapchainKHR, std::unique_ptr<SWAPCHAIN_NODE>> swapchainMap;
     std::unordered_map<VkImage, VkSwapchainKHR> imageToSwapchainMap;
 };