Not from my side. But I can't commit the patch for you. Jason? Jacob Lifshay wrote on 26.02.2017 03:17: > Just to double check, is there anything else I need to do to have this > patch committed? > Jacob Lifshay > > On Feb 19, 2017 02:08, "Kai Wasserbäch" <k...@dev.carbon-project.org> wrote: > >> Jason Ekstrand wrote on 19.02.2017 06:01: >>> On Feb 18, 2017 12:37 PM, "Kai Wasserbäch" <k...@dev.carbon-project.org> >>> wrote: >>> >>> Hey Jacob, >>> sorry for not spotting this the first time, but I have an additional >>> comment. >>> Please see below. >>> >>> Jacob Lifshay wrote on 18.02.2017 18:48:> This commit improves the >> message >>> by >>> telling them that they could probably >>>> enable DRI3. More importantly, it includes a little heuristic to check >>>> to see if we're running on AMD or NVIDIA's proprietary X11 drivers and, >>>> if we are, doesn't emit the warning. This way, users with both a >> discrete >>>> card and Intel graphics don't get the warning when they're just running >>>> on the discrete card. >>>> >>>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99715 >>>> Co-authored-by: Jason Ekstrand <jason.ekstr...@intel.com> >>>> --- >>>> src/vulkan/wsi/wsi_common_x11.c | 47 ++++++++++++++++++++++++++++++ >>> ++--------- >>>> 1 file changed, 37 insertions(+), 10 deletions(-) >>>> >>>> diff --git a/src/vulkan/wsi/wsi_common_x11.c >> b/src/vulkan/wsi/wsi_common_ >>> x11.c >>>> index 64ba921..b3a017a 100644 >>>> --- a/src/vulkan/wsi/wsi_common_x11.c >>>> +++ b/src/vulkan/wsi/wsi_common_x11.c >>>> @@ -49,6 +49,7 @@ >>>> struct wsi_x11_connection { >>>> bool has_dri3; >>>> bool has_present; >>>> + bool is_proprietary_x11; >>>> }; >>>> >>>> struct wsi_x11 { >>>> @@ -63,8 +64,8 @@ static struct wsi_x11_connection * >>>> wsi_x11_connection_create(const VkAllocationCallbacks *alloc, >>>> xcb_connection_t *conn) >>>> { >>>> - xcb_query_extension_cookie_t dri3_cookie, pres_cookie; >>>> - xcb_query_extension_reply_t *dri3_reply, *pres_reply; >>>> + xcb_query_extension_cookie_t dri3_cookie, pres_cookie, amd_cookie, >>> nv_cookie; >>>> + xcb_query_extension_reply_t *dri3_reply, *pres_reply, *amd_reply, >>> *nv_reply; >>>> >>>> struct wsi_x11_connection *wsi_conn = >>>> vk_alloc(alloc, sizeof(*wsi_conn), 8, >>>> @@ -75,20 +76,39 @@ wsi_x11_connection_create(const >> VkAllocationCallbacks >>> *alloc, >>>> dri3_cookie = xcb_query_extension(conn, 4, "DRI3"); >>>> pres_cookie = xcb_query_extension(conn, 7, "PRESENT"); >>>> >>>> + /* We try to be nice to users and emit a warning if they try to use >> a >>>> + * Vulkan application on a system without DRI3 enabled. However, >>> this ends >>>> + * up spewing the warning when a user has, for example, both Intel >>>> + * integrated graphics and a discrete card with proprietary driers >>> and are >>>> + * running on the discrete card with the proprietary DDX. In this >>> case, we >>>> + * really don't want to print the warning because it just confuses >>> users. >>>> + * As a heuristic to detect this case, we check for a couple of >>> proprietary >>>> + * X11 extensions. >>>> + */ >>>> + amd_cookie = xcb_query_extension(conn, 11, "ATIFGLRXDRI"); >>>> + nv_cookie = xcb_query_extension(conn, 10, "NV-CONTROL"); >>>> + >>>> dri3_reply = xcb_query_extension_reply(conn, dri3_cookie, NULL); >>>> pres_reply = xcb_query_extension_reply(conn, pres_cookie, NULL); >>>> - if (dri3_reply == NULL || pres_reply == NULL) { >>>> + amd_reply = xcb_query_extension_reply(conn, amd_cookie, NULL); >>>> + nv_reply = xcb_query_extension_reply(conn, nv_cookie, NULL); >>>> + if (!dri3_reply || !pres_reply || !amd_reply || !nv_reply) { >>> >>> I don't feel wsi_x11_connection_create should fail if there's no >> amd_reply >>> or >>> nv_reply. That should just lead to unconditionally warning, in case >> there's >>> no >>> DRI3 support. >>> >>> >>> Of there is no reply then we either lost our connection to the X server >> or >>> ran out of memory. Either of those seem like a valid excuse to fail. >> The >>> chances of successfully connecting to X to create a swapchain at that >> point >>> is pretty close to zero. >> >> Fair enough. >> >>> With that fixed, this patch is >>> Reviewed-by: Kai Wasserbäch <k...@dev.carbon-project.org> >>> >>> Cheers, >>> Kai >>> >>>> free(dri3_reply); >>>> free(pres_reply); >>>> + free(amd_reply); >>>> + free(nv_reply); >>>> vk_free(alloc, wsi_conn); >>>> return NULL; >>>> } >>>> >>>> wsi_conn->has_dri3 = dri3_reply->present != 0; >>>> wsi_conn->has_present = pres_reply->present != 0; >>>> + wsi_conn->is_proprietary_x11 = amd_reply->present || >>> nv_reply->present; >>>> >>>> free(dri3_reply); >>>> free(pres_reply); >>>> + free(amd_reply); >>>> + free(nv_reply); >>>> >>>> return wsi_conn; >>>> } >>>> @@ -100,6 +120,18 @@ wsi_x11_connection_destroy(const >>> VkAllocationCallbacks *alloc, >>>> vk_free(alloc, conn); >>>> } >>>> >>>> +static bool >>>> +wsi_x11_check_for_dri3(struct wsi_x11_connection *wsi_conn) >>>> +{ >>>> + if (wsi_conn->has_dri3) >>>> + return true; >>>> + if (!wsi_conn->is_proprietary_x11) { >>>> + fprintf(stderr, "vulkan: No DRI3 support detected - required for >>> presentation\n"); >>>> + "Note: you can probably enable DRI3 in your Xorg >>> config\n"); >>>> + } >>>> + return false; >>>> +} >>>> + >>>> static struct wsi_x11_connection * >>>> wsi_x11_get_connection(struct wsi_device *wsi_dev, >>>> const VkAllocationCallbacks *alloc, >>>> @@ -264,11 +296,8 @@ VkBool32 wsi_get_physical_device_xcb_ >>> presentation_support( >>>> if (!wsi_conn) >>>> return false; >>>> >>>> - if (!wsi_conn->has_dri3) { >>>> - fprintf(stderr, "vulkan: No DRI3 support detected - required for >>> presentation\n"); >>>> - fprintf(stderr, "Note: Buggy applications may crash, if they do >>> please report to vendor\n"); >>>> + if (!wsi_x11_check_for_dri3(wsi_conn)) >>>> return false; >>>> - } >>>> >>>> unsigned visual_depth; >>>> if (!connection_get_visualtype(connection, visual_id, >> &visual_depth)) >>>> @@ -313,9 +342,7 @@ x11_surface_get_support(VkIcdSurfaceBase >> *icd_surface, >>>> if (!wsi_conn) >>>> return VK_ERROR_OUT_OF_HOST_MEMORY; >>>> >>>> - if (!wsi_conn->has_dri3) { >>>> - fprintf(stderr, "vulkan: No DRI3 support detected - required for >>> presentation\n"); >>>> - fprintf(stderr, "Note: Buggy applications may crash, if they do >>> please report to vendor\n"); >>>> + if (!wsi_x11_check_for_dri3(wsi_conn)) { >>>> *pSupported = false; >>>> return VK_SUCCESS; >>>> }
signature.asc
Description: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev