[Mesa-dev] [PATCH 23/36] st/nine: Add new driconf options to control DISCARD behaviour
Axel Davy
axel.davy at ens.fr
Wed Dec 7 22:30:46 UTC 2016
See the patch for the new controls added.
Signed-off-by: Axel Davy <axel.davy at ens.fr>
---
src/gallium/state_trackers/nine/adapter9.h | 2 ++
src/gallium/state_trackers/nine/swapchain9.c | 4 ++--
src/gallium/targets/d3dadapter9/drm.c | 17 +++++++++++++++++
src/mesa/drivers/dri/common/xmlpool/t_options.h | 10 ++++++++++
4 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/src/gallium/state_trackers/nine/adapter9.h b/src/gallium/state_trackers/nine/adapter9.h
index aaf7435..4a71540 100644
--- a/src/gallium/state_trackers/nine/adapter9.h
+++ b/src/gallium/state_trackers/nine/adapter9.h
@@ -39,6 +39,8 @@ struct d3dadapter9_context
int throttling_value;
int vblank_mode;
BOOL thread_submit;
+ BOOL discard_delayed_release;
+ BOOL tearfree_discard;
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 79530f5..8a405f2 100644
--- a/src/gallium/state_trackers/nine/swapchain9.c
+++ b/src/gallium/state_trackers/nine/swapchain9.c
@@ -72,8 +72,8 @@ NineSwapChain9_ctor( struct NineSwapChain9 *This,
D3DPRESENT_PARAMETERS2 params2;
memset(¶ms2, 0, sizeof(D3DPRESENT_PARAMETERS2));
- params2.AllowDISCARDDelayedRelease = TRUE;
- params2.TearFreeDISCARD = FALSE;
+ params2.AllowDISCARDDelayedRelease = This->actx->discard_delayed_release;
+ params2.TearFreeDISCARD = This->actx->tearfree_discard;
ID3DPresent_SetPresentParameters2(pPresent, ¶ms2);
}
diff --git a/src/gallium/targets/d3dadapter9/drm.c b/src/gallium/targets/d3dadapter9/drm.c
index 767a17a..e0c2e26 100644
--- a/src/gallium/targets/d3dadapter9/drm.c
+++ b/src/gallium/targets/d3dadapter9/drm.c
@@ -56,6 +56,8 @@ 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_SECTION_END
DRI_CONF_END;
@@ -284,6 +286,21 @@ 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;
+ }
+
driDestroyOptionCache(&userInitOptions);
driDestroyOptionInfo(&defaultInitOptions);
diff --git a/src/mesa/drivers/dri/common/xmlpool/t_options.h b/src/mesa/drivers/dri/common/xmlpool/t_options.h
index 341c376..7b78105 100644
--- a/src/mesa/drivers/dri/common/xmlpool/t_options.h
+++ b/src/mesa/drivers/dri/common/xmlpool/t_options.h
@@ -376,3 +376,13 @@ DRI_CONF_OPT_END
DRI_CONF_OPT_BEGIN(override_vendorid, int, def) \
DRI_CONF_DESC(en,"Define the vendor_id to report. This allows faking another hardware vendor.") \
DRI_CONF_OPT_END
+
+#define DRI_CONF_NINE_ALLOWDISCARDDELAYEDRELEASE(def) \
+DRI_CONF_OPT_BEGIN_B(discard_delayed_release, def) \
+ DRI_CONF_DESC(en,gettext("Whether to allow the display server to release buffers with a delay when using d3d's presentation mode DISCARD. Default to true. Set to false if suffering from lag (thread_submit=true can also help in this situation).")) \
+DRI_CONF_OPT_END
+
+#define DRI_CONF_NINE_TEARFREEDISCARD(def) \
+DRI_CONF_OPT_BEGIN_B(tearfree_discard, def) \
+ DRI_CONF_DESC(en,gettext("Whether to make d3d's presentation mode DISCARD (games usually use that mode) Tear Free. If rendering above screen refresh, some frames will get skipped. false by default.")) \
+DRI_CONF_OPT_END
--
2.10.2
More information about the mesa-dev
mailing list