diff options
author | Jason Ekstrand <[email protected]> | 2015-10-01 12:23:53 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2015-10-02 14:22:53 -0700 |
commit | 7926c3ea7d8f455cbee390d20c78dadf5432b9bc (patch) | |
tree | 0be1e8b2543908172bd76ae8c624d79d4803327a | |
parent | 7a8d06b6dd7800caab5c5c51d16b34e03aa45f25 (diff) |
i965/backend_shader: Add a field to store the NIR shader
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.h | 8 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 32 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_shader.cpp | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_shader.h | 1 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4.h | 6 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp | 6 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 24 |
8 files changed, 39 insertions, 41 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 3ab01c7b6c8..b932ed28682 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 d70c672e20d..379379187db 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 1f335a39fe4..ce15cf96080 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 96903321cdd..80b41bca755 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 7ce066f5a05..6e3af60eb82 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 64a90e5ddff..af4c102c026 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 05453b5d21e..08baf1feb1a 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 41667eb60bf..8da8e2c3e89 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; |