Mesa (main): iris: Split iris_upload_shader in two
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jul 28 18:00:26 UTC 2021
Module: Mesa
Branch: main
Commit: dff0d9911d176802b54890c796e19f56c50f24e1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dff0d9911d176802b54890c796e19f56c50f24e1
Author: Ian Romanick <ian.d.romanick at intel.com>
Date: Mon Jun 28 11:51:10 2021 -0700
iris: Split iris_upload_shader in two
Now the part that uploads the shader and the part that finishes the
creation of the shader are separated. Each now has a more reasonable
number of parameters.
Suggested-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11229>
---
src/gallium/drivers/iris/iris_context.h | 18 ++++----
src/gallium/drivers/iris/iris_disk_cache.c | 8 ++--
src/gallium/drivers/iris/iris_program.c | 65 +++++++++++++++++++++------
src/gallium/drivers/iris/iris_program_cache.c | 40 +++++------------
4 files changed, 76 insertions(+), 55 deletions(-)
diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h
index c94217c5033..d820cb094c9 100644
--- a/src/gallium/drivers/iris/iris_context.h
+++ b/src/gallium/drivers/iris/iris_context.h
@@ -963,6 +963,15 @@ struct iris_compiled_shader *iris_create_shader_variant(const struct iris_screen
uint32_t key_size,
const void *key);
+void iris_finalize_program(struct iris_compiled_shader *shader,
+ struct brw_stage_prog_data *prog_data,
+ uint32_t *streamout,
+ enum brw_param_builtin *system_values,
+ unsigned num_system_values,
+ unsigned kernel_input_size,
+ unsigned num_cbufs,
+ const struct iris_binding_table *bt);
+
void iris_upload_shader(struct iris_screen *screen,
struct iris_uncompiled_shader *,
struct iris_compiled_shader *,
@@ -971,14 +980,7 @@ void iris_upload_shader(struct iris_screen *screen,
enum iris_program_cache_id,
uint32_t key_size,
const void *key,
- const void *assembly,
- struct brw_stage_prog_data *,
- uint32_t *streamout,
- enum brw_param_builtin *sysv,
- unsigned num_system_values,
- unsigned kernel_input_size,
- unsigned num_cbufs,
- const struct iris_binding_table *bt);
+ const void *assembly);
void iris_delete_shader_variant(struct iris_compiled_shader *shader);
void iris_destroy_shader_state(struct pipe_context *ctx, void *state);
diff --git a/src/gallium/drivers/iris/iris_disk_cache.c b/src/gallium/drivers/iris/iris_disk_cache.c
index 62313edde31..a62cf5db612 100644
--- a/src/gallium/drivers/iris/iris_disk_cache.c
+++ b/src/gallium/drivers/iris/iris_disk_cache.c
@@ -239,14 +239,16 @@ iris_disk_cache_retrieve(struct iris_screen *screen,
if (num_system_values || kernel_input_size)
num_cbufs++;
+ iris_finalize_program(shader, prog_data, so_decls, system_values,
+ num_system_values, kernel_input_size, num_cbufs,
+ &bt);
+
assert(stage < ARRAY_SIZE(cache_id_for_stage));
enum iris_program_cache_id cache_id = cache_id_for_stage[stage];
/* Upload our newly read shader to the in-memory program cache. */
iris_upload_shader(screen, ish, shader, NULL, uploader,
- cache_id, key_size, prog_key, assembly,
- prog_data, so_decls, system_values,
- num_system_values, kernel_input_size, num_cbufs, &bt);
+ cache_id, key_size, prog_key, assembly);
free(buffer);
diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c
index 1bd83baa938..384d331f21c 100644
--- a/src/gallium/drivers/iris/iris_program.c
+++ b/src/gallium/drivers/iris/iris_program.c
@@ -69,6 +69,32 @@ get_new_program_id(struct iris_screen *screen)
return p_atomic_inc_return(&screen->program_id);
}
+void
+iris_finalize_program(struct iris_compiled_shader *shader,
+ struct brw_stage_prog_data *prog_data,
+ uint32_t *streamout,
+ enum brw_param_builtin *system_values,
+ unsigned num_system_values,
+ unsigned kernel_input_size,
+ unsigned num_cbufs,
+ const struct iris_binding_table *bt)
+{
+ shader->prog_data = prog_data;
+ shader->streamout = streamout;
+ shader->system_values = system_values;
+ shader->num_system_values = num_system_values;
+ shader->kernel_input_size = kernel_input_size;
+ shader->num_cbufs = num_cbufs;
+ shader->bt = *bt;
+
+ ralloc_steal(shader, shader->prog_data);
+ ralloc_steal(shader->prog_data, (void *)prog_data->relocs);
+ ralloc_steal(shader->prog_data, prog_data->param);
+ ralloc_steal(shader->prog_data, prog_data->pull_param);
+ ralloc_steal(shader, shader->streamout);
+ ralloc_steal(shader, shader->system_values);
+}
+
static struct brw_vs_prog_key
iris_to_brw_vs_key(const struct intel_device_info *devinfo,
const struct iris_vs_prog_key *key)
@@ -1296,9 +1322,11 @@ iris_compile_vs(struct iris_screen *screen,
screen->vtbl.create_so_decl_list(&ish->stream_output,
&vue_prog_data->vue_map);
+ iris_finalize_program(shader, prog_data, so_decls, system_values,
+ num_system_values, 0, num_cbufs, &bt);
+
iris_upload_shader(screen, ish, shader, NULL, uploader, IRIS_CACHE_VS,
- sizeof(*key), key, program, prog_data, so_decls,
- system_values, num_system_values, 0, num_cbufs, &bt);
+ sizeof(*key), key, program);
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -1491,10 +1519,11 @@ iris_compile_tcs(struct iris_screen *screen,
iris_debug_recompile(screen, dbg, ish, &brw_key.base);
+ iris_finalize_program(shader, prog_data, NULL, system_values,
+ num_system_values, 0, num_cbufs, &bt);
+
iris_upload_shader(screen, ish, shader, passthrough_ht, uploader,
- IRIS_CACHE_TCS, sizeof(*key), key, program, prog_data,
- NULL, system_values, num_system_values, 0, num_cbufs,
- &bt);
+ IRIS_CACHE_TCS, sizeof(*key), key, program);
if (ish)
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -1651,9 +1680,11 @@ iris_compile_tes(struct iris_screen *screen,
screen->vtbl.create_so_decl_list(&ish->stream_output,
&vue_prog_data->vue_map);
+ iris_finalize_program(shader, prog_data, so_decls, system_values,
+ num_system_values, 0, num_cbufs, &bt);
+
iris_upload_shader(screen, ish, shader, NULL, uploader, IRIS_CACHE_TES,
- sizeof(*key), key, program, prog_data, so_decls,
- system_values, num_system_values, 0, num_cbufs, &bt);
+ sizeof(*key), key, program);
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -1782,9 +1813,11 @@ iris_compile_gs(struct iris_screen *screen,
screen->vtbl.create_so_decl_list(&ish->stream_output,
&vue_prog_data->vue_map);
+ iris_finalize_program(shader, prog_data, so_decls, system_values,
+ num_system_values, 0, num_cbufs, &bt);
+
iris_upload_shader(screen, ish, shader, NULL, uploader, IRIS_CACHE_GS,
- sizeof(*key), key, program, prog_data, so_decls,
- system_values, num_system_values, 0, num_cbufs, &bt);
+ sizeof(*key), key, program);
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -1916,9 +1949,11 @@ iris_compile_fs(struct iris_screen *screen,
iris_debug_recompile(screen, dbg, ish, &brw_key.base);
+ iris_finalize_program(shader, prog_data, NULL, system_values,
+ num_system_values, 0, num_cbufs, &bt);
+
iris_upload_shader(screen, ish, shader, NULL, uploader, IRIS_CACHE_FS,
- sizeof(*key), key, program, prog_data, NULL,
- system_values, num_system_values, 0, num_cbufs, &bt);
+ sizeof(*key), key, program);
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -2186,10 +2221,12 @@ iris_compile_cs(struct iris_screen *screen,
iris_debug_recompile(screen, dbg, ish, &brw_key.base);
+ iris_finalize_program(shader, prog_data, NULL, system_values,
+ num_system_values, ish->kernel_input_size, num_cbufs,
+ &bt);
+
iris_upload_shader(screen, ish, shader, NULL, uploader, IRIS_CACHE_CS,
- sizeof(*key), key, program, prog_data, NULL,
- system_values, num_system_values, ish->kernel_input_size,
- num_cbufs, &bt);
+ sizeof(*key), key, program);
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
diff --git a/src/gallium/drivers/iris/iris_program_cache.c b/src/gallium/drivers/iris/iris_program_cache.c
index bb8795403cb..d31ba7785f1 100644
--- a/src/gallium/drivers/iris/iris_program_cache.c
+++ b/src/gallium/drivers/iris/iris_program_cache.c
@@ -155,26 +155,19 @@ iris_upload_shader(struct iris_screen *screen,
enum iris_program_cache_id cache_id,
uint32_t key_size,
const void *key,
- const void *assembly,
- struct brw_stage_prog_data *prog_data,
- uint32_t *streamout,
- enum brw_param_builtin *system_values,
- unsigned num_system_values,
- unsigned kernel_input_size,
- unsigned num_cbufs,
- const struct iris_binding_table *bt)
+ const void *assembly)
{
const struct intel_device_info *devinfo = &screen->devinfo;
- u_upload_alloc(uploader, 0, prog_data->program_size, 64,
+ u_upload_alloc(uploader, 0, shader->prog_data->program_size, 64,
&shader->assembly.offset, &shader->assembly.res,
&shader->map);
- memcpy(shader->map, assembly, prog_data->program_size);
+ memcpy(shader->map, assembly, shader->prog_data->program_size);
struct iris_resource *res = (void *) shader->assembly.res;
uint64_t shader_data_addr = res->bo->gtt_offset +
shader->assembly.offset +
- prog_data->const_data_offset;
+ shader->prog_data->const_data_offset;
struct brw_shader_reloc_value reloc_values[] = {
{
@@ -186,23 +179,9 @@ iris_upload_shader(struct iris_screen *screen,
.value = shader_data_addr >> 32,
},
};
- brw_write_shader_relocs(&screen->devinfo, shader->map, prog_data,
- reloc_values, ARRAY_SIZE(reloc_values));
-
- shader->prog_data = prog_data;
- shader->streamout = streamout;
- shader->system_values = system_values;
- shader->num_system_values = num_system_values;
- shader->kernel_input_size = kernel_input_size;
- shader->num_cbufs = num_cbufs;
- shader->bt = *bt;
-
- ralloc_steal(shader, shader->prog_data);
- ralloc_steal(shader->prog_data, (void *)prog_data->relocs);
- ralloc_steal(shader->prog_data, prog_data->param);
- ralloc_steal(shader->prog_data, prog_data->pull_param);
- ralloc_steal(shader, shader->streamout);
- ralloc_steal(shader, shader->system_values);
+ brw_write_shader_relocs(&screen->devinfo, shader->map,
+ shader->prog_data, reloc_values,
+ ARRAY_SIZE(reloc_values));
/* Store the 3DSTATE shader packets and other derived state. */
screen->vtbl.store_derived_program_state(devinfo, cache_id, shader);
@@ -262,10 +241,11 @@ iris_blorp_upload_shader(struct blorp_batch *blorp_batch, uint32_t stage,
iris_create_shader_variant(screen, ice->shaders.cache, IRIS_CACHE_BLORP,
key_size, key);
+ iris_finalize_program(shader, prog_data, NULL, NULL, 0, 0, 0, &bt);
+
iris_upload_shader(screen, NULL, shader, ice->shaders.cache,
ice->shaders.uploader_driver,
- IRIS_CACHE_BLORP, key_size, key, kernel,
- prog_data, NULL, NULL, 0, 0, 0, &bt);
+ IRIS_CACHE_BLORP, key_size, key, kernel);
struct iris_bo *bo = iris_resource_bo(shader->assembly.res);
*kernel_out =
More information about the mesa-commit
mailing list