mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 00:24:58 +08:00
Refactor state base address programing 1/n
This refactor simplifies internal interfaces and implementations for different platforms. The change is introduction into adapting state base address helper class for all functional needs of the driver. Related-To: NEO-5055 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
29ed6ea077
commit
c7ca1b8cc7
@@ -15,7 +15,6 @@ using Family = NEO::Gen8Family;
|
|||||||
#include "shared/source/command_container/command_encoder_bdw_and_later.inl"
|
#include "shared/source/command_container/command_encoder_bdw_and_later.inl"
|
||||||
#include "shared/source/command_container/encode_compute_mode_bdw_and_later.inl"
|
#include "shared/source/command_container/encode_compute_mode_bdw_and_later.inl"
|
||||||
#include "shared/source/command_container/image_surface_state/compression_params_bdw_and_later.inl"
|
#include "shared/source/command_container/image_surface_state/compression_params_bdw_and_later.inl"
|
||||||
#include "shared/source/helpers/state_base_address_bdw.inl"
|
|
||||||
|
|
||||||
namespace NEO {
|
namespace NEO {
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2018-2022 Intel Corporation
|
* Copyright (C) 2018-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
@@ -11,12 +11,13 @@
|
|||||||
#include "shared/source/helpers/state_base_address_bdw_and_later.inl"
|
#include "shared/source/helpers/state_base_address_bdw_and_later.inl"
|
||||||
|
|
||||||
namespace NEO {
|
namespace NEO {
|
||||||
|
using Family = Gen8Family;
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
void StateBaseAddressHelper<Gen8Family>::programStateBaseAddress(
|
void StateBaseAddressHelper<Family>::programStateBaseAddress(
|
||||||
StateBaseAddressHelperArgs<Gen8Family> &args) {
|
StateBaseAddressHelperArgs<Family> &args) {
|
||||||
|
|
||||||
*args.stateBaseAddressCmd = Gen8Family::cmdInitStateBaseAddress;
|
*args.stateBaseAddressCmd = Family::cmdInitStateBaseAddress;
|
||||||
|
|
||||||
if (args.dsh) {
|
if (args.dsh) {
|
||||||
args.stateBaseAddressCmd->setDynamicStateBaseAddressModifyEnable(true);
|
args.stateBaseAddressCmd->setDynamicStateBaseAddressModifyEnable(true);
|
||||||
@@ -25,12 +26,7 @@ void StateBaseAddressHelper<Gen8Family>::programStateBaseAddress(
|
|||||||
args.stateBaseAddressCmd->setDynamicStateBufferSize(args.dsh->getHeapSizeInPages());
|
args.stateBaseAddressCmd->setDynamicStateBufferSize(args.dsh->getHeapSizeInPages());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.ioh) {
|
StateBaseAddressHelper<Family>::appendIohParameters(args);
|
||||||
args.stateBaseAddressCmd->setIndirectObjectBaseAddressModifyEnable(true);
|
|
||||||
args.stateBaseAddressCmd->setIndirectObjectBufferSizeModifyEnable(true);
|
|
||||||
args.stateBaseAddressCmd->setIndirectObjectBaseAddress(args.ioh->getHeapGpuBase());
|
|
||||||
args.stateBaseAddressCmd->setIndirectObjectBufferSize(args.ioh->getHeapSizeInPages());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.ssh) {
|
if (args.ssh) {
|
||||||
args.stateBaseAddressCmd->setSurfaceStateBaseAddressModifyEnable(true);
|
args.stateBaseAddressCmd->setSurfaceStateBaseAddressModifyEnable(true);
|
||||||
@@ -68,7 +64,7 @@ void StateBaseAddressHelper<Gen8Family>::programStateBaseAddress(
|
|||||||
|
|
||||||
args.stateBaseAddressCmd->setStatelessDataPortAccessMemoryObjectControlState(args.statelessMocsIndex);
|
args.stateBaseAddressCmd->setStatelessDataPortAccessMemoryObjectControlState(args.statelessMocsIndex);
|
||||||
|
|
||||||
appendStateBaseAddressParameters(args, true);
|
appendStateBaseAddressParameters(args);
|
||||||
}
|
}
|
||||||
template struct StateBaseAddressHelper<Gen8Family>;
|
template struct StateBaseAddressHelper<Family>;
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2018-2022 Intel Corporation
|
* Copyright (C) 2018-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
@@ -60,8 +60,7 @@ struct StateBaseAddressHelper {
|
|||||||
|
|
||||||
static void appendIohParameters(StateBaseAddressHelperArgs<GfxFamily> &args);
|
static void appendIohParameters(StateBaseAddressHelperArgs<GfxFamily> &args);
|
||||||
|
|
||||||
static void appendStateBaseAddressParameters(StateBaseAddressHelperArgs<GfxFamily> &args,
|
static void appendStateBaseAddressParameters(StateBaseAddressHelperArgs<GfxFamily> &args);
|
||||||
bool overrideBindlessSurfaceStateBase);
|
|
||||||
|
|
||||||
static void appendExtraCacheSettings(StateBaseAddressHelperArgs<GfxFamily> &args);
|
static void appendExtraCacheSettings(StateBaseAddressHelperArgs<GfxFamily> &args);
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
|
|||||||
StateBaseAddressHelperArgs<GfxFamily> &args) {
|
StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||||
|
|
||||||
*args.stateBaseAddressCmd = GfxFamily::cmdInitStateBaseAddress;
|
*args.stateBaseAddressCmd = GfxFamily::cmdInitStateBaseAddress;
|
||||||
bool overrideBindlessSurfaceStateBase = true;
|
|
||||||
|
|
||||||
const auto surfaceStateCount = getMaxBindlessSurfaceStates();
|
const auto surfaceStateCount = getMaxBindlessSurfaceStates();
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateSize(surfaceStateCount);
|
args.stateBaseAddressCmd->setBindlessSurfaceStateSize(surfaceStateCount);
|
||||||
@@ -51,8 +50,6 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
|
|||||||
|
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.globalHeapsBaseAddress);
|
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.globalHeapsBaseAddress);
|
||||||
|
|
||||||
overrideBindlessSurfaceStateBase = false;
|
|
||||||
} else {
|
} else {
|
||||||
if (args.dsh) {
|
if (args.dsh) {
|
||||||
args.stateBaseAddressCmd->setDynamicStateBaseAddressModifyEnable(true);
|
args.stateBaseAddressCmd->setDynamicStateBaseAddressModifyEnable(true);
|
||||||
@@ -67,8 +64,6 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
appendIohParameters(args);
|
|
||||||
|
|
||||||
if (args.setInstructionStateBaseAddress) {
|
if (args.setInstructionStateBaseAddress) {
|
||||||
args.stateBaseAddressCmd->setInstructionBaseAddressModifyEnable(true);
|
args.stateBaseAddressCmd->setInstructionBaseAddressModifyEnable(true);
|
||||||
args.stateBaseAddressCmd->setInstructionBaseAddress(args.instructionHeapBaseAddress);
|
args.stateBaseAddressCmd->setInstructionBaseAddress(args.instructionHeapBaseAddress);
|
||||||
@@ -104,7 +99,7 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
|
|||||||
|
|
||||||
args.stateBaseAddressCmd->setStatelessDataPortAccessMemoryObjectControlState(args.statelessMocsIndex);
|
args.stateBaseAddressCmd->setStatelessDataPortAccessMemoryObjectControlState(args.statelessMocsIndex);
|
||||||
|
|
||||||
appendStateBaseAddressParameters(args, overrideBindlessSurfaceStateBase);
|
appendStateBaseAddressParameters(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2020-2022 Intel Corporation
|
* Copyright (C) 2020-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
@@ -11,8 +11,7 @@ namespace NEO {
|
|||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
||||||
StateBaseAddressHelperArgs<GfxFamily> &args,
|
StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||||
bool overrideBindlessSurfaceStateBase) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2020-2022 Intel Corporation
|
* Copyright (C) 2020-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
@@ -11,10 +11,9 @@ namespace NEO {
|
|||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
||||||
StateBaseAddressHelperArgs<GfxFamily> &args,
|
StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||||
bool overrideBindlessSurfaceStateBase) {
|
|
||||||
|
|
||||||
if (overrideBindlessSurfaceStateBase && args.ssh) {
|
if (!args.useGlobalHeapsBaseAddress && args.ssh) {
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.ssh->getHeapGpuBase());
|
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.ssh->getHeapGpuBase());
|
||||||
uint32_t size = uint32_t(args.ssh->getMaxAvailableSpace() / 64) - 1;
|
uint32_t size = uint32_t(args.ssh->getMaxAvailableSpace() / 64) - 1;
|
||||||
@@ -29,6 +28,8 @@ void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
|||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateMemoryObjectControlState(args.gmmHelper->getMOCS(l3CacheOnPolicy));
|
args.stateBaseAddressCmd->setBindlessSurfaceStateMemoryObjectControlState(args.gmmHelper->getMOCS(l3CacheOnPolicy));
|
||||||
args.stateBaseAddressCmd->setBindlessSamplerStateMemoryObjectControlState(args.gmmHelper->getMOCS(l3CacheOnPolicy));
|
args.stateBaseAddressCmd->setBindlessSamplerStateMemoryObjectControlState(args.gmmHelper->getMOCS(l3CacheOnPolicy));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StateBaseAddressHelper<GfxFamily>::appendIohParameters(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2020-2022 Intel Corporation
|
* Copyright (C) 2020-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
@@ -11,15 +11,16 @@ namespace NEO {
|
|||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
||||||
StateBaseAddressHelperArgs<GfxFamily> &args,
|
StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||||
bool overrideBindlessSurfaceStateBase) {
|
|
||||||
|
|
||||||
if (overrideBindlessSurfaceStateBase && args.ssh) {
|
if (!args.useGlobalHeapsBaseAddress && args.ssh) {
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.ssh->getHeapGpuBase());
|
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.ssh->getHeapGpuBase());
|
||||||
uint32_t size = uint32_t(args.ssh->getMaxAvailableSpace() / 64) - 1;
|
uint32_t size = uint32_t(args.ssh->getMaxAvailableSpace() / 64) - 1;
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateSize(size);
|
args.stateBaseAddressCmd->setBindlessSurfaceStateSize(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StateBaseAddressHelper<GfxFamily>::appendIohParameters(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2022-2023 Intel Corporation
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
template <typename GfxFamily>
|
|
||||||
void StateBaseAddressHelper<GfxFamily>::appendExtraCacheSettings(StateBaseAddressHelperArgs<GfxFamily> &args) {
|
|
||||||
auto &productHelper = args.gmmHelper->getRootDeviceEnvironment().template getHelper<ProductHelper>();
|
|
||||||
auto cachePolicy = productHelper.getL1CachePolicy(args.isDebuggerActive);
|
|
||||||
args.stateBaseAddressCmd->setL1CachePolicyL1CacheControl(static_cast<typename STATE_BASE_ADDRESS::L1_CACHE_POLICY>(cachePolicy));
|
|
||||||
|
|
||||||
if (DebugManager.flags.ForceStatelessL1CachingPolicy.get() != -1 &&
|
|
||||||
DebugManager.flags.ForceAllResourcesUncached.get() == false) {
|
|
||||||
args.stateBaseAddressCmd->setL1CachePolicyL1CacheControl(static_cast<typename STATE_BASE_ADDRESS::L1_CACHE_POLICY>(DebugManager.flags.ForceStatelessL1CachingPolicy.get()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6,8 +6,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "shared/source/debug_settings/debug_settings_manager.h"
|
#include "shared/source/debug_settings/debug_settings_manager.h"
|
||||||
|
#include "shared/source/execution_environment/root_device_environment.h"
|
||||||
#include "shared/source/gmm_helper/cache_settings_helper.h"
|
#include "shared/source/gmm_helper/cache_settings_helper.h"
|
||||||
#include "shared/source/helpers/state_base_address_base.inl"
|
#include "shared/source/helpers/state_base_address_base.inl"
|
||||||
|
#include "shared/source/os_interface/hw_info_config.h"
|
||||||
|
|
||||||
namespace NEO {
|
namespace NEO {
|
||||||
|
|
||||||
@@ -24,8 +26,7 @@ void setSbaStatelessCompressionParams(typename GfxFamily::STATE_BASE_ADDRESS *st
|
|||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
||||||
StateBaseAddressHelperArgs<GfxFamily> &args,
|
StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||||
bool overrideBindlessSurfaceStateBase) {
|
|
||||||
using RENDER_SURFACE_STATE = typename GfxFamily::RENDER_SURFACE_STATE;
|
using RENDER_SURFACE_STATE = typename GfxFamily::RENDER_SURFACE_STATE;
|
||||||
using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
|
using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
|||||||
args.stateBaseAddressCmd->setGeneralStateBaseAddress(args.gmmHelper->decanonize(args.indirectObjectHeapBaseAddress));
|
args.stateBaseAddressCmd->setGeneralStateBaseAddress(args.gmmHelper->decanonize(args.indirectObjectHeapBaseAddress));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overrideBindlessSurfaceStateBase && args.ssh) {
|
if (!args.useGlobalHeapsBaseAddress && args.ssh) {
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.ssh->getHeapGpuBase());
|
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.ssh->getHeapGpuBase());
|
||||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
||||||
const auto surfaceStateCount = args.ssh->getMaxAvailableSpace() / sizeof(RENDER_SURFACE_STATE);
|
const auto surfaceStateCount = args.ssh->getMaxAvailableSpace() / sizeof(RENDER_SURFACE_STATE);
|
||||||
@@ -102,12 +103,25 @@ void StateBaseAddressHelper<GfxFamily>::programBindingTableBaseAddress(LinearStr
|
|||||||
*bindingTablePoolAlloc = cmd;
|
*bindingTablePoolAlloc = cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename GfxFamily>
|
|
||||||
void StateBaseAddressHelper<GfxFamily>::appendIohParameters(StateBaseAddressHelperArgs<GfxFamily> &args) {
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename GfxFamily>
|
template <typename GfxFamily>
|
||||||
uint32_t StateBaseAddressHelper<GfxFamily>::getMaxBindlessSurfaceStates() {
|
uint32_t StateBaseAddressHelper<GfxFamily>::getMaxBindlessSurfaceStates() {
|
||||||
return std::numeric_limits<uint32_t>::max();
|
return std::numeric_limits<uint32_t>::max();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename GfxFamily>
|
||||||
|
void StateBaseAddressHelper<GfxFamily>::appendExtraCacheSettings(StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||||
|
auto &productHelper = args.gmmHelper->getRootDeviceEnvironment().template getHelper<ProductHelper>();
|
||||||
|
auto cachePolicy = productHelper.getL1CachePolicy(args.isDebuggerActive);
|
||||||
|
args.stateBaseAddressCmd->setL1CachePolicyL1CacheControl(static_cast<typename STATE_BASE_ADDRESS::L1_CACHE_POLICY>(cachePolicy));
|
||||||
|
|
||||||
|
if (DebugManager.flags.ForceStatelessL1CachingPolicy.get() != -1 &&
|
||||||
|
DebugManager.flags.ForceAllResourcesUncached.get() == false) {
|
||||||
|
args.stateBaseAddressCmd->setL1CachePolicyL1CacheControl(static_cast<typename STATE_BASE_ADDRESS::L1_CACHE_POLICY>(DebugManager.flags.ForceStatelessL1CachingPolicy.get()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename GfxFamily>
|
||||||
|
void StateBaseAddressHelper<GfxFamily>::appendIohParameters(StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2020-2022 Intel Corporation
|
* Copyright (C) 2020-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
@@ -9,6 +9,5 @@
|
|||||||
#include "shared/source/xe_hpc_core/hw_cmds_xe_hpc_core_base.h"
|
#include "shared/source/xe_hpc_core/hw_cmds_xe_hpc_core_base.h"
|
||||||
|
|
||||||
namespace NEO {
|
namespace NEO {
|
||||||
#include "shared/source/helpers/state_base_address_xe_hpg_core_and_later.inl"
|
|
||||||
template struct StateBaseAddressHelper<XeHpcCoreFamily>;
|
template struct StateBaseAddressHelper<XeHpcCoreFamily>;
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Intel Corporation
|
* Copyright (C) 2021-2023 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
@@ -9,6 +9,5 @@
|
|||||||
#include "shared/source/xe_hpg_core/hw_cmds_xe_hpg_core_base.h"
|
#include "shared/source/xe_hpg_core/hw_cmds_xe_hpg_core_base.h"
|
||||||
|
|
||||||
namespace NEO {
|
namespace NEO {
|
||||||
#include "shared/source/helpers/state_base_address_xe_hpg_core_and_later.inl"
|
|
||||||
template struct StateBaseAddressHelper<XeHpgCoreFamily>;
|
template struct StateBaseAddressHelper<XeHpgCoreFamily>;
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ HWTEST2_F(XeHpAndLaterSbaTest, givenMemoryCompressionEnabledWhenAppendingSbaThen
|
|||||||
false, // areMultipleSubDevicesInContext
|
false, // areMultipleSubDevicesInContext
|
||||||
false // overrideSurfaceStateBaseAddress
|
false // overrideSurfaceStateBaseAddress
|
||||||
};
|
};
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
if (memoryCompressionState == MemoryCompressionState::Enabled) {
|
if (memoryCompressionState == MemoryCompressionState::Enabled) {
|
||||||
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::ENABLE_MEMORY_COMPRESSION_FOR_ALL_STATELESS_ACCESSES_ENABLED, sbaCmd.getEnableMemoryCompressionForAllStatelessAccesses());
|
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::ENABLE_MEMORY_COMPRESSION_FOR_ALL_STATELESS_ACCESSES_ENABLED, sbaCmd.getEnableMemoryCompressionForAllStatelessAccesses());
|
||||||
} else {
|
} else {
|
||||||
@@ -275,6 +275,6 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpAndLaterSbaTest, givenNonZeroInternalHeapBaseAd
|
|||||||
false, // areMultipleSubDevicesInContext
|
false, // areMultipleSubDevicesInContext
|
||||||
false // overrideSurfaceStateBaseAddress
|
false // overrideSurfaceStateBaseAddress
|
||||||
};
|
};
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
EXPECT_EQ(0ull, sbaCmd.getGeneralStateBaseAddress());
|
EXPECT_EQ(0ull, sbaCmd.getGeneralStateBaseAddress());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ BDWTEST_F(SbaTest, givenUsedBindlessBuffersWhenAppendStateBaseAddressParametersI
|
|||||||
false // overrideSurfaceStateBaseAddress
|
false // overrideSurfaceStateBaseAddress
|
||||||
};
|
};
|
||||||
|
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(0u, ssh.getUsed());
|
EXPECT_EQ(0u, ssh.getUsed());
|
||||||
EXPECT_EQ(0, memcmp(&stateBaseAddressReference, &stateBaseAddress, sizeof(STATE_BASE_ADDRESS)));
|
EXPECT_EQ(0, memcmp(&stateBaseAddressReference, &stateBaseAddress, sizeof(STATE_BASE_ADDRESS)));
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ HWTEST2_F(SbaTest, WhenAppendStateBaseAddressParametersIsCalledThenSBACmdHasBind
|
|||||||
false // isDebuggerActive
|
false // isDebuggerActive
|
||||||
};
|
};
|
||||||
|
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(ssh.getMaxAvailableSpace() / 64 - 1, stateBaseAddress.getBindlessSurfaceStateSize());
|
EXPECT_EQ(ssh.getMaxAvailableSpace() / 64 - 1, stateBaseAddress.getBindlessSurfaceStateSize());
|
||||||
EXPECT_EQ(ssh.getHeapGpuBase(), stateBaseAddress.getBindlessSurfaceStateBaseAddress());
|
EXPECT_EQ(ssh.getHeapGpuBase(), stateBaseAddress.getBindlessSurfaceStateBaseAddress());
|
||||||
@@ -337,7 +337,7 @@ HWTEST2_F(SbaTest, givenSbaWhenOverrideBindlessSurfaceBaseIsFalseThenBindlessSur
|
|||||||
false // isDebuggerActive
|
false // isDebuggerActive
|
||||||
};
|
};
|
||||||
|
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, false);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(0u, stateBaseAddress.getBindlessSurfaceStateBaseAddress());
|
EXPECT_EQ(0u, stateBaseAddress.getBindlessSurfaceStateBaseAddress());
|
||||||
}
|
}
|
||||||
@@ -576,12 +576,12 @@ HWTEST2_F(SbaTest, givenDebugFlagSetWhenAppendingSbaThenProgramCorrectL1CachePol
|
|||||||
for (const auto &input : testInputs) {
|
for (const auto &input : testInputs) {
|
||||||
DebugManagerStateRestore restore;
|
DebugManagerStateRestore restore;
|
||||||
DebugManager.flags.OverrideL1CachePolicyInSurfaceStateAndStateless.set(input.option);
|
DebugManager.flags.OverrideL1CachePolicyInSurfaceStateAndStateless.set(input.option);
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(input.cachePolicy, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(input.cachePolicy, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
|
|
||||||
DebugManager.flags.ForceAllResourcesUncached.set(true);
|
DebugManager.flags.ForceAllResourcesUncached.set(true);
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_UC, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_UC, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -854,3 +854,30 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, SbaTest,
|
|||||||
auto surfaceStateCount = StateBaseAddressHelper<FamilyType>::getMaxBindlessSurfaceStates();
|
auto surfaceStateCount = StateBaseAddressHelper<FamilyType>::getMaxBindlessSurfaceStates();
|
||||||
EXPECT_EQ(surfaceStateCount, sbaCmd.getBindlessSurfaceStateSize());
|
EXPECT_EQ(surfaceStateCount, sbaCmd.getBindlessSurfaceStateSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HWTEST2_F(SbaTest, GivenPlatformNotSupportingIndirectHeapBaseWhenProgramIndirectHeapThenNothingHappens, IsAtLeastXeHpCore) {
|
||||||
|
StateBaseAddressHelperArgs<FamilyType> args = {
|
||||||
|
0, // generalStateBase
|
||||||
|
0, // indirectObjectHeapBaseAddress
|
||||||
|
0, // instructionHeapBaseAddress
|
||||||
|
0, // globalHeapsBaseAddress
|
||||||
|
0, // surfaceStateBaseAddress
|
||||||
|
nullptr, // stateBaseAddressCmd
|
||||||
|
nullptr, // dsh
|
||||||
|
nullptr, // ioh
|
||||||
|
nullptr, // ssh
|
||||||
|
nullptr, // gmmHelper
|
||||||
|
nullptr, // hwInfo
|
||||||
|
0, // statelessMocsIndex
|
||||||
|
MemoryCompressionState::NotApplicable, // memoryCompressionState
|
||||||
|
false, // setInstructionStateBaseAddress
|
||||||
|
false, // setGeneralStateBaseAddress
|
||||||
|
false, // useGlobalHeapsBaseAddress
|
||||||
|
false, // isMultiOsContextCapable
|
||||||
|
false, // useGlobalAtomics
|
||||||
|
false, // areMultipleSubDevicesInContext
|
||||||
|
false, // overrideSurfaceStateBaseAddress
|
||||||
|
false // isDebuggerActive
|
||||||
|
};
|
||||||
|
StateBaseAddressHelper<FamilyType>::appendIohParameters(args);
|
||||||
|
}
|
||||||
|
|||||||
@@ -702,7 +702,7 @@ XE_HPC_CORETEST_F(XeHpcSbaTest, givenSpecificProductFamilyWhenAppendingSbaThenPr
|
|||||||
false, // areMultipleSubDevicesInContext
|
false, // areMultipleSubDevicesInContext
|
||||||
false // overrideSurfaceStateBaseAddress
|
false // overrideSurfaceStateBaseAddress
|
||||||
};
|
};
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_WBP, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_WBP, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
}
|
}
|
||||||
@@ -733,19 +733,19 @@ XE_HPC_CORETEST_F(XeHpcSbaTest, givenL1CachingOverrideWhenStateBaseAddressIsProg
|
|||||||
false, // areMultipleSubDevicesInContext
|
false, // areMultipleSubDevicesInContext
|
||||||
false // overrideSurfaceStateBaseAddress
|
false // overrideSurfaceStateBaseAddress
|
||||||
};
|
};
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(0u, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(0u, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
|
|
||||||
DebugManager.flags.ForceStatelessL1CachingPolicy.set(2u);
|
DebugManager.flags.ForceStatelessL1CachingPolicy.set(2u);
|
||||||
|
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(2u, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(2u, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
|
|
||||||
DebugManager.flags.ForceAllResourcesUncached.set(true);
|
DebugManager.flags.ForceAllResourcesUncached.set(true);
|
||||||
|
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(1u, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(1u, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,11 +107,11 @@ DG2TEST_F(Dg2SbaTest, givenSpecificProductFamilyWhenAppendingSbaThenProgramCorre
|
|||||||
false, // overrideSurfaceStateBaseAddress
|
false, // overrideSurfaceStateBaseAddress
|
||||||
false // isDebuggerActive
|
false // isDebuggerActive
|
||||||
};
|
};
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_WB, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_WB, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
|
|
||||||
args.isDebuggerActive = true;
|
args.isDebuggerActive = true;
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_WBP, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_WBP, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,19 +141,19 @@ DG2TEST_F(Dg2SbaTest, givenL1CachingOverrideWhenStateBaseAddressIsProgrammedThen
|
|||||||
false, // areMultipleSubDevicesInContext
|
false, // areMultipleSubDevicesInContext
|
||||||
false // overrideSurfaceStateBaseAddress
|
false // overrideSurfaceStateBaseAddress
|
||||||
};
|
};
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(0u, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(0u, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
|
|
||||||
DebugManager.flags.ForceStatelessL1CachingPolicy.set(2u);
|
DebugManager.flags.ForceStatelessL1CachingPolicy.set(2u);
|
||||||
|
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(2u, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(2u, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
|
|
||||||
DebugManager.flags.ForceAllResourcesUncached.set(true);
|
DebugManager.flags.ForceAllResourcesUncached.set(true);
|
||||||
|
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(1u, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(1u, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ XE_HPG_CORETEST_F(XeHpgSbaTest, givenSpecificProductFamilyWhenAppendingSbaThenPr
|
|||||||
false, // areMultipleSubDevicesInContext
|
false, // areMultipleSubDevicesInContext
|
||||||
false // overrideSurfaceStateBaseAddress
|
false // overrideSurfaceStateBaseAddress
|
||||||
};
|
};
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_WBP, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_POLICY_WBP, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
}
|
}
|
||||||
@@ -153,19 +153,19 @@ XE_HPG_CORETEST_F(XeHpgSbaTest, givenL1CachingOverrideWhenStateBaseAddressIsProg
|
|||||||
false, // areMultipleSubDevicesInContext
|
false, // areMultipleSubDevicesInContext
|
||||||
false // overrideSurfaceStateBaseAddress
|
false // overrideSurfaceStateBaseAddress
|
||||||
};
|
};
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(0u, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(0u, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
|
|
||||||
DebugManager.flags.ForceStatelessL1CachingPolicy.set(2u);
|
DebugManager.flags.ForceStatelessL1CachingPolicy.set(2u);
|
||||||
|
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(2u, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(2u, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
|
|
||||||
DebugManager.flags.ForceAllResourcesUncached.set(true);
|
DebugManager.flags.ForceAllResourcesUncached.set(true);
|
||||||
|
|
||||||
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
|
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args);
|
||||||
|
|
||||||
EXPECT_EQ(1u, sbaCmd.getL1CachePolicyL1CacheControl());
|
EXPECT_EQ(1u, sbaCmd.getL1CachePolicyL1CacheControl());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user