1 /* 2 * Copyright (c) 2017, Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included 12 * in all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 * OTHER DEALINGS IN THE SOFTWARE. 21 */ 22 //! 23 //! \file cm_common.h 24 //! \brief Contains CM definitions 25 //! 26 27 #ifndef MEDIADRIVER_AGNOSTIC_COMMON_CM_CMCOMMON_H_ 28 #define MEDIADRIVER_AGNOSTIC_COMMON_CM_CMCOMMON_H_ 29 30 #include "mhw_mi.h" 31 #include "cm_innerdef_os.h" 32 #include <list> 33 34 // this marco is used to remove warning from clang to unused parameters 35 // which is harmless and useless but to make clang happy 36 #ifndef UNUSED 37 #define UNUSED(x) (void)(x) 38 #endif // UNUSED 39 40 //======<Feature List>====================================================================== 41 42 #define MDF_HW_KERNEL_DEBUG_SUPPORT 1 //avaliable by default, will be excluded in Open source media. 43 44 #if (_DEBUG || _RELEASE_INTERNAL) 45 #define MDF_COMMAND_BUFFER_DUMP 1 //avaliable in Debug/Release-internal 46 #define MDF_CURBE_DATA_DUMP 1 47 #define MDF_SURFACE_CONTENT_DUMP 1 48 #define MDF_SURFACE_STATE_DUMP 1 49 #define MDF_INTERFACE_DESCRIPTOR_DATA_DUMP 1 50 #endif 51 52 //===============<Definitions>================================================== 53 54 // Definition for return code 55 typedef enum _CM_RETURN_CODE 56 { 57 CM_SUCCESS = 0, 58 /* 59 * RANGE -1 ~ -9999 FOR EXTERNAL ERROR CODE 60 */ 61 CM_FAILURE = -1, 62 CM_NOT_IMPLEMENTED = -2, 63 CM_SURFACE_ALLOCATION_FAILURE = -3, 64 CM_OUT_OF_HOST_MEMORY = -4, 65 CM_SURFACE_FORMAT_NOT_SUPPORTED = -5, 66 CM_EXCEED_SURFACE_AMOUNT = -6, 67 CM_EXCEED_KERNEL_ARG_AMOUNT = -7, 68 CM_EXCEED_KERNEL_ARG_SIZE_IN_BYTE = -8, 69 CM_INVALID_ARG_INDEX = -9, 70 CM_INVALID_ARG_VALUE = -10, 71 CM_INVALID_ARG_SIZE = -11, 72 CM_INVALID_THREAD_INDEX = -12, 73 CM_INVALID_WIDTH = -13, 74 CM_INVALID_HEIGHT = -14, 75 CM_INVALID_DEPTH = -15, 76 CM_INVALID_COMMON_ISA = -16, 77 CM_OPEN_VIDEO_DEVICE_HANDLE_FAILURE = -17, 78 CM_VIDEO_DEVICE_LOCKED = -18, // Video device is already locked. 79 CM_LOCK_VIDEO_DEVICE_FAILURE = -19, // Video device is not locked but can't be locked. 80 CM_EXCEED_SAMPLER_AMOUNT = -20, 81 CM_EXCEED_MAX_KERNEL_PER_ENQUEUE = -21, 82 CM_EXCEED_MAX_KERNEL_SIZE_IN_BYTE = -22, 83 CM_EXCEED_MAX_THREAD_AMOUNT_PER_ENQUEUE = -23, 84 CM_EXCEED_VME_STATE_G6_AMOUNT = -24, 85 CM_INVALID_THREAD_SPACE = -25, 86 CM_EXCEED_MAX_TIMEOUT = -26, 87 CM_JITDLL_LOAD_FAILURE = -27, 88 CM_JIT_COMPILE_FAILURE = -28, 89 CM_JIT_COMPILESIM_FAILURE = -29, 90 CM_INVALID_THREAD_GROUP_SPACE = -30, 91 CM_THREAD_ARG_NOT_ALLOWED = -31, 92 CM_INVALID_GLOBAL_BUFFER_INDEX = -32, 93 CM_INVALID_BUFFER_HANDLER = -33, 94 CM_EXCEED_MAX_SLM_SIZE = -34, 95 CM_JITDLL_OLDER_THAN_ISA = -35, 96 CM_INVALID_HARDWARE_THREAD_NUMBER = -36, 97 CM_GTPIN_INVOKE_FAILURE = -37, 98 CM_INVALIDE_L3_CONFIGURATION = -38, 99 CM_INVALID_TEXTURE2D_USAGE = -39, 100 CM_INTEL_GFX_NOTFOUND = -40, 101 CM_GPUCOPY_INVALID_SYSMEM = -41, 102 CM_GPUCOPY_INVALID_WIDTH = -42, 103 CM_GPUCOPY_INVALID_STRIDE = -43, 104 CM_EVENT_DRIVEN_FAILURE = -44, 105 CM_LOCK_SURFACE_FAIL = -45, // Lock surface failed 106 CM_INVALID_GENX_BINARY = -46, 107 CM_FEATURE_NOT_SUPPORTED_IN_DRIVER = -47, // driver out-of-sync 108 CM_QUERY_DLL_VERSION_FAILURE = -48, //Fail in getting DLL file version 109 CM_KERNELPAYLOAD_PERTHREADARG_MUTEX_FAIL = -49, 110 CM_KERNELPAYLOAD_PERKERNELARG_MUTEX_FAIL = -50, 111 CM_KERNELPAYLOAD_SETTING_FAILURE = -51, 112 CM_KERNELPAYLOAD_SURFACE_INVALID_BTINDEX = -52, 113 CM_NOT_SET_KERNEL_ARGUMENT = -53, 114 CM_GPUCOPY_INVALID_SURFACES = -54, 115 CM_GPUCOPY_INVALID_SIZE = -55, 116 CM_GPUCOPY_OUT_OF_RESOURCE = -56, 117 CM_INVALID_VIDEO_DEVICE = -57, 118 CM_SURFACE_DELAY_DESTROY = -58, 119 CM_INVALID_VEBOX_STATE = -59, 120 CM_INVALID_VEBOX_SURFACE = -60, 121 CM_FEATURE_NOT_SUPPORTED_BY_HARDWARE = -61, 122 CM_RESOURCE_USAGE_NOT_SUPPORT_READWRITE = -62, 123 CM_MULTIPLE_MIPLEVELS_NOT_SUPPORTED = -63, 124 CM_INVALID_UMD_CONTEXT = -64, 125 CM_INVALID_LIBVA_SURFACE = -65, 126 CM_INVALID_LIBVA_INITIALIZE = -66, 127 CM_KERNEL_THREADSPACE_NOT_SET = -67, 128 CM_INVALID_KERNEL_THREADSPACE = -68, 129 CM_KERNEL_THREADSPACE_THREADS_NOT_ASSOCIATED= -69, 130 CM_KERNEL_THREADSPACE_INTEGRITY_FAILED = -70, 131 CM_INVALID_USERPROVIDED_GENBINARY = -71, 132 CM_INVALID_PRIVATE_DATA = -72, 133 CM_INVALID_MOS_RESOURCE_HANDLE = -73, 134 CM_SURFACE_CACHED = -74, 135 CM_SURFACE_IN_USE = -75, 136 CM_INVALID_GPUCOPY_KERNEL = -76, 137 CM_INVALID_DEPENDENCY_WITH_WALKING_PATTERN = -77, 138 CM_INVALID_MEDIA_WALKING_PATTERN = -78, 139 CM_FAILED_TO_ALLOCATE_SVM_BUFFER = -79, 140 CM_EXCEED_MAX_POWER_OPTION_FOR_PLATFORM = -80, 141 CM_INVALID_KERNEL_THREADGROUPSPACE = -81, 142 CM_INVALID_KERNEL_SPILL_CODE = -82, 143 CM_UMD_DRIVER_NOT_SUPPORTED = -83, 144 CM_INVALID_GPU_FREQUENCY_VALUE = -84, 145 CM_SYSTEM_MEMORY_NOT_4KPAGE_ALIGNED = -85, 146 CM_KERNEL_ARG_SETTING_FAILED = -86, 147 CM_NO_AVAILABLE_SURFACE = -87, 148 CM_VA_SURFACE_NOT_SUPPORTED = -88, 149 CM_TOO_MUCH_THREADS = -89, 150 CM_NULL_POINTER = -90, 151 CM_EXCEED_MAX_NUM_2D_ALIASES = -91, 152 CM_INVALID_PARAM_SIZE = -92, 153 CM_GT_UNSUPPORTED = -93, 154 CM_GTPIN_FLAG_NO_LONGER_SUPPORTED = -94, 155 CM_PLATFORM_UNSUPPORTED_FOR_API = -95, 156 CM_TASK_MEDIA_RESET = -96, 157 CM_KERNELPAYLOAD_SAMPLER_INVALID_BTINDEX = -97, 158 CM_EXCEED_MAX_NUM_BUFFER_ALIASES = -98, 159 CM_SYSTEM_MEMORY_NOT_4PIXELS_ALIGNED = -99, 160 CM_FAILED_TO_CREATE_CURBE_SURFACE = -100, 161 CM_INVALID_CAP_NAME = -101, 162 CM_INVALID_USER_GPU_CONTEXT_FOR_QUEUE_EX = -102, 163 CM_INVALID_CREATE_OPTION_FOR_BUFFER_STATELESS = -103, 164 CM_INVALID_KERNEL_ARG_POINTER = -104, 165 CM_SYSTEM_MEMORY_NOT_2PIXELS_ALIGNED = -105, 166 CM_NO_SUPPORTED_ADAPTER = -106, 167 /* 168 * RANGE -10000 ~ -19999 FOR INTERNAL ERROR CODE 169 */ 170 CM_INTERNAL_ERROR_CODE_OFFSET = -10000, 171 172 /* 173 * RANGE <=-20000 AREAD FOR MOST STATUS CONVERSION 174 */ 175 CM_MOS_STATUS_CONVERTED_CODE_OFFSET = -20000 176 } CM_RETURN_CODE; 177 178 //------------------------------------------------------------------------------ 179 //| Lock flags 180 //------------------------------------------------------------------------------ 181 #define CM_HAL_LOCKFLAG_READONLY 0x00000001 182 #define CM_HAL_LOCKFLAG_WRITEONLY 0x00000002 183 184 #define CM_BATCH_BUFFER_REUSE_ENABLE 1 185 #define CM_MAX_TASKS_DEFAULT 4 186 #define CM_MAXIMUM_TASKS 64 // used for VTune time collection static arrays 187 #define CM_MAX_TASKS_EU_SATURATION 4 188 189 #define CM_KERNEL_BINARY_BLOCK_SIZE 65536 // 64 KB 190 #define CM_KERNEL_BINARY_PADDING_SIZE 128 // Padding after kernel binary to WA page fault issue. 191 #define CM_MAX_KERNELS_PER_TASK 16 192 #define CM_MAX_SPILL_SIZE_PER_THREAD_IVB 11264 // 11 KB 193 #define CM_MAX_SPILL_SIZE_PER_THREAD_HSW_BDW 131072 // 128 KB 194 #define CM_MAX_SPILL_SIZE_PER_THREAD_HEVC 16384 // 16 KB 195 #define CM_MAX_SPILL_SIZE_PER_THREAD_DEFAULT CM_MAX_SPILL_SIZE_PER_THREAD // 196 #define CM_MAX_SAMPLER_TABLE_SIZE 512 197 #define CM_MAX_SAMPLER_8X8_TABLE_SIZE 2 198 #define CM_MAX_AVS_SAMPLER_SIZE 16 199 #define CM_MAX_3D_SAMPLER_SIZE 16 200 #define CM_MAX_VME_BINDING_INDEX 3 // base + forward + backward 201 #define CM_MAX_VME_BINDING_INDEX_1 33 // base + forward + backward when >= HSW 202 #define CM_MAX_BUFFER_SURFACE_TABLE_SIZE 256 203 #define CM_MAX_2D_SURFACE_UP_TABLE_SIZE 512 204 #define CM_MAX_2D_SURFACE_TABLE_SIZE 256 205 #define CM_MAX_3D_SURFACE_TABLE_SIZE 64 206 #define CM_MAX_USER_THREADS 262144 // 512x512 (max TS size) * 64 bytes (sizeof(MO cmd) + 10DW) = 16 MB (max allocated for BB) 207 #define CM_MAX_USER_THREADS_NO_THREADARG 262144 // 512x512 (max TS size) * 64 bytes (sizeof(MO cmd) + 10DW) = 16 MB (max allocated for BB) 208 #define MAX_THREAD_SPACE_WIDTH_PERGROUP 64 209 #define MAX_THREAD_SPACE_HEIGHT_PERGROUP 64 210 #define MAX_THREAD_SPACE_DEPTH_PERGROUP 64 211 #define CM_MAX_BB_SIZE 16777216 // 16 MB - Maximum Space allocated for Batch Buffer 212 #define CM_MAX_ARGS_PER_KERNEL 255 // compiler only supports up to 255 arguments 213 #define CM_MAX_THREAD_PAYLOAD_SIZE 2016 // 63 GRF 214 #define CM_MAX_ARG_BYTE_PER_KERNEL CM_MAX_THREAD_PAYLOAD_SIZE 215 #define CM_EXTRA_BB_SPACE (256 + 8*64) // Additional Space in BB for commands other than MEDIA_OBJECT, 8 addtional cachelines to avoid page fault 216 #define CM_MAX_STATIC_SURFACE_STATES_PER_BT 256 // Max possible surface state per binding table 217 #define CM_MAX_SURFACE_STATES_PER_BT 64 // Pre-set Max Surface state per binding table 218 #define CM_MAX_SURFACE_STATES 256 // Max Surface states 219 #define CM_PAYLOAD_OFFSET 32 // CM Compiler generates offset by 32 bytes. This need to be subtracted from kernel data offset. 220 #define CM_PER_KERNEL_ARG_VAL 1 // Per Kernel Indication 221 #define CM_MAX_CURBE_SIZE_PER_TASK 8192 // 256 GRF 222 #define CM_MAX_CURBE_SIZE_PER_KERNEL CM_MAX_THREAD_PAYLOAD_SIZE // 63 GRF 223 #define CM_MAX_THREAD_WIDTH_FOR_MW 511 224 #define CM_MAX_INDIRECT_DATA_SIZE_PER_KERNEL 1984 // 496 x 4 225 #define CM_HAL_MAX_DEPENDENCY_COUNT 8 226 #define CM_HAL_MAX_NUM_2D_ALIASES 10 // maximum number of aliases for one 2D surface. Arbitrary - can be increased 227 #define CM_HAL_MAX_NUM_BUFFER_ALIASES 10 // maximum number of aliases for one Buffer. Arbitrary - can be increased 228 229 #define CM_MAX_SIP_SIZE 0x4000 // 16k system routine size 230 #define CM_DEBUG_SURFACE_INDEX 252 // reserved for tools 231 #define CM_DEBUG_SURFACE_SIZE 0x10000 // 64k for all threads 232 #define CM_CSR_SURFACE_SIZE 0x800000 // 8 M Bytes for CSR surface 233 #define CM_SYNC_QWORD_PER_TASK 2 // 2 time stamps are record for a task. 1 for GPU start time stamp, 1 for GPU end time stamp. 234 235 #define CM_NULL_SURFACE 0xFFFF 236 #define CM_SURFACE_MASK 0xFFFF 237 #define CM_DEFAULT_CACHE_TYPE 0xFF00 238 239 #define CM_NULL_SURFACE_BINDING_INDEX 0 // Reserve 0 for NULL surface 240 #define CM_MAX_GLOBAL_SURFACE_NUMBER 7 241 242 #define CM_RESERVED_SURFACE_NUMBER_FOR_KERNEL_DEBUG 1 //debug surface 243 #define CM_GPUWALKER_IMPLICIT_ARG_NUM 6 //thread and group spaces plus thread id in two dimentions. 244 #define CM_HAL_MAX_VEBOX_SURF_NUM 16 245 246 #define __CM_SIP_FILE_PATH_GT1 "c:\\sip\\SIP_BTI_252_GT1.dat" 247 #define __CM_SIP_FILE_PATH_GT2 "c:\\sip\\SIP_BTI_252_GT2.dat" 248 #define __CM_SIP_FILE_PATH_GT3 "c:\\sip\\SIP_BTI_252_GT3.dat" 249 #define __CM_SIP_FILE_PATH_GT4 "c:\\sip\\SIP_BTI_252_GT4.dat" 250 251 #define CM_HAL_GPU_CONTEXT_COUNT 2 // MOS_GPU_CONTEXT_RENDER4 and MOS_GPU_CONTEXT_RENDER3 252 253 #define CM_INVALID_INDEX -1 254 255 #define CM_KERNEL_FLAGS_CURBE 0x00000001 256 #define CM_KERNEL_FLAGS_NONSTALLING_SCOREBOARD 0x00000002 //bit 1 257 258 //CM MemObjCtl associated 259 #define CM_INVALID_MEMOBJCTL 0xFF 260 #define CM_MEMOBJCTL_CACHE_MASK 0xFF00 261 262 //Enqueue with Sync 263 #define CM_NO_KERNEL_SYNC 0 264 265 //Conditional batch buffer end 266 #define CM_NO_CONDITIONAL_END 0 267 #define CM_DEFAULT_COMPARISON_VALUE 0 268 #define CM_MAX_CONDITIONAL_END_CMDS 64 269 270 // CM masks used to decode hints for EnqueueWithHints 271 #define CM_HINTS_MASK_MEDIAOBJECT 0x1 272 #define CM_HINTS_MASK_KERNEL_GROUPS 0xE 273 #define CM_HINTS_NUM_BITS_WALK_OBJ 0x1 274 #define CM_HINTS_LEASTBIT_MASK 1 275 #define CM_HINTS_DEFAULT_NUM_KERNEL_GRP 1 276 #define CM_DEFAULT_THREAD_DEPENDENCY_MASK 0xFF 277 #define CM_REUSE_DEPENDENCY_MASK 0x1 278 #define CM_RESET_DEPENDENCY_MASK 0x2 279 #define CM_NO_BATCH_BUFFER_REUSE 0x4 280 #define CM_NO_BATCH_BUFFER_REUSE_BIT_POS 0x2 281 #define CM_SCOREBOARD_MASK_POS_IN_MEDIA_OBJECT_CMD 0x5 282 #define CM_HINTS_MASK_NUM_TASKS 0x70 283 #define CM_HINTS_NUM_BITS_TASK_POS 0x4 284 285 // CM device creation with different options 286 #define CM_DEVICE_CREATE_OPTION_SCRATCH_SPACE_ENABLE 0 287 #define CM_DEVICE_CREATE_OPTION_SCRATCH_SPACE_DISABLE 1 288 #define CM_DEVICE_CREATE_OPTION_SCRATCH_SPACE_MASK 1 289 290 #define CM_DEVICE_CREATE_OPTION_SCRATCH_SPACE_ENABLE_HEVC 2 291 #define CM_DEVICE_CREATE_OPTION_MAX_TASKS_HEVC_MASK 4 292 293 #define CM_DEVICE_CREATE_OPTION_TDR_DISABLE 64 //Reserved, used only in CMRT Thin 294 295 #define CM_DEVICE_CREATE_PRIORITY_DEFAULT 0 296 #define CM_DEVICE_CREATE_PRIORITY_REALTIME 1 297 298 #define CM_DEVICE_CREATE_OPTION_DEFAULT CM_DEVICE_CREATE_OPTION_SCRATCH_SPACE_ENABLE 299 300 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_OFFSET 1 301 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_MASK (7 << CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_OFFSET) 302 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_16K_STEP 16384 //16K 303 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_16K 1 304 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_32K 2 305 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_48K 3 306 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_64K 4 307 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_80K 5 308 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_96K 6 309 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_112K 7 310 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_128K 0 // 128K By default 311 #define CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_DEFAULT CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_128K 312 313 #define CM_DEVICE_CONFIG_TASK_NUM_OFFSET 4 314 #define CM_DEVICE_CONFIG_TASK_NUM_MASK (3 << CM_DEVICE_CONFIG_TASK_NUM_OFFSET) 315 #define CM_DEVICE_CONFIG_TASK_NUM_DEFAULT 0 316 #define CM_DEVICE_CONFIG_TASK_NUM_8 1 317 #define CM_DEVICE_CONFIG_TASK_NUM_12 2 318 #define CM_DEVICE_CONFIG_TASK_NUM_16 3 319 #define CM_DEVICE_CONFIG_TASK_NUM_STEP 4 320 321 #define CM_DEVICE_CONFIG_MEDIA_RESET_OFFSET 7 322 #define CM_DEVICE_CONFIG_MEDIA_RESET_ENABLE (1 << CM_DEVICE_CONFIG_MEDIA_RESET_OFFSET) 323 324 #define CM_DEVICE_CONFIG_EXTRA_TASK_NUM_OFFSET 8 325 #define CM_DEVICE_CONFIG_EXTRA_TASK_NUM_MASK (3 << CM_DEVICE_CONFIG_EXTRA_TASK_NUM_OFFSET) 326 #define CM_DEVICE_CONFIG_EXTRA_TASK_NUM_4 3 327 328 #define CM_DEVICE_CONFIG_SLICESHUTDOWN_OFFSET 10 329 #define CM_DEVICE_CONFIG_SLICESHUTDOWN_ENABLE (1 << CM_DEVICE_CONFIG_SLICESHUTDOWN_OFFSET) 330 331 #define CM_DEVICE_CONFIG_GPUCONTEXT_OFFSET 12 332 #define CM_DEVICE_CONFIG_GPUCONTEXT_ENABLE (1 << CM_DEVICE_CONFIG_GPUCONTEXT_OFFSET) 333 334 #define CM_DEVICE_CONFIG_KERNELBINARYGSH_OFFSET 13 335 #define CM_DEVICE_CONFIG_KERNELBINARYGSH_MASK (255 << CM_DEVICE_CONFIG_KERNELBINARYGSH_OFFSET ) 336 337 #define CM_DEVICE_CONFIG_DSH_DISABLE_OFFSET 21 338 #define CM_DEVICE_CONFIG_DSH_DISABLE_MASK (1 << CM_DEVICE_CONFIG_DSH_DISABLE_OFFSET) 339 340 #define CM_DEVICE_CONFIG_MIDTHREADPREEMPTION_OFFSET 22 341 #define CM_DEVICE_CONFIG_MIDTHREADPREEMPTION_DISENABLE (1 << CM_DEVICE_CONFIG_MIDTHREADPREEMPTION_OFFSET) 342 343 #define CM_DEVICE_CONFIG_KERNEL_DEBUG_OFFSET 23 344 #define CM_DEVICE_CONFIG_KERNEL_DEBUG_ENABLE (1 << CM_DEVICE_CONFIG_KERNEL_DEBUG_OFFSET) 345 346 #define CM_DEVICE_CONFIG_VEBOX_OFFSET 28 347 #define CM_DEVICE_CONFIG_VEBOX_DISABLE (1 << CM_DEVICE_CONFIG_VEBOX_OFFSET) 348 349 #define CM_DEVICE_CONFIG_GPUCOPY_OFFSET 29 350 #define CM_DEVICE_CONFIG_GPUCOPY_DISABLE (1 << CM_DEVICE_CONFIG_GPUCOPY_OFFSET) 351 352 #define CM_DEVICE_CONFIG_FAST_PATH_OFFSET 30 353 #define CM_DEVICE_CONFIG_FAST_PATH_ENABLE (1 << CM_DEVICE_CONFIG_FAST_PATH_OFFSET) 354 355 #define CM_DEVICE_CONFIG_MOCK_RUNTIME_OFFSET 31 356 #define CM_DEVICE_CONFIG_MOCK_RUNTIME_ENABLE (1 << CM_DEVICE_CONFIG_MOCK_RUNTIME_OFFSET) 357 358 // HEVC config : 359 // Scratch space size :16k 360 // Number of task: 16 361 // Media Reset Option : true 362 // Extra task num: 4 363 #define CM_DEVICE_CREATE_OPTION_FOR_HEVC ((CM_DEVICE_CREATE_OPTION_SCRATCH_SPACE_ENABLE) \ 364 | (CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_16K << CM_DEVICE_CONFIG_SCRATCH_SPACE_SIZE_OFFSET) \ 365 | (CM_DEVICE_CONFIG_TASK_NUM_16 << CM_DEVICE_CONFIG_TASK_NUM_OFFSET) \ 366 | (CM_DEVICE_CONFIG_MEDIA_RESET_ENABLE) \ 367 | (CM_DEVICE_CONFIG_EXTRA_TASK_NUM_4 << CM_DEVICE_CONFIG_EXTRA_TASK_NUM_OFFSET)\ 368 | (CM_DEVICE_CONFIG_GPUCONTEXT_ENABLE)) 369 370 // HEVC config with slice shutdown enabled 371 #define CM_DEVICE_CREATE_OPTION_FOR_HEVC_SSD ((CM_DEVICE_CREATE_OPTION_FOR_HEVC) | (CM_DEVICE_CONFIG_SLICESHUTDOWN_ENABLE)) 372 373 #define CM_ARGUMENT_SURFACE_SIZE 4 374 375 #define MAX_STEPPING_NUM 10 376 377 #define CM_26ZI_BLOCK_WIDTH 16 378 #define CM_26ZI_BLOCK_HEIGHT 8 379 380 #define CM_NUM_DWORD_FOR_MW_PARAM 16 381 382 #define CM_MAX_KERNEL_NAME_SIZE_IN_BYTE 256 383 #define CM_EXTRA_STRING_LENGTH_FOR_MWMO_DUMP 50 384 385 #define CM_KERNELBINARY_BLOCKSIZE_2MB (1024 * 1024 * 2) 386 #define CM_64BYTE (64) 387 388 #define CM_DDI_1_0 100 389 #define CM_DDI_1_1 101 390 #define CM_DDI_1_2 102 391 #define CM_DDI_1_3 103 392 #define CM_DDI_1_4 104 393 #define CM_DDI_2_0 200 394 #define CM_DDI_2_1 201 395 #define CM_DDI_2_2 202 396 #define CM_DDI_2_3 203 397 #define CM_DDI_2_4 204 398 #define CM_DDI_3_0 300 399 #define CM_DDI_4_0 400 400 #define CM_DDI_5_0 500 401 #define CM_DDI_6_0 600 402 #define CM_DDI_7_0 700 403 #define CM_DDI_7_2 702 //for MDFRT API refreshment. 404 405 #define CM_VERSION (CM_DDI_7_2) 406 407 #define CM_BUFFER_STATELESS_CREATE_OPTION_GFX_MEM 0 408 #define CM_BUFFER_STATELESS_CREATE_OPTION_SYS_MEM 1 409 #define CM_BUFFER_STATELESS_CREATE_OPTION_DEFAULT CM_BUFFER_STATELESS_CREATE_OPTION_GFX_MEM 410 411 //------------------------------------------------------------------------------ 412 //| Forward declarations 413 //------------------------------------------------------------------------------ 414 typedef struct _CM_HAL_STATE *PCM_HAL_STATE; 415 416 struct CM_HAL_KERNEL_PARAM; 417 typedef CM_HAL_KERNEL_PARAM *PCM_HAL_KERNEL_PARAM; 418 419 // Queue option used by multiple context queues 420 enum CM_QUEUE_TYPE 421 { 422 CM_QUEUE_TYPE_NONE = 0, 423 CM_QUEUE_TYPE_RENDER = 1, 424 CM_QUEUE_TYPE_COMPUTE = 2 425 }; 426 427 enum CM_QUEUE_SSEU_USAGE_HINT_TYPE 428 { 429 CM_QUEUE_SSEU_USAGE_HINT_DEFAULT = 0, 430 CM_QUEUE_SSEU_USAGE_HINT_VME = 1 431 }; 432 433 struct _CM_QUEUE_CREATE_OPTION 434 { 435 CM_QUEUE_TYPE QueueType : 3; 436 bool RAMode : 1; 437 unsigned int Reserved0 : 3; 438 bool UserGPUContext : 1; // Is the user-provided GPU Context already created externally 439 unsigned int GPUContext : 8; // user-provided GPU Context ordinal 440 CM_QUEUE_SSEU_USAGE_HINT_TYPE SseuUsageHint : 3; 441 unsigned int Reserved1 : 1; 442 unsigned int IsRealTimePrioriy : 1; // Create Context with real-time priority 443 unsigned int Reserved2 : 11; 444 }; 445 #define CM_QUEUE_CREATE_OPTION _CM_QUEUE_CREATE_OPTION 446 447 const CM_QUEUE_CREATE_OPTION CM_DEFAULT_QUEUE_CREATE_OPTION = { CM_QUEUE_TYPE_RENDER, false, 0, false, 0, CM_QUEUE_SSEU_USAGE_HINT_DEFAULT, 0, 0, 0}; 448 449 //------------------------------------------------------------------------------ 450 //|GT-PIN 451 typedef struct _CM_SURFACE_DETAILS 452 { 453 uint32_t width; //width of surface 454 uint32_t height; //height of surface, 0 if surface is CmBuffer 455 uint32_t depth; //depth of surface, 0 if surface is CmBuffer or CmSurface2D 456 457 DdiSurfaceFormat format; //format of surface, UNKNOWN if surface is CmBuffer 458 uint32_t planeIndex; //plane Index for this BTI, 0 if surface is not planar surface 459 460 uint32_t pitch; //pitch of suface, 0 if surface is CmBuffer 461 uint32_t slicePitch; //pitch of a slice in CmSurface3D, 0 if surface is CmBuffer or CmSurface2D 462 uint32_t surfaceBaseAddress; 463 uint8_t tiledSurface; //bool 464 uint8_t tileWalk; //bool 465 uint32_t xOffset; 466 uint32_t yOffset; 467 }CM_SURFACE_DETAILS,*PCM_SURFACE_DETAILS; 468 469 //------------------------------------------------------------------------------ 470 //| CM dependency pattern 471 //------------------------------------------------------------------------------ 472 typedef enum _CM_DEPENDENCY_PATTERN 473 { 474 CM_NONE_DEPENDENCY = 0, //All threads run parallel, scanline dispatch 475 CM_WAVEFRONT = 1, 476 CM_WAVEFRONT26 = 2, 477 CM_VERTICAL_WAVE = 3, 478 CM_HORIZONTAL_WAVE = 4, 479 CM_WAVEFRONT26Z = 5, 480 CM_WAVEFRONT26X = 6, 481 CM_WAVEFRONT26ZIG = 7, 482 CM_WAVEFRONT26ZI = 8 483 } CM_DEPENDENCY_PATTERN; 484 485 //------------------------------------------------------------------------------ 486 //| CM media walking pattern (used with no dependency) 487 //------------------------------------------------------------------------------ 488 typedef enum _CM_WALKING_PATTERN 489 { 490 CM_WALK_DEFAULT = 0, 491 CM_WALK_WAVEFRONT = 1, 492 CM_WALK_WAVEFRONT26 = 2, 493 CM_WALK_VERTICAL = 3, 494 CM_WALK_HORIZONTAL = 4, 495 CM_WALK_WAVEFRONT26X = 5, 496 CM_WALK_WAVEFRONT26ZIG = 6, 497 CM_WALK_WAVEFRONT45D = 7, 498 CM_WALK_WAVEFRONT45XD_2 = 8, 499 CM_WALK_WAVEFRONT26XALT = 9, 500 CM_WALK_WAVEFRONT26D = 10, 501 CM_WALK_WAVEFRONT26XD = 11 502 } CM_WALKING_PATTERN; 503 504 //------------------------------------------------------------------------------ 505 //| CM MEDIA_OBJECT_WALKER GroupID Select 506 //------------------------------------------------------------------------------ 507 typedef enum _CM_MW_GROUP_SELECT 508 { 509 CM_MW_GROUP_NONE = 0, 510 CM_MW_GROUP_COLORLOOP = 1, 511 CM_MW_GROUP_INNERLOCAL = 2, 512 CM_MW_GROUP_MIDLOCAL = 3, 513 CM_MW_GROUP_OUTERLOCAL = 4, 514 CM_MW_GROUP_INNERGLOBAL = 5, 515 } CM_MW_GROUP_SELECT; 516 517 //------------------------------------------------------------------------------ 518 //| CM media walking parameters (used for engineering build) 519 //------------------------------------------------------------------------------ 520 typedef struct _CM_WALKING_PARAMETERS 521 { 522 uint32_t Value[CM_NUM_DWORD_FOR_MW_PARAM]; 523 } CM_WALKING_PARAMETERS, *PCM_WALKING_PARAMETERS; 524 525 #define CM_FUSED_EU_DISABLE 0 526 #define CM_FUSED_EU_ENABLE 1 527 #define CM_FUSED_EU_DEFAULT CM_FUSED_EU_DISABLE 528 529 #define CM_TURBO_BOOST_DISABLE 0 530 #define CM_TURBO_BOOST_ENABLE 1 531 #define CM_TURBO_BOOST_DEFAULT CM_TURBO_BOOST_ENABLE 532 533 typedef struct _CM_TASK_CONFIG 534 { 535 bool turboBoostFlag : 1; 536 bool fusedEuDispatchFlag : 1; 537 bool enableFenceFlag : 1; 538 uint32_t reserved_bits :29; 539 uint32_t reserved0; 540 uint32_t reserved1; 541 uint32_t reserved2; 542 }CM_TASK_CONFIG, *PCM_TASK_CONFIG; 543 544 typedef enum _CM_KERNEL_EXEC_MODE 545 { 546 CM_KERNEL_EXECUTION_MODE_MONOPOLIZED = 0, // Kernel need occupy all DSS for execution. 547 CM_KERNEL_EXECUTION_MODE_CONCURRENT, // Kernel can occupy part of DSS and concurrently execute together with other workloads. 548 } CM_KERNEL_EXEC_MODE; 549 550 struct CM_EXECUTION_CONFIG 551 { 552 CM_KERNEL_EXEC_MODE kernelExecutionMode = CM_KERNEL_EXECUTION_MODE_MONOPOLIZED; 553 int concurrentPolicy = 0; //Reserve for future extension. 554 }; 555 556 struct CM_KERNEL_SYNC_CONFIG { 557 bool dataCacheFlush : 1; // true: cache will be flushed; 558 uint32_t reserved : 31; 559 }; 560 561 struct L3ConfigRegisterValues 562 { 563 unsigned int config_register0; 564 unsigned int config_register1; 565 unsigned int config_register2; 566 unsigned int config_register3; 567 }; 568 569 //*----------------------------------------------------------------------------- 570 //| Execute Vebox data params 571 //*----------------------------------------------------------------------------- 572 typedef struct _CM_VEBOX_STATE 573 { 574 575 uint32_t ColorGamutExpansionEnable : 1; 576 uint32_t ColorGamutCompressionEnable : 1; 577 uint32_t GlobalIECPEnable : 1; 578 uint32_t DNEnable : 1; 579 uint32_t DIEnable : 1; 580 uint32_t DNDIFirstFrame : 1; 581 uint32_t DownsampleMethod422to420 : 1; 582 uint32_t DownsampleMethod444to422 : 1; 583 uint32_t DIOutputFrames : 2; 584 uint32_t DemosaicEnable : 1; 585 uint32_t VignetteEnable : 1; 586 uint32_t AlphaPlaneEnable : 1; 587 uint32_t HotPixelFilteringEnable : 1; 588 uint32_t SingleSliceVeboxEnable : 1; 589 uint32_t LaceCorrectionEnable : BITFIELD_BIT(16); 590 uint32_t DisableEncoderStatistics : BITFIELD_BIT(17); 591 uint32_t DisableTemporalDenoiseFilter : BITFIELD_BIT(18); 592 uint32_t SinglePipeEnable : BITFIELD_BIT(19); 593 uint32_t __CODEGEN_UNIQUE(Reserved) : BITFIELD_BIT(20); 594 uint32_t ForwardGammaCorrectionEnable : BITFIELD_BIT(21); 595 uint32_t __CODEGEN_UNIQUE(Reserved) : BITFIELD_RANGE(22, 24); 596 uint32_t StateSurfaceControlBits : BITFIELD_RANGE(25, 31); 597 598 } CM_VEBOX_STATE, *PCM_VEBOX_STATE; 599 600 //------------------------------------------------------------------------------ 601 //| HAL Sampler 8x8 State Param for Sampler 8x8 Entry in the array 602 //------------------------------------------------------------------------------ 603 typedef enum _CM_HAL_SAMPLER_8X8_TYPE 604 { 605 CM_SAMPLER8X8_AVS = 0, // AVS sampler8x8 type 606 CM_SAMPLER8X8_CONV = 1, // CONV sampler8x type 607 CM_SAMPLER8X8_MISC = 3, // MISC sampler8x8 type 608 CM_SAMPLER8X8_NONE 609 }CM_HAL_SAMPLER_8X8_TYPE; 610 611 typedef struct _CM_AVS_COEFF_TABLE{ 612 float FilterCoeff_0_0; 613 float FilterCoeff_0_1; 614 float FilterCoeff_0_2; 615 float FilterCoeff_0_3; 616 float FilterCoeff_0_4; 617 float FilterCoeff_0_5; 618 float FilterCoeff_0_6; 619 float FilterCoeff_0_7; 620 }CM_AVS_COEFF_TABLE; 621 622 typedef enum _CM_GPUCOPY_KERNEL_ID 623 { 624 GPU_COPY_KERNEL_UNKNOWN = 0x0, 625 626 //cpu -> gpu 627 GPU_COPY_KERNEL_GPU2CPU_UNALIGNED_NV12_ID = 0x1, 628 GPU_COPY_KERNEL_GPU2CPU_ALIGNED_NV12_ID = 0x2, 629 GPU_COPY_KERNEL_GPU2CPU_UNALIGNED_ID = 0x3, 630 GPU_COPY_KERNEL_GPU2CPU_ALIGNED_ID = 0x4, 631 632 //gpu -> cpu 633 GPU_COPY_KERNEL_CPU2GPU_NV12_ID = 0x5, 634 GPU_COPY_KERNEL_CPU2GPU_ID = 0x6, 635 636 //gpu -> gpu 637 GPU_COPY_KERNEL_GPU2GPU_NV12_ID = 0x7, 638 GPU_COPY_KERNEL_GPU2GPU_ID = 0x8, 639 640 //cpu -> cpu 641 GPU_COPY_KERNEL_CPU2CPU_ID = 0x9 642 } CM_GPUCOPY_KERNEL_ID; 643 644 // referenced in both g9 and g10. 645 typedef enum _CM_HAL_MEMORY_OBJECT_CONTROL_G9 646 { 647 CM_MEMORY_OBJECT_CONTROL_SKL_DEFAULT = 0x0, 648 CM_MEMORY_OBJECT_CONTROL_SKL_NO_L3 = 0x1, 649 CM_MEMORY_OBJECT_CONTROL_SKL_NO_LLC_ELLC = 0x2, 650 CM_MEMORY_OBJECT_CONTROL_SKL_NO_LLC = 0x3, 651 CM_MEMORY_OBJECT_CONTROL_SKL_NO_ELLC = 0x4, 652 CM_MEMORY_OBJECT_CONTROL_SKL_NO_LLC_L3 = 0x5, 653 CM_MEMORY_OBJECT_CONTROL_SKL_NO_ELLC_L3 = 0x6, 654 CM_MEMORY_OBJECT_CONTROL_SKL_NO_CACHE = 0x7 655 }CM_HAL_MEMORY_OBJECT_CONTROL_G9; 656 657 // Unified CM_MEMORY_OBJECT_CONTROL enumeration 658 typedef enum _CM_HAL_MEMORY_OBJECT_CONTROL 659 { 660 CM_MEMORY_OBJECT_CONTROL_DEFAULT = 0x0, 661 CM_MEMORY_OBJECT_CONTROL_NO_L3 = 0x1, 662 CM_MEMORY_OBJECT_CONTROL_NO_LLC_ELLC = 0x2, 663 CM_MEMORY_OBJECT_CONTROL_NO_LLC = 0x3, 664 CM_MEMORY_OBJECT_CONTROL_NO_ELLC = 0x4, 665 CM_MEMORY_OBJECT_CONTROL_NO_LLC_L3 = 0x5, 666 CM_MEMORY_OBJECT_CONTROL_NO_ELLC_L3 = 0x6, 667 CM_MEMORY_OBJECT_CONTROL_NO_CACHE = 0x7, 668 CM_MEMORY_OBJECT_CONTROL_L1_ENABLED = 0x8 669 }CM_HAL_MEMORY_OBJECT_CONTROL; 670 671 672 typedef struct _CM_POWER_OPTION 673 { 674 uint16_t nSlice; // set number of slice to use: 0(default number), 1, 2... 675 uint16_t nSubSlice; // set number of subslice to use: 0(default number), 1, 2... 676 uint16_t nEU; // set number of EU to use: 0(default number), 1, 2... 677 } CM_POWER_OPTION, *PCM_POWER_OPTION; 678 679 //*----------------------------------------------------------------------------- 680 //| CM Convolve type for SKL+ 681 //*----------------------------------------------------------------------------- 682 typedef enum _CM_CONVOLVE_SKL_TYPE 683 { 684 CM_CONVOLVE_SKL_TYPE_2D = 0, 685 CM_CONVOLVE_SKL_TYPE_1D = 1, 686 CM_CONVOLVE_SKL_TYPE_1P = 2 687 } CM_CONVOLVE_SKL_TYPE; 688 689 // to define frame type for interlace frame support 690 typedef enum _CM_FRAME_TYPE 691 { 692 CM_FRAME, // singe frame, not interlaced 693 CM_TOP_FIELD, 694 CM_BOTTOM_FIELD, 695 MAX_FRAME_TYPE 696 } CM_FRAME_TYPE; 697 698 //L3 Configurations 699 typedef struct _L3_CONFIG { 700 uint32_t slm; //sharedlocalmemory 701 uint32_t urb; //unified return buffer 702 uint32_t rest; //rest 703 uint32_t datacluster; //data cluster 704 uint32_t readonly; //read only 705 uint32_t instruction; //instruction/state cache 706 uint32_t constant; //constant cache 707 uint32_t texture; //texture cache 708 uint32_t sum; //sum 709 } L3_CONFIG; 710 711 typedef enum _L3_SUGGEST_CONFIG 712 { 713 CM_L3_PLANE_DEFAULT = 0, 714 CM_L3_PLANE_1, 715 CM_L3_PLANE_2, 716 CM_L3_PLANE_3, 717 CM_L3_PLANE_4, 718 CM_L3_PLANE_5, 719 CM_L3_PLANE_6, 720 CM_L3_PLANE_7, 721 CM_L3_PLANE_8, 722 } L3_SUGGEST_CONFIG; 723 724 enum SURFACE_DESTROY_KIND{ 725 APP_DESTROY = 0, 726 DELAYED_DESTROY = 1, 727 FORCE_DESTROY = 2 728 }; 729 730 // Need to consistant with compiler 731 enum CM_ARG_KIND 732 { 733 // compiler-defined kind 734 ARG_KIND_GENERAL = 0x0, 735 ARG_KIND_SAMPLER = 0x1, 736 //ARG_KIND_SURFACE = 0x2, compiler value for surface 737 // runtime classify further surface to 1D/2D/3D 738 ARG_KIND_SURFACE_2D = 0x2, 739 ARG_KIND_SURFACE_1D = 0x3, 740 ARG_KIND_SURFACE_3D = 0x4, 741 ARG_KIND_SURFACE_VME = 0x5, 742 ARG_KIND_VME_INDEX = 0x6, 743 ARG_KIND_SURFACE_2D_UP = 0x7, 744 ARG_KIND_SURFACE_SAMPLER8X8_AVS = 0x8, 745 ARG_KIND_SURFACE_SAMPLER8X8_VA = 0x9, //get compiler update before checking this in 746 ARG_KIND_SURFACE_SAMPLER = 0xb, 747 ARG_KIND_SURFACE = 0xc, 748 ARG_KIND_SURFACE2DUP_SAMPLER = 0xd, 749 ARG_KIND_IMPLICT_LOCALSIZE = 0xe, 750 ARG_KIND_IMPLICT_GROUPSIZE = 0xf, 751 ARG_KIND_IMPLICIT_LOCALID = 0x10, 752 ARG_KIND_STATE_BUFFER = 0x11, 753 ARG_KIND_GENERAL_DEPVEC = 0x20, 754 ARG_KIND_SURFACE_2D_SCOREBOARD = 0x2A, //used for SW scoreboarding 755 ARG_KIND_GENERAL_DEPCNT = 0x30 //dependency count, used for SW scoreboarding 756 }; 757 758 //non-depend on rtti::dynamic_cast 759 enum CM_ENUM_CLASS_TYPE 760 { 761 CM_ENUM_CLASS_TYPE_CMBUFFER_RT = 0, 762 CM_ENUM_CLASS_TYPE_CMSURFACE2D = 1, 763 CM_ENUM_CLASS_TYPE_CMSURFACE2DUP = 2, 764 CM_ENUM_CLASS_TYPE_CMSURFACE3D = 3, 765 CM_ENUM_CLASS_TYPE_CMSURFACESAMPLER = 4, 766 CM_ENUM_CLASS_TYPE_CMSURFACESAMPLER8X8 = 5, 767 CM_ENUM_CLASS_TYPE_CMSURFACEVME = 6, 768 CM_ENUM_CLASS_TYPE_CMSAMPLER_RT = 7, 769 CM_ENUM_CLASS_TYPE_CMSAMPLER8X8STATE_RT = 8, 770 CM_ENUM_CLASS_TYPE_CM_STATE_BUFFER = 9 771 }; 772 773 #endif // #ifndef MEDIADRIVER_AGNOSTIC_COMMON_CM_CMCOMMON_H_ 774