diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2016-03-07 15:46:47 -0800 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2017-01-07 22:24:10 -0800 |
commit | 86b9be777f11b1226565350363e6b39f7b2f22c8 (patch) | |
tree | 0d1492b0b6a387890def635143223499d3fae002 | |
parent | 6e8ac0641fa0276fb23b2fd3811ffc4081d42fd6 (diff) |
i965: Move TES input VUE map calculation out a layer.
In Vulkan, we'll compile the TCS and TES at the same time, so I can just
pass the TCS output VUE map to brw_compile_tes as the TES input VUE map.
So, we only need to do this in GL. Move it to the GL-specific layer.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_compiler.h | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_shader.cpp | 11 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_tes.c | 8 |
3 files changed, 11 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_compiler.h b/src/mesa/drivers/dri/i965/brw_compiler.h index db8f39ce77..c378e9325c 100644 --- a/src/mesa/drivers/dri/i965/brw_compiler.h +++ b/src/mesa/drivers/dri/i965/brw_compiler.h @@ -801,6 +801,7 @@ const unsigned * brw_compile_tes(const struct brw_compiler *compiler, void *log_data, void *mem_ctx, const struct brw_tes_prog_key *key, + const struct brw_vue_map *input_vue_map, struct brw_tes_prog_data *prog_data, const struct nir_shader *shader, struct gl_program *prog, diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp index daa0c2408a..fb4cde98a1 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.cpp +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp @@ -1301,6 +1301,7 @@ brw_compile_tes(const struct brw_compiler *compiler, void *log_data, void *mem_ctx, const struct brw_tes_prog_key *key, + const struct brw_vue_map *input_vue_map, struct brw_tes_prog_data *prog_data, const nir_shader *src_shader, struct gl_program *prog, @@ -1315,12 +1316,8 @@ brw_compile_tes(const struct brw_compiler *compiler, nir->info->inputs_read = key->inputs_read; nir->info->patch_inputs_read = key->patch_inputs_read; - struct brw_vue_map input_vue_map; - brw_compute_tess_vue_map(&input_vue_map, nir->info->inputs_read, - nir->info->patch_inputs_read); - nir = brw_nir_apply_sampler_key(nir, compiler, &key->tex, is_scalar); - brw_nir_lower_tes_inputs(nir, &input_vue_map); + brw_nir_lower_tes_inputs(nir, input_vue_map); brw_nir_lower_vue_outputs(nir, is_scalar); nir = brw_postprocess_nir(nir, compiler, is_scalar); @@ -1383,7 +1380,7 @@ brw_compile_tes(const struct brw_compiler *compiler, if (unlikely(INTEL_DEBUG & DEBUG_TES)) { fprintf(stderr, "TES Input "); - brw_print_vue_map(stderr, &input_vue_map); + brw_print_vue_map(stderr, input_vue_map); fprintf(stderr, "TES Output "); brw_print_vue_map(stderr, &prog_data->base.vue_map); } @@ -1391,7 +1388,7 @@ brw_compile_tes(const struct brw_compiler *compiler, if (is_scalar) { fs_visitor v(compiler, log_data, mem_ctx, (void *) key, &prog_data->base.base, NULL, nir, 8, - shader_time_index, &input_vue_map); + shader_time_index, input_vue_map); if (!v.run_tes()) { if (error_str) *error_str = ralloc_strdup(mem_ctx, v.fail_msg); diff --git a/src/mesa/drivers/dri/i965/brw_tes.c b/src/mesa/drivers/dri/i965/brw_tes.c index e88fba95fd..57dcda7140 100644 --- a/src/mesa/drivers/dri/i965/brw_tes.c +++ b/src/mesa/drivers/dri/i965/brw_tes.c @@ -125,12 +125,16 @@ brw_codegen_tes_prog(struct brw_context *brw, start_time = get_time(); } + struct brw_vue_map input_vue_map; + brw_compute_tess_vue_map(&input_vue_map, key->inputs_read, + key->patch_inputs_read); + void *mem_ctx = ralloc_context(NULL); unsigned program_size; char *error_str; const unsigned *program = - brw_compile_tes(compiler, brw, mem_ctx, key, &prog_data, nir, - &tep->program, st_index, &program_size, &error_str); + brw_compile_tes(compiler, brw, mem_ctx, key, &input_vue_map, &prog_data, + nir, &tep->program, st_index, &program_size, &error_str); if (program == NULL) { tep->program.sh.data->LinkStatus = false; ralloc_strcat(&tep->program.sh.data->InfoLog, error_str); |