[Mesa-dev] [PATCH 07/78] i965/vec4: Overload make_reg_for_system_value() to allow reuse in NIR->vec4 pass
Alejandro Piñeiro
apinheiro at igalia.com
Mon Jun 29 23:38:26 PDT 2015
On 30/06/15 01:27, Jason Ekstrand wrote:
> On Fri, Jun 26, 2015 at 1:06 AM, Eduardo Lima Mitev <elima at igalia.com> wrote:
>> From: Alejandro Piñeiro <apinheiro at igalia.com>
>>
>> The new virtual method is more flexible, it has a signature:
>>
>> dst_reg *make_reg_for_system_value(int location, const glsl_type *type);
>>
>> so the current method will be chained through this one.
> I just grepped the code. This function is used exactly once in the
> current fs_visitor code.
Do you mean current vec4_visitor code? Because I only see that function
used here:
https://github.com/Igalia/mesa/blob/nir-vec4-v1/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp#L1094
> Let's just replace that use with a use of
> the new one and avoid the overload.
Ok.
>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89580
> Also, let's not reference the same "make a vec4 visitor for NIR" bug
> in every patch. It's not really a bugfix.
Ok.
> --Jason
>
>> ---
>> src/mesa/drivers/dri/i965/brw_vec4.cpp | 6 ++++++
>> src/mesa/drivers/dri/i965/brw_vec4.h | 5 ++++-
>> src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 7 ++++---
>> src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h | 3 ++-
>> src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp | 5 +++--
>> src/mesa/drivers/dri/i965/brw_vs.h | 3 ++-
>> 6 files changed, 21 insertions(+), 8 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
>> index dcffa04..ff1ef75 100644
>> --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
>> @@ -1684,6 +1684,12 @@ vec4_visitor::emit_shader_time_end()
>> emit(BRW_OPCODE_ENDIF);
>> }
>>
>> +dst_reg *
>> +vec4_visitor::make_reg_for_system_value(ir_variable *ir)
>> +{
>> + return make_reg_for_system_value(ir->data.location, ir->type);
>> +}
>> +
>> void
>> vec4_visitor::emit_shader_time_write(int shader_time_subindex, src_reg value)
>> {
>> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h
>> index 6535f19..2a53d9a 100644
>> --- a/src/mesa/drivers/dri/i965/brw_vec4.h
>> +++ b/src/mesa/drivers/dri/i965/brw_vec4.h
>> @@ -411,6 +411,9 @@ public:
>> virtual void nir_emit_jump(nir_jump_instr *instr);
>> virtual void nir_emit_texture(nir_tex_instr *instr);
>>
>> + virtual dst_reg *make_reg_for_system_value(int location,
>> + const glsl_type *type) = 0;
>> +
>> src_reg *nir_inputs;
>> int *nir_outputs;
>> brw_reg_type *nir_output_types;
>> @@ -423,7 +426,7 @@ protected:
>> bool interleaved);
>> void setup_payload_interference(struct ra_graph *g, int first_payload_node,
>> int reg_node_count);
>> - virtual dst_reg *make_reg_for_system_value(ir_variable *ir) = 0;
>> + virtual dst_reg *make_reg_for_system_value(ir_variable *ir);
>> virtual void assign_binding_table_offsets();
>> virtual void setup_payload() = 0;
>> virtual void emit_prolog() = 0;
>> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
>> index 69bcf5a..91bc849 100644
>> --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
>> @@ -49,11 +49,12 @@ vec4_gs_visitor::vec4_gs_visitor(const struct brw_compiler *compiler,
>>
>>
>> dst_reg *
>> -vec4_gs_visitor::make_reg_for_system_value(ir_variable *ir)
>> +vec4_gs_visitor::make_reg_for_system_value(int location,
>> + const glsl_type *type)
>> {
>> - dst_reg *reg = new(mem_ctx) dst_reg(this, ir->type);
>> + dst_reg *reg = new(mem_ctx) dst_reg(this, type);
>>
>> - switch (ir->data.location) {
>> + switch (location) {
>> case SYSTEM_VALUE_INVOCATION_ID:
>> this->current_annotation = "initialize gl_InvocationID";
>> emit(GS_OPCODE_GET_INSTANCE_ID, *reg);
>> 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 e693c56..0f1c705 100644
>> --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h
>> +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h
>> @@ -76,7 +76,8 @@ public:
>> int shader_time_index);
>>
>> protected:
>> - virtual dst_reg *make_reg_for_system_value(ir_variable *ir);
>> + virtual dst_reg *make_reg_for_system_value(int location,
>> + const glsl_type *type);
>> virtual void setup_payload();
>> virtual void emit_prolog();
>> virtual void emit_program_code();
>> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp
>> index f93062b..1fe23ba 100644
>> --- a/src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp
>> @@ -143,7 +143,8 @@ vec4_vs_visitor::emit_prolog()
>>
>>
>> dst_reg *
>> -vec4_vs_visitor::make_reg_for_system_value(ir_variable *ir)
>> +vec4_vs_visitor::make_reg_for_system_value(int location,
>> + const glsl_type *type)
>> {
>> /* VertexID is stored by the VF as the last vertex element, but
>> * we don't represent it with a flag in inputs_read, so we call
>> @@ -151,7 +152,7 @@ vec4_vs_visitor::make_reg_for_system_value(ir_variable *ir)
>> */
>> dst_reg *reg = new(mem_ctx) dst_reg(ATTR, VERT_ATTRIB_MAX);
>>
>> - switch (ir->data.location) {
>> + switch (location) {
>> case SYSTEM_VALUE_BASE_VERTEX:
>> reg->writemask = WRITEMASK_X;
>> vs_prog_data->uses_vertexid = true;
>> diff --git a/src/mesa/drivers/dri/i965/brw_vs.h b/src/mesa/drivers/dri/i965/brw_vs.h
>> index 61f9b00..873ffb7 100644
>> --- a/src/mesa/drivers/dri/i965/brw_vs.h
>> +++ b/src/mesa/drivers/dri/i965/brw_vs.h
>> @@ -99,7 +99,8 @@ public:
>> bool use_legacy_snorm_formula);
>>
>> protected:
>> - virtual dst_reg *make_reg_for_system_value(ir_variable *ir);
>> + virtual dst_reg *make_reg_for_system_value(int location,
>> + const glsl_type *type);
>> virtual void setup_payload();
>> virtual void emit_prolog();
>> virtual void emit_program_code();
>> --
>> 2.1.4
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
--
Alejandro Piñeiro (apinheiro at igalia.com)
More information about the mesa-dev
mailing list