diff --git a/opencl/source/mem_obj/image.inl b/opencl/source/mem_obj/image.inl index 68bd50467b..b845071cd4 100644 --- a/opencl/source/mem_obj/image.inl +++ b/opencl/source/mem_obj/image.inl @@ -90,6 +90,8 @@ void ImageHw::setImageArg(void *memory, bool setAsMediaBlockImage, ui setAuxParamsForMultisamples(surfaceState); } else if (gmm && gmm->isRenderCompressed) { EncodeSurfaceState::setImageAuxParamsForCCS(surfaceState, gmm); + } else { + EncodeSurfaceState::disableCompressionFlags(surfaceState); } appendSurfaceStateDepthParams(surfaceState, gmm); EncodeSurfaceState::appendImageCompressionParams(surfaceState, graphicsAllocation, gmmHelper, isImageFromBuffer()); diff --git a/opencl/test/unit_test/gen12lp/image_tests_gen12lp.inl b/opencl/test/unit_test/gen12lp/image_tests_gen12lp.inl index 047d2e8ec6..bd992b0966 100644 --- a/opencl/test/unit_test/gen12lp/image_tests_gen12lp.inl +++ b/opencl/test/unit_test/gen12lp/image_tests_gen12lp.inl @@ -126,6 +126,22 @@ GEN12LPTEST_F(gen12LpImageTests, givenRenderCompressionThenSurfaceStateParamsAre 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(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 *>(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) { MockContext context; using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; diff --git a/shared/source/command_container/command_encoder.h b/shared/source/command_container/command_encoder.h index 864676f9a2..466a4cab20 100644 --- a/shared/source/command_container/command_encoder.h +++ b/shared/source/command_container/command_encoder.h @@ -264,6 +264,7 @@ struct EncodeSurfaceState { static void setAuxParamsForMCSCCS(R_SURFACE_STATE *surfaceState); static void setClearColorParams(R_SURFACE_STATE *surfaceState, Gmm *gmm); static void setFlagsForMediaCompression(R_SURFACE_STATE *surfaceState, Gmm *gmm); + static void disableCompressionFlags(R_SURFACE_STATE *surfaceState); }; template diff --git a/shared/source/command_container/encode_compute_mode_bdw_plus.inl b/shared/source/command_container/encode_compute_mode_bdw_plus.inl index 4fa7108aff..82c92e5333 100644 --- a/shared/source/command_container/encode_compute_mode_bdw_plus.inl +++ b/shared/source/command_container/encode_compute_mode_bdw_plus.inl @@ -31,4 +31,7 @@ bool EncodeSetMMIO::isRemapApplicable(uint32_t offset) { return false; } +template +void EncodeSurfaceState::disableCompressionFlags(R_SURFACE_STATE *surfaceState) { +} } // namespace NEO diff --git a/shared/source/command_container/encode_compute_mode_tgllp_plus.inl b/shared/source/command_container/encode_compute_mode_tgllp_plus.inl index 42bb500527..3573547215 100644 --- a/shared/source/command_container/encode_compute_mode_tgllp_plus.inl +++ b/shared/source/command_container/encode_compute_mode_tgllp_plus.inl @@ -47,4 +47,9 @@ bool EncodeSetMMIO::isRemapApplicable(uint32_t offset) { (0x4400 <= offset && offset <= 0x441f); } +template +void EncodeSurfaceState::disableCompressionFlags(R_SURFACE_STATE *surfaceState) { + surfaceState->setAuxiliarySurfaceMode(Family::RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_NONE); + surfaceState->setMemoryCompressionEnable(false); +} } // namespace NEO