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