1 /* 2 * Copyright (C) 2018-2020 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8 // clang-format off 9 #pragma once 10 #pragma pack( push, 1 ) 11 12 #include <cstdint> 13 14 const uint32_t MAGIC_CL = 0x494E5443; 15 struct SProgramBinaryHeader 16 { 17 uint32_t Magic; 18 uint32_t Version; 19 20 uint32_t Device; 21 uint32_t GPUPointerSizeInBytes; 22 23 uint32_t NumberOfKernels; 24 25 uint32_t SteppingId; 26 27 uint32_t PatchListSize; 28 }; 29 static_assert( sizeof( SProgramBinaryHeader ) == 28 , "The size of SProgramBinaryHeader is not what is expected" ); 30 31 struct SKernelBinaryHeader 32 { 33 uint32_t CheckSum; 34 uint64_t ShaderHashCode; 35 uint32_t KernelNameSize; 36 uint32_t PatchListSize; 37 }; 38 static_assert( sizeof( SKernelBinaryHeader ) == 20 , "The size of SKernelBinaryHeader is not what is expected" ); 39 40 struct SKernelBinaryHeaderCommon : 41 SKernelBinaryHeader 42 { 43 uint32_t KernelHeapSize; 44 uint32_t GeneralStateHeapSize; 45 uint32_t DynamicStateHeapSize; 46 uint32_t SurfaceStateHeapSize; 47 uint32_t KernelUnpaddedSize; 48 }; 49 static_assert( sizeof( SKernelBinaryHeaderCommon ) == ( 20 + sizeof( SKernelBinaryHeader ) ) , "The size of SKernelBinaryHeaderCommon is not what is expected" ); 50 51 enum PATCH_TOKEN 52 { 53 PATCH_TOKEN_UNKNOWN, // 0 - (Unused) 54 PATCH_TOKEN_MEDIA_STATE_POINTERS, // 1 - (Unused) 55 PATCH_TOKEN_STATE_SIP, // 2 @SPatchStateSIP@ 56 PATCH_TOKEN_CS_URB_STATE, // 3 - (Unused) 57 PATCH_TOKEN_CONSTANT_BUFFER, // 4 - (Unused) 58 PATCH_TOKEN_SAMPLER_STATE_ARRAY, // 5 @SPatchSamplerStateArray@ 59 PATCH_TOKEN_INTERFACE_DESCRIPTOR, // 6 - (Unused) 60 PATCH_TOKEN_VFE_STATE, // 7 - (Unused) 61 PATCH_TOKEN_BINDING_TABLE_STATE, // 8 @SPatchBindingTableState@ 62 PATCH_TOKEN_ALLOCATE_SCRATCH_SURFACE, // 9 - (Unused) 63 PATCH_TOKEN_ALLOCATE_SIP_SURFACE, // 10 @SPatchAllocateSystemThreadSurface@ 64 PATCH_TOKEN_GLOBAL_MEMORY_OBJECT_KERNEL_ARGUMENT, // 11 @SPatchGlobalMemoryObjectKernelArgument@ - OpenCL 65 PATCH_TOKEN_IMAGE_MEMORY_OBJECT_KERNEL_ARGUMENT, // 12 @SPatchImageMemoryObjectKernelArgument@ - OpenCL 66 PATCH_TOKEN_CONSTANT_MEMORY_OBJECT_KERNEL_ARGUMENT, // 13 - (Unused) - OpenCL 67 PATCH_TOKEN_ALLOCATE_SURFACE_WITH_INITIALIZATION, // 14 - (Unused) 68 PATCH_TOKEN_ALLOCATE_LOCAL_SURFACE, // 15 @SPatchAllocateLocalSurface@ 69 PATCH_TOKEN_SAMPLER_KERNEL_ARGUMENT, // 16 @SPatchSamplerKernelArgument@ - OpenCL 70 PATCH_TOKEN_DATA_PARAMETER_BUFFER, // 17 @SPatchDataParameterBuffer@ - OpenCL 71 PATCH_TOKEN_MEDIA_VFE_STATE, // 18 @SPatchMediaVFEState@ 72 PATCH_TOKEN_MEDIA_INTERFACE_DESCRIPTOR_LOAD, // 19 @SPatchMediaInterfaceDescriptorLoad@ 73 PATCH_TOKEN_MEDIA_CURBE_LOAD, // 20 - (Unused) 74 PATCH_TOKEN_INTERFACE_DESCRIPTOR_DATA, // 21 @SPatchInterfaceDescriptorData@ 75 PATCH_TOKEN_THREAD_PAYLOAD, // 22 @SPatchThreadPayload@ 76 PATCH_TOKEN_EXECUTION_ENVIRONMENT, // 23 @SPatchExecutionEnvironment@ 77 PATCH_TOKEN_ALLOCATE_PRIVATE_MEMORY, // 24 - (Unused) 78 PATCH_TOKEN_DATA_PARAMETER_STREAM, // 25 @SPatchDataParameterStream 79 PATCH_TOKEN_KERNEL_ARGUMENT_INFO, // 26 @SPatchKernelArgumentInfo@ - OpenCL 80 PATCH_TOKEN_KERNEL_ATTRIBUTES_INFO, // 27 @SPatchKernelAttributesInfo@ - OpenCL 81 PATCH_TOKEN_STRING, // 28 @SPatchString@ - OpenCL 82 PATCH_TOKEN_ALLOCATE_PRINTF_SURFACE, // 29 - (Unused) - OpenCL 83 PATCH_TOKEN_STATELESS_GLOBAL_MEMORY_OBJECT_KERNEL_ARGUMENT, // 30 @SPatchStatelessGlobalMemoryObjectKernelArgument@ - OpenCL 84 PATCH_TOKEN_STATELESS_CONSTANT_MEMORY_OBJECT_KERNEL_ARGUMENT,//31 @SPatchStatelessConstantMemoryObjectKernelArgument@ - OpenCL 85 PATCH_TOKEN_ALLOCATE_STATELESS_SURFACE_WITH_INITIALIZATION, // 32 - (Unused) 86 PATCH_TOKEN_ALLOCATE_STATELESS_PRINTF_SURFACE, // 33 @SPatchAllocateStatelessPrintfSurface@ 87 PATCH_TOKEN_CB_MAPPING, // 34 - (Unused) 88 PATCH_TOKEN_CB2CR_GATHER_TABLE, // 35 - (Unused) 89 PATCH_TOKEN_ALLOCATE_STATELESS_EVENT_POOL_SURFACE, // 36 @SPatchAllocateStatelessEventPoolSurface@ 90 PATCH_TOKEN_NULL_SURFACE_LOCATION, // 37 - (Unused) 91 PATCH_TOKEN_ALLOCATE_STATELESS_PRIVATE_MEMORY, // 38 @SPatchAllocateStatelessPrivateSurface@ 92 PATCH_TOKEN_ALLOCATE_CONSTANT_MEMORY_SURFACE_WITH_INITIALIZATION, // 39 - (Unused) 93 PATCH_TOKEN_ALLOCATE_GLOBAL_MEMORY_SURFACE_WITH_INITIALIZATION, // 40 - (Unused) 94 PATCH_TOKEN_ALLOCATE_GLOBAL_MEMORY_SURFACE_PROGRAM_BINARY_INFO, // 41 @SPatchAllocateGlobalMemorySurfaceProgramBinaryInfo@ 95 PATCH_TOKEN_ALLOCATE_CONSTANT_MEMORY_SURFACE_PROGRAM_BINARY_INFO, // 42 @SPatchAllocateConstantMemorySurfaceProgramBinaryInfo@ 96 PATCH_TOKEN_ALLOCATE_STATELESS_GLOBAL_MEMORY_SURFACE_WITH_INITIALIZATION, // 43 @SPatchAllocateStatelessGlobalMemorySurfaceWithInitialization@ 97 PATCH_TOKEN_ALLOCATE_STATELESS_CONSTANT_MEMORY_SURFACE_WITH_INITIALIZATION, // 44 @SPatchAllocateStatelessConstantMemorySurfaceWithInitialization@ 98 PATCH_TOKEN_ALLOCATE_STATELESS_DEFAULT_DEVICE_QUEUE_SURFACE, // 45 @SPatchAllocateStatelessDefaultDeviceQueueSurface@ 99 PATCH_TOKEN_STATELESS_DEVICE_QUEUE_KERNEL_ARGUMENT, // 46 @SPatchStatelessDeviceQueueKernelArgument@ 100 PATCH_TOKEN_GLOBAL_POINTER_PROGRAM_BINARY_INFO, // 47 @SPatchGlobalPointerProgramBinaryInfo@ 101 PATCH_TOKEN_CONSTANT_POINTER_PROGRAM_BINARY_INFO, // 48 @SPatchConstantPointerProgramBinaryInfo@ 102 PATCH_TOKEN_CONSTRUCTOR_DESTRUCTOR_KERNEL_PROGRAM_BINARY_INFO, // 49 - (Unused) 103 PATCH_TOKEN_INLINE_VME_SAMPLER_INFO, // 50 - (Unused) 104 PATCH_TOKEN_GTPIN_FREE_GRF_INFO, // 51 @SPatchGtpinFreeGRFInfo@ 105 PATCH_TOKEN_GTPIN_INFO, 106 107 NUM_PATCH_TOKENS 108 }; 109 110 struct SPatchItemHeader 111 { 112 uint32_t Token; 113 uint32_t Size; 114 }; 115 116 struct SPatchDataParameterBuffer : 117 SPatchItemHeader 118 { 119 uint32_t Type; 120 uint32_t ArgumentNumber; 121 uint32_t Offset; 122 uint32_t DataSize; 123 uint32_t SourceOffset; 124 uint32_t LocationIndex; 125 uint32_t LocationIndex2; 126 uint32_t IsEmulationArgument; 127 }; 128 129 struct SPatchMediaInterfaceDescriptorLoad : 130 SPatchItemHeader 131 { 132 uint32_t InterfaceDescriptorDataOffset; 133 }; 134 static_assert( sizeof( SPatchMediaInterfaceDescriptorLoad ) == ( 4 + sizeof( SPatchItemHeader ) ) , "The size of SPatchMediaInterfaceDescriptorLoad is not what is expected" ); 135 struct SPatchStateSIP : 136 SPatchItemHeader 137 { 138 uint32_t SystemKernelOffset; 139 }; 140 141 struct SPatchSamplerStateArray : 142 SPatchItemHeader 143 { 144 uint32_t Offset; 145 uint32_t Count; 146 uint32_t BorderColorOffset; 147 }; 148 149 struct SPatchAllocateConstantMemorySurfaceProgramBinaryInfo : 150 SPatchItemHeader 151 { 152 uint32_t ConstantBufferIndex; 153 uint32_t InlineDataSize; 154 }; 155 static_assert( sizeof( SPatchAllocateConstantMemorySurfaceProgramBinaryInfo ) == ( 8 + sizeof( SPatchItemHeader ) ) , "The size of SPatchAllocateConstantMemorySurfaceProgramBinaryInfo is not what is expected" ); 156 #pragma pack( pop ) 157 // clang-format on