summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Rudolph <[email protected]>2019-02-28 18:13:39 +0100
committerAxel Davy <[email protected]>2019-03-09 13:57:49 +0100
commit0d0847659385e298badd6ef6ca4d0a9e537ae288 (patch)
tree2949286e9ae902c34d9a62c185ecb92618002936
parentf7b9c09c7cd41dc91c5392e467b71216234e342e (diff)
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 <[email protected]> Reviewed-by: Axel Davy <[email protected]>
-rw-r--r--src/gallium/targets/d3dadapter9/drm.c28
1 files 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) {