availablePlatforms.py (4098B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\d3dinfo\availablePlatforms.py 2 import sys 3 import os 4 import blue 5 import logging 6 logger = logging.getLogger(__name__) 7 try: 8 d3dinfo = blue.LoadExtension('_d3dinfo') 9 except ImportError: 10 d3dinfo = None 11 12 def IsD3D11Valid(): 13 if not d3dinfo: 14 return True 15 isOK = False 16 d3d = d3dinfo.D3D11Info() 17 try: 18 d3d.InitializeD3D() 19 adapterCount = d3d.GetAdapterCount() 20 if adapterCount > 0: 21 isOK = True 22 d3d.ShutdownD3D() 23 except RuntimeError: 24 pass 25 26 return isOK 27 28 29 _INTEL_ONBOARD_DEVICE_IDS = [42880, 30 42881, 31 42888, 32 42889, 33 42890, 34 42882, 35 42891, 36 42883, 37 42912, 38 42913, 39 42920, 40 42922, 41 42923, 42 42924, 43 42925, 44 42921, 45 42785, 46 18693, 47 18695, 48 18696, 49 18697, 50 18048, 51 4690, 52 18056, 53 18058, 54 18059, 55 18050, 56 4692, 57 18067, 58 18131, 59 18132, 60 18128, 61 18129, 62 18130, 63 17958, 64 17960, 65 17962, 66 18082, 67 18099, 68 18114, 69 18083, 70 18098, 71 18115, 72 18080, 73 18096, 74 18112, 75 18086, 76 18090, 77 18088, 78 18081, 79 18097, 80 18113, 81 19594, 82 19595, 83 19600, 84 19610, 85 20081, 86 20065, 87 20055, 88 20053, 89 20049, 90 17751, 91 17749, 92 17777, 93 17745, 94 17729, 95 39513, 96 39544, 97 39520, 98 39536, 99 39528, 100 39488, 101 39497, 102 35440, 103 35441, 104 35414, 105 35416, 106 35419, 107 35421, 108 35412, 109 35418, 110 35420, 111 35415, 112 35417, 113 35408, 114 35409, 115 35410, 116 35411, 117 16037, 118 16040, 119 16038, 120 16039, 121 16034, 122 16016, 123 16019, 124 16025, 125 16028, 126 16033, 127 39845, 128 39848, 129 16036, 130 39713, 131 39840, 132 39842, 133 39844, 134 39850, 135 39851, 136 39852, 137 34762, 138 16035, 139 39745, 140 39872, 141 39874, 142 39876, 143 39882, 144 39883, 145 39884, 146 16017, 147 16018, 148 16024, 149 16027, 150 39877, 151 39880, 152 16022, 153 16026, 154 16020, 155 39878, 156 39910, 157 39926, 158 16041, 159 16032, 160 22843, 161 22819, 162 22822, 163 22823, 164 22807, 165 22802, 166 22811, 167 22806, 168 22817, 169 22810, 170 22813, 171 22814, 172 22812, 173 34752, 174 22803, 175 22805, 176 22786, 177 22790, 178 22795, 179 22794, 180 22792, 181 22798, 182 12677, 183 12676, 184 6789, 185 23173, 186 2692, 187 6788, 188 23172, 189 6442, 190 6450, 191 6459, 192 6458, 193 6461, 194 6435, 195 6438, 196 6439, 197 6443, 198 6445, 199 6418, 200 6427, 201 6419, 202 6421, 203 6423, 204 6426, 205 6422, 206 6433, 207 6429, 208 6430, 209 6402, 210 6406, 211 6411, 212 6410, 213 6414, 214 5693, 215 5690, 216 5682, 217 5694, 218 5691, 219 5686, 220 5666, 221 5670, 222 5674, 223 5675, 224 5677, 225 5678, 226 5650, 227 5654, 228 5658, 229 5659, 230 5661, 231 5662, 232 5634, 233 5638, 234 5642, 235 5643, 236 5645, 237 5646, 238 8880, 239 8882, 240 8883, 241 8881] 242 _INTEL_VENDOR_ID = 32902 243 244 def IsIntelOnBoardGpu(adapterInfo): 245 return adapterInfo.vendorID == _INTEL_VENDOR_ID and adapterInfo.deviceID in _INTEL_ONBOARD_DEVICE_IDS 246 247 248 def IsD3D12Valid(): 249 if not d3dinfo: 250 return True 251 isOK = False 252 d3d = d3dinfo.D3D12Info() 253 try: 254 d3d.InitializeD3D() 255 adapterCount = d3d.GetAdapterCount() 256 if adapterCount > 0: 257 isOK = True 258 try: 259 if IsIntelOnBoardGpu(d3d.GetAdapterInfo(0)): 260 logger.info('Intel on-board GPU detected, assuming D3D12 is not supported') 261 isOK = False 262 except: 263 pass 264 265 d3d.ShutdownD3D() 266 except RuntimeError: 267 pass 268 269 return isOK 270 271 272 def GetAvailablePlatforms(): 273 platforms = [] 274 if sys.platform.startswith('darwin'): 275 platforms.append('metal') 276 else: 277 if IsD3D11Valid(): 278 platforms.append('dx11') 279 if IsD3D12Valid(): 280 platforms.append('dx12') 281 platforms.append('stub') 282 return platforms 283 284 285 def InstallSystemBinaries(fileName): 286 installMsg = 'Executing %s ...' % fileName 287 print installMsg 288 logger.info(installMsg) 289 oldDir = os.getcwdu() 290 os.chdir(blue.paths.ResolvePath(u'bin:/')) 291 exitStatus = os.system(fileName) 292 os.chdir(oldDir) 293 retString = 'Execution of ' + fileName 294 if exitStatus: 295 retString += ' failed (exit code %d)' % exitStatus 296 logger.error(retString) 297 else: 298 retString += ' succeeded' 299 logger.info(retString) 300 301 302 def InstallDirectXIfNeeded(): 303 if not IsD3D11Valid(): 304 import imp 305 if imp.get_suffixes()[0][0] == '_d.pyd': 306 InstallSystemBinaries('DirectXRedistForDebug.exe') 307 else: 308 InstallSystemBinaries('DirectXRedist.exe')