Skip to content
  • Nicolai Hähnle's avatar
    tgsi: clarify the semantics of DFRACEXP · 3c78215a
    Nicolai Hähnle authored
    
    
    The status quo is quite the mess:
    
    1. tgsi_exec will do a per-channel computation, and store the dst[0]
       result (significand) correctly for each channel. The dst[1] result
       (exponent) will be written to the first bit set in the writemask.
       So per-component calculation only works partially.
    
    2. r600 will only do a single computation. It will replicate the
       exponent but not the significand.
    
    3. The docs pretend that there's per-component calculation, but even
       get dst[0] and dst[1] confused.
    
    4. Luckily, st_glsl_to_tgsi only ever emits single-component instructions,
       and kind-of assumes that everything is replicated, generating this for
       the dvec4 case:
    
         DFRACEXP TEMP[0].xy, TEMP[1].x, CONST[0][0].xyxy
         DFRACEXP TEMP[0].zw, TEMP[1].y, CONST[0][0].zwzw
         DFRACEXP TEMP[2].xy, TEMP[1].z, CONST[0][1].xyxy
         DFRACEXP TEMP[2].zw, TEMP[1].w, CONST[0][1].zwzw
    
    Settle on the simplest behavior, which is single-component calculation
    with replication, document it, and adjust tgsi_exec and r600.
    
    Reviewed-by: default avatarMarek Olšák <marek.olsak@amd.com>
    Tested-by: default avatarDieter Nützel <Dieter@nuetzel-hh.de>
    3c78215a