compute-runtime/shared/source/aub_mem_dump/aub_alloc_dump.h

100 lines
3.7 KiB
C++

/*
* 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 <typename GfxFamily>
aub_stream::SurfaceInfo *getDumpSurfaceInfo(GraphicsAllocation &gfxAllocation, DumpFormat dumpFormat);
template <typename GfxFamily>
uint32_t getImageSurfaceTypeFromGmmResourceType(GMM_RESOURCE_TYPE gmmResourceType);
template <typename GfxFamily>
void dumpBufferInBinFormat(GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context);
template <typename GfxFamily>
void dumpImageInBmpFormat(GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context);
template <typename GfxFamily>
void dumpBufferInTreFormat(GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context);
template <typename GfxFamily>
void dumpImageInTreFormat(GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context);
template <typename GfxFamily>
void dumpAllocation(DumpFormat dumpFormat, GraphicsAllocation &gfxAllocation, AubMemDump::AubFileStream *stream, uint32_t context);
} // namespace AubAllocDump