1 /* 2 * Copyright (C) 2018-2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8 #pragma once 9 #include "shared/source/gmm_helper/gmm_lib.h" 10 #include "shared/source/memory_manager/definitions/storage_info.h" 11 12 #include <cstdint> 13 #include <cstdlib> 14 #include <memory> 15 16 namespace NEO { 17 enum class ImagePlane; 18 struct HardwareInfo; 19 struct ImageInfo; 20 class GmmResourceInfo; 21 class GmmClientContext; 22 23 class Gmm { 24 public: 25 virtual ~Gmm(); 26 Gmm() = delete; 27 Gmm(GmmClientContext *clientContext, ImageInfo &inputOutputImgInfo, StorageInfo storageInfo, bool preferCompressed); 28 Gmm(GmmClientContext *clientContext, const void *alignedPtr, size_t alignedSize, size_t alignment, bool uncacheable); 29 Gmm(GmmClientContext *clientContext, const void *alignedPtr, size_t alignedSize, size_t alignment, bool uncacheable, bool preferCompressed, bool systemMemoryPool, StorageInfo storageInfo); 30 Gmm(GmmClientContext *clientContext, const void *alignedPtr, size_t alignedSize, size_t alignment, bool uncacheable, bool preferCompressed, bool systemMemoryPool, StorageInfo storageInfo, bool allowLargePages); 31 Gmm(GmmClientContext *clientContext, GMM_RESOURCE_INFO *inputGmm); 32 33 void queryImageParams(ImageInfo &inputOutputImgInfo); 34 35 void applyAuxFlagsForBuffer(bool preferCompression); 36 void applyMemoryFlags(bool systemMemoryPool, StorageInfo &storageInfo); 37 void applyAppResource(StorageInfo &storageInfo); 38 39 bool unifiedAuxTranslationCapable() const; 40 bool hasMultisampleControlSurface() const; 41 42 uint32_t queryQPitch(GMM_RESOURCE_TYPE resType); 43 void updateImgInfoAndDesc(ImageInfo &imgInfo, uint32_t arrayIndex); 44 void updateOffsetsInImgInfo(ImageInfo &imgInfo, uint32_t arrayIndex); 45 uint8_t resourceCopyBlt(void *sys, void *gpu, uint32_t pitch, uint32_t height, unsigned char upload, ImagePlane plane); 46 47 uint32_t getUnifiedAuxPitchTiles(); 48 uint32_t getAuxQPitch(); 49 50 GMM_RESCREATE_PARAMS resourceParams = {}; 51 std::unique_ptr<GmmResourceInfo> gmmResourceInfo; 52 53 bool isCompressionEnabled = false; 54 bool useSystemMemoryPool = true; 55 56 protected: 57 void applyAuxFlagsForImage(ImageInfo &imgInfo, bool preferCompressed); 58 void setupImageResourceParams(ImageInfo &imgInfo, bool preferCompressed); 59 bool extraMemoryFlagsRequired(); 60 void applyExtraMemoryFlags(const StorageInfo &storageInfo); 61 void applyDebugOverrides(); 62 GmmClientContext *clientContext = nullptr; 63 }; 64 } // namespace NEO 65