Mesa (main): iris: Allocate shader variant in caller of iris_upload_shader
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jul 28 18:00:25 UTC 2021
Module: Mesa
Branch: main
Commit: 0e48b1a99d70cbf06a331bf69cb96850e708ac44
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0e48b1a99d70cbf06a331bf69cb96850e708ac44
Author: Ian Romanick <ian.d.romanick at intel.com>
Date: Wed Jun 2 12:26:35 2021 -0700
iris: Allocate shader variant in caller of iris_upload_shader
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 | 1 +
src/gallium/drivers/iris/iris_disk_cache.c | 10 +++--
src/gallium/drivers/iris/iris_program.c | 64 ++++++++++++++++-----------
src/gallium/drivers/iris/iris_program_cache.c | 17 ++++---
4 files changed, 54 insertions(+), 38 deletions(-)
diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h
index 05d85ec9a51..c9dd66b988b 100644
--- a/src/gallium/drivers/iris/iris_context.h
+++ b/src/gallium/drivers/iris/iris_context.h
@@ -949,6 +949,7 @@ struct iris_compiled_shader *iris_create_shader_variant(const struct iris_screen
struct iris_compiled_shader *iris_upload_shader(struct iris_screen *screen,
struct iris_uncompiled_shader *,
+ struct iris_compiled_shader *,
struct hash_table *driver_ht,
struct u_upload_mgr *uploader,
enum iris_program_cache_id,
diff --git a/src/gallium/drivers/iris/iris_disk_cache.c b/src/gallium/drivers/iris/iris_disk_cache.c
index 023db20cf89..3be0301b1ef 100644
--- a/src/gallium/drivers/iris/iris_disk_cache.c
+++ b/src/gallium/drivers/iris/iris_disk_cache.c
@@ -245,10 +245,12 @@ iris_disk_cache_retrieve(struct iris_screen *screen,
* return it to the caller.
*/
struct iris_compiled_shader *shader =
- iris_upload_shader(screen, ish, NULL, uploader,
- cache_id, key_size, prog_key, assembly,
- prog_data, so_decls, system_values,
- num_system_values, kernel_input_size, num_cbufs, &bt);
+ iris_create_shader_variant(screen, NULL, cache_id, key_size, prog_key);
+
+ shader = 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);
free(buffer);
diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c
index 852c26a2aea..0f4c83feaf7 100644
--- a/src/gallium/drivers/iris/iris_program.c
+++ b/src/gallium/drivers/iris/iris_program.c
@@ -1221,10 +1221,12 @@ iris_compile_vs(struct iris_screen *screen,
&vue_prog_data->vue_map);
struct iris_compiled_shader *shader =
- iris_upload_shader(screen, ish, NULL, uploader,
- IRIS_CACHE_VS, sizeof(*key), key, program,
- prog_data, so_decls, system_values, num_system_values,
- 0, num_cbufs, &bt);
+ iris_create_shader_variant(screen, NULL, IRIS_CACHE_VS, sizeof(*key), key);
+
+ shader = 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);
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -1410,11 +1412,16 @@ iris_compile_tcs(struct iris_screen *screen,
iris_debug_recompile(screen, dbg, ish, &brw_key.base);
+ void *passthrough_mem_ctx = (ish != NULL) ? NULL : passthrough_ht;
+
struct iris_compiled_shader *shader =
- iris_upload_shader(screen, ish, passthrough_ht, uploader,
- IRIS_CACHE_TCS, sizeof(*key), key, program,
- prog_data, NULL, system_values, num_system_values,
- 0, num_cbufs, &bt);
+ iris_create_shader_variant(screen, passthrough_mem_ctx, IRIS_CACHE_TCS,
+ sizeof(*key), key);
+
+ shader = 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);
if (ish)
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -1546,12 +1553,13 @@ iris_compile_tes(struct iris_screen *screen,
screen->vtbl.create_so_decl_list(&ish->stream_output,
&vue_prog_data->vue_map);
-
struct iris_compiled_shader *shader =
- iris_upload_shader(screen, ish, NULL, uploader,
- IRIS_CACHE_TES, sizeof(*key), key, program,
- prog_data, so_decls, system_values, num_system_values,
- 0, num_cbufs, &bt);
+ iris_create_shader_variant(screen, NULL, IRIS_CACHE_TES, sizeof(*key), key);
+
+ shader = 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);
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -1674,10 +1682,12 @@ iris_compile_gs(struct iris_screen *screen,
&vue_prog_data->vue_map);
struct iris_compiled_shader *shader =
- iris_upload_shader(screen, ish, NULL, uploader,
- IRIS_CACHE_GS, sizeof(*key), key, program,
- prog_data, so_decls, system_values, num_system_values,
- 0, num_cbufs, &bt);
+ iris_create_shader_variant(screen, NULL, IRIS_CACHE_GS, sizeof(*key), key);
+
+ shader = 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);
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -1801,10 +1811,12 @@ iris_compile_fs(struct iris_screen *screen,
iris_debug_recompile(screen, dbg, ish, &brw_key.base);
struct iris_compiled_shader *shader =
- iris_upload_shader(screen, ish, NULL, uploader,
- IRIS_CACHE_FS, sizeof(*key), key, program,
- prog_data, NULL, system_values, num_system_values,
- 0, num_cbufs, &bt);
+ iris_create_shader_variant(screen, NULL, IRIS_CACHE_FS, sizeof(*key), key);
+
+ shader = 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);
iris_disk_cache_store(screen->disk_cache, ish, shader, key, sizeof(*key));
@@ -2068,10 +2080,12 @@ iris_compile_cs(struct iris_screen *screen,
iris_debug_recompile(screen, dbg, ish, &brw_key.base);
struct iris_compiled_shader *shader =
- iris_upload_shader(screen, ish, NULL, uploader,
- IRIS_CACHE_CS, sizeof(*key), key, program,
- prog_data, NULL, system_values, num_system_values,
- ish->kernel_input_size, num_cbufs, &bt);
+ iris_create_shader_variant(screen, NULL, IRIS_CACHE_CS, sizeof(*key), key);
+
+ shader = 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);
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 4fdee1ea5d6..235cf99e8ef 100644
--- a/src/gallium/drivers/iris/iris_program_cache.c
+++ b/src/gallium/drivers/iris/iris_program_cache.c
@@ -146,6 +146,7 @@ iris_create_shader_variant(const struct iris_screen *screen,
struct iris_compiled_shader *
iris_upload_shader(struct iris_screen *screen,
struct iris_uncompiled_shader *ish,
+ struct iris_compiled_shader *shader,
struct hash_table *driver_shaders,
struct u_upload_mgr *uploader,
enum iris_program_cache_id cache_id,
@@ -162,11 +163,6 @@ iris_upload_shader(struct iris_screen *screen,
{
const struct intel_device_info *devinfo = &screen->devinfo;
- void *mem_ctx = ish ? NULL : (void *) driver_shaders;
-
- struct iris_compiled_shader *shader =
- iris_create_shader_variant(screen, mem_ctx, cache_id, key_size, key);
-
u_upload_alloc(uploader, 0, prog_data->program_size, 64,
&shader->assembly.offset, &shader->assembly.res,
&shader->map);
@@ -280,10 +276,13 @@ iris_blorp_upload_shader(struct blorp_batch *blorp_batch, uint32_t stage,
memset(&bt, 0, sizeof(bt));
struct iris_compiled_shader *shader =
- iris_upload_shader(screen, NULL, ice->shaders.cache,
- ice->shaders.uploader_driver,
- IRIS_CACHE_BLORP, key_size, key, kernel,
- prog_data, NULL, NULL, 0, 0, 0, &bt);
+ iris_create_shader_variant(screen, ice->shaders.cache, IRIS_CACHE_BLORP,
+ key_size, key);
+
+ 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);
struct iris_bo *bo = iris_resource_bo(shader->assembly.res);
*kernel_out =
More information about the mesa-commit
mailing list