fix: Set compression parameter when resource imported

Related-To: NEO-12375

Signed-off-by: Aravind Gopalakrishnan <aravind.gopalakrishnan@intel.com>
This commit is contained in:
Aravind Gopalakrishnan
2025-07-08 16:03:20 +00:00
committed by Compute-Runtime-Automation
parent ec0e493ca8
commit ed04190d77
7 changed files with 104 additions and 0 deletions

View File

@@ -77,7 +77,12 @@ Gmm::Gmm(GmmHelper *gmmHelper, const void *alignedPtr, size_t alignedSize, size_
Gmm::Gmm(GmmHelper *gmmHelper, GMM_RESOURCE_INFO *inputGmm) : Gmm(gmmHelper, inputGmm, false) {}
Gmm::Gmm(GmmHelper *gmmHelper, GMM_RESOURCE_INFO *inputGmm, bool openingHandle) : gmmHelper(gmmHelper) {
auto &rootDeviceEnvironment = gmmHelper->getRootDeviceEnvironment();
auto &gfxCoreHelper = rootDeviceEnvironment.getHelper<GfxCoreHelper>();
gmmResourceInfo.reset(GmmResourceInfo::create(gmmHelper->getClientContext(), inputGmm, openingHandle));
if (gfxCoreHelper.isCompressionAppliedForImportedResource(*this)) {
compressionEnabled = true;
}
applyDebugOverrides();
}

View File

@@ -146,6 +146,7 @@ class GfxCoreHelper {
virtual size_t getTimestampPacketAllocatorAlignment() const = 0;
virtual size_t getSingleTimestampPacketSize() const = 0;
virtual void applyAdditionalCompressionSettings(Gmm &gmm, bool isNotCompressed) const = 0;
virtual bool isCompressionAppliedForImportedResource(Gmm &gmm) const = 0;
virtual void applyRenderCompressionFlag(Gmm &gmm, uint32_t isCompressed) const = 0;
virtual bool unTypedDataPortCacheFlushRequired() const = 0;
virtual bool isEngineTypeRemappingToHwSpecificRequired() const = 0;
@@ -408,6 +409,7 @@ class GfxCoreHelperHw : public GfxCoreHelper {
static size_t getSingleTimestampPacketSizeHw();
void applyAdditionalCompressionSettings(Gmm &gmm, bool isNotCompressed) const override;
bool isCompressionAppliedForImportedResource(Gmm &gmm) const override;
void applyRenderCompressionFlag(Gmm &gmm, uint32_t isCompressed) const override;

View File

@@ -11,6 +11,7 @@
#include "shared/source/execution_environment/root_device_environment.h"
#include "shared/source/gmm_helper/gmm.h"
#include "shared/source/gmm_helper/gmm_helper.h"
#include "shared/source/gmm_helper/resource_info.h"
#include "shared/source/helpers/aligned_memory.h"
#include "shared/source/helpers/basic_math.h"
#include "shared/source/helpers/bit_helpers.h"
@@ -662,6 +663,16 @@ size_t GfxCoreHelperHw<GfxFamily>::getPreemptionAllocationAlignment() const {
template <typename GfxFamily>
void GfxCoreHelperHw<GfxFamily>::applyAdditionalCompressionSettings(Gmm &gmm, bool isNotCompressed) const {}
template <typename GfxFamily>
bool GfxCoreHelperHw<GfxFamily>::isCompressionAppliedForImportedResource(Gmm &gmm) const {
auto gmmFlags = gmm.gmmResourceInfo->getResourceFlags();
if (gmmFlags->Info.MediaCompressed || gmmFlags->Info.RenderCompressed) {
return true;
}
return false;
}
template <typename GfxFamily>
void GfxCoreHelperHw<GfxFamily>::applyRenderCompressionFlag(Gmm &gmm, uint32_t isCompressed) const {
gmm.resourceParams.Flags.Info.RenderCompressed = isCompressed;

View File

@@ -6,6 +6,7 @@
*/
#include "shared/source/gmm_helper/gmm.h"
#include "shared/source/gmm_helper/resource_info.h"
#include "shared/source/helpers/gfx_core_helper.h"
namespace NEO {
@@ -23,6 +24,16 @@ void GfxCoreHelperHw<Family>::applyAdditionalCompressionSettings(Gmm &gmm, bool
}
}
template <>
bool GfxCoreHelperHw<Family>::isCompressionAppliedForImportedResource(Gmm &gmm) const {
auto gmmFlags = gmm.gmmResourceInfo->getResourceFlags();
if (!gmmFlags->Info.NotCompressed) {
return true;
}
return false;
}
template <typename GfxFamily>
const EngineInstancesContainer GfxCoreHelperHw<GfxFamily>::getGpgpuEngineInstances(const RootDeviceEnvironment &rootDeviceEnvironment) const {
auto &hwInfo = *rootDeviceEnvironment.getHardwareInfo();

View File

@@ -170,6 +170,18 @@ HWTEST2_F(GmmAdditionalCompressionSettingsTests, givenEnabledAndPreferredE2ECWhe
EXPECT_TRUE(gmm->isCompressionEnabled());
}
HWTEST2_F(GmmAdditionalCompressionSettingsTests, givenGmmCreatedFromExistingGmmWithCompressionThenCompressionTrueForSecondResource, IsAtLeastXe2HpgCore) {
auto gmm = std::make_unique<MockGmm>(getGmmHelper());
gmm->resourceParams.Flags.Info.NotCompressed = 0;
auto &gfxCoreHelper = this->executionEnvironment->rootDeviceEnvironments[0]->getHelper<GfxCoreHelper>();
gfxCoreHelper.applyAdditionalCompressionSettings(*gmm, false);
EXPECT_EQ(0u, gmm->resourceParams.Flags.Info.NotCompressed);
auto gmmRes2 = std::make_unique<Gmm>(getGmmHelper(), gmm->gmmResourceInfo->peekGmmResourceInfo(), false);
EXPECT_TRUE(gmmRes2->isCompressionEnabled());
}
HWTEST2_F(GmmAdditionalCompressionSettingsTests, givenDisabledE2ECAndEnabledDebugFlagWhenApplyingForBuffersThenSetValidFlags, IsAtLeastXe2HpgCore) {
DebugManagerStateRestore restore;
GmmRequirements gmmRequirements{};

View File

@@ -1446,6 +1446,42 @@ TEST_F(GmmCompressionTests, givenMediaCompressedImageApplyAuxFlagsForImageThenSe
EXPECT_TRUE(gmm.isCompressionEnabled());
}
HWTEST2_F(GmmCompressionTests, givenGmmCreatedFromExistingGmmWithRenderCompressionThenCompressionTrueForSecondResource, IsAtMostXeCore) {
GmmRequirements gmmRequirements{};
gmmRequirements.allowLargePages = true;
gmmRequirements.preferCompressed = false;
MockGmm gmm(getGmmHelper(), nullptr, 1, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements);
auto flags = gmm.gmmResourceInfo->getResourceFlags();
flags->Gpu.CCS = true;
flags->Gpu.UnifiedAuxSurface = true;
flags->Info.MediaCompressed = true;
flags->Info.RenderCompressed = false;
gmm.resourceParams.Flags.Info.MediaCompressed = false;
gmm.resourceParams.Flags.Info.RenderCompressed = true;
gmm.setupImageResourceParams(imgInfo, true);
EXPECT_TRUE(gmm.isCompressionEnabled());
auto gmmRes2 = std::make_unique<Gmm>(getGmmHelper(), gmm.gmmResourceInfo->peekGmmResourceInfo(), false);
EXPECT_TRUE(gmmRes2->isCompressionEnabled());
}
HWTEST2_F(GmmCompressionTests, givenGmmCreatedFromExistingGmmWithCompressionDisabledThenCompressionFalseForSecondResource, IsAtMostXeCore) {
localPlatformDevice->capabilityTable.ftrRenderCompressedImages = false;
GmmRequirements gmmRequirements{};
gmmRequirements.allowLargePages = true;
gmmRequirements.preferCompressed = false;
MockGmm gmm(getGmmHelper(), nullptr, 1, 0, GMM_RESOURCE_USAGE_OCL_BUFFER, {}, gmmRequirements);
gmm.resourceParams.Flags.Info.MediaCompressed = false;
gmm.resourceParams.Flags.Info.RenderCompressed = false;
gmm.setupImageResourceParams(imgInfo, false);
EXPECT_FALSE(gmm.isCompressionEnabled());
auto gmmRes2 = std::make_unique<Gmm>(getGmmHelper(), gmm.gmmResourceInfo->peekGmmResourceInfo(), false);
EXPECT_FALSE(gmmRes2->isCompressionEnabled());
}
TEST_F(GmmCompressionTests, givenRenderCompressedImageApplyAuxFlagsForImageThenSetFlagsToCompressed) {
GmmRequirements gmmRequirements{};
gmmRequirements.allowLargePages = true;

View File

@@ -11,6 +11,7 @@
#include "shared/source/command_container/command_encoder.h"
#include "shared/source/command_container/encode_surface_state.h"
#include "shared/source/gmm_helper/gmm_helper.h"
#include "shared/source/gmm_helper/resource_info.h"
#include "shared/source/helpers/aligned_memory.h"
#include "shared/source/helpers/gfx_core_helper.h"
#include "shared/source/helpers/pipe_control_args.h"
@@ -1258,6 +1259,32 @@ HWTEST_F(GfxCoreHelperTest, whenSetCompressedFlagThenProperFlagSet) {
EXPECT_EQ(0u, gmm->resourceParams.Flags.Info.RenderCompressed);
}
HWTEST2_F(GfxCoreHelperTest, whenSetNotCompressedFlagThenProperValueReturned, IsAtLeastXe2HpgCore) {
auto &gfxCoreHelper = getHelper<GfxCoreHelper>();
auto gmm = std::make_unique<MockGmm>(pDevice->getGmmHelper());
auto gmmFlags = gmm->gmmResourceInfo->getResourceFlags();
gmmFlags->Info.NotCompressed = 0;
EXPECT_TRUE(gfxCoreHelper.isCompressionAppliedForImportedResource(*gmm));
}
HWTEST2_F(GfxCoreHelperTest, whenSetRenderCompressedFlagThenProperValueReturned, IsAtMostDg2) {
auto &gfxCoreHelper = getHelper<GfxCoreHelper>();
auto gmm = std::make_unique<MockGmm>(pDevice->getGmmHelper());
auto gmmFlags = gmm->gmmResourceInfo->getResourceFlags();
gmmFlags->Info.RenderCompressed = 1;
gmmFlags->Info.MediaCompressed = 0;
EXPECT_TRUE(gfxCoreHelper.isCompressionAppliedForImportedResource(*gmm));
}
HWTEST2_F(GfxCoreHelperTest, whenSetMediaCompressedFlagThenProperValueReturned, IsAtMostDg2) {
auto &gfxCoreHelper = getHelper<GfxCoreHelper>();
auto gmm = std::make_unique<MockGmm>(pDevice->getGmmHelper());
auto gmmFlags = gmm->gmmResourceInfo->getResourceFlags();
gmmFlags->Info.RenderCompressed = 0;
gmmFlags->Info.MediaCompressed = 1;
EXPECT_TRUE(gfxCoreHelper.isCompressionAppliedForImportedResource(*gmm));
}
HWTEST_F(GfxCoreHelperTest, whenAdjustPreemptionSurfaceSizeIsCalledThenCsrSizeDoesntChange) {
auto &gfxCoreHelper = getHelper<GfxCoreHelper>();
size_t csrSize = 1024;