Selaa lähdekoodia

vulkan/wsi: Move get_images into common code

This moves bits out of all four corners (anv, radv, x11, wayland) and
into the wsi common code.  We also switch to using an outarray to ensure
we get our return code right.

Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Chad Versace <chadversary@chromium.org>
tags/18.0-branchpoint
Jason Ekstrand 8 vuotta sitten
vanhempi
commit
393aa3f6c9

+ 3
- 4
src/amd/vulkan/radv_wsi.c Näytä tiedosto

@@ -222,13 +222,12 @@ void radv_DestroySwapchainKHR(

VkResult radv_GetSwapchainImagesKHR(
VkDevice device,
VkSwapchainKHR _swapchain,
VkSwapchainKHR swapchain,
uint32_t* pSwapchainImageCount,
VkImage* pSwapchainImages)
{
RADV_FROM_HANDLE(wsi_swapchain, swapchain, _swapchain);

return swapchain->get_images(swapchain, pSwapchainImageCount,
return wsi_common_get_images(swapchain,
pSwapchainImageCount,
pSwapchainImages);
}


+ 3
- 4
src/intel/vulkan/anv_wsi.c Näytä tiedosto

@@ -248,13 +248,12 @@ void anv_DestroySwapchainKHR(

VkResult anv_GetSwapchainImagesKHR(
VkDevice device,
VkSwapchainKHR _swapchain,
VkSwapchainKHR swapchain,
uint32_t* pSwapchainImageCount,
VkImage* pSwapchainImages)
{
ANV_FROM_HANDLE(wsi_swapchain, swapchain, _swapchain);

return swapchain->get_images(swapchain, pSwapchainImageCount,
return wsi_common_get_images(swapchain,
pSwapchainImageCount,
pSwapchainImages);
}


+ 17
- 0
src/vulkan/wsi/wsi_common.c Näytä tiedosto

@@ -507,6 +507,23 @@ wsi_prime_image_blit_to_linear(const struct wsi_swapchain *chain,
return chain->wsi->QueueSubmit(queue, 1, &submit_info, VK_NULL_HANDLE);
}

VkResult
wsi_common_get_images(VkSwapchainKHR _swapchain,
uint32_t *pSwapchainImageCount,
VkImage *pSwapchainImages)
{
WSI_FROM_HANDLE(wsi_swapchain, swapchain, _swapchain);
VK_OUTARRAY_MAKE(images, pSwapchainImages, pSwapchainImageCount);

for (uint32_t i = 0; i < swapchain->image_count; i++) {
vk_outarray_append(&images, image) {
*image = swapchain->get_wsi_image(swapchain, i)->image;
}
}

return vk_outarray_status(&images);
}

VkResult
wsi_common_queue_present(const struct wsi_device *wsi,
VkDevice device,

+ 7
- 2
src/vulkan/wsi/wsi_common.h Näytä tiedosto

@@ -64,8 +64,8 @@ struct wsi_swapchain {

VkResult (*destroy)(struct wsi_swapchain *swapchain,
const VkAllocationCallbacks *pAllocator);
VkResult (*get_images)(struct wsi_swapchain *swapchain,
uint32_t *pCount, VkImage *pSwapchainImages);
struct wsi_image *(*get_wsi_image)(struct wsi_swapchain *swapchain,
uint32_t image_index);
VkResult (*acquire_next_image)(struct wsi_swapchain *swap_chain,
uint64_t timeout, VkSemaphore semaphore,
uint32_t *image_index);
@@ -216,6 +216,11 @@ VkResult wsi_wl_init_wsi(struct wsi_device *wsi_device,
void wsi_wl_finish_wsi(struct wsi_device *wsi_device,
const VkAllocationCallbacks *alloc);

VkResult
wsi_common_get_images(VkSwapchainKHR _swapchain,
uint32_t *pSwapchainImageCount,
VkImage *pSwapchainImages);

VkResult
wsi_common_queue_present(const struct wsi_device *wsi,
VkDevice device_h,

+ 5
- 23
src/vulkan/wsi/wsi_common_wayland.c Näytä tiedosto

@@ -582,30 +582,12 @@ struct wsi_wl_swapchain {
struct wsi_wl_image images[0];
};

static VkResult
wsi_wl_swapchain_get_images(struct wsi_swapchain *wsi_chain,
uint32_t *pCount, VkImage *pSwapchainImages)
static struct wsi_image *
wsi_wl_swapchain_get_wsi_image(struct wsi_swapchain *wsi_chain,
uint32_t image_index)
{
struct wsi_wl_swapchain *chain = (struct wsi_wl_swapchain *)wsi_chain;
uint32_t ret_count;
VkResult result;

if (pSwapchainImages == NULL) {
*pCount = chain->base.image_count;
return VK_SUCCESS;
}

result = VK_SUCCESS;
ret_count = chain->base.image_count;
if (chain->base.image_count > *pCount) {
ret_count = *pCount;
result = VK_INCOMPLETE;
}

for (uint32_t i = 0; i < ret_count; i++)
pSwapchainImages[i] = chain->images[i].base.image;

return result;
return &chain->images[image_index].base;
}

static VkResult
@@ -832,7 +814,7 @@ wsi_wl_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR;

chain->base.destroy = wsi_wl_swapchain_destroy;
chain->base.get_images = wsi_wl_swapchain_get_images;
chain->base.get_wsi_image = wsi_wl_swapchain_get_wsi_image;
chain->base.acquire_next_image = wsi_wl_swapchain_acquire_next_image;
chain->base.queue_present = wsi_wl_swapchain_queue_present;
chain->base.present_mode = pCreateInfo->presentMode;

+ 5
- 24
src/vulkan/wsi/wsi_common_x11.c Näytä tiedosto

@@ -648,30 +648,11 @@ struct x11_swapchain {
struct x11_image images[0];
};

static VkResult
x11_get_images(struct wsi_swapchain *anv_chain,
uint32_t* pCount, VkImage *pSwapchainImages)
static struct wsi_image *
x11_get_wsi_image(struct wsi_swapchain *wsi_chain, uint32_t image_index)
{
struct x11_swapchain *chain = (struct x11_swapchain *)anv_chain;
uint32_t ret_count;
VkResult result;

if (pSwapchainImages == NULL) {
*pCount = chain->base.image_count;
return VK_SUCCESS;
}

result = VK_SUCCESS;
ret_count = chain->base.image_count;
if (chain->base.image_count > *pCount) {
ret_count = *pCount;
result = VK_INCOMPLETE;
}

for (uint32_t i = 0; i < ret_count; i++)
pSwapchainImages[i] = chain->images[i].base.image;

return result;
struct x11_swapchain *chain = (struct x11_swapchain *)wsi_chain;
return &chain->images[image_index].base;
}

static VkResult
@@ -1109,7 +1090,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
goto fail_alloc;

chain->base.destroy = x11_swapchain_destroy;
chain->base.get_images = x11_get_images;
chain->base.get_wsi_image = x11_get_wsi_image;
chain->base.acquire_next_image = x11_acquire_next_image;
chain->base.queue_present = x11_queue_present;
chain->base.present_mode = pCreateInfo->presentMode;

Loading…
Peruuta
Tallenna