Reviewed-by: Timothy Arceri <[email protected]>


On 02/06/17 04:09, Marek Olšák wrote:
From: Marek Olšák <[email protected]>

This fixes a performance issue with the shader cache that delayed Gallium
shader create calls until draw calls.

I'd like this in stable, but it's not a showstopper.

Cc: 17.1 <[email protected]>
---
  src/mesa/state_tracker/st_shader_cache.c | 7 ++++++-
  1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_shader_cache.c 
b/src/mesa/state_tracker/st_shader_cache.c
index 31c3430..305435f 100644
--- a/src/mesa/state_tracker/st_shader_cache.c
+++ b/src/mesa/state_tracker/st_shader_cache.c
@@ -15,21 +15,21 @@
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
   * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
   * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
   * DEALINGS IN THE SOFTWARE.
   */
#include <stdio.h>
-
+#include "st_debug.h"
  #include "st_program.h"
  #include "st_shader_cache.h"
  #include "compiler/glsl/program.h"
  #include "pipe/p_shader_tokens.h"
  #include "program/ir_to_mesa.h"
  #include "util/u_memory.h"
static void
  write_stream_out_to_cache(struct blob *blob,
                            struct pipe_shader_state *tgsi)
@@ -360,20 +360,25 @@ st_load_tgsi_from_disk_cache(struct gl_context *ctx,
           if (ctx->_Shader->Flags & GLSL_CACHE_INFO) {
              _mesa_sha1_format(sha1_buf, sha1);
              fprintf(stderr, "%s tgsi_tokens retrieved from cache: %s\n",
                      _mesa_shader_stage_to_string(i), sha1_buf);
           }
st_set_prog_affected_state_flags(glprog);
           _mesa_associate_uniform_storage(ctx, prog, glprog->Parameters,
                                           false);
+ /* Create Gallium shaders now instead of on demand. */
+         if (ST_DEBUG & DEBUG_PRECOMPILE ||
+             st->shader_has_one_variant[glprog->info.stage])
+            st_precompile_shader_variant(st, glprog);
+
           free(buffer);
        } else {
           /* Failed to find a matching cached shader so fallback to recompile.
            */
           if (ctx->_Shader->Flags & GLSL_CACHE_INFO) {
              fprintf(stderr, "TGSI cache item not found.\n");
           }
goto fallback_recompile;
        }

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to