@@ -895,7 +895,7 @@ CVariable* CShader::GetHWTID()
895895 m_HW_TID = GetNewVariable (1 , ISA_TYPE_UD, EALIGN_DWORD, true , 1 , " HWTID" );
896896 encoder.SetNoMask ();
897897 encoder.SetSrcSubReg (0 , 0 );
898- encoder.And (m_HW_TID, GetSR0 (), ImmToVariable (bitmask, ISA_TYPE_D ));
898+ encoder.And (m_HW_TID, GetSR0 (), ImmToVariable (bitmask, ISA_TYPE_UD ));
899899 encoder.Push ();
900900
901901 // Remove bit [10]
@@ -924,7 +924,7 @@ CVariable* CShader::GetHWTID()
924924 m_HW_TID = GetNewVariable (1 , ISA_TYPE_UD, EALIGN_DWORD, true , 1 , " HWTID" );
925925 encoder.SetNoMask ();
926926 encoder.SetSrcSubReg (0 , 0 );
927- encoder.And (m_HW_TID, GetSR0 (), ImmToVariable (bitmask, ISA_TYPE_D ));
927+ encoder.And (m_HW_TID, GetSR0 (), ImmToVariable (bitmask, ISA_TYPE_UD ));
928928 encoder.Push ();
929929
930930 // Remove bit [7:6]
@@ -946,42 +946,60 @@ CVariable* CShader::GetHWTID()
946946 // directly. HWTID is calculated by:
947947 // TID + 10 * [EUID:LogicalSSID]
948948
949- m_HW_TID = GetNewVariable (1 , ISA_TYPE_UD, EALIGN_DWORD, true , 1 ,
950- " HWTID" );
951- encoder.SetNoMask ();
952- encoder.SetSrcSubReg (0 , 0 );
949+ if (m_Platform->supportsWMTPForShaderType (m_ctx->type ))
950+ {
951+ m_HW_TID = GetNewVariable (1 , ISA_TYPE_UD, EALIGN_DWORD, true , 1 ,
952+ " HWTID" );
953+ encoder.SetNoMask ();
954+ encoder.SetSrcSubReg (0 , 0 );
953955
954- // m_HW_TID = msg0 & BITMASK(8)
955- encoder.And (m_HW_TID, GetMSG0 (), ImmToVariable (BITMASK (8 ), ISA_TYPE_UD));
956- encoder.Push ();
956+ // m_HW_TID = msg0 & BITMASK(8)
957+ encoder.And (m_HW_TID, GetMSG0 (), ImmToVariable (BITMASK (8 ), ISA_TYPE_UD));
958+ encoder.Push ();
957959
958- CVariable * euID = GetNewVariable (1 , ISA_TYPE_UD, EALIGN_DWORD,
959- true , 1 , " SR_4_6" );
960- // euID = sr0 & BITMASK(7)
961- encoder.And (euID, GetSR0 (), ImmToVariable (BITMASK (7 ), ISA_TYPE_UD));
962- encoder.Push ();
960+ CVariable* euID = GetNewVariable (1 , ISA_TYPE_UD, EALIGN_DWORD,
961+ true , 1 , " SR_4_6" );
962+ // euID = sr0 & BITMASK(7)
963+ encoder.And (euID, GetSR0 (), ImmToVariable (BITMASK (7 ), ISA_TYPE_UD));
964+ encoder.Push ();
963965
964- // m_HW_TID = m_HW_TID << 3
965- encoder.Shl (m_HW_TID, m_HW_TID, ImmToVariable (3 , ISA_TYPE_UD));
966- encoder.Push ();
966+ // m_HW_TID = m_HW_TID << 3
967+ encoder.Shl (m_HW_TID, m_HW_TID, ImmToVariable (3 , ISA_TYPE_UD));
968+ encoder.Push ();
967969
968- // euID = euID >> 4
969- encoder.Shr (euID, euID, ImmToVariable (4 , ISA_TYPE_UD));
970- encoder.Push ();
970+ // euID = euID >> 4
971+ encoder.Shr (euID, euID, ImmToVariable (4 , ISA_TYPE_UD));
972+ encoder.Push ();
971973
972- CVariable * tID = GetNewVariable (1 , ISA_TYPE_UD, EALIGN_DWORD,
973- true , 1 , " SR_0_3" );
974- // tID = sr0 & BITMASK(4)
975- encoder.And (tID, GetSR0 (), ImmToVariable (BITMASK (4 ), ISA_TYPE_UD));
976- encoder.Push ();
974+ CVariable* tID = GetNewVariable (1 , ISA_TYPE_UD, EALIGN_DWORD,
975+ true , 1 , " SR_0_3" );
976+ // tID = sr0 & BITMASK(4)
977+ encoder.And (tID, GetSR0 (), ImmToVariable (BITMASK (4 ), ISA_TYPE_UD));
978+ encoder.Push ();
977979
978- // m_HW_TID = m_HW_TID | euID
979- encoder.Or (m_HW_TID, m_HW_TID, euID);
980- encoder.Push ();
980+ // m_HW_TID = m_HW_TID | euID
981+ encoder.Or (m_HW_TID, m_HW_TID, euID);
982+ encoder.Push ();
983+
984+ // m_HW_TID = m_HW_TID * 10 + tID
985+ encoder.Mad (m_HW_TID, m_HW_TID, ImmToVariable (10 , ISA_TYPE_UD), tID);
986+ encoder.Push ();
987+ }
988+ else
989+ {
990+ uint32_t bitmask = BITMASK (18 );
991+ m_HW_TID = GetNewVariable (1 , ISA_TYPE_UD, EALIGN_DWORD, true , 1 , " HWTID" );
992+ encoder.SetNoMask ();
993+ encoder.SetSrcSubReg (0 , 0 );
994+ encoder.And (m_HW_TID, GetSR0 (), ImmToVariable (bitmask, ISA_TYPE_UD));
995+ encoder.Push ();
996+
997+ // Remove bit [13:12]
998+ RemoveBitRange (m_HW_TID, 12 , 2 );
999+ // Remove bit [7]
1000+ RemoveBitRange (m_HW_TID, 7 , 1 );
1001+ }
9811002
982- // m_HW_TID = m_HW_TID * 10 + tID
983- encoder.Mad (m_HW_TID, m_HW_TID, ImmToVariable (10 , ISA_TYPE_UD), tID);
984- encoder.Push ();
9851003 return m_HW_TID;
9861004 }
9871005
0 commit comments