@@ -8294,6 +8294,16 @@ int IR_Builder::translateVISARTWrite3DInst(
82948294 if (cntrls.isCoarseMode )
82958295 fc |= 0x1 << COARSE_PIXEL_OUTPUT_ENABLE;
82968296#define CPS_COUNTER_EXT_MSG_DESC_OFFSET 16
8297+
8298+ uint16_t extFuncCtrl = 0 ;
8299+ if (cntrls.isNullRT && getPlatform () >= GENX_ICLLP)
8300+ {
8301+ // extFuncCtrl is the 16:31 bits of extDesc. NullRT is the bit 20 of extDesc.
8302+ // That says NullRT is the bit 4 of extFuncCtrl.
8303+ #define NULL_RENDER_TARGET 4
8304+ extFuncCtrl |= 0x1 << NULL_RENDER_TARGET;
8305+ }
8306+
82978307 if (useSplitSend || cpsCounter)
82988308 {
82998309 G4_SendMsgDescriptor *msgDesc = NULL ;
@@ -8303,7 +8313,7 @@ int IR_Builder::translateVISARTWrite3DInst(
83038313 {
83048314 m0 = Create_Src_Opnd_From_Dcl (msg, getRegionStride1 ());
83058315 msgDesc = createSendMsgDesc (fc, 0 , numHeaderGRF, SFID::DP_WRITE, numRows,
8306- 0 , SendAccess::WRITE_ONLY, surface);
8316+ extFuncCtrl , SendAccess::WRITE_ONLY, surface);
83078317 msgDesc->setHeaderPresent (useHeader);
83088318 }
83098319 else
@@ -8312,16 +8322,15 @@ int IR_Builder::translateVISARTWrite3DInst(
83128322 {
83138323 // direct imm is a-ok for ext desc
83148324 msgDesc = createSendMsgDesc (fc, 0 , numRows, SFID::DP_WRITE, 0 ,
8315- 0 , SendAccess::WRITE_ONLY, surface);
8325+ extFuncCtrl , SendAccess::WRITE_ONLY, surface);
83168326 }
83178327 else
83188328 {
8319-
83208329 assert (rtIndex->isImm () && " RTIndex must be imm at this point" );
83218330 uint8_t RTIndex = (uint8_t )rtIndex->asImm ()->getImm () & 0x7 ;
83228331 uint32_t desc = G4_SendMsgDescriptor::createDesc (fc, false , numRows, 0 );
83238332 uint32_t extDesc = G4_SendMsgDescriptor::createMRTExtDesc (cntrls.s0aPresent , RTIndex,
8324- false , 0 );
8333+ false , 0 , extFuncCtrl );
83258334 msgDesc = createGeneralMsgDesc (desc, extDesc, SendAccess::WRITE_ONLY, surface);
83268335
83278336 if (!canEncodeFullExtDesc ())
0 commit comments