From 0d0847659385e298badd6ef6ca4d0a9e537ae288 Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Thu, 28 Feb 2019 18:13:39 +0100 Subject: [PATCH] d3dadapter9: Support software renderer on any DRI device If D3D_ALWAYS_SOFTWARE is set for debugging purposes, run on any DRI enabled platform. Instead of probing for a compatible gallium driver (which might fail if there's none) always use the KMS DRI software renderer. Allows to run nine on i915 when D3D_ALWAYS_SOFTWARE=1. Signed-off-by: Patrick Rudolph Reviewed-by: Axel Davy --- src/gallium/targets/d3dadapter9/drm.c | 28 +++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/gallium/targets/d3dadapter9/drm.c b/src/gallium/targets/d3dadapter9/drm.c index 1d01d4a067c..28dbd2ef9db 100644 --- a/src/gallium/targets/d3dadapter9/drm.c +++ b/src/gallium/targets/d3dadapter9/drm.c @@ -205,6 +205,7 @@ drm_create_adapter( int fd, struct d3dadapter9drm_context *ctx = CALLOC_STRUCT(d3dadapter9drm_context); HRESULT hr; bool different_device; + bool software_device; const struct drm_conf_ret *throttle_ret = NULL; const struct drm_conf_ret *dmabuf_ret = NULL; driOptionCache defaultInitOptions; @@ -222,7 +223,11 @@ drm_create_adapter( int fd, ctx->fd = fd; ctx->base.linear_framebuffer = different_device; - if (!pipe_loader_drm_probe_fd(&ctx->dev, fd)) { + const char *force_sw = getenv("D3D_ALWAYS_SOFTWARE"); + software_device = force_sw && !strcmp(force_sw, "1"); + + if ((software_device && !pipe_loader_sw_probe_kms(&ctx->dev, fd)) || + (!software_device && !pipe_loader_drm_probe_fd(&ctx->dev, fd))) { ERR("Failed to probe drm fd %d.\n", fd); FREE(ctx); close(fd); @@ -236,13 +241,20 @@ drm_create_adapter( int fd, return D3DERR_DRIVERINTERNALERROR; } - dmabuf_ret = pipe_loader_configuration(ctx->dev, DRM_CONF_SHARE_FD); - throttle_ret = pipe_loader_configuration(ctx->dev, DRM_CONF_THROTTLE); - if (!dmabuf_ret || !dmabuf_ret->val.val_bool) { - ERR("The driver is not capable of dma-buf sharing." - "Abandon to load nine state tracker\n"); - drm_destroy(&ctx->base); - return D3DERR_DRIVERINTERNALERROR; + if (!software_device) { + /* + * The software renderer isn't a DRM device and doesn't support + * pipe_loader_configuration. + * The KMS winsys supports SHARE_FD, so skip this check. + */ + dmabuf_ret = pipe_loader_configuration(ctx->dev, DRM_CONF_SHARE_FD); + throttle_ret = pipe_loader_configuration(ctx->dev, DRM_CONF_THROTTLE); + if (!dmabuf_ret || !dmabuf_ret->val.val_bool) { + ERR("The driver is not capable of dma-buf sharing." + "Abandon to load nine state tracker\n"); + drm_destroy(&ctx->base); + return D3DERR_DRIVERINTERNALERROR; + } } if (throttle_ret && throttle_ret->val.val_int != -1) { -- 2.30.2