1 /*
2 * Copyright (c) 2022, 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 #ifndef __VP_RENDER_HDR_CMD_PACKET_EXT_H__
23 #define __VP_RENDER_HDR_CMD_PACKET_EXT_H__
24 
25 #include "vp_platform_interface.h"
26 #include "vp_render_kernel_obj.h"
27 #include "vp_render_cmd_packet.h"
28 
29 namespace vp {
30 // Static Data for HDR kernel
31 typedef struct _MEDIA_WALKER_HDR_STATIC_DATA
32 {
33     // uint32_t 0 - GRF R1.0
34     union
35     {
36         struct {
37             float HorizontalFrameOriginLayer0;
38         };
39         float       Value;
40     } DW0;
41 
42     // uint32_t 1 - GRF R1.1
43     union
44     {
45         struct {
46             float HorizontalFrameOriginLayer1;
47         };
48         float       Value;
49     } DW1;
50 
51     // uint32_t 2 - GRF R1.2
52     union
53     {
54         struct {
55             float HorizontalFrameOriginLayer2;
56         };
57         float       Value;
58     } DW2;
59 
60     // uint32_t 3 - GRF R1.3
61     union
62     {
63         struct {
64             float HorizontalFrameOriginLayer3;
65         };
66         float       Value;
67     } DW3;
68 
69     // uint32_t 4 - GRF R1.4
70     union
71     {
72         struct {
73             float HorizontalFrameOriginLayer4;
74         };
75         float       Value;
76     } DW4;
77 
78     // uint32_t 5 - GRF R1.5
79     union
80     {
81         struct {
82             float HorizontalFrameOriginLayer5;
83         };
84         float       Value;
85     } DW5;
86 
87     // uint32_t 6 - GRF R1.6
88     union
89     {
90         struct {
91             float HorizontalFrameOriginLayer6;
92         };
93         float       Value;
94     } DW6;
95 
96     // uint32_t 7 - GRF R1.7
97     union
98     {
99         struct {
100             float HorizontalFrameOriginLayer7;
101         };
102         float       Value;
103     } DW7;
104 
105     // uint32_t 8 - GRF R2.0
106     union
107     {
108         struct {
109             float VerticalFrameOriginLayer0;
110         };
111         float       Value;
112     } DW8;
113 
114     // uint32_t 9 - GRF R2.1
115     union
116     {
117         struct {
118             float VerticalFrameOriginLayer1;
119         };
120         float       Value;
121     } DW9;
122 
123     // uint32_t 10 - GRF R2.2
124     union
125     {
126         struct {
127             float VerticalFrameOriginLayer2;
128         };
129         float       Value;
130     } DW10;
131 
132     // uint32_t 11 - GRF R2.3
133     union
134     {
135         struct {
136             float VerticalFrameOriginLayer3;
137         };
138         float       Value;
139     } DW11;
140 
141     // uint32_t 12 - GRF R2.4
142     union
143     {
144         struct {
145             float VerticalFrameOriginLayer4;
146         };
147         float       Value;
148     } DW12;
149 
150     // uint32_t 13 - GRF R2.5
151     union
152     {
153         struct {
154             float VerticalFrameOriginLayer5;
155         };
156         float       Value;
157     } DW13;
158 
159     // uint32_t 14 - GRF R2.6
160     union
161     {
162         struct {
163             float VerticalFrameOriginLayer6;
164         };
165         float       Value;
166     } DW14;
167 
168     // uint32_t 15 - GRF R2.7
169     union
170     {
171         struct {
172             float VerticalFrameOriginLayer7;
173         };
174         float       Value;
175     } DW15;
176 
177     // uint32_t 16 - GRF R3.0
178     union
179     {
180         struct {
181             float HorizontalScalingStepRatioLayer0;
182         };
183         float       Value;
184     } DW16;
185 
186     // uint32_t 17 - GRF R3.1
187     union
188     {
189         struct {
190             float HorizontalScalingStepRatioLayer1;
191         };
192         float       Value;
193     } DW17;
194 
195     // uint32_t 18 - GRF R3.2
196     union
197     {
198         struct {
199             float HorizontalScalingStepRatioLayer2;
200         };
201         float       Value;
202     } DW18;
203 
204     // uint32_t 19 - GRF R3.3
205     union
206     {
207         struct {
208             float HorizontalScalingStepRatioLayer3;
209         };
210         float       Value;
211     } DW19;
212 
213     // uint32_t 20 - GRF R3.4
214     union
215     {
216         struct {
217             float HorizontalScalingStepRatioLayer4;
218         };
219         float       Value;
220     } DW20;
221 
222     // uint32_t 21 - GRF R3.5
223     union
224     {
225         struct {
226             float HorizontalScalingStepRatioLayer5;
227         };
228         float       Value;
229     } DW21;
230 
231     // uint32_t 22 - GRF R3.6
232     union
233     {
234         struct {
235             float HorizontalScalingStepRatioLayer6;
236         };
237         float       Value;
238     } DW22;
239 
240     // uint32_t 23 - GRF R3.7
241     union
242     {
243         struct {
244             float HorizontalScalingStepRatioLayer7;
245         };
246         float       Value;
247     } DW23;
248 
249     // uint32_t 24 - GRF R4.0
250     union
251     {
252         struct {
253             float VerticalScalingStepRatioLayer0;
254         };
255         float       Value;
256     } DW24;
257 
258     // uint32_t 25 - GRF R4.1
259     union
260     {
261         struct {
262             float VerticalScalingStepRatioLayer1;
263         };
264         float       Value;
265     } DW25;
266 
267     // uint32_t 26 - GRF R4.2
268     union
269     {
270         struct {
271             float VerticalScalingStepRatioLayer2;
272         };
273         float       Value;
274     } DW26;
275 
276     // uint32_t 27 - GRF R4.3
277     union
278     {
279         struct {
280             float VerticalScalingStepRatioLayer3;
281         };
282         float       Value;
283     } DW27;
284 
285     // uint32_t 28 - GRF R4.4
286     union
287     {
288         struct {
289             float VerticalScalingStepRatioLayer4;
290         };
291         float       Value;
292     } DW28;
293 
294     // uint32_t 29 - GRF R4.5
295     union
296     {
297         struct {
298             float VerticalScalingStepRatioLayer5;
299         };
300         float       Value;
301     } DW29;
302 
303     // uint32_t 30 - GRF R4.6
304     union
305     {
306         struct {
307             float VerticalScalingStepRatioLayer6;
308         };
309         float       Value;
310     } DW30;
311 
312     // uint32_t 31 - GRF R4.7
313     union
314     {
315         struct {
316             float VerticalScalingStepRatioLayer7;
317         };
318         float       Value;
319     } DW31;
320 
321     // uint32_t 32 - GRF R5.0
322     union
323     {
324         struct {
325             uint32_t LeftCoordinateRectangleLayer0 : BITFIELD_RANGE(  0,15 );
326             uint32_t TopCoordinateRectangleLayer0  : BITFIELD_RANGE( 16,31 );
327         };
328         uint32_t       Value;
329     } DW32;
330 
331     // uint32_t 33 - GRF R5.1
332     union
333     {
334         struct {
335             uint32_t LeftCoordinateRectangleLayer1 : BITFIELD_RANGE(  0,15 );
336             uint32_t TopCoordinateRectangleLayer1  : BITFIELD_RANGE( 16,31 );
337         };
338         uint32_t       Value;
339     } DW33;
340 
341     // uint32_t 34 - GRF R5.2
342     union
343     {
344         struct {
345             uint32_t LeftCoordinateRectangleLayer2 : BITFIELD_RANGE(  0,15 );
346             uint32_t TopCoordinateRectangleLayer2  : BITFIELD_RANGE( 16,31 );
347         };
348         uint32_t       Value;
349     } DW34;
350 
351     // uint32_t 35 - GRF R5.3
352     union
353     {
354         struct {
355             uint32_t LeftCoordinateRectangleLayer3 : BITFIELD_RANGE(  0,15 );
356             uint32_t TopCoordinateRectangleLayer3  : BITFIELD_RANGE( 16,31 );
357         };
358         uint32_t       Value;
359     } DW35;
360 
361     // uint32_t 36 - GRF R5.4
362     union
363     {
364         struct {
365             uint32_t LeftCoordinateRectangleLayer4 : BITFIELD_RANGE(  0,15 );
366             uint32_t TopCoordinateRectangleLayer4  : BITFIELD_RANGE( 16,31 );
367         };
368         uint32_t       Value;
369     } DW36;
370 
371     // uint32_t 37 - GRF R5.5
372     union
373     {
374         struct {
375             uint32_t LeftCoordinateRectangleLayer5 : BITFIELD_RANGE(  0,15 );
376             uint32_t TopCoordinateRectangleLayer5  : BITFIELD_RANGE( 16,31 );
377         };
378         uint32_t       Value;
379     } DW37;
380 
381     // uint32_t 38 - GRF R5.6
382     union
383     {
384         struct {
385             uint32_t LeftCoordinateRectangleLayer6 : BITFIELD_RANGE(  0,15 );
386             uint32_t TopCoordinateRectangleLayer6  : BITFIELD_RANGE( 16,31 );
387         };
388         uint32_t       Value;
389     } DW38;
390 
391     // uint32_t 39 - GRF R5.7
392     union
393     {
394         struct {
395             uint32_t LeftCoordinateRectangleLayer7 : BITFIELD_RANGE(  0,15 );
396             uint32_t TopCoordinateRectangleLayer7  : BITFIELD_RANGE( 16,31 );
397         };
398         uint32_t       Value;
399     } DW39;
400 
401     // uint32_t 40 - GRF R6.0
402     union
403     {
404         struct {
405             uint32_t RightCoordinateRectangleLayer0  : BITFIELD_RANGE(  0,15 );
406             uint32_t BottomCoordinateRectangleLayer0 : BITFIELD_RANGE( 16,31 );
407         };
408         uint32_t       Value;
409     } DW40;
410 
411     // uint32_t 41 - GRF R6.1
412     union
413     {
414         struct {
415             uint32_t RightCoordinateRectangleLayer1  : BITFIELD_RANGE(  0,15 );
416             uint32_t BottomCoordinateRectangleLayer1 : BITFIELD_RANGE( 16,31 );
417         };
418         uint32_t       Value;
419     } DW41;
420 
421     // uint32_t 42 - GRF R6.2
422     union
423     {
424         struct {
425             uint32_t RightCoordinateRectangleLayer2  : BITFIELD_RANGE(  0,15 );
426             uint32_t BottomCoordinateRectangleLayer2 : BITFIELD_RANGE( 16,31 );
427         };
428         uint32_t       Value;
429     } DW42;
430 
431     // uint32_t 43 - GRF R6.3
432     union
433     {
434         struct {
435             uint32_t RightCoordinateRectangleLayer3  : BITFIELD_RANGE(  0,15 );
436             uint32_t BottomCoordinateRectangleLayer3 : BITFIELD_RANGE( 16,31 );
437         };
438         uint32_t       Value;
439     } DW43;
440 
441     // uint32_t 44 - GRF R6.4
442     union
443     {
444         struct {
445             uint32_t RightCoordinateRectangleLayer4  : BITFIELD_RANGE(  0,15 );
446             uint32_t BottomCoordinateRectangleLayer4 : BITFIELD_RANGE( 16,31 );
447         };
448         uint32_t       Value;
449     } DW44;
450 
451     // uint32_t 45 - GRF R6.5
452     union
453     {
454         struct {
455             uint32_t RightCoordinateRectangleLayer5  : BITFIELD_RANGE(  0,15 );
456             uint32_t BottomCoordinateRectangleLayer5 : BITFIELD_RANGE( 16,31 );
457         };
458         uint32_t       Value;
459     } DW45;
460 
461     // uint32_t 46 - GRF R6.6
462     union
463     {
464         struct {
465             uint32_t RightCoordinateRectangleLayer6  : BITFIELD_RANGE(  0,15 );
466             uint32_t BottomCoordinateRectangleLayer6 : BITFIELD_RANGE( 16,31 );
467         };
468         uint32_t       Value;
469     } DW46;
470 
471     // uint32_t 47 - GRF R6.7
472     union
473     {
474         struct {
475             uint32_t RightCoordinateRectangleLayer7  : BITFIELD_RANGE(  0,15 );
476             uint32_t BottomCoordinateRectangleLayer7 : BITFIELD_RANGE( 16,31 );
477         };
478         uint32_t       Value;
479     } DW47;
480 
481     // uint32_t 48 - GRF R7.0
482     union
483     {
484         struct {
485             uint32_t FormatDescriptorLayer0                : BITFIELD_RANGE(  0,7  );
486             uint32_t ChromaSittingLocationLayer0           : BITFIELD_RANGE(  8,10 );
487             uint32_t ChannelSwapEnablingFlagLayer0         : BITFIELD_RANGE( 11,11 );
488             uint32_t IEFBypassEnablingFlagLayer0           : BITFIELD_RANGE( 12,12 );
489             uint32_t RotationAngleMirrorDirectionLayer0    : BITFIELD_RANGE( 13,15 );
490             uint32_t SamplerIndexFirstPlaneLayer0          : BITFIELD_RANGE( 16,19 );
491             uint32_t SamplerIndexSecondThirdPlaneLayer0    : BITFIELD_RANGE( 20,23 );
492             uint32_t CCMExtensionEnablingFlagLayer0        : BITFIELD_RANGE( 24,24 );
493             uint32_t ToneMappingEnablingFlagLayer0         : BITFIELD_RANGE( 25,25 );
494             uint32_t PriorCSCEnablingFlagLayer0            : BITFIELD_RANGE( 26,26 );
495             uint32_t EOTF1DLUTEnablingFlagLayer0           : BITFIELD_RANGE( 27,27 );
496             uint32_t CCMEnablingFlagLayer0                 : BITFIELD_RANGE( 28,28 );
497             uint32_t OETF1DLUTEnablingFlagLayer0           : BITFIELD_RANGE( 29,29 );
498             uint32_t PostCSCEnablingFlagLayer0             : BITFIELD_RANGE( 30,30 );
499             uint32_t Enabling3DLUTFlagLayer0               : BITFIELD_RANGE( 31,31 );
500         };
501         uint32_t       Value;
502     } DW48;
503 
504     // uint32_t 49 - GRF R7.1
505     union
506     {
507         struct {
508             uint32_t FormatDescriptorLayer1                : BITFIELD_RANGE(  0,7  );
509             uint32_t ChromaSittingLocationLayer1           : BITFIELD_RANGE(  8,10 );
510             uint32_t ChannelSwapEnablingFlagLayer1         : BITFIELD_RANGE( 11,11 );
511             uint32_t IEFBypassEnablingFlagLayer1           : BITFIELD_RANGE( 12,12 );
512             uint32_t RotationAngleMirrorDirectionLayer1    : BITFIELD_RANGE( 13,15 );
513             uint32_t SamplerIndexFirstPlaneLayer1          : BITFIELD_RANGE( 16,19 );
514             uint32_t SamplerIndexSecondThirdPlaneLayer1    : BITFIELD_RANGE( 20,23 );
515             uint32_t CCMExtensionEnablingFlagLayer1        : BITFIELD_RANGE( 24,24 );
516             uint32_t ToneMappingEnablingFlagLayer1         : BITFIELD_RANGE( 25,25 );
517             uint32_t PriorCSCEnablingFlagLayer1            : BITFIELD_RANGE( 26,26 );
518             uint32_t EOTF1DLUTEnablingFlagLayer1           : BITFIELD_RANGE( 27,27 );
519             uint32_t CCMEnablingFlagLayer1                 : BITFIELD_RANGE( 28,28 );
520             uint32_t OETF1DLUTEnablingFlagLayer1           : BITFIELD_RANGE( 29,29 );
521             uint32_t PostCSCEnablingFlagLayer1             : BITFIELD_RANGE( 30,30 );
522             uint32_t Enabling3DLUTFlagLayer1               : BITFIELD_RANGE( 31,31 );
523         };
524         uint32_t       Value;
525     } DW49;
526 
527     // uint32_t 50 - GRF R7.2
528     union
529     {
530         struct {
531             uint32_t FormatDescriptorLayer2                : BITFIELD_RANGE(  0,7  );
532             uint32_t ChromaSittingLocationLayer2           : BITFIELD_RANGE(  8,10 );
533             uint32_t ChannelSwapEnablingFlagLayer2         : BITFIELD_RANGE( 11,11 );
534             uint32_t IEFBypassEnablingFlagLayer2           : BITFIELD_RANGE( 12,12 );
535             uint32_t RotationAngleMirrorDirectionLayer2    : BITFIELD_RANGE( 13,15 );
536             uint32_t SamplerIndexFirstPlaneLayer2          : BITFIELD_RANGE( 16,19 );
537             uint32_t SamplerIndexSecondThirdPlaneLayer2    : BITFIELD_RANGE( 20,23 );
538             uint32_t CCMExtensionEnablingFlagLayer2        : BITFIELD_RANGE( 24,24 );
539             uint32_t ToneMappingEnablingFlagLayer2         : BITFIELD_RANGE( 25,25 );
540             uint32_t PriorCSCEnablingFlagLayer2            : BITFIELD_RANGE( 26,26 );
541             uint32_t EOTF1DLUTEnablingFlagLayer2           : BITFIELD_RANGE( 27,27 );
542             uint32_t CCMEnablingFlagLayer2                 : BITFIELD_RANGE( 28,28 );
543             uint32_t OETF1DLUTEnablingFlagLayer2           : BITFIELD_RANGE( 29,29 );
544             uint32_t PostCSCEnablingFlagLayer2             : BITFIELD_RANGE( 30,30 );
545             uint32_t Enabling3DLUTFlagLayer2               : BITFIELD_RANGE( 31,31 );
546         };
547         uint32_t       Value;
548     } DW50;
549 
550     // uint32_t 51 - GRF R7.3
551     union
552     {
553         struct {
554             uint32_t FormatDescriptorLayer3                : BITFIELD_RANGE(  0,7  );
555             uint32_t ChromaSittingLocationLayer3           : BITFIELD_RANGE(  8,10 );
556             uint32_t ChannelSwapEnablingFlagLayer3         : BITFIELD_RANGE( 11,11 );
557             uint32_t IEFBypassEnablingFlagLayer3           : BITFIELD_RANGE( 12,12 );
558             uint32_t RotationAngleMirrorDirectionLayer3    : BITFIELD_RANGE( 13,15 );
559             uint32_t SamplerIndexFirstPlaneLayer3          : BITFIELD_RANGE( 16,19 );
560             uint32_t SamplerIndexSecondThirdPlaneLayer3    : BITFIELD_RANGE( 20,23 );
561             uint32_t CCMExtensionEnablingFlagLayer3        : BITFIELD_RANGE( 24,24 );
562             uint32_t ToneMappingEnablingFlagLayer3         : BITFIELD_RANGE( 25,25 );
563             uint32_t PriorCSCEnablingFlagLayer3            : BITFIELD_RANGE( 26,26 );
564             uint32_t EOTF1DLUTEnablingFlagLayer3           : BITFIELD_RANGE( 27,27 );
565             uint32_t CCMEnablingFlagLayer3                 : BITFIELD_RANGE( 28,28 );
566             uint32_t OETF1DLUTEnablingFlagLayer3           : BITFIELD_RANGE( 29,29 );
567             uint32_t PostCSCEnablingFlagLayer3             : BITFIELD_RANGE( 30,30 );
568             uint32_t Enabling3DLUTFlagLayer3               : BITFIELD_RANGE( 31,31 );
569         };
570         uint32_t       Value;
571     } DW51;
572 
573     // uint32_t 52 - GRF R7.4
574     union
575     {
576         struct {
577             uint32_t FormatDescriptorLayer4                : BITFIELD_RANGE(  0,7  );
578             uint32_t ChromaSittingLocationLayer4           : BITFIELD_RANGE(  8,10 );
579             uint32_t ChannelSwapEnablingFlagLayer4         : BITFIELD_RANGE( 11,11 );
580             uint32_t IEFBypassEnablingFlagLayer4           : BITFIELD_RANGE( 12,12 );
581             uint32_t RotationAngleMirrorDirectionLayer4    : BITFIELD_RANGE( 13,15 );
582             uint32_t SamplerIndexFirstPlaneLayer4          : BITFIELD_RANGE( 16,19 );
583             uint32_t SamplerIndexSecondThirdPlaneLayer4    : BITFIELD_RANGE( 20,23 );
584             uint32_t CCMExtensionEnablingFlagLayer4        : BITFIELD_RANGE( 24,24 );
585             uint32_t ToneMappingEnablingFlagLayer4         : BITFIELD_RANGE( 25,25 );
586             uint32_t PriorCSCEnablingFlagLayer4            : BITFIELD_RANGE( 26,26 );
587             uint32_t EOTF1DLUTEnablingFlagLayer4           : BITFIELD_RANGE( 27,27 );
588             uint32_t CCMEnablingFlagLayer4                 : BITFIELD_RANGE( 28,28 );
589             uint32_t OETF1DLUTEnablingFlagLayer4           : BITFIELD_RANGE( 29,29 );
590             uint32_t PostCSCEnablingFlagLayer4             : BITFIELD_RANGE( 30,30 );
591             uint32_t Enabling3DLUTFlagLayer4               : BITFIELD_RANGE( 31,31 );
592         };
593         uint32_t       Value;
594     } DW52;
595 
596     // uint32_t 53 - GRF R7.5
597     union
598     {
599         struct {
600             uint32_t FormatDescriptorLayer5                : BITFIELD_RANGE(  0,7  );
601             uint32_t ChromaSittingLocationLayer5           : BITFIELD_RANGE(  8,10 );
602             uint32_t ChannelSwapEnablingFlagLayer5         : BITFIELD_RANGE( 11,11 );
603             uint32_t IEFBypassEnablingFlagLayer5           : BITFIELD_RANGE( 12,12 );
604             uint32_t RotationAngleMirrorDirectionLayer5    : BITFIELD_RANGE( 13,15 );
605             uint32_t SamplerIndexFirstPlaneLayer5          : BITFIELD_RANGE( 16,19 );
606             uint32_t SamplerIndexSecondThirdPlaneLayer5    : BITFIELD_RANGE( 20,23 );
607             uint32_t CCMExtensionEnablingFlagLayer5        : BITFIELD_RANGE( 24,24 );
608             uint32_t ToneMappingEnablingFlagLayer5         : BITFIELD_RANGE( 25,25 );
609             uint32_t PriorCSCEnablingFlagLayer5            : BITFIELD_RANGE( 26,26 );
610             uint32_t EOTF1DLUTEnablingFlagLayer5           : BITFIELD_RANGE( 27,27 );
611             uint32_t CCMEnablingFlagLayer5                 : BITFIELD_RANGE( 28,28 );
612             uint32_t OETF1DLUTEnablingFlagLayer5           : BITFIELD_RANGE( 29,29 );
613             uint32_t PostCSCEnablingFlagLayer5             : BITFIELD_RANGE( 30,30 );
614             uint32_t Enabling3DLUTFlagLayer5               : BITFIELD_RANGE( 31,31 );
615         };
616         uint32_t       Value;
617     } DW53;
618 
619     // uint32_t 54 - GRF R7.6
620     union
621     {
622         struct {
623             uint32_t FormatDescriptorLayer6                : BITFIELD_RANGE(  0,7  );
624             uint32_t ChromaSittingLocationLayer6           : BITFIELD_RANGE(  8,10 );
625             uint32_t ChannelSwapEnablingFlagLayer6         : BITFIELD_RANGE( 11,11 );
626             uint32_t IEFBypassEnablingFlagLayer6           : BITFIELD_RANGE( 12,12 );
627             uint32_t RotationAngleMirrorDirectionLayer6    : BITFIELD_RANGE( 13,15 );
628             uint32_t SamplerIndexFirstPlaneLayer6          : BITFIELD_RANGE( 16,19 );
629             uint32_t SamplerIndexSecondThirdPlaneLayer6    : BITFIELD_RANGE( 20,23 );
630             uint32_t CCMExtensionEnablingFlagLayer6        : BITFIELD_RANGE( 24,24 );
631             uint32_t ToneMappingEnablingFlagLayer6         : BITFIELD_RANGE( 25,25 );
632             uint32_t PriorCSCEnablingFlagLayer6            : BITFIELD_RANGE( 26,26 );
633             uint32_t EOTF1DLUTEnablingFlagLayer6           : BITFIELD_RANGE( 27,27 );
634             uint32_t CCMEnablingFlagLayer6                 : BITFIELD_RANGE( 28,28 );
635             uint32_t OETF1DLUTEnablingFlagLayer6           : BITFIELD_RANGE( 29,29 );
636             uint32_t PostCSCEnablingFlagLayer6             : BITFIELD_RANGE( 30,30 );
637             uint32_t Enabling3DLUTFlagLayer6               : BITFIELD_RANGE( 31,31 );
638         };
639         uint32_t       Value;
640     } DW54;
641 
642     // uint32_t 55 - GRF R7.7
643     union
644     {
645         struct {
646             uint32_t FormatDescriptorLayer7                : BITFIELD_RANGE(  0,7  );
647             uint32_t ChromaSittingLocationLayer7           : BITFIELD_RANGE(  8,10 );
648             uint32_t ChannelSwapEnablingFlagLayer7         : BITFIELD_RANGE( 11,11 );
649             uint32_t IEFBypassEnablingFlagLayer7           : BITFIELD_RANGE( 12,12 );
650             uint32_t RotationAngleMirrorDirectionLayer7    : BITFIELD_RANGE( 13,15 );
651             uint32_t SamplerIndexFirstPlaneLayer7          : BITFIELD_RANGE( 16,19 );
652             uint32_t SamplerIndexSecondThirdPlaneLayer7    : BITFIELD_RANGE( 20,23 );
653             uint32_t CCMExtensionEnablingFlagLayer7        : BITFIELD_RANGE( 24,24 );
654             uint32_t ToneMappingEnablingFlagLayer7         : BITFIELD_RANGE( 25,25 );
655             uint32_t PriorCSCEnablingFlagLayer7            : BITFIELD_RANGE( 26,26 );
656             uint32_t EOTF1DLUTEnablingFlagLayer7           : BITFIELD_RANGE( 27,27 );
657             uint32_t CCMEnablingFlagLayer7                 : BITFIELD_RANGE( 28,28 );
658             uint32_t OETF1DLUTEnablingFlagLayer7           : BITFIELD_RANGE( 29,29 );
659             uint32_t PostCSCEnablingFlagLayer7             : BITFIELD_RANGE( 30,30 );
660             uint32_t Enabling3DLUTFlagLayer7               : BITFIELD_RANGE( 31,31 );
661         };
662         uint32_t       Value;
663     } DW55;
664 
665     // uint32_t 56 - GRF R8.0
666     union
667     {
668         struct {
669             uint32_t ConstantBlendingAlphaFillColorLayer0  : BITFIELD_RANGE(  0,7  );
670             uint32_t ConstantBlendingAlphaFillColorLayer1  : BITFIELD_RANGE(  8,15 );
671             uint32_t ConstantBlendingAlphaFillColorLayer2  : BITFIELD_RANGE( 16,23 );
672             uint32_t ConstantBlendingAlphaFillColorLayer3  : BITFIELD_RANGE( 24,31 );
673         };
674         uint32_t       Value;
675     } DW56;
676 
677     // uint32_t 57 - GRF R8.1
678     union
679     {
680         struct {
681             uint32_t ConstantBlendingAlphaFillColorLayer4  : BITFIELD_RANGE(  0,7  );
682             uint32_t ConstantBlendingAlphaFillColorLayer5  : BITFIELD_RANGE(  8,15 );
683             uint32_t ConstantBlendingAlphaFillColorLayer6  : BITFIELD_RANGE( 16,23 );
684             uint32_t ConstantBlendingAlphaFillColorLayer7  : BITFIELD_RANGE( 24,31 );
685         };
686         uint32_t       Value;
687     } DW57;
688 
689     // uint32_t 58 - GRF R8.2
690     union
691     {
692         struct {
693             uint32_t TwoLayerOperationLayer0 : BITFIELD_RANGE(  0,7  );
694             uint32_t TwoLayerOperationLayer1 : BITFIELD_RANGE(  8,15 );
695             uint32_t TwoLayerOperationLayer2 : BITFIELD_RANGE( 16,23 );
696             uint32_t TwoLayerOperationLayer3 : BITFIELD_RANGE( 24,31 );
697         };
698         uint32_t       Value;
699     } DW58;
700 
701     // uint32_t 59 - GRF R8.3
702     union
703     {
704         struct {
705             uint32_t TwoLayerOperationLayer4 : BITFIELD_RANGE(  0,7  );
706             uint32_t TwoLayerOperationLayer5 : BITFIELD_RANGE(  8,15 );
707             uint32_t TwoLayerOperationLayer6 : BITFIELD_RANGE( 16,23 );
708             uint32_t TwoLayerOperationLayer7 : BITFIELD_RANGE( 24,31 );
709         };
710         uint32_t       Value;
711     } DW59;
712 
713     // uint32_t 60 - GRF R8.4
714     union
715     {
716         struct {
717             uint32_t FixedPointFillColorRVChannel : BITFIELD_RANGE(  0,15 );
718             uint32_t FixedPointFillColorGYChannel : BITFIELD_RANGE( 16,31 );
719         };
720         uint32_t       Value;
721     } DW60;
722 
723     // uint32_t 61 - GRF R8.5
724     union
725     {
726         struct {
727             uint32_t FixedPointFillColorBUChannel    : BITFIELD_RANGE(  0,15 );
728             uint32_t FixedPointFillColorAlphaChannel : BITFIELD_RANGE( 16,31 );
729         };
730         uint32_t       Value;
731     } DW61;
732 
733     // uint32_t 62 - GRF R8.6
734     union
735     {
736         struct {
737             uint32_t DestinationWidth  : BITFIELD_RANGE(  0,15 );
738             uint32_t DestinationHeight : BITFIELD_RANGE( 16,31 );
739         };
740         uint32_t       Value;
741     } DW62;
742 
743     // uint32_t 63 - GRF R8.7
744     union
745     {
746         struct {
747             uint32_t TotalNumberInputLayers                    : BITFIELD_RANGE(  0,15 );
748             uint32_t FormatDescriptorDestination               : BITFIELD_RANGE( 16,23 );
749             uint32_t ChromaSittingLocationDestination          : BITFIELD_RANGE( 24,26 );
750             uint32_t ChannelSwapEnablingFlagDestination        : BITFIELD_RANGE( 27,27 );
751             uint32_t DstCSCEnablingFlagDestination             : BITFIELD_RANGE( 28,28 );
752             uint32_t Reserved                                  : BITFIELD_RANGE( 29,29 );
753             uint32_t DitherRoundEnablingFlagDestinationSurface : BITFIELD_RANGE( 30,31 );
754         };
755         uint32_t       Value;
756     } DW63;
757 } MEDIA_WALKER_HDR_STATIC_DATA, * PMEDIA_WALKER_HDR_STATIC_DATA;
758 C_ASSERT(SIZE32(MEDIA_WALKER_HDR_STATIC_DATA) == 64);
759 
760 //!
761 //! \brief HDR Format Descriptor enum
762 //!
763 typedef enum _VPHAL_HDR_FORMAT_DESCRIPTOR
764 {
765     VPHAL_HDR_FORMAT_DESCRIPTOR_UNKNOW = -1,
766     VPHAL_HDR_FORMAT_R16G16B16A16_FLOAT = 44,
767     VPHAL_HDR_FORMAT_DESCRIPTOR_R16G16_UNORM = 60,
768     VPHAL_HDR_FORMAT_DESCRIPTOR_R16_UNORM = 70,
769     VPHAL_HDR_FORMAT_DESCRIPTOR_R10G10B10A2_UNORM = 89,
770     VPHAL_HDR_FORMAT_DESCRIPTOR_R8G8B8A8_UNORM = 101,
771     VPHAL_HDR_FORMAT_DESCRIPTOR_YUY2 = 201,
772     VPHAL_HDR_FORMAT_DESCRIPTOR_NV12 = 220,
773     VPHAL_HDR_FORMAT_DESCRIPTOR_P010 = 222,
774     VPHAL_HDR_FORMAT_DESCRIPTOR_P016 = 223
775 } VPHAL_HDR_FORMAT_DESCRIPTOR;
776 
777 //!
778 //! \brief HDR Chroma Siting enum
779 //!
780 typedef enum _VPHAL_HDR_CHROMA_SITING
781 {
782     VPHAL_HDR_CHROMA_SITTING_A = 0, // Sample even index at even line
783     VPHAL_HDR_CHROMA_SITTING_B,     // Sample even index at odd line
784     VPHAL_HDR_CHROMA_SITTING_AC,    // Average consistent even index and odd index at even line
785     VPHAL_HDR_CHROMA_SITTING_BD,    // Average consistent even index and odd index at odd line
786     VPHAL_HDR_CHROMA_SITTING_AB,    // Average even index of even line and even index of odd line
787     VPHAL_HDR_CHROMA_SITTING_ABCD   // Average even and odd index at even line and odd line
788 } VPHAL_HDR_CHROMA_SITING;
789 
790 //!
791 //! \brief HDR Rotation enum
792 //!
793 typedef enum _VPHAL_HDR_ROTATION
794 {
795     VPHAL_HDR_LAYER_ROTATION_0 = 0, // 0 degree rotation
796     VPHAL_HDR_LAYER_ROTATION_90,     // 90 degree CW rotation
797     VPHAL_HDR_LAYER_ROTATION_180,    // 180 degree rotation
798     VPHAL_HDR_LAYER_ROTATION_270,    // 270 degree CW rotation
799     VPHAL_HDR_LAYER_MIRROR_H,        // 0 degree rotation then mirror horizontally
800     VPHAL_HDR_LAYER_ROT_90_MIR_H,    // 90 degree CW rotation then mirror horizontally
801     VPHAL_HDR_LAYER_MIRROR_V,        // 180 degree rotation then mirror horizontally (vertical mirror)
802     VPHAL_HDR_LAYER_ROT_90_MIR_V     // 270 degree CW rotation then mirror horizontally (90 degree CW rotation then vertical mirror)
803 } VPHAL_HDR_ROTATION;
804 
805 //!
806 //! \brief Two Layer Option enum
807 //!
808 typedef enum _VPHAL_HDR_TWO_LAYER_OPTION
809 {
810     VPHAL_HDR_TWO_LAYER_OPTION_SBLEND = 0, // Source Blending
811     VPHAL_HDR_TWO_LAYER_OPTION_CBLEND,     // Constant Blending
812     VPHAL_HDR_TWO_LAYER_OPTION_PBLEND,     // Partial Blending
813     VPHAL_HDR_TWO_LAYER_OPTION_CSBLEND,    // Constant Source Blending
814     VPHAL_HDR_TWO_LAYER_OPTION_CPBLEND,    // Constant Partial Blending
815     VPHAL_HDR_TWO_LAYER_OPTION_COMP        // Composition
816 } VPHAL_HDR_TWO_LAYER_OPTION;
817 
818 //!
819 //! \brief sampler state index enum
820 //!
821 typedef enum _VPHAL_HDR_SAMPLER_STATE_INDEX
822 {
823     VPHAL_HDR_SAMPLER_STATE_AVS_NEAREST_INDEX = 1,
824     VPHAL_HDR_SAMPLER_STATE_AVS_POLYPHASE_INDEX = 3,
825     VPHAL_HDR_SAMPLER_STATE_3D_NEAREST_INDEX = 13,
826     VPHAL_HDR_SAMPLER_STATE_3D_BILINEAR_INDEX = 14
827 } VPHAL_HDR_SAMPLER_STATE_INDEX;
828 
829 struct VP_HDR_LAYER
830 {
831     VP_SURFACE              *surf;                      //!< rcDst in surf is the one with rotation, which is different from the rcDst in SwfilterScaling
832     int32_t                 layerID;
833     int32_t                 layerIDOrigin;              //!< Origin layerID before layerSkipped, which can be used to reference surfaces in SurfaceGroup.
834     VPHAL_SCALING_MODE      scalingMode;
835     bool                    iefEnabled;
836     bool                    iscalingEnabled;
837     VPHAL_ROTATION          rotation;
838     bool                    useSampleUnorm = false;     //!<  true: sample unorm is used, false: DScaler or AVS is used.
839     bool                    useSamplerLumakey;          //!< Disabled on Gen12
840     bool                    fieldWeaving;
841     int32_t                 paletteID = 0;              //!<Palette Allocation
842     bool                    queryVariance;
843     bool                    xorComp = false;            //!< is mono-chroma composite mode.
844     VP_SURFACE              *surfField = nullptr;       //!< For SurfaceTypeFcInputLayer0Field1Dual during iscaling and fieldWeaving.
845 
846     // Filled by hwFilter
847     VP_LAYER_CALCULATED_PARAMS calculatedParams = {};   //!< Only valid in source.
848     // Filled by packet
849     VP_LAYER_CALCULATED_PARAMS2 calculatedParams2 = {}; //!< calcualted parameters which need be normalized by surface entry.
850 
851     // Need be initialized during SetupSurfaceState.
852     PRENDERHAL_SURFACE_STATE_ENTRY  surfaceEntries[MHW_MAX_SURFACE_PLANES] = {};
853     uint32_t                        numOfSurfaceEntries = 0;
854 
855     PVPHAL_DI_PARAMS        diParams;
856     PVPHAL_LUMAKEY_PARAMS   lumaKeyParams;
857     PVPHAL_BLENDING_PARAMS  blendingParams;
858     PVPHAL_PROCAMP_PARAMS   procampParams;
859 };
860 
861 class VpRenderHdrKernel : public VpRenderKernelObj
862 {
863 public:
864     VpRenderHdrKernel(PVP_MHWINTERFACE hwInterface, PVpAllocator allocator);
865 
~VpRenderHdrKernel()866     virtual ~VpRenderHdrKernel()
867     {
868         MOS_Delete(m_hdrParams);
869     }
870 
871     virtual MOS_STATUS GetCurbeState(void*& curbe, uint32_t& curbeLength) override;
872 
873     virtual uint32_t GetInlineDataSize() override;
874 
875     //virtual MOS_STATUS GetAlignedLength(uint32_t &curbeLength, uint32_t &curbeLengthAligned, RENDERHAL_KERNEL_PARAM kernelParam, uint32_t dwBlockAlign) override;
876 
877     virtual MOS_STATUS GetWalkerSetting(KERNEL_WALKER_PARAMS& walkerParam, KERNEL_PACKET_RENDER_DATA &renderData) override;
878 
FreeCurbe(void * & curbe)879     virtual MOS_STATUS FreeCurbe(void*& curbe) override
880     {
881         return MOS_STATUS_SUCCESS;
882     }
883 
IsKernelCached()884     virtual bool IsKernelCached() override
885     {
886         return true;
887     }
888 
GetCachedEntryForKernelLoad()889     virtual Kdll_CacheEntry *GetCachedEntryForKernelLoad() override
890     {
891         return m_kernelEntry;
892     }
893 
894     virtual MOS_STATUS InitRenderHalSurface(
895         SurfaceType             type,
896         VP_SURFACE              *surf,
897         PRENDERHAL_SURFACE      renderHalSurface) override;
898 
899     //virtual void OcaDumpKernelInfo(MOS_COMMAND_BUFFER &cmdBuffer, MOS_CONTEXT &mosContext) override;
900 
901     virtual MOS_STATUS GetScoreboardParams(PMHW_VFE_SCOREBOARD &scoreboardParams) override;
902     virtual MOS_STATUS SetSamplerStates(KERNEL_SAMPLER_STATE_GROUP &samplerStateGroup) override;
903 
904     void DumpSurfaces() override;
905     void DumpCurbe(void *pCurbe, int32_t iSize);
906     void PrintCurbeData(PMEDIA_WALKER_HDR_STATIC_DATA curbeData);
907 
908 protected:
909     virtual MOS_STATUS SetupSurfaceState() override;
910     virtual MOS_STATUS SetKernelConfigs(KERNEL_CONFIGS &kernelConfigs) override;
911     //virtual MOS_STATUS SetSamplerStates(KERNEL_SAMPLER_STATE_GROUP& samplerStateGroup) override;
912     MOS_STATUS GetSamplerIndex(VPHAL_SCALING_MODE scalingMode, uint32_t yuvPlane, int32_t &samplerIndex, MHW_SAMPLER_TYPE &samplerType);
913     MOS_STATUS SetSurfaceParams(KERNEL_SURFACE_STATE_PARAM &surfParam, VP_SURFACE *layer, bool is32MWColorFillKern);
914     MOS_STATUS InitRenderHalSurface(VP_SURFACE *surf, PRENDERHAL_SURFACE renderHalSurface);
915     MOS_STATUS SetCacheCntl(PVP_RENDER_CACHE_CNTL surfMemCacheCtl) override;
916     VPHAL_HDR_FORMAT_DESCRIPTOR GetFormatDescriptor(MOS_FORMAT Format);
917     VPHAL_HDR_CHROMA_SITING GetHdrChromaSiting(uint32_t ChromaSiting);
918     VPHAL_HDR_ROTATION GetHdrRotation(VPHAL_ROTATION Rotation);
919     MOS_STATUS              SamplerAvsCalcScalingTable(
920                      MOS_FORMAT      SrcFormat,
921                      float           fScale,
922                      bool            bVertical,
923                      uint32_t        dwChromaSiting,
924                      bool            bBalancedFilter,
925                      bool            b8TapAdaptiveEnable,
926                      PMHW_AVS_PARAMS pAvsParams);
927     MOS_STATUS SetSamplerAvsTableParam(
928         PRENDERHAL_INTERFACE     pRenderHal,
929         PMHW_SAMPLER_STATE_PARAM pSamplerStateParams,
930         PMHW_AVS_PARAMS          pAvsParams,
931         MOS_FORMAT               SrcFormat,
932         float                    fScaleX,
933         float                    fScaleY,
934         uint32_t                 dwChromaSiting);
935 
936     MOS_STATUS VpHal_HdrCalcYuvToRgbMatrix(
937         VPHAL_CSPACE src,
938         VPHAL_CSPACE dst,
939         float       *pTransferMatrix,
940         float       *pOutMatrix);
941 
942     MOS_STATUS VpHal_HdrGetYuvRangeAndOffset(
943             VPHAL_CSPACE cspace,
944             float       *pLumaOffset,
945             float       *pLumaExcursion,
946             float       *pChromaZero,
947             float       *pChromaExcursion);
948 
949     MOS_STATUS VpHal_HdrGetRgbRangeAndOffset(
950         VPHAL_CSPACE cspace,
951         float       *pRgbOffset,
952         float       *pRgbExcursion);
953 
954     MOS_STATUS VpHal_HdrCalcRgbToYuvMatrix(
955         VPHAL_CSPACE src,
956         VPHAL_CSPACE dst,
957         float       *pTransferMatrix,
958         float       *pOutMatrix);
959 
960     MOS_STATUS VpHal_HdrCalcCCMMatrix(
961             float *pTransferMatrix,
962             float *pOutMatrix);
963 
964     MOS_STATUS VpHal_HdrColorTransfer3dLut(
965         PRENDER_HDR_PARAMS params,
966         int32_t            iIndex,
967         float              fInputX,
968         float              fInputY,
969         float              fInputZ,
970         uint16_t          *puOutputX,
971         uint16_t          *puOutputY,
972         uint16_t          *puOutputZ);
973 
974     MOS_STATUS VpHal_HdrToneMapping3dLut(
975         VPHAL_HDR_MODE HdrMode,
976         double         fInputX,
977         double         fInputY,
978         double         fInputZ,
979         double        *pfOutputX,
980         double        *pfOutputY,
981         double        *pfOutputZ);
982 
983     //MOS_STATUS HdrUpdatePerLayerPipelineStates(FeatureParamHdr    &params, uint32_t* pdwUpdateMask);
984     MOS_STATUS InitOETF1DLUT(PRENDER_HDR_PARAMS params, int32_t iIndex, VP_SURFACE *pOETF1DLUTSurface);
985     virtual MOS_STATUS HdrInitCoeff(PRENDER_HDR_PARAMS params, VP_SURFACE *pCoeffSurface);
986     //MOS_STATUS HdrInitInput3DLUTExt(PRENDER_HDR_PARAMS params, PVPHAL_SURFACE pInput3DLUTSurface);
987 
988     MOS_STATUS InitCri3DLUT(
989         PRENDER_HDR_PARAMS params,
990         int32_t            iIndex,
991         VP_SURFACE         *pCRI3DLUTSurface);
992 
993     virtual void CalculateH2HPWLFCoefficients(
994         HDR_PARAMS       *pSource,
995         HDR_PARAMS       *pTarget,
996         float            *pPivotPoint,
997         uint16_t         *pSlopeIntercept,
998         PMOS_INTERFACE    pOsInterface);
999 
1000     bool ToneMappingStagesAssemble(
1001         HDR_PARAMS          *srcHDRParams,
1002         HDR_PARAMS          *targetHDRParams,
1003         HDRStageConfigEntry *pConfigEntry,
1004         uint32_t index);
1005 
1006     MOS_STATUS UpdatePerLayerPipelineStates(
1007         uint32_t           *pdwUpdateMask);
1008 
1009     VP_EXECUTE_CAPS     m_executeCaps       = {};
1010     Kdll_FilterDesc     m_searchFilter      = {};
1011     Kdll_SearchState    m_kernelSearch      = {};
1012     Kdll_State          *m_kernelDllState   = nullptr; //!< Compositing Kernel DLL/Search state
1013 
1014     void HdrLimitFP32ArrayPrecisionToF3_9(float fps[], size_t size);
1015     void HdrCalculateCCMWithMonitorGamut(
1016         VPHAL_HDR_CCM_TYPE CCMType,
1017         HDR_PARAMS         Target,
1018         float              TempMatrix[12]);
1019 
1020     // Procamp
1021     int32_t                 m_maxProcampEntries = VP_MAX_PROCAMP;
1022     Kdll_Procamp            m_Procamp[VP_MAX_PROCAMP] = {};
1023 
1024     PRENDERHAL_INTERFACE    m_renderHal = nullptr;
1025 
1026     VP_FC_DP_BASED_CURBE_DATA m_curbeDataDp = {};
1027     VP_FC_CURBE_DATA        m_curbeData = {};
1028     Kdll_CacheEntry         *m_kernelEntry = nullptr;
1029 
1030     // CSC parameters
1031     VPHAL_COLOR_SAMPLE_8 m_srcColor = {};
1032     VPHAL_COLOR_SAMPLE_8 m_dstColor = {};
1033     MEDIA_CSPACE        m_srcCspace  = CSpace_None;
1034     MEDIA_CSPACE        m_dstCspace  = CSpace_None;
1035 
1036     PRENDER_HDR_PARAMS   m_hdrParams = nullptr;
1037     MEDIA_WALKER_HDR_STATIC_DATA m_hdrCurbe = {};
1038     MHW_VFE_SCOREBOARD      m_scoreboardParams;
1039 
1040     bool                m_cscCoeffPatchModeEnabled = false;      //!< Set CSC Coeff using patch mode
1041     bool                m_computeWalkerEnabled = false;
1042 
1043     // Cache attributes
1044     VPHAL_HDR_CACHE_CNTL m_surfMemCacheCtl = {};
1045     KERNEL_SAMPLER_STATE_GROUP *m_samplerStateGroup = nullptr;  // Sampler states parameters for both current kernel object and others.
1046                                                                 // The sampler parameter for specific kernel should be added by kernel
1047                                                                 // object during VpRenderKernelObj::SetSamplerStates being called.
1048     KERNEL_SAMPLER_INDEX        m_samplerIndexes    = {};       // sampler index for current kernel object.
1049     PRENDERHAL_INTERFACE        renderHal           = nullptr;
1050 
1051     static const int32_t s_bindingTableIndex[];
1052     static const int32_t s_bindingTableIndexField[];
1053 
1054 MEDIA_CLASS_DEFINE_END(vp__VpRenderHdrKernel)
1055 };
1056 }
1057 
1058 
1059 #endif // __VP_RENDER_HDR_CMD_PACKET_EXT_H__
1060