mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
lavapipe: Go back to manually signaling in lvp_AcquireNextImage2()
When porting lavapipe to the common sync framework, I stole the dummy
sync signal_for_memory idea from RADV but didn't actually do it
correctly. Unless you set wsi_device::signal_semaphore_with_memory and
wsi_device::signal_fence_with_memory, it doesn't actually signal
anything. If you do set those, it works but also results in dummy
syncs being created for present fences which we see as signals. We
could choose to just skip those like RADV does but that's too magic.
Instead, have our own AcquireNextImage2() again which sets dummy syncs.
Fixes: 3b547a9b58 ("lavapipe: Switch to the common sync framework")
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15774>
This commit is contained in:
parent
a5a97f0b77
commit
dbfb0b4989
2 changed files with 43 additions and 11 deletions
|
|
@ -26,7 +26,6 @@
|
|||
#include "pipe-loader/pipe_loader.h"
|
||||
#include "git_sha1.h"
|
||||
#include "vk_cmd_enqueue_entrypoints.h"
|
||||
#include "vk_sync_dummy.h"
|
||||
#include "vk_util.h"
|
||||
#include "pipe/p_config.h"
|
||||
#include "pipe/p_defines.h"
|
||||
|
|
@ -1463,15 +1462,6 @@ unref_pipeline_layout(struct vk_device *vk_device, VkPipelineLayout _layout)
|
|||
lvp_pipeline_layout_unref(device, layout);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
lvp_create_sync_for_memory(struct vk_device *device,
|
||||
VkDeviceMemory memory,
|
||||
bool signal_memory,
|
||||
struct vk_sync **sync_out)
|
||||
{
|
||||
return vk_sync_create(device, &vk_sync_dummy_type, 0, 1, sync_out);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDevice(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkDeviceCreateInfo* pCreateInfo,
|
||||
|
|
@ -1516,7 +1506,6 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDevice(
|
|||
device->instance = (struct lvp_instance *)physical_device->vk.instance;
|
||||
device->physical_device = physical_device;
|
||||
|
||||
device->vk.create_sync_for_memory = lvp_create_sync_for_memory;
|
||||
device->vk.ref_pipeline_layout = ref_pipeline_layout;
|
||||
device->vk.unref_pipeline_layout = unref_pipeline_layout;
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,10 @@
|
|||
|
||||
#include "lvp_wsi.h"
|
||||
|
||||
#include "vk_fence.h"
|
||||
#include "vk_semaphore.h"
|
||||
#include "vk_sync_dummy.h"
|
||||
|
||||
static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL
|
||||
lvp_wsi_proc_addr(VkPhysicalDevice physicalDevice, const char *pName)
|
||||
{
|
||||
|
|
@ -55,3 +59,42 @@ lvp_finish_wsi(struct lvp_physical_device *physical_device)
|
|||
wsi_device_finish(&physical_device->wsi_device,
|
||||
&physical_device->vk.instance->alloc);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL lvp_AcquireNextImage2KHR(
|
||||
VkDevice _device,
|
||||
const VkAcquireNextImageInfoKHR* pAcquireInfo,
|
||||
uint32_t* pImageIndex)
|
||||
{
|
||||
LVP_FROM_HANDLE(lvp_device, device, _device);
|
||||
struct lvp_physical_device *pdevice = device->physical_device;
|
||||
|
||||
VkResult result = wsi_common_acquire_next_image2(&pdevice->wsi_device,
|
||||
_device,
|
||||
pAcquireInfo,
|
||||
pImageIndex);
|
||||
|
||||
VK_FROM_HANDLE(vk_fence, fence, pAcquireInfo->fence);
|
||||
VK_FROM_HANDLE(vk_semaphore, sem, pAcquireInfo->semaphore);
|
||||
if (result == VK_SUCCESS || result == VK_SUBOPTIMAL_KHR) {
|
||||
VkResult sync_res;
|
||||
if (fence) {
|
||||
vk_fence_reset_temporary(&device->vk, fence);
|
||||
sync_res = vk_sync_create(&device->vk, &vk_sync_dummy_type,
|
||||
0 /* flags */, 0 /* initial_value */,
|
||||
&fence->temporary);
|
||||
if (sync_res != VK_SUCCESS)
|
||||
return sync_res;
|
||||
}
|
||||
|
||||
if (sem) {
|
||||
vk_semaphore_reset_temporary(&device->vk, sem);
|
||||
sync_res = vk_sync_create(&device->vk, &vk_sync_dummy_type,
|
||||
0 /* flags */, 0 /* initial_value */,
|
||||
&sem->temporary);
|
||||
if (sync_res != VK_SUCCESS)
|
||||
return sync_res;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue