Mesa (master): egl/dri2: implement query surface hook
Module: Mesa Branch: master Commit: 4d6d4f939e0af4252e0b6ba3fcb2c9f4101e9e39 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4d6d4f939e0af4252e0b6ba3fcb2c9f4101e9e39 Author: Tapani PälliDate: Wed Dec 21 10:21:34 2016 +0200 egl/dri2: implement query surface hook This makes better guarantee that the values we return are in sync what the underlying drawable currently has. Together with dEQP change in bug #98327 this fixes following test: dEQP-EGL.functional.resize.surface_size.grow v2: avoid unnecessary x11 roundtrips (Chad Versace) Signed-off-by: Tapani Pälli Tested-by: Mark Janes Reviewed-by: Chad Versace Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98327 --- src/egl/drivers/dri2/platform_x11.c | 36 1 file changed, 36 insertions(+) diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index db7d3b9..9a93b19 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -395,6 +395,40 @@ dri2_x11_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf) } /** + * Function utilizes swrastGetDrawableInfo to get surface + * geometry from x server and calls default query surface + * implementation that returns the updated values. + * + * In case of errors we still return values that we currently + * have. + */ +static EGLBoolean +dri2_query_surface(_EGLDriver *drv, _EGLDisplay *dpy, + _EGLSurface *surf, EGLint attribute, + EGLint *value) +{ + struct dri2_egl_display *dri2_dpy = dri2_egl_display(dpy); + struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); + int x, y, w = -1, h = -1; + + __DRIdrawable *drawable = dri2_dpy->vtbl->get_dri_drawable(surf); + + switch (attribute) { + case EGL_WIDTH: + case EGL_HEIGHT: + swrastGetDrawableInfo(drawable, , , , , dri2_surf); + if (w != -1 && h != -1) { + surf->Width = w; + surf->Height = h; + } + break; + default: + break; + } + return _eglQuerySurface(drv, dpy, surf, attribute, value); +} + +/** * Process list of buffer received from the server * * Processes the list of buffers received in a reply from the server to either @@ -1113,6 +1147,7 @@ static struct dri2_egl_display_vtbl dri2_x11_swrast_display_vtbl = { .post_sub_buffer = dri2_fallback_post_sub_buffer, .copy_buffers = dri2_x11_copy_buffers, .query_buffer_age = dri2_fallback_query_buffer_age, + .query_surface = dri2_query_surface, .create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image, .get_sync_values = dri2_fallback_get_sync_values, .get_dri_drawable = dri2_surface_get_dri_drawable, @@ -1132,6 +1167,7 @@ static struct dri2_egl_display_vtbl dri2_x11_display_vtbl = { .post_sub_buffer = dri2_x11_post_sub_buffer, .copy_buffers = dri2_x11_copy_buffers, .query_buffer_age = dri2_fallback_query_buffer_age, + .query_surface = dri2_query_surface, .create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image, .get_sync_values = dri2_x11_get_sync_values, .get_dri_drawable = dri2_surface_get_dri_drawable, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radv: Also skip DCC clear flushes for compute.
Module: Mesa Branch: master Commit: 059af2515ad778f569e999547cb44a195f66c198 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=059af2515ad778f569e999547cb44a195f66c198 Author: Bas NieuwenhuizenDate: Tue Dec 27 00:57:36 2016 +0100 radv: Also skip DCC clear flushes for compute. (airlied: fixes DOOM hang with compute queue enabled) Reviewed-by: Dave Airlie Signed-off-by: Bas Nieuwenhuizen --- src/amd/vulkan/radv_cmd_buffer.c | 14 +- src/amd/vulkan/radv_image.c | 6 +++--- src/amd/vulkan/radv_meta_clear.c | 2 +- src/amd/vulkan/radv_private.h| 6 +++--- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index d29432b..fdb35a0 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -2398,8 +2398,8 @@ static void radv_handle_cmask_image_transition(struct radv_cmd_buffer *cmd_buffe radv_initialise_cmask(cmd_buffer, image, 0xu); else radv_initialise_cmask(cmd_buffer, image, 0xu); - } else if (radv_layout_has_cmask(image, src_layout, src_queue_mask) && - !radv_layout_has_cmask(image, dst_layout, dst_queue_mask)) { + } else if (radv_layout_can_fast_clear(image, src_layout, src_queue_mask) && + !radv_layout_can_fast_clear(image, dst_layout, dst_queue_mask)) { radv_fast_clear_flush_image_inplace(cmd_buffer, image); } } @@ -2425,13 +2425,15 @@ static void radv_handle_dcc_image_transition(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, VkImageLayout src_layout, VkImageLayout dst_layout, +unsigned src_queue_mask, +unsigned dst_queue_mask, VkImageSubresourceRange range, VkImageAspectFlags pending_clears) { if (src_layout == VK_IMAGE_LAYOUT_UNDEFINED) { radv_initialize_dcc(cmd_buffer, image, 0x20202020u); - } else if(src_layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL && - dst_layout != VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) { + } else if (radv_layout_can_fast_clear(image, src_layout, src_queue_mask) && + !radv_layout_can_fast_clear(image, dst_layout, dst_queue_mask)) { radv_fast_clear_flush_image_inplace(cmd_buffer, image); } } @@ -2477,7 +2479,9 @@ static void radv_handle_image_transition(struct radv_cmd_buffer *cmd_buffer, if (image->surface.dcc_size) radv_handle_dcc_image_transition(cmd_buffer, image, src_layout, -dst_layout, range, pending_clears); +dst_layout, src_queue_mask, +dst_queue_mask, range, +pending_clears); } void radv_CmdPipelineBarrier( diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 6e03f49..8af064b 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -893,9 +893,9 @@ bool radv_layout_can_expclear(const struct radv_image *image, layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); } -bool radv_layout_has_cmask(const struct radv_image *image, - VkImageLayout layout, - unsigned queue_mask) +bool radv_layout_can_fast_clear(const struct radv_image *image, + VkImageLayout layout, + unsigned queue_mask) { return (layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL || layout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) && diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c index b7263dd..cb2aa1a 100644 --- a/src/amd/vulkan/radv_meta_clear.c +++ b/src/amd/vulkan/radv_meta_clear.c @@ -805,7 +805,7 @@ emit_fast_color_clear(struct radv_cmd_buffer *cmd_buffer, if (!cmd_buffer->device->allow_fast_clears) return false; - if (!radv_layout_has_cmask(iview->image, image_layout, radv_image_queue_family_mask(iview->image, cmd_buffer->queue_family_index))) + if (!radv_layout_can_fast_clear(iview->image, image_layout, radv_image_queue_family_mask(iview->image, cmd_buffer->queue_family_index))) goto fail; if (vk_format_get_blocksizebits(iview->image->vk_format) > 64) goto fail; diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index e15556e..f76d38d 100644 ---
Mesa (master): radv: add some asserts for operations on general queue
Module: Mesa Branch: master Commit: d8423772cad8245c21d1a63ed4fabb8d9e20b4fa URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d8423772cad8245c21d1a63ed4fabb8d9e20b4fa Author: Dave AirlieDate: Tue Dec 27 03:26:11 2016 + radv: add some asserts for operations on general queue These might be useful in the future, or not. Signed-off-by: Dave Airlie --- src/amd/vulkan/radv_meta_decompress.c | 2 ++ src/amd/vulkan/radv_meta_fast_clear.c | 1 + 2 files changed, 3 insertions(+) diff --git a/src/amd/vulkan/radv_meta_decompress.c b/src/amd/vulkan/radv_meta_decompress.c index 47ef64d..4907475 100644 --- a/src/amd/vulkan/radv_meta_decompress.c +++ b/src/amd/vulkan/radv_meta_decompress.c @@ -450,6 +450,7 @@ void radv_decompress_depth_image_inplace(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, VkImageSubresourceRange *subresourceRange) { + assert(cmd_buffer->queue_family_index == RADV_QUEUE_GENERAL); radv_process_depth_image_inplace(cmd_buffer, image, subresourceRange, cmd_buffer->device->meta_state.depth_decomp.decompress_pipeline); } @@ -458,6 +459,7 @@ void radv_resummarize_depth_image_inplace(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image, VkImageSubresourceRange *subresourceRange) { + assert(cmd_buffer->queue_family_index == RADV_QUEUE_GENERAL); radv_process_depth_image_inplace(cmd_buffer, image, subresourceRange, cmd_buffer->device->meta_state.depth_decomp.resummarize_pipeline); } diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c index f79c634..950b438 100644 --- a/src/amd/vulkan/radv_meta_fast_clear.c +++ b/src/amd/vulkan/radv_meta_fast_clear.c @@ -419,6 +419,7 @@ radv_fast_clear_flush_image_inplace(struct radv_cmd_buffer *cmd_buffer, VkDevice device_h = radv_device_to_handle(cmd_buffer->device); VkCommandBuffer cmd_buffer_h = radv_cmd_buffer_to_handle(cmd_buffer); + assert(cmd_buffer->queue_family_index == RADV_QUEUE_GENERAL); radv_meta_save_pass(_pass_state, cmd_buffer); radv_meta_save_graphics_reset_vport_scissor(_state, cmd_buffer); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radv: handle queue present directly to winsys
Module: Mesa Branch: master Commit: 3fd306b4232656914267bca824b7dde4be0e2ffb URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3fd306b4232656914267bca824b7dde4be0e2ffb Author: Dave AirlieDate: Fri Dec 23 06:24:21 2016 + radv: handle queue present directly to winsys Don't call the QueueSubmit interface, just call direct to the winsys, so we can pass the wait semaphores. Noticed while debugging doom, doesn't fix anything. Reviewed-by: Bas Nieuwenhuizen Signed-off-by: Dave Airlie --- src/amd/vulkan/radv_wsi.c | 10 +- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c index 1f1ab1c..2eb8e45 100644 --- a/src/amd/vulkan/radv_wsi.c +++ b/src/amd/vulkan/radv_wsi.c @@ -362,7 +362,15 @@ VkResult radv_QueuePresentKHR( 1, >fences[0]); } - radv_QueueSubmit(_queue, 0, NULL, swapchain->fences[0]); + RADV_FROM_HANDLE(radv_fence, fence, swapchain->fences[0]); + struct radeon_winsys_fence *base_fence = fence->fence; + struct radeon_winsys_ctx *ctx = queue->device->hw_ctx; + queue->device->ws->cs_submit(ctx, queue->queue_idx, + >device->empty_cs[queue->queue_family_index], +1, +(struct radeon_winsys_sem **)pPresentInfo->pWaitSemaphores, +pPresentInfo->waitSemaphoreCount, NULL, 0, false, base_fence); + fence->submitted = true; result = swapchain->queue_present(swapchain, pPresentInfo->pImageIndices[i]); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel/blorp_blit: Fix max blit size for gen6
Module: Mesa Branch: master Commit: 097c9dc2d4abc57bac5195fa0bed327828a4a895 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=097c9dc2d4abc57bac5195fa0bed327828a4a895 Author: Jordan JustenDate: Fri Dec 23 18:41:15 2016 -0800 intel/blorp_blit: Fix max blit size for gen6 Fixes ES3-CTS.gtf.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_stencil_blit Signed-off-by: Jordan Justen Reviewed-by: Lionel Landwerlin Reviewed-by: Kenneth Graunke --- src/intel/blorp/blorp_blit.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c index 8abe3a8..1cbd940 100644 --- a/src/intel/blorp/blorp_blit.c +++ b/src/intel/blorp/blorp_blit.c @@ -1522,10 +1522,11 @@ static unsigned get_max_surface_size(const struct gen_device_info *devinfo, const struct blorp_params *params) { + const unsigned max = devinfo->gen >= 7 ? 16384 : 8192; if (split_blorp_blit_debug && can_shrink_surfaces(params)) - return 16384 >> 4; /* A smaller restriction when debug is enabled */ + return max >> 4; /* A smaller restriction when debug is enabled */ else - return 16384; + return max; } struct blt_axis { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit