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 <siro@das-labor.org> Reviewed-by: Axel Davy <davyaxel0@gmail.com>
This commit is contained in:
committed by
Axel Davy
parent
f7b9c09c7c
commit
0d08476593
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user