----- Original Message -----
> The next open question I have is whether this warrants additions to
> the tgsi_opcode_info struct, mainly whether the return value is
> uint/int/float,
> and whether then src regs are uint/int/float, I'm not 100% that all
> opcodes always take all int/uint/float srcs, but my memory is a bit
> hazy on what the outliers might be.

I agree that adding this sort of info to tgsi_opcode_info would be a code 
typing saver for all drivers.

However I never looked at the integer/double opcode set, but from quickly 
skimming d3d10/11 headers, there are three buckets:
- arithmetic: (u)ints -> (u)int
- comparison: (u)ints -> mask (and I don't know what's the semantic of these 
masks: 0/~0, 1.0f/0.0f, 0/1, or what)
- conversion: float <-> (u)int


And likewise to double, minus the unsigned vs signed split.

So, probably we need tgsi_opcode_info to distuinguish the source type vs dest 
type, but we likely don't need per-source types.



A much more intricate question, is how to represent boolean mask in a mixed 
type world. My guess is one of two:

a) is that there are two we should not mandate the bit representation of a 
boolean (drivers are free to implement booleans as 1.0f/0.0f, 0/~0, etc). The 
only constrainsts is that the state tracker never tries to write a boolean 
directly to an output.

b) if by some miracle, all hardware implements boolean vectors in the same way, 
then we could stick to that.  (For sse/avx/llvm-2.9, the natural way to 
represent a boolean vector is a bitmask (0/~0). llvm 3.0 finally added support 
for bit vectors.)



Jose
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to