Use kernel info to determine if AUX resolves required

This commit decouples the logic for AUX resolves from set kernel arg handlers.

Related-To: NEO-5107

Change-Id: I4c2912dc18633bcaefddb03cc6966e859d95262c
Signed-off-by: Slawomir Milczarek <slawomir.milczarek@intel.com>
This commit is contained in:
Slawomir Milczarek
2020-10-03 23:11:39 +02:00
committed by sys_ocldev
parent 5826d3e105
commit 5f7b763ce5
10 changed files with 85 additions and 24 deletions

View File

@@ -27,6 +27,7 @@ class GraphicsAllocation;
struct AllocationData;
struct AllocationProperties;
struct HardwareCapabilities;
struct KernelInfo;
struct RootDeviceEnvironment;
struct PipeControlArgs;
@@ -99,7 +100,7 @@ class HwHelper {
virtual uint32_t getMaxThreadsForWorkgroup(const HardwareInfo &hwInfo, uint32_t maxNumEUsPerSubSlice) const;
virtual uint32_t getMetricsLibraryGenId() const = 0;
virtual uint32_t getMocsIndex(const GmmHelper &gmmHelper, bool l3enabled, bool l1enabled) const = 0;
virtual bool requiresAuxResolves() const = 0;
virtual bool requiresAuxResolves(const KernelInfo &kernelInfo) const = 0;
virtual bool tilingAllowed(bool isSharedContext, bool isImage1d, bool forceLinearStorage) = 0;
virtual uint32_t getBarriersCountFromHasBarriers(uint32_t hasBarriers) = 0;
virtual uint32_t calculateAvailableThreadCount(PRODUCT_FAMILY family, uint32_t grfCount, uint32_t euCount,
@@ -133,6 +134,7 @@ class HwHelper {
protected:
virtual LocalMemoryAccessMode getDefaultLocalMemoryAccessMode(const HardwareInfo &hwInfo) const = 0;
virtual bool hasStatelessAccessToBuffer(const KernelInfo &kernelInfo) const = 0;
HwHelper() = default;
};
@@ -250,7 +252,7 @@ class HwHelperHw : public HwHelper {
uint32_t getMocsIndex(const GmmHelper &gmmHelper, bool l3enabled, bool l1enabled) const override;
bool requiresAuxResolves() const override;
bool requiresAuxResolves(const KernelInfo &kernelInfo) const override;
bool tilingAllowed(bool isSharedContext, bool isImage1d, bool forceLinearStorage) override;
@@ -312,6 +314,7 @@ class HwHelperHw : public HwHelper {
protected:
LocalMemoryAccessMode getDefaultLocalMemoryAccessMode(const HardwareInfo &hwInfo) const override;
bool hasStatelessAccessToBuffer(const KernelInfo &kernelInfo) const override;
static const AuxTranslationMode defaultAuxTranslationMode;
HwHelperHw() = default;

View File

@@ -317,8 +317,8 @@ uint32_t HwHelperHw<GfxFamily>::getMetricsLibraryGenId() const {
}
template <typename GfxFamily>
inline bool HwHelperHw<GfxFamily>::requiresAuxResolves() const {
return true;
inline bool HwHelperHw<GfxFamily>::requiresAuxResolves(const KernelInfo &kernelInfo) const {
return hasStatelessAccessToBuffer(kernelInfo);
}
template <typename GfxFamily>
@@ -447,6 +447,17 @@ inline LocalMemoryAccessMode HwHelperHw<GfxFamily>::getDefaultLocalMemoryAccessM
return LocalMemoryAccessMode::Default;
}
template <typename GfxFamily>
inline bool HwHelperHw<GfxFamily>::hasStatelessAccessToBuffer(const KernelInfo &kernelInfo) const {
bool hasStatelessAccessToBuffer = false;
for (uint32_t i = 0; i < kernelInfo.kernelArgInfo.size(); ++i) {
if (kernelInfo.kernelArgInfo[i].isBuffer) {
hasStatelessAccessToBuffer |= !kernelInfo.kernelArgInfo[i].pureStatefulBufferAccess;
}
}
return hasStatelessAccessToBuffer;
}
template <typename GfxFamily>
size_t MemorySynchronizationCommands<GfxFamily>::getSizeForFullCacheFlush() {
return sizeof(typename GfxFamily::PIPE_CONTROL);