On 01/07/2010 12:50 PM, José Fonseca wrote: > On Wed, 2010-01-06 at 15:56 -0800, Zack Rusin wrote: >> On Wednesday 06 January 2010 14:56:35 Igor Oliveira wrote: >>> Hi, >>> >>> the patches add support to double opcodes in gallium/tgsi. >>> It just implement some opcodes i like to know if someone has >>> suggestion about the patches. >> >> Hi Igor, first of all this should probably go into a feature branch because >> it'll be a bit of work before it's usable. >> The patches that you've proposed are unlikely what we'll want for double's. >> Keith, Michal and I discussed this on the phone a few days back and the >> biggest issue with doubles is that unlike the switch between the integers >> and >> floats they actually need bigger registers to accomodate them. Given that >> the >> registers in TGSI are untyped and its up to instructions to define the type >> it >> becomes hard for drivers to figure out the size of the registers beforehand. >> The solution that I personally like and what seems to becoming the facto >> standard when dealing with double support is having double precision values >> represented by a pair of registers. Outputs are >> either the pair yx or to the pair wz, where the msb is stored in y/w. For >> example: >> Idata 3.0 => (0x4008000000000000) in register r looks like: >> r.w = 0x40080000 ;high dword >> r.z = 0x00000000 ;low dword >> Or: >> r.y = 0x40080000 ;high dword >> r.x = 0x00000000 ;low dword >> All source double inputs must be in xy (after swizzle operations). For >> example: >> d_add r1.xy, r2.xy, r2.xy >> Or >> d_add r1.zw, r2.xy, r2.xy >> Each computes twice the value in r2.xy, and places the result in either xy >> or >> zw. >> This assures that the register size stays constant. Of course the >> instruction >> semantics are different to the typical 4-component wide TGSI instructions, >> but >> that, I think, is a lot less of an issue. >> >> z > > I wonder if storage size of registers is such a big issue. Knowing the > storage size of a register matters mostly for indexable temps. For > regular assignments and intermediate computations storage everything > gets transformed in SSA form, and the register size can be determined > from the instructions where it is generated/used and there is no need > for consistency. > > For example, imagine a shader that has: > > TEX TEMP[0], SAMP[0], IN[0] // SAMP[0] is a PIPE_FORMAT_R32G32B32_FLOAT > --> use 4x32bit float registers > MAX ?? > ... > TEX TEMP[0], SAMP[1], IN[0] // SAMP[1] is a > PIPE_FORMAT_R64G64B64A64_FLOAT --> use 4x64bit double registers > DMAX ????, TEMP[0], ??? > ... > TEX TEMP[0], SAMP[2], IN[0] // texture 0 and rendertarget are both > PIPE_FORMAT_R8G8B8A8_UNORM --> use 4x8bit unorm registers > MOV OUT[0], TEMP[0] > > etc. > TEX will output floats, independently of the bound texture, so this code makes no sense to me. I do *not* (want to have to) know what will be bound to the sampler in advance, or produce a new shader for every different format.
If TEX is to output doubles, make it D_TEX. > There is actually programmable 3d hardware out there that has special > 4x8bit registers, and for performance the compiler has to deduct where > to use those 4xbit. llvmpipe will need to do similar thing, as the > smaller the bit-width the higher the throughput. And at least current > gallium statetrackers will reuse temps with no attempt to maintain > consistency in use. > > So if the compilers already need to deal with this, if this notion that > registers are 128bits is really necessary, and will prevail in the long > term. > > Jose > > > ------------------------------------------------------------------------------ > This SF.Net email is sponsored by the Verizon Developer Community > Take advantage of Verizon's best-in-class app development support > A streamlined, 14 day to market process makes app distribution fast and easy > Join now and get one step closer to millions of Verizon customers > http://p.sf.net/sfu/verizon-dev2dev > _______________________________________________ > Mesa3d-dev mailing list > Mesa3d-dev@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mesa3d-dev ------------------------------------------------------------------------------ This SF.Net email is sponsored by the Verizon Developer Community Take advantage of Verizon's best-in-class app development support A streamlined, 14 day to market process makes app distribution fast and easy Join now and get one step closer to millions of Verizon customers http://p.sf.net/sfu/verizon-dev2dev _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev