<div dir="auto"><div><br><div class="gmail_extra"><br><div class="gmail_quote">On May 11, 2017 5:55 AM, "Dieter Nützel" <<a href="mailto:Dieter@nuetzel-hh.de">Dieter@nuetzel-hh.de</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">For the series:<br>
<br>
Tested-by: Dieter Nützel <<a href="mailto:Dieter@nuetzel-hh.de" target="_blank">Dieter@nuetzel-hh.de</a>><br>
<br>
on radeonsi / RX580, 8 GB<br>
<br>
Unigine_Heaven-4.0<br>
Unigine_Valley-1.0<br>
Unigine_Superposition-1.0<br>
<br>
running wine-2.7_gallium_nine+staging<br></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">FYI, it's disabled with nine.</div><div dir="auto"><br></div><div dir="auto">Marek</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Steam: PES2015 + TS2017<br>
LS2015 + LS2017 (!!! ;-)<br>
<br>
Except: currently _only_ Linux 4.11<br>
(have to compile 4.12-rcx or Alex's tree next night)<font color="#888888"><br>
<br>
Dieter</font><div class="elided-text"><br>
<br>
Am 11.05.2017 00:45, schrieb Marek Olšák:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
From: Marek Olšák <<a href="mailto:marek.olsak@amd.com" target="_blank">marek.olsak@amd.com</a>><br>
<br>
---<br>
 src/gallium/drivers/radeonsi/<wbr>si_pipe.c | 37 ++++++++++++++++++++++++++++++<wbr>+---<br>
 1 file changed, 34 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/src/gallium/drivers/radeonsi<wbr>/si_pipe.c<br>
b/src/gallium/drivers/radeonsi<wbr>/si_pipe.c<br>
index 53738a5..c7ca928 100644<br>
--- a/src/gallium/drivers/radeonsi<wbr>/si_pipe.c<br>
+++ b/src/gallium/drivers/radeonsi<wbr>/si_pipe.c<br>
@@ -131,21 +131,21 @@ si_create_llvm_target_machine(<wbr>struct si_screen *sscreen)<br>
                                       r600_get_llvm_processor_name(<wbr>sscreen->b.family),<br>
                                       sscreen->b.debug_flags & DBG_SI_SCHED ?<br>
                                               SI_LLVM_DEFAULT_FEATURES ",+si-scheduler" :<br>
                                               SI_LLVM_DEFAULT_FEATURES,<br>
                                       LLVMCodeGenLevelDefault,<br>
                                       LLVMRelocDefault,<br>
                                       LLVMCodeModelDefault);<br>
 }<br>
<br>
 static struct pipe_context *si_create_context(struct pipe_screen *screen,<br>
-                                              void *priv, unsigned flags)<br>
+                                              unsigned flags)<br>
 {<br>
        struct si_context *sctx = CALLOC_STRUCT(si_context);<br>
        struct si_screen* sscreen = (struct si_screen *)screen;<br>
        struct radeon_winsys *ws = sscreen-><a href="http://b.ws" rel="noreferrer" target="_blank">b.ws</a>;<br>
        int shader, i;<br>
<br>
        if (!sctx)<br>
                return NULL;<br>
<br>
        if (sscreen->b.debug_flags & DBG_CHECK_VM)<br>
@@ -313,20 +313,51 @@ static struct pipe_context<br>
*si_create_context(struct pipe_screen *screen,<br>
<br>
        sctx->tm = si_create_llvm_target_machine(<wbr>sscreen);<br>
<br>
        return &sctx->b.b;<br>
 fail:<br>
        fprintf(stderr, "radeonsi: Failed to create a context.\n");<br>
        si_destroy_context(&sctx->b.b)<wbr>;<br>
        return NULL;<br>
 }<br>
<br>
+static struct pipe_context *si_pipe_create_context(struct pipe_screen *screen,<br>
+                                                  void *priv, unsigned flags)<br>
+{<br>
+       struct si_screen *sscreen = (struct si_screen *)screen;<br>
+       struct pipe_context *ctx = si_create_context(screen, flags);<br>
+<br>
+       if (!(flags & PIPE_CONTEXT_PREFER_THREADED))<br>
+               return ctx;<br>
+<br>
+       /* Clover (compute-only) is unsupported.<br>
+        *<br>
+        * Since the threaded context creates shader states from the non-driver<br>
+        * thread, asynchronous compilation is required for create_{shader}_-<br>
+        * state not to use pipe_context. Debug contexts (ddebug) disable<br>
+        * asynchronous compilation, so don't use the threaded context with<br>
+        * those.<br>
+        */<br>
+       if (flags & (PIPE_CONTEXT_COMPUTE_ONLY | PIPE_CONTEXT_DEBUG))<br>
+               return ctx;<br>
+<br>
+       /* When shaders are logged to stderr, asynchronous compilation is<br>
+        * disabled too. */<br>
+       if (sscreen->b.debug_flags & (DBG_VS | DBG_TCS | DBG_TES | DBG_GS |<br>
+                                     DBG_PS | DBG_CS))<br>
+               return ctx;<br>
+<br>
+       return threaded_context_create(ctx, &sscreen->b.pool_transfers,<br>
+                                      r600_replace_buffer_storage,<br>
+                                      &((struct si_context*)ctx)-><a href="http://b.tc" rel="noreferrer" target="_blank">b.tc</a>);<br>
+}<br>
+<br>
 /*<br>
  * pipe_screen<br>
  */<br>
 static bool si_have_tgsi_compute(struct si_screen *sscreen)<br>
 {<br>
        /* Old kernels disallowed some register writes for SI<br>
         * that are used for indirect dispatches. */<br>
        return (sscreen->b.chip_class >= CIK ||<br>
                sscreen->b.info.drm_major == 3 ||<br>
                (sscreen->b.info.drm_major == 2 &&<br>
@@ -823,21 +854,21 @@ static void si_test_vmfault(struct si_screen *sscreen)<br>
 struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)<br>
 {<br>
        struct si_screen *sscreen = CALLOC_STRUCT(si_screen);<br>
        unsigned num_cpus, num_compiler_threads, i;<br>
<br>
        if (!sscreen) {<br>
                return NULL;<br>
        }<br>
<br>
        /* Set functions first. */<br>
-       sscreen->b.b.context_create = si_create_context;<br>
+       sscreen->b.b.context_create = si_pipe_create_context;<br>
        sscreen->b.b.destroy = si_destroy_screen;<br>
        sscreen->b.b.get_param = si_get_param;<br>
        sscreen->b.b.get_shader_param = si_get_shader_param;<br>
        sscreen->b.b.resource_create = r600_resource_create_common;<br>
<br>
        si_init_screen_state_functions<wbr>(sscreen);<br>
<br>
        if (!r600_common_screen_init(&ssc<wbr>reen->b, ws) ||<br>
            !si_init_gs_info(sscreen) ||<br>
            !si_init_shader_cache(sscreen)<wbr>) {<br>
@@ -912,21 +943,21 @@ struct pipe_screen<br>
*radeonsi_screen_create(struct radeon_winsys *ws)<br>
                                            SI_CONTEXT_INV_GLOBAL_L2;<br>
        sscreen->b.barrier_flags.compu<wbr>te_to_L2 = SI_CONTEXT_CS_PARTIAL_FLUSH;<br>
<br>
        if (debug_get_bool_option("RADEON<wbr>_DUMP_SHADERS", false))<br>
                sscreen->b.debug_flags |= DBG_FS | DBG_VS | DBG_GS | DBG_PS | DBG_CS;<br>
<br>
        for (i = 0; i < num_compiler_threads; i++)<br>
                sscreen->tm[i] = si_create_llvm_target_machine(<wbr>sscreen);<br>
<br>
        /* Create the auxiliary context. This must be done last. */<br>
-       sscreen->b.aux_context = sscreen->b.b.context_create(&s<wbr>screen->b.b, NULL, 0);<br>
+       sscreen->b.aux_context = si_create_context(&sscreen->b.<wbr>b, 0);<br>
<br>
        if (sscreen->b.debug_flags & DBG_TEST_DMA)<br>
                r600_test_dma(&sscreen->b);<br>
<br>
        if (sscreen->b.debug_flags & (DBG_TEST_VMFAULT_CP |<br>
                                      DBG_TEST_VMFAULT_SDMA |<br>
                                      DBG_TEST_VMFAULT_SHADER))<br>
                si_test_vmfault(sscreen);<br>
<br>
        return &sscreen->b.b;<br>
</blockquote>
</div></blockquote></div><br></div></div></div>