summaryrefslogtreecommitdiff
path: root/src/gallium/targets
diff options
context:
space:
mode:
authorAxel Davy <axel.davy@ens.fr>2014-11-17 16:58:29 +0100
committerEmil Velikov <emil.l.velikov@gmail.com>2014-11-18 02:02:54 +0000
commit7f565845a1f3ec871cccee88e2acf6be2e429797 (patch)
treee6aa710a658af3c40561d3a7bd495ef45a3f3b81 /src/gallium/targets
parent948e6c522827b64cfd9b02eb3ab34e7d1f145017 (diff)
nine: Implement threadpool
DRI_PRIME setups have different issues due the lack of dma-buf fences support in the drivers. For DRI3 DRI_PRIME, a race can appear, making tearings visible, or worse showing older content than expected. Until dma-buf fences are well supported (and by all drivers), an alternative is to send the buffers to the server only when rendering has finished. Since waiting the rendering has finished in the main thread has a performance impact, this patch uses an additional thread to offload the wait and the sending of the buffers to the server. Acked-by: Jose Fonseca <jfonseca@vmware.com> Reviewed-by: David Heidelberg <david@ixit.cz> Signed-off-by: Axel Davy <axel.davy@ens.fr>
Diffstat (limited to 'src/gallium/targets')
-rw-r--r--src/gallium/targets/d3dadapter9/drm.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/gallium/targets/d3dadapter9/drm.c b/src/gallium/targets/d3dadapter9/drm.c
index a58e16715c0..dd916f1ea73 100644
--- a/src/gallium/targets/d3dadapter9/drm.c
+++ b/src/gallium/targets/d3dadapter9/drm.c
@@ -59,6 +59,7 @@ DRI_CONF_BEGIN
DRI_CONF_SECTION_END
DRI_CONF_SECTION_NINE
DRI_CONF_NINE_THROTTLE(-2)
+ DRI_CONF_NINE_THREADSUBMIT("false")
DRI_CONF_SECTION_END
DRI_CONF_END;
@@ -244,7 +245,7 @@ drm_create_adapter( int fd,
const struct drm_conf_ret *dmabuf_ret = NULL;
driOptionCache defaultInitOptions;
driOptionCache userInitOptions;
- int throttling_value_user;
+ int throttling_value_user = -2;
#if !GALLIUM_STATIC_TARGETS
const char *paths[] = {
@@ -322,6 +323,19 @@ drm_create_adapter( int fd,
else
ctx->base.vblank_mode = 1;
+ if (driCheckOption(&userInitOptions, "thread_submit", DRI_BOOL)) {
+ ctx->base.thread_submit = driQueryOptionb(&userInitOptions, "thread_submit");
+ if (ctx->base.thread_submit && (throttling_value_user == -2 || throttling_value_user == 0)) {
+ ctx->base.throttling_value = 0;
+ } else if (ctx->base.thread_submit) {
+ DBG("You have set a non standard throttling value in combination with thread_submit."
+ "We advise to use a throttling value of -2/0");
+ }
+ if (ctx->base.thread_submit && !different_device)
+ DBG("You have set thread_submit but do not use a different device than the server."
+ "You should not expect any benefit.");
+ }
+
driDestroyOptionCache(&userInitOptions);
driDestroyOptionInfo(&defaultInitOptions);