1 /*========================== begin_copyright_notice ============================
2 
3 Copyright (C) 2017-2021 Intel Corporation
4 
5 SPDX-License-Identifier: MIT
6 
7 ============================= end_copyright_notice ===========================*/
8 
9 /*****************************************************************************\
10 Abstract:   Contains common patch structure definitions
11 \*****************************************************************************/
12 #pragma once
13 #include <stdint.h>
14 
15 #pragma pack( push, 1 )
16 
17 namespace iOpenCL
18 {
19 const uint32_t CURRENT_ICBE_VERSION = 1070;
20 const uint32_t MAGIC_CL = 0x494E5443;      // 'I', 'N', 'T', 'C'
21 const uint32_t INVALID_INDEX = 0xFFFFFFFF;
22 
23 /*****************************************************************************\
24 STRUCT: SProgramBinaryHeader
25 \*****************************************************************************/
26 struct SProgramBinaryHeader
27 {
28     uint32_t   Magic;
29     uint32_t   Version;
30 
31     uint32_t   Device;
32     uint32_t   GPUPointerSizeInBytes;
33 
34     uint32_t   NumberOfKernels;
35 
36     uint32_t   SteppingId;
37 
38     uint32_t   PatchListSize;
39 };
40 
41 // Update CURRENT_ICBE_VERSION when modifying the patch list
42 static_assert( sizeof( SProgramBinaryHeader ) == 28 , "The size of SProgramBinaryHeader is not what is expected" );
43 
44 /*****************************************************************************\
45 STRUCT: SKernelBinaryHeader
46 \*****************************************************************************/
47 struct SKernelBinaryHeader
48 {
49     uint32_t   CheckSum;
50     uint64_t   ShaderHashCode;
51     uint32_t   KernelNameSize;
52     uint32_t   PatchListSize;
53 };
54 
55 // Update CURRENT_ICBE_VERSION when modifying the patch list
56 static_assert( sizeof( SKernelBinaryHeader ) == 20 , "The size of SKernelBinaryHeader is not what is expected" );
57 
58 /*****************************************************************************\
59 STRUCT: SKernelBinaryHeaderCommon  (used by Gen7, Gen7.5, Gen8, Gen9, Gen10)
60 \*****************************************************************************/
61 struct SKernelBinaryHeaderCommon :
62        SKernelBinaryHeader
63 {
64     uint32_t   KernelHeapSize;
65     uint32_t   GeneralStateHeapSize;
66     uint32_t   DynamicStateHeapSize;
67     uint32_t   SurfaceStateHeapSize;
68     uint32_t   KernelUnpaddedSize;
69 };
70 
71 // Update CURRENT_ICBE_VERSION when modifying the patch list
72 static_assert( sizeof( SKernelBinaryHeaderCommon ) == ( 20 + sizeof( SKernelBinaryHeader ) ) , "The size of SKernelBinaryHeaderCommon is not what is expected" );
73 
74 /*****************************************************************************\
75 ENUM: PATCH_TOKEN
76 \*****************************************************************************/
77 enum PATCH_TOKEN
78 {
79     PATCH_TOKEN_UNKNOWN,                                        // 0  - (Unused)
80     PATCH_TOKEN_MEDIA_STATE_POINTERS,                           // 1    - (Unused)
81     PATCH_TOKEN_STATE_SIP,                                      // 2  @SPatchStateSIP@
82     PATCH_TOKEN_CS_URB_STATE,                                   // 3    - (Unused)
83     PATCH_TOKEN_CONSTANT_BUFFER,                                // 4    - (Unused)
84     PATCH_TOKEN_SAMPLER_STATE_ARRAY,                            // 5  @SPatchSamplerStateArray@
85     PATCH_TOKEN_INTERFACE_DESCRIPTOR,                           // 6    - (Unused)
86     PATCH_TOKEN_VFE_STATE,                                      // 7    - (Unused)
87     PATCH_TOKEN_BINDING_TABLE_STATE,                            // 8  @SPatchBindingTableState@
88     PATCH_TOKEN_ALLOCATE_SCRATCH_SURFACE,                       // 9  - (Unused)
89     PATCH_TOKEN_ALLOCATE_SIP_SURFACE,                           // 10 @SPatchAllocateSystemThreadSurface@
90     PATCH_TOKEN_GLOBAL_MEMORY_OBJECT_KERNEL_ARGUMENT,           // 11   @SPatchGlobalMemoryObjectKernelArgument@ - OpenCL
91     PATCH_TOKEN_IMAGE_MEMORY_OBJECT_KERNEL_ARGUMENT,            // 12   @SPatchImageMemoryObjectKernelArgument@ - OpenCL
92     PATCH_TOKEN_CONSTANT_MEMORY_OBJECT_KERNEL_ARGUMENT,         // 13   - (Unused)  - OpenCL
93     PATCH_TOKEN_ALLOCATE_SURFACE_WITH_INITIALIZATION,           // 14 - (Unused)
94     PATCH_TOKEN_ALLOCATE_LOCAL_SURFACE,                         // 15 @SPatchAllocateLocalSurface@
95     PATCH_TOKEN_SAMPLER_KERNEL_ARGUMENT,                        // 16   @SPatchSamplerKernelArgument@ - OpenCL
96     PATCH_TOKEN_DATA_PARAMETER_BUFFER,                          // 17   @SPatchDataParameterBuffer@ - OpenCL
97     PATCH_TOKEN_MEDIA_VFE_STATE,                                // 18 @SPatchMediaVFEState@
98     PATCH_TOKEN_MEDIA_INTERFACE_DESCRIPTOR_LOAD,                // 19 @SPatchMediaInterfaceDescriptorLoad@
99     PATCH_TOKEN_MEDIA_CURBE_LOAD,                               // 20   - (Unused)
100     PATCH_TOKEN_INTERFACE_DESCRIPTOR_DATA,                      // 21 @SPatchInterfaceDescriptorData@
101     PATCH_TOKEN_THREAD_PAYLOAD,                                 // 22 @SPatchThreadPayload@
102     PATCH_TOKEN_EXECUTION_ENVIRONMENT,                          // 23 @SPatchExecutionEnvironment@
103     PATCH_TOKEN_ALLOCATE_PRIVATE_MEMORY,                        // 24 - (Unused)
104     PATCH_TOKEN_DATA_PARAMETER_STREAM,                          // 25 @SPatchDataParameterStream
105     PATCH_TOKEN_KERNEL_ARGUMENT_INFO,                           // 26   @SPatchKernelArgumentInfo@ - OpenCL
106     PATCH_TOKEN_KERNEL_ATTRIBUTES_INFO,                         // 27   @SPatchKernelAttributesInfo@ - OpenCL
107     PATCH_TOKEN_STRING,                                         // 28   @SPatchString@ - OpenCL
108     PATCH_TOKEN_ALLOCATE_PRINTF_SURFACE,                        // 29   - (Unused)  - OpenCL
109     PATCH_TOKEN_STATELESS_GLOBAL_MEMORY_OBJECT_KERNEL_ARGUMENT, // 30   @SPatchStatelessGlobalMemoryObjectKernelArgument@ - OpenCL
110     PATCH_TOKEN_STATELESS_CONSTANT_MEMORY_OBJECT_KERNEL_ARGUMENT,//31   @SPatchStatelessConstantMemoryObjectKernelArgument@ - OpenCL
111     PATCH_TOKEN_ALLOCATE_STATELESS_SURFACE_WITH_INITIALIZATION, // 32 - (Unused)
112     PATCH_TOKEN_ALLOCATE_STATELESS_PRINTF_SURFACE,              // 33 @SPatchAllocateStatelessPrintfSurface@
113     PATCH_TOKEN_CB_MAPPING,                                     // 34 - (Unused)
114     PATCH_TOKEN_CB2CR_GATHER_TABLE,                             // 35 - (Unused)
115     PATCH_TOKEN_ALLOCATE_STATELESS_EVENT_POOL_SURFACE,          // 36 @SPatchAllocateStatelessEventPoolSurface@
116     PATCH_TOKEN_NULL_SURFACE_LOCATION,                          // 37 - (Unused)
117     PATCH_TOKEN_ALLOCATE_STATELESS_PRIVATE_MEMORY,              // 38 @SPatchAllocateStatelessPrivateSurface@
118     PATCH_TOKEN_ALLOCATE_CONSTANT_MEMORY_SURFACE_WITH_INITIALIZATION,           // 39 - (Unused)
119     PATCH_TOKEN_ALLOCATE_GLOBAL_MEMORY_SURFACE_WITH_INITIALIZATION,             // 40 - (Unused)
120     PATCH_TOKEN_ALLOCATE_GLOBAL_MEMORY_SURFACE_PROGRAM_BINARY_INFO,             // 41 @SPatchAllocateGlobalMemorySurfaceProgramBinaryInfo@
121     PATCH_TOKEN_ALLOCATE_CONSTANT_MEMORY_SURFACE_PROGRAM_BINARY_INFO,           // 42 @SPatchAllocateConstantMemorySurfaceProgramBinaryInfo@
122     PATCH_TOKEN_ALLOCATE_STATELESS_GLOBAL_MEMORY_SURFACE_WITH_INITIALIZATION,   // 43 @SPatchAllocateStatelessGlobalMemorySurfaceWithInitialization@
123     PATCH_TOKEN_ALLOCATE_STATELESS_CONSTANT_MEMORY_SURFACE_WITH_INITIALIZATION, // 44 @SPatchAllocateStatelessConstantMemorySurfaceWithInitialization@
124     PATCH_TOKEN_ALLOCATE_STATELESS_DEFAULT_DEVICE_QUEUE_SURFACE,                // 45 @SPatchAllocateStatelessDefaultDeviceQueueSurface@
125     PATCH_TOKEN_STATELESS_DEVICE_QUEUE_KERNEL_ARGUMENT,            // 46  @SPatchStatelessDeviceQueueKernelArgument@
126     PATCH_TOKEN_GLOBAL_POINTER_PROGRAM_BINARY_INFO,                // 47  @SPatchGlobalPointerProgramBinaryInfo@
127     PATCH_TOKEN_CONSTANT_POINTER_PROGRAM_BINARY_INFO,              // 48  @SPatchConstantPointerProgramBinaryInfo@
128     PATCH_TOKEN_CONSTRUCTOR_DESTRUCTOR_KERNEL_PROGRAM_BINARY_INFO, // 49  - (Unused)
129     PATCH_TOKEN_INLINE_VME_SAMPLER_INFO,                           // 50  - (Unused)
130     PATCH_TOKEN_GTPIN_FREE_GRF_INFO,                               // 51  @SPatchGtpinFreeGRFInfo@
131     PATCH_TOKEN_GTPIN_INFO,                                        // 52  @SPatchItemHeader@
132     PATCH_TOKEN_PROGRAM_SYMBOL_TABLE,                             // 53  @SPatchFunctionTableInfo@
133     PATCH_TOKEN_PROGRAM_RELOCATION_TABLE,                         // 54  @SPatchFunctionTableInfo@
134     PATCH_TOKEN_MEDIA_VFE_STATE_SLOT1,                            // 55  @SPatchMediaVFEState of slot1@
135     PATCH_TOKEN_ALLOCATE_SYNC_BUFFER,                             // 56  @SPatchAllocateSyncBuffer@
136 
137     NUM_PATCH_TOKENS
138 };
139 
140 // Update CURRENT_ICBE_VERSION when modifying the patch list
141 static_assert( NUM_PATCH_TOKENS == 57, "NUM_PATCH_TOKENS has invalid value");
142 
143 /*****************************************************************************\
144 ENUM: IMAGE_MEMORY_OBJECT_TYPE
145 \*****************************************************************************/
146 enum IMAGE_MEMORY_OBJECT_TYPE
147 {
148     IMAGE_MEMORY_OBJECT_INVALID,
149     IMAGE_MEMORY_OBJECT_BUFFER,
150     IMAGE_MEMORY_OBJECT_1D,
151     IMAGE_MEMORY_OBJECT_1D_ARRAY,
152     IMAGE_MEMORY_OBJECT_2D,
153     IMAGE_MEMORY_OBJECT_2D_ARRAY,
154     IMAGE_MEMORY_OBJECT_3D,
155     IMAGE_MEMORY_OBJECT_CUBE,
156     IMAGE_MEMORY_OBJECT_CUBE_ARRAY,
157     IMAGE_MEMORY_OBJECT_2D_DEPTH,
158     IMAGE_MEMORY_OBJECT_2D_ARRAY_DEPTH,
159     IMAGE_MEMORY_OBJECT_2D_MSAA,
160     IMAGE_MEMORY_OBJECT_2D_MSAA_DEPTH,
161     IMAGE_MEMORY_OBJECT_2D_ARRAY_MSAA,
162     IMAGE_MEMORY_OBJECT_2D_ARRAY_MSAA_DEPTH,
163     IMAGE_MEMORY_OBJECT_2D_MEDIA,
164     IMAGE_MEMORY_OBJECT_2D_MEDIA_BLOCK,
165     NUM_IMAGE_MEMORY_OBJECT_TYPES
166 };
167 
168 // Update CURRENT_ICBE_VERSION when modifying the patch list
169 static_assert( NUM_IMAGE_MEMORY_OBJECT_TYPES == 17, "NUM_IMAGE_MEMORY_OBJECT_TYPES has invalid value");
170 
171 /*****************************************************************************\
172 ENUM: SAMPLER_OBJECT_TYPE
173 \*****************************************************************************/
174 enum SAMPLER_OBJECT_TYPE
175 {
176     SAMPLER_OBJECT_INVALID,
177     SAMPLER_OBJECT_TEXTURE,
178     SAMPLER_OBJECT_SAMPLE_8X8,
179     SAMPLER_OBJECT_SAMPLE_8X8_2DCONVOLVE,
180     SAMPLER_OBJECT_SAMPLE_8X8_ERODE,
181     SAMPLER_OBJECT_SAMPLE_8X8_DILATE,
182     SAMPLER_OBJECT_SAMPLE_8X8_MINMAXFILTER,
183     SAMPLER_OBJECT_VME,
184     SAMPLER_OBJECT_SAMPLE_8X8_MINMAX,
185     SAMPLER_OBJECT_SAMPLE_8X8_CENTROID,
186     SAMPLER_OBJECT_SAMPLE_8X8_BOOL_CENTROID,
187     SAMPLER_OBJECT_SAMPLE_8X8_BOOL_SUM,
188     SAMPLER_OBJECT_VE,
189     SAMPLER_OBJECT_VD,
190     NUM_SAMPLER_OBJECT_TYPES
191 };
192 
193 // Update CURRENT_ICBE_VERSION when modifying the patch list
194 static_assert( NUM_SAMPLER_OBJECT_TYPES == 14, "NUM_SAMPLER_OBJECT_TYPES has invalid value");
195 
196 /*****************************************************************************\
197 ENUM: DATA_PARAMETER_TOKEN
198 \*****************************************************************************/
199 enum DATA_PARAMETER_TOKEN
200 {
201     DATA_PARAMETER_TOKEN_UNKNOWN,                                   // 0
202     DATA_PARAMETER_KERNEL_ARGUMENT,                                 // 1
203     DATA_PARAMETER_LOCAL_WORK_SIZE,                                 // 2
204     DATA_PARAMETER_GLOBAL_WORK_SIZE,                                // 3
205     DATA_PARAMETER_NUM_WORK_GROUPS,                                 // 4
206     DATA_PARAMETER_WORK_DIMENSIONS,                                 // 5
207     DATA_PARAMETER_LOCAL_ID,                                        // 6
208     DATA_PARAMETER_EXECUTION_MASK,                                  // 7
209     DATA_PARAMETER_SUM_OF_LOCAL_MEMORY_OBJECT_ARGUMENT_SIZES,       // 8
210     DATA_PARAMETER_IMAGE_WIDTH,                                     // 9
211     DATA_PARAMETER_IMAGE_HEIGHT,                                    // 10
212     DATA_PARAMETER_IMAGE_DEPTH,                                     // 11
213     DATA_PARAMETER_IMAGE_CHANNEL_DATA_TYPE,                         // 12
214     DATA_PARAMETER_IMAGE_CHANNEL_ORDER,                             // 13
215     DATA_PARAMETER_SAMPLER_ADDRESS_MODE,                            // 14
216     DATA_PARAMETER_SAMPLER_NORMALIZED_COORDS,                       // 15
217     DATA_PARAMETER_GLOBAL_WORK_OFFSET,                              // 16
218     DATA_PARAMETER_NUM_HARDWARE_THREADS,                            // 17
219     DATA_PARAMETER_IMAGE_ARRAY_SIZE,                                // 18
220     DATA_PARAMETER_PRINTF_SURFACE_SIZE,                             // 19
221     DATA_PARAMETER_IMAGE_NUM_SAMPLES,                               // 20
222     DATA_PARAMETER_SAMPLER_COORDINATE_SNAP_WA_REQUIRED,             // 21
223     DATA_PARAMETER_PARENT_EVENT,                                    // 22
224     DATA_PARAMETER_VME_MB_BLOCK_TYPE,                               // 22
225     DATA_PARAMETER_VME_SUBPIXEL_MODE,                               // 24
226     DATA_PARAMETER_VME_SAD_ADJUST_MODE,                             // 25
227     DATA_PARAMETER_VME_SEARCH_PATH_TYPE,                            // 26
228     DATA_PARAMETER_IMAGE_NUM_MIP_LEVELS,                            // 27
229     DATA_PARAMETER_ENQUEUED_LOCAL_WORK_SIZE,                        // 28
230     DATA_PARAMETER_MAX_WORKGROUP_SIZE,                              // 29
231     DATA_PARAMETER_PREFERRED_WORKGROUP_MULTIPLE,                    // 30
232     DATA_PARAMETER_LOCAL_MEMORY_STATELESS_WINDOW_START_ADDRESS,     // 31
233     DATA_PARAMETER_LOCAL_MEMORY_STATELESS_WINDOW_SIZE,              // 32
234     DATA_PARAMETER_PRIVATE_MEMORY_STATELESS_SIZE,                   // 33
235     DATA_PARAMETER_SIMD_SIZE,                                       // 34
236     DATA_PARAMETER_OBJECT_ID,                                       // 35
237     DATA_PARAMETER_VME_IMAGE_TYPE,                                  // 36
238     DATA_PARAMETER_VME_MB_SKIP_BLOCK_TYPE,                          // 37
239     DATA_PARAMETER_CHILD_BLOCK_SIMD_SIZE,                           // 38
240     DATA_PARAMETER_IMAGE_SRGB_CHANNEL_ORDER,                        // 39
241     DATA_PARAMETER_STAGE_IN_GRID_ORIGIN,                            // 40
242     DATA_PARAMETER_STAGE_IN_GRID_SIZE,                              // 41
243     DATA_PARAMETER_BUFFER_OFFSET,                                   // 42
244     DATA_PARAMETER_BUFFER_STATEFUL,                                 // 43
245     DATA_PARAMETER_FLAT_IMAGE_BASEOFFSET,                           // 44
246     DATA_PARAMETER_FLAT_IMAGE_WIDTH,                                // 45
247     DATA_PARAMETER_FLAT_IMAGE_HEIGHT,                               // 46
248     DATA_PARAMETER_FLAT_IMAGE_PITCH,                                // 47
249     DATA_PARAMETER_IMPL_ARG_BUFFER,                                 // 49
250     DATA_PARAMETER_LOCAL_ID_BUFFER,                                 // 50
251     NUM_DATA_PARAMETER_TOKENS
252 };
253 
254 // Update CURRENT_ICBE_VERSION when modifying the patch list
255 static_assert(NUM_DATA_PARAMETER_TOKENS == 50, "NUM_DATA_PARAMETER_TOKENS has invalid value");
256 
257 /*****************************************************************************\
258 ENUM: CONSTANT_BUFFER_TYPE
259 \*****************************************************************************/
260 enum CONSTANT_BUFFER_TYPE
261 {
262     CONSTANT_BUFFER_TYPE_KERNEL_ARGUMENT,
263     CONSTANT_BUFFER_TYPE_INLINE,
264     NUM_CONSTANT_BUFFER_TYPES
265 };
266 
267 // Update CURRENT_ICBE_VERSION when modifying the patch list
268 static_assert( NUM_CONSTANT_BUFFER_TYPES == 2, "NUM_CONSTANT_BUFFER_TYPES has invalid value");
269 
270 /*****************************************************************************\
271 ENUM: GLOBAL_BUFFER_TYPE
272 \*****************************************************************************/
273 enum GLOBAL_BUFFER_TYPE
274 {
275     GLOBAL_BUFFER_TYPE_INLINE,
276     GLOBAL_BUFFER_TYPE_INLINE_UNINIT,
277     NUM_GLOBAL_BUFFER_TYPES
278 };
279 
280 // Update CURRENT_ICBE_VERSION when modifying the patch list
281 static_assert( NUM_GLOBAL_BUFFER_TYPES == 2, "NUM_GLOBAL_BUFFER_TYPES has invalid value");
282 
283 /*****************************************************************************\
284 ENUM: BUFFER_TYPES
285 \*****************************************************************************/
286 enum PROGRAM_SCOPE_BUFFER_TYPE
287 {
288     PROGRAM_SCOPE_GLOBAL_BUFFER,
289     PROGRAM_SCOPE_CONSTANT_BUFFER,
290     NUM_PROGRAM_SCOPE_BUFFER_TYPE
291 };
292 
293 // Update CURRENT_ICBE_VERSION when modifying the patch list
294 static_assert( NUM_PROGRAM_SCOPE_BUFFER_TYPE == 2, "NUM_PROGRAM_SCOPE_BUFFER_TYPE has invalid value");
295 
296 /*****************************************************************************\
297 ENUM: CONSTANT_REGISTER_BOOLEAN
298 \*****************************************************************************/
299 enum CONSTANT_REGISTER_BOOLEAN
300 {
301     CONSTANT_REGISTER_BOOLEAN_FALSE = 0x0,
302     CONSTANT_REGISTER_BOOLEAN_TRUE = 0xffffffff
303 };
304 
305 // Update CURRENT_ICBE_VERSION when modifying the patch list
306 static_assert( CONSTANT_REGISTER_BOOLEAN_FALSE == 0, "CONSTANT_REGISTER_BOOLEAN_FALSE has invalid value");
307 static_assert( CONSTANT_REGISTER_BOOLEAN_TRUE == 0xffffffff, "CONSTANT_REGISTER_BOOLEAN_TRUE has invalid value");
308 
309 /*****************************************************************************\
310 ENUM: BUFFER_TYPES
311 \*****************************************************************************/
312 enum PROGRAM_SCOPE_KERNEL_TYPE
313 {
314     PROGRAM_SCOPE_KERNEL_CONSTRUCTOR,
315     PROGRAM_SCOPE_KERNEL_DESTRUCTOR,
316     NUM_PROGRAM_SCOPE_KERNEL_TYPE
317 };
318 
319 // Update CURRENT_ICBE_VERSION when modifying the patch list
320 static_assert( NUM_PROGRAM_SCOPE_KERNEL_TYPE == 2, "NUM_PROGRAM_SCOPE_KERNEL_TYPE has invalid value");
321 
322 /*****************************************************************************\
323 STRUCT: SPatchItemHeader
324 \*****************************************************************************/
325 struct SPatchItemHeader
326 {
327     uint32_t   Token;
328     uint32_t   Size;
329 };
330 
331 // Update CURRENT_ICBE_VERSION when modifying the patch list
332 static_assert( sizeof( SPatchItemHeader ) == 8 , "The size of SPatchItemHeader is not what is expected" );
333 
334 /*****************************************************************************\
335 STRUCT: SPatchGlobalMemoryObjectKernelArgument
336 \*****************************************************************************/
337 struct SPatchGlobalMemoryObjectKernelArgument :
338        SPatchItemHeader
339 {
340     uint32_t   ArgumentNumber;
341     uint32_t   Offset;
342     uint32_t   LocationIndex;
343     uint32_t   LocationIndex2;
344     uint32_t   IsEmulationArgument;
345 };
346 
347 // Update CURRENT_ICBE_VERSION when modifying the patch list
348 static_assert( sizeof( SPatchGlobalMemoryObjectKernelArgument ) == ( 20 + sizeof( SPatchItemHeader ) ) , "The size of SPatchGlobalMemoryObjectKernelArgument is not what is expected" );
349 
350 /*****************************************************************************\
351 STRUCT: SPatchImageMemoryObjectKernelArgument
352 \*****************************************************************************/
353 struct SPatchImageMemoryObjectKernelArgument :
354        SPatchItemHeader
355 {
356     uint32_t  ArgumentNumber;
357     uint32_t  Type;
358     uint32_t  Offset;
359     uint32_t  LocationIndex;
360     uint32_t  LocationIndex2;
361 
362     uint32_t  Writeable;
363     uint32_t  Transformable;
364     uint32_t  needBindlessHandle;
365     uint32_t  IsEmulationArgument;
366 
367     uint32_t  btiOffset;
368 };
369 
370 // Update CURRENT_ICBE_VERSION when modifying the patch list
371 static_assert( sizeof( SPatchImageMemoryObjectKernelArgument ) == ( 40 + sizeof( SPatchItemHeader ) ) , "The size of SPatchImageMemoryObjectKernelArgument is not what is expected" );
372 
373 /*****************************************************************************\
374 STRUCT: SPatchConstantMemoryObjectKernelArgument
375 \*****************************************************************************/
376 struct SPatchConstantMemoryObjectKernelArgument :
377        SPatchItemHeader
378 {
379     uint32_t   ArgumentNumber;
380     uint32_t   Offset;
381     uint32_t   LocationIndex;
382     uint32_t   LocationIndex2;
383     uint32_t   IsEmulationArgument;
384 };
385 
386 // Update CURRENT_ICBE_VERSION when modifying the patch list
387 static_assert( sizeof( SPatchConstantMemoryObjectKernelArgument ) == ( 20 + sizeof( SPatchItemHeader ) ) , "The size of SPatchConstantMemoryObjectKernelArgument is not what is expected" );
388 
389 /*****************************************************************************\
390 STRUCT: SPatchSamplerKernelArgument
391 \*****************************************************************************/
392 struct SPatchSamplerKernelArgument :
393        SPatchItemHeader
394 {
395     uint32_t   ArgumentNumber;
396     uint32_t   Type;
397     uint32_t   Offset;
398     uint32_t   LocationIndex;
399     uint32_t   LocationIndex2;
400     uint32_t   needBindlessHandle;
401     uint32_t   TextureMask;
402     uint32_t   IsEmulationArgument;
403     uint32_t   btiOffset;
404 };
405 
406 // Update CURRENT_ICBE_VERSION when modifying the patch list
407 static_assert( sizeof( SPatchSamplerKernelArgument ) == ( 36 + sizeof( SPatchItemHeader ) ) , "The size of SPatchSamplerKernelArgument is not what is expected" );
408 
409 /*****************************************************************************\
410 STRUCT: SPatchDataParameterBuffer
411 \*****************************************************************************/
412 struct SPatchDataParameterBuffer :
413        SPatchItemHeader
414 {
415     uint32_t   Type;
416     uint32_t   ArgumentNumber;
417     uint32_t   Offset;
418     uint32_t   DataSize;
419     uint32_t   SourceOffset;
420     uint32_t   LocationIndex;
421     uint32_t   LocationIndex2;
422     uint32_t   IsEmulationArgument;
423 };
424 
425 // Update CURRENT_ICBE_VERSION when modifying the patch list
426 static_assert( sizeof( SPatchDataParameterBuffer ) == ( 32 + sizeof( SPatchItemHeader ) ) , "The size of SPatchDataParameterBuffer is not what is expected" );
427 
428 const uint32_t DATA_PARAMETER_DATA_SIZE = 4;
429 
430 /*****************************************************************************\
431 STRUCT: SPatchKernelArgumentInfo
432 \*****************************************************************************/
433 struct SPatchKernelArgumentInfo :
434        SPatchItemHeader
435 {
436     uint32_t ArgumentNumber;
437     uint32_t AddressQualifierSize;
438     uint32_t AccessQualifierSize;
439     uint32_t ArgumentNameSize;
440     uint32_t TypeNameSize;
441     uint32_t TypeQualifierSize;
442 };
443 
444 // Update CURRENT_ICBE_VERSION when modifying the patch list
445 static_assert( sizeof( SPatchKernelArgumentInfo ) == ( 24 + sizeof( SPatchItemHeader ) ) , "The size of SPatchKernelArgumentInfo is not what is expected" );
446 
447 /*****************************************************************************\
448 STRUCT: SPatchKernelAttributesInfo
449 \*****************************************************************************/
450 struct SPatchKernelAttributesInfo :
451        SPatchItemHeader
452 {
453     uint32_t AttributesSize;
454 };
455 
456 // Update CURRENT_ICBE_VERSION when modifying the patch list
457 static_assert( sizeof( SPatchKernelAttributesInfo ) == ( 4 + sizeof( SPatchItemHeader ) ) , "The size of SPatchKernelAttributesInfo is not what is expected" );
458 
459 } // namespace
460 
461 #pragma pack( pop )
462