mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-08 08:40:55 +00:00
Add function hooks for VK_EXT_shader_object
Functions that are provided by VK_EXT_shader_object as well as other extensions are declared as an OR of both extensions in the macro. Added a new feature boolean: m_ShaderObject to WrappedVulkan that can be checked against wherever the dynamic state booleans are used. Co-authored-by: James Sumihiro <james.sumihiro@ntd.nintendo.com>
This commit is contained in:
committed by
Baldur Karlsson
parent
0b0d8b4703
commit
20f0d6870b
@@ -1081,6 +1081,8 @@ enum class VulkanChunk : uint32_t
|
||||
vkCmdCopyAccelerationStructureToMemoryKHR,
|
||||
vkCmdCopyMemoryToAccelerationStructureKHR,
|
||||
vkCreateAccelerationStructureKHR,
|
||||
vkCmdBindShadersEXT,
|
||||
vkCreateShadersEXT,
|
||||
Max,
|
||||
};
|
||||
|
||||
@@ -1120,7 +1122,8 @@ DECLARE_REFLECTION_ENUM(VulkanChunk);
|
||||
SERIALISE_HANDLE(VkSurfaceKHR) \
|
||||
SERIALISE_HANDLE(VkDescriptorUpdateTemplate) \
|
||||
SERIALISE_HANDLE(VkSamplerYcbcrConversion) \
|
||||
SERIALISE_HANDLE(VkAccelerationStructureKHR)
|
||||
SERIALISE_HANDLE(VkAccelerationStructureKHR) \
|
||||
SERIALISE_HANDLE(VkShaderEXT)
|
||||
|
||||
#define SERIALISE_HANDLE(type) DECLARE_REFLECTION_STRUCT(type)
|
||||
|
||||
|
||||
@@ -4057,6 +4057,11 @@ bool WrappedVulkan::ProcessChunk(ReadSerialiser &ser, VulkanChunk chunk)
|
||||
case VulkanChunk::vkCreateAccelerationStructureKHR:
|
||||
return Serialise_vkCreateAccelerationStructureKHR(ser, VK_NULL_HANDLE, NULL, NULL, NULL);
|
||||
|
||||
case VulkanChunk::vkCmdBindShadersEXT:
|
||||
return Serialise_vkCmdBindShadersEXT(ser, VK_NULL_HANDLE, 0, NULL, NULL);
|
||||
case VulkanChunk::vkCreateShadersEXT:
|
||||
return Serialise_vkCreateShadersEXT(ser, VK_NULL_HANDLE, 0, NULL, NULL, NULL);
|
||||
|
||||
// chunks that are reserved but not yet serialised
|
||||
case VulkanChunk::vkResetCommandPool:
|
||||
case VulkanChunk::vkCreateDepthTargetView:
|
||||
|
||||
@@ -481,6 +481,7 @@ private:
|
||||
bool m_TaskShaders = false;
|
||||
bool m_ListRestart = false;
|
||||
bool m_AccelerationStructures = false;
|
||||
bool m_ShaderObject = false;
|
||||
|
||||
PFN_vkSetDeviceLoaderData m_SetDeviceLoaderData;
|
||||
|
||||
@@ -2939,4 +2940,19 @@ public:
|
||||
VkDevice device, uint32_t accelerationStructureCount,
|
||||
const VkAccelerationStructureKHR *pAccelerationStructures, VkQueryType queryType,
|
||||
size_t dataSize, void *pData, size_t stride);
|
||||
|
||||
// VK_EXT_shader_object
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdBindShadersEXT, VkCommandBuffer commandBuffer,
|
||||
uint32_t stageCount, const VkShaderStageFlagBits *pStages,
|
||||
const VkShaderEXT *pShaders);
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkCreateShadersEXT, VkDevice device,
|
||||
uint32_t createInfoCount, const VkShaderCreateInfoEXT *pCreateInfos,
|
||||
const VkAllocationCallbacks *pAllocator, VkShaderEXT *pShaders);
|
||||
|
||||
void vkDestroyShaderEXT(VkDevice device, VkShaderEXT shader,
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
|
||||
VkResult vkGetShaderBinaryDataEXT(VkDevice device, VkShaderEXT shader, size_t *pDataSize,
|
||||
void *pData);
|
||||
};
|
||||
|
||||
@@ -558,7 +558,8 @@
|
||||
DeclExt(KHR_deferred_host_operations); \
|
||||
DeclExt(KHR_acceleration_structure); \
|
||||
DeclExt(KHR_ray_query); \
|
||||
DeclExt(EXT_nested_command_buffer);
|
||||
DeclExt(EXT_nested_command_buffer); \
|
||||
DeclExt(EXT_shader_object);
|
||||
|
||||
// for simplicity and since the check itself is platform agnostic,
|
||||
// these aren't protected in platform defines
|
||||
@@ -687,7 +688,8 @@
|
||||
CheckExt(KHR_calibrated_timestamps, VKXX); \
|
||||
CheckExt(KHR_deferred_host_operations, VKXX); \
|
||||
CheckExt(KHR_acceleration_structure, VKXX); \
|
||||
CheckExt(KHR_ray_query, VKXX);
|
||||
CheckExt(KHR_ray_query, VKXX); \
|
||||
CheckExt(EXT_shader_object, VKXX);
|
||||
|
||||
#define HookInitVulkanInstanceExts_PhysDev() \
|
||||
HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \
|
||||
@@ -810,211 +812,244 @@
|
||||
HookInitExtension_Instance_Android(); \
|
||||
HookInitExtension_Instance_Mac();
|
||||
|
||||
#define HookInitVulkanDeviceExts() \
|
||||
HookInitExtension(EXT_debug_marker, DebugMarkerSetObjectTagEXT); \
|
||||
HookInitExtension(EXT_debug_marker, DebugMarkerSetObjectNameEXT); \
|
||||
HookInitExtension(EXT_debug_marker, CmdDebugMarkerBeginEXT); \
|
||||
HookInitExtension(EXT_debug_marker, CmdDebugMarkerEndEXT); \
|
||||
HookInitExtension(EXT_debug_marker, CmdDebugMarkerInsertEXT); \
|
||||
HookInitExtension(KHR_swapchain, CreateSwapchainKHR); \
|
||||
HookInitExtension(KHR_swapchain, DestroySwapchainKHR); \
|
||||
HookInitExtension(KHR_swapchain, GetSwapchainImagesKHR); \
|
||||
HookInitExtension(KHR_swapchain, AcquireNextImageKHR); \
|
||||
HookInitExtension(KHR_swapchain, QueuePresentKHR); \
|
||||
HookInitExtension(KHR_display_swapchain, CreateSharedSwapchainsKHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance1, TrimCommandPool, KHR); \
|
||||
HookInitExtension(EXT_display_control, DisplayPowerControlEXT); \
|
||||
HookInitExtension(EXT_display_control, RegisterDeviceEventEXT); \
|
||||
HookInitExtension(EXT_display_control, RegisterDisplayEventEXT); \
|
||||
HookInitExtension(EXT_display_control, GetSwapchainCounterEXT); \
|
||||
HookInitExtension(KHR_external_memory_fd, GetMemoryFdKHR); \
|
||||
HookInitExtension(KHR_external_memory_fd, GetMemoryFdPropertiesKHR); \
|
||||
HookInitExtension(KHR_external_semaphore_fd, ImportSemaphoreFdKHR); \
|
||||
HookInitExtension(KHR_external_semaphore_fd, GetSemaphoreFdKHR); \
|
||||
HookInitExtension(KHR_external_fence_fd, ImportFenceFdKHR); \
|
||||
HookInitExtension(KHR_external_fence_fd, GetFenceFdKHR); \
|
||||
HookInitPromotedExtension(KHR_get_memory_requirements2, GetBufferMemoryRequirements2, KHR); \
|
||||
HookInitPromotedExtension(KHR_get_memory_requirements2, GetImageMemoryRequirements2, KHR); \
|
||||
HookInitPromotedExtension(KHR_get_memory_requirements2, GetImageSparseMemoryRequirements2, KHR); \
|
||||
HookInitExtension(AMD_shader_info, GetShaderInfoAMD); \
|
||||
HookInitExtension(KHR_push_descriptor, CmdPushDescriptorSetKHR); \
|
||||
HookInitPromotedExtension(KHR_descriptor_update_template, CreateDescriptorUpdateTemplate, KHR); \
|
||||
HookInitPromotedExtension(KHR_descriptor_update_template, DestroyDescriptorUpdateTemplate, KHR); \
|
||||
HookInitPromotedExtension(KHR_descriptor_update_template, UpdateDescriptorSetWithTemplate, KHR); \
|
||||
HookInitExtension(KHR_push_descriptor &&KHR_descriptor_update_template, \
|
||||
CmdPushDescriptorSetWithTemplateKHR); \
|
||||
HookInitPromotedExtension(KHR_bind_memory2, BindBufferMemory2, KHR); \
|
||||
HookInitPromotedExtension(KHR_bind_memory2, BindImageMemory2, KHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance3, GetDescriptorSetLayoutSupport, KHR); \
|
||||
HookInitExtension(AMD_buffer_marker, CmdWriteBufferMarkerAMD); \
|
||||
HookInitExtension(EXT_debug_utils, SetDebugUtilsObjectNameEXT); \
|
||||
HookInitExtension(EXT_debug_utils, SetDebugUtilsObjectTagEXT); \
|
||||
HookInitExtension(EXT_debug_utils, QueueBeginDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, QueueEndDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, QueueInsertDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, CmdBeginDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, CmdEndDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, CmdInsertDebugUtilsLabelEXT); \
|
||||
HookInitPromotedExtension(KHR_sampler_ycbcr_conversion, CreateSamplerYcbcrConversion, KHR); \
|
||||
HookInitPromotedExtension(KHR_sampler_ycbcr_conversion, DestroySamplerYcbcrConversion, KHR); \
|
||||
HookInitPromotedExtension(KHR_device_group, GetDeviceGroupPeerMemoryFeatures, KHR); \
|
||||
HookInitPromotedExtension(KHR_device_group, CmdSetDeviceMask, KHR); \
|
||||
HookInitPromotedExtension(KHR_device_group, CmdDispatchBase, KHR); \
|
||||
HookInitExtension(KHR_device_group &&KHR_surface, GetDeviceGroupPresentCapabilitiesKHR); \
|
||||
HookInitExtension(KHR_device_group &&KHR_surface, GetDeviceGroupSurfacePresentModesKHR); \
|
||||
HookInitExtension(KHR_device_group &&KHR_swapchain, AcquireNextImage2KHR); \
|
||||
HookInitExtension(protected_memory, GetDeviceQueue2); \
|
||||
HookInitPromotedExtension(KHR_draw_indirect_count, CmdDrawIndirectCount, KHR); \
|
||||
HookInitPromotedExtension(KHR_draw_indirect_count, CmdDrawIndexedIndirectCount, KHR); \
|
||||
HookInitExtension(EXT_validation_cache, CreateValidationCacheEXT); \
|
||||
HookInitExtension(EXT_validation_cache, DestroyValidationCacheEXT); \
|
||||
HookInitExtension(EXT_validation_cache, MergeValidationCachesEXT); \
|
||||
HookInitExtension(EXT_validation_cache, GetValidationCacheDataEXT); \
|
||||
HookInitExtension(KHR_shared_presentable_image, GetSwapchainStatusKHR); \
|
||||
HookInitPromotedExtension(KHR_create_renderpass2, CreateRenderPass2, KHR); \
|
||||
HookInitPromotedExtension(KHR_create_renderpass2, CmdBeginRenderPass2, KHR); \
|
||||
HookInitPromotedExtension(KHR_create_renderpass2, CmdNextSubpass2, KHR); \
|
||||
HookInitPromotedExtension(KHR_create_renderpass2, CmdEndRenderPass2, KHR); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdBindTransformFeedbackBuffersEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdBeginTransformFeedbackEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdEndTransformFeedbackEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdBeginQueryIndexedEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdEndQueryIndexedEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdDrawIndirectByteCountEXT); \
|
||||
HookInitExtension(EXT_conditional_rendering, CmdBeginConditionalRenderingEXT); \
|
||||
HookInitExtension(EXT_conditional_rendering, CmdEndConditionalRenderingEXT); \
|
||||
HookInitExtension(EXT_sample_locations, CmdSetSampleLocationsEXT); \
|
||||
HookInitExtension(EXT_discard_rectangles, CmdSetDiscardRectangleEXT); \
|
||||
HookInitExtension(EXT_calibrated_timestamps, GetCalibratedTimestampsEXT); \
|
||||
HookInitPromotedExtension(EXT_host_query_reset, ResetQueryPool, EXT); \
|
||||
HookInitExtension(EXT_buffer_device_address, GetBufferDeviceAddressEXT); \
|
||||
HookInitExtension(EXT_hdr_metadata, SetHdrMetadataEXT); \
|
||||
HookInitExtension(AMD_display_native_hdr, SetLocalDimmingAMD); \
|
||||
HookInitExtension(KHR_pipeline_executable_properties, GetPipelineExecutablePropertiesKHR); \
|
||||
HookInitExtension(KHR_pipeline_executable_properties, GetPipelineExecutableStatisticsKHR); \
|
||||
HookInitExtension(KHR_pipeline_executable_properties, \
|
||||
GetPipelineExecutableInternalRepresentationsKHR); \
|
||||
HookInitExtension(EXT_line_rasterization, CmdSetLineStippleEXT); \
|
||||
HookInitExtension(GOOGLE_display_timing, GetRefreshCycleDurationGOOGLE); \
|
||||
HookInitExtension(GOOGLE_display_timing, GetPastPresentationTimingGOOGLE); \
|
||||
HookInitPromotedExtension(KHR_timeline_semaphore, GetSemaphoreCounterValue, KHR); \
|
||||
HookInitPromotedExtension(KHR_timeline_semaphore, WaitSemaphores, KHR); \
|
||||
HookInitPromotedExtension(KHR_timeline_semaphore, SignalSemaphore, KHR); \
|
||||
HookInitExtension(KHR_performance_query, AcquireProfilingLockKHR); \
|
||||
HookInitExtension(KHR_performance_query, ReleaseProfilingLockKHR); \
|
||||
HookInitPromotedExtension(KHR_buffer_device_address, GetBufferDeviceAddress, KHR); \
|
||||
HookInitPromotedExtension(KHR_buffer_device_address, GetBufferOpaqueCaptureAddress, KHR); \
|
||||
HookInitPromotedExtension(KHR_buffer_device_address, GetDeviceMemoryOpaqueCaptureAddress, KHR); \
|
||||
HookInitPromotedExtension(EXT_private_data, CreatePrivateDataSlot, EXT); \
|
||||
HookInitPromotedExtension(EXT_private_data, DestroyPrivateDataSlot, EXT); \
|
||||
HookInitPromotedExtension(EXT_private_data, SetPrivateData, EXT); \
|
||||
HookInitPromotedExtension(EXT_private_data, GetPrivateData, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetCullMode, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetFrontFace, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetPrimitiveTopology, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetViewportWithCount, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetScissorWithCount, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdBindVertexBuffers2, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetDepthTestEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetDepthWriteEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetDepthCompareOp, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetDepthBoundsTestEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetStencilTestEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state, CmdSetStencilOp, EXT); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdCopyBuffer2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdCopyImage2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdCopyBufferToImage2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdCopyImageToBuffer2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdBlitImage2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdResolveImage2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdSetEvent2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdResetEvent2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdWaitEvents2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdPipelineBarrier2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdWriteTimestamp2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, QueueSubmit2, KHR); \
|
||||
HookInitExtension(KHR_synchronization2 &&AMD_buffer_marker, CmdWriteBufferMarker2AMD); \
|
||||
/* No GetQueueCheckpointData2NV without VK_NV_device_diagnostic_checkpoints */ \
|
||||
HookInitExtension(KHR_present_wait, WaitForPresentKHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance4, GetDeviceBufferMemoryRequirements, KHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance4, GetDeviceImageMemoryRequirements, KHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance4, GetDeviceImageSparseMemoryRequirements, KHR); \
|
||||
HookInitExtension(EXT_color_write_enable, CmdSetColorWriteEnableEXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state2, CmdSetDepthBiasEnable, EXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state2, CmdSetLogicOpEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state2, CmdSetPatchControlPointsEXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state2, CmdSetPrimitiveRestartEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state2, CmdSetRasterizerDiscardEnable, EXT); \
|
||||
HookInitExtension(EXT_vertex_input_dynamic_state, CmdSetVertexInputEXT); \
|
||||
HookInitPromotedExtension(KHR_dynamic_rendering, CmdBeginRendering, KHR); \
|
||||
HookInitPromotedExtension(KHR_dynamic_rendering, CmdEndRendering, KHR); \
|
||||
HookInitExtension(KHR_fragment_shading_rate, CmdSetFragmentShadingRateKHR); \
|
||||
HookInitExtension(EXT_pageable_device_local_memory, SetDeviceMemoryPriorityEXT); \
|
||||
HookInitExtension(EXT_swapchain_maintenance1, ReleaseSwapchainImagesEXT); \
|
||||
HookInitExtension(EXT_attachment_feedback_loop_dynamic_state, \
|
||||
CmdSetAttachmentFeedbackLoopEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetAlphaToCoverageEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetAlphaToOneEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetColorBlendAdvancedEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetColorBlendEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetColorBlendEquationEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetColorWriteMaskEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetConservativeRasterizationModeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetCoverageModulationModeNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetCoverageModulationTableEnableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetCoverageModulationTableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetCoverageReductionModeNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetCoverageToColorEnableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetCoverageToColorLocationNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetDepthClampEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetDepthClipEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetDepthClipNegativeOneToOneEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetExtraPrimitiveOverestimationSizeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetLineRasterizationModeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetLineStippleEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetLogicOpEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetPolygonModeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetProvokingVertexModeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetRasterizationSamplesEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetRasterizationStreamEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetRepresentativeFragmentTestEnableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetSampleLocationsEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetSampleMaskEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetShadingRateImageEnableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetTessellationDomainOriginEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetViewportSwizzleNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3, CmdSetViewportWScalingEnableNV); \
|
||||
HookInitExtension(EXT_mesh_shader, CmdDrawMeshTasksEXT); \
|
||||
HookInitExtension(EXT_mesh_shader, CmdDrawMeshTasksIndirectEXT); \
|
||||
HookInitExtension(EXT_mesh_shader, CmdDrawMeshTasksIndirectCountEXT); \
|
||||
HookInitExtension(KHR_calibrated_timestamps, GetCalibratedTimestampsKHR); \
|
||||
HookInitExtension(KHR_line_rasterization, CmdSetLineStippleKHR); \
|
||||
HookInitExtensionEXTtoKHR(CmdSetLineStipple); \
|
||||
HookInitExtension(KHR_deferred_host_operations, CreateDeferredOperationKHR); \
|
||||
HookInitExtension(KHR_deferred_host_operations, DeferredOperationJoinKHR); \
|
||||
HookInitExtension(KHR_deferred_host_operations, DestroyDeferredOperationKHR); \
|
||||
HookInitExtension(KHR_deferred_host_operations, GetDeferredOperationMaxConcurrencyKHR); \
|
||||
HookInitExtension(KHR_deferred_host_operations, GetDeferredOperationResultKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, BuildAccelerationStructuresKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdBuildAccelerationStructuresIndirectKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdBuildAccelerationStructuresKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdCopyAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdCopyAccelerationStructureToMemoryKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdCopyMemoryToAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdWriteAccelerationStructuresPropertiesKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CopyAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CopyAccelerationStructureToMemoryKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CopyMemoryToAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CreateAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, DestroyAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, GetAccelerationStructureBuildSizesKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, GetAccelerationStructureDeviceAddressKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, GetDeviceAccelerationStructureCompatibilityKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, WriteAccelerationStructuresPropertiesKHR); \
|
||||
HookInitExtension_Device_Win32(); \
|
||||
HookInitExtension_Device_Linux(); \
|
||||
HookInitExtension_Device_GGP(); \
|
||||
HookInitExtension_Device_Android(); \
|
||||
#define HookInitVulkanDeviceExts() \
|
||||
HookInitExtension(EXT_debug_marker, DebugMarkerSetObjectTagEXT); \
|
||||
HookInitExtension(EXT_debug_marker, DebugMarkerSetObjectNameEXT); \
|
||||
HookInitExtension(EXT_debug_marker, CmdDebugMarkerBeginEXT); \
|
||||
HookInitExtension(EXT_debug_marker, CmdDebugMarkerEndEXT); \
|
||||
HookInitExtension(EXT_debug_marker, CmdDebugMarkerInsertEXT); \
|
||||
HookInitExtension(KHR_swapchain, CreateSwapchainKHR); \
|
||||
HookInitExtension(KHR_swapchain, DestroySwapchainKHR); \
|
||||
HookInitExtension(KHR_swapchain, GetSwapchainImagesKHR); \
|
||||
HookInitExtension(KHR_swapchain, AcquireNextImageKHR); \
|
||||
HookInitExtension(KHR_swapchain, QueuePresentKHR); \
|
||||
HookInitExtension(KHR_display_swapchain, CreateSharedSwapchainsKHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance1, TrimCommandPool, KHR); \
|
||||
HookInitExtension(EXT_display_control, DisplayPowerControlEXT); \
|
||||
HookInitExtension(EXT_display_control, RegisterDeviceEventEXT); \
|
||||
HookInitExtension(EXT_display_control, RegisterDisplayEventEXT); \
|
||||
HookInitExtension(EXT_display_control, GetSwapchainCounterEXT); \
|
||||
HookInitExtension(KHR_external_memory_fd, GetMemoryFdKHR); \
|
||||
HookInitExtension(KHR_external_memory_fd, GetMemoryFdPropertiesKHR); \
|
||||
HookInitExtension(KHR_external_semaphore_fd, ImportSemaphoreFdKHR); \
|
||||
HookInitExtension(KHR_external_semaphore_fd, GetSemaphoreFdKHR); \
|
||||
HookInitExtension(KHR_external_fence_fd, ImportFenceFdKHR); \
|
||||
HookInitExtension(KHR_external_fence_fd, GetFenceFdKHR); \
|
||||
HookInitPromotedExtension(KHR_get_memory_requirements2, GetBufferMemoryRequirements2, KHR); \
|
||||
HookInitPromotedExtension(KHR_get_memory_requirements2, GetImageMemoryRequirements2, KHR); \
|
||||
HookInitPromotedExtension(KHR_get_memory_requirements2, GetImageSparseMemoryRequirements2, KHR); \
|
||||
HookInitExtension(AMD_shader_info, GetShaderInfoAMD); \
|
||||
HookInitExtension(KHR_push_descriptor, CmdPushDescriptorSetKHR); \
|
||||
HookInitPromotedExtension(KHR_descriptor_update_template, CreateDescriptorUpdateTemplate, KHR); \
|
||||
HookInitPromotedExtension(KHR_descriptor_update_template, DestroyDescriptorUpdateTemplate, KHR); \
|
||||
HookInitPromotedExtension(KHR_descriptor_update_template, UpdateDescriptorSetWithTemplate, KHR); \
|
||||
HookInitExtension(KHR_push_descriptor &&KHR_descriptor_update_template, \
|
||||
CmdPushDescriptorSetWithTemplateKHR); \
|
||||
HookInitPromotedExtension(KHR_bind_memory2, BindBufferMemory2, KHR); \
|
||||
HookInitPromotedExtension(KHR_bind_memory2, BindImageMemory2, KHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance3, GetDescriptorSetLayoutSupport, KHR); \
|
||||
HookInitExtension(AMD_buffer_marker, CmdWriteBufferMarkerAMD); \
|
||||
HookInitExtension(EXT_debug_utils, SetDebugUtilsObjectNameEXT); \
|
||||
HookInitExtension(EXT_debug_utils, SetDebugUtilsObjectTagEXT); \
|
||||
HookInitExtension(EXT_debug_utils, QueueBeginDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, QueueEndDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, QueueInsertDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, CmdBeginDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, CmdEndDebugUtilsLabelEXT); \
|
||||
HookInitExtension(EXT_debug_utils, CmdInsertDebugUtilsLabelEXT); \
|
||||
HookInitPromotedExtension(KHR_sampler_ycbcr_conversion, CreateSamplerYcbcrConversion, KHR); \
|
||||
HookInitPromotedExtension(KHR_sampler_ycbcr_conversion, DestroySamplerYcbcrConversion, KHR); \
|
||||
HookInitPromotedExtension(KHR_device_group, GetDeviceGroupPeerMemoryFeatures, KHR); \
|
||||
HookInitPromotedExtension(KHR_device_group, CmdSetDeviceMask, KHR); \
|
||||
HookInitPromotedExtension(KHR_device_group, CmdDispatchBase, KHR); \
|
||||
HookInitExtension(KHR_device_group &&KHR_surface, GetDeviceGroupPresentCapabilitiesKHR); \
|
||||
HookInitExtension(KHR_device_group &&KHR_surface, GetDeviceGroupSurfacePresentModesKHR); \
|
||||
HookInitExtension(KHR_device_group &&KHR_swapchain, AcquireNextImage2KHR); \
|
||||
HookInitExtension(protected_memory, GetDeviceQueue2); \
|
||||
HookInitPromotedExtension(KHR_draw_indirect_count, CmdDrawIndirectCount, KHR); \
|
||||
HookInitPromotedExtension(KHR_draw_indirect_count, CmdDrawIndexedIndirectCount, KHR); \
|
||||
HookInitExtension(EXT_validation_cache, CreateValidationCacheEXT); \
|
||||
HookInitExtension(EXT_validation_cache, DestroyValidationCacheEXT); \
|
||||
HookInitExtension(EXT_validation_cache, MergeValidationCachesEXT); \
|
||||
HookInitExtension(EXT_validation_cache, GetValidationCacheDataEXT); \
|
||||
HookInitExtension(KHR_shared_presentable_image, GetSwapchainStatusKHR); \
|
||||
HookInitPromotedExtension(KHR_create_renderpass2, CreateRenderPass2, KHR); \
|
||||
HookInitPromotedExtension(KHR_create_renderpass2, CmdBeginRenderPass2, KHR); \
|
||||
HookInitPromotedExtension(KHR_create_renderpass2, CmdNextSubpass2, KHR); \
|
||||
HookInitPromotedExtension(KHR_create_renderpass2, CmdEndRenderPass2, KHR); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdBindTransformFeedbackBuffersEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdBeginTransformFeedbackEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdEndTransformFeedbackEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdBeginQueryIndexedEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdEndQueryIndexedEXT); \
|
||||
HookInitExtension(EXT_transform_feedback, CmdDrawIndirectByteCountEXT); \
|
||||
HookInitExtension(EXT_conditional_rendering, CmdBeginConditionalRenderingEXT); \
|
||||
HookInitExtension(EXT_conditional_rendering, CmdEndConditionalRenderingEXT); \
|
||||
HookInitExtension(EXT_sample_locations, CmdSetSampleLocationsEXT); \
|
||||
HookInitExtension(EXT_discard_rectangles, CmdSetDiscardRectangleEXT); \
|
||||
HookInitExtension(EXT_calibrated_timestamps, GetCalibratedTimestampsEXT); \
|
||||
HookInitPromotedExtension(EXT_host_query_reset, ResetQueryPool, EXT); \
|
||||
HookInitExtension(EXT_buffer_device_address, GetBufferDeviceAddressEXT); \
|
||||
HookInitExtension(EXT_hdr_metadata, SetHdrMetadataEXT); \
|
||||
HookInitExtension(AMD_display_native_hdr, SetLocalDimmingAMD); \
|
||||
HookInitExtension(KHR_pipeline_executable_properties, GetPipelineExecutablePropertiesKHR); \
|
||||
HookInitExtension(KHR_pipeline_executable_properties, GetPipelineExecutableStatisticsKHR); \
|
||||
HookInitExtension(KHR_pipeline_executable_properties, \
|
||||
GetPipelineExecutableInternalRepresentationsKHR); \
|
||||
HookInitExtension(EXT_line_rasterization, CmdSetLineStippleEXT); \
|
||||
HookInitExtension(GOOGLE_display_timing, GetRefreshCycleDurationGOOGLE); \
|
||||
HookInitExtension(GOOGLE_display_timing, GetPastPresentationTimingGOOGLE); \
|
||||
HookInitPromotedExtension(KHR_timeline_semaphore, GetSemaphoreCounterValue, KHR); \
|
||||
HookInitPromotedExtension(KHR_timeline_semaphore, WaitSemaphores, KHR); \
|
||||
HookInitPromotedExtension(KHR_timeline_semaphore, SignalSemaphore, KHR); \
|
||||
HookInitExtension(KHR_performance_query, AcquireProfilingLockKHR); \
|
||||
HookInitExtension(KHR_performance_query, ReleaseProfilingLockKHR); \
|
||||
HookInitPromotedExtension(KHR_buffer_device_address, GetBufferDeviceAddress, KHR); \
|
||||
HookInitPromotedExtension(KHR_buffer_device_address, GetBufferOpaqueCaptureAddress, KHR); \
|
||||
HookInitPromotedExtension(KHR_buffer_device_address, GetDeviceMemoryOpaqueCaptureAddress, KHR); \
|
||||
HookInitPromotedExtension(EXT_private_data, CreatePrivateDataSlot, EXT); \
|
||||
HookInitPromotedExtension(EXT_private_data, DestroyPrivateDataSlot, EXT); \
|
||||
HookInitPromotedExtension(EXT_private_data, SetPrivateData, EXT); \
|
||||
HookInitPromotedExtension(EXT_private_data, GetPrivateData, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, CmdSetCullMode, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, CmdSetFrontFace, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, \
|
||||
CmdSetPrimitiveTopology, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, \
|
||||
CmdSetViewportWithCount, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, \
|
||||
CmdSetScissorWithCount, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, \
|
||||
CmdBindVertexBuffers2, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, \
|
||||
CmdSetDepthTestEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, \
|
||||
CmdSetDepthWriteEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, CmdSetDepthCompareOp, \
|
||||
EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, \
|
||||
CmdSetDepthBoundsTestEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, \
|
||||
CmdSetStencilTestEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state || EXT_shader_object, CmdSetStencilOp, EXT); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdCopyBuffer2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdCopyImage2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdCopyBufferToImage2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdCopyImageToBuffer2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdBlitImage2, KHR); \
|
||||
HookInitPromotedExtension(KHR_copy_commands2, CmdResolveImage2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdSetEvent2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdResetEvent2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdWaitEvents2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdPipelineBarrier2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, CmdWriteTimestamp2, KHR); \
|
||||
HookInitPromotedExtension(KHR_synchronization2, QueueSubmit2, KHR); \
|
||||
HookInitExtension(KHR_synchronization2 &&AMD_buffer_marker, CmdWriteBufferMarker2AMD); \
|
||||
/* No GetQueueCheckpointData2NV without VK_NV_device_diagnostic_checkpoints */ \
|
||||
HookInitExtension(KHR_present_wait, WaitForPresentKHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance4, GetDeviceBufferMemoryRequirements, KHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance4, GetDeviceImageMemoryRequirements, KHR); \
|
||||
HookInitPromotedExtension(KHR_maintenance4, GetDeviceImageSparseMemoryRequirements, KHR); \
|
||||
HookInitExtension(EXT_color_write_enable, CmdSetColorWriteEnableEXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state2 || EXT_shader_object, \
|
||||
CmdSetDepthBiasEnable, EXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state2 || EXT_shader_object, CmdSetLogicOpEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state2 || EXT_shader_object, CmdSetPatchControlPointsEXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state2 || EXT_shader_object, \
|
||||
CmdSetPrimitiveRestartEnable, EXT); \
|
||||
HookInitPromotedExtension(EXT_extended_dynamic_state2 || EXT_shader_object, \
|
||||
CmdSetRasterizerDiscardEnable, EXT); \
|
||||
HookInitExtension(EXT_vertex_input_dynamic_state || EXT_shader_object, CmdSetVertexInputEXT); \
|
||||
HookInitPromotedExtension(KHR_dynamic_rendering, CmdBeginRendering, KHR); \
|
||||
HookInitPromotedExtension(KHR_dynamic_rendering, CmdEndRendering, KHR); \
|
||||
HookInitExtension(KHR_fragment_shading_rate, CmdSetFragmentShadingRateKHR); \
|
||||
HookInitExtension(EXT_pageable_device_local_memory, SetDeviceMemoryPriorityEXT); \
|
||||
HookInitExtension(EXT_swapchain_maintenance1, ReleaseSwapchainImagesEXT); \
|
||||
HookInitExtension(EXT_attachment_feedback_loop_dynamic_state, \
|
||||
CmdSetAttachmentFeedbackLoopEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetAlphaToCoverageEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetAlphaToOneEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetColorBlendAdvancedEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetColorBlendEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetColorBlendEquationEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetColorWriteMaskEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetConservativeRasterizationModeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetCoverageModulationModeNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetCoverageModulationTableEnableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetCoverageModulationTableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetCoverageReductionModeNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetCoverageToColorEnableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetCoverageToColorLocationNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetDepthClampEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetDepthClipEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetDepthClipNegativeOneToOneEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetExtraPrimitiveOverestimationSizeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetLineRasterizationModeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetLineStippleEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetLogicOpEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetPolygonModeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetProvokingVertexModeEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetRasterizationSamplesEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetRasterizationStreamEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetRepresentativeFragmentTestEnableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetSampleLocationsEnableEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetSampleMaskEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetShadingRateImageEnableNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetTessellationDomainOriginEXT); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, CmdSetViewportSwizzleNV); \
|
||||
HookInitExtension(EXT_extended_dynamic_state3 || EXT_shader_object, \
|
||||
CmdSetViewportWScalingEnableNV); \
|
||||
HookInitExtension(EXT_mesh_shader, CmdDrawMeshTasksEXT); \
|
||||
HookInitExtension(EXT_mesh_shader, CmdDrawMeshTasksIndirectEXT); \
|
||||
HookInitExtension(EXT_mesh_shader, CmdDrawMeshTasksIndirectCountEXT); \
|
||||
HookInitExtension(KHR_calibrated_timestamps, GetCalibratedTimestampsKHR); \
|
||||
HookInitExtension(KHR_line_rasterization, CmdSetLineStippleKHR); \
|
||||
HookInitExtensionEXTtoKHR(CmdSetLineStipple); \
|
||||
HookInitExtension(KHR_deferred_host_operations, CreateDeferredOperationKHR); \
|
||||
HookInitExtension(KHR_deferred_host_operations, DeferredOperationJoinKHR); \
|
||||
HookInitExtension(KHR_deferred_host_operations, DestroyDeferredOperationKHR); \
|
||||
HookInitExtension(KHR_deferred_host_operations, GetDeferredOperationMaxConcurrencyKHR); \
|
||||
HookInitExtension(KHR_deferred_host_operations, GetDeferredOperationResultKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, BuildAccelerationStructuresKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdBuildAccelerationStructuresIndirectKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdBuildAccelerationStructuresKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdCopyAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdCopyAccelerationStructureToMemoryKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdCopyMemoryToAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CmdWriteAccelerationStructuresPropertiesKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CopyAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CopyAccelerationStructureToMemoryKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CopyMemoryToAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, CreateAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, DestroyAccelerationStructureKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, GetAccelerationStructureBuildSizesKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, GetAccelerationStructureDeviceAddressKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, GetDeviceAccelerationStructureCompatibilityKHR); \
|
||||
HookInitExtension(KHR_acceleration_structure, WriteAccelerationStructuresPropertiesKHR); \
|
||||
HookInitExtension(EXT_shader_object, CmdBindShadersEXT); \
|
||||
HookInitExtension(EXT_shader_object, CreateShadersEXT); \
|
||||
HookInitExtension(EXT_shader_object, DestroyShaderEXT); \
|
||||
HookInitExtension(EXT_shader_object, GetShaderBinaryDataEXT); \
|
||||
HookInitExtension_Device_Win32(); \
|
||||
HookInitExtension_Device_Linux(); \
|
||||
HookInitExtension_Device_GGP(); \
|
||||
HookInitExtension_Device_Android(); \
|
||||
HookInitExtension_Device_Mac();
|
||||
|
||||
#define DefineHooks() \
|
||||
@@ -1878,6 +1913,15 @@
|
||||
accelerationStructureCount, const VkAccelerationStructureKHR *, \
|
||||
pAccelerationStructures, VkQueryType, queryType, size_t, dataSize, void *, pData, \
|
||||
size_t, stride); \
|
||||
HookDefine4(void, vkCmdBindShadersEXT, VkCommandBuffer, commandBuffer, uint32_t, stageCount, \
|
||||
const VkShaderStageFlagBits *, pStages, const VkShaderEXT *, pShaders); \
|
||||
HookDefine5(VkResult, vkCreateShadersEXT, VkDevice, device, uint32_t, createInfoCount, \
|
||||
const VkShaderCreateInfoEXT *, pCreateInfos, const VkAllocationCallbacks *, \
|
||||
pAllocator, VkShaderEXT *, pShaders); \
|
||||
HookDefine3(void, vkDestroyShaderEXT, VkDevice, device, VkShaderEXT, shader, \
|
||||
const VkAllocationCallbacks *, pAllocator); \
|
||||
HookDefine4(VkResult, vkGetShaderBinaryDataEXT, VkDevice, device, VkShaderEXT, shader, size_t *, \
|
||||
pDataSize, void *, pData); \
|
||||
HookDefine_Win32(); \
|
||||
HookDefine_Linux(); \
|
||||
HookDefine_GGP(); \
|
||||
|
||||
@@ -56,6 +56,7 @@ WRAPPED_POOL_INST(WrappedVkSurfaceKHR)
|
||||
WRAPPED_POOL_INST(WrappedVkDescriptorUpdateTemplate)
|
||||
WRAPPED_POOL_INST(WrappedVkSamplerYcbcrConversion)
|
||||
WRAPPED_POOL_INST(WrappedVkAccelerationStructureKHR)
|
||||
WRAPPED_POOL_INST(WrappedVkShaderEXT)
|
||||
|
||||
byte VkResourceRecord::markerValue[32] = {
|
||||
0xaa, 0xbb, 0xcc, 0xdd, 0x88, 0x77, 0x66, 0x55, 0x01, 0x23, 0x45, 0x67, 0x98, 0x76, 0x54, 0x32,
|
||||
@@ -144,6 +145,8 @@ VkResourceType IdentifyTypeByPtr(WrappedVkRes *ptr)
|
||||
return eResSamplerConversion;
|
||||
if(WrappedVkAccelerationStructureKHR::IsAlloc(ptr))
|
||||
return eResAccelerationStructureKHR;
|
||||
if(WrappedVkShaderEXT::IsAlloc(ptr))
|
||||
return eResShaderEXT;
|
||||
|
||||
RDCERR("Unknown type for ptr 0x%p", ptr);
|
||||
|
||||
|
||||
@@ -76,6 +76,7 @@ enum VkResourceType
|
||||
eResDescUpdateTemplate,
|
||||
eResSamplerConversion,
|
||||
eResAccelerationStructureKHR,
|
||||
eResShaderEXT,
|
||||
};
|
||||
|
||||
DECLARE_REFLECTION_ENUM(VkResourceType);
|
||||
@@ -573,6 +574,16 @@ struct WrappedVkAccelerationStructureKHR : WrappedVkNonDispRes
|
||||
TypeEnum = eResAccelerationStructureKHR,
|
||||
};
|
||||
};
|
||||
struct WrappedVkShaderEXT : WrappedVkNonDispRes
|
||||
{
|
||||
WrappedVkShaderEXT(VkShaderEXT obj, ResourceId objId) : WrappedVkNonDispRes(obj, objId) {}
|
||||
typedef VkShaderEXT InnerType;
|
||||
ALLOCATE_WITH_WRAPPED_POOL(WrappedVkShaderEXT);
|
||||
enum
|
||||
{
|
||||
TypeEnum = eResShaderEXT,
|
||||
};
|
||||
};
|
||||
|
||||
// VkDisplayKHR and VkDisplayModeKHR are both UNWRAPPED because there's no need to wrap them.
|
||||
// The only thing we need to wrap VkSurfaceKHR for is to get back the window from it later.
|
||||
@@ -676,6 +687,7 @@ UNWRAP_NONDISP_HELPER(VkSurfaceKHR)
|
||||
UNWRAP_NONDISP_HELPER(VkDescriptorUpdateTemplate)
|
||||
UNWRAP_NONDISP_HELPER(VkSamplerYcbcrConversion)
|
||||
UNWRAP_NONDISP_HELPER(VkAccelerationStructureKHR)
|
||||
UNWRAP_NONDISP_HELPER(VkShaderEXT)
|
||||
|
||||
// VkDisplayKHR and VkDisplayModeKHR are both UNWRAPPED because there's no need to wrap them.
|
||||
// The only thing we need to wrap VkSurfaceKHR for is to get back the window from it later.
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
template <>
|
||||
rdcstr DoStringise(const VulkanChunk &el)
|
||||
{
|
||||
RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1207, "Chunks changed without updating names");
|
||||
RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1209, "Chunks changed without updating names");
|
||||
|
||||
BEGIN_ENUM_STRINGISE(VulkanChunk)
|
||||
{
|
||||
@@ -239,6 +239,8 @@ rdcstr DoStringise(const VulkanChunk &el)
|
||||
STRINGISE_ENUM_CLASS(vkCmdCopyAccelerationStructureToMemoryKHR)
|
||||
STRINGISE_ENUM_CLASS(vkCmdCopyMemoryToAccelerationStructureKHR)
|
||||
STRINGISE_ENUM_CLASS(vkCreateAccelerationStructureKHR)
|
||||
STRINGISE_ENUM_CLASS(vkCmdBindShadersEXT)
|
||||
STRINGISE_ENUM_CLASS(vkCreateShadersEXT)
|
||||
STRINGISE_ENUM_CLASS_NAMED(Max, "Max Chunk");
|
||||
}
|
||||
END_ENUM_STRINGISE()
|
||||
@@ -280,6 +282,7 @@ rdcstr DoStringise(const VkResourceType &el)
|
||||
STRINGISE_ENUM(eResDescUpdateTemplate)
|
||||
STRINGISE_ENUM(eResSamplerConversion)
|
||||
STRINGISE_ENUM(eResAccelerationStructureKHR)
|
||||
STRINGISE_ENUM(eResShaderEXT)
|
||||
}
|
||||
END_ENUM_STRINGISE();
|
||||
}
|
||||
|
||||
@@ -8013,6 +8013,115 @@ VkResult WrappedVulkan::vkCopyMemoryToAccelerationStructureKHR(
|
||||
return VK_ERROR_UNKNOWN;
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
bool WrappedVulkan::Serialise_vkCmdBindShadersEXT(SerialiserType &ser,
|
||||
VkCommandBuffer commandBuffer, uint32_t stageCount,
|
||||
const VkShaderStageFlagBits *pStages,
|
||||
const VkShaderEXT *pShaders)
|
||||
{
|
||||
SERIALISE_ELEMENT(commandBuffer);
|
||||
SERIALISE_ELEMENT(stageCount);
|
||||
SERIALISE_ELEMENT_ARRAY(pStages, stageCount);
|
||||
SERIALISE_ELEMENT_ARRAY(pShaders, stageCount).Important();
|
||||
|
||||
Serialise_DebugMessages(ser);
|
||||
|
||||
SERIALISE_CHECK_READ_ERRORS();
|
||||
|
||||
if(IsReplayingAndReading())
|
||||
{
|
||||
m_LastCmdBufferID = GetResourceManager()->GetOriginalID(GetResID(commandBuffer));
|
||||
|
||||
if(IsActiveReplaying(m_State))
|
||||
{
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
{
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
|
||||
{
|
||||
VulkanRenderState &renderstate = GetCmdRenderState();
|
||||
|
||||
for(uint32_t i = 0; i < stageCount; i++)
|
||||
{
|
||||
int stageIndex = StageIndex(pStages[i]);
|
||||
|
||||
// calling vkCmdBindShadersEXT disturbs the corresponding pipeline bind points
|
||||
// such that any pipelines previously bound to those points are no longer bound
|
||||
if(stageIndex == (int)ShaderStage::Compute)
|
||||
{
|
||||
renderstate.compute.pipeline = ResourceId();
|
||||
}
|
||||
else
|
||||
{
|
||||
renderstate.graphics.pipeline = ResourceId();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
commandBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// track while reading since Serialise_vkCmdBindPipeline does as well
|
||||
for(uint32_t i = 0; i < stageCount; i++)
|
||||
{
|
||||
int stageIndex = StageIndex(pStages[i]);
|
||||
|
||||
if(stageIndex == (int)ShaderStage::Compute)
|
||||
{
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].state.compute.pipeline = ResourceId();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].state.graphics.pipeline = ResourceId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(commandBuffer != VK_NULL_HANDLE)
|
||||
ObjDisp(commandBuffer)
|
||||
->CmdBindShadersEXT(Unwrap(commandBuffer), stageCount, pStages,
|
||||
UnwrapArray(pShaders, stageCount));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedVulkan::vkCmdBindShadersEXT(VkCommandBuffer commandBuffer, uint32_t stageCount,
|
||||
const VkShaderStageFlagBits *pStages,
|
||||
const VkShaderEXT *pShaders)
|
||||
{
|
||||
SCOPED_DBG_SINK();
|
||||
|
||||
SERIALISE_TIME_CALL(ObjDisp(commandBuffer)
|
||||
->CmdBindShadersEXT(Unwrap(commandBuffer), stageCount, pStages,
|
||||
UnwrapArray(pShaders, stageCount)));
|
||||
|
||||
if(IsCaptureMode(m_State))
|
||||
{
|
||||
VkResourceRecord *record = GetRecord(commandBuffer);
|
||||
|
||||
CACHE_THREAD_SERIALISER();
|
||||
|
||||
SCOPED_SERIALISE_CHUNK(VulkanChunk::vkCmdBindShadersEXT);
|
||||
Serialise_vkCmdBindShadersEXT(ser, commandBuffer, stageCount, pStages, pShaders);
|
||||
|
||||
record->AddChunk(scope.Get(&record->cmdInfo->alloc));
|
||||
if(pShaders)
|
||||
{
|
||||
for(uint32_t i = 0; i < stageCount; i++)
|
||||
{
|
||||
// binding NULL is legal
|
||||
if(pShaders[i] != VK_NULL_HANDLE)
|
||||
record->MarkResourceFrameReferenced(GetResID(pShaders[i]), eFrameRef_Read);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
INSTANTIATE_FUNCTION_SERIALISED(VkResult, vkCreateCommandPool, VkDevice device,
|
||||
const VkCommandPoolCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *, VkCommandPool *pCommandPool);
|
||||
@@ -8196,3 +8305,7 @@ INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdCopyAccelerationStructureToMemoryKHR,
|
||||
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdCopyMemoryToAccelerationStructureKHR,
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkCopyMemoryToAccelerationStructureInfoKHR *pInfo)
|
||||
|
||||
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdBindShadersEXT, VkCommandBuffer commandBuffer,
|
||||
uint32_t stageCount, const VkShaderStageFlagBits *pStages,
|
||||
const VkShaderEXT *pShaders);
|
||||
|
||||
@@ -3312,6 +3312,15 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
CHECK_PHYS_EXT_FEATURE(nestedCommandBufferSimultaneousUse);
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
|
||||
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceShaderObjectFeaturesEXT,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT);
|
||||
{
|
||||
CHECK_PHYS_EXT_FEATURE(shaderObject);
|
||||
|
||||
m_ShaderObject = ext->shaderObject != VK_FALSE;
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
}
|
||||
|
||||
if(availFeatures.depthClamp)
|
||||
|
||||
@@ -1228,3 +1228,9 @@ void WrappedVulkan::vkGetDeviceAccelerationStructureCompatibilityKHR(
|
||||
{
|
||||
*pCompatibility = VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR;
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkGetShaderBinaryDataEXT(VkDevice device, VkShaderEXT shader,
|
||||
size_t *pDataSize, void *pData)
|
||||
{
|
||||
return VK_ERROR_INITIALIZATION_FAILED;
|
||||
}
|
||||
|
||||
@@ -185,6 +185,7 @@ DESTROY_IMPL(VkQueryPool, DestroyQueryPool)
|
||||
DESTROY_IMPL(VkDescriptorUpdateTemplate, DestroyDescriptorUpdateTemplate)
|
||||
DESTROY_IMPL(VkSamplerYcbcrConversion, DestroySamplerYcbcrConversion)
|
||||
DESTROY_IMPL(VkAccelerationStructureKHR, DestroyAccelerationStructureKHR)
|
||||
DESTROY_IMPL(VkShaderEXT, DestroyShaderEXT)
|
||||
|
||||
#undef DESTROY_IMPL
|
||||
|
||||
@@ -573,6 +574,13 @@ bool WrappedVulkan::ReleaseResource(WrappedVkRes *res)
|
||||
vt->DestroyAccelerationStructureKHR(Unwrap(dev), real, NULL);
|
||||
break;
|
||||
}
|
||||
case eResShaderEXT:
|
||||
{
|
||||
VkShaderEXT real = nondisp->real.As<VkShaderEXT>();
|
||||
GetResourceManager()->ReleaseWrappedResource(VkShaderEXT(handle));
|
||||
vt->DestroyShaderEXT(Unwrap(dev), real, NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -2021,6 +2029,7 @@ static ObjData GetObjData(VkObjectType objType, uint64_t object)
|
||||
case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR:
|
||||
ret.record = GetRecord((VkAccelerationStructureKHR)object);
|
||||
break;
|
||||
case VK_OBJECT_TYPE_SHADER_EXT: ret.record = GetRecord((VkShaderEXT)object); break;
|
||||
|
||||
/////////////////////////////
|
||||
// special cases
|
||||
@@ -2065,7 +2074,6 @@ static ObjData GetObjData(VkObjectType objType, uint64_t object)
|
||||
case VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA:
|
||||
case VK_OBJECT_TYPE_MICROMAP_EXT:
|
||||
case VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV:
|
||||
case VK_OBJECT_TYPE_SHADER_EXT:
|
||||
case VK_OBJECT_TYPE_UNKNOWN:
|
||||
case VK_OBJECT_TYPE_VIDEO_SESSION_KHR:
|
||||
case VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR:
|
||||
@@ -2284,6 +2292,9 @@ bool WrappedVulkan::Serialise_vkDebugMarkerSetObjectNameEXT(
|
||||
case eResAccelerationStructureKHR:
|
||||
type = VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT;
|
||||
break;
|
||||
case eResShaderEXT:
|
||||
RDCWARN("There is no VkDebugReportObjectTypeEXT for VkShaderEXT");
|
||||
break;
|
||||
}
|
||||
|
||||
if(ObjDisp(m_Device)->DebugMarkerSetObjectNameEXT &&
|
||||
@@ -2474,6 +2485,7 @@ bool WrappedVulkan::Serialise_vkSetDebugUtilsObjectNameEXT(
|
||||
case eResDescUpdateTemplate: type = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE; break;
|
||||
case eResSamplerConversion: type = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION; break;
|
||||
case eResAccelerationStructureKHR: type = VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR; break;
|
||||
case eResShaderEXT: type = VK_OBJECT_TYPE_SHADER_EXT; break;
|
||||
}
|
||||
|
||||
if(ObjDisp(m_Device)->SetDebugUtilsObjectNameEXT && type != VK_OBJECT_TYPE_UNKNOWN &&
|
||||
|
||||
@@ -89,6 +89,41 @@ VkGraphicsPipelineCreateInfo *WrappedVulkan::UnwrapInfos(CaptureState state,
|
||||
return unwrappedInfos;
|
||||
}
|
||||
|
||||
template <>
|
||||
VkShaderCreateInfoEXT *WrappedVulkan::UnwrapInfos(CaptureState state,
|
||||
const VkShaderCreateInfoEXT *info, uint32_t count)
|
||||
{
|
||||
// request memory for infos, descriptor set layouts, and next chain
|
||||
size_t memSize = sizeof(VkShaderCreateInfoEXT) * count;
|
||||
for(uint32_t i = 0; i < count; i++)
|
||||
{
|
||||
memSize += sizeof(VkDescriptorSetLayout) * info[i].setLayoutCount;
|
||||
memSize += GetNextPatchSize(info[i].pNext);
|
||||
}
|
||||
|
||||
byte *tempMem = GetTempMemory(memSize);
|
||||
|
||||
// keep shader infos first in the memory, then descriptor set layouts, then next chain
|
||||
VkShaderCreateInfoEXT *unwrappedInfos = (VkShaderCreateInfoEXT *)tempMem;
|
||||
tempMem = (byte *)(unwrappedInfos + count);
|
||||
|
||||
for(uint32_t i = 0; i < count; i++)
|
||||
{
|
||||
VkDescriptorSetLayout *unwrappedLayouts = (VkDescriptorSetLayout *)tempMem;
|
||||
tempMem = (byte *)(unwrappedLayouts + info[i].setLayoutCount);
|
||||
if(info[i].pSetLayouts)
|
||||
for(uint32_t j = 0; j < info[i].setLayoutCount; j++)
|
||||
unwrappedLayouts[j] = Unwrap(info[i].pSetLayouts[j]);
|
||||
|
||||
unwrappedInfos[i] = info[i];
|
||||
unwrappedInfos[i].pSetLayouts = info[i].pSetLayouts ? unwrappedLayouts : NULL;
|
||||
|
||||
UnwrapNextChain(state, "VkShaderCreateInfoEXT", tempMem, (VkBaseInStructure *)&unwrappedInfos[i]);
|
||||
}
|
||||
|
||||
return unwrappedInfos;
|
||||
}
|
||||
|
||||
template <>
|
||||
VkPipelineLayoutCreateInfo WrappedVulkan::UnwrapInfo(const VkPipelineLayoutCreateInfo *info)
|
||||
{
|
||||
@@ -329,6 +364,133 @@ VkResult WrappedVulkan::vkCreateShaderModule(VkDevice device,
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
bool WrappedVulkan::Serialise_vkCreateShadersEXT(SerialiserType &ser, VkDevice device,
|
||||
uint32_t createInfoCount,
|
||||
const VkShaderCreateInfoEXT *pCreateInfos,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkShaderEXT *pShaders)
|
||||
{
|
||||
SERIALISE_ELEMENT(device);
|
||||
SERIALISE_ELEMENT(createInfoCount);
|
||||
SERIALISE_ELEMENT_LOCAL(CreateInfo, *pCreateInfos).Important();
|
||||
SERIALISE_ELEMENT_OPT(pAllocator);
|
||||
SERIALISE_ELEMENT_LOCAL(Shader, GetResID(*pShaders)).TypedAs("VkShaderEXT"_lit);
|
||||
|
||||
SERIALISE_CHECK_READ_ERRORS();
|
||||
|
||||
if(IsReplayingAndReading())
|
||||
{
|
||||
VkShaderEXT sh = VK_NULL_HANDLE;
|
||||
|
||||
// this function is called from a loop in vkCreateShadersEXT, so we only need to unwrap one
|
||||
// then it gets replayed as if each shader was created individually
|
||||
VkShaderCreateInfoEXT *unwrapped = UnwrapInfos(m_State, &CreateInfo, 1);
|
||||
|
||||
VkResult ret = ObjDisp(device)->CreateShadersEXT(Unwrap(device), 1, unwrapped, NULL, &sh);
|
||||
|
||||
AddResource(Shader, ResourceType::Shader, "Shader");
|
||||
|
||||
if(ret != VK_SUCCESS)
|
||||
{
|
||||
SET_ERROR_RESULT(m_FailedReplayResult, ResultCode::APIReplayFailed,
|
||||
"Failed creating shader object, VkResult: %s", ToStr(ret).c_str());
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
ResourceId live;
|
||||
if(GetResourceManager()->HasWrapper(ToTypedHandle(sh)))
|
||||
{
|
||||
live = GetResourceManager()->GetNonDispWrapper(sh)->id;
|
||||
|
||||
// destroy this instance of the duplicate, as we must have matching create/destroy
|
||||
// calls and there won't be a wrapped resource hanging around to destroy this one.
|
||||
ObjDisp(device)->DestroyShaderEXT(Unwrap(device), sh, NULL);
|
||||
|
||||
// whenever the new ID is requested, return the old ID, via replacements.
|
||||
GetResourceManager()->ReplaceResource(Shader, GetResourceManager()->GetOriginalID(live));
|
||||
}
|
||||
else
|
||||
{
|
||||
live = GetResourceManager()->WrapResource(Unwrap(device), sh);
|
||||
GetResourceManager()->AddLiveResource(Shader, sh);
|
||||
}
|
||||
}
|
||||
|
||||
// document all derived resources
|
||||
DerivedResource(device, Shader);
|
||||
if(CreateInfo.pSetLayouts)
|
||||
{
|
||||
for(uint32_t i = 0; i < CreateInfo.setLayoutCount; i++)
|
||||
DerivedResource(CreateInfo.pSetLayouts[i], Shader);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkCreateShadersEXT(VkDevice device, uint32_t createInfoCount,
|
||||
const VkShaderCreateInfoEXT *pCreateInfos,
|
||||
const VkAllocationCallbacks *, VkShaderEXT *pShaders)
|
||||
{
|
||||
VkShaderCreateInfoEXT *unwrapped = UnwrapInfos(m_State, pCreateInfos, createInfoCount);
|
||||
|
||||
// to be extra sure just in case the driver doesn't, set shader objects to VK_NULL_HANDLE first.
|
||||
for(uint32_t i = 0; i < createInfoCount; i++)
|
||||
pShaders[i] = VK_NULL_HANDLE;
|
||||
|
||||
VkResult ret;
|
||||
SERIALISE_TIME_CALL(ret = ObjDisp(device)->CreateShadersEXT(Unwrap(device), createInfoCount,
|
||||
unwrapped, NULL, pShaders));
|
||||
|
||||
if(ret == VK_SUCCESS)
|
||||
{
|
||||
for(uint32_t i = 0; i < createInfoCount; i++)
|
||||
{
|
||||
// any shader objects that are VK_NULL_HANDLE, silently ignore as they failed but we might
|
||||
// have successfully created some before then.
|
||||
if(pShaders[i] == VK_NULL_HANDLE)
|
||||
continue;
|
||||
|
||||
ResourceId id = GetResourceManager()->WrapResource(Unwrap(device), pShaders[i]);
|
||||
|
||||
// background or active capture state
|
||||
if(IsCaptureMode(m_State))
|
||||
{
|
||||
Chunk *chunk = NULL;
|
||||
|
||||
{
|
||||
CACHE_THREAD_SERIALISER();
|
||||
|
||||
SCOPED_SERIALISE_CHUNK(VulkanChunk::vkCreateShadersEXT);
|
||||
Serialise_vkCreateShadersEXT(ser, device, 1, &pCreateInfos[i], NULL, &pShaders[i]);
|
||||
|
||||
chunk = scope.Get();
|
||||
}
|
||||
|
||||
VkResourceRecord *record = GetResourceManager()->AddResourceRecord(pShaders[i]);
|
||||
record->AddChunk(chunk);
|
||||
|
||||
if(pCreateInfos[i].pSetLayouts)
|
||||
{
|
||||
for(uint32_t s = 0; s < pCreateInfos[i].setLayoutCount; s++)
|
||||
{
|
||||
VkResourceRecord *layoutrecord = GetRecord(pCreateInfos[i].pSetLayouts[s]);
|
||||
record->AddParent(layoutrecord);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GetResourceManager()->AddLiveResource(id, pShaders[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Pipeline functions
|
||||
|
||||
template <typename SerialiserType>
|
||||
@@ -975,3 +1137,7 @@ INSTANTIATE_FUNCTION_SERIALISED(VkResult, vkCreateComputePipelines, VkDevice dev
|
||||
VkPipelineCache pipelineCache, uint32_t createInfoCount,
|
||||
const VkComputePipelineCreateInfo *pCreateInfos,
|
||||
const VkAllocationCallbacks *, VkPipeline *pPipelines);
|
||||
|
||||
INSTANTIATE_FUNCTION_SERIALISED(VkResult, vkCreateShadersEXT, VkDevice device,
|
||||
uint32_t createInfoCount, const VkShaderCreateInfoEXT *pCreateInfos,
|
||||
const VkAllocationCallbacks *, VkShaderEXT *pShaders);
|
||||
|
||||
Reference in New Issue
Block a user