diff --git a/opencl/test/unit_test/device/device_caps_tests.cpp b/opencl/test/unit_test/device/device_caps_tests.cpp index da0c777cfe..48f20c6c46 100644 --- a/opencl/test/unit_test/device/device_caps_tests.cpp +++ b/opencl/test/unit_test/device/device_caps_tests.cpp @@ -1499,7 +1499,8 @@ HWTEST_F(QueueFamilyNameTest, givenTooBigQueueFamilyNameWhenGettingQueueFamilyNa EXPECT_ANY_THROW(device->getQueueFamilyName(name, EngineGroupType::MaxEngineGroups)); } -HWCMDTEST_F(IGFX_GEN8_CORE, DeviceGetCapsTest, givenSysInfoWhenDeviceCreatedThenMaxWorkGroupCalculatedCorrectly) { +using isPreGen12 = IsBeforeGfxCore; +HWTEST2_F(DeviceGetCapsTest, givenSysInfoWhenDeviceCreatedThenMaxWorkGroupSizeIsCalculatedCorrectly, isPreGen12) { HardwareInfo myHwInfo = *defaultHwInfo; GT_SYSTEM_INFO &mySysInfo = myHwInfo.gtSystemInfo; PLATFORM &myPlatform = myHwInfo.platform; @@ -1510,11 +1511,31 @@ HWCMDTEST_F(IGFX_GEN8_CORE, DeviceGetCapsTest, givenSysInfoWhenDeviceCreatedThen mySysInfo.ThreadCount = 16 * 8; myPlatform.usRevId = 0x4; auto device = std::make_unique(MockDevice::createWithNewExecutionEnvironment(&myHwInfo)); - auto minSimd = 8; + auto &hwHelper = HwHelper::get(myHwInfo.platform.eRenderCoreFamily); + auto minSimd = hwHelper.getMinimalSIMDSize(); - auto expectedWG = (mySysInfo.ThreadCount / mySysInfo.EUCount) * (mySysInfo.EUCount / mySysInfo.SubSliceCount) * minSimd; + size_t expectedWGSize = (mySysInfo.ThreadCount / mySysInfo.SubSliceCount) * minSimd; - EXPECT_EQ(expectedWG, device->sharedDeviceInfo.maxWorkGroupSize); + EXPECT_EQ(expectedWGSize, device->sharedDeviceInfo.maxWorkGroupSize); +} + +using isGen12Plus = IsAtLeastGfxCore; +HWTEST2_F(DeviceGetCapsTest, givenSysInfoWhenDeviceCreatedThenMaxWorkGroupSizeIsCalculatedCorrectly, isGen12Plus) { + HardwareInfo myHwInfo = *defaultHwInfo; + GT_SYSTEM_INFO &mySysInfo = myHwInfo.gtSystemInfo; + PLATFORM &myPlatform = myHwInfo.platform; + + mySysInfo.EUCount = 16; + mySysInfo.SubSliceCount = 4; + mySysInfo.DualSubSliceCount = 2; + mySysInfo.ThreadCount = 16 * 8; + myPlatform.usRevId = 0x4; + auto device = std::make_unique(MockDevice::createWithNewExecutionEnvironment(&myHwInfo)); + auto &hwHelper = HwHelper::get(myHwInfo.platform.eRenderCoreFamily); + auto minSimd = hwHelper.getMinimalSIMDSize(); + + size_t expectedWGSize = (mySysInfo.ThreadCount / mySysInfo.DualSubSliceCount) * minSimd; + EXPECT_EQ(expectedWGSize, device->sharedDeviceInfo.maxWorkGroupSize); } HWTEST_F(DeviceGetCapsTest, givenDSSDifferentThanZeroWhenDeviceCreatedThenDualSubSliceCountIsDifferentThanSubSliceCount) { diff --git a/shared/source/gen12lp/os_agnostic_hw_info_config_gen12lp.inl b/shared/source/gen12lp/os_agnostic_hw_info_config_gen12lp.inl index 5d69ed536d..fabed73edc 100644 --- a/shared/source/gen12lp/os_agnostic_hw_info_config_gen12lp.inl +++ b/shared/source/gen12lp/os_agnostic_hw_info_config_gen12lp.inl @@ -23,4 +23,9 @@ void HwInfoConfigHw::adjustSamplerState(void *sampler, const Hardwar if (DebugManager.flags.ForceSamplerLowFilteringPrecision.get()) { samplerState->setLowQualityFilter(SAMPLER_STATE::LOW_QUALITY_FILTER_ENABLE); } +} + +template <> +uint32_t HwInfoConfigHw::getMaxThreadsForWorkgroupInDSSOrSS(const HardwareInfo &hwInfo, uint32_t maxNumEUsPerSubSlice, uint32_t maxNumEUsPerDualSubSlice) const { + return getMaxThreadsForWorkgroup(hwInfo, maxNumEUsPerDualSubSlice); } \ No newline at end of file