/* device surface capabilities */
int min_buffer;
int max_buffer;
- int present_modes;
+ int supported_present_modes;
#if TIZEN_FEATURE_ENABLE
struct zwp_linux_explicit_synchronization_v1 *explicit_sync; /* for explicit fence sync */
#endif
/* Vulkan specific surface capabilities */
wl_vk_display->min_buffer = 2;
wl_vk_display->max_buffer = VK_CLIENT_QUEUE_SIZE;
- wl_vk_display->present_modes = TPL_DISPLAY_PRESENT_MODE_FIFO;
+ wl_vk_display->supported_present_modes |= TPL_DISPLAY_PRESENT_MODE_IMMEDIATE;
+ wl_vk_display->supported_present_modes |= TPL_DISPLAY_PRESENT_MODE_MAILBOX;
+ wl_vk_display->supported_present_modes |= TPL_DISPLAY_PRESENT_MODE_FIFO;
wl_vk_display->use_wait_vblank = TPL_TRUE; // default enabled
{
wl_vk_display = (tpl_wl_vk_display_t *)display->backend.data;
TPL_CHECK_ON_NULL_RETURN_VAL(wl_vk_display, TPL_ERROR_INVALID_PARAMETER);
- if (present_modes) {
- *present_modes = wl_vk_display->present_modes;
- }
+ if (present_modes)
+ *present_modes = wl_vk_display->supported_present_modes;
return TPL_ERROR_NONE;
}
}
}
#endif
-
wl_vk_surface->vblank_enable = (wl_vk_surface->vblank != NULL &&
wl_vk_surface->post_interval > 0);
}
}
wl_vk_surface->reset = TPL_TRUE;
+ _tpl_wl_vk_surface_buffer_clear(wl_vk_surface);
if (surface->reset_cb)
surface->reset_cb(surface->reset_data);
return TPL_ERROR_INVALID_PARAMETER;
}
- if (!(swapchain->properties.present_mode & wl_vk_display->present_modes)) {
+ if (!(swapchain->properties.present_mode & wl_vk_display->supported_present_modes)) {
TPL_ERR("Unsupported present_mode(%d)",
swapchain->properties.present_mode);
swapchain->result = TPL_ERROR_INVALID_PARAMETER;
swapchain = wl_vk_surface->swapchain;
+ if (swapchain != NULL && (swapchain->properties.present_mode != present_mode)) {
+ _tpl_wl_vk_surface_buffer_clear(wl_vk_surface);
+ }
if (swapchain == NULL) {
swapchain =
(tpl_wl_vk_swapchain_t *)calloc(1, sizeof(tpl_wl_vk_swapchain_t));
TPL_CHECK_ON_NULL_RETURN_VAL(swapchain, TPL_ERROR_OUT_OF_MEMORY);
swapchain->tbm_queue = NULL;
+ __tpl_util_atomic_set(&swapchain->ref_cnt, 1);
}
swapchain->properties.buffer_count = buffer_count;
wl_vk_surface->swapchain = swapchain;
- __tpl_util_atomic_set(&swapchain->ref_cnt, 1);
tpl_gmutex_lock(&wl_vk_surface->surf_mutex);
/* send swapchain create tbm_queue message */