@@ -2054,7 +2054,7 @@ namespace IGC
20542054 }
20552055 }
20562056
2057- static bool SetKernelProgram (COpenCLKernel* shader, DWORD simdMode)
2057+ static bool SetKernelProgram (OpenCLProgramContext* ctx, COpenCLKernel* shader, DWORD simdMode)
20582058 {
20592059 if (shader && shader->ProgramOutput ()->m_programSize > 0 )
20602060 {
@@ -2065,16 +2065,20 @@ namespace IGC
20652065 // shader->m_kernelInfo.m_executionEnivronment.PerThreadSpillFillSize =
20662066 // shader->ProgramOutput()->m_scratchSpaceUsedBySpills;
20672067 shader->m_kernelInfo .m_kernelProgram .simd32 = *shader->ProgramOutput ();
2068+ ctx->SetSIMDInfo (SIMD_SELECTED, SIMDMode::SIMD32, ShaderDispatchMode::NOT_APPLICABLE);
20682069 }
20692070 else if (simdMode == 16 )
20702071 {
20712072 shader->m_kernelInfo .m_kernelProgram .simd16 = *shader->ProgramOutput ();
2073+ ctx->SetSIMDInfo (SIMD_SELECTED, SIMDMode::SIMD16, ShaderDispatchMode::NOT_APPLICABLE);
20722074 }
20732075 else if (simdMode == 8 )
20742076 {
20752077 shader->m_kernelInfo .m_kernelProgram .simd8 = *shader->ProgramOutput ();
2078+ ctx->SetSIMDInfo (SIMD_SELECTED, SIMDMode::SIMD8, ShaderDispatchMode::NOT_APPLICABLE);
20762079 }
20772080 shader->m_kernelInfo .m_executionEnivronment .CompiledSIMDSize = simdMode;
2081+ shader->m_kernelInfo .m_executionEnivronment .SIMDInfo = ctx->GetSIMDInfo ();
20782082 return true ;
20792083 }
20802084 return false ;
@@ -2145,21 +2149,21 @@ namespace IGC
21452149 if (ctx->m_DriverInfo .sendMultipleSIMDModes () && (ctx->getModuleMetaData ()->csInfo .forcedSIMDSize == 0 ))
21462150 {
21472151 // Gather the kernel binary for each compiled kernel
2148- if (SetKernelProgram (simd32Shader, 32 ))
2152+ if (SetKernelProgram (ctx, simd32Shader, 32 ))
21492153 GatherDataForDriver (ctx, simd32Shader, pKernel, pFunc, pMdUtils);
2150- if (SetKernelProgram (simd16Shader, 16 ))
2154+ if (SetKernelProgram (ctx, simd16Shader, 16 ))
21512155 GatherDataForDriver (ctx, simd16Shader, pKernel, pFunc, pMdUtils);
2152- if (SetKernelProgram (simd8Shader, 8 ))
2156+ if (SetKernelProgram (ctx, simd8Shader, 8 ))
21532157 GatherDataForDriver (ctx, simd8Shader, pKernel, pFunc, pMdUtils);
21542158 }
21552159 else
21562160 {
21572161 // Gather the kernel binary only for 1 SIMD mode of the kernel
2158- if (SetKernelProgram (simd32Shader, 32 ))
2162+ if (SetKernelProgram (ctx, simd32Shader, 32 ))
21592163 GatherDataForDriver (ctx, simd32Shader, pKernel, pFunc, pMdUtils);
2160- else if (SetKernelProgram (simd16Shader, 16 ))
2164+ else if (SetKernelProgram (ctx, simd16Shader, 16 ))
21612165 GatherDataForDriver (ctx, simd16Shader, pKernel, pFunc, pMdUtils);
2162- else if (SetKernelProgram (simd8Shader, 8 ))
2166+ else if (SetKernelProgram (ctx, simd8Shader, 8 ))
21632167 GatherDataForDriver (ctx, simd8Shader, pKernel, pFunc, pMdUtils);
21642168 }
21652169 }
@@ -2195,6 +2199,12 @@ namespace IGC
21952199 if (!CompileSIMDSizeInCommon ())
21962200 return false ;
21972201
2202+ if (!m_Context->m_retryManager .IsFirstTry ())
2203+ {
2204+ m_Context->ClearSIMDInfo (simdMode, ShaderDispatchMode::NOT_APPLICABLE);
2205+ m_Context->SetSIMDInfo (SIMD_RETRY, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
2206+ }
2207+
21982208
21992209
22002210 // If forced SIMD Mode (by driver or regkey), then:
@@ -2275,11 +2285,14 @@ namespace IGC
22752285 {
22762286 if (simdMode == SIMDMode::SIMD32)
22772287 {
2288+ pCtx->SetSIMDInfo (SIMD_SKIP_HW, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
22782289 return SIMDStatus::SIMD_FUNC_FAIL;
22792290 }
22802291 }
22812292 else if (simdMode != SIMDMode::SIMD8)
22822293 {
2294+ pCtx->SetSIMDInfo (SIMD_SKIP_HW, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
2295+
22832296 // default simd8
22842297 return SIMDStatus::SIMD_FUNC_FAIL;
22852298 }
@@ -2307,19 +2320,22 @@ namespace IGC
23072320 case 8 :
23082321 if (simdMode == SIMDMode::SIMD16 || simdMode == SIMDMode::SIMD32)
23092322 {
2323+ pCtx->SetSIMDInfo (SIMD_SKIP_THGRPSIZE, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23102324 return SIMDStatus::SIMD_FUNC_FAIL;
23112325 }
23122326 break ;
23132327 case 16 :
23142328 if (simdMode == SIMDMode::SIMD8 || simdMode == SIMDMode::SIMD32)
23152329 {
2330+ pCtx->SetSIMDInfo (SIMD_SKIP_THGRPSIZE, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23162331 return SIMDStatus::SIMD_FUNC_FAIL;
23172332 }
23182333 EP.m_canAbortOnSpill = false ;
23192334 break ;
23202335 case 32 :
23212336 if (simdMode == SIMDMode::SIMD8 || simdMode == SIMDMode::SIMD16)
23222337 {
2338+ pCtx->SetSIMDInfo (SIMD_SKIP_THGRPSIZE, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23232339 return SIMDStatus::SIMD_FUNC_FAIL;
23242340 }
23252341 EP.m_canAbortOnSpill = false ;
@@ -2355,6 +2371,7 @@ namespace IGC
23552371 if (simdMode == SIMDMode::SIMD32 ||
23562372 (groupSize <= 8 && simdMode != SIMDMode::SIMD8))
23572373 {
2374+ pCtx->SetSIMDInfo (SIMD_SKIP_THGRPSIZE, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23582375 return SIMDStatus::SIMD_FUNC_FAIL;
23592376 }
23602377 }
@@ -2373,6 +2390,7 @@ namespace IGC
23732390 Simd32ProfitabilityAnalysis& PA = EP.getAnalysis <Simd32ProfitabilityAnalysis>();
23742391 if (!PA.isSimd16Profitable ())
23752392 {
2393+ pCtx->SetSIMDInfo (SIMD_SKIP_PERF, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23762394 return SIMDStatus::SIMD_PERF_FAIL;
23772395 }
23782396 }
@@ -2389,6 +2407,7 @@ namespace IGC
23892407 Simd32ProfitabilityAnalysis& PA = EP.getAnalysis <Simd32ProfitabilityAnalysis>();
23902408 if (!PA.isSimd32Profitable ())
23912409 {
2410+ pCtx->SetSIMDInfo (SIMD_SKIP_HW, simdMode, ShaderDispatchMode::NOT_APPLICABLE);
23922411 return SIMDStatus::SIMD_PERF_FAIL;
23932412 }
23942413 }
0 commit comments