[Mesa-dev] [PATCH 19/29] nir: fix up bit sizes for undefined alu sources
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Wed Mar 23 13:02:14 UTC 2016
On 22/03/16 17:37, Jason Ekstrand wrote:
> On Mar 22, 2016 8:18 AM, "Samuel Iglesias Gonsálvez" <siglesias at igalia.com>
> wrote:
>>
>>
>>
>> On 21/03/16 23:54, Jason Ekstrand wrote:
>>> On Mon, Mar 21, 2016 at 5:05 AM, Samuel Iglesias Gonsálvez <
>>> siglesias at igalia.com> wrote:
>>>
>>>> From: Iago Toral Quiroga <itoral at igalia.com>
>>>>
>>>> Undefined sources in alu operations don't have a valid bit size because
>>>> they are uninitialized. Simply ignoring undefined sources for bit size
>>>> validation is not enough since drivers can check and operate with the
>>>> bit-size and that can lead to issues later on. Instead, fix undefined
>>>> sources to always have a compatible bit size.
>>>>
>>>
>>> I'm not sure what I think about this. I think I'd rather have undefs
>>> simply have the right bitsize.
>>>
>>
>> With undefined sources you cannot get the bitsize from themselves
>> because it is not initialized.
>
> Doesn't patch 3 and the discussion on it imply that undefs should have
> valid sizes?
>
Oh right. I will discard this patch as undefs already have valid sizes.
Thanks,
Sam
>> In that case, we pick the bit size from
>> the ALU opcode's input definition. If it is unsized, then we use the
>> destination size.
>
> I dont think pulling the implicit size from the source size is ever
> correct. If you have an explicitly sized source that means it doesn't
> affect and isn't affected by the implicit size.
>
>> I think this is the right bitsize... or am I missing something?
>>
>> Sam
>>
>>>
>>>> v2 (Sam):
>>>> - Use helper to get type size from nir_alu_type.
>>>> ---
>>>> src/compiler/nir/nir_validate.c | 10 ++++++++++
>>>> 1 file changed, 10 insertions(+)
>>>>
>>>> diff --git a/src/compiler/nir/nir_validate.c
>>>> b/src/compiler/nir/nir_validate.c
>>>> index 9f18d1c..645c15a 100644
>>>> --- a/src/compiler/nir/nir_validate.c
>>>> +++ b/src/compiler/nir/nir_validate.c
>>>> @@ -180,9 +180,11 @@ validate_alu_src(nir_alu_instr *instr, unsigned
>>>> index, validate_state *state)
>>>>
>>>> unsigned num_components;
>>>> unsigned src_bit_size;
>>>> + bool is_undef = false;
>>>> if (src->src.is_ssa) {
>>>> src_bit_size = src->src.ssa->bit_size;
>>>> num_components = src->src.ssa->num_components;
>>>> + is_undef = src->src.ssa->parent_instr->type ==
>>>> nir_instr_type_ssa_undef;
>>>> } else {
>>>> src_bit_size = src->src.reg.reg->bit_size;
>>>> if (src->src.reg.reg->is_packed)
>>>> @@ -205,12 +207,20 @@ validate_alu_src(nir_alu_instr *instr, unsigned
>>>> index, validate_state *state)
>>>>
>>>> if (nir_alu_type_get_type_size(src_type)) {
>>>> /* This source has an explicit bit size */
>>>> + if (is_undef) {
>>>> + src_bit_size = nir_alu_type_get_type_size(src_type);
>>>> + src->src.ssa->bit_size = src_bit_size;
>>>> + }
>>>> assert(nir_alu_type_get_type_size(src_type) == src_bit_size);
>>>> } else {
>>>> if
>>>> (!nir_alu_type_get_type_size(nir_op_infos[instr->op].output_type)) {
>>>> unsigned dest_bit_size =
>>>> instr->dest.dest.is_ssa ? instr->dest.dest.ssa.bit_size
>>>> :
> instr->dest.dest.reg.reg->bit_size;
>>>> + if (is_undef) {
>>>> + src_bit_size = dest_bit_size;
>>>> + src->src.ssa->bit_size = dest_bit_size;
>>>> + }
>>>> assert(dest_bit_size == src_bit_size);
>>>> }
>>>> }
>>>> --
>>>> 2.5.0
>>>>
>>>> _______________________________________________
>>>> mesa-dev mailing list
>>>> mesa-dev at lists.freedesktop.org
>>>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>>>
>>>
>
More information about the mesa-dev
mailing list