On Thu, 2016-02-11 at 19:12 -0800, Kenneth Graunke wrote: > On Thursday, February 11, 2016 5:49:55 PM PST Matt Turner wrote: > > On Thu, Feb 11, 2016 at 3:33 PM, Francisco Jerez <curroje...@riseup.net> > wrote: > > > Would be really nice if we could also get rid of reg_offset as we're at > > > it. reg and subreg_offset basically represent the same thing but with > > > different units, couldn't we just have a single offset field in bytes? > > > Should it be part of brw_reg or backend_reg? I think I would lean > > > towards backend_reg. In that case does it make sense to move this into > > > brw_reg now only to move it back to backend_reg later on? > > > > That would be nice. > > > > I'm just not sure how to do it. brw_reg has to have the subnr field, > > and it's nice if that's the field the higher levels use too. > > > > I wonder -- is it possible that we could just get rid of reg_offset > > too? For gathering data we have load_payload, so it's not useful > > there. I think it's mainly useful for accessing elements of texturing > > results. Is doubt there is a way we could avoid that though? > > I disagree - I don't think this would be nice at all. > > When we designed the IR, we needed something to handle cases like > texturing results, where we actually need to store a whole vec4, > and can't break it into separate scalar components. (Note that > messages used MRFs; we didn't even know about send-from-GRF.) > > To handle this, Eric created an abstraction of "virtual registers with > size > 1", where we basically have an array of registers, each of which > holds a single scalar value. It can be thought of as a vecN, and > reg_offset is the array index - v[i] - selecting each of the logically > contiguous components. reg_offset only makes sense on these large > virtual registers - it has no meaning for real hardware registers. > > In contrast, subreg_offset (which came later) offered a way to access > particular channels of a single hardware register, such as g0.2. We > added this later to make the IR more expressive. > > While these are both offsets, they serve very different purposes. > > Replacing subreg_offset with subnr makes a lot of sense to me, as > both are basically a way to provide a byte offset for the start of > a register region, allowing unaligned register access. But reg_offset > is a different beast. > > If you want to be rid of it, then perhaps we should consider removing > the "VGRF of size > 1" abstraction. One could imagine a system where > we allocate separate VRFs for each scalar value, but record that > "VRFs 4, 12, and 63 need to be contiguous", passing that information > to the register allocator. There are certainly other fine approaches. > > I would also humbly request that you wait until FP64 lands before making > any major changes. It's very easy to conflate type size, number of SIMD > channels, and register offsets, and a lot of the FP64 work is fixing > places that are confused about that. I'd really like to avoid making > our Igalia friends' lives harder by making them rebase 100 patches on > IR redesigns.
Thanks Ken for thinking about us :) I would definitely appreciate this! The patch count for fp64 is already above 150 and rebasing it on top of changes like these sounds quite scary to me. Iago _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev