Disable compression flags when image is not compressed

Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski 2021-05-25 16:41:54 +00:00 committed by Compute-Runtime-Automation
parent ad9aaa260a
commit 1281e858df
5 changed files with 27 additions and 0 deletions

View File

@ -90,6 +90,8 @@ void ImageHw<GfxFamily>::setImageArg(void *memory, bool setAsMediaBlockImage, ui
setAuxParamsForMultisamples(surfaceState); setAuxParamsForMultisamples(surfaceState);
} else if (gmm && gmm->isRenderCompressed) { } else if (gmm && gmm->isRenderCompressed) {
EncodeSurfaceState<GfxFamily>::setImageAuxParamsForCCS(surfaceState, gmm); EncodeSurfaceState<GfxFamily>::setImageAuxParamsForCCS(surfaceState, gmm);
} else {
EncodeSurfaceState<GfxFamily>::disableCompressionFlags(surfaceState);
} }
appendSurfaceStateDepthParams(surfaceState, gmm); appendSurfaceStateDepthParams(surfaceState, gmm);
EncodeSurfaceState<GfxFamily>::appendImageCompressionParams(surfaceState, graphicsAllocation, gmmHelper, isImageFromBuffer()); EncodeSurfaceState<GfxFamily>::appendImageCompressionParams(surfaceState, graphicsAllocation, gmmHelper, isImageFromBuffer());

View File

@ -126,6 +126,22 @@ GEN12LPTEST_F(gen12LpImageTests, givenRenderCompressionThenSurfaceStateParamsAre
EXPECT_EQ(surfaceState.getAuxiliarySurfaceMode(), RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E); EXPECT_EQ(surfaceState.getAuxiliarySurfaceMode(), RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E);
} }
GEN12LPTEST_F(gen12LpImageTests, givenNoCompressionWhenProgramingImageSurfaceStateThenCompressionIsDisabled) {
MockContext context;
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
cl_image_desc imgDesc = Image2dDefaults::imageDesc;
std::unique_ptr<Image> image(Image2dHelper<>::create(&context, &imgDesc));
auto surfaceState = FamilyType::cmdInitRenderSurfaceState;
surfaceState.setMemoryCompressionEnable(true);
surfaceState.setAuxiliarySurfaceMode(RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E);
auto imageHw = static_cast<ImageHw<FamilyType> *>(image.get());
imageHw->getGraphicsAllocation(context.getDevice(0)->getRootDeviceIndex())->getDefaultGmm()->isRenderCompressed = false;
imageHw->setImageArg(&surfaceState, false, 0, 0, false);
EXPECT_FALSE(surfaceState.getMemoryCompressionEnable());
EXPECT_EQ(surfaceState.getAuxiliarySurfaceMode(), RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_NONE);
}
GEN12LPTEST_F(gen12LpImageTests, givenMediaCompressionThenSurfaceStateParamsAreSetForMediaCompression) { GEN12LPTEST_F(gen12LpImageTests, givenMediaCompressionThenSurfaceStateParamsAreSetForMediaCompression) {
MockContext context; MockContext context;
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;

View File

@ -264,6 +264,7 @@ struct EncodeSurfaceState {
static void setAuxParamsForMCSCCS(R_SURFACE_STATE *surfaceState); static void setAuxParamsForMCSCCS(R_SURFACE_STATE *surfaceState);
static void setClearColorParams(R_SURFACE_STATE *surfaceState, Gmm *gmm); static void setClearColorParams(R_SURFACE_STATE *surfaceState, Gmm *gmm);
static void setFlagsForMediaCompression(R_SURFACE_STATE *surfaceState, Gmm *gmm); static void setFlagsForMediaCompression(R_SURFACE_STATE *surfaceState, Gmm *gmm);
static void disableCompressionFlags(R_SURFACE_STATE *surfaceState);
}; };
template <typename GfxFamily> template <typename GfxFamily>

View File

@ -31,4 +31,7 @@ bool EncodeSetMMIO<Family>::isRemapApplicable(uint32_t offset) {
return false; return false;
} }
template <typename Family>
void EncodeSurfaceState<Family>::disableCompressionFlags(R_SURFACE_STATE *surfaceState) {
}
} // namespace NEO } // namespace NEO

View File

@ -47,4 +47,9 @@ bool EncodeSetMMIO<Family>::isRemapApplicable(uint32_t offset) {
(0x4400 <= offset && offset <= 0x441f); (0x4400 <= offset && offset <= 0x441f);
} }
template <typename Family>
void EncodeSurfaceState<Family>::disableCompressionFlags(R_SURFACE_STATE *surfaceState) {
surfaceState->setAuxiliarySurfaceMode(Family::RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_NONE);
surfaceState->setMemoryCompressionEnable(false);
}
} // namespace NEO } // namespace NEO