nir: Simplify nir_lower_gs_intrinsics
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 16 Jul 2016 00:15:21 +0000 (17:15 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 5 Dec 2016 23:40:09 +0000 (15:40 -0800)
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 <itoral@igalia.com>
src/compiler/nir/nir_lower_gs_intrinsics.c

index a955e8b5dc78ab7c5b6e05af5b073ea6e7ec7c59..3acb7425379281ebccdd23dde82b83d9518a316a 100644 (file)
@@ -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;
 }