nir/validate: Size the set of blocks to avoid rehashing.
We can use num_blocks (if it's been initialized by some pass indexing blocks) to pre-size our table, which helps on validating shaders with many blocks which would otherwise reallocate the set several times. No statistically significant performance difference on softpipe KHR-GL33.texture_swizzle.functional runtime (n=15). A previous, similar variant of this patch cut .3% of instructions in softpipe shader-db ./run shaders/closed/steam/borderlands-2/35* (an arbitrary set of shaders that completed in reasonable amount of time) according to callgrind. Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7244>
This commit is contained in:
@@ -371,6 +371,7 @@ nir_function_impl_create_bare(nir_shader *shader)
|
||||
exec_list_make_empty(&impl->locals);
|
||||
impl->reg_alloc = 0;
|
||||
impl->ssa_alloc = 0;
|
||||
impl->num_blocks = 0;
|
||||
impl->valid_metadata = nir_metadata_none;
|
||||
impl->structured = true;
|
||||
|
||||
|
@@ -1517,6 +1517,7 @@ validate_function_impl(nir_function_impl *impl, validate_state *state)
|
||||
sizeof(BITSET_WORD));
|
||||
|
||||
_mesa_set_clear(state->blocks, NULL);
|
||||
_mesa_set_resize(state->blocks, impl->num_blocks);
|
||||
collect_blocks(&impl->body, state);
|
||||
_mesa_set_add(state->blocks, impl->end_block);
|
||||
validate_assert(state, !exec_list_is_empty(&impl->body));
|
||||
|
Reference in New Issue
Block a user