Hi Lucas 2017-02-09 10:26 GMT+01:00 Lucas Stach <l.st...@pengutronix.de>: > Am Mittwoch, den 08.02.2017, 20:47 +0100 schrieb Christian Gmeiner: >> Hi Lucas, >> >> 2017-02-08 12:36 GMT+01:00 Lucas Stach <l.st...@pengutronix.de>: >> > Am Mittwoch, den 08.02.2017, 12:10 +0100 schrieb Christian Gmeiner: >> >> Signed-off-by: Christian Gmeiner <christian.gmei...@gmail.com> >> >> --- >> >> src/gallium/drivers/etnaviv/etnaviv_compiler.h | 2 ++ >> >> src/gallium/drivers/etnaviv/etnaviv_debug.h | 1 + >> >> src/gallium/drivers/etnaviv/etnaviv_screen.c | 1 + >> >> src/gallium/drivers/etnaviv/etnaviv_shader.c | 44 >> >> +++++++++++++++++++++++++- >> >> 4 files changed, 47 insertions(+), 1 deletion(-) >> >> >> >> diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler.h >> >> b/src/gallium/drivers/etnaviv/etnaviv_compiler.h >> >> index 211ae1a..de3e20d 100644 >> >> --- a/src/gallium/drivers/etnaviv/etnaviv_compiler.h >> >> +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler.h >> >> @@ -56,6 +56,8 @@ struct etna_shader_io_file { >> >> >> >> /* shader object, for linking */ >> >> struct etna_shader { >> >> + uint32_t id; /* for debug */ >> > >> > Do you need this? It can certainly be removed from this patch, but I >> > don't know if you have other stuff building on top of this. >> > >> >> It gets used in dump_shader_info(..) which was added with this patch. > > My argument was that you could pass that value as an argument to > dump_shader_info(). I don't see why it needs to be stored inside the > etna_shader object. >
Okay.. I will add the id member in a later patch to etna_shader object. For the moment I will pass it as an argument to dump_shader_info(..). Will send a V2 of that series later the day. >> >> >> uint processor; /* TGSI_PROCESSOR_... */ >> >> uint32_t code_size; /* code size in uint32 words */ >> >> uint32_t *code; >> >> diff --git a/src/gallium/drivers/etnaviv/etnaviv_debug.h >> >> b/src/gallium/drivers/etnaviv/etnaviv_debug.h >> >> index cfda52b..f47dffe 100644 >> >> --- a/src/gallium/drivers/etnaviv/etnaviv_debug.h >> >> +++ b/src/gallium/drivers/etnaviv/etnaviv_debug.h >> >> @@ -51,6 +51,7 @@ >> >> #define ETNA_DBG_FLUSH_ALL 0x100000 /* Flush after every rendered >> >> primitive */ >> >> #define ETNA_DBG_ZERO 0x200000 /* Zero all resources after >> >> allocation */ >> >> #define ETNA_DBG_DRAW_STALL 0x400000 /* Stall FE/PE after every >> >> draw op */ >> >> +#define ETNA_DBG_SHADERDB 0x800000 /* dump program compile >> >> information */ >> >> >> >> extern int etna_mesa_debug; /* set in etna_screen.c from ETNA_DEBUG */ >> >> >> >> diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c >> >> b/src/gallium/drivers/etnaviv/etnaviv_screen.c >> >> index 8f2882f..6272f6f 100644 >> >> --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c >> >> +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c >> >> @@ -62,6 +62,7 @@ static const struct debug_named_value debug_options[] = >> >> { >> >> {"flush_all", ETNA_DBG_FLUSH_ALL, "Flush after every rendered >> >> primitive"}, >> >> {"zero", ETNA_DBG_ZERO, "Zero all resources after >> >> allocation"}, >> >> {"draw_stall", ETNA_DBG_DRAW_STALL, "Stall FE/PE after each >> >> rendered primitive"}, >> >> + {"shaderdb", ETNA_DBG_SHADERDB, "Enable shaderdb output"}, >> >> DEBUG_NAMED_VALUE_END >> >> }; >> >> >> >> diff --git a/src/gallium/drivers/etnaviv/etnaviv_shader.c >> >> b/src/gallium/drivers/etnaviv/etnaviv_shader.c >> >> index 8895311..87edf5b 100644 >> >> --- a/src/gallium/drivers/etnaviv/etnaviv_shader.c >> >> +++ b/src/gallium/drivers/etnaviv/etnaviv_shader.c >> >> @@ -223,6 +223,42 @@ etna_shader_update_vs_inputs(struct etna_context >> >> *ctx, >> >> return true; >> >> } >> >> >> >> +static inline const char * >> >> +etna_shader_stage(struct etna_shader *shader) >> >> +{ >> >> + switch (shader->processor) { >> >> + case PIPE_SHADER_VERTEX: return "VERT"; >> >> + case PIPE_SHADER_FRAGMENT: return "FRAG"; >> >> + case PIPE_SHADER_COMPUTE: return "CL"; >> >> + default: >> >> + unreachable("invalid type"); >> >> + return NULL; >> >> + } >> >> +} >> >> + >> >> +static void >> >> +dump_shader_info(struct etna_shader *shader, struct pipe_debug_callback >> >> *debug) >> >> +{ >> >> + if (!unlikely(etna_mesa_debug & ETNA_DBG_SHADERDB)) >> >> + return; >> >> + >> >> + pipe_debug_message(debug, SHADER_INFO, "\n" >> >> + "SHADER-DB: %s prog %d: %u instructions %u temps\n" >> >> + "SHADER-DB: %s prog %d: %u immediates %u consts\n" >> >> + "SHADER-DB: %s prog %d: %u loops\n", >> >> + etna_shader_stage(shader), >> >> + shader->id, >> >> + shader->code_size, >> >> + shader->num_temps, >> >> + etna_shader_stage(shader), >> >> + shader->id, >> >> + shader->uniforms.imm_count, >> >> + shader->uniforms.const_count, >> >> + etna_shader_stage(shader), >> >> + shader->id, >> >> + shader->num_loops); >> >> +} >> >> + >> >> bool >> >> etna_shader_update_vertex(struct etna_context *ctx) >> >> { >> >> @@ -235,8 +271,14 @@ etna_create_shader_state(struct pipe_context *pctx, >> >> const struct pipe_shader_state *pss) >> >> { >> >> struct etna_context *ctx = etna_context(pctx); >> >> + struct etna_shader *shader = etna_compile_shader(&ctx->specs, >> >> pss->tokens); >> >> + >> >> + static uint32_t id; >> > >> > A matter of personal taste, but I would prefer this static variable to >> > be outside of the function. Makes it easier to grok that it is external >> > state and stable across function calls. >> > >> >> In the long run (during the next months) I have planed to put that >> incremental counter >> to a better place. If its okay I will leave it where it is :) >> > As I said it's a matter of personal taste, so I certainly won't object. >> >> + shader->id = id++; >> >> + >> >> + dump_shader_info(shader, &ctx->debug); >> >> >> >> - return etna_compile_shader(&ctx->specs, pss->tokens); >> >> + return shader; >> >> } >> >> >> >> static void >> > greets -- Christian Gmeiner, MSc https://www.youtube.com/user/AloryOFFICIAL https://soundcloud.com/christian-gmeiner _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev