/* * Copyright (C) 2019 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "core/gmm_helper/gmm_helper.h" #include "core/unit_tests/helpers/debug_manager_state_restore.h" #include "runtime/aub_mem_dump/aub_alloc_dump.h" #include "runtime/gmm_helper/gmm.h" #include "runtime/mem_obj/buffer.h" #include "test.h" #include "unit_tests/fixtures/device_fixture.h" #include "unit_tests/fixtures/image_fixture.h" #include "unit_tests/mocks/mock_gmm.h" #include "unit_tests/mocks/mock_gmm_resource_info.h" #include "unit_tests/mocks/mock_memory_manager.h" using namespace NEO; typedef Test AubAllocDumpTests; struct AubFileStreamMock : public AubMemDump::AubFileStream { void write(const char *data, size_t size) override { buffer.resize(size); memcpy(buffer.data(), data, size); } char *getData() { return buffer.data(); } size_t getSize() { return buffer.size(); } std::vector buffer; }; HWTEST_F(AubAllocDumpTests, givenBufferOrImageWhenGraphicsAllocationIsKnownThenItsTypeCanBeCheckedIfItIsWritable) { auto memoryManager = pDevice->getMemoryManager(); auto gfxAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize}); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::BUFFER); EXPECT_FALSE(gfxAllocation->isMemObjectsAllocationWithWritableFlags()); EXPECT_FALSE(AubAllocDump::isWritableBuffer(*gfxAllocation)); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::BUFFER); gfxAllocation->setMemObjectsAllocationWithWritableFlags(true); EXPECT_TRUE(AubAllocDump::isWritableBuffer(*gfxAllocation)); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::BUFFER_COMPRESSED); gfxAllocation->setMemObjectsAllocationWithWritableFlags(false); EXPECT_FALSE(AubAllocDump::isWritableBuffer(*gfxAllocation)); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::BUFFER_COMPRESSED); gfxAllocation->setMemObjectsAllocationWithWritableFlags(true); EXPECT_TRUE(AubAllocDump::isWritableBuffer(*gfxAllocation)); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY); gfxAllocation->setMemObjectsAllocationWithWritableFlags(false); EXPECT_FALSE(AubAllocDump::isWritableBuffer(*gfxAllocation)); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY); gfxAllocation->setMemObjectsAllocationWithWritableFlags(true); EXPECT_TRUE(AubAllocDump::isWritableBuffer(*gfxAllocation)); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR); gfxAllocation->setMemObjectsAllocationWithWritableFlags(false); EXPECT_FALSE(AubAllocDump::isWritableBuffer(*gfxAllocation)); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR); gfxAllocation->setMemObjectsAllocationWithWritableFlags(true); EXPECT_TRUE(AubAllocDump::isWritableBuffer(*gfxAllocation)); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::IMAGE); gfxAllocation->setMemObjectsAllocationWithWritableFlags(false); EXPECT_FALSE(AubAllocDump::isWritableImage(*gfxAllocation)); gfxAllocation->setAllocationType(GraphicsAllocation::AllocationType::IMAGE); gfxAllocation->setMemObjectsAllocationWithWritableFlags(true); EXPECT_TRUE(AubAllocDump::isWritableImage(*gfxAllocation)); memoryManager->freeGraphicsMemory(gfxAllocation); } HWTEST_F(AubAllocDumpTests, givenImageResourceWhenGmmResourceInfoIsAvailableThenImageSurfaceTypeCanBeDeducedFromGmmResourceType) { using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; EXPECT_EQ(RENDER_SURFACE_STATE::SURFACE_TYPE_SURFTYPE_1D, AubAllocDump::getImageSurfaceTypeFromGmmResourceType(GMM_RESOURCE_TYPE::RESOURCE_1D)); EXPECT_EQ(RENDER_SURFACE_STATE::SURFACE_TYPE_SURFTYPE_2D, AubAllocDump::getImageSurfaceTypeFromGmmResourceType(GMM_RESOURCE_TYPE::RESOURCE_2D)); EXPECT_EQ(RENDER_SURFACE_STATE::SURFACE_TYPE_SURFTYPE_3D, AubAllocDump::getImageSurfaceTypeFromGmmResourceType(GMM_RESOURCE_TYPE::RESOURCE_3D)); EXPECT_EQ(RENDER_SURFACE_STATE::SURFACE_TYPE_SURFTYPE_NULL, AubAllocDump::getImageSurfaceTypeFromGmmResourceType(GMM_RESOURCE_TYPE::RESOURCE_INVALID)); } HWTEST_F(AubAllocDumpTests, givenGraphicsAllocationWhenDumpAllocationIsCalledInDefaultModeThenGraphicsAllocationShouldNotBeDumped) { auto memoryManager = pDevice->getMemoryManager(); auto gfxAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize}); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), 0); EXPECT_EQ(0u, mockAubFileStream->getSize()); memoryManager->freeGraphicsMemory(gfxAllocation); } HWTEST_F(AubAllocDumpTests, givenGraphicsAllocationWhenDumpAllocationIsCalledButDumpFormatIsUnspecifiedThenGraphicsAllocationShouldNotBeDumped) { auto memoryManager = pDevice->getMemoryManager(); auto gfxAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize}); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), 0); EXPECT_EQ(0u, mockAubFileStream->getSize()); memoryManager->freeGraphicsMemory(gfxAllocation); } HWTEST_F(AubAllocDumpTests, givenNonWritableBufferWhenDumpAllocationIsCalledAndDumpFormatIsSpecifiedThenBufferShouldNotBeDumped) { DebugManagerStateRestore dbgRestore; DebugManager.flags.AUBDumpBufferFormat.set("BIN"); auto memoryManager = pDevice->getMemoryManager(); auto gfxAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize, GraphicsAllocation::AllocationType::BUFFER}); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), 0); EXPECT_EQ(0u, mockAubFileStream->getSize()); memoryManager->freeGraphicsMemory(gfxAllocation); } HWTEST_F(AubAllocDumpTests, givenNonWritableImageWhenDumpAllocationIsCalledAndDumpFormatIsSpecifiedThenImageShouldNotBeDumped) { DebugManagerStateRestore dbgRestore; DebugManager.flags.AUBDumpBufferFormat.set("BMP"); auto memoryManager = pDevice->getMemoryManager(); auto gfxAllocation = MockGmm::allocateImage2d(*memoryManager); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), 0); EXPECT_EQ(0u, mockAubFileStream->getSize()); memoryManager->freeGraphicsMemory(gfxAllocation); } HWTEST_F(AubAllocDumpTests, givenWritableBufferWhenDumpAllocationIsCalledAndAubDumpBufferFormatIsNotSetThenBufferShouldNotBeDumped) { MockContext context; size_t bufferSize = 10; auto retVal = CL_INVALID_VALUE; std::unique_ptr buffer(Buffer::create(&context, CL_MEM_READ_WRITE, bufferSize, nullptr, retVal)); ASSERT_NE(nullptr, buffer); auto gfxAllocation = buffer->getGraphicsAllocation(); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto handle = static_cast(reinterpret_cast(this)); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), handle); EXPECT_EQ(0u, mockAubFileStream->getSize()); } HWTEST_F(AubAllocDumpTests, givenWritableImageWhenDumpAllocationIsCalledAndAubDumpImageFormatIsNotSetThenImageShouldNotBeDumped) { MockContext context; std::unique_ptr image(ImageHelper::create(&context)); ASSERT_NE(nullptr, image); auto gfxAllocation = image->getGraphicsAllocation(); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto handle = static_cast(reinterpret_cast(this)); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), handle); EXPECT_EQ(0u, mockAubFileStream->getSize()); } HWTEST_F(AubAllocDumpTests, givenWritableBufferWhenDumpAllocationIsCalledAndAubDumpBufferFormatIsSetToBinThenBufferShouldBeDumpedInBinFormat) { DebugManagerStateRestore dbgRestore; DebugManager.flags.AUBDumpBufferFormat.set("BIN"); MockContext context; size_t bufferSize = 10; auto retVal = CL_INVALID_VALUE; std::unique_ptr buffer(Buffer::create(&context, CL_MEM_READ_WRITE, bufferSize, nullptr, retVal)); ASSERT_NE(nullptr, buffer); auto gfxAllocation = buffer->getGraphicsAllocation(); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto handle = static_cast(reinterpret_cast(this)); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), handle); ASSERT_EQ(sizeof(AubMemDump::AubCaptureBinaryDumpHD), mockAubFileStream->getSize()); AubMemDump::AubCaptureBinaryDumpHD cmd; memcpy(&cmd, mockAubFileStream->getData(), mockAubFileStream->getSize()); EXPECT_EQ(0x7u, cmd.Header.Type); EXPECT_EQ(0x1u, cmd.Header.Opcode); EXPECT_EQ(0x15u, cmd.Header.SubOp); EXPECT_EQ(((sizeof(cmd) - sizeof(cmd.Header)) / sizeof(uint32_t)) - 1, cmd.Header.DwordLength); EXPECT_EQ(gfxAllocation->getGpuAddress(), cmd.getBaseAddr()); EXPECT_EQ(static_cast(gfxAllocation->getUnderlyingBufferSize()), cmd.getWidth()); EXPECT_EQ(1u, cmd.getHeight()); EXPECT_EQ(static_cast(gfxAllocation->getUnderlyingBufferSize()), cmd.getPitch()); EXPECT_EQ(1u, cmd.GttType); EXPECT_EQ(handle, cmd.DirectoryHandle); } HWTEST_F(AubAllocDumpTests, givenWritableBufferWhenDumpAllocationIsCalledAndAubDumpBufferFormatIsSetToTreThenBufferShouldBeDumpedInTreFormat) { DebugManagerStateRestore dbgRestore; DebugManager.flags.AUBDumpBufferFormat.set("TRE"); MockContext context; size_t bufferSize = 10; auto retVal = CL_INVALID_VALUE; std::unique_ptr buffer(Buffer::create(&context, CL_MEM_READ_WRITE, bufferSize, nullptr, retVal)); ASSERT_NE(nullptr, buffer); auto gfxAllocation = buffer->getGraphicsAllocation(); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto handle = static_cast(reinterpret_cast(this)); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), handle); ASSERT_EQ(sizeof(AubMemDump::CmdServicesMemTraceDumpCompress), mockAubFileStream->getSize()); AubMemDump::CmdServicesMemTraceDumpCompress cmd; memcpy(&cmd, mockAubFileStream->getData(), mockAubFileStream->getSize()); EXPECT_EQ((sizeof(AubMemDump::CmdServicesMemTraceDumpCompress) - 1) / 4, cmd.dwordCount); EXPECT_EQ(0x7u, cmd.instructionType); EXPECT_EQ(0x10u, cmd.instructionSubOpcode); EXPECT_EQ(0x2eu, cmd.instructionOpcode); using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; using SURFACE_FORMAT = typename RENDER_SURFACE_STATE::SURFACE_FORMAT; EXPECT_EQ(gfxAllocation->getGpuAddress(), cmd.getSurfaceAddress()); EXPECT_EQ(static_cast(gfxAllocation->getUnderlyingBufferSize()), cmd.surfaceWidth); EXPECT_EQ(1u, cmd.surfaceHeight); EXPECT_EQ(static_cast(gfxAllocation->getUnderlyingBufferSize()), cmd.surfacePitch); EXPECT_EQ(SURFACE_FORMAT::SURFACE_FORMAT_RAW, cmd.surfaceFormat); EXPECT_EQ(AubMemDump::CmdServicesMemTraceDumpCompress::DumpTypeValues::Tre, cmd.dumpType); EXPECT_EQ(RENDER_SURFACE_STATE::TILE_MODE_LINEAR, cmd.surfaceTilingType); EXPECT_EQ(RENDER_SURFACE_STATE::SURFACE_TYPE_SURFTYPE_BUFFER, cmd.surfaceType); EXPECT_EQ(AubMemDump::CmdServicesMemTraceDumpCompress::AlgorithmValues::Uncompressed, cmd.algorithm); EXPECT_EQ(1u, cmd.gttType); EXPECT_EQ(handle, cmd.directoryHandle); } HWTEST_F(AubAllocDumpTests, givenWritableImageWhenDumpAllocationIsCalledAndAubDumpImageFormatIsSetToBmpThenImageShouldBeDumpedInBmpFormat) { DebugManagerStateRestore dbgRestore; DebugManager.flags.AUBDumpImageFormat.set("BMP"); MockContext context; std::unique_ptr image(ImageHelper::create(&context)); ASSERT_NE(nullptr, image); auto gfxAllocation = image->getGraphicsAllocation(); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto handle = static_cast(reinterpret_cast(this)); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), handle); ASSERT_EQ(sizeof(AubMemDump::AubCmdDumpBmpHd), mockAubFileStream->getSize()); AubMemDump::AubCmdDumpBmpHd cmd; memcpy(&cmd, mockAubFileStream->getData(), mockAubFileStream->getSize()); EXPECT_EQ(0x7u, cmd.Header.Type); EXPECT_EQ(0x1u, cmd.Header.Opcode); EXPECT_EQ(0x44u, cmd.Header.SubOp); EXPECT_EQ(((sizeof(cmd) - sizeof(cmd.Header)) / sizeof(uint32_t)) - 1, cmd.Header.DwordLength); EXPECT_EQ(0u, cmd.Xmin); EXPECT_EQ(0u, cmd.Ymin); auto gmm = gfxAllocation->getDefaultGmm(); EXPECT_EQ((8 * gmm->gmmResourceInfo->getRenderPitch()) / gmm->gmmResourceInfo->getBitsPerPixel(), cmd.BufferPitch); EXPECT_EQ(gmm->gmmResourceInfo->getBitsPerPixel(), cmd.BitsPerPixel); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getResourceFormatSurfaceState()), cmd.Format); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getBaseWidth()), cmd.Xsize); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getBaseHeight()), cmd.Ysize); EXPECT_EQ(gfxAllocation->getGpuAddress(), cmd.getBaseAddr()); EXPECT_EQ(0u, cmd.Secure); EXPECT_EQ(0u, cmd.UseFence); auto flagInfo = gmm->gmmResourceInfo->getResourceFlags()->Info; EXPECT_EQ(static_cast(flagInfo.TiledW || flagInfo.TiledX || flagInfo.TiledY || flagInfo.TiledYf || flagInfo.TiledYs), cmd.TileOn); EXPECT_EQ(flagInfo.TiledY, cmd.WalkY); EXPECT_EQ(1u, cmd.UsePPGTT); EXPECT_EQ(1u, cmd.Use32BitDump); EXPECT_EQ(1u, cmd.UseFullFormat); EXPECT_EQ(handle, cmd.DirectoryHandle); } HWTEST_F(AubAllocDumpTests, givenWritableImageWhenDumpAllocationIsCalledAndAubDumpImageFormatIsSetToTreThenImageShouldBeDumpedInTreFormat) { DebugManagerStateRestore dbgRestore; DebugManager.flags.AUBDumpImageFormat.set("TRE"); MockContext context; std::unique_ptr image(ImageHelper::create(&context)); ASSERT_NE(nullptr, image); auto gfxAllocation = image->getGraphicsAllocation(); std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto handle = static_cast(reinterpret_cast(this)); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), handle); ASSERT_EQ(sizeof(AubMemDump::CmdServicesMemTraceDumpCompress), mockAubFileStream->getSize()); AubMemDump::CmdServicesMemTraceDumpCompress cmd; memcpy(&cmd, mockAubFileStream->getData(), mockAubFileStream->getSize()); EXPECT_EQ((sizeof(AubMemDump::CmdServicesMemTraceDumpCompress) - 1) / 4, cmd.dwordCount); EXPECT_EQ(0x7u, cmd.instructionType); EXPECT_EQ(0x10u, cmd.instructionSubOpcode); EXPECT_EQ(0x2eu, cmd.instructionOpcode); using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; using SURFACE_FORMAT = typename RENDER_SURFACE_STATE::SURFACE_FORMAT; EXPECT_EQ(gfxAllocation->getGpuAddress(), cmd.getSurfaceAddress()); auto gmm = gfxAllocation->getDefaultGmm(); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getBaseWidth()), cmd.surfaceWidth); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getBaseHeight()), cmd.surfaceHeight); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getRenderPitch()), cmd.surfacePitch); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getResourceFormatSurfaceState()), cmd.surfaceFormat); EXPECT_EQ(AubMemDump::CmdServicesMemTraceDumpCompress::DumpTypeValues::Tre, cmd.dumpType); EXPECT_EQ(gmm->gmmResourceInfo->getTileModeSurfaceState(), cmd.surfaceTilingType); EXPECT_EQ(RENDER_SURFACE_STATE::SURFACE_TYPE_SURFTYPE_2D, cmd.surfaceType); EXPECT_EQ(AubMemDump::CmdServicesMemTraceDumpCompress::AlgorithmValues::Uncompressed, cmd.algorithm); EXPECT_EQ(1u, cmd.gttType); EXPECT_EQ(handle, cmd.directoryHandle); } HWTEST_F(AubAllocDumpTests, givenCompressedImageWritableWhenDumpAllocationIsCalledAndAubDumpImageFormatIsSetToTreThenImageShouldBeDumpedInTreFormat) { DebugManagerStateRestore dbgRestore; DebugManager.flags.AUBDumpImageFormat.set("TRE"); MockContext context; std::unique_ptr image(ImageHelper::create(&context)); ASSERT_NE(nullptr, image); auto gfxAllocation = image->getGraphicsAllocation(); gfxAllocation->getDefaultGmm()->isRenderCompressed = true; std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto handle = static_cast(reinterpret_cast(this)); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), handle); EXPECT_EQ(0u, mockAubFileStream->getSize()); } HWTEST_F(AubAllocDumpTests, givenMultisampleImageWritableWhenDumpAllocationIsCalledAndAubDumpImageFormatIsSetToTreThenImageDumpIsNotSupported) { DebugManagerStateRestore dbgRestore; DebugManager.flags.AUBDumpImageFormat.set("TRE"); MockContext context; std::unique_ptr image(ImageHelper::create(&context)); ASSERT_NE(nullptr, image); auto gfxAllocation = image->getGraphicsAllocation(); auto mockGmmResourceInfo = reinterpret_cast(gfxAllocation->getDefaultGmm()->gmmResourceInfo.get()); mockGmmResourceInfo->mockResourceCreateParams.MSAA.NumSamples = 2; std::unique_ptr mockAubFileStream(new AubFileStreamMock()); auto handle = static_cast(reinterpret_cast(this)); auto format = AubAllocDump::getDumpFormat(*gfxAllocation); AubAllocDump::dumpAllocation(format, *gfxAllocation, mockAubFileStream.get(), handle); EXPECT_EQ(0u, mockAubFileStream->getSize()); } HWTEST_F(AubAllocDumpTests, givenMultisampleImageWritableWheGetDumpSurfaceIsCalledAndDumpFormatIsSpecifiedThenNullSurfaceInfoIsReturned) { MockContext context; std::unique_ptr image(ImageHelper::create(&context)); ASSERT_NE(nullptr, image); auto gfxAllocation = image->getGraphicsAllocation(); auto mockGmmResourceInfo = reinterpret_cast(gfxAllocation->getDefaultGmm()->gmmResourceInfo.get()); mockGmmResourceInfo->mockResourceCreateParams.MSAA.NumSamples = 2; EXPECT_EQ(nullptr, AubAllocDump::getDumpSurfaceInfo(*gfxAllocation, AubAllocDump::DumpFormat::IMAGE_BMP)); EXPECT_EQ(nullptr, AubAllocDump::getDumpSurfaceInfo(*gfxAllocation, AubAllocDump::DumpFormat::IMAGE_TRE)); } struct AubSurfaceDumpTests : public AubAllocDumpTests, public ::testing::WithParamInterface> { void SetUp() override { AubAllocDumpTests::SetUp(); isCompressed = std::get<0>(GetParam()); dumpFormat = std::get<1>(GetParam()); } void TearDown() override { AubAllocDumpTests::TearDown(); } bool isCompressed = false; AubAllocDump::DumpFormat dumpFormat = AubAllocDump::DumpFormat::NONE; }; HWTEST_P(AubSurfaceDumpTests, givenGraphicsAllocationWhenGetDumpSurfaceIsCalledAndDumpFormatIsSpecifiedThenSurfaceInfoIsReturned) { ExecutionEnvironment *executionEnvironment = pDevice->executionEnvironment; MockMemoryManager memoryManager(*executionEnvironment); if (AubAllocDump::isBufferDumpFormat(dumpFormat)) { auto bufferAllocation = memoryManager.allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize}); ASSERT_NE(nullptr, bufferAllocation); bufferAllocation->setAllocationType(isCompressed ? GraphicsAllocation::AllocationType::BUFFER_COMPRESSED : GraphicsAllocation::AllocationType::BUFFER); std::unique_ptr surfaceInfo(AubAllocDump::getDumpSurfaceInfo(*bufferAllocation, dumpFormat)); if (nullptr != surfaceInfo) { using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; using SURFACE_FORMAT = typename RENDER_SURFACE_STATE::SURFACE_FORMAT; EXPECT_EQ(GmmHelper::decanonize(bufferAllocation->getGpuAddress()), surfaceInfo->address); EXPECT_EQ(static_cast(bufferAllocation->getUnderlyingBufferSize()), surfaceInfo->width); EXPECT_EQ(1u, surfaceInfo->height); EXPECT_EQ(static_cast(bufferAllocation->getUnderlyingBufferSize()), surfaceInfo->pitch); EXPECT_EQ(SURFACE_FORMAT::SURFACE_FORMAT_RAW, surfaceInfo->format); EXPECT_EQ(RENDER_SURFACE_STATE::SURFACE_TYPE_SURFTYPE_BUFFER, surfaceInfo->surftype); EXPECT_EQ(RENDER_SURFACE_STATE::TILE_MODE_LINEAR, surfaceInfo->tilingType); EXPECT_EQ(GraphicsAllocation::AllocationType::BUFFER_COMPRESSED == bufferAllocation->getAllocationType(), surfaceInfo->compressed); EXPECT_EQ((AubAllocDump::DumpFormat::BUFFER_TRE == dumpFormat) ? aub_stream::dumpType::tre : aub_stream::dumpType::bin, surfaceInfo->dumpType); } memoryManager.freeGraphicsMemory(bufferAllocation); } if (AubAllocDump::isImageDumpFormat(dumpFormat)) { cl_image_desc imgDesc = {}; imgDesc.image_width = 512; imgDesc.image_height = 1; imgDesc.image_type = CL_MEM_OBJECT_IMAGE2D; auto imgInfo = MockGmm::initImgInfo(imgDesc, 0, nullptr); MockGmm::queryImgParams(imgInfo); MockMemoryManager::AllocationData allocationData; allocationData.imgInfo = &imgInfo; auto imageAllocation = memoryManager.allocateGraphicsMemoryForImage(allocationData); ASSERT_NE(nullptr, imageAllocation); auto gmm = imageAllocation->getDefaultGmm(); gmm->isRenderCompressed = isCompressed; std::unique_ptr surfaceInfo(AubAllocDump::getDumpSurfaceInfo(*imageAllocation, dumpFormat)); if (nullptr != surfaceInfo) { EXPECT_EQ(GmmHelper::decanonize(imageAllocation->getGpuAddress()), surfaceInfo->address); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getBaseWidth()), surfaceInfo->width); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getBaseHeight()), surfaceInfo->height); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getRenderPitch()), surfaceInfo->pitch); EXPECT_EQ(static_cast(gmm->gmmResourceInfo->getResourceFormatSurfaceState()), surfaceInfo->format); EXPECT_EQ(AubAllocDump::getImageSurfaceTypeFromGmmResourceType(gmm->gmmResourceInfo->getResourceType()), surfaceInfo->surftype); EXPECT_EQ(gmm->gmmResourceInfo->getTileModeSurfaceState(), surfaceInfo->tilingType); EXPECT_EQ(gmm->isRenderCompressed, surfaceInfo->compressed); EXPECT_EQ((AubAllocDump::DumpFormat::IMAGE_TRE == dumpFormat) ? aub_stream::dumpType::tre : aub_stream::dumpType::bmp, surfaceInfo->dumpType); } memoryManager.freeGraphicsMemory(imageAllocation); } } INSTANTIATE_TEST_CASE_P(GetDumpSurfaceTest, AubSurfaceDumpTests, ::testing::Combine( ::testing::Bool(), // isCompressed ::testing::Values( // dumpFormat AubAllocDump::DumpFormat::NONE, AubAllocDump::DumpFormat::BUFFER_BIN, AubAllocDump::DumpFormat::BUFFER_TRE, AubAllocDump::DumpFormat::IMAGE_BMP, AubAllocDump::DumpFormat::IMAGE_TRE)));