build: Update to header v1.4.356
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 582fb1b..588efec 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,7 +6,7 @@
 cmake_minimum_required(VERSION 3.22.1)
 
 # The VERSION field is generated with the "--generated-version" flag in the generate_source.py script
-project(VUL VERSION 1.4.355 LANGUAGES CXX)
+project(VUL VERSION 1.4.356 LANGUAGES CXX)
 
 set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Remove when min is 3.26, see CMP0143
 
diff --git a/include/vulkan/utility/vk_safe_struct.hpp b/include/vulkan/utility/vk_safe_struct.hpp
index 56c1612..02c02e2 100644
--- a/include/vulkan/utility/vk_safe_struct.hpp
+++ b/include/vulkan/utility/vk_safe_struct.hpp
@@ -25239,6 +25239,32 @@
     VkUbmSurfaceCreateInfoSEC const* ptr() const { return reinterpret_cast<VkUbmSurfaceCreateInfoSEC const*>(this); }
 };
 #endif  // VK_USE_PLATFORM_UBM_SEC
+struct safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT {
+    VkStructureType sType;
+    void* pNext{};
+    VkBool32 shaderFloat4;
+    VkBool32 shaderFloat6;
+    VkBool32 shaderFloat8UnsignedE8M0;
+    VkBool32 shaderMXInt8;
+
+    safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT(
+        const VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT* in_struct, PNextCopyState* copy_state = {},
+        bool copy_pnext = true);
+    safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT(
+        const safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT& copy_src);
+    safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT& operator=(
+        const safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT& copy_src);
+    safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT();
+    ~safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT();
+    void initialize(const VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT* in_struct, PNextCopyState* copy_state = {});
+    void initialize(const safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT* copy_src, PNextCopyState* copy_state = {});
+    VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT* ptr() {
+        return reinterpret_cast<VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT*>(this);
+    }
+    VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT const* ptr() const {
+        return reinterpret_cast<VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT const*>(this);
+    }
+};
 struct safe_VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE {
     VkStructureType sType;
     void* pNext{};
diff --git a/include/vulkan/utility/vk_struct_helper.hpp b/include/vulkan/utility/vk_struct_helper.hpp
index a63b630..48a79eb 100644
--- a/include/vulkan/utility/vk_struct_helper.hpp
+++ b/include/vulkan/utility/vk_struct_helper.hpp
@@ -1301,6 +1301,7 @@
 #ifdef VK_USE_PLATFORM_UBM_SEC
 template <> inline VkStructureType GetSType<VkUbmSurfaceCreateInfoSEC>() { return VK_STRUCTURE_TYPE_UBM_SURFACE_CREATE_INFO_SEC; }
 #endif  // VK_USE_PLATFORM_UBM_SEC
+template <> inline VkStructureType GetSType<VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT>() { return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT; }
 template <> inline VkStructureType GetSType<VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE>() { return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE; }
 template <> inline VkStructureType GetSType<VkThrottleHintSubmitInfoSEC>() { return VK_STRUCTURE_TYPE_THROTTLE_HINT_SUBMIT_INFO_SEC; }
 template <> inline VkStructureType GetSType<VkPhysicalDeviceThrottleHintFeaturesSEC>() { return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_THROTTLE_HINT_FEATURES_SEC; }
diff --git a/include/vulkan/vk_enum_string_helper.h b/include/vulkan/vk_enum_string_helper.h
index aeda442..3c52024 100644
--- a/include/vulkan/vk_enum_string_helper.h
+++ b/include/vulkan/vk_enum_string_helper.h
@@ -2614,6 +2614,8 @@
             return "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_2_CREATE_INFO_KHR";
         case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_2_KHR:
             return "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_2_KHR";
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT:
+            return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT";
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE:
             return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE";
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_THROTTLE_HINT_FEATURES_SEC:
@@ -4706,6 +4708,16 @@
             return "VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT";
         case VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT:
             return "VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT";
+        case VK_COMPONENT_TYPE_FLOAT6_E2M3_EXT:
+            return "VK_COMPONENT_TYPE_FLOAT6_E2M3_EXT";
+        case VK_COMPONENT_TYPE_FLOAT6_E3M2_EXT:
+            return "VK_COMPONENT_TYPE_FLOAT6_E3M2_EXT";
+        case VK_COMPONENT_TYPE_FLOAT4_E2M1_EXT:
+            return "VK_COMPONENT_TYPE_FLOAT4_E2M1_EXT";
+        case VK_COMPONENT_TYPE_FLOAT8_UNSIGNED_E8M0_EXT:
+            return "VK_COMPONENT_TYPE_FLOAT8_UNSIGNED_E8M0_EXT";
+        case VK_COMPONENT_TYPE_MXINT8_EXT:
+            return "VK_COMPONENT_TYPE_MXINT8_EXT";
         default:
             return "Unhandled VkComponentTypeKHR";
     }
@@ -14793,6 +14805,8 @@
         case VK_STRUCTURE_TYPE_UBM_SURFACE_CREATE_INFO_SEC:
             return "VkUbmSurfaceCreateInfoSEC";
 #endif  // VK_USE_PLATFORM_UBM_SEC
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT:
+            return "VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT";
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE:
             return "VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE";
         case VK_STRUCTURE_TYPE_THROTTLE_HINT_SUBMIT_INFO_SEC:
diff --git a/scripts/known_good.json b/scripts/known_good.json
index 2d7247e..9d41288 100644
--- a/scripts/known_good.json
+++ b/scripts/known_good.json
@@ -7,7 +7,7 @@
             "sub_dir": "Vulkan-Headers",
             "build_dir": "Vulkan-Headers/build",
             "install_dir": "Vulkan-Headers/build/install",
-            "commit": "v1.4.355"
+            "commit": "v1.4.356"
         },
         {
             "name": "googletest",
diff --git a/src/vulkan/vk_safe_struct_ext.cpp b/src/vulkan/vk_safe_struct_ext.cpp
index 538a544..487692f 100644
--- a/src/vulkan/vk_safe_struct_ext.cpp
+++ b/src/vulkan/vk_safe_struct_ext.cpp
@@ -18939,6 +18939,78 @@
     pNext = SafePnextCopy(copy_src->pNext);
 }
 
+safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT::safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT(
+    const VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT* in_struct, [[maybe_unused]] PNextCopyState* copy_state,
+    bool copy_pnext)
+    : sType(in_struct->sType),
+      shaderFloat4(in_struct->shaderFloat4),
+      shaderFloat6(in_struct->shaderFloat6),
+      shaderFloat8UnsignedE8M0(in_struct->shaderFloat8UnsignedE8M0),
+      shaderMXInt8(in_struct->shaderMXInt8) {
+    if (copy_pnext) {
+        pNext = SafePnextCopy(in_struct->pNext, copy_state);
+    }
+}
+
+safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT::safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT()
+    : sType(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT),
+      pNext(nullptr),
+      shaderFloat4(),
+      shaderFloat6(),
+      shaderFloat8UnsignedE8M0(),
+      shaderMXInt8() {}
+
+safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT::safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT(
+    const safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT& copy_src) {
+    sType = copy_src.sType;
+    shaderFloat4 = copy_src.shaderFloat4;
+    shaderFloat6 = copy_src.shaderFloat6;
+    shaderFloat8UnsignedE8M0 = copy_src.shaderFloat8UnsignedE8M0;
+    shaderMXInt8 = copy_src.shaderMXInt8;
+    pNext = SafePnextCopy(copy_src.pNext);
+}
+
+safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT& safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT::operator=(
+    const safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT& copy_src) {
+    if (&copy_src == this) return *this;
+
+    FreePnextChain(pNext);
+
+    sType = copy_src.sType;
+    shaderFloat4 = copy_src.shaderFloat4;
+    shaderFloat6 = copy_src.shaderFloat6;
+    shaderFloat8UnsignedE8M0 = copy_src.shaderFloat8UnsignedE8M0;
+    shaderMXInt8 = copy_src.shaderMXInt8;
+    pNext = SafePnextCopy(copy_src.pNext);
+
+    return *this;
+}
+
+safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT::~safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT() {
+    FreePnextChain(pNext);
+}
+
+void safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT::initialize(
+    const VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT* in_struct, [[maybe_unused]] PNextCopyState* copy_state) {
+    FreePnextChain(pNext);
+    sType = in_struct->sType;
+    shaderFloat4 = in_struct->shaderFloat4;
+    shaderFloat6 = in_struct->shaderFloat6;
+    shaderFloat8UnsignedE8M0 = in_struct->shaderFloat8UnsignedE8M0;
+    shaderMXInt8 = in_struct->shaderMXInt8;
+    pNext = SafePnextCopy(in_struct->pNext, copy_state);
+}
+
+void safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT::initialize(
+    const safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT* copy_src, [[maybe_unused]] PNextCopyState* copy_state) {
+    sType = copy_src->sType;
+    shaderFloat4 = copy_src->shaderFloat4;
+    shaderFloat6 = copy_src->shaderFloat6;
+    shaderFloat8UnsignedE8M0 = copy_src->shaderFloat8UnsignedE8M0;
+    shaderMXInt8 = copy_src->shaderMXInt8;
+    pNext = SafePnextCopy(copy_src->pNext);
+}
+
 safe_VkPhysicalDevicePrimitiveRestartIndexFeaturesEXT::safe_VkPhysicalDevicePrimitiveRestartIndexFeaturesEXT(
     const VkPhysicalDevicePrimitiveRestartIndexFeaturesEXT* in_struct, [[maybe_unused]] PNextCopyState* copy_state, bool copy_pnext)
     : sType(in_struct->sType), primitiveRestartIndex(in_struct->primitiveRestartIndex) {
diff --git a/src/vulkan/vk_safe_struct_utils.cpp b/src/vulkan/vk_safe_struct_utils.cpp
index fe104ca..25891be 100644
--- a/src/vulkan/vk_safe_struct_utils.cpp
+++ b/src/vulkan/vk_safe_struct_utils.cpp
@@ -2504,6 +2504,9 @@
             case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT:
                 safe_pNext = new safe_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT(reinterpret_cast<const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *>(pNext), copy_state, false);
                 break;
+            case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT:
+                safe_pNext = new safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT(reinterpret_cast<const VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT *>(pNext), copy_state, false);
+                break;
             case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE:
                 safe_pNext = new safe_VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE(reinterpret_cast<const VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE *>(pNext), copy_state, false);
                 break;
@@ -5043,6 +5046,9 @@
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT:
             delete reinterpret_cast<safe_VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT *>(header);
             break;
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OCP_MICROSCALING_TYPES_FEATURES_EXT:
+            delete reinterpret_cast<safe_VkPhysicalDeviceShaderOCPMicroscalingTypesFeaturesEXT *>(header);
+            break;
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MIXED_FLOAT_DOT_PRODUCT_FEATURES_VALVE:
             delete reinterpret_cast<safe_VkPhysicalDeviceShaderMixedFloatDotProductFeaturesVALVE *>(header);
             break;