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