diff --git a/android_api/libvulkan/proxy/cpp_types.go b/android_api/libvulkan/proxy/cpp_types.go
index 5130f96..c5aa3c8 100644
--- a/android_api/libvulkan/proxy/cpp_types.go
+++ b/android_api/libvulkan/proxy/cpp_types.go
@@ -116,6 +116,25 @@
 	LastArch  = X86_64
 )
 
+func Define(arch Arch) string {
+	switch arch {
+	default:
+		panic(fmt.Sprintf("cpp_types: Unknown arch %d", arch))
+	case Arm:
+		return "defined(__arm__)"
+	case Arm64:
+		return "defined(__aarch64__)"
+	case Riscv32:
+		return "defined(__riscv) && (__riscv_xlen == 32)"
+	case Riscv64:
+		return "defined(__riscv) && (__riscv_xlen == 64)"
+	case X86:
+		return "defined(__i386__)"
+	case X86_64:
+		return "defined(__x86_64__)"
+	}
+}
+
 // The zero Kind is Invalid Kind.
 type Kind uint
 
diff --git a/android_api/libvulkan/proxy/gen_vulkan.go b/android_api/libvulkan/proxy/gen_vulkan.go
index 5bba43e..d5341f1 100644
--- a/android_api/libvulkan/proxy/gen_vulkan.go
+++ b/android_api/libvulkan/proxy/gen_vulkan.go
@@ -279,17 +279,17 @@
 		return err
 	}
 
-	err = printAliasVerification(out_file, sorted_type_names, types)
+	err = printAliasVerification(out_file, sorted_type_names, types, host_arch, guest_arch)
 	if err != nil {
 		return err
 	}
 
-	err = printEnumVerification(out_file, sorted_type_names, types)
+	err = printEnumVerification(out_file, sorted_type_names, types, host_arch, guest_arch)
 	if err != nil {
 		return err
 	}
 
-	err = printHostStructVerification(out_file, sorted_type_names, types)
+	err = printHostStructVerification(out_file, sorted_type_names, types, host_arch, guest_arch)
 	if err != nil {
 		return err
 	}
@@ -421,24 +421,40 @@
 	return nil
 }
 
-func printAliasVerification(w io.Writer, sorted_type_names []string, types map[string]cpp_types.Type) error {
+func printAliasVerification(w io.Writer, sorted_type_names []string, types map[string]cpp_types.Type, host_arch, guest_arch cpp_types.Arch) error {
 	for _, name := range sorted_type_names {
 		typе := types[name]
 		if !vulkan_types.IsVulkanHandle(typе) && !vulkan_types.IsVulkanNondispatchableHandle(typе) && !isAlias(typе) {
 			continue
 		}
+		if isAliasOfOpaque(typе) {
+			continue
+		}
 		_, err := fmt.Fprintf(
 			w,
-			`#if !defined(BERBERIS_%s)
-CHECK_STRUCT_LAYOUT(berberis::%s, sizeof(::%s) * 8, alignof(::%s) * 8);
-#endif  /* BERBERIS_%s */
+			`#if %[7]s
+CHECK_STRUCT_LAYOUT(berberis::%[2]s, %[3]d, %[4]d);
+#if !defined(BERBERIS_%[1]s)
+CHECK_STRUCT_LAYOUT(::%[2]s, %[3]d, %[4]d);
+#endif  /* BERBERIS_%[1]s */
+#elif %[8]s
+CHECK_STRUCT_LAYOUT(berberis::%[2]s, %[5]d, %[6]d);
+#if !defined(BERBERIS_%[1]s)
+CHECK_STRUCT_LAYOUT(::%[2]s, %[5]d, %[6]d);
+#endif  /* BERBERIS_%[1]s */
+#else
+#error Unsupported architecture.
+#endif
 
 `,
 			toEnumNameWithSuffix(name, "NOVERIFY"),
 			name,
-			name,
-			name,
-			toEnumNameWithSuffix(name, "NOVERIFY"))
+			typе.Bits(host_arch),
+			typе.Align(host_arch),
+			typе.Bits(guest_arch),
+			typе.Align(guest_arch),
+			cpp_types.Define(host_arch),
+			cpp_types.Define(guest_arch))
 		if err != nil {
 			return err
 		}
@@ -498,7 +514,7 @@
 	return nil
 }
 
-func printEnumVerification(w io.Writer, sorted_type_names []string, types map[string]cpp_types.Type) error {
+func printEnumVerification(w io.Writer, sorted_type_names []string, types map[string]cpp_types.Type, host_arch, guest_arch cpp_types.Arch) error {
 	for _, name := range sorted_type_names {
 		typе := types[name]
 		// Note: currently enums in vk.xml are architecture-agnostic. If some type is enum then it's always enum, on all
@@ -512,13 +528,30 @@
 		}
 		_, err = fmt.Fprintf(
 			w,
-			`#if !defined(BERBERIS_%s)
-CHECK_STRUCT_LAYOUT(berberis::%s, sizeof(%s) * 8, alignof(%s) * 8);
+			`#if %[7]s
+CHECK_STRUCT_LAYOUT(berberis::%[2]s, %[3]d, %[4]d);
+#elif %[8]s
+CHECK_STRUCT_LAYOUT(berberis::%[2]s, %[5]d, %[6]d);
+#else
+#error Unsupported architecture.
+#endif
+#if !defined(BERBERIS_%[1]s)
+#if %[7]s
+CHECK_STRUCT_LAYOUT(::%[2]s, %[3]d, %[4]d);
+#elif %[8]s
+CHECK_STRUCT_LAYOUT(::%[2]s, %[5]d, %[6]d);
+#else
+#error Unsupported architecture.
+#endif
 `,
 			toEnumNameWithSuffix(name, "NOVERIFY"),
 			name,
-			name,
-			name)
+			typе.Bits(host_arch),
+			typе.Align(host_arch),
+			typе.Bits(guest_arch),
+			typе.Align(guest_arch),
+			cpp_types.Define(host_arch),
+			cpp_types.Define(guest_arch))
 		if err != nil {
 			return err
 		}
@@ -526,12 +559,10 @@
 			field := typе.Field(i, cpp_types.FirstArch).(cpp_types.EnumFieldInfo)
 			_, err = fmt.Fprintf(
 				w,
-				`#if !defined(BERBERIS_%s_NOVERIFY)
-static_assert(std::int64_t(%s) == std::int64_t(berberis::BERBERIS_%s));
+				`#if !defined(BERBERIS_%[1]s_NOVERIFY)
+static_assert(std::int64_t(%[1]s) == std::int64_t(berberis::BERBERIS_%[1]s));
 #endif
 `,
-				field.Name(),
-				field.Name(),
 				field.Name())
 			if err != nil {
 				return err
@@ -539,17 +570,14 @@
 		}
 		_, err = fmt.Fprintf(
 			w,
-			`#if !defined(BERBERIS_%s_NOVERIFY)
-static_assert(std::int64_t(%s) == std::int64_t(berberis::BERBERIS_%s));
-#endif  /* BERBERIS_%s_NOVERIFY */
-#endif  /* BERBERIS_%s */
+			`#if !defined(BERBERIS_%[2]s_NOVERIFY)
+static_assert(std::int64_t(%[2]s) == std::int64_t(berberis::BERBERIS_%[2]s));
+#endif  /* BERBERIS_%[2]s_NOVERIFY */
+#endif  /* BERBERIS_%[1]s */
 
 `,
-			toEnumNameWithSuffix(name, "MAX_ENUM"),
-			toEnumNameWithSuffix(name, "MAX_ENUM"),
-			toEnumNameWithSuffix(name, "MAX_ENUM"),
-			toEnumNameWithSuffix(name, "MAX_ENUM"),
-			toEnumNameWithSuffix(name, "NOVERIFY"))
+			toEnumNameWithSuffix(name, "NOVERIFY"),
+			toEnumNameWithSuffix(name, "MAX_ENUM"))
 		if err != nil {
 			return err
 		}
@@ -3132,34 +3160,91 @@
 	return false
 }
 
-func printHostStructVerification(w io.Writer, sorted_type_names []string, types map[string]cpp_types.Type) error {
+func printHostStructVerification(w io.Writer, sorted_type_names []string, types map[string]cpp_types.Type, host_arch, guest_arch cpp_types.Arch) error {
 	for _, name := range sorted_type_names {
 		typе := types[name]
 		if !isStruct(typе) && !isUnion(typе) {
 			continue
 		}
+		fields_check_berberis_host := []string{}
+		fields_check_platform_host := []string{}
+		for i := uint(0); i < typе.NumField(host_arch); i++ {
+			field := typе.Field(i, host_arch)
+			var field_offset uint
+			if !isUnion(typе) {
+				field_offset = field.(cpp_types.StructFieldInfo).Offset()
+			} else {
+				field_offset = 0
+			}
+			fields_check_berberis_host = append(fields_check_berberis_host,
+				fmt.Sprintf("CHECK_FIELD_LAYOUT(berberis::%[1]s, %[2]s, %[3]d, %[4]d);",
+					name,
+					field.Name(),
+					field_offset,
+					field.Type().Bits(host_arch)))
+			fields_check_platform_host = append(fields_check_platform_host,
+				fmt.Sprintf("CHECK_FIELD_LAYOUT(::%[1]s, %[2]s, %[3]d, %[4]d);",
+					name,
+					field.Name(),
+					field_offset,
+					field.Type().Bits(host_arch)))
+		}
+		fields_check_berberis_guest := []string{}
+		fields_check_platform_guest := []string{}
+		for i := uint(0); i < typе.NumField(guest_arch); i++ {
+			field := typе.Field(i, guest_arch)
+			var field_offset uint
+			if !isUnion(typе) {
+				field_offset = field.(cpp_types.StructFieldInfo).Offset()
+			} else {
+				field_offset = 0
+			}
+			fields_check_berberis_guest = append(fields_check_berberis_guest,
+				fmt.Sprintf("CHECK_FIELD_LAYOUT(berberis::%[1]s, %[2]s, %[3]d, %[4]d);",
+					name,
+					field.Name(),
+					field_offset,
+					field.Type().Bits(guest_arch)))
+			fields_check_platform_guest = append(fields_check_platform_guest,
+				fmt.Sprintf("CHECK_FIELD_LAYOUT(::%[1]s, %[2]s, %[3]d, %[4]d);",
+					name,
+					field.Name(),
+					field_offset,
+					field.Type().Bits(guest_arch)))
+		}
 		_, err := fmt.Fprintf(
 			w,
-			`#if !defined(BERBERIS_%[1]s)
-CHECK_STRUCT_LAYOUT(berberis::%[2]s, sizeof(%[2]s) * 8, alignof(%[2]s) * 8);
+			`#if %[7]s
+CHECK_STRUCT_LAYOUT(berberis::%[2]s, %[3]d, %[4]d);
+%[9]s
+#if !defined(BERBERIS_%[1]s)
+CHECK_STRUCT_LAYOUT(::%[2]s, %[3]d, %[4]d);
+%[10]s
+#endif  /* BERBERIS_%[1]s */
+#elif %[8]s
+CHECK_STRUCT_LAYOUT(berberis::%[2]s, %[5]d, %[6]d);
+%[11]s
+#if !defined(BERBERIS_%[1]s)
+CHECK_STRUCT_LAYOUT(::%[2]s, %[5]d, %[6]d);
+%[12]s
+#endif  /* BERBERIS_%[1]s */
+#else
+#error Unsupported architecture.
+#endif
+
 `,
 			toEnumNameWithSuffix(name, "NOVERIFY"),
-			name)
-		if err != nil {
-			return err
-		}
-		for i := uint(0); i < typе.NumField(cpp_types.FirstArch); i++ {
-			field := typе.Field(i, cpp_types.FirstArch)
-			_, err = fmt.Fprintf(
-				w,
-				"CHECK_FIELD_LAYOUT(berberis::%[1]s, %[2]s, offsetof(::%[1]s, %[2]s) * 8, sizeof(std::declval<::%[1]s*>()->%[2]s) * 8);\n",
-				name,
-				field.Name())
-			if err != nil {
-				return err
-			}
-		}
-		_, err = fmt.Fprintf(w, "#endif  /* %s */\n\n", toEnumNameWithSuffix(name, "NOVERIFY"))
+			name,
+			typе.Bits(host_arch),
+			typе.Align(host_arch),
+			typе.Bits(guest_arch),
+			typе.Align(guest_arch),
+			cpp_types.Define(host_arch),
+			cpp_types.Define(guest_arch),
+			strings.Join(fields_check_berberis_host, "\n"),
+			strings.Join(fields_check_platform_host, "\n"),
+			strings.Join(fields_check_berberis_guest, "\n"),
+			strings.Join(fields_check_platform_guest, "\n"))
 		if err != nil {
 			return err
 		}
@@ -3793,6 +3878,10 @@
 	return cpp_types.IsKind(typе, []cpp_types.Kind{cpp_types.Alias, cpp_types.Enum})
 }
 
+func isAliasOfOpaque(typе cpp_types.Type) bool {
+	return cpp_types.IsKind(typе, []cpp_types.Kind{cpp_types.Alias, cpp_types.Opaque})
+}
+
 func isArray(typе cpp_types.Type) bool {
 	return cpp_types.IsKind(typе, []cpp_types.Kind{cpp_types.Array})
 }
diff --git a/android_api/libvulkan/proxy/vulkan_types.go b/android_api/libvulkan/proxy/vulkan_types.go
index a9f6379..d45bc56 100644
--- a/android_api/libvulkan/proxy/vulkan_types.go
+++ b/android_api/libvulkan/proxy/vulkan_types.go
@@ -35,7 +35,7 @@
 
 var HINSTANCEType = cpp_types.AliasType("HINSTANCE", HANDLEType)
 
-var HMONITORType = cpp_types.AliasType("HINSTANCE", HANDLEType)
+var HMONITORType = cpp_types.AliasType("HMONITOR", HANDLEType)
 
 var HWNDType = cpp_types.AliasType("HWND", HANDLEType)
 
diff --git a/android_api/libvulkan/proxy/vulkan_xml_define.h b/android_api/libvulkan/proxy/vulkan_xml_define.h
index 4b7d1eb..9ce08ff 100644
--- a/android_api/libvulkan/proxy/vulkan_xml_define.h
+++ b/android_api/libvulkan/proxy/vulkan_xml_define.h
@@ -44,8 +44,6 @@
 
 // DirectFB types: vulkan_directfb.h requires definitions of DirectFB types which are not available
 // on Android.
-#define BERBERIS_IDIRECT_NOVERIFY_FB 1
-#define BERBERIS_IDIRECT_FBSURFACE_NOVERIFY 1
 #define BERBERIS_VK_DIRECT_FBSURFACE_CREATE_FLAGS_NOVERIFY_EXT 1
 #define BERBERIS_VK_DIRECT_FBSURFACE_CREATE_INFO_NOVERIFY_EXT 1
 
