diff options
author | Jason Ekstrand <[email protected]> | 2016-07-15 17:15:21 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-12-05 15:40:09 -0800 |
commit | 2f19c19b5de66c4966fc5f5926efe5d435e505db (patch) | |
tree | 416ae9acf3bb174536b937c2e82f0c541a8f2e07 /src/compiler | |
parent | 257aa5a1c4a2284ffd43759daa405fc135a40094 (diff) |
nir: Simplify nir_lower_gs_intrinsics
It's only ever called on single-function shaders. At this point, there are
a lot of helpers that can make it all much simpler.
Reviewed-by: Iago Toral Quiroga <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/nir/nir_lower_gs_intrinsics.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/src/compiler/nir/nir_lower_gs_intrinsics.c b/src/compiler/nir/nir_lower_gs_intrinsics.c index a955e8b5dc7..3acb7425379 100644 --- a/src/compiler/nir/nir_lower_gs_intrinsics.c +++ b/src/compiler/nir/nir_lower_gs_intrinsics.c @@ -189,32 +189,27 @@ nir_lower_gs_intrinsics(nir_shader *shader) struct state state; state.progress = false; - /* Create the counter variable */ - nir_variable *var = rzalloc(shader, nir_variable); - var->data.mode = nir_var_global; - var->type = glsl_uint_type(); - var->name = "vertex_count"; - var->constant_initializer = rzalloc(shader, nir_constant); /* initialize to 0 */ + nir_function_impl *impl = nir_shader_get_entrypoint(shader); + assert(impl); - exec_list_push_tail(&shader->globals, &var->node); - state.vertex_count_var = var; + nir_builder b; + nir_builder_init(&b, impl); + state.builder = &b; - nir_foreach_function(function, shader) { - if (function->impl) { - nir_builder b; - nir_builder_init(&b, function->impl); - state.builder = &b; + /* Create the counter variable */ + state.vertex_count_var = + nir_local_variable_create(impl, glsl_uint_type(), "vertex_count"); + /* initialize to 0 */ + b.cursor = nir_before_cf_list(&impl->body); + nir_store_var(&b, state.vertex_count_var, nir_imm_int(&b, 0), 0x1); - nir_foreach_block_safe(block, function->impl) { - rewrite_intrinsics(block, &state); - } + nir_foreach_block_safe(block, impl) + rewrite_intrinsics(block, &state); - /* This only works because we have a single main() function. */ - append_set_vertex_count(function->impl->end_block, &state); + /* This only works because we have a single main() function. */ + append_set_vertex_count(impl->end_block, &state); - nir_metadata_preserve(function->impl, 0); - } - } + nir_metadata_preserve(impl, 0); return state.progress; } |