Move blob from compiler/ to util/
[mesa.git] / src / intel / vulkan / anv_extensions_gen.py
index dadf20a687e8b1d6e090d50dd83b1a05afc437fb..e83c0e1695864a161117aaf79c3ad4a5fe8177da 100644 (file)
@@ -31,6 +31,8 @@ from mako.template import Template
 
 from anv_extensions import *
 
+platform_defines = []
+
 def _init_exts_from_xml(xml):
     """ Walk the Vulkan XML and fill out extra extension information. """
 
@@ -40,21 +42,16 @@ def _init_exts_from_xml(xml):
     for ext in EXTENSIONS:
         ext_name_map[ext.name] = ext
 
+    # KHR_display is missing from the list.
+    platform_defines.append('VK_USE_PLATFORM_DISPLAY_KHR')
+    for platform in xml.findall('./platforms/platform'):
+        platform_defines.append(platform.attrib['protect'])
+
     for ext_elem in xml.findall('.extensions/extension'):
         ext_name = ext_elem.attrib['name']
         if ext_name not in ext_name_map:
             continue
 
-        # Workaround for VK_ANDROID_native_buffer. Its <extension> element in
-        # vk.xml lists it as supported="disabled" and provides only a stub
-        # definition.  Its <extension> element in Mesa's custom
-        # vk_android_native_buffer.xml, though, lists it as
-        # supported='android-vendor' and fully defines the extension. We want
-        # to skip the <extension> element in vk.xml.
-        if ext_elem.attrib['supported'] == 'disabled':
-            assert ext_name == 'VK_ANDROID_native_buffer'
-            continue
-
         ext = ext_name_map[ext_name]
         ext.type = ext_elem.attrib['type']
 
@@ -80,6 +77,8 @@ struct anv_instance_extension_table {
    };
 };
 
+extern const struct anv_instance_extension_table anv_instance_extensions_supported;
+
 
 #define ANV_DEVICE_EXTENSION_COUNT ${len(device_extensions)}
 
@@ -96,6 +95,12 @@ struct anv_device_extension_table {
    };
 };
 
+struct anv_physical_device;
+
+void
+anv_physical_device_get_supported_extensions(const struct anv_physical_device *device,
+                                             struct anv_device_extension_table *extensions);
+
 #endif /* ANV_EXTENSIONS_H */
 """)
 
@@ -105,12 +110,12 @@ _TEMPLATE_C = Template(COPYRIGHT + """
 #include "vk_util.h"
 
 /* Convert the VK_USE_PLATFORM_* defines to booleans */
-%for platform in ['ANDROID', 'WAYLAND', 'XCB', 'XLIB']:
-#ifdef VK_USE_PLATFORM_${platform}_KHR
-#   undef VK_USE_PLATFORM_${platform}_KHR
-#   define VK_USE_PLATFORM_${platform}_KHR true
+%for platform_define in platform_defines:
+#ifdef ${platform_define}
+#   undef ${platform_define}
+#   define ${platform_define} true
 #else
-#   define VK_USE_PLATFORM_${platform}_KHR false
+#   define ${platform_define} false
 #endif
 %endfor
 
@@ -124,7 +129,17 @@ _TEMPLATE_C = Template(COPYRIGHT + """
 
 #define ANV_HAS_SURFACE (VK_USE_PLATFORM_WAYLAND_KHR || \\
                          VK_USE_PLATFORM_XCB_KHR || \\
-                         VK_USE_PLATFORM_XLIB_KHR)
+                         VK_USE_PLATFORM_XLIB_KHR || \\
+                         VK_USE_PLATFORM_DISPLAY_KHR)
+
+static const uint32_t MAX_API_VERSION = ${MAX_API_VERSION.c_vk_version()};
+
+VkResult anv_EnumerateInstanceVersion(
+    uint32_t*                                   pApiVersion)
+{
+    *pApiVersion = MAX_API_VERSION;
+    return VK_SUCCESS;
+}
 
 const VkExtensionProperties anv_instance_extensions[ANV_INSTANCE_EXTENSION_COUNT] = {
 %for ext in instance_extensions:
@@ -132,41 +147,28 @@ const VkExtensionProperties anv_instance_extensions[ANV_INSTANCE_EXTENSION_COUNT
 %endfor
 };
 
-bool
-anv_instance_extension_supported(const char *name)
-{
+const struct anv_instance_extension_table anv_instance_extensions_supported = {
 %for ext in instance_extensions:
-    if (strcmp(name, "${ext.name}") == 0)
-        return ${ext.enable};
+   .${ext.name[3:]} = ${ext.enable},
 %endfor
-    return false;
-}
+};
 
-VkResult anv_EnumerateInstanceExtensionProperties(
-    const char*                                 pLayerName,
-    uint32_t*                                   pPropertyCount,
-    VkExtensionProperties*                      pProperties)
+uint32_t
+anv_physical_device_api_version(struct anv_physical_device *device)
 {
-    VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
+    uint32_t version = 0;
 
-%for ext in instance_extensions:
-    if (${ext.enable}) {
-        vk_outarray_append(&out, prop) {
-            *prop = (VkExtensionProperties) {
-                .extensionName = "${ext.name}",
-                .specVersion = ${ext.ext_version},
-            };
-        }
-    }
-%endfor
+    uint32_t override = vk_get_version_override();
+    if (override)
+        return MIN2(override, MAX_API_VERSION);
 
-    return vk_outarray_status(&out);
-}
+%for version in API_VERSIONS:
+    if (!(${version.enable}))
+        return version;
+    version = ${version.version.c_vk_version()};
 
-uint32_t
-anv_physical_device_api_version(struct anv_physical_device *dev)
-{
-    return ${MAX_API_VERSION.c_vk_version()};
+%endfor
+    return version;
 }
 
 const VkExtensionProperties anv_device_extensions[ANV_DEVICE_EXTENSION_COUNT] = {
@@ -175,39 +177,15 @@ const VkExtensionProperties anv_device_extensions[ANV_DEVICE_EXTENSION_COUNT] =
 %endfor
 };
 
-bool
-anv_physical_device_extension_supported(struct anv_physical_device *device,
-                                        const char *name)
+void
+anv_physical_device_get_supported_extensions(const struct anv_physical_device *device,
+                                             struct anv_device_extension_table *extensions)
 {
+   *extensions = (struct anv_device_extension_table) {
 %for ext in device_extensions:
-    if (strcmp(name, "${ext.name}") == 0)
-        return ${ext.enable};
+      .${ext.name[3:]} = ${ext.enable},
 %endfor
-    return false;
-}
-
-VkResult anv_EnumerateDeviceExtensionProperties(
-    VkPhysicalDevice                            physicalDevice,
-    const char*                                 pLayerName,
-    uint32_t*                                   pPropertyCount,
-    VkExtensionProperties*                      pProperties)
-{
-    ANV_FROM_HANDLE(anv_physical_device, device, physicalDevice);
-    VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
-    (void)device;
-
-%for ext in device_extensions:
-    if (${ext.enable}) {
-        vk_outarray_append(&out, prop) {
-            *prop = (VkExtensionProperties) {
-                .extensionName = "${ext.name}",
-                .specVersion = ${ext.ext_version},
-            };
-        }
-    }
-%endfor
-
-    return vk_outarray_status(&out);
+   };
 }
 """)
 
@@ -229,9 +207,11 @@ if __name__ == '__main__':
         assert ext.type == 'instance' or ext.type == 'device'
 
     template_env = {
+        'API_VERSIONS': API_VERSIONS,
         'MAX_API_VERSION': MAX_API_VERSION,
         'instance_extensions': [e for e in EXTENSIONS if e.type == 'instance'],
         'device_extensions': [e for e in EXTENSIONS if e.type == 'device'],
+        'platform_defines': platform_defines,
     }
 
     if args.out_h: