Skip to content
  • Kenneth Graunke's avatar
    i965: Move 3-src subnr swizzle handling into the vec4 backend. · 53a9b622
    Kenneth Graunke authored
    
    
    While most align16 instructions only support a SubRegNum of 0 or 4
    (using swizzling to control the other channels), 3-src instructions
    actually support arbitrary SubRegNums.  When the RepCtrl bit is set,
    we believe it ignores the swizzle and uses the equivalent of a <0,1,0>
    region from the subnr.
    
    In the past, we adopted a vec4-centric approach of specifying subnr of
    0 or 4 and a swizzle, then having brw_eu_emit.c convert that to a proper
    SubRegNum.  This isn't a great fit for the scalar backend, where we
    don't set swizzles at all, and happily set subnrs in the range [0, 7].
    
    This patch changes brw_eu_emit.c to use subnr and swizzle directly,
    relying on the higher levels to set them sensibly.
    
    This should fix problems where scalar sources get copy propagated into
    3-src instructions in the FS backend.  I've only observed this with
    TES push model inputs, but I suppose it could happen in other cases.
    
    Signed-off-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: default avatarMatt Turner <mattst88@gmail.com>
    53a9b622