summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/freedreno/a3xx/fd3_emit.h4
-rw-r--r--src/gallium/drivers/freedreno/a3xx/fd3_program.c5
-rw-r--r--src/gallium/drivers/freedreno/a4xx/fd4_emit.h4
-rw-r--r--src/gallium/drivers/freedreno/a4xx/fd4_program.c5
-rw-r--r--src/gallium/drivers/freedreno/ir3/ir3_shader.c53
-rw-r--r--src/gallium/drivers/freedreno/ir3/ir3_shader.h5
6 files changed, 43 insertions, 33 deletions
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_emit.h b/src/gallium/drivers/freedreno/a3xx/fd3_emit.h
index 42dbfca9b97..17e1fef882f 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_emit.h
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_emit.h
@@ -67,7 +67,7 @@ fd3_emit_get_vp(struct fd3_emit *emit)
{
if (!emit->vp) {
struct fd3_shader_stateobj *so = emit->prog->vp;
- emit->vp = ir3_shader_variant(so->shader, emit->key);
+ emit->vp = ir3_shader_variant(so->shader, emit->key, emit->debug);
}
return emit->vp;
}
@@ -82,7 +82,7 @@ fd3_emit_get_fp(struct fd3_emit *emit)
emit->fp = &binning_fp;
} else {
struct fd3_shader_stateobj *so = emit->prog->fp;
- emit->fp = ir3_shader_variant(so->shader, emit->key);
+ emit->fp = ir3_shader_variant(so->shader, emit->key, emit->debug);
}
}
return emit->fp;
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_program.c b/src/gallium/drivers/freedreno/a3xx/fd3_program.c
index 57e269cc21f..8152f8fcb9c 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_program.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_program.c
@@ -50,9 +50,10 @@ static struct fd3_shader_stateobj *
create_shader_stateobj(struct pipe_context *pctx, const struct pipe_shader_state *cso,
enum shader_t type)
{
+ struct fd_context *ctx = fd_context(pctx);
+ struct ir3_compiler *compiler = ctx->screen->compiler;
struct fd3_shader_stateobj *so = CALLOC_STRUCT(fd3_shader_stateobj);
- struct ir3_compiler *compiler = fd_context(pctx)->screen->compiler;
- so->shader = ir3_shader_create(compiler, cso, type);
+ so->shader = ir3_shader_create(compiler, cso, type, &ctx->debug);
return so;
}
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_emit.h b/src/gallium/drivers/freedreno/a4xx/fd4_emit.h
index 41df3219116..a39697dafb4 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_emit.h
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_emit.h
@@ -76,7 +76,7 @@ fd4_emit_get_vp(struct fd4_emit *emit)
{
if (!emit->vp) {
struct fd4_shader_stateobj *so = emit->prog->vp;
- emit->vp = ir3_shader_variant(so->shader, emit->key);
+ emit->vp = ir3_shader_variant(so->shader, emit->key, emit->debug);
}
return emit->vp;
}
@@ -91,7 +91,7 @@ fd4_emit_get_fp(struct fd4_emit *emit)
emit->fp = &binning_fp;
} else {
struct fd4_shader_stateobj *so = emit->prog->fp;
- emit->fp = ir3_shader_variant(so->shader, emit->key);
+ emit->fp = ir3_shader_variant(so->shader, emit->key, emit->debug);
}
}
return emit->fp;
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_program.c b/src/gallium/drivers/freedreno/a4xx/fd4_program.c
index d782b94f848..4396383eef9 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_program.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_program.c
@@ -50,9 +50,10 @@ static struct fd4_shader_stateobj *
create_shader_stateobj(struct pipe_context *pctx, const struct pipe_shader_state *cso,
enum shader_t type)
{
+ struct fd_context *ctx = fd_context(pctx);
+ struct ir3_compiler *compiler = ctx->screen->compiler;
struct fd4_shader_stateobj *so = CALLOC_STRUCT(fd4_shader_stateobj);
- struct ir3_compiler *compiler = fd_context(pctx)->screen->compiler;
- so->shader = ir3_shader_create(compiler, cso, type);
+ so->shader = ir3_shader_create(compiler, cso, type, &ctx->debug);
return so;
}
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_shader.c b/src/gallium/drivers/freedreno/ir3/ir3_shader.c
index 435a565e61e..8019a1286c0 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_shader.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_shader.c
@@ -147,25 +147,6 @@ assemble_variant(struct ir3_shader_variant *v)
ir3_shader_disasm(v, bin);
}
- if (fd_mesa_debug & FD_DBG_SHADERDB) {
- /* print generic shader info: */
- fprintf(stderr, "SHADER-DB: %s prog %d/%d: %u instructions, %u dwords\n",
- ir3_shader_stage(v->shader),
- v->shader->id, v->id,
- v->info.instrs_count,
- v->info.sizedwords);
- fprintf(stderr, "SHADER-DB: %s prog %d/%d: %u half, %u full\n",
- ir3_shader_stage(v->shader),
- v->shader->id, v->id,
- v->info.max_half_reg + 1,
- v->info.max_reg + 1);
- fprintf(stderr, "SHADER-DB: %s prog %d/%d: %u const, %u constlen\n",
- ir3_shader_stage(v->shader),
- v->shader->id, v->id,
- v->info.max_const + 1,
- v->constlen);
- }
-
free(bin);
/* no need to keep the ir around beyond this point: */
@@ -173,6 +154,30 @@ assemble_variant(struct ir3_shader_variant *v)
v->ir = NULL;
}
+static void
+dump_shader_info(struct ir3_shader_variant *v, struct pipe_debug_callback *debug)
+{
+ if (!unlikely(fd_mesa_debug & FD_DBG_SHADERDB))
+ return;
+
+ pipe_debug_message(debug, SHADER_INFO, "\n"
+ "SHADER-DB: %s prog %d/%d: %u instructions, %u dwords\n"
+ "SHADER-DB: %s prog %d/%d: %u half, %u full\n"
+ "SHADER-DB: %s prog %d/%d: %u const, %u constlen\n",
+ ir3_shader_stage(v->shader),
+ v->shader->id, v->id,
+ v->info.instrs_count,
+ v->info.sizedwords,
+ ir3_shader_stage(v->shader),
+ v->shader->id, v->id,
+ v->info.max_half_reg + 1,
+ v->info.max_reg + 1,
+ ir3_shader_stage(v->shader),
+ v->shader->id, v->id,
+ v->info.max_const + 1,
+ v->constlen);
+}
+
static struct ir3_shader_variant *
create_variant(struct ir3_shader *shader, struct ir3_shader_key key)
{
@@ -207,7 +212,8 @@ fail:
}
struct ir3_shader_variant *
-ir3_shader_variant(struct ir3_shader *shader, struct ir3_shader_key key)
+ir3_shader_variant(struct ir3_shader *shader, struct ir3_shader_key key,
+ struct pipe_debug_callback *debug)
{
struct ir3_shader_variant *v;
@@ -248,6 +254,7 @@ ir3_shader_variant(struct ir3_shader *shader, struct ir3_shader_key key)
if (v) {
v->next = shader->variants;
shader->variants = v;
+ dump_shader_info(v, debug);
}
return v;
@@ -269,8 +276,8 @@ ir3_shader_destroy(struct ir3_shader *shader)
struct ir3_shader *
ir3_shader_create(struct ir3_compiler *compiler,
- const struct pipe_shader_state *cso,
- enum shader_t type)
+ const struct pipe_shader_state *cso, enum shader_t type,
+ struct pipe_debug_callback *debug)
{
struct ir3_shader *shader = CALLOC_STRUCT(ir3_shader);
shader->compiler = compiler;
@@ -294,7 +301,7 @@ ir3_shader_create(struct ir3_compiler *compiler,
* actually compiled)
*/
static struct ir3_shader_key key = {0};
- ir3_shader_variant(shader, key);
+ ir3_shader_variant(shader, key, debug);
}
return shader;
}
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_shader.h b/src/gallium/drivers/freedreno/ir3/ir3_shader.h
index ff6bf1d67b8..077ba5db379 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_shader.h
+++ b/src/gallium/drivers/freedreno/ir3/ir3_shader.h
@@ -263,10 +263,11 @@ struct ir3_shader {
void * ir3_shader_assemble(struct ir3_shader_variant *v, uint32_t gpu_id);
struct ir3_shader * ir3_shader_create(struct ir3_compiler *compiler,
- const struct pipe_shader_state *cso, enum shader_t type);
+ const struct pipe_shader_state *cso, enum shader_t type,
+ struct pipe_debug_callback *debug);
void ir3_shader_destroy(struct ir3_shader *shader);
struct ir3_shader_variant * ir3_shader_variant(struct ir3_shader *shader,
- struct ir3_shader_key key);
+ struct ir3_shader_key key, struct pipe_debug_callback *debug);
void ir3_shader_disasm(struct ir3_shader_variant *so, uint32_t *bin);
struct fd_ringbuffer;