From: Jason Ekstrand Date: Thu, 1 Oct 2015 19:23:53 +0000 (-0700) Subject: i965/backend_shader: Add a field to store the NIR shader X-Git-Tag: upstream/17.1.0~15661 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7926c3ea7d8f455cbee390d20c78dadf5432b9bc;p=platform%2Fupstream%2Fmesa.git i965/backend_shader: Add a field to store the NIR shader Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 3ab01c7..b932ed2 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -236,10 +236,10 @@ public: uint32_t spill_offset, int count); void emit_nir_code(); - void nir_setup_inputs(nir_shader *shader); - void nir_setup_outputs(nir_shader *shader); - void nir_setup_uniforms(nir_shader *shader); - void nir_emit_system_values(nir_shader *shader); + void nir_setup_inputs(); + void nir_setup_outputs(); + void nir_setup_uniforms(); + void nir_emit_system_values(); void nir_emit_impl(nir_function_impl *impl); void nir_emit_cf_list(exec_list *list); void nir_emit_if(nir_if *if_stmt); diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp index d70c672..3793791 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp @@ -37,15 +37,13 @@ using namespace brw::surface_access; void fs_visitor::emit_nir_code() { - nir_shader *nir = prog->nir; - /* emit the arrays used for inputs and outputs - load/store intrinsics will * be converted to reads/writes of these arrays */ - nir_setup_inputs(nir); - nir_setup_outputs(nir); - nir_setup_uniforms(nir); - nir_emit_system_values(nir); + nir_setup_inputs(); + nir_setup_outputs(); + nir_setup_uniforms(); + nir_emit_system_values(); /* get the main function and emit it */ nir_foreach_overload(nir, overload) { @@ -56,11 +54,11 @@ fs_visitor::emit_nir_code() } void -fs_visitor::nir_setup_inputs(nir_shader *shader) +fs_visitor::nir_setup_inputs() { - nir_inputs = bld.vgrf(BRW_REGISTER_TYPE_F, shader->num_inputs); + nir_inputs = bld.vgrf(BRW_REGISTER_TYPE_F, nir->num_inputs); - foreach_list_typed(nir_variable, var, node, &shader->inputs) { + foreach_list_typed(nir_variable, var, node, &nir->inputs) { enum brw_reg_type type = brw_type_for_base_type(var->type); fs_reg input = offset(nir_inputs, bld, var->data.driver_location); @@ -118,13 +116,13 @@ fs_visitor::nir_setup_inputs(nir_shader *shader) } void -fs_visitor::nir_setup_outputs(nir_shader *shader) +fs_visitor::nir_setup_outputs() { brw_wm_prog_key *key = (brw_wm_prog_key*) this->key; - nir_outputs = bld.vgrf(BRW_REGISTER_TYPE_F, shader->num_outputs); + nir_outputs = bld.vgrf(BRW_REGISTER_TYPE_F, nir->num_outputs); - foreach_list_typed(nir_variable, var, node, &shader->outputs) { + foreach_list_typed(nir_variable, var, node, &nir->outputs) { fs_reg reg = offset(nir_outputs, bld, var->data.driver_location); int vector_elements = @@ -175,14 +173,14 @@ fs_visitor::nir_setup_outputs(nir_shader *shader) } void -fs_visitor::nir_setup_uniforms(nir_shader *shader) +fs_visitor::nir_setup_uniforms() { if (dispatch_width != 8) return; - uniforms = shader->num_uniforms; + uniforms = nir->num_uniforms; - foreach_list_typed(nir_variable, var, node, &shader->uniforms) { + foreach_list_typed(nir_variable, var, node, &nir->uniforms) { /* UBO's and atomics don't take up space in the uniform file */ if (var->interface_type != NULL || var->type->contains_atomic()) continue; @@ -274,10 +272,10 @@ emit_system_values_block(nir_block *block, void *void_visitor) } void -fs_visitor::nir_emit_system_values(nir_shader *shader) +fs_visitor::nir_emit_system_values() { nir_system_values = ralloc_array(mem_ctx, fs_reg, SYSTEM_VALUE_MAX); - nir_foreach_overload(shader, overload) { + nir_foreach_overload(nir, overload) { assert(strcmp(overload->function->name, "main") == 0); assert(overload->impl); nir_foreach_block(overload->impl, emit_system_values_block, this); diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp index 1f335a3..ce15cf9 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.cpp +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp @@ -902,6 +902,7 @@ backend_shader::backend_shader(const struct brw_compiler *compiler, : compiler(compiler), log_data(log_data), devinfo(compiler->devinfo), + nir(prog->nir), shader(shader_prog ? (struct brw_shader *)shader_prog->_LinkedShaders[stage] : NULL), shader_prog(shader_prog), diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h index 9690332..80b41bc 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.h +++ b/src/mesa/drivers/dri/i965/brw_shader.h @@ -236,6 +236,7 @@ public: void *log_data; /* Passed to compiler->*_log functions */ const struct brw_device_info * const devinfo; + nir_shader *nir; struct brw_shader * const shader; struct gl_shader_program * const shader_prog; struct gl_program * const prog; diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h index 7ce066f..6e3af60 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_vec4.h @@ -332,10 +332,10 @@ public: bool is_high_sampler(src_reg sampler); virtual void emit_nir_code(); - virtual void nir_setup_inputs(nir_shader *shader); - virtual void nir_setup_uniforms(nir_shader *shader); + virtual void nir_setup_inputs(); + virtual void nir_setup_uniforms(); virtual void nir_setup_system_value_intrinsic(nir_intrinsic_instr *instr); - virtual void nir_setup_system_values(nir_shader *shader); + virtual void nir_setup_system_values(); virtual void nir_emit_impl(nir_function_impl *impl); virtual void nir_emit_cf_list(exec_list *list); virtual void nir_emit_if(nir_if *if_stmt); diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp index 64a90e5..af4c102 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp @@ -27,11 +27,11 @@ namespace brw { void -vec4_gs_visitor::nir_setup_inputs(nir_shader *shader) +vec4_gs_visitor::nir_setup_inputs() { - nir_inputs = ralloc_array(mem_ctx, src_reg, shader->num_inputs); + nir_inputs = ralloc_array(mem_ctx, src_reg, nir->num_inputs); - foreach_list_typed(nir_variable, var, node, &shader->inputs) { + foreach_list_typed(nir_variable, var, node, &nir->inputs) { int offset = var->data.driver_location; if (var->type->base_type == GLSL_TYPE_ARRAY) { /* Geometry shader inputs are arrays, but they use an unusual array diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h index 05453b5..08baf1f 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h @@ -75,7 +75,7 @@ public: bool no_spills, int shader_time_index); - virtual void nir_setup_inputs(nir_shader *shader); + virtual void nir_setup_inputs(); virtual void nir_setup_system_value_intrinsic(nir_intrinsic_instr *instr); protected: diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp index 41667eb..8da8e2c 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp @@ -35,15 +35,13 @@ namespace brw { void vec4_visitor::emit_nir_code() { - nir_shader *nir = prog->nir; - if (nir->num_inputs > 0) - nir_setup_inputs(nir); + nir_setup_inputs(); if (nir->num_uniforms > 0) - nir_setup_uniforms(nir); + nir_setup_uniforms(); - nir_setup_system_values(nir); + nir_setup_system_values(); /* get the main function and emit it */ nir_foreach_overload(nir, overload) { @@ -105,11 +103,11 @@ setup_system_values_block(nir_block *block, void *void_visitor) } void -vec4_visitor::nir_setup_system_values(nir_shader *shader) +vec4_visitor::nir_setup_system_values() { nir_system_values = ralloc_array(mem_ctx, dst_reg, SYSTEM_VALUE_MAX); - nir_foreach_overload(shader, overload) { + nir_foreach_overload(nir, overload) { assert(strcmp(overload->function->name, "main") == 0); assert(overload->impl); nir_foreach_block(overload->impl, setup_system_values_block, this); @@ -117,11 +115,11 @@ vec4_visitor::nir_setup_system_values(nir_shader *shader) } void -vec4_visitor::nir_setup_inputs(nir_shader *shader) +vec4_visitor::nir_setup_inputs() { - nir_inputs = ralloc_array(mem_ctx, src_reg, shader->num_inputs); + nir_inputs = ralloc_array(mem_ctx, src_reg, nir->num_inputs); - foreach_list_typed(nir_variable, var, node, &shader->inputs) { + foreach_list_typed(nir_variable, var, node, &nir->inputs) { int offset = var->data.driver_location; unsigned size = type_size_vec4(var->type); for (unsigned i = 0; i < size; i++) { @@ -132,11 +130,11 @@ vec4_visitor::nir_setup_inputs(nir_shader *shader) } void -vec4_visitor::nir_setup_uniforms(nir_shader *shader) +vec4_visitor::nir_setup_uniforms() { - uniforms = shader->num_uniforms; + uniforms = nir->num_uniforms; - foreach_list_typed(nir_variable, var, node, &shader->uniforms) { + foreach_list_typed(nir_variable, var, node, &nir->uniforms) { /* UBO's and atomics don't take up space in the uniform file */ if (var->interface_type != NULL || var->type->contains_atomic()) continue;