summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/zink/zink_device_info.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/zink/zink_device_info.py')
-rw-r--r--src/gallium/drivers/zink/zink_device_info.py454
1 files changed, 339 insertions, 115 deletions
diff --git a/src/gallium/drivers/zink/zink_device_info.py b/src/gallium/drivers/zink/zink_device_info.py
index 3ac8011336a..ec265deccb9 100644
--- a/src/gallium/drivers/zink/zink_device_info.py
+++ b/src/gallium/drivers/zink/zink_device_info.py
@@ -60,21 +60,63 @@ import sys
# - guard: adds a #if defined(`extension_name`)/#endif guard around the code generated for this Extension.
EXTENSIONS = [
Extension("VK_KHR_maintenance1",
- required=True),
+ required=True),
Extension("VK_KHR_maintenance2"),
Extension("VK_KHR_maintenance3"),
+ Extension("VK_KHR_maintenance4",
+ alias="maint4",
+ features=True),
+ Extension("VK_KHR_maintenance5",
+ alias="maint5",
+ features=True, properties=True),
+ Extension("VK_KHR_maintenance6",
+ alias="maint6",
+ features=True, properties=True),
Extension("VK_KHR_external_memory"),
Extension("VK_KHR_external_memory_fd"),
+ Extension("VK_KHR_vulkan_memory_model"),
+ Extension("VK_KHR_workgroup_memory_explicit_layout", alias="explicit_layout", features=True),
+ Extension("VK_KHR_pipeline_executable_properties",
+ alias="pipestats",
+ features=True),
+ Extension("VK_KHR_external_semaphore_fd"),
+ Extension("VK_KHR_create_renderpass2",
+ required=True),
+ Extension("VK_KHR_synchronization2",
+ alias="sync2",
+ features=True),
+ Extension("VK_KHR_external_memory_win32"),
+ Extension("VK_KHR_external_semaphore_win32"),
Extension("VK_EXT_external_memory_dma_buf"),
+ Extension("VK_KHR_buffer_device_address",
+ alias="bda",
+ features=True),
+ Extension("VK_EXT_external_memory_host", alias="ext_host_mem", properties=True),
Extension("VK_EXT_queue_family_foreign"),
+ Extension("VK_KHR_swapchain_mutable_format"),
+ Extension("VK_KHR_incremental_present"),
Extension("VK_EXT_provoking_vertex",
- alias="pv",
- features=True,
- properties=True,
- conditions=["$feats.provokingVertexLast"]),
+ alias="pv",
+ features=True,
+ properties=True,
+ conditions=["$feats.provokingVertexLast"]),
Extension("VK_EXT_shader_viewport_index_layer"),
Extension("VK_KHR_get_memory_requirements2"),
Extension("VK_EXT_post_depth_coverage"),
+ Extension("VK_EXT_depth_clip_control",
+ alias="clip_control",
+ features=True),
+ Extension("VK_EXT_depth_clamp_zero_one",
+ alias="clamp_01",
+ features=True),
+ Extension("VK_EXT_shader_subgroup_ballot"),
+ Extension("VK_EXT_shader_subgroup_vote"),
+ Extension("VK_EXT_shader_atomic_float",
+ alias="atomic_float",
+ features=True),
+ Extension("VK_KHR_shader_atomic_int64",
+ alias="atomic_int",
+ features=True),
Extension("VK_KHR_8bit_storage",
alias="storage_8bit",
features=True,
@@ -83,126 +125,205 @@ EXTENSIONS = [
alias="storage_16bit",
features=True,
conditions=["$feats.storageBuffer16BitAccess"]),
+ Extension("VK_EXT_image_2d_view_of_3d",
+ alias="view2d",
+ features=True),
Extension("VK_KHR_driver_properties",
- alias="driver",
- properties=True),
+ alias="driver",
+ properties=True),
Extension("VK_EXT_memory_budget"),
+ Extension("VK_EXT_memory_priority", alias="memprio", features=True),
+ Extension("VK_EXT_pageable_device_local_memory", alias="mempage", features=True),
Extension("VK_KHR_draw_indirect_count"),
+ Extension("VK_EXT_dynamic_rendering_unused_attachments", alias="unused", features=True),
+ Extension("VK_EXT_shader_object", alias="shobj", features=True, properties=True),
+ Extension("VK_EXT_attachment_feedback_loop_layout",
+ alias="feedback_loop",
+ features=True),
+ Extension("VK_EXT_attachment_feedback_loop_dynamic_state", alias="feedback_dyn", features=True),
+ Extension("VK_NV_device_generated_commands", alias="nv_dgc", features=True, properties=True),
Extension("VK_EXT_fragment_shader_interlock",
- alias="interlock",
- features=True,
- conditions=["$feats.fragmentShaderSampleInterlock", "$feats.fragmentShaderPixelInterlock"]),
+ alias="interlock",
+ features=True,
+ conditions=["$feats.fragmentShaderSampleInterlock", "$feats.fragmentShaderPixelInterlock"]),
Extension("VK_EXT_sample_locations",
- alias="sample_locations",
- properties=True),
- Extension("VK_EXT_conservative_rasterization",
- alias="cons_raster",
- properties=True,
- conditions=["$props.fullyCoveredFragmentShaderInputVariable"]),
+ alias="sample_locations",
+ properties=True),
Extension("VK_KHR_shader_draw_parameters"),
Extension("VK_KHR_sampler_mirror_clamp_to_edge"),
+ Extension("VK_EXT_descriptor_buffer", alias="db", features=True, properties=True),
Extension("VK_EXT_conditional_rendering",
- alias="cond_render",
- features=True,
- conditions=["$feats.conditionalRendering"]),
+ alias="cond_render",
+ features=True,
+ conditions=["$feats.conditionalRendering"]),
Extension("VK_EXT_transform_feedback",
- alias="tf",
- properties=True,
- features=True,
- conditions=["$feats.transformFeedback"]),
+ alias="tf",
+ properties=True,
+ features=True,
+ conditions=["$feats.transformFeedback"]),
Extension("VK_EXT_index_type_uint8",
- alias="index_uint8",
- features=True,
- conditions=["$feats.indexTypeUint8"]),
+ alias="index_uint8",
+ features=True,
+ conditions=["$feats.indexTypeUint8"]),
+ Extension("VK_KHR_image_format_list"),
+ Extension("VK_KHR_sampler_ycbcr_conversion"),
Extension("VK_KHR_imageless_framebuffer",
- alias="imgless",
- features=True,
- conditions=["$feats.imagelessFramebuffer"]),
+ alias="imgless",
+ features=True,
+ required=True),
Extension("VK_EXT_robustness2",
- alias="rb2",
- properties=True,
- features=True,
- conditions=["$feats.nullDescriptor"]),
+ alias="rb2",
+ properties=True,
+ features=True,
+ conditions=["$feats.nullDescriptor"]),
+ Extension("VK_EXT_image_robustness",
+ alias="rb_image",
+ features=True),
Extension("VK_EXT_image_drm_format_modifier"),
Extension("VK_EXT_vertex_attribute_divisor",
- alias="vdiv",
- properties=True,
- features=True,
- conditions=["$feats.vertexAttributeInstanceRateDivisor"]),
+ alias="vdiv",
+ properties=True,
+ features=True,
+ conditions=["$feats.vertexAttributeInstanceRateDivisor"]),
Extension("VK_EXT_calibrated_timestamps"),
+ Extension("VK_NV_linear_color_attachment",
+ alias="linear_color",
+ features=True),
+ Extension("VK_KHR_dynamic_rendering",
+ alias="dynamic_render",
+ features=True),
+ Extension("VK_KHR_dynamic_rendering_local_read",
+ alias="drlr",
+ features=True),
+ Extension("VK_EXT_multisampled_render_to_single_sampled",
+ alias="msrtss",
+ features=True),
Extension("VK_KHR_shader_clock",
- alias="shader_clock",
- features=True,
- conditions=["$feats.shaderSubgroupClock"]),
+ alias="shader_clock",
+ features=True,
+ conditions=["$feats.shaderSubgroupClock"]),
+ Extension("VK_INTEL_shader_integer_functions2",
+ alias="shader_int_fns2",
+ features=True,
+ conditions=["$feats.shaderIntegerFunctions2"]),
Extension("VK_EXT_sampler_filter_minmax",
- alias="reduction",
- properties=True),
+ alias="reduction",
+ properties=True,
+ conditions=["$props.filterMinmaxSingleComponentFormats"]),
Extension("VK_EXT_custom_border_color",
- alias="border_color",
- properties=True,
- features=True,
- conditions=["$feats.customBorderColors"]),
+ alias="border_color",
+ properties=True,
+ features=True,
+ conditions=["$feats.customBorderColors"]),
+ Extension("VK_EXT_non_seamless_cube_map",
+ alias="nonseamless",
+ features=True),
+ Extension("VK_EXT_border_color_swizzle",
+ alias="border_swizzle",
+ features=True),
Extension("VK_EXT_blend_operation_advanced",
- alias="blend",
- properties=True,
- # TODO: we can probably support non-premul here with some work?
- conditions=["$props.advancedBlendNonPremultipliedSrcColor", "$props.advancedBlendNonPremultipliedDstColor"]),
+ alias="blend",
+ properties=True,
+ # TODO: we can probably support non-premul here with some work?
+ conditions=["$props.advancedBlendNonPremultipliedSrcColor", "$props.advancedBlendNonPremultipliedDstColor"]),
Extension("VK_EXT_extended_dynamic_state",
- alias="dynamic_state",
- features=True,
- conditions=["$feats.extendedDynamicState"]),
+ alias="dynamic_state",
+ features=True,
+ conditions=["$feats.extendedDynamicState"]),
Extension("VK_EXT_extended_dynamic_state2",
- alias="dynamic_state2",
- features=True,
- conditions=["$feats.extendedDynamicState2"]),
+ alias="dynamic_state2",
+ features=True,
+ conditions=["$feats.extendedDynamicState2"]),
+ Extension("VK_EXT_extended_dynamic_state3",
+ alias="dynamic_state3",
+ properties=True,
+ features=True),
Extension("VK_EXT_pipeline_creation_cache_control",
- alias="pipeline_cache_control",
- features=True,
- conditions=["$feats.pipelineCreationCacheControl"]),
+ alias="pipeline_cache_control",
+ features=True,
+ conditions=["$feats.pipelineCreationCacheControl"]),
Extension("VK_EXT_shader_stencil_export",
- alias="stencil_export"),
- Extension("VK_EXTX_portability_subset",
- alias="portability_subset_extx",
- nonstandard=True,
- properties=True,
- features=True,
- guard=True),
- Extension("VK_KHR_timeline_semaphore"),
+ alias="stencil_export"),
+ Extension("VK_KHR_portability_subset",
+ alias="portability_subset",
+ features=True,
+ guard=True),
+ Extension("VK_NV_compute_shader_derivatives",
+ alias="shader_derivs",
+ features=True,
+ conditions=["$feats.computeDerivativeGroupQuads", "$feats.computeDerivativeGroupLinear"]),
+ Extension("VK_KHR_timeline_semaphore",
+ alias="timeline",
+ features=True),
+ Extension("VK_EXT_color_write_enable",
+ alias="cwrite",
+ features=True),
Extension("VK_EXT_4444_formats",
- alias="format_4444",
- features=True),
+ alias="format_4444",
+ features=True),
+ Extension("VK_EXT_host_image_copy",
+ alias="hic",
+ features=True,
+ properties=True),
Extension("VK_EXT_scalar_block_layout",
- alias="scalar_block_layout",
- features=True,
- conditions=["$feats.scalarBlockLayout"]),
+ alias="scalar_block_layout",
+ features=True,
+ conditions=["$feats.scalarBlockLayout"]),
Extension("VK_KHR_swapchain"),
+ Extension("VK_EXT_rasterization_order_attachment_access",
+ alias="rast_order_access",
+ features=True,
+ conditions=["$feats.rasterizationOrderColorAttachmentAccess"]),
Extension("VK_KHR_shader_float16_int8",
alias="shader_float16_int8",
features=True),
Extension("VK_EXT_multi_draw",
alias="multidraw",
- features=True,
- properties=True,
- conditions=["$feats.multiDraw"]),
+ features=True,
+ properties=True,
+ conditions=["$feats.multiDraw"]),
+ Extension("VK_EXT_primitives_generated_query",
+ alias="primgen",
+ features=True),
+ Extension("VK_KHR_pipeline_library"),
+ Extension("VK_EXT_graphics_pipeline_library",
+ alias="gpl",
+ features=True,
+ properties=True),
Extension("VK_KHR_push_descriptor",
- alias="push",
- properties=True),
+ alias="push",
+ properties=True),
Extension("VK_KHR_descriptor_update_template",
- alias="template"),
+ alias="template", required=True),
Extension("VK_EXT_line_rasterization",
- alias="line_rast",
- properties=True,
- features=True),
+ alias="line_rast",
+ properties=True,
+ features=True),
Extension("VK_EXT_vertex_input_dynamic_state",
- alias="vertex_input",
- features=True,
- conditions=["$feats.vertexInputDynamicState"]),
+ alias="vertex_input",
+ features=True,
+ conditions=["$feats.vertexInputDynamicState"]),
Extension("VK_EXT_primitive_topology_list_restart",
- alias="list_restart",
- features=True,
- conditions=["$feats.primitiveTopologyListRestart"]),
+ alias="list_restart",
+ features=True,
+ conditions=["$feats.primitiveTopologyListRestart"]),
Extension("VK_KHR_dedicated_allocation",
- alias="dedicated"),
+ alias="dedicated"),
+ Extension("VK_EXT_descriptor_indexing",
+ alias="desc_indexing",
+ features=True,
+ properties=True,
+ conditions=["$feats.descriptorBindingPartiallyBound"]),
+ Extension("VK_EXT_depth_clip_enable",
+ alias="depth_clip_enable",
+ features=True),
+ Extension("VK_EXT_shader_demote_to_helper_invocation",
+ alias="demote",
+ features=True,
+ conditions=["$feats.shaderDemoteToHelperInvocation"]),
+ Extension("VK_KHR_shader_float_controls",
+ alias="float_controls"),
+ Extension("VK_KHR_format_feature_flags2"),
]
# constructor: Versions(device_version(major, minor, patch), struct_version(major, minor))
@@ -214,14 +335,13 @@ EXTENSIONS = [
VERSIONS = [
Version((1,1,0), (1,1)),
Version((1,2,0), (1,2)),
+ Version((1,3,0), (1,3)),
]
# There exists some inconsistencies regarding the enum constants, fix them.
# This is basically generated_code.replace(key, value).
REPLACEMENTS = {
- "ROBUSTNESS2": "ROBUSTNESS_2",
"PROPERTIES_PROPERTIES": "PROPERTIES",
- "EXTENDED_DYNAMIC_STATE2": "EXTENDED_DYNAMIC_STATE_2",
}
@@ -252,7 +372,16 @@ header_code = """
#include "util/u_memory.h"
-#include <vulkan/vulkan.h>
+#include <vulkan/vulkan_core.h>
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+#include <vulkan/vulkan_beta.h>
+#endif
+
+#ifdef _WIN32
+#include <windows.h>
+#include <vulkan/vulkan_win32.h>
+#endif
struct zink_screen;
@@ -269,6 +398,7 @@ struct zink_device_info {
%endfor
VkPhysicalDeviceFeatures2 feats;
+ VkPhysicalDeviceSubgroupProperties subgroup;
%for version in versions:
VkPhysicalDeviceVulkan${version.struct()}Features feats${version.struct()};
%endfor
@@ -279,6 +409,7 @@ struct zink_device_info {
%endfor
VkPhysicalDeviceMemoryProperties mem_props;
+ VkPhysicalDeviceIDProperties deviceid_props;
%for ext in extensions:
<%helpers:guard ext="${ext}">
@@ -319,6 +450,7 @@ void zink_stub_${cmd.lstrip("vk")}(void);
impl_code = """
<%namespace name="helpers" file="helpers"/>
+#include "vk_enum_to_str.h"
#include "zink_device_info.h"
#include "zink_screen.h"
@@ -334,14 +466,22 @@ zink_get_physical_device_info(struct zink_screen *screen)
uint32_t num_extensions = 0;
// get device memory properties
- vkGetPhysicalDeviceMemoryProperties(screen->pdev, &info->mem_props);
+ screen->vk.GetPhysicalDeviceMemoryProperties(screen->pdev, &info->mem_props);
// enumerate device supported extensions
- if (vkEnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, NULL) == VK_SUCCESS) {
+ VkResult result = screen->vk.EnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, NULL);
+ if (result != VK_SUCCESS) {
+ if (!screen->implicitly_loaded)
+ mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result));
+ } else {
if (num_extensions > 0) {
VkExtensionProperties *extensions = MALLOC(sizeof(VkExtensionProperties) * num_extensions);
if (!extensions) goto fail;
- vkEnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, extensions);
+ result = screen->vk.EnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, extensions);
+ if (result != VK_SUCCESS) {
+ if (!screen->implicitly_loaded)
+ mesa_loge("ZINK: vkEnumerateDeviceExtensionProperties failed (%s)", vk_Result_to_str(result));
+ }
for (uint32_t i = 0; i < num_extensions; ++i) {
%for ext in extensions:
@@ -361,22 +501,6 @@ zink_get_physical_device_info(struct zink_screen *screen)
}
}
- %for version in versions:
- if (${version.version()} <= screen->vk_version) {
- %for ext in extensions:
- %if ext.core_since and ext.core_since.struct_version == version.struct_version:
- <%helpers:guard ext="${ext}">
- %if not (ext.has_features or ext.has_properties):
- info->have_${ext.name_with_vendor()} = true;
- %else:
- support_${ext.name_with_vendor()} = true;
- %endif
- </%helpers:guard>
- %endif
- %endfor
- }
- %endfor
-
// get device features
if (screen->vk.GetPhysicalDeviceFeatures2) {
// check for device extension features
@@ -399,7 +523,11 @@ zink_get_physical_device_info(struct zink_screen *screen)
%for ext in extensions:
%if ext.has_features:
<%helpers:guard ext="${ext}">
+%if ext.features_promoted:
+ if (support_${ext.name_with_vendor()} && !info->have_vulkan${ext.core_since.struct()}) {
+%else:
if (support_${ext.name_with_vendor()}) {
+%endif
info->${ext.field("feats")}.sType = ${ext.stype("FEATURES")};
info->${ext.field("feats")}.pNext = info->feats.pNext;
info->feats.pNext = &info->${ext.field("feats")};
@@ -410,7 +538,7 @@ zink_get_physical_device_info(struct zink_screen *screen)
screen->vk.GetPhysicalDeviceFeatures2(screen->pdev, &info->feats);
} else {
- vkGetPhysicalDeviceFeatures(screen->pdev, &info->feats.features);
+ screen->vk.GetPhysicalDeviceFeatures(screen->pdev, &info->feats.features);
}
// check for device properties
@@ -434,7 +562,11 @@ zink_get_physical_device_info(struct zink_screen *screen)
%for ext in extensions:
%if ext.has_properties:
<%helpers:guard ext="${ext}">
+%if ext.properties_promoted:
+ if (support_${ext.name_with_vendor()} && !info->have_vulkan${ext.core_since.struct()}) {
+%else:
if (support_${ext.name_with_vendor()}) {
+%endif
info->${ext.field("props")}.sType = ${ext.stype("PROPERTIES")};
info->${ext.field("props")}.pNext = props.pNext;
props.pNext = &info->${ext.field("props")};
@@ -443,10 +575,58 @@ zink_get_physical_device_info(struct zink_screen *screen)
%endif
%endfor
+ if (screen->vk_version < VK_MAKE_VERSION(1,2,0) && screen->instance_info.have_KHR_external_memory_capabilities) {
+ info->deviceid_props.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
+ info->deviceid_props.pNext = props.pNext;
+ props.pNext = &info->deviceid_props;
+ }
+
+ if (screen->vk_version >= VK_MAKE_VERSION(1,1,0)) {
+ info->subgroup.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES;
+ info->subgroup.pNext = props.pNext;
+ props.pNext = &info->subgroup;
+ }
+
// note: setting up local VkPhysicalDeviceProperties2.
screen->vk.GetPhysicalDeviceProperties2(screen->pdev, &props);
}
+ /* We re-apply the fields from VkPhysicalDeviceVulkanXYFeatures struct
+ * onto their respective fields in the VkPhysicalDeviceExtensionNameFeatures
+ * struct if the former is provided by the VK implementation.
+ *
+ * As for why this is done: the spec mentions that once an extension is
+ * promoted to core and its feature fields are added in VulkanXYFeatures,
+ * including both ExtensionNameFeatures and VulkanXYFeatures at the same
+ * time is prohibited when using vkGetPhysicalDeviceFeatures2.
+ */
+%for ext in extensions:
+%if ext.features_promoted:
+ if (info->have_vulkan${ext.core_since.struct()}) {
+ %for field in registry.get_registry_entry(ext.name).features_fields:
+ info->${ext.field("feats")}.${field} = info->feats${ext.core_since.struct()}.${field};
+ %endfor
+ }
+%endif
+%endfor
+
+ /* See above, but for VulkanXYProperties.
+ * Unlike VulkanXYFeatures with all the booleans, VulkanXYProperties can
+ * contain different types of data, including arrays. The C language hates us
+ * when we assign an array to another array, therefore we use an memcpy here.
+ */
+%for ext in extensions:
+%if ext.properties_promoted:
+ if (info->have_vulkan${ext.core_since.struct()}) {
+ %for field in registry.get_registry_entry(ext.name).properties_fields:
+ memcpy(&info->${ext.field("props")}.${field},
+ &info->props${ext.core_since.struct()}.${field},
+ sizeof(info->${ext.field("props")}.${field}));
+ %endfor
+ }
+%endif
+%endfor
+
// enable the extensions if they match the conditions given by ext.enable_conds
if (screen->vk.GetPhysicalDeviceProperties2) {
%for ext in extensions:
@@ -484,6 +664,36 @@ zink_get_physical_device_info(struct zink_screen *screen)
info->num_extensions = num_extensions;
+ info->feats.pNext = NULL;
+
+%for version in versions:
+%if version.device_version < (1,2,0):
+ if (VK_MAKE_VERSION(1,2,0) <= screen->vk_version) {
+ /* VkPhysicalDeviceVulkan11Features was added in 1.2, not 1.1 as one would think */
+%else:
+ if (${version.version()} <= screen->vk_version) {
+%endif
+ info->feats${version.struct()}.pNext = info->feats.pNext;
+ info->feats.pNext = &info->feats${version.struct()};
+ }
+%endfor
+
+%for ext in extensions:
+%if ext.has_features:
+<%helpers:guard ext="${ext}">
+%if ext.features_promoted:
+ if (info->have_${ext.name_with_vendor()} && !info->have_vulkan${ext.core_since.struct()}) {
+%else:
+ if (info->have_${ext.name_with_vendor()}) {
+%endif
+ info->${ext.field("feats")}.sType = ${ext.stype("FEATURES")};
+ info->${ext.field("feats")}.pNext = info->feats.pNext;
+ info->feats.pNext = &info->${ext.field("feats")};
+ }
+</%helpers:guard>
+%endif
+%endfor
+
return true;
fail:
@@ -495,8 +705,12 @@ zink_verify_device_extensions(struct zink_screen *screen)
{
%for ext in extensions:
%if registry.in_registry(ext.name):
+<%helpers:guard ext="${ext}">
if (screen->info.have_${ext.name_with_vendor()}) {
%for cmd in registry.get_registry_entry(ext.name).device_commands:
+%if cmd.find("win32"):
+#ifdef _WIN32
+%endif
if (!screen->vk.${cmd.lstrip("vk")}) {
#ifndef NDEBUG
screen->vk.${cmd.lstrip("vk")} = (PFN_${cmd})zink_stub_${cmd.lstrip("vk")};
@@ -504,8 +718,12 @@ zink_verify_device_extensions(struct zink_screen *screen)
screen->vk.${cmd.lstrip("vk")} = (PFN_${cmd})zink_stub_function_not_loaded;
#endif
}
+%if cmd.find("win32"):
+#endif
+%endif
%endfor
}
+</%helpers:guard>
%endif
%endfor
}
@@ -589,15 +807,21 @@ if __name__ == "__main__":
if not (entry.features_struct and ext.physical_device_struct("Features") == entry.features_struct):
error_count += 1
print("The extension {} does not provide a features struct.".format(ext.name))
+ ext.features_promoted = entry.features_promoted
if ext.has_properties:
if not (entry.properties_struct and ext.physical_device_struct("Properties") == entry.properties_struct):
error_count += 1
print("The extension {} does not provide a properties struct.".format(ext.name))
- print(entry.properties_struct, ext.physical_device_struct("Properties"))
+ ext.properties_promoted = entry.properties_promoted
- if entry.promoted_in:
+ if entry.promoted_in and entry.promoted_in <= versions[-1].struct_version:
ext.core_since = Version((*entry.promoted_in, 0))
+ else:
+ # even if the ext is promoted in a newer VK version, consider it
+ # unpromoted until there's an entry for that VK version in VERSIONS
+ ext.features_promoted = False
+ ext.properties_promoted = False
if error_count > 0:
print("zink_device_info.py: Found {} error(s) in total. Quitting.".format(error_count))
@@ -606,12 +830,12 @@ if __name__ == "__main__":
lookup = TemplateLookup()
lookup.put_string("helpers", include_template)
- with open(header_path, "w") as header_file:
+ with open(header_path, "w", encoding='utf-8') as header_file:
header = Template(header_code, lookup=lookup).render(extensions=extensions, versions=versions, registry=registry).strip()
header = replace_code(header, replacement)
print(header, file=header_file)
- with open(impl_path, "w") as impl_file:
+ with open(impl_path, "w", encoding='utf-8') as impl_file:
impl = Template(impl_code, lookup=lookup).render(extensions=extensions, versions=versions, registry=registry).strip()
impl = replace_code(impl, replacement)
print(impl, file=impl_file)