[Mesa-dev] [PATCH] st/mesa: don't load cached TGSI shaders on demand
Timothy Arceri
tarceri at itsqueeze.com
Mon Jun 5 13:12:38 UTC 2017
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
On 02/06/17 04:09, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> 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 <mesa-stable at lists.freedesktop.org>
> ---
> 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;
> }
>
More information about the mesa-dev
mailing list