From: Georg Lehmann dadschoorse@gmail.com
--- dlls/winevulkan/loader_thunks.c | 34 ++++++ dlls/winevulkan/loader_thunks.h | 24 +++++ dlls/winevulkan/make_vulkan | 5 +- dlls/winevulkan/vulkan_thunks.c | 179 ++++++++++++++++++++++++++++++++ dlls/winevulkan/vulkan_thunks.h | 6 ++ dlls/winevulkan/winevulkan.json | 2 +- include/wine/vulkan.h | 47 ++++++++- 7 files changed, 291 insertions(+), 6 deletions(-)
diff --git a/dlls/winevulkan/loader_thunks.c b/dlls/winevulkan/loader_thunks.c index c1ff7cd64ba..1957b603c66 100644 --- a/dlls/winevulkan/loader_thunks.c +++ b/dlls/winevulkan/loader_thunks.c @@ -2329,6 +2329,15 @@ void WINAPI vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, UNIX_CALL(vkCmdUpdateBuffer, ¶ms); }
+void WINAPI vkCmdUpdatePipelineIndirectBufferNV(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) +{ + struct vkCmdUpdatePipelineIndirectBufferNV_params params; + params.commandBuffer = commandBuffer; + params.pipelineBindPoint = pipelineBindPoint; + params.pipeline = pipeline; + UNIX_CALL(vkCmdUpdatePipelineIndirectBufferNV, ¶ms); +} + void WINAPI vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers) { struct vkCmdWaitEvents_params params; @@ -4993,6 +5002,28 @@ VkResult WINAPI vkGetPipelineExecutableStatisticsKHR(VkDevice device, const VkPi return params.result; }
+VkDeviceAddress WINAPI vkGetPipelineIndirectDeviceAddressNV(VkDevice device, const VkPipelineIndirectDeviceAddressInfoNV *pInfo) +{ + struct vkGetPipelineIndirectDeviceAddressNV_params params; + NTSTATUS status; + params.device = device; + params.pInfo = pInfo; + status = UNIX_CALL(vkGetPipelineIndirectDeviceAddressNV, ¶ms); + assert(!status && "vkGetPipelineIndirectDeviceAddressNV"); + return params.result; +} + +void WINAPI vkGetPipelineIndirectMemoryRequirementsNV(VkDevice device, const VkComputePipelineCreateInfo *pCreateInfo, VkMemoryRequirements2 *pMemoryRequirements) +{ + struct vkGetPipelineIndirectMemoryRequirementsNV_params params; + NTSTATUS status; + params.device = device; + params.pCreateInfo = pCreateInfo; + params.pMemoryRequirements = pMemoryRequirements; + status = UNIX_CALL(vkGetPipelineIndirectMemoryRequirementsNV, ¶ms); + assert(!status && "vkGetPipelineIndirectMemoryRequirementsNV"); +} + VkResult WINAPI vkGetPipelinePropertiesEXT(VkDevice device, const VkPipelineInfoEXT *pPipelineInfo, VkBaseOutStructure *pPipelineProperties) { struct vkGetPipelinePropertiesEXT_params params; @@ -6092,6 +6123,7 @@ static const struct vulkan_func vk_device_dispatch_table[] = {"vkCmdTraceRaysKHR", vkCmdTraceRaysKHR}, {"vkCmdTraceRaysNV", vkCmdTraceRaysNV}, {"vkCmdUpdateBuffer", vkCmdUpdateBuffer}, + {"vkCmdUpdatePipelineIndirectBufferNV", vkCmdUpdatePipelineIndirectBufferNV}, {"vkCmdWaitEvents", vkCmdWaitEvents}, {"vkCmdWaitEvents2", vkCmdWaitEvents2}, {"vkCmdWaitEvents2KHR", vkCmdWaitEvents2KHR}, @@ -6266,6 +6298,8 @@ static const struct vulkan_func vk_device_dispatch_table[] = {"vkGetPipelineExecutableInternalRepresentationsKHR", vkGetPipelineExecutableInternalRepresentationsKHR}, {"vkGetPipelineExecutablePropertiesKHR", vkGetPipelineExecutablePropertiesKHR}, {"vkGetPipelineExecutableStatisticsKHR", vkGetPipelineExecutableStatisticsKHR}, + {"vkGetPipelineIndirectDeviceAddressNV", vkGetPipelineIndirectDeviceAddressNV}, + {"vkGetPipelineIndirectMemoryRequirementsNV", vkGetPipelineIndirectMemoryRequirementsNV}, {"vkGetPipelinePropertiesEXT", vkGetPipelinePropertiesEXT}, {"vkGetPrivateData", vkGetPrivateData}, {"vkGetPrivateDataEXT", vkGetPrivateDataEXT}, diff --git a/dlls/winevulkan/loader_thunks.h b/dlls/winevulkan/loader_thunks.h index f39d6c88256..05aeec48027 100644 --- a/dlls/winevulkan/loader_thunks.h +++ b/dlls/winevulkan/loader_thunks.h @@ -256,6 +256,7 @@ enum unix_call unix_vkCmdTraceRaysKHR, unix_vkCmdTraceRaysNV, unix_vkCmdUpdateBuffer, + unix_vkCmdUpdatePipelineIndirectBufferNV, unix_vkCmdWaitEvents, unix_vkCmdWaitEvents2, unix_vkCmdWaitEvents2KHR, @@ -492,6 +493,8 @@ enum unix_call unix_vkGetPipelineExecutableInternalRepresentationsKHR, unix_vkGetPipelineExecutablePropertiesKHR, unix_vkGetPipelineExecutableStatisticsKHR, + unix_vkGetPipelineIndirectDeviceAddressNV, + unix_vkGetPipelineIndirectMemoryRequirementsNV, unix_vkGetPipelinePropertiesEXT, unix_vkGetPrivateData, unix_vkGetPrivateDataEXT, @@ -2374,6 +2377,13 @@ struct vkCmdUpdateBuffer_params const void *pData; };
+struct vkCmdUpdatePipelineIndirectBufferNV_params +{ + VkCommandBuffer commandBuffer; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline DECLSPEC_ALIGN(8) pipeline; +}; + struct vkCmdWaitEvents_params { VkCommandBuffer commandBuffer; @@ -4244,6 +4254,20 @@ struct vkGetPipelineExecutableStatisticsKHR_params VkResult result; };
+struct vkGetPipelineIndirectDeviceAddressNV_params +{ + VkDevice device; + const VkPipelineIndirectDeviceAddressInfoNV *pInfo; + VkDeviceAddress result; +}; + +struct vkGetPipelineIndirectMemoryRequirementsNV_params +{ + VkDevice device; + const VkComputePipelineCreateInfo *pCreateInfo; + VkMemoryRequirements2 *pMemoryRequirements; +}; + struct vkGetPipelinePropertiesEXT_params { VkDevice device; diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index 1130bf1a93e..4486a54a7fe 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -65,7 +65,7 @@ from enum import Enum LOGGER = logging.Logger("vulkan") LOGGER.addHandler(logging.StreamHandler())
-VK_XML_VERSION = "1.3.258" +VK_XML_VERSION = "1.3.259" WINE_VK_VERSION = (1, 3)
# Filenames to create. @@ -123,9 +123,6 @@ UNSUPPORTED_EXTENSIONS = [ # Deprecated extensions "VK_NV_external_memory_capabilities", "VK_NV_external_memory_win32", - - # Likely broken: https://github.com/KhronosGroup/Vulkan-Docs/issues/2171 - "VK_NV_device_generated_commands_compute", ]
# Either internal extensions which aren't present on the win32 platform which diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c index e521c0db184..02f8b943af2 100644 --- a/dlls/winevulkan/vulkan_thunks.c +++ b/dlls/winevulkan/vulkan_thunks.c @@ -1584,6 +1584,15 @@ typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV32 VkBool32 deviceGeneratedCommands; } VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV32;
+typedef struct VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV32 +{ + VkStructureType sType; + PTR32 pNext; + VkBool32 deviceGeneratedCompute; + VkBool32 deviceGeneratedComputePipelines; + VkBool32 deviceGeneratedComputeCaptureReplay; +} VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV32; + typedef struct VkDevicePrivateDataCreateInfo32 { VkStructureType sType; @@ -6073,6 +6082,14 @@ typedef struct VkPipelineExecutableStatisticKHR32 VkPipelineExecutableStatisticValueKHR32 DECLSPEC_ALIGN(8) value; } VkPipelineExecutableStatisticKHR32;
+typedef struct VkPipelineIndirectDeviceAddressInfoNV32 +{ + VkStructureType sType; + PTR32 pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline DECLSPEC_ALIGN(8) pipeline; +} VkPipelineIndirectDeviceAddressInfoNV32; +
typedef struct VkCheckpointData2NV32 { @@ -10218,6 +10235,19 @@ static inline void convert_VkDeviceCreateInfo_win64_to_host(struct conversion_co out_header = (void *)out_ext; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV: + { + VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); + const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *in_ext = (const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *)in_header; + out_ext->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV; + out_ext->pNext = NULL; + out_ext->deviceGeneratedCompute = in_ext->deviceGeneratedCompute; + out_ext->deviceGeneratedComputePipelines = in_ext->deviceGeneratedComputePipelines; + out_ext->deviceGeneratedComputeCaptureReplay = in_ext->deviceGeneratedComputeCaptureReplay; + out_header->pNext = (void *)out_ext; + out_header = (void *)out_ext; + break; + } case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO: { VkDevicePrivateDataCreateInfo *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); @@ -12218,6 +12248,19 @@ static inline void convert_VkDeviceCreateInfo_win32_to_host(struct conversion_co out_header = (void *)out_ext; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV: + { + VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); + const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV32 *in_ext = (const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV32 *)in_header; + out_ext->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV; + out_ext->pNext = NULL; + out_ext->deviceGeneratedCompute = in_ext->deviceGeneratedCompute; + out_ext->deviceGeneratedComputePipelines = in_ext->deviceGeneratedComputePipelines; + out_ext->deviceGeneratedComputeCaptureReplay = in_ext->deviceGeneratedComputeCaptureReplay; + out_header->pNext = (void *)out_ext; + out_header = (void *)out_ext; + break; + } case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO: { VkDevicePrivateDataCreateInfo *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); @@ -18961,6 +19004,19 @@ static inline void convert_VkPhysicalDeviceFeatures2_win32_to_host(struct conver out_header = (void *)out_ext; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV: + { + VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); + const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV32 *in_ext = (const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV32 *)in_header; + out_ext->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV; + out_ext->pNext = NULL; + out_ext->deviceGeneratedCompute = in_ext->deviceGeneratedCompute; + out_ext->deviceGeneratedComputePipelines = in_ext->deviceGeneratedComputePipelines; + out_ext->deviceGeneratedComputeCaptureReplay = in_ext->deviceGeneratedComputeCaptureReplay; + out_header->pNext = (void *)out_ext; + out_header = (void *)out_ext; + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: { VkPhysicalDevicePrivateDataFeatures *out_ext = conversion_context_alloc(ctx, sizeof(*out_ext)); @@ -20880,6 +20936,17 @@ static inline void convert_VkPhysicalDeviceFeatures2_host_to_win32(const VkPhysi out_header = (void *)out_ext; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV: + { + VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV32 *out_ext = find_next_struct32(out_header, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV); + const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *in_ext = (const VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV *)in_header; + out_ext->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV; + out_ext->deviceGeneratedCompute = in_ext->deviceGeneratedCompute; + out_ext->deviceGeneratedComputePipelines = in_ext->deviceGeneratedComputePipelines; + out_ext->deviceGeneratedComputeCaptureReplay = in_ext->deviceGeneratedComputeCaptureReplay; + out_header = (void *)out_ext; + break; + } case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES: { VkPhysicalDevicePrivateDataFeatures32 *out_ext = find_next_struct32(out_header, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES); @@ -25649,6 +25716,18 @@ static inline void convert_VkPipelineExecutableStatisticKHR_array_host_to_win32( } }
+static inline void convert_VkPipelineIndirectDeviceAddressInfoNV_win32_to_host(const VkPipelineIndirectDeviceAddressInfoNV32 *in, VkPipelineIndirectDeviceAddressInfoNV *out) +{ + if (!in) return; + + out->sType = in->sType; + out->pNext = NULL; + out->pipelineBindPoint = in->pipelineBindPoint; + out->pipeline = in->pipeline; + if (in->pNext) + FIXME("Unexpected pNext\n"); +} + static inline void convert_VkPipelineInfoEXT_win32_to_host(const VkPipelineInfoEXT32 *in, VkPipelineInfoEXT *out) { if (!in) return; @@ -32657,6 +32736,27 @@ static void thunk32_vkCmdUpdateBuffer(void *args) wine_cmd_buffer_from_handle((VkCommandBuffer)UlongToPtr(params->commandBuffer))->device->funcs.p_vkCmdUpdateBuffer(wine_cmd_buffer_from_handle((VkCommandBuffer)UlongToPtr(params->commandBuffer))->command_buffer, params->dstBuffer, params->dstOffset, params->dataSize, (const void *)UlongToPtr(params->pData)); }
+#ifdef _WIN64 +static void thunk64_vkCmdUpdatePipelineIndirectBufferNV(void *args) +{ + struct vkCmdUpdatePipelineIndirectBufferNV_params *params = args; + + wine_cmd_buffer_from_handle(params->commandBuffer)->device->funcs.p_vkCmdUpdatePipelineIndirectBufferNV(wine_cmd_buffer_from_handle(params->commandBuffer)->command_buffer, params->pipelineBindPoint, params->pipeline); +} +#endif /* _WIN64 */ + +static void thunk32_vkCmdUpdatePipelineIndirectBufferNV(void *args) +{ + struct + { + PTR32 commandBuffer; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline DECLSPEC_ALIGN(8) pipeline; + } *params = args; + + wine_cmd_buffer_from_handle((VkCommandBuffer)UlongToPtr(params->commandBuffer))->device->funcs.p_vkCmdUpdatePipelineIndirectBufferNV(wine_cmd_buffer_from_handle((VkCommandBuffer)UlongToPtr(params->commandBuffer))->command_buffer, params->pipelineBindPoint, params->pipeline); +} + #ifdef _WIN64 static void thunk64_vkCmdWaitEvents(void *args) { @@ -40089,6 +40189,78 @@ static NTSTATUS thunk32_vkGetPipelineExecutableStatisticsKHR(void *args) return STATUS_SUCCESS; }
+#ifdef _WIN64 +static NTSTATUS thunk64_vkGetPipelineIndirectDeviceAddressNV(void *args) +{ + struct vkGetPipelineIndirectDeviceAddressNV_params *params = args; + + TRACE("%p, %p\n", params->device, params->pInfo); + + params->result = wine_device_from_handle(params->device)->funcs.p_vkGetPipelineIndirectDeviceAddressNV(wine_device_from_handle(params->device)->device, params->pInfo); + return STATUS_SUCCESS; +} +#endif /* _WIN64 */ + +static NTSTATUS thunk32_vkGetPipelineIndirectDeviceAddressNV(void *args) +{ + struct + { + PTR32 device; + PTR32 pInfo; + VkDeviceAddress result; + } *params = args; + VkPipelineIndirectDeviceAddressInfoNV pInfo_host; + + TRACE("%#x, %#x\n", params->device, params->pInfo); + + convert_VkPipelineIndirectDeviceAddressInfoNV_win32_to_host((const VkPipelineIndirectDeviceAddressInfoNV32 *)UlongToPtr(params->pInfo), &pInfo_host); + params->result = wine_device_from_handle((VkDevice)UlongToPtr(params->device))->funcs.p_vkGetPipelineIndirectDeviceAddressNV(wine_device_from_handle((VkDevice)UlongToPtr(params->device))->device, &pInfo_host); + return STATUS_SUCCESS; +} + +#ifdef _WIN64 +static NTSTATUS thunk64_vkGetPipelineIndirectMemoryRequirementsNV(void *args) +{ + struct vkGetPipelineIndirectMemoryRequirementsNV_params *params = args; + VkComputePipelineCreateInfo pCreateInfo_host; + struct conversion_context local_ctx; + struct conversion_context *ctx = &local_ctx; + + TRACE("%p, %p, %p\n", params->device, params->pCreateInfo, params->pMemoryRequirements); + + init_conversion_context(ctx); + convert_VkComputePipelineCreateInfo_win64_to_host(ctx, params->pCreateInfo, &pCreateInfo_host); + wine_device_from_handle(params->device)->funcs.p_vkGetPipelineIndirectMemoryRequirementsNV(wine_device_from_handle(params->device)->device, &pCreateInfo_host, params->pMemoryRequirements); + free_conversion_context(ctx); + return STATUS_SUCCESS; +} +#endif /* _WIN64 */ + +static NTSTATUS thunk32_vkGetPipelineIndirectMemoryRequirementsNV(void *args) +{ + struct + { + PTR32 device; + PTR32 pCreateInfo; + PTR32 pMemoryRequirements; + } *params = args; + VkComputePipelineCreateInfo pCreateInfo_host; + VkMemoryRequirements2 pMemoryRequirements_host; + struct conversion_context local_ctx; + struct conversion_context *ctx = &local_ctx; + + TRACE("%#x, %#x, %#x\n", params->device, params->pCreateInfo, params->pMemoryRequirements); + + init_conversion_context(ctx); + convert_VkComputePipelineCreateInfo_win32_to_host(ctx, (const VkComputePipelineCreateInfo32 *)UlongToPtr(params->pCreateInfo), &pCreateInfo_host); + convert_VkMemoryRequirements2_win32_to_host(ctx, (VkMemoryRequirements232 *)UlongToPtr(params->pMemoryRequirements), &pMemoryRequirements_host); + wine_device_from_handle((VkDevice)UlongToPtr(params->device))->funcs.p_vkGetPipelineIndirectMemoryRequirementsNV(wine_device_from_handle((VkDevice)UlongToPtr(params->device))->device, &pCreateInfo_host, &pMemoryRequirements_host); + convert_VkComputePipelineCreateInfo_host_to_win32(&pCreateInfo_host, (const VkComputePipelineCreateInfo32 *)UlongToPtr(params->pCreateInfo)); + convert_VkMemoryRequirements2_host_to_win32(&pMemoryRequirements_host, (VkMemoryRequirements232 *)UlongToPtr(params->pMemoryRequirements)); + free_conversion_context(ctx); + return STATUS_SUCCESS; +} + #ifdef _WIN64 static NTSTATUS thunk64_vkGetPipelinePropertiesEXT(void *args) { @@ -42459,6 +42631,7 @@ static const char * const vk_device_extensions[] = "VK_NV_device_diagnostic_checkpoints", "VK_NV_device_diagnostics_config", "VK_NV_device_generated_commands", + "VK_NV_device_generated_commands_compute", "VK_NV_fill_rectangle", "VK_NV_fragment_coverage_to_color", "VK_NV_fragment_shader_barycentric", @@ -42801,6 +42974,7 @@ const unixlib_entry_t __wine_unix_call_funcs[] = (void *)thunk64_vkCmdTraceRaysKHR, (void *)thunk64_vkCmdTraceRaysNV, (void *)thunk64_vkCmdUpdateBuffer, + (void *)thunk64_vkCmdUpdatePipelineIndirectBufferNV, (void *)thunk64_vkCmdWaitEvents, (void *)thunk64_vkCmdWaitEvents2, (void *)thunk64_vkCmdWaitEvents2KHR, @@ -43037,6 +43211,8 @@ const unixlib_entry_t __wine_unix_call_funcs[] = thunk64_vkGetPipelineExecutableInternalRepresentationsKHR, thunk64_vkGetPipelineExecutablePropertiesKHR, thunk64_vkGetPipelineExecutableStatisticsKHR, + thunk64_vkGetPipelineIndirectDeviceAddressNV, + thunk64_vkGetPipelineIndirectMemoryRequirementsNV, thunk64_vkGetPipelinePropertiesEXT, thunk64_vkGetPrivateData, thunk64_vkGetPrivateDataEXT, @@ -43361,6 +43537,7 @@ const unixlib_entry_t __wine_unix_call_funcs[] = (void *)thunk32_vkCmdTraceRaysKHR, (void *)thunk32_vkCmdTraceRaysNV, (void *)thunk32_vkCmdUpdateBuffer, + (void *)thunk32_vkCmdUpdatePipelineIndirectBufferNV, (void *)thunk32_vkCmdWaitEvents, (void *)thunk32_vkCmdWaitEvents2, (void *)thunk32_vkCmdWaitEvents2KHR, @@ -43597,6 +43774,8 @@ const unixlib_entry_t __wine_unix_call_funcs[] = thunk32_vkGetPipelineExecutableInternalRepresentationsKHR, thunk32_vkGetPipelineExecutablePropertiesKHR, thunk32_vkGetPipelineExecutableStatisticsKHR, + thunk32_vkGetPipelineIndirectDeviceAddressNV, + thunk32_vkGetPipelineIndirectMemoryRequirementsNV, thunk32_vkGetPipelinePropertiesEXT, thunk32_vkGetPrivateData, thunk32_vkGetPrivateDataEXT, diff --git a/dlls/winevulkan/vulkan_thunks.h b/dlls/winevulkan/vulkan_thunks.h index 210da8b1209..e55ef420327 100644 --- a/dlls/winevulkan/vulkan_thunks.h +++ b/dlls/winevulkan/vulkan_thunks.h @@ -303,6 +303,7 @@ struct vulkan_device_funcs void (*p_vkCmdTraceRaysKHR)(VkCommandBuffer, const VkStridedDeviceAddressRegionKHR *, const VkStridedDeviceAddressRegionKHR *, const VkStridedDeviceAddressRegionKHR *, const VkStridedDeviceAddressRegionKHR *, uint32_t, uint32_t, uint32_t); void (*p_vkCmdTraceRaysNV)(VkCommandBuffer, VkBuffer, VkDeviceSize, VkBuffer, VkDeviceSize, VkDeviceSize, VkBuffer, VkDeviceSize, VkDeviceSize, VkBuffer, VkDeviceSize, VkDeviceSize, uint32_t, uint32_t, uint32_t); void (*p_vkCmdUpdateBuffer)(VkCommandBuffer, VkBuffer, VkDeviceSize, VkDeviceSize, const void *); + void (*p_vkCmdUpdatePipelineIndirectBufferNV)(VkCommandBuffer, VkPipelineBindPoint, VkPipeline); void (*p_vkCmdWaitEvents)(VkCommandBuffer, uint32_t, const VkEvent *, VkPipelineStageFlags, VkPipelineStageFlags, uint32_t, const VkMemoryBarrier *, uint32_t, const VkBufferMemoryBarrier *, uint32_t, const VkImageMemoryBarrier *); void (*p_vkCmdWaitEvents2)(VkCommandBuffer, uint32_t, const VkEvent *, const VkDependencyInfo *); void (*p_vkCmdWaitEvents2KHR)(VkCommandBuffer, uint32_t, const VkEvent *, const VkDependencyInfo *); @@ -476,6 +477,8 @@ struct vulkan_device_funcs VkResult (*p_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice, const VkPipelineExecutableInfoKHR *, uint32_t *, VkPipelineExecutableInternalRepresentationKHR *); VkResult (*p_vkGetPipelineExecutablePropertiesKHR)(VkDevice, const VkPipelineInfoKHR *, uint32_t *, VkPipelineExecutablePropertiesKHR *); VkResult (*p_vkGetPipelineExecutableStatisticsKHR)(VkDevice, const VkPipelineExecutableInfoKHR *, uint32_t *, VkPipelineExecutableStatisticKHR *); + VkDeviceAddress (*p_vkGetPipelineIndirectDeviceAddressNV)(VkDevice, const VkPipelineIndirectDeviceAddressInfoNV *); + void (*p_vkGetPipelineIndirectMemoryRequirementsNV)(VkDevice, const VkComputePipelineCreateInfo *, VkMemoryRequirements2 *); VkResult (*p_vkGetPipelinePropertiesEXT)(VkDevice, const VkPipelineInfoEXT *, VkBaseOutStructure *); void (*p_vkGetPrivateData)(VkDevice, VkObjectType, uint64_t, VkPrivateDataSlot, uint64_t *); void (*p_vkGetPrivateDataEXT)(VkDevice, VkObjectType, uint64_t, VkPrivateDataSlot, uint64_t *); @@ -847,6 +850,7 @@ struct vulkan_instance_funcs USE_VK_FUNC(vkCmdTraceRaysKHR) \ USE_VK_FUNC(vkCmdTraceRaysNV) \ USE_VK_FUNC(vkCmdUpdateBuffer) \ + USE_VK_FUNC(vkCmdUpdatePipelineIndirectBufferNV) \ USE_VK_FUNC(vkCmdWaitEvents) \ USE_VK_FUNC(vkCmdWaitEvents2) \ USE_VK_FUNC(vkCmdWaitEvents2KHR) \ @@ -1020,6 +1024,8 @@ struct vulkan_instance_funcs USE_VK_FUNC(vkGetPipelineExecutableInternalRepresentationsKHR) \ USE_VK_FUNC(vkGetPipelineExecutablePropertiesKHR) \ USE_VK_FUNC(vkGetPipelineExecutableStatisticsKHR) \ + USE_VK_FUNC(vkGetPipelineIndirectDeviceAddressNV) \ + USE_VK_FUNC(vkGetPipelineIndirectMemoryRequirementsNV) \ USE_VK_FUNC(vkGetPipelinePropertiesEXT) \ USE_VK_FUNC(vkGetPrivateData) \ USE_VK_FUNC(vkGetPrivateDataEXT) \ diff --git a/dlls/winevulkan/winevulkan.json b/dlls/winevulkan/winevulkan.json index 37c95b4faf8..39662e69dde 100644 --- a/dlls/winevulkan/winevulkan.json +++ b/dlls/winevulkan/winevulkan.json @@ -2,6 +2,6 @@ "file_format_version": "1.0.0", "ICD": { "library_path": ".\winevulkan.dll", - "api_version": "1.3.258" + "api_version": "1.3.259" } } diff --git a/include/wine/vulkan.h b/include/wine/vulkan.h index d295dffb1fb..6c4f5c7a9b7 100644 --- a/include/wine/vulkan.h +++ b/include/wine/vulkan.h @@ -561,6 +561,8 @@ #define VK_NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME "VK_NV_copy_memory_indirect" #define VK_NV_MEMORY_DECOMPRESSION_SPEC_VERSION 1 #define VK_NV_MEMORY_DECOMPRESSION_EXTENSION_NAME "VK_NV_memory_decompression" +#define VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION 2 +#define VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME "VK_NV_device_generated_commands_compute" #define VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION 1 #define VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME "VK_NV_linear_color_attachment" #define VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION 1 @@ -633,7 +635,7 @@ #define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0) #define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0) #define VKSC_API_VERSION_1_0 VK_MAKE_API_VERSION(VKSC_API_VARIANT, 1, 0, 0) -#define VK_HEADER_VERSION 258 +#define VK_HEADER_VERSION 259 #define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION) #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; #define VK_USE_64_BIT_PTR_DEFINES 0 @@ -1641,6 +1643,7 @@ typedef enum VkDescriptorSetLayoutCreateFlagBits VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT = 0x00000004, VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00000010, VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT = 0x00000020, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00000080, VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT, VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7fffffff, @@ -2718,6 +2721,8 @@ typedef enum VkIndirectCommandsTokenTypeNV VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = 6, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = 7, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV = 1000328000, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV = 1000428003, + VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV = 1000428004, VK_INDIRECT_COMMANDS_TOKEN_TYPE_NV_MAX_ENUM = 0x7fffffff, } VkIndirectCommandsTokenTypeNV;
@@ -4409,6 +4414,9 @@ typedef enum VkStructureType VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV = 1000426001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV = 1000427000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV = 1000427001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV = 1000428000, + VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV = 1000428001, + VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV = 1000428002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV = 1000430000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT = 1000437000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM = 1000440000, @@ -5136,6 +5144,11 @@ typedef struct VkBindIndexBufferIndirectCommandNV VkIndexType indexType; } VkBindIndexBufferIndirectCommandNV;
+typedef struct VkBindPipelineIndirectCommandNV +{ + VkDeviceAddress WINE_VK_ALIGN(8) pipelineAddress; +} VkBindPipelineIndirectCommandNV; + typedef struct VkBindShaderGroupIndirectCommandNV { uint32_t groupIndex; @@ -5399,6 +5412,15 @@ typedef struct VkComponentMapping VkComponentSwizzle a; } VkComponentMapping;
+typedef struct VkComputePipelineIndirectBufferInfoNV +{ + VkStructureType sType; + const void *pNext; + VkDeviceAddress WINE_VK_ALIGN(8) deviceAddress; + VkDeviceSize WINE_VK_ALIGN(8) size; + VkDeviceAddress WINE_VK_ALIGN(8) pipelineDeviceAddressCaptureReplay; +} VkComputePipelineIndirectBufferInfoNV; + typedef struct VkConditionalRenderingBeginInfoEXT { VkStructureType sType; @@ -7375,6 +7397,15 @@ typedef struct VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE VkBool32 descriptorSetHostMapping; } VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE;
+typedef struct VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV +{ + VkStructureType sType; + void *pNext; + VkBool32 deviceGeneratedCompute; + VkBool32 deviceGeneratedComputePipelines; + VkBool32 deviceGeneratedComputeCaptureReplay; +} VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV; + typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV { VkStructureType sType; @@ -9685,6 +9716,14 @@ typedef struct VkPipelineFragmentShadingRateStateCreateInfoKHR VkFragmentShadingRateCombinerOpKHR combinerOps[2]; } VkPipelineFragmentShadingRateStateCreateInfoKHR;
+typedef struct VkPipelineIndirectDeviceAddressInfoNV +{ + VkStructureType sType; + const void *pNext; + VkPipelineBindPoint pipelineBindPoint; + VkPipeline WINE_VK_ALIGN(8) pipeline; +} VkPipelineIndirectDeviceAddressInfoNV; +
typedef struct VkPipelineInfoKHR { @@ -12311,6 +12350,7 @@ typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirectKHR)(VkCommandBuffer, const V typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysKHR)(VkCommandBuffer, const VkStridedDeviceAddressRegionKHR *, const VkStridedDeviceAddressRegionKHR *, const VkStridedDeviceAddressRegionKHR *, const VkStridedDeviceAddressRegionKHR *, uint32_t, uint32_t, uint32_t); typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysNV)(VkCommandBuffer, VkBuffer, VkDeviceSize, VkBuffer, VkDeviceSize, VkDeviceSize, VkBuffer, VkDeviceSize, VkDeviceSize, VkBuffer, VkDeviceSize, VkDeviceSize, uint32_t, uint32_t, uint32_t); typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer, VkBuffer, VkDeviceSize, VkDeviceSize, const void *); +typedef void (VKAPI_PTR *PFN_vkCmdUpdatePipelineIndirectBufferNV)(VkCommandBuffer, VkPipelineBindPoint, VkPipeline); typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer, uint32_t, const VkEvent *, VkPipelineStageFlags, VkPipelineStageFlags, uint32_t, const VkMemoryBarrier *, uint32_t, const VkBufferMemoryBarrier *, uint32_t, const VkImageMemoryBarrier *); typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2)(VkCommandBuffer, uint32_t, const VkEvent *, const VkDependencyInfo *); typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2KHR)(VkCommandBuffer, uint32_t, const VkEvent *, const VkDependencyInfo *); @@ -12552,6 +12592,8 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice, VkPipelineCac typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice, const VkPipelineExecutableInfoKHR *, uint32_t *, VkPipelineExecutableInternalRepresentationKHR *); typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice, const VkPipelineInfoKHR *, uint32_t *, VkPipelineExecutablePropertiesKHR *); typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice, const VkPipelineExecutableInfoKHR *, uint32_t *, VkPipelineExecutableStatisticKHR *); +typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetPipelineIndirectDeviceAddressNV)(VkDevice, const VkPipelineIndirectDeviceAddressInfoNV *); +typedef void (VKAPI_PTR *PFN_vkGetPipelineIndirectMemoryRequirementsNV)(VkDevice, const VkComputePipelineCreateInfo *, VkMemoryRequirements2 *); typedef VkResult (VKAPI_PTR *PFN_vkGetPipelinePropertiesEXT)(VkDevice, const VkPipelineInfoEXT *, VkBaseOutStructure *); typedef void (VKAPI_PTR *PFN_vkGetPrivateData)(VkDevice, VkObjectType, uint64_t, VkPrivateDataSlot, uint64_t *); typedef void (VKAPI_PTR *PFN_vkGetPrivateDataEXT)(VkDevice, VkObjectType, uint64_t, VkPrivateDataSlot, uint64_t *); @@ -12864,6 +12906,7 @@ void VKAPI_CALL vkCmdTraceRaysIndirectKHR(VkCommandBuffer commandBuffer, const V void VKAPI_CALL vkCmdTraceRaysKHR(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR *pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR *pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR *pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR *pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth); void VKAPI_CALL vkCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth); void VKAPI_CALL vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void *pData); +void VKAPI_CALL vkCmdUpdatePipelineIndirectBufferNV(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); void VKAPI_CALL vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers); void VKAPI_CALL vkCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, const VkDependencyInfo *pDependencyInfos); void VKAPI_CALL vkCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, const VkDependencyInfo *pDependencyInfos); @@ -13105,6 +13148,8 @@ VkResult VKAPI_CALL vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipe VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR(VkDevice device, const VkPipelineExecutableInfoKHR *pExecutableInfo, uint32_t *pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR *pInternalRepresentations); VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR(VkDevice device, const VkPipelineInfoKHR *pPipelineInfo, uint32_t *pExecutableCount, VkPipelineExecutablePropertiesKHR *pProperties); VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR(VkDevice device, const VkPipelineExecutableInfoKHR *pExecutableInfo, uint32_t *pStatisticCount, VkPipelineExecutableStatisticKHR *pStatistics); +VkDeviceAddress VKAPI_CALL vkGetPipelineIndirectDeviceAddressNV(VkDevice device, const VkPipelineIndirectDeviceAddressInfoNV *pInfo); +void VKAPI_CALL vkGetPipelineIndirectMemoryRequirementsNV(VkDevice device, const VkComputePipelineCreateInfo *pCreateInfo, VkMemoryRequirements2 *pMemoryRequirements); VkResult VKAPI_CALL vkGetPipelinePropertiesEXT(VkDevice device, const VkPipelineInfoEXT *pPipelineInfo, VkBaseOutStructure *pPipelineProperties); void VKAPI_CALL vkGetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t *pData); void VKAPI_CALL vkGetPrivateDataEXT(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t *pData);