Skip to content

Commit f40dc29

Browse files
Dont change multisampled surface state storage for R32_FLOAT_X8X24 type
Change-Id: I5e386057e4368e0d80bed496f2ddc19b5ae271a5
1 parent 9fa22e7 commit f40dc29

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

runtime/mem_obj/image.inl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ void ImageHw<GfxFamily>::setImageArg(void *memory, bool setAsMediaBlockImage, ui
178178

179179
template <typename GfxFamily>
180180
void ImageHw<GfxFamily>::setAuxParamsForMultisamples(RENDER_SURFACE_STATE *surfaceState) {
181+
using SURFACE_FORMAT = typename RENDER_SURFACE_STATE::SURFACE_FORMAT;
182+
181183
if (getMcsAllocation()) {
182184
auto mcsGmm = getMcsAllocation()->gmm;
183185

@@ -189,7 +191,7 @@ void ImageHw<GfxFamily>::setAuxParamsForMultisamples(RENDER_SURFACE_STATE *surfa
189191
surfaceState->setAuxiliarySurfaceQpitch(mcsSurfaceInfo.qPitch);
190192
surfaceState->setAuxiliarySurfaceBaseAddress(mcsAllocation->getGpuAddress());
191193
}
192-
} else if (isDepthFormat(imageFormat)) {
194+
} else if (isDepthFormat(imageFormat) && surfaceState->getSurfaceFormat() != SURFACE_FORMAT::SURFACE_FORMAT_R32_FLOAT_X8X24_TYPELESS) {
193195
surfaceState->setMultisampledSurfaceStorageFormat(RENDER_SURFACE_STATE::MULTISAMPLED_SURFACE_STORAGE_FORMAT::MULTISAMPLED_SURFACE_STORAGE_FORMAT_DEPTH_STENCIL);
194196
}
195197
}

unit_tests/mem_obj/image_set_arg_tests.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,31 @@ HWTEST_F(ImageSetArgTest, givenDepthFormatWhenSetArgIsCalledThenProgramAuxFields
483483
delete image;
484484
}
485485

486+
HWTEST_F(ImageSetArgTest, givenMultisampledR32Floatx8x24DepthStencilFormatWhenSetArgIsCalledThenSetMssSurfaceStateStorageParam) {
487+
typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE;
488+
using SURFACE_FORMAT = typename RENDER_SURFACE_STATE::SURFACE_FORMAT;
489+
490+
McsSurfaceInfo msi = {0, 0, 3};
491+
cl_image_desc imgDesc = Image2dDefaults::imageDesc;
492+
imgDesc.num_samples = 8;
493+
cl_image_format imgFormat = {CL_DEPTH_STENCIL, CL_FLOAT};
494+
495+
std::unique_ptr<Image> image(ImageHelper<ImageReadOnly<Image2dDefaults>>::create(context, &imgDesc, &imgFormat));
496+
image->setMcsSurfaceInfo(msi);
497+
cl_mem memObj = image.get();
498+
499+
retVal = clSetKernelArg(pKernel, 0, sizeof(memObj), &memObj);
500+
ASSERT_EQ(CL_SUCCESS, retVal);
501+
502+
auto surfaceState = reinterpret_cast<RENDER_SURFACE_STATE *>(ptrOffset(pKernel->getSurfaceStateHeap(),
503+
pKernelInfo->kernelArgInfo[0].offsetHeap));
504+
505+
EXPECT_TRUE(Image::isDepthFormat(image->getImageFormat()));
506+
EXPECT_TRUE(surfaceState->getSurfaceFormat() == SURFACE_FORMAT::SURFACE_FORMAT_R32_FLOAT_X8X24_TYPELESS);
507+
EXPECT_TRUE(surfaceState->getMultisampledSurfaceStorageFormat() ==
508+
RENDER_SURFACE_STATE::MULTISAMPLED_SURFACE_STORAGE_FORMAT::MULTISAMPLED_SURFACE_STORAGE_FORMAT_MSS);
509+
}
510+
486511
HWTEST_F(ImageSetArgTest, givenMcsAllocationAndRenderCompressionWhenSetArgOnMultisampledImgIsCalledThenProgramAuxFieldsWithMcsParams) {
487512
typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE;
488513
McsSurfaceInfo msi = {10, 20, 3};

0 commit comments

Comments
 (0)