[Mesa-dev] [PATCH v3 8/9] nine: Add drirc options (v2)

David Heidelberg david at ixit.cz
Sun Nov 2 10:33:37 PST 2014


Implements vblank_mode and throttling, which  allows us change default ratio
between framerate and input lag.

Signed-off-by: David Heidelberg <david at ixit.cz>
Signed-off-by: Axel Davy <axel.davy at ens.fr>
---
  src/gallium/state_trackers/nine/adapter9.h      |  1 +
  src/gallium/state_trackers/nine/swapchain9.c    |  5 ++++
  src/gallium/targets/d3dadapter9/drm.c           | 35 
+++++++++++++++++++++++++
  src/mesa/drivers/dri/common/xmlpool/t_options.h | 13 +++++++++
  4 files changed, 54 insertions(+)

diff --git a/src/gallium/state_trackers/nine/adapter9.h 
b/src/gallium/state_trackers/nine/adapter9.h
index ad04e4c..3c429d0 100644
--- a/src/gallium/state_trackers/nine/adapter9.h
+++ b/src/gallium/state_trackers/nine/adapter9.h
@@ -37,6 +37,7 @@ struct d3dadapter9_context
      BOOL linear_framebuffer;
      BOOL throttling;
      int throttling_value;
+    int vblank_mode;
       void (*destroy)( struct d3dadapter9_context *ctx );
  };
diff --git a/src/gallium/state_trackers/nine/swapchain9.c 
b/src/gallium/state_trackers/nine/swapchain9.c
index 69b19e1..74ab01d 100644
--- a/src/gallium/state_trackers/nine/swapchain9.c
+++ b/src/gallium/state_trackers/nine/swapchain9.c
@@ -166,6 +166,11 @@ NineSwapChain9_Resize( struct NineSwapChain9 *This,
      if (This->desired_fences > DRI_SWAP_FENCES_MAX)
          This->desired_fences = DRI_SWAP_FENCES_MAX;
  +    if (This->actx->vblank_mode == 0)
+        pParams->PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
+    else if (This->actx->vblank_mode == 3)
+        pParams->PresentationInterval = D3DPRESENT_INTERVAL_ONE;
+
      if (mode && This->mode) {
          *(This->mode) = *mode;
      } else if (mode) {
diff --git a/src/gallium/targets/d3dadapter9/drm.c 
b/src/gallium/targets/d3dadapter9/drm.c
index 09b8e82..e9b1ecc 100644
--- a/src/gallium/targets/d3dadapter9/drm.c
+++ b/src/gallium/targets/d3dadapter9/drm.c
@@ -36,6 +36,9 @@
  #include "d3dadapter/d3dadapter9.h"
  #include "d3dadapter/drm.h"
  +#include "xmlconfig.h"
+#include "xmlpool.h"
+
  #include <libdrm/drm.h>
  #include <sys/ioctl.h>
  #include <fcntl.h>
@@ -49,6 +52,16 @@
           (DWORD)((lo) & 0xFFFF) \
      ))
  +const char __driConfigOptionsNine[] =
+DRI_CONF_BEGIN
+    DRI_CONF_SECTION_PERFORMANCE
+         DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_1)
+    DRI_CONF_SECTION_END
+    DRI_CONF_SECTION_NINE
+        DRI_CONF_NINE_THROTTLE(-2)
+    DRI_CONF_SECTION_END
+DRI_CONF_END;
+
  /* Regarding os versions, we should not define our own as that would 
simply be
   * weird. Defaulting to Win2k/XP seems sane considering the origin of 
D3D9. The
   * driver also defaults to being a generic D3D9 driver, which of 
course only
@@ -229,6 +242,9 @@ drm_create_adapter( int fd,
      int i, different_device;
      const struct drm_conf_ret *throttle_ret = NULL;
      const struct drm_conf_ret *dmabuf_ret = NULL;
+    driOptionCache defaultInitOptions;
+    driOptionCache userInitOptions;
+    int throttling_value_user;
   #if !GALLIUM_STATIC_TARGETS
      const char *paths[] = {
@@ -289,6 +305,25 @@ drm_create_adapter( int fd,
      } else
          ctx->base.throttling = FALSE;
  +    driParseOptionInfo(&defaultInitOptions, __driConfigOptionsNine);
+    driParseConfigFiles(&userInitOptions, &defaultInitOptions, 0, "nine");
+    if (driCheckOption(&userInitOptions, "throttle_value", DRI_INT)) {
+        throttling_value_user = driQueryOptioni(&userInitOptions, 
"throttle_value");
+        if (throttling_value_user == -1)
+            ctx->base.throttling = FALSE;
+        else if (throttling_value_user >= 0) {
+            ctx->base.throttling = TRUE;
+            ctx->base.throttling_value = throttling_value_user;
+        }
+    }
+
+    if (driCheckOption(&userInitOptions, "vblank_mode", DRI_ENUM))
+        ctx->base.vblank_mode = driQueryOptioni(&userInitOptions, 
"vblank_mode");
+    else
+        ctx->base.vblank_mode = 1;
+
+    driDestroyOptionCache(&userInitOptions);
+    driDestroyOptionInfo(&defaultInitOptions);
   #if GALLIUM_STATIC_TARGETS
      ctx->base.ref = ninesw_create_screen(ctx->base.hal);
diff --git a/src/mesa/drivers/dri/common/xmlpool/t_options.h 
b/src/mesa/drivers/dri/common/xmlpool/t_options.h
index b73a662..e4f6937 100644
--- a/src/mesa/drivers/dri/common/xmlpool/t_options.h
+++ b/src/mesa/drivers/dri/common/xmlpool/t_options.h
@@ -340,3 +340,16 @@ DRI_CONF_SECTION_BEGIN \
  DRI_CONF_OPT_BEGIN(device_id, string, def) \
          DRI_CONF_DESC(en,gettext("Define the graphic device to use if 
possible")) \
  DRI_CONF_OPT_END
+
+/**
+ * \brief Gallium-Nine specific configuration options
+ */
+
+#define DRI_CONF_SECTION_NINE \
+DRI_CONF_SECTION_BEGIN \
+        DRI_CONF_DESC(en,gettext("Gallium Nine"))
+
+#define DRI_CONF_NINE_THROTTLE(def) \
+DRI_CONF_OPT_BEGIN(throttle_value, int, def) \
+        DRI_CONF_DESC(en,gettext("Define the throttling value. -1 for 
no throttling, -2 for default (usually 2), 0 for glfinish behaviour")) \
+DRI_CONF_OPT_END
-- 
2.1.3




More information about the mesa-dev mailing list