xmlconfig: move into src/util
[mesa.git] / src / gallium / targets / d3dadapter9 / drm.c
index 767a17a55da5344e1fb048f572ff3b6d83900db5..c0ed97a6fb5aa023471f3fe53915cfb845675633 100644 (file)
@@ -37,8 +37,8 @@
 #include "d3dadapter/d3dadapter9.h"
 #include "d3dadapter/drm.h"
 
-#include "xmlconfig.h"
-#include "xmlpool.h"
+#include "util/xmlconfig.h"
+#include "util/xmlpool.h"
 
 #include <drm.h>
 #include <sys/ioctl.h>
@@ -56,6 +56,9 @@ DRI_CONF_BEGIN
         DRI_CONF_NINE_OVERRIDEVENDOR(-1)
         DRI_CONF_NINE_THROTTLE(-2)
         DRI_CONF_NINE_THREADSUBMIT("false")
+        DRI_CONF_NINE_ALLOWDISCARDDELAYEDRELEASE("true")
+        DRI_CONF_NINE_TEARFREEDISCARD("false")
+        DRI_CONF_NINE_CSMT(-1)
     DRI_CONF_SECTION_END
 DRI_CONF_END;
 
@@ -201,7 +204,7 @@ drm_create_adapter( int fd,
 {
     struct d3dadapter9drm_context *ctx = CALLOC_STRUCT(d3dadapter9drm_context);
     HRESULT hr;
-    int different_device;
+    bool different_device;
     const struct drm_conf_ret *throttle_ret = NULL;
     const struct drm_conf_ret *dmabuf_ret = NULL;
     driOptionCache defaultInitOptions;
@@ -217,7 +220,7 @@ drm_create_adapter( int fd,
      * takes ownership of it. */
     fd = loader_get_user_preferred_fd(fd, &different_device);
     ctx->fd = fd;
-    ctx->base.linear_framebuffer = !!different_device;
+    ctx->base.linear_framebuffer = different_device;
 
     if (!pipe_loader_drm_probe_fd(&ctx->dev, fd)) {
         ERR("Failed to probe drm fd %d.\n", fd);
@@ -226,7 +229,7 @@ drm_create_adapter( int fd,
         return D3DERR_DRIVERINTERNALERROR;
     }
 
-    ctx->base.hal = pipe_loader_create_screen(ctx->dev);
+    ctx->base.hal = pipe_loader_create_screen(ctx->dev, 0);
     if (!ctx->base.hal) {
         ERR("Unable to load requested driver.\n");
         drm_destroy(&ctx->base);
@@ -268,7 +271,7 @@ drm_create_adapter( int fd,
     if (driCheckOption(&userInitOptions, "thread_submit", DRI_BOOL))
         ctx->base.thread_submit = driQueryOptionb(&userInitOptions, "thread_submit");
     else
-        ctx->base.thread_submit = !!different_device;
+        ctx->base.thread_submit = different_device;
 
     if (ctx->base.thread_submit && (throttling_value_user == -2 || throttling_value_user == 0)) {
         ctx->base.throttling_value = 0;
@@ -284,12 +287,32 @@ drm_create_adapter( int fd,
         override_vendorid = driQueryOptioni(&userInitOptions, "override_vendorid");
     }
 
+    if (driCheckOption(&userInitOptions, "discard_delayed_release", DRI_BOOL))
+        ctx->base.discard_delayed_release = driQueryOptionb(&userInitOptions, "discard_delayed_release");
+    else
+        ctx->base.discard_delayed_release = TRUE;
+
+    if (driCheckOption(&userInitOptions, "tearfree_discard", DRI_BOOL))
+        ctx->base.tearfree_discard = driQueryOptionb(&userInitOptions, "tearfree_discard");
+    else
+        ctx->base.tearfree_discard = FALSE;
+
+    if (ctx->base.tearfree_discard && !ctx->base.discard_delayed_release) {
+        ERR("tearfree_discard requires discard_delayed_release\n");
+        ctx->base.tearfree_discard = FALSE;
+    }
+
+    if (driCheckOption(&userInitOptions, "csmt_force", DRI_INT))
+        ctx->base.csmt_force = driQueryOptioni(&userInitOptions, "csmt_force");
+    else
+        ctx->base.csmt_force = -1;
+
     driDestroyOptionCache(&userInitOptions);
     driDestroyOptionInfo(&defaultInitOptions);
 
     /* wrap it to create a software screen that can share resources */
     if (pipe_loader_sw_probe_wrapped(&ctx->swdev, ctx->base.hal))
-        ctx->base.ref = pipe_loader_create_screen(ctx->swdev);
+        ctx->base.ref = pipe_loader_create_screen(ctx->swdev, 0);
 
     if (!ctx->base.ref) {
         ERR("Couldn't wrap drm screen to swrast screen. Software devices "