1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
|
/*
* Copyright (C) 2021-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/os_interface/windows/windows_wrapper.h"
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmissing-braces"
#pragma clang diagnostic ignored "-Wbraced-scalar-init"
#endif
#include "umKmInc/sharedata.h"
#if defined(__clang__)
#pragma clang diagnostic pop
#endif
using SKU_FEATURE_TABLE_GMM = SKU_FEATURE_TABLE;
using WA_TABLE_GMM = WA_TABLE;
using ADAPTER_INFO_GMM = ADAPTER_INFO;
using PLATFORM_GMM = PLATFORM;
#if defined(UMD_KMD_COMMAND_BUFFER_REV_ID)
using SKU_FEATURE_TABLE_KMD = SKU_FEATURE_TABLE_GMM;
using WA_TABLE_KMD = WA_TABLE_GMM;
using ADAPTER_INFO_KMD = ADAPTER_INFO_GMM;
using PLATFORM_KMD = PLATFORM_GMM;
inline void propagateData(ADAPTER_INFO_KMD &) {
}
#if defined(__clang__) || defined(__GNUC__)
static constexpr COMMAND_BUFFER_HEADER initCommandBufferHeader(uint32_t umdContextType, uint32_t umdPatchList, uint32_t usesResourceStreamer, uint32_t perfTag) {
COMMAND_BUFFER_HEADER ret = {};
ret.UmdContextType = umdContextType;
ret.UmdPatchList = umdPatchList;
ret.UsesResourceStreamer = usesResourceStreamer;
ret.PerfTag = perfTag;
return ret;
}
#undef DECLARE_COMMAND_BUFFER
#define DECLARE_COMMAND_BUFFER(VARNAME, CONTEXTTYPE, PATCHLIST, STREAMER, PERFTAG) \
static constexpr COMMAND_BUFFER_HEADER VARNAME = initCommandBufferHeader(CONTEXTTYPE, PATCHLIST, STREAMER, PERFTAG);
#endif
#else
struct SKU_FEATURE_TABLE_KMD : SKU_FEATURE_TABLE_GMM { // NOLINT(readability-identifier-naming)
bool FtrGpGpuMidBatchPreempt : 1; // NOLINT(readability-identifier-naming)
bool FtrGpGpuThreadGroupLevelPreempt : 1; // NOLINT(readability-identifier-naming)
bool FtrGpGpuMidThreadLevelPreempt : 1; // NOLINT(readability-identifier-naming)
bool FtrWddm2Svm : 1; // NOLINT(readability-identifier-naming)
bool FtrPooledEuEnabled : 1; // NOLINT(readability-identifier-naming)
bool FtrPPGTT : 1; // NOLINT(readability-identifier-naming)
bool FtrSVM : 1; // NOLINT(readability-identifier-naming)
bool FtrEDram : 1; // NOLINT(readability-identifier-naming)
bool FtrL3IACoherency : 1; // NOLINT(readability-identifier-naming)
bool FtrIA32eGfxPTEs : 1; // NOLINT(readability-identifier-naming)
bool FtrTileY : 1; // NOLINT(readability-identifier-naming)
bool FtrDisplayYTiling : 1; // NOLINT(readability-identifier-naming)
bool FtrTranslationTable : 1; // NOLINT(readability-identifier-naming)
bool FtrUserModeTranslationTable : 1; // NOLINT(readability-identifier-naming)
bool FtrFbc : 1; // NOLINT(readability-identifier-naming)
bool FtrULT : 1; // NOLINT(readability-identifier-naming)
bool FtrLCIA : 1; // NOLINT(readability-identifier-naming)
bool FtrTileMappedResource : 1; // NOLINT(readability-identifier-naming)
bool FtrAstcHdr2D : 1; // NOLINT(readability-identifier-naming)
bool FtrAstcLdr2D : 1; // NOLINT(readability-identifier-naming)
bool FtrStandardMipTailFormat : 1; // NOLINT(readability-identifier-naming)
bool FtrFrameBufferLLC : 1; // NOLINT(readability-identifier-naming)
bool FtrLLCBypass : 1; // NOLINT(readability-identifier-naming)
bool FtrDisplayEngineS3d : 1; // NOLINT(readability-identifier-naming)
bool FtrWddm2GpuMmu : 1; // NOLINT(readability-identifier-naming)
bool FtrWddm2_1_64kbPages : 1; // NOLINT(readability-identifier-naming)
bool FtrWddmHwQueues : 1; // NOLINT(readability-identifier-naming)
bool FtrMemTypeMocsDeferPAT : 1; // NOLINT(readability-identifier-naming)
bool FtrKmdDaf : 1; // NOLINT(readability-identifier-naming)
bool FtrE2ECompression : 1; // NOLINT(readability-identifier-naming)
bool FtrLinearCCS : 1; // NOLINT(readability-identifier-naming)
bool FtrCCSRing : 1; // NOLINT(readability-identifier-naming)
bool FtrCCSNode : 1; // NOLINT(readability-identifier-naming)
bool FtrRcsNode : 1; // NOLINT(readability-identifier-naming)
bool FtrLocalMemory : 1; // NOLINT(readability-identifier-naming)
bool FtrLocalMemoryAllows4KB : 1; // NOLINT(readability-identifier-naming)
bool FtrHwScheduling : 1; // NOLINT(readability-identifier-naming)
bool FtrWalkerMTP : 1; // NOLINT(readability-identifier-naming)
};
struct WA_TABLE_KMD : WA_TABLE_GMM { // NOLINT(readability-identifier-naming)
bool WaSendMIFLUSHBeforeVFE = false; // NOLINT(readability-identifier-naming)
bool WaDisableLSQCROPERFforOCL = false; // NOLINT(readability-identifier-naming)
bool WaMsaa8xTileYDepthPitchAlignment = false; // NOLINT(readability-identifier-naming)
bool WaLosslessCompressionSurfaceStride = false; // NOLINT(readability-identifier-naming)
bool WaFbcLinearSurfaceStride = false; // NOLINT(readability-identifier-naming)
bool Wa4kAlignUVOffsetNV12LinearSurface = false; // NOLINT(readability-identifier-naming)
bool WaEncryptedEdramOnlyPartials = false; // NOLINT(readability-identifier-naming)
bool WaDisableEdramForDisplayRT = false; // NOLINT(readability-identifier-naming)
bool WaCompressedResourceRequiresConstVA21 = false; // NOLINT(readability-identifier-naming)
bool WaDisablePerCtxtPreemptionGranularityControl = false; // NOLINT(readability-identifier-naming)
bool WaLLCCachingUnsupported = false; // NOLINT(readability-identifier-naming)
bool WaUseVAlign16OnTileXYBpp816 = false; // NOLINT(readability-identifier-naming)
bool WaModifyVFEStateAfterGPGPUPreemption = false; // NOLINT(readability-identifier-naming)
bool WaCSRUncachable = false; // NOLINT(readability-identifier-naming)
bool WaSamplerCacheFlushBetweenRedescribedSurfaceReads = false; // NOLINT(readability-identifier-naming)
bool WaRestrictPitch128KB = false; // NOLINT(readability-identifier-naming)
bool WaLimit128BMediaCompr = false; // NOLINT(readability-identifier-naming)
bool WaUntypedBufferCompression = false; // NOLINT(readability-identifier-naming)
bool WaAuxTable16KGranular = false; // NOLINT(readability-identifier-naming)
bool WaDisableFusedThreadScheduling = false; // NOLINT(readability-identifier-naming)
};
typedef struct COMMAND_BUFFER_HEADER_REC { // NOLINT(readability-identifier-naming)
uint32_t UmdContextType : 4; // NOLINT(readability-identifier-naming)
uint32_t UmdPatchList : 1; // NOLINT(readability-identifier-naming)
uint32_t UmdRequestedSliceState : 3; // NOLINT(readability-identifier-naming)
uint32_t UmdRequestedSubsliceCount : 3; // NOLINT(readability-identifier-naming)
uint32_t UmdRequestedEUCount : 5; // NOLINT(readability-identifier-naming)
uint32_t UsesResourceStreamer : 1; // NOLINT(readability-identifier-naming)
uint32_t NeedsMidBatchPreEmptionSupport : 1; // NOLINT(readability-identifier-naming)
uint32_t UsesGPGPUPipeline : 1; // NOLINT(readability-identifier-naming)
uint32_t RequiresCoherency : 1; // NOLINT(readability-identifier-naming)
uint32_t PerfTag; // NOLINT(readability-identifier-naming)
uint64_t MonitorFenceVA; // NOLINT(readability-identifier-naming)
uint64_t MonitorFenceValue; // NOLINT(readability-identifier-naming)
} COMMAND_BUFFER_HEADER;
typedef struct __GMM_GFX_PARTITIONING {
struct
{
uint64_t Base, Limit; // NOLINT(readability-identifier-naming)
} Standard, // NOLINT(readability-identifier-naming)
Standard64KB, // NOLINT(readability-identifier-naming)
Reserved0, // NOLINT(readability-identifier-naming)
Reserved1, // NOLINT(readability-identifier-naming)
SVM, // NOLINT(readability-identifier-naming)
TR, // NOLINT(readability-identifier-naming)
Heap32[4]; // NOLINT(readability-identifier-naming)
} GMM_GFX_PARTITIONING;
struct CREATECONTEXT_PVTDATA { // NOLINT(readability-identifier-naming)
unsigned long *pHwContextId;
uint32_t NumberOfHwContextIds; // NOLINT(readability-identifier-naming)
uint32_t ProcessID; // NOLINT(readability-identifier-naming)
uint8_t IsProtectedProcess; // NOLINT(readability-identifier-naming)
uint8_t IsDwm; // NOLINT(readability-identifier-naming)
uint8_t IsMediaUsage; // NOLINT(readability-identifier-naming)
uint8_t GpuVAContext; // NOLINT(readability-identifier-naming)
BOOLEAN NoRingFlushes; // NOLINT(readability-identifier-naming)
BOOLEAN DummyPageBackingEnabled; // NOLINT(readability-identifier-naming)
uint32_t UmdContextType; // NOLINT(readability-identifier-naming)
};
struct PLATFORM_KMD : PLATFORM_GMM { // NOLINT(readability-identifier-naming)
struct HwIpVersion {
uint32_t Value; // NOLINT(readability-identifier-naming)
};
HwIpVersion sRenderBlockID;
};
struct ADAPTER_INFO_KMD : ADAPTER_INFO_GMM { // NOLINT(readability-identifier-naming)
SKU_FEATURE_TABLE_KMD SkuTable; // NOLINT(readability-identifier-naming)
WA_TABLE_KMD WaTable; // NOLINT(readability-identifier-naming)
GMM_GFX_PARTITIONING GfxPartition; // NOLINT(readability-identifier-naming)
ADAPTER_BDF stAdapterBDF;
PLATFORM_KMD GfxPlatform; // NOLINT(readability-identifier-naming)
uint64_t LMemBarSize; // NOLINT(readability-identifier-naming)
uint8_t SegmentId[3]; // NOLINT(readability-identifier-naming)
};
static constexpr COMMAND_BUFFER_HEADER initCommandBufferHeader(uint32_t umdContextType, uint32_t umdPatchList, uint32_t usesResourceStreamer, uint32_t perfTag) {
COMMAND_BUFFER_HEADER ret = {};
ret.UmdContextType = umdContextType;
ret.UmdPatchList = umdPatchList;
ret.UsesResourceStreamer = usesResourceStreamer;
ret.PerfTag = perfTag;
return ret;
}
#ifdef DECLARE_COMMAND_BUFFER
#undef DECLARE_COMMAND_BUFFER
#endif
#define DECLARE_COMMAND_BUFFER(VARNAME, CONTEXTTYPE, PATCHLIST, STREAMER, PERFTAG) \
static constexpr COMMAND_BUFFER_HEADER VARNAME = initCommandBufferHeader(CONTEXTTYPE, PATCHLIST, STREAMER, PERFTAG);
inline void propagateData(ADAPTER_INFO_KMD &adapterInfo) {
ADAPTER_INFO &base = static_cast<ADAPTER_INFO &>(adapterInfo);
base.SkuTable = adapterInfo.SkuTable;
base.WaTable = adapterInfo.WaTable;
base.GfxPlatform = adapterInfo.GfxPlatform;
}
struct CREATEHWQUEUE_PVTDATA {}; // NOLINT(readability-identifier-naming)
#endif
|