safestruct: Add VkPipelineCreatInfoKHR workaround
Pipeline create info structs can appear in the VkPipelineCreatInfoKHR pNext chain even though they don't extend that structure in the traditional sense.
This commit is contained in:
parent
8f19d57274
commit
fbb4db92c6
2 changed files with 37 additions and 2 deletions
|
@ -82,6 +82,17 @@ class SafeStructOutputGenerator(BaseGenerator):
|
||||||
', const bool is_host, const VkAccelerationStructureBuildRangeInfoKHR *build_range_info',
|
', const bool is_host, const VkAccelerationStructureBuildRangeInfoKHR *build_range_info',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def isInPnextChain(self, struct: Struct) -> bool:
|
||||||
|
# Can appear in VkPipelineCreateInfoKHR::pNext even though it isn't listed in the xml structextends attribute
|
||||||
|
# VUID-VkPipelineCreateInfoKHR-pNext-09604
|
||||||
|
pipeline_create_infos = [
|
||||||
|
'VkGraphicsPipelineCreateInfo',
|
||||||
|
'VkExecutionGraphPipelineCreateInfoAMDX',
|
||||||
|
'VkRayTracingPipelineCreateInfoKHR',
|
||||||
|
'VkComputePipelineCreateInfo',
|
||||||
|
]
|
||||||
|
return struct.extends or struct.name in pipeline_create_infos
|
||||||
|
|
||||||
# Determine if a structure needs a safe_struct helper function
|
# Determine if a structure needs a safe_struct helper function
|
||||||
# That is, it has an sType or one of its members is a pointer
|
# That is, it has an sType or one of its members is a pointer
|
||||||
def needSafeStruct(self, struct: Struct) -> bool:
|
def needSafeStruct(self, struct: Struct) -> bool:
|
||||||
|
@ -296,7 +307,7 @@ void *SafePnextCopy(const void *pNext, PNextCopyState* copy_state) {
|
||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
guard_helper = PlatformGuardHelper()
|
guard_helper = PlatformGuardHelper()
|
||||||
for struct in [x for x in self.vk.structs.values() if x.extends]:
|
for struct in filter(self.isInPnextChain, self.vk.structs.values()):
|
||||||
safe_name = self.convertName(struct.name)
|
safe_name = self.convertName(struct.name)
|
||||||
out.extend(guard_helper.add_guard(struct.protect))
|
out.extend(guard_helper.add_guard(struct.protect))
|
||||||
out.append(f' case {struct.sType}:\n')
|
out.append(f' case {struct.sType}:\n')
|
||||||
|
@ -352,7 +363,7 @@ void FreePnextChain(const void *pNext) {
|
||||||
break;
|
break;
|
||||||
''')
|
''')
|
||||||
|
|
||||||
for struct in [x for x in self.vk.structs.values() if x.extends]:
|
for struct in filter(self.isInPnextChain, self.vk.structs.values()):
|
||||||
safe_name = self.convertName(struct.name)
|
safe_name = self.convertName(struct.name)
|
||||||
out.extend(guard_helper.add_guard(struct.protect))
|
out.extend(guard_helper.add_guard(struct.protect))
|
||||||
out.append(f' case {struct.sType}:\n')
|
out.append(f' case {struct.sType}:\n')
|
||||||
|
|
|
@ -60,6 +60,12 @@ void *SafePnextCopy(const void *pNext, PNextCopyState* copy_state) {
|
||||||
case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:
|
case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:
|
||||||
safe_pNext = new safe_VkShaderModuleCreateInfo(reinterpret_cast<const VkShaderModuleCreateInfo *>(pNext), copy_state, false);
|
safe_pNext = new safe_VkShaderModuleCreateInfo(reinterpret_cast<const VkShaderModuleCreateInfo *>(pNext), copy_state, false);
|
||||||
break;
|
break;
|
||||||
|
case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO:
|
||||||
|
safe_pNext = new safe_VkComputePipelineCreateInfo(reinterpret_cast<const VkComputePipelineCreateInfo *>(pNext), copy_state, false);
|
||||||
|
break;
|
||||||
|
case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO:
|
||||||
|
safe_pNext = new safe_VkGraphicsPipelineCreateInfo(reinterpret_cast<const VkGraphicsPipelineCreateInfo *>(pNext), copy_state, false);
|
||||||
|
break;
|
||||||
case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:
|
case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:
|
||||||
safe_pNext = new safe_VkPipelineLayoutCreateInfo(reinterpret_cast<const VkPipelineLayoutCreateInfo *>(pNext), copy_state, false);
|
safe_pNext = new safe_VkPipelineLayoutCreateInfo(reinterpret_cast<const VkPipelineLayoutCreateInfo *>(pNext), copy_state, false);
|
||||||
break;
|
break;
|
||||||
|
@ -937,6 +943,9 @@ void *SafePnextCopy(const void *pNext, PNextCopyState* copy_state) {
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX:
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX:
|
||||||
safe_pNext = new safe_VkPhysicalDeviceShaderEnqueuePropertiesAMDX(reinterpret_cast<const VkPhysicalDeviceShaderEnqueuePropertiesAMDX *>(pNext), copy_state, false);
|
safe_pNext = new safe_VkPhysicalDeviceShaderEnqueuePropertiesAMDX(reinterpret_cast<const VkPhysicalDeviceShaderEnqueuePropertiesAMDX *>(pNext), copy_state, false);
|
||||||
break;
|
break;
|
||||||
|
case VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX:
|
||||||
|
safe_pNext = new safe_VkExecutionGraphPipelineCreateInfoAMDX(reinterpret_cast<const VkExecutionGraphPipelineCreateInfoAMDX *>(pNext), copy_state, false);
|
||||||
|
break;
|
||||||
case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX:
|
case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX:
|
||||||
safe_pNext = new safe_VkPipelineShaderStageNodeCreateInfoAMDX(reinterpret_cast<const VkPipelineShaderStageNodeCreateInfoAMDX *>(pNext), copy_state, false);
|
safe_pNext = new safe_VkPipelineShaderStageNodeCreateInfoAMDX(reinterpret_cast<const VkPipelineShaderStageNodeCreateInfoAMDX *>(pNext), copy_state, false);
|
||||||
break;
|
break;
|
||||||
|
@ -1849,6 +1858,9 @@ void *SafePnextCopy(const void *pNext, PNextCopyState* copy_state) {
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
|
||||||
safe_pNext = new safe_VkPhysicalDeviceAccelerationStructurePropertiesKHR(reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR *>(pNext), copy_state, false);
|
safe_pNext = new safe_VkPhysicalDeviceAccelerationStructurePropertiesKHR(reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR *>(pNext), copy_state, false);
|
||||||
break;
|
break;
|
||||||
|
case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR:
|
||||||
|
safe_pNext = new safe_VkRayTracingPipelineCreateInfoKHR(reinterpret_cast<const VkRayTracingPipelineCreateInfoKHR *>(pNext), copy_state, false);
|
||||||
|
break;
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
|
||||||
safe_pNext = new safe_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR *>(pNext), copy_state, false);
|
safe_pNext = new safe_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR *>(pNext), copy_state, false);
|
||||||
break;
|
break;
|
||||||
|
@ -1913,6 +1925,12 @@ void FreePnextChain(const void *pNext) {
|
||||||
case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:
|
case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:
|
||||||
delete reinterpret_cast<safe_VkShaderModuleCreateInfo *>(header);
|
delete reinterpret_cast<safe_VkShaderModuleCreateInfo *>(header);
|
||||||
break;
|
break;
|
||||||
|
case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO:
|
||||||
|
delete reinterpret_cast<safe_VkComputePipelineCreateInfo *>(header);
|
||||||
|
break;
|
||||||
|
case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO:
|
||||||
|
delete reinterpret_cast<safe_VkGraphicsPipelineCreateInfo *>(header);
|
||||||
|
break;
|
||||||
case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:
|
case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:
|
||||||
delete reinterpret_cast<safe_VkPipelineLayoutCreateInfo *>(header);
|
delete reinterpret_cast<safe_VkPipelineLayoutCreateInfo *>(header);
|
||||||
break;
|
break;
|
||||||
|
@ -2790,6 +2808,9 @@ void FreePnextChain(const void *pNext) {
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX:
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX:
|
||||||
delete reinterpret_cast<safe_VkPhysicalDeviceShaderEnqueuePropertiesAMDX *>(header);
|
delete reinterpret_cast<safe_VkPhysicalDeviceShaderEnqueuePropertiesAMDX *>(header);
|
||||||
break;
|
break;
|
||||||
|
case VK_STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX:
|
||||||
|
delete reinterpret_cast<safe_VkExecutionGraphPipelineCreateInfoAMDX *>(header);
|
||||||
|
break;
|
||||||
case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX:
|
case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX:
|
||||||
delete reinterpret_cast<safe_VkPipelineShaderStageNodeCreateInfoAMDX *>(header);
|
delete reinterpret_cast<safe_VkPipelineShaderStageNodeCreateInfoAMDX *>(header);
|
||||||
break;
|
break;
|
||||||
|
@ -3702,6 +3723,9 @@ void FreePnextChain(const void *pNext) {
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
|
||||||
delete reinterpret_cast<safe_VkPhysicalDeviceAccelerationStructurePropertiesKHR *>(header);
|
delete reinterpret_cast<safe_VkPhysicalDeviceAccelerationStructurePropertiesKHR *>(header);
|
||||||
break;
|
break;
|
||||||
|
case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR:
|
||||||
|
delete reinterpret_cast<safe_VkRayTracingPipelineCreateInfoKHR *>(header);
|
||||||
|
break;
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
|
||||||
delete reinterpret_cast<safe_VkPhysicalDeviceRayTracingPipelineFeaturesKHR *>(header);
|
delete reinterpret_cast<safe_VkPhysicalDeviceRayTracingPipelineFeaturesKHR *>(header);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue