[Mesa-dev] [PATCH 097/133] nir/validate: Ensure that outputs are write-only and inputs are read-only
Chris Forbes
chrisf at ijw.co.nz
Tue Jan 6 13:46:33 PST 2015
Worth pointing out that when tessellation gets ported to NIR, output
reads are a real thing, and can't be lowered away like we do for other
stages (they allow cross-invocation communication, so have to actually
read back from the URB on i965)
On Wed, Jan 7, 2015 at 10:43 AM, Jason Ekstrand <jason at jlekstrand.net> wrote:
>
>
> On Sun, Jan 4, 2015 at 8:48 PM, Connor Abbott <cwabbott0 at gmail.com> wrote:
>>
>> I'm not so sure how I feel about checking that outputs are write-only...
>> eventually we'll want to do lower_input_reads in NIR itself, at which point
>> we'll need to remove that part from the validator. At the same time, for now
>> this is somewhat useful. I'm just not sure if it's worth it (making sure
>> inputs are read-only definitely is, though).
>
>
> Yes, we may want to do that lowering in NIR and I've already written the
> pass. It's lying around somewhere in my git tree. However, the only
> producers of NIR that we currently have are GLSL IR which already has the
> pass, and TGSI which already has the outputs-are-write-only restriction.
> For now, I like this bit of validation as it keeps us from breaking other
> passes that depend on this.
>
> Do we want this in the end? Absoltuely! We do not want to deal with this
> in nir_lower_variables. I tried to but it's an absolute pain. It's much
> easier to just remove the copies.
>
>>
>>
>> On Tue, Dec 16, 2014 at 1:11 AM, Jason Ekstrand <jason at jlekstrand.net>
>> wrote:
>>>
>>> ---
>>> src/glsl/nir/nir_validate.c | 23 +++++++++++++++++++++++
>>> 1 file changed, 23 insertions(+)
>>>
>>> diff --git a/src/glsl/nir/nir_validate.c b/src/glsl/nir/nir_validate.c
>>> index 80faa15..b8ef802 100644
>>> --- a/src/glsl/nir/nir_validate.c
>>> +++ b/src/glsl/nir/nir_validate.c
>>> @@ -337,6 +337,29 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr,
>>> validate_state *state)
>>> validate_deref_var(instr->variables[i], state);
>>> }
>>>
>>> + switch (instr->intrinsic) {
>>> + case nir_intrinsic_load_var_vec1:
>>> + case nir_intrinsic_load_var_vec2:
>>> + case nir_intrinsic_load_var_vec3:
>>> + case nir_intrinsic_load_var_vec4:
>>> + assert(instr->variables[0]->var->data.mode != nir_var_shader_out);
>>> + break;
>>> + case nir_intrinsic_store_var_vec1:
>>> + case nir_intrinsic_store_var_vec2:
>>> + case nir_intrinsic_store_var_vec3:
>>> + case nir_intrinsic_store_var_vec4:
>>> + assert(instr->variables[0]->var->data.mode != nir_var_shader_in &&
>>> + instr->variables[0]->var->data.mode != nir_var_uniform);
>>> + break;
>>> + case nir_intrinsic_copy_var:
>>> + assert(instr->variables[0]->var->data.mode != nir_var_shader_in &&
>>> + instr->variables[0]->var->data.mode != nir_var_uniform);
>>> + assert(instr->variables[1]->var->data.mode != nir_var_shader_out);
>>> + break;
>>> + default:
>>> + break;
>>> + }
>>> +
>>> if (instr->has_predicate)
>>> validate_src(&instr->predicate, state);
>>> }
>>> --
>>> 2.2.0
>>>
>>> _______________________________________________
>>> 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
>
More information about the mesa-dev
mailing list