On 13.11.2011 17:32, Christoph Bumiller wrote: > On 13.11.2011 17:10, Marek Olšák wrote: >> I am guessing there is no type info because TGSI shaders are allowed >> to use uint, sint, and float instructions on the same register without >> type conversions (it would be possible to generate such usage with >> GL_ARB_shader_bit_enconding, also GL_NV_gpu_program4 has typeless >> registers too). I think GLSL has types because it's a typed language, >> not because it's needed for the underlying implementation. Do all >> drivers need such info or is it just llvmpipe that would make use of >> it? > If you don't have typed values in your backend IR and the hardware > doesn't have dedicated integer and float registers, you don't need type > info. > > With llvm you have both typed values and, for x86, different registers > for integers and floats, so it seems it would be very helpful not to > destroy all that information (gallium's favourite thing to do) before > passing shaders to the driver.
Actually never mind, I just realized TEMPs are all stored in memory in llvmpipe, so you can just load into a value of the appropriate type, as determined by the instruction. For example, in lp_bld_tgsi_soa.c, emit_fetch, FILE_TEMPORARY case you have: " cast temps_array pointer to float* " -- just do the same with int or whatever type your require and you should be fine. > For nv50 and nvc0 I don't need to know the type ... for ints and floats. > > *But* for doubles (any kind of value that occupies multiple TGSI > register components) the driver's internal IR will give me the same > headache that you will have for llvmpipe when you can't be sure whether > you need 1 or 2 IR values for TEMP[i].xy. > > So, an issue with types will come up for other drivers, too, eventually. > > The SM4 IR does the same as TGSI though and also doesn't provide type > information, so the problem should be solveable, but the solution might > not be pretty. > >> It's like you said: Right now TGSI temporaries are like unions in C. >> Only the instructions are typed (MAX vs IMAX vs UMAX). >> >> Marek >> >> On Sun, Nov 13, 2011 at 4:06 PM, Dave Airlie <airl...@gmail.com> wrote: >>> Hi guys, >>> >>> Just been looking at llvmpipe integer support and it seems like we >>> lose some information about the type of data stored into temporaries, >>> >>> after st_glsl_to_cpp we no longer know what type the temporaries are, >>> and llvm would really like to know and I can't see any reason that >>> TGSI doesn't contain the info. Having untyped temp decls means we'd >>> have to allocate some sort of "union" via aliases I guess in llvmpipe >>> for all temps so we can store int/float in them. >>> >>> I've attached a run of glsl-vs-loop from llvmpipe with integer opcodes >>> forced on. (llvmpipe-int-test branch of my repo). >>> >>> Dave. >>> >>> _______________________________________________ >>> mesa-dev mailing list >>> mesa-dev@lists.freedesktop.org >>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev >>> >>> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev