mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 00:38:48 +02:00
nir/opt_varyings_bulk: add data parameter to optimize callback
Signed-off-by: Job Noorman <jnoorman@igalia.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40651>
This commit is contained in:
parent
27b56314ee
commit
d56d35aa76
5 changed files with 23 additions and 14 deletions
|
|
@ -1499,7 +1499,7 @@ hk_compile_shader(struct hk_device *dev, struct vk_shader_compile_info *info,
|
|||
}
|
||||
|
||||
static void
|
||||
nir_opts(nir_shader *nir)
|
||||
nir_opts(nir_shader *nir, void *data)
|
||||
{
|
||||
bool progress;
|
||||
|
||||
|
|
@ -1566,7 +1566,7 @@ hk_compile_shaders(struct vk_device *vk_dev, uint32_t shader_count,
|
|||
}
|
||||
|
||||
nir_opt_varyings_bulk(shaders, shader_count, true, UINT32_MAX, UINT32_MAX,
|
||||
nir_opts);
|
||||
nir_opts, NULL);
|
||||
|
||||
for (uint32_t i = 0; i < shader_count; i++) {
|
||||
VkResult result =
|
||||
|
|
|
|||
|
|
@ -1460,6 +1460,12 @@ prelink_lowering(const struct pipe_screen *screen,
|
|||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
optimize_varyings_opts(nir_shader *nir, void *data)
|
||||
{
|
||||
gl_nir_opts(nir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Lower load_deref and store_deref on input/output variables to load_input
|
||||
* and store_output intrinsics, and perform varying optimizations and
|
||||
|
|
@ -1511,7 +1517,7 @@ gl_nir_lower_optimize_varyings(const struct gl_constants *consts,
|
|||
return;
|
||||
|
||||
nir_opt_varyings_bulk(shaders, num_shaders, spirv, max_uniform_comps,
|
||||
max_ubos, gl_nir_opts);
|
||||
max_ubos, optimize_varyings_opts, NULL);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -5370,7 +5370,8 @@ nir_varying_var_mask(nir_shader *nir);
|
|||
void
|
||||
nir_opt_varyings_bulk(nir_shader **shaders, uint32_t num_shaders, bool spirv,
|
||||
unsigned max_uniform_comps, unsigned max_ubos,
|
||||
void (*optimize)(nir_shader *));
|
||||
void (*optimize)(nir_shader *, void *),
|
||||
void *optimize_data);
|
||||
|
||||
bool nir_slot_is_sysval_output(gl_varying_slot slot,
|
||||
mesa_shader_stage next_shader);
|
||||
|
|
|
|||
|
|
@ -5470,16 +5470,16 @@ nir_varying_var_mask(nir_shader *nir)
|
|||
static nir_opt_varyings_progress
|
||||
optimize_varyings(nir_shader *producer, nir_shader *consumer, bool spirv,
|
||||
unsigned max_uniform_comps, unsigned max_ubos,
|
||||
void (*optimize)(nir_shader *))
|
||||
void (*optimize)(nir_shader *, void *), void *optimize_data)
|
||||
{
|
||||
nir_opt_varyings_progress progress =
|
||||
nir_opt_varyings(producer, consumer, spirv, max_uniform_comps,
|
||||
max_ubos, false);
|
||||
|
||||
if (progress & nir_progress_producer)
|
||||
optimize(producer);
|
||||
optimize(producer, optimize_data);
|
||||
if (progress & nir_progress_consumer)
|
||||
optimize(consumer);
|
||||
optimize(consumer, optimize_data);
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
|
@ -5493,7 +5493,8 @@ optimize_varyings(nir_shader *producer, nir_shader *consumer, bool spirv,
|
|||
void
|
||||
nir_opt_varyings_bulk(nir_shader **shaders, uint32_t num_shaders, bool spirv,
|
||||
unsigned max_uniform_comps, unsigned max_ubos,
|
||||
void (*optimize)(nir_shader *))
|
||||
void (*optimize)(nir_shader *, void *),
|
||||
void *optimize_data)
|
||||
{
|
||||
/* There is nothing to link for only 1 shader. */
|
||||
if (num_shaders == 1) {
|
||||
|
|
@ -5537,7 +5538,7 @@ nir_opt_varyings_bulk(nir_shader **shaders, uint32_t num_shaders, bool spirv,
|
|||
NULL, NULL);
|
||||
|
||||
/* nir_opt_varyings requires shaders to be optimized. */
|
||||
optimize(nir);
|
||||
optimize(nir, optimize_data);
|
||||
}
|
||||
|
||||
/* Optimize varyings from the first shader to the last shader first, and
|
||||
|
|
@ -5556,7 +5557,8 @@ nir_opt_varyings_bulk(nir_shader **shaders, uint32_t num_shaders, bool spirv,
|
|||
unsigned highest_changed_producer = 0;
|
||||
for (unsigned i = 0; i < num_shaders - 1; i++) {
|
||||
if (optimize_varyings(shaders[i], shaders[i + 1], spirv,
|
||||
max_uniform_comps, max_ubos, optimize) &
|
||||
max_uniform_comps, max_ubos, optimize,
|
||||
optimize_data) &
|
||||
nir_progress_producer)
|
||||
highest_changed_producer = i;
|
||||
}
|
||||
|
|
@ -5566,7 +5568,7 @@ nir_opt_varyings_bulk(nir_shader **shaders, uint32_t num_shaders, bool spirv,
|
|||
*/
|
||||
for (unsigned i = highest_changed_producer; i > 0; i--) {
|
||||
optimize_varyings(shaders[i - 1], shaders[i], spirv, max_uniform_comps,
|
||||
max_ubos, optimize);
|
||||
max_ubos, optimize, optimize_data);
|
||||
}
|
||||
|
||||
/* Final cleanups. */
|
||||
|
|
|
|||
|
|
@ -751,7 +751,7 @@ kk_compile_nir_shader(struct kk_device *dev, nir_shader *nir,
|
|||
}
|
||||
|
||||
static void
|
||||
nir_opts(nir_shader *nir)
|
||||
nir_opts(nir_shader *nir, void *data)
|
||||
{
|
||||
bool progress;
|
||||
|
||||
|
|
@ -1134,12 +1134,12 @@ kk_compile_shaders(struct vk_device *device, uint32_t shader_count,
|
|||
|
||||
uint32_t total_shaders = null_fs ? shader_count + 1 : shader_count;
|
||||
nir_opt_varyings_bulk(shaders, total_shaders, true, UINT32_MAX, UINT32_MAX,
|
||||
nir_opts);
|
||||
nir_opts, NULL);
|
||||
/* Second pass is required because some dEQP-VK.glsl.matrix.sub.dynamic.*
|
||||
* would fail otherwise due to vertex outputting vec4 while fragments reading
|
||||
* vec3 when in reality only vec3 is needed. */
|
||||
nir_opt_varyings_bulk(shaders, total_shaders, true, UINT32_MAX, UINT32_MAX,
|
||||
nir_opts);
|
||||
nir_opts, NULL);
|
||||
|
||||
for (uint32_t i = 0; i < shader_count; i++) {
|
||||
result =
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue