diff options
author | Axel Davy <[email protected]> | 2014-11-17 16:58:29 +0100 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2014-11-18 02:02:54 +0000 |
commit | 7f565845a1f3ec871cccee88e2acf6be2e429797 (patch) | |
tree | e6aa710a658af3c40561d3a7bd495ef45a3f3b81 /src/gallium/targets | |
parent | 948e6c522827b64cfd9b02eb3ab34e7d1f145017 (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 <[email protected]>
Reviewed-by: David Heidelberg <[email protected]>
Signed-off-by: Axel Davy <[email protected]>
Diffstat (limited to 'src/gallium/targets')
-rw-r--r-- | src/gallium/targets/d3dadapter9/drm.c | 16 |
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); |