mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-29 09:03:14 +08:00
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:
committed by
Compute-Runtime-Automation
parent
ec0e493ca8
commit
ed04190d77
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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{};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user