We can't reasonably auto generate this because it's output in an otherwise input pNext chain.
Signed-off-by: Georg Lehmann dadschoorse@gmail.com --- dlls/winevulkan/make_vulkan | 8 +++ dlls/winevulkan/vulkan.c | 107 ++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index c609bbfd151..2f3d647ef9b 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -205,6 +205,8 @@ FUNCTION_OVERRIDES = { # Device functions "vkAllocateCommandBuffers" : {"dispatch" : True, "driver" : False, "thunk" : ThunkType.NONE}, "vkCreateCommandPool" : {"dispatch": True, "driver" : False, "thunk" : ThunkType.NONE}, + "vkCreateComputePipelines" : {"dispatch": True, "driver" : False, "thunk" : ThunkType.PRIVATE}, + "vkCreateGraphicsPipelines" : {"dispatch": True, "driver" : False, "thunk" : ThunkType.PRIVATE}, "vkDestroyCommandPool" : {"dispatch": True, "driver" : False, "thunk" : ThunkType.NONE}, "vkDestroyDevice" : {"dispatch" : True, "driver" : False, "thunk" : ThunkType.NONE}, "vkFreeCommandBuffers" : {"dispatch" : True, "driver" : False, "thunk" : ThunkType.NONE}, @@ -250,6 +252,9 @@ FUNCTION_OVERRIDES = { "vkGetDeviceGroupSurfacePresentModesKHR" : {"dispatch" : True, "driver" : True, "thunk" : ThunkType.PUBLIC}, "vkGetPhysicalDevicePresentRectanglesKHR" : {"dispatch" : True, "driver" : True, "thunk" : ThunkType.PUBLIC},
+ # VK_KHR_ray_tracing_pipeline + "vkCreateRayTracingPipelinesKHR" : {"dispatch": True, "driver" : False, "thunk" : ThunkType.PRIVATE}, + # VK_EXT_calibrated_timestamps "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT" : {"dispatch" : True, "driver" : False, "thunk" : ThunkType.NONE}, "vkGetCalibratedTimestampsEXT" : {"dispatch" : True, "driver" : False, "thunk" : ThunkType.NONE}, @@ -261,6 +266,9 @@ FUNCTION_OVERRIDES = { # VK_EXT_debug_report "vkCreateDebugReportCallbackEXT" : {"dispatch": True, "driver" : False, "thunk" : ThunkType.NONE}, "vkDestroyDebugReportCallbackEXT" : {"dispatch": True, "driver" : False, "thunk" : ThunkType.NONE}, + + # VK_NV_ray_tracing + "vkCreateRayTracingPipelinesNV" : {"dispatch": True, "driver" : False, "thunk" : ThunkType.PRIVATE}, }
STRUCT_CHAIN_CONVERSIONS = { diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 19cc999433b..190f70f3616 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -1758,6 +1758,113 @@ NTSTATUS wine_vkDestroyDebugReportCallbackEXT(void *args) return STATUS_SUCCESS; }
+static void fixup_pipeline_feedback(VkPipelineCreationFeedback *feedback, uint32_t count) +{ +#if defined(USE_STRUCT_CONVERSION) + struct host_pipeline_feedback + { + VkPipelineCreationFeedbackFlags flags; + uint64_t duration; + } *host_feedback; + int64_t i; + + host_feedback = (void *) feedback; + + for (i = count - 1; i >= 0; i--) + { + memmove(&feedback[i].duration, &host_feedback[i].duration, sizeof(uint64_t)); + feedback[i].flags = host_feedback[i].flags; + } +#endif +} + +static void fixup_pipeline_feedback_info(const void *pipeline_info) +{ + VkPipelineCreationFeedbackCreateInfo *feedback; + + feedback = wine_vk_find_struct(pipeline_info, PIPELINE_CREATION_FEEDBACK_CREATE_INFO); + + if (!feedback) + return; + + fixup_pipeline_feedback(feedback->pPipelineCreationFeedback, 1); + fixup_pipeline_feedback(feedback->pPipelineStageCreationFeedbacks, + feedback->pipelineStageCreationFeedbackCount); +} + +NTSTATUS wine_vkCreateComputePipelines(void *args) +{ + struct vkCreateComputePipelines_params *params = args; + VkResult res; + uint32_t i; + + TRACE("%p, 0x%s, %u, %p, %p, %p\n", params->device, wine_dbgstr_longlong(params->pipelineCache), + params->createInfoCount, params->pCreateInfos, params->pAllocator, params->pPipelines); + + res = thunk_vkCreateComputePipelines(params->device, params->pipelineCache, + params->createInfoCount, params->pCreateInfos, params->pAllocator, params->pPipelines); + + for (i = 0; i < params->createInfoCount; i++) + fixup_pipeline_feedback_info(¶ms->pCreateInfos[i]); + + return res; +} + +NTSTATUS wine_vkCreateGraphicsPipelines(void *args) +{ + struct vkCreateGraphicsPipelines_params *params = args; + VkResult res; + uint32_t i; + + TRACE("%p, 0x%s, %u, %p, %p, %p\n", params->device, wine_dbgstr_longlong(params->pipelineCache), + params->createInfoCount, params->pCreateInfos, params->pAllocator, params->pPipelines); + + res = thunk_vkCreateGraphicsPipelines(params->device, params->pipelineCache, + params->createInfoCount, params->pCreateInfos, params->pAllocator, params->pPipelines); + + for (i = 0; i < params->createInfoCount; i++) + fixup_pipeline_feedback_info(¶ms->pCreateInfos[i]); + + return res; +} + +NTSTATUS wine_vkCreateRayTracingPipelinesKHR(void *args) +{ + struct vkCreateRayTracingPipelinesKHR_params *params = args; + VkResult res; + uint32_t i; + + TRACE("%p, 0x%s, 0x%s, %u, %p, %p, %p\n", params->device, + wine_dbgstr_longlong(params->deferredOperation), wine_dbgstr_longlong(params->pipelineCache), + params->createInfoCount, params->pCreateInfos, params->pAllocator, params->pPipelines); + + res = thunk_vkCreateRayTracingPipelinesKHR(params->device, params->deferredOperation, params->pipelineCache, + params->createInfoCount, params->pCreateInfos, params->pAllocator, params->pPipelines); + + for (i = 0; i < params->createInfoCount; i++) + fixup_pipeline_feedback_info(¶ms->pCreateInfos[i]); + + return res; +} + +NTSTATUS wine_vkCreateRayTracingPipelinesNV(void *args) +{ + struct vkCreateRayTracingPipelinesNV_params *params = args; + VkResult res; + uint32_t i; + + TRACE("%p, 0x%s, %u, %p, %p, %p\n", params->device, wine_dbgstr_longlong(params->pipelineCache), + params->createInfoCount, params->pCreateInfos, params->pAllocator, params->pPipelines); + + res = thunk_vkCreateRayTracingPipelinesNV(params->device, params->pipelineCache, + params->createInfoCount, params->pCreateInfos, params->pAllocator, params->pPipelines); + + for (i = 0; i < params->createInfoCount; i++) + fixup_pipeline_feedback_info(¶ms->pCreateInfos[i]); + + return res; +} + BOOL WINAPI wine_vk_is_available_instance_function(VkInstance instance, const char *name) { return !!vk_funcs->p_vkGetInstanceProcAddr(instance->instance, name);
We did previously not support this extension because it runs into 32bit alignment issues but those are now fixed.
Signed-off-by: Georg Lehmann dadschoorse@gmail.com --- dlls/winevulkan/make_vulkan | 1 - 1 file changed, 1 deletion(-)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index 2f3d647ef9b..ca5cf94af55 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -96,7 +96,6 @@ UNSUPPORTED_EXTENSIONS = [ "VK_AMD_display_native_hdr", "VK_EXT_full_screen_exclusive", "VK_EXT_hdr_metadata", # Needs WSI work. - "VK_EXT_pipeline_creation_feedback", "VK_GOOGLE_display_timing", "VK_KHR_external_fence_win32", "VK_KHR_external_semaphore_win32",
Georg Lehmann dadschoorse@gmail.com writes:
We can't reasonably auto generate this because it's output in an otherwise input pNext chain.
Signed-off-by: Georg Lehmann dadschoorse@gmail.com
dlls/winevulkan/make_vulkan | 8 +++ dlls/winevulkan/vulkan.c | 107 ++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+)
This is causing compiler warnings:
gcc -m32 -c -o dlls/winevulkan/vulkan_thunks.o dlls/winevulkan/vulkan_thunks.c -Idlls/winevulkan -Iinclude -D__WINESRC__ \ -DWINE_NO_LONG_TYPES -D_UCRT -DWINE_UNIX_LIB -Wall -pipe -fcf-protection=none -fno-stack-protector \ -fno-strict-aliasing -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers -Winit-self \ -Wno-packed-not-aligned -Wshift-overflow=2 -Wstrict-prototypes -Wtype-limits \ -Wunused-but-set-parameter -Wvla -Wwrite-strings -Wpointer-arith -Wlogical-op -gdwarf-4 \ -fno-omit-frame-pointer -Werror -fPIC -fasynchronous-unwind-tables -g -O2 -fno-diagnostics-show-caret dlls/winevulkan/vulkan_thunks.c: In function ‘thunk_vkCreateGraphicsPipelines’: dlls/winevulkan/vulkan_thunks.c:7293:14: error: ‘out’ may be used uninitialized [-Werror=maybe-uninitialized] dlls/winevulkan/vulkan_thunks.c:7293:14: note: by argument 4 of type ‘const VkGraphicsPipelineCreateInfo_host *’ to ‘VkResult(struct VkDevice_T *, VkPipelineCache, uint32_t, const VkGraphicsPipelineCreateInfo_host *, const VkAllocationCallbacks *, VkPipeline *)’ {aka ‘VkResult(struct VkDevice_T *, long long unsigned int, unsigned int, const VkGraphicsPipelineCreateInfo_host *, const VkAllocationCallbacks *, long long unsigned int *)’} dlls/winevulkan/vulkan_thunks.c: In function ‘thunk_vkCreateRayTracingPipelinesKHR’: dlls/winevulkan/vulkan_thunks.c:7387:14: error: ‘out’ may be used uninitialized [-Werror=maybe-uninitialized] dlls/winevulkan/vulkan_thunks.c:7387:14: note: by argument 5 of type ‘const VkRayTracingPipelineCreateInfoKHR_host *’ to ‘VkResult(struct VkDevice_T *, VkDeferredOperationKHR, VkPipelineCache, uint32_t, const VkRayTracingPipelineCreateInfoKHR_host *, const VkAllocationCallbacks *, VkPipeline *)’ {aka ‘VkResult(struct VkDevice_T *, long long unsigned int, long long unsigned int, unsigned int, const VkRayTracingPipelineCreateInfoKHR_host *, const VkAllocationCallbacks *, long long unsigned int *)’} dlls/winevulkan/vulkan_thunks.c: In function ‘thunk_vkCreateRayTracingPipelinesNV’: dlls/winevulkan/vulkan_thunks.c:7402:14: error: ‘out’ may be used uninitialized [-Werror=maybe-uninitialized] dlls/winevulkan/vulkan_thunks.c:7402:14: note: by argument 4 of type ‘const VkRayTracingPipelineCreateInfoNV_host *’ to ‘VkResult(struct VkDevice_T *, VkPipelineCache, uint32_t, const VkRayTracingPipelineCreateInfoNV_host *, const VkAllocationCallbacks *, VkPipeline *)’ {aka ‘VkResult(struct VkDevice_T *, long long unsigned int, unsigned int, const VkRayTracingPipelineCreateInfoNV_host *, const VkAllocationCallbacks *, long long unsigned int *)’} cc1: all warnings being treated as errors make: *** [Makefile:134199: dlls/winevulkan/vulkan_thunks.o] Error 1