Mesa (master): freedreno/ir3: Pass stream output info to ir3_shader_from_nir
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri May 1 16:46:33 UTC 2020
Module: Mesa
Branch: master
Commit: a16ee14f37fca71c0c14d468db690aa410ac4ce4
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a16ee14f37fca71c0c14d468db690aa410ac4ce4
Author: Kristian H. Kristensen <hoegsberg at google.com>
Date: Thu Apr 30 23:24:27 2020 -0700
freedreno/ir3: Pass stream output info to ir3_shader_from_nir
We need shader->stream_output filled out when we layout the push
constants in ir3_setup_const_state(). Otherwise
const_state->offsets.tfbo ends up as ~0, which doesn't work.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4562>
---
src/freedreno/ir3/ir3_shader.c | 5 ++++-
src/freedreno/ir3/ir3_shader.h | 3 ++-
src/gallium/drivers/freedreno/ir3/ir3_gallium.c | 7 ++++---
3 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/src/freedreno/ir3/ir3_shader.c b/src/freedreno/ir3/ir3_shader.c
index 8d768e21c30..420d4ea492a 100644
--- a/src/freedreno/ir3/ir3_shader.c
+++ b/src/freedreno/ir3/ir3_shader.c
@@ -290,7 +290,8 @@ ir3_shader_destroy(struct ir3_shader *shader)
}
struct ir3_shader *
-ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir)
+ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir,
+ struct ir3_stream_output_info *stream_output)
{
struct ir3_shader *shader = CALLOC_STRUCT(ir3_shader);
@@ -298,6 +299,8 @@ ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir)
shader->compiler = compiler;
shader->id = p_atomic_inc_return(&shader->compiler->shader_count);
shader->type = nir->info.stage;
+ if (stream_output)
+ memcpy(&shader->stream_output, stream_output, sizeof(shader->stream_output));
NIR_PASS_V(nir, nir_lower_io, nir_var_all, ir3_glsl_type_size,
(nir_lower_io_options)0);
diff --git a/src/freedreno/ir3/ir3_shader.h b/src/freedreno/ir3/ir3_shader.h
index a3b8f917af6..2a9d7962248 100644
--- a/src/freedreno/ir3/ir3_shader.h
+++ b/src/freedreno/ir3/ir3_shader.h
@@ -662,7 +662,8 @@ struct ir3_shader {
void * ir3_shader_assemble(struct ir3_shader_variant *v, uint32_t gpu_id);
struct ir3_shader_variant * ir3_shader_get_variant(struct ir3_shader *shader,
struct ir3_shader_key *key, bool binning_pass, bool *created);
-struct ir3_shader * ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir);
+struct ir3_shader * ir3_shader_from_nir(struct ir3_compiler *compiler, nir_shader *nir,
+ struct ir3_stream_output_info *stream_output);
void ir3_shader_destroy(struct ir3_shader *shader);
void ir3_shader_disasm(struct ir3_shader_variant *so, uint32_t *bin, FILE *out);
uint64_t ir3_shader_outputs(const struct ir3_shader *so);
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c
index 8b8a403b5f4..b52328e2f06 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c
@@ -131,9 +131,10 @@ ir3_shader_create(struct ir3_compiler *compiler,
nir = tgsi_to_nir(cso->tokens, screen);
}
- struct ir3_shader *shader = ir3_shader_from_nir(compiler, nir);
+ struct ir3_stream_output_info stream_output;
+ copy_stream_out(&stream_output, &cso->stream_output);
- copy_stream_out(&shader->stream_output, &cso->stream_output);
+ struct ir3_shader *shader = ir3_shader_from_nir(compiler, nir, &stream_output);
if (fd_mesa_debug & FD_DBG_SHADERDB) {
/* if shader-db run, create a standard variant immediately
@@ -171,7 +172,7 @@ ir3_shader_create_compute(struct ir3_compiler *compiler,
nir = tgsi_to_nir(cso->prog, screen);
}
- struct ir3_shader *shader = ir3_shader_from_nir(compiler, nir);
+ struct ir3_shader *shader = ir3_shader_from_nir(compiler, nir, NULL);
if (fd_mesa_debug & FD_DBG_SHADERDB) {
/* if shader-db run, create a standard variant immediately
More information about the mesa-commit
mailing list