/* * Copyright (C) 2019-2021 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/gmm_helper/resource_info.h" #include "shared/source/memory_manager/graphics_allocation.h" #include "aub_mem_dump.h" using namespace NEO; namespace aub_stream { struct SurfaceInfo; } namespace AubAllocDump { enum DumpFormat { NONE, BUFFER_BIN, BUFFER_TRE, IMAGE_BMP, IMAGE_TRE, }; inline bool isWritableBuffer(GraphicsAllocation &gfxAllocation) { return (gfxAllocation.getAllocationType() == GraphicsAllocation::AllocationType::BUFFER || gfxAllocation.getAllocationType() == GraphicsAllocation::AllocationType::BUFFER_COMPRESSED || gfxAllocation.getAllocationType() == GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY || gfxAllocation.getAllocationType() == GraphicsAllocation::AllocationType::EXTERNAL_HOST_PTR || gfxAllocation.getAllocationType() == GraphicsAllocation::AllocationType::MAP_ALLOCATION || gfxAllocation.getAllocationType() == GraphicsAllocation::AllocationType::SVM_GPU) && gfxAllocation.isMemObjectsAllocationWithWritableFlags(); } inline bool isWritableImage(GraphicsAllocation &gfxAllocation) { return (gfxAllocation.getAllocationType() == GraphicsAllocation::AllocationType::IMAGE) && gfxAllocation.isMemObjectsAllocationWithWritableFlags(); } inline DumpFormat getDumpFormat(GraphicsAllocation &gfxAllocation) { auto dumpBufferFormat = DebugManager.flags.AUBDumpBufferFormat.get(); auto dumpImageFormat = DebugManager.flags.AUBDumpImageFormat.get(); auto isDumpableBuffer = isWritableBuffer(gfxAllocation); auto isDumpableImage = isWritableImage(gfxAllocation); auto dumpFormat = DumpFormat::NONE; if (isDumpableBuffer) { if (0 == dumpBufferFormat.compare("BIN")) { dumpFormat = DumpFormat::BUFFER_BIN; } else if (0 == dumpBufferFormat.compare("TRE")) { dumpFormat = DumpFormat::BUFFER_TRE; } } else if (isDumpableImage) { if (0 == dumpImageFormat.compare("BMP")) { dumpFormat = DumpFormat::IMAGE_BMP; } else if (0 == dumpImageFormat.compare("TRE")) { dumpFormat = DumpFormat::IMAGE_TRE; } } return dumpFormat; } inline bool isBufferDumpFormat(DumpFormat dumpFormat) { return (AubAllocDump::DumpFormat::BUFFER_BIN == dumpFormat) || (dumpFormat == AubAllocDump::DumpFormat::BUFFER_TRE); } inline bool isImageDumpFormat(DumpFormat dumpFormat) { return (AubAllocDump::DumpFormat::IMAGE_BMP == dumpFormat) || (dumpFormat == AubAllocDump::DumpFormat::IMAGE_TRE); } template aub_stream::SurfaceInfo *getDumpSurfaceInfo(GraphicsAllocation &gfxAllocation, DumpFormat dumpFormat); template uint32_t getImageSurfaceTypeFromGmmResourceType(GMM_RESOURCE_TYPE gmmResourceType); template void dumpBufferInBinFormat(GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context); template void dumpImageInBmpFormat(GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context); template void dumpBufferInTreFormat(GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context); template void dumpImageInTreFormat(GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context); template void dumpAllocation(DumpFormat dumpFormat, GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context); } // namespace AubAllocDump