xref: /aosp_15_r20/external/intel-media-driver/media_common/agnostic/common/vp/hal/vp_common_defs.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
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 //!
23 //! \file     vp_common_defs.h
24 //! \brief    clarify common utilities for vphal
25 //! \details  clarify common utilities for vphal including:
26 //!           some marcro, enum, union, structure, function
27 //!
28 #ifndef __VP_COMMON_DEFS_H__
29 #define __VP_COMMON_DEFS_H__
30 
31 #include "media_common_defs.h"
32 
33 #define ADDRESS_PAGE_ALIGNMENT_MASK_X64 0xFFFFFFFFFFFFF000ULL
34 #define ADDRESS_PAGE_ALIGNMENT_MASK_X86 0xFFFFF000
35 
36 //!
37 //! \def OUT_OF_BOUNDS(a, min, max)
38 //! Calcualte if \a a out the range of  [\a min, \a max].
39 //!
40 #define OUT_OF_BOUNDS(a, min, max) (((a) < (min)) || ((a) > (max)))
41 
42 //!
43 //! \def RECT1_CONTAINS_RECT2(rect1, rect2)
44 //! Compare if rectangle \a rect1 contains rectangle \a rect2 in coordinate
45 //!
46 #define RECT1_CONTAINS_RECT2(rect1, rect2)                             \
47     (((rect1).left <= (rect2).left) && ((rect1).top <= (rect2).top) && \
48         ((rect1).right >= (rect2).right) && ((rect1).bottom >= (rect2).bottom))
49 
50 //!
51 //! \def RECT1_CONTAINS_RECT2_ONEPIXELBIAS(rect1, rect2)
52 //! Compare if rectangle \a rect1 contains rectangle \a rect2 in coordinate, One pixel bias is allowed
53 //!
54 #define RECT1_CONTAINS_RECT2_ONEPIXELBIAS(rect1, rect2)                            \
55     (((rect1).left <= ((rect2).left + 1)) && ((rect1).top <= ((rect2).top + 1)) && \
56         (((rect1).right + 1) >= (rect2).right) && (((rect1).bottom + 1) >= (rect2).bottom))
57 
58 #define VPHAL_MEMORY_OBJECT_CONTROL uint32_t
59 
60 // YUV input ranges
61 #define YUV_RANGE_16_235 1
62 #define YUV_RANGE_0_255 2
63 
64 // ProcAmp Default Values
65 #define PROCAMP_BRIGHTNESS_MIN -100.0F
66 #define PROCAMP_BRIGHTNESS_MAX 100.0F
67 #define PROCAMP_BRIGHTNESS_DEFAULT 0.0F
68 #define PROCAMP_BRIGHTNESS_STEP 0.1F
69 #define PROCAMP_CONTRAST_MIN 0.0F
70 #define PROCAMP_CONTRAST_MAX 10.0F
71 #define PROCAMP_CONTRAST_DEFAULT 1.0F
72 #define PROCAMP_CONTRAST_STEP 0.01F
73 #define PROCAMP_HUE_MIN -180.0F
74 #define PROCAMP_HUE_MAX 180.0F
75 #define PROCAMP_HUE_DEFAULT 0.0F
76 #define PROCAMP_HUE_STEP 0.1F
77 #define PROCAMP_SATURATION_MIN 0.0F
78 #define PROCAMP_SATURATION_MAX 10.0F
79 #define PROCAMP_SATURATION_DEFAULT 1.0F
80 #define PROCAMP_SATURATION_STEP 0.01F
81 
82 // Denoise Default Values
83 #define NOISEREDUCTION_MIN 0.0F
84 #define NOISEREDUCTION_MAX 64.0F
85 #define NOISEREDUCTION_DEFAULT 0.0F
86 #define NOISEREDUCTION_STEP 1.0F
87 
88 // Skin Tone Detection/Enhancement  values
89 #define STE_MIN 0.0F
90 #define STE_MAX 9.0F
91 #define STE_DEFAULT 3.0F
92 #define STE_STEP 1.0F
93 
94 // Total Color Correction values
95 #define TCC_MIN 0.0F
96 #define TCC_MAX 255.0F
97 #define TCC_DEFAULT 160.0F
98 #define TCC_STEP 1.0F
99 
100 // Adaptive Contrast Enhancement values
101 #define ACE_LEVEL_DEFAULT 5
102 #define ACE_STRENGTH_DEFAULT 1
103 
104 // Sharpness Values
105 #define EDGEENHANCEMENT_MIN 0.0F
106 #define EDGEENHANCEMENT_MAX 64.0F
107 #define EDGEENHANCEMENT_DEFAULT 44.0F
108 #define EDGEENHANCEMENT_STEP 1.0F
109 #define IEF_STRONG_EDGE_WEIGHT 7
110 #define IEF_REGULAR_WEIGHT 2
111 #define IEF_STRONG_EDGE_THRESHOLD 8
112 
113 #define VPHAL_MAX_SOURCES 65  //!< worst case: 64 sub-streams + 1 pri video
114 #define VPHAL_MAX_TARGETS 8   //!< multi output support
115 
116 #define VPHAL_TOP_FIELD 0
117 #define VPHAL_BOTTOM_FIELD 1
118 #define VPHAL_TOP_FIELD_FIRST 0
119 #define VPHAL_BOTTOM_FIELD_FIRST 1
120 
121 //*-----------------------------------------------------------------------------
122 //| DEFINITIONS
123 //*-----------------------------------------------------------------------------
124 // Incremental size for allocating/reallocating resource
125 #define VPHAL_BUFFER_SIZE_INCREMENT 128
126 
127 // VPP internal resource NotLockable flag macro
128 #define VPP_INTER_RESOURCE_NOTLOCKABLE true
129 #define VPP_INTER_RESOURCE_LOCKABLE false
130 
131 // Media Features width
132 #define VPHAL_RNDR_8K_WIDTH (7680)
133 #define VPHAL_RNDR_16K_HEIGHT_LIMIT (16352)
134 
135 // Media Features height
136 #define VPHAL_RNDR_2K_HEIGHT 1080
137 // The reason that the definition is not (VPHAL_RNDR_2K_HEIGHT*2) is because some 4K clips have 1200 height.
138 #define VPHAL_RNDR_4K_HEIGHT 1200
139 #define VPHAL_RNDR_4K_MAX_HEIGHT 3112
140 #define VPHAL_RNDR_4K_MAX_WIDTH 4096
141 #define VPHAL_RNDR_6K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 3)
142 #define VPHAL_RNDR_8K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 4)
143 #define VPHAL_RNDR_10K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 5)
144 #define VPHAL_RNDR_12K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 6)
145 #define VPHAL_RNDR_14K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 7)
146 #define VPHAL_RNDR_16K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 8)
147 #define VPHAL_RNDR_18K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 9)
148 #define VPHAL_RNDR_20K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 10)
149 #define VPHAL_RNDR_22K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 11)
150 #define VPHAL_RNDR_24K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 12)
151 #define VPHAL_RNDR_26K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 13)
152 #define VPHAL_RNDR_28K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 14)
153 
154 //!
155 //! \def MEDIA_IS_HDCONTENT(dwWidth, dwHeight)
156 //! Determine if the size of content is HD
157 //!
158 #define MEDIA_SDCONTENT_MAX_WIDTH 720
159 #define MEDIA_SDCONTENT_MAX_PAL_HEIGHT 576
160 #define MEDIA_SDCONTENT_MAX_SW_WIDTH 768
161 #define MEDIA_IS_HDCONTENT(dwWidth, dwHeight) ((dwWidth > MEDIA_SDCONTENT_MAX_SW_WIDTH) || (dwHeight > MEDIA_SDCONTENT_MAX_PAL_HEIGHT))
162 
163 //!
164 //! \brief Base VP kernel list
165 //!
166 enum VpKernelID
167 {
168     // FC
169     kernelCombinedFc = 0,
170 
171     // 2 VEBOX KERNELS
172     kernelVeboxSecureBlockCopy,
173     kernelVeboxUpdateDnState,
174 
175     // User Ptr
176     kernelUserPtr,
177     // Fast 1toN
178     kernelFast1toN,
179 
180     // HDR
181     kernelHdrMandatory,
182     kernelHdrPreprocess,
183 
184     // mediacopy-render copy
185     kernelRenderCopy,
186 
187     kernelL0FcCommon,
188     kernelL0FcFP,
189     kernelL0Fc444PL3Input,
190 
191     baseKernelMaxNumID
192 };
193 
194 enum VpKernelIDNext
195 {
196     vpKernelIDNextBase = 0x200,
197     kernelHdr3DLutCalc = vpKernelIDNextBase,
198     kernelHdr3DLutCalcL0,
199     kernelHVSCalc,
200     vpKernelIDNextMax
201 };
202 
203 typedef struct _VPHAL_COMPOSITE_CACHE_CNTL
204 {
205     bool                        bL3CachingEnabled;
206     VPHAL_MEMORY_OBJECT_CONTROL PrimaryInputSurfMemObjCtl;
207     VPHAL_MEMORY_OBJECT_CONTROL InputSurfMemObjCtl;
208     VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl;
209 } VPHAL_COMPOSITE_CACHE_CNTL, *PVPHAL_COMPOSITE_CACHE_CNTL;
210 
211 //!
212 //! \brief Vphal Output chroma configuration enum
213 //!
214 typedef enum _VPHAL_CHROMA_SUBSAMPLING
215 {
216     CHROMA_SUBSAMPLING_TOP_CENTER = 0,
217     CHROMA_SUBSAMPLING_CENTER_CENTER,
218     CHROMA_SUBSAMPLING_BOTTOM_CENTER,
219     CHROMA_SUBSAMPLING_TOP_LEFT,
220     CHROMA_SUBSAMPLING_CENTER_LEFT,
221     CHROMA_SUBSAMPLING_BOTTOM_LEFT
222 } VPHAL_CHROMA_SUBSAMPLING;
223 
224 //!
225 //! \brief Vphal Gamma Values configuration enum
226 //!
227 typedef enum _VPHAL_GAMMA_VALUE
228 {
229     GAMMA_1P0 = 0,
230     GAMMA_2P2,
231     GAMMA_2P6
232 } VPHAL_GAMMA_VALUE;
233 
234 typedef struct _VPHAL_DNDI_CACHE_CNTL
235 {
236     bool                        bL3CachingEnabled;
237     VPHAL_MEMORY_OBJECT_CONTROL CurrentInputSurfMemObjCtl;
238     VPHAL_MEMORY_OBJECT_CONTROL PreviousInputSurfMemObjCtl;
239     VPHAL_MEMORY_OBJECT_CONTROL STMMInputSurfMemObjCtl;
240     VPHAL_MEMORY_OBJECT_CONTROL STMMOutputSurfMemObjCtl;
241     VPHAL_MEMORY_OBJECT_CONTROL DnOutSurfMemObjCtl;
242     VPHAL_MEMORY_OBJECT_CONTROL CurrentOutputSurfMemObjCtl;
243     VPHAL_MEMORY_OBJECT_CONTROL StatisticsOutputSurfMemObjCtl;
244     VPHAL_MEMORY_OBJECT_CONTROL LaceOrAceOrRgbHistogramSurfCtrl;
245     VPHAL_MEMORY_OBJECT_CONTROL AlphaOrVignetteSurfMemObjCtl;
246     VPHAL_MEMORY_OBJECT_CONTROL SkinScoreSurfMemObjCtl;
247     VPHAL_MEMORY_OBJECT_CONTROL LaceLookUpTablesSurfMemObjCtl;
248     VPHAL_MEMORY_OBJECT_CONTROL Vebox3DLookUpTablesSurfMemObjCtl;
249 } VPHAL_DNDI_CACHE_CNTL, *PVPHAL_DNDI_CACHE_CNTL;
250 
251 typedef struct _VPHAL_LACE_CACHE_CNTL
252 {
253     // LACE would reuse the bL3CachingEnabled of VEBOX's cache control
254     VPHAL_MEMORY_OBJECT_CONTROL FrameHistogramSurfaceMemObjCtl;
255     VPHAL_MEMORY_OBJECT_CONTROL AggregatedHistogramSurfaceMemObjCtl;
256     VPHAL_MEMORY_OBJECT_CONTROL StdStatisticsSurfaceMemObjCtl;
257     VPHAL_MEMORY_OBJECT_CONTROL PwlfInSurfaceMemObjCtl;
258     VPHAL_MEMORY_OBJECT_CONTROL PwlfOutSurfaceMemObjCtl;
259     VPHAL_MEMORY_OBJECT_CONTROL WeitCoefSurfaceMemObjCtl;
260     VPHAL_MEMORY_OBJECT_CONTROL GlobalToneMappingCurveLUTSurfaceMemObjCtl;
261 } VPHAL_LACE_CACHE_CNTL, *PVPHAL_LACE_CACHE_CNTL;
262 
263 typedef struct _VPHAL_16_ALIGN_CACHE_CNTL
264 {
265     bool                        bL3CachingEnabled;
266     VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl;
267     VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl;
268     VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsSurfMemObjCtl;
269     VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsStatsSurfMemObjCtl;
270 } VPHAL_16_ALIGN_CACHE_CNTL, *PVPHAL_16_ALIGN_CACHE_CNTL;
271 
272 typedef struct _VPHAL_FAST1TON_CACHE_CNTL
273 {
274     bool                        bL3CachingEnabled;
275     VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl;
276     VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl;
277     VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsSurfMemObjCtl;
278     VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsStatsSurfMemObjCtl;
279 } VPHAL_FAST1TON_CACHE_CNTL, *PVPHAL_FAST1TON_CACHE_CNTL;
280 
281 typedef struct _VPHAL_HDR_CACHE_CNTL
282 {
283     bool                        bL3CachingEnabled;
284     VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl;
285     VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl;
286     VPHAL_MEMORY_OBJECT_CONTROL Lut2DSurfMemObjCtl;
287     VPHAL_MEMORY_OBJECT_CONTROL Lut3DSurfMemObjCtl;
288     VPHAL_MEMORY_OBJECT_CONTROL CoeffSurfMemObjCtl;
289 } VPHAL_HDR_CACHE_CNTL, *PVPHAL_HDR_CACHE_CNTL;
290 
291 //!
292 //! \brief  Feature specific cache control settings
293 //!
294 typedef struct _VPHAL_RENDER_CACHE_CNTL
295 {
296     // Input
297     bool bDnDi;
298     bool bCompositing;
299     bool bLace;
300 
301     // Output
302     VPHAL_DNDI_CACHE_CNTL      DnDi;
303     VPHAL_COMPOSITE_CACHE_CNTL Composite;
304     VPHAL_LACE_CACHE_CNTL      Lace;
305 } VPHAL_RENDER_CACHE_CNTL, *PVPHAL_RENDER_CACHE_CNTL;
306 
307 //!
308 //! \brief Vphal Palette Type Mode enum
309 //!
310 typedef enum _VPHAL_PALETTE_TYPE
311 {
312     VPHAL_PALETTE_NONE = 0,
313     VPHAL_PALETTE_YCbCr_8,  //!< 8-bit depth - AYUV palette
314     VPHAL_PALETTE_ARGB_8,   //!< 8-bit depth - ARGB palette
315     VPHAL_PALETTE_AVYU_8    //!< 8-bit depth - YUY2 palette
316 } VPHAL_PALETTE_TYPE;
317 
318 //!
319 //! \brief Vphal Chroma Siting enum
320 //!
321 typedef enum _VPHAL_CHROMA_SITING
322 {
323     CHROMA_SITING_NONE        = 0,
324     CHROMA_SITING_HORZ_LEFT   = 1 << 0,
325     CHROMA_SITING_HORZ_CENTER = 1 << 1,
326     CHROMA_SITING_HORZ_RIGHT  = 1 << 2,
327     CHROMA_SITING_VERT_TOP    = 1 << 4,
328     CHROMA_SITING_VERT_CENTER = 1 << 5,
329     CHROMA_SITING_VERT_BOTTOM = 1 << 6,
330 } VPHAL_CHROMA_SITING;
331 
332 //!
333 //! \brief Vphal Rotation Mode enum
334 //!
335 typedef enum _VPHAL_ROTATION
336 {
337     VPHAL_ROTATION_IDENTITY           = ROTATION_IDENTITY,             //!< Rotation 0 degrees
338     VPHAL_ROTATION_90                 = ROTATION_90,                   //!< Rotation 90 degrees
339     VPHAL_ROTATION_180                = ROTATION_180,                  //!< Rotation 180 degrees
340     VPHAL_ROTATION_270                = ROTATION_270,                  //!< Rotation 270 degrees
341     VPHAL_MIRROR_HORIZONTAL           = ROTATION_MIRROR_HORIZONTAL,    //!< Horizontal Mirror
342     VPHAL_MIRROR_VERTICAL             = ROTATION_MIRROR_VERTICAL,      //!< Vertical Mirror
343     VPHAL_ROTATE_90_MIRROR_VERTICAL   = ROTATION_90_MIRROR_VERTICAL,   //!< 90 + V Mirror
344     VPHAL_ROTATE_90_MIRROR_HORIZONTAL = ROTATION_90_MIRROR_HORIZONTAL  //!< 90 + H Mirror
345 } VPHAL_ROTATION;
346 
347 //!
348 //! \brief Color Spaces enum
349 //!
350 typedef MEDIA_CSPACE VPHAL_CSPACE;
351 
352 //!
353 //! \brief Surface types enum
354 //!        IMPORTANT : SurfaceType_Layer[] must be updated to match this enum type
355 //!
356 typedef enum _VPHAL_SURFACE_TYPE
357 {
358     SURF_NONE = 0,
359     SURF_IN_BACKGROUND,
360     SURF_IN_PRIMARY,
361     SURF_IN_SUBSTREAM,
362     SURF_IN_REFERENCE,
363     SURF_OUT_RENDERTARGET,
364     SURF_TYPE_COUNT  //!< Keep this line at the end
365 } VPHAL_SURFACE_TYPE;
366 C_ASSERT(SURF_TYPE_COUNT == 6);  //!< When adding, update assert & vphal_solo_scenario.cpp
367 
368 //!
369 //! Structure VPHAL_GAMMA_TYPE
370 //! \brief GAMMA Function type
371 //!
372 typedef enum _VPHAL_GAMMA_TYPE
373 {
374     VPHAL_GAMMA_NONE = 0,
375     VPHAL_GAMMA_TRADITIONAL_GAMMA,
376     VPHAL_GAMMA_SMPTE_ST2084,
377     VPHAL_GAMMA_BT1886,
378     VPHAL_GAMMA_SRGB,
379     VPHAL_GAMMA_Count
380 } VPHAL_GAMMA_TYPE;
381 C_ASSERT(VPHAL_GAMMA_Count == 5);  //!< When adding, update assert
382 
383 //!
384 //! \def IS_COLOR_SPACE_BT2020_YUV(_a)
385 //! Check if the color space is BT2020 YUV
386 //!
387 #define IS_COLOR_SPACE_BT2020_YUV(_a) (_a == CSpace_BT2020 || \
388                                        _a == CSpace_BT2020_FullRange)
389 
390 //!
391 //! \def IS_COLOR_SPACE_BT2020_RGB(_a)
392 //! Check if the color space is BT2020 RGB
393 //!
394 #define IS_COLOR_SPACE_BT2020_RGB(_a) (_a == CSpace_BT2020_RGB || \
395                                        _a == CSpace_BT2020_stRGB)
396 
397 //!
398 //! \def IS_COLOR_SPACE_BT2020(_a)
399 //! Check if the color space is BT2020
400 //!
401 #define IS_COLOR_SPACE_BT2020(_a) (IS_COLOR_SPACE_BT2020_YUV(_a) || \
402                                    IS_COLOR_SPACE_BT2020_RGB(_a))
403 
404 //!
405 //! \brief Sample Type enum
406 //!
407 typedef enum _VPHAL_SAMPLE_TYPE
408 {
409     SAMPLE_PROGRESSIVE,
410     SAMPLE_SINGLE_TOP_FIELD,
411     SAMPLE_SINGLE_BOTTOM_FIELD,
412     SAMPLE_INTERLEAVED_EVEN_FIRST_TOP_FIELD,
413     SAMPLE_INTERLEAVED_EVEN_FIRST_BOTTOM_FIELD,
414     SAMPLE_INTERLEAVED_ODD_FIRST_TOP_FIELD,
415     SAMPLE_INTERLEAVED_ODD_FIRST_BOTTOM_FIELD,
416     SAMPLE_INVALID
417 } VPHAL_SAMPLE_TYPE;
418 C_ASSERT(SAMPLE_INVALID == 7);  //!< When adding, update assert & vphal_solo_scenario.cpp
419 
420 //!
421 //! \brief Frame Format enum
422 //!
423 typedef enum _VPHAL_FRAME_FORMAT
424 {
425     FRAME_FORMAT_PROGRESSIVE,
426     FRAME_FORMAT_INTERLEAVED,
427     FRAME_FORMAT_FIELD
428 } VPHAL_FRAME_FORMAT;
429 
430 //!
431 //! \brief Interlaced Scaling Mode enum
432 //!
433 typedef enum _VPHAL_ISCALING_TYPE
434 {
435     ISCALING_NONE,
436     ISCALING_INTERLEAVED_TO_INTERLEAVED,
437     ISCALING_INTERLEAVED_TO_FIELD,
438     ISCALING_FIELD_TO_INTERLEAVED,
439     ISCALING_FIELD_TO_FIELD
440 } VPHAL_ISCALING_TYPE;
441 C_ASSERT(ISCALING_FIELD_TO_FIELD == 4);
442 
443 //!
444 //! \ brief HVS DN Mode enum
445 //!
446 typedef enum _VPHAL_HVSDN_MODE
447 {
448     HVSDENOISE_AUTO_BDRATE = 0,
449     HVSDENOISE_AUTO_SUBJECTIVE,
450     HVSDENOISE_MANUAL
451 } VPHAL_HVSDN_MODE;
452 
453 //!
454 //! \brief DI Mode enum
455 //!
456 typedef enum _VPHAL_DI_MODE
457 {
458     DI_MODE_BOB,
459     DI_MODE_ADI
460 } VPHAL_DI_MODE;
461 C_ASSERT(DI_MODE_ADI == 1);  //!< When adding, update assert & vphal_solo_scenario.cpp
462 
463 //!
464 //! \brief Blend Type enum
465 //!
466 typedef enum _VPHAL_BLEND_TYPE
467 {
468     BLEND_NONE = 0,
469     BLEND_SOURCE,
470     BLEND_PARTIAL,
471     BLEND_CONSTANT,
472     BLEND_CONSTANT_SOURCE,
473     BLEND_CONSTANT_PARTIAL,
474     BLEND_XOR_MONO
475 } VPHAL_BLEND_TYPE;
476 C_ASSERT(BLEND_CONSTANT == 3);  //!< When adding, update assert & vphal_solo_scenario.cpp
477 
478 //!
479 //! \brief Scaling Mode enum
480 //!
481 typedef enum _VPHAL_SCALING_MODE
482 {
483     VPHAL_SCALING_NEAREST = 0,
484     VPHAL_SCALING_BILINEAR,
485     VPHAL_SCALING_AVS,
486     VPHAL_SCALING_ADV_QUALITY  // !< Advance Perf mode
487 } VPHAL_SCALING_MODE;
488 C_ASSERT(VPHAL_SCALING_ADV_QUALITY == 3);  //!< When adding, update assert & vphal_solo_scenario.cpp
489 
490 //!
491 //! \brief Composition Report Mode enum
492 //!
493 typedef enum _VPHAL_COMPOSITION_REPORT_MODE
494 {
495     VPHAL_NO_COMPOSITION,       //!< No composition , Error Reporting cases
496     VPHAL_INPLACE_COMPOSITION,  //!< Inplace Composition
497     VPHAL_LEGACY_COMPOSITION    //!< Legacy Composition
498 } VPHAL_COMPOSITION_REPORT_MODE;
499 
500 typedef enum _VPHAL_DI_REPORT_MODE
501 {
502     VPHAL_DI_REPORT_PROGRESSIVE,  //!< Progressive output
503     VPHAL_DI_REPORT_BOB,          //!< True BOB output
504     VPHAL_DI_REPORT_ADI_BOB,      //!< DNDI BOB output
505     VPHAL_DI_REPORT_ADI,          //!< ADI output
506     VPHAL_DI_REPORT_FMD           //!< FMD output
507 } VPHAL_DI_REPORT_MODE;
508 
509 //!
510 //! \brief Colorpack enum
511 //!
512 typedef enum _VPHAL_COLORPACK
513 {
514     VPHAL_COLORPACK_400 = 0,
515     VPHAL_COLORPACK_420,
516     VPHAL_COLORPACK_411,
517     VPHAL_COLORPACK_422,
518     VPHAL_COLORPACK_444,
519     VPHAL_COLORPACK_UNKNOWN
520 } VPHAL_COLORPACK,
521     *PVPHAL_COLORPACK;
522 
523 //!
524 //! \brief VEBOX 3DLut interpolation mode
525 //!
526 typedef enum _VPHAL_3DLUT_INTERPOLATION
527 {
528     VPHAL_3DLUT_INTERPOLATION_DEFAULT      = 0,     //!< Default 3DLUT interpolation method.
529     VPHAL_3DLUT_INTERPOLATION_TRILINEAR    = 1,     //!< 3DLUT trilinear interpolation method.
530     VPHAL_3DLUT_INTERPOLATION_TETRAHEDRAL  = 2      //!< 3DLUT tetrahedral interpolation method.
531 } VPHAL_3DLUT_INTERPOLATION;
532 
533 //!
534 //! \brief   Output Pipe Mode enum
535 //! \details The output pipe that writes the RenderTarget surface
536 //!
537 typedef enum _VPHAL_OUTPUT_PIPE_MODE
538 {
539     VPHAL_OUTPUT_PIPE_MODE_INVALID = -1,  //!< None output pipe selected. This is an invalid state
540     VPHAL_OUTPUT_PIPE_MODE_COMP    = 0,   //!< Composition output pipe. RenderTarget will be written by Composition
541     VPHAL_OUTPUT_PIPE_MODE_SFC     = 1,   //!< SFC output pipe. RenderTarget will be written by SFC
542     VPHAL_OUTPUT_PIPE_MODE_VEBOX   = 2    //!< Vebox output pipe. RenderTarget will be written by Vebox
543 } VPHAL_OUTPUT_PIPE_MODE,
544     *PVPHAL_OUTPUT_PIPE_MODE;
545 
546 typedef enum _VPHAL_SCALING_PREFERENCE
547 {
548     VPHAL_SCALING_PREFER_SFC = 0,       // SFC is default
549     VPHAL_SCALING_PREFER_COMP,          // For Gen9/10, Composition AVS get better quality than SFC AVS
550     VPHAL_SCALING_PREFER_SFC_FOR_VEBOX  // if VEBOX is required, use VEBOX + SFC, otherwise use Composistion
551 } VPHAL_SCALING_PREFERENCE;
552 C_ASSERT(VPHAL_SCALING_PREFER_SFC_FOR_VEBOX == 2);  //!< When adding, update assert & vphal_solo_scenario.cpp
553 
554 //!
555 //! \brief Gamut Mode enum
556 //!
557 typedef enum _VPHAL_GAMUT_MODE
558 {
559     GAMUT_MODE_NONE,
560     GAMUT_MODE_BASIC,
561     GAMUT_MODE_ADVANCED
562 } VPHAL_GAMUT_MODE;
563 C_ASSERT(GAMUT_MODE_ADVANCED == 2);  //!< When adding, update assert & vphal_solo_scenario.cpp
564 
565 //-----------------------------------------------------------------------------
566 // Forward declaration -
567 // IMPORTANT - DDI interfaces are NOT to access internal VPHAL states
568 //-----------------------------------------------------------------------------
569 typedef struct _RENDERHAL_INTERFACE *PRENDERHAL_INTERFACE;
570 typedef class MhwVeboxInterface     *PMHW_VEBOX_INTERFACE;
571 typedef class MhwSfcInterface       *PMHW_SFC_INTERFACE;
572 typedef struct VPHAL_SURFACE        *PVPHAL_SURFACE;
573 
574 class VphalRenderer;
575 
576 class MhwCpInterface;
577 
578 //!
579 //! Union   VPHAL_COLOR_SAMPLE_8
580 //! \brief  Vphal Color Sample 8 bit
581 //!
582 typedef union _VPHAL_COLOR_SAMPLE_8
583 {
584     // ARGB
585     struct
586     {
587         uint8_t B;
588         uint8_t G;
589         uint8_t R;
590         uint8_t A;
591     };
592 
593     // AVYU (YUY2 samples)
594     struct
595     {
596         uint8_t U;
597         uint8_t Y;
598         uint8_t V;
599         uint8_t a;
600     };
601 
602     // AYCbCr (NV12 samples)
603     struct
604     {
605         uint8_t Cr;  //!< V
606         uint8_t Cb;  //!< U
607         uint8_t YY;  //!< Y
608         uint8_t Alpha;
609     };
610 
611     uint32_t dwValue;
612 } VPHAL_COLOR_SAMPLE_8, *PVPHAL_COLOR_SAMPLE_8;
613 
614 //!
615 //! Union   VPHAL_COLOR_SAMPLE_16
616 //! \brief  Vphal Color Sample 16 bit
617 //!
618 typedef union _VPHAL_COLOR_SAMPLE_16
619 {
620     // ARGB
621     struct
622     {
623         int16_t B;
624         int16_t G;
625         int16_t R;
626         int16_t A;
627     };
628 
629     // AVYU
630     struct
631     {
632         int16_t U;
633         int16_t Y;
634         int16_t V;
635         int16_t a;
636     };
637 
638     // AYCbCr
639     struct
640     {
641         int16_t Cr;  //!< V
642         int16_t Cb;  //!< U
643         int16_t YY;  //!< Y
644         int16_t Alpha;
645     };
646 
647     uint32_t Value;
648 } VPHAL_COLOR_SAMPLE_16, *PVPHAL_COLOR_SAMPLE_16;
649 
650 //!
651 //! Structure VPHAL_PLANE_OFFSET
652 //! \brief  Vphal Plane OffSet
653 //!
654 typedef struct _VPHAL_PLANE_OFFSET
655 {
656     int iLockSurfaceOffset;  //!< Locked surface offset
657     int iSurfaceOffset;      //!< Plane surface offset
658     int iXOffset;            //!< X offset - horizontal offset in pixels
659     int iYOffset;            //!< Y offset - vertical offset in pixels
660 } VPHAL_PLANE_OFFSET, *PVPHAL_PLANE_OFFSET;
661 
662 //!
663 //! Union   VPHAL_HALF_PRECISION_FLOAT
664 //! \brief  Vphal half precision float type
665 //!
666 typedef union _VPHAL_HALF_PRECISION_FLOAT
667 {
668     struct
669     {
670         uint16_t Mantissa : 10;
671         uint16_t Exponent : 5;
672         uint16_t Sign : 1;
673     };
674 
675     uint16_t value;
676 } VPHAL_HALF_PRECISION_FLOAT, PVPHAL_HALF_PRECISION_FLOAT;
677 
678 //!
679 //! Structure VPHAL_PALETTE
680 //! \brief    Vphal Palette
681 //! \details  Palette entries:
682 //!           - 0 : empty palette
683 //!           - -1 : palette allocated but not loaded
684 //!           - >0 : palette in use
685 //!
686 typedef struct _VPHAL_PALETTE
687 {
688     VPHAL_PALETTE_TYPE PaletteType;    //!< Type of palette
689     VPHAL_CSPACE       ColorSpace;     //!< ColorSpace of Palette
690     bool               bHasAlpha;      //!< Alpha is valid
691     int32_t            iTotalEntries;  //!< Palette entries allocated
692     int32_t            iNumEntries;    //!< Palette entries in use
693     union
694     {
695         PVPHAL_COLOR_SAMPLE_8  pPalette8;
696         PVPHAL_COLOR_SAMPLE_16 pPalette16;
697     };
698 } VPHAL_PALETTE, *PVPHAL_PALETTE;
699 
700 //!
701 //! Structure VPHAL_BLENDING_PARAMS
702 //! \brief Layer Blending parameters
703 //!
704 typedef struct _VPHAL_BLENDING_PARAMS
705 {
706     VPHAL_BLEND_TYPE BlendType = BLEND_NONE;
707     float            fAlpha    = 0.0;
708 } VPHAL_BLENDING_PARAMS, *PVPHAL_BLENDING_PARAMS;
709 
710 //!
711 //! Structure VPHAL_LUMAKEY_PARAMS
712 //! \brief Luma Keying parameters
713 //!
714 typedef struct _VPHAL_LUMAKEY_PARAMS
715 {
716     int16_t LumaLow  = 0;
717     int16_t LumaHigh = 0;
718 } VPHAL_LUMAKEY_PARAMS, *PVPHAL_LUMAKEY_PARAMS;
719 
720 //!
721 //! Structure VPHAL_PROCAMP_PARAMS
722 //! \brief Procamp parameters
723 //!
724 typedef struct _VPHAL_PROCAMP_PARAMS
725 {
726     bool  bEnabled    = false;
727     float fBrightness = 0.0;
728     float fContrast   = 0.0;
729     float fHue        = 0.0;
730     float fSaturation = 0.0;
731 } VPHAL_PROCAMP_PARAMS, *PVPHAL_PROCAMP_PARAMS;
732 
733 //!
734 //! Structure VPHAL_IEF_PARAMS
735 //! \brief IEF parameters - Image Enhancement (Detail) Filter
736 //!
737 typedef struct _VPHAL_IEF_PARAMS
738 {
739     bool     bEnabled             = false;
740     bool     bSmoothMode          = false;
741     bool     bSkintoneTuned       = false;
742     bool     bEmphasizeSkinDetail = false;
743     float    fIEFFactor           = 0.0;
744     uint16_t StrongEdgeWeight     = 0;
745     uint16_t RegularWeight        = 0;
746     uint16_t StrongEdgeThreshold  = 0;
747     void    *pExtParam            = nullptr;
748 } VPHAL_IEF_PARAMS, *PVPHAL_IEF_PARAMS;
749 
750 //!
751 //! Structure VPHAL_DI_PARAMS
752 //! \brief Deinterlacing parameters
753 //!
754 typedef struct _VPHAL_DI_PARAMS
755 {
756     VPHAL_DI_MODE DIMode       = DI_MODE_BOB;  //!< DeInterlacing mode
757     bool          bEnableFMD   = false;        //!< FMD
758     bool          bSingleField = false;        //!< Used in frame Recon - if 30fps (one call per sample pair)
759     bool          bSCDEnable   = false;        //!< Scene change detection
760 } VPHAL_DI_PARAMS, *PVPHAL_DI_PARAMS;
761 
762 //!
763 //! \brief Noise Level Enumeration
764 //!
765 typedef enum _VPHAL_NOISELEVEL
766 {
767     NOISELEVEL_DEFAULT,
768     NOISELEVEL_VC1_HD
769 } VPHAL_NOISELEVEL;
770 C_ASSERT(NOISELEVEL_VC1_HD == 1);  //!< When adding, update assert & vphal_solo_scenario.cpp
771 
772 //!
773 //! Structure VPHAL_HVSDENOISE_PARAMS
774 //! \brief HVS Denoise Parameters - Human Vision System Based Denoise
775 //!
776 typedef struct _VPHAL_HVSDENOISE_PARAMS
777 {
778     uint16_t         QP                  = 0;
779     uint16_t         Strength            = 0;
780     VPHAL_HVSDN_MODE Mode                = HVSDENOISE_AUTO_BDRATE;
781     void            *pHVSDenoiseParam    = nullptr;
782     uint32_t         dwDenoiseParamSize  = 0;
783     uint32_t         dwGlobalNoiseLevel  = 0;  //!< Global Noise Level for Y
784     uint32_t         dwGlobalNoiseLevelU = 0;  //!< Global Noise Level for U
785     uint32_t         dwGlobalNoiseLevelV = 0;  //!< Global Noise Level for V
786     uint16_t         TgneEnable          = 0;
787     uint16_t         FirstFrame          = 0;
788     uint16_t         TgneFirstFrame      = 0;
789     uint16_t         Fallback            = 0;
790     uint16_t         EnableChroma        = 0;
791     uint16_t         EnableTemporalGNE   = 0;
792     uint16_t         RCMethod            = 0;
793     uint16_t         TgtKbps             = 0;
794     uint16_t         Width               = 0;
795     uint16_t         Height              = 0;
796     uint32_t         Sgne_Level          = 0;
797     uint32_t         Sgne_LevelU         = 0;
798     uint32_t         Sgne_LevelV         = 0;
799     uint32_t         Sgne_Count          = 0;
800     uint32_t         Sgne_CountU         = 0;
801     uint32_t         Sgne_CountV         = 0;
802     uint32_t         PrevNslvTemporal    = 0;
803     uint32_t         PrevNslvTemporalU   = 0;
804     uint32_t         PrevNslvTemporalV   = 0;
805 } VPHAL_HVSDENOISE_PARAMS, *PVPHAL_HVSDENOISE_PARAMS;
806 
807 //!
808 //! Structure VPHAL_SLIMIPU_DENOISE_PARAM
809 //! \brief SLIMIPU Denoise Parameters
810 //!
811 typedef struct _VPHAL_SLIMIPU_DENOISE_PARAM
812 {
813     uint32_t MemSizeInBytes;
814     void    *pSystemMem;
815 } VPHAL_SLIMIPU_DENOISE_PARAM, *PVPHAL_SLIMIPU_DENOISE_PARAM;
816 
817 //!
818 //! Structure VPHAL_DENOISE_PARAMS
819 //! \brief Denoise parameters
820 //!
821 typedef struct _VPHAL_DENOISE_PARAMS
822 {
823     bool                        bEnableChroma         = false;
824     bool                        bEnableLuma           = false;
825     bool                        bAutoDetect           = false;
826     float                       fDenoiseFactor        = 0.0;
827     VPHAL_NOISELEVEL            NoiseLevel            = NOISELEVEL_DEFAULT;
828     bool                        bEnableHVSDenoise     = false;
829     VPHAL_HVSDENOISE_PARAMS     HVSDenoise            = {};
830     bool                        bEnableSlimIPUDenoise = false;
831     VPHAL_SLIMIPU_DENOISE_PARAM SlimIPUDenoise        = {};
832     bool                        operator==(const struct _VPHAL_DENOISE_PARAMS &b)
833     {
834         return bEnableChroma == b.bEnableChroma &&
835                bEnableLuma == b.bEnableLuma &&
836                bAutoDetect == b.bAutoDetect &&
837                bEnableHVSDenoise == false &&
838                b.bEnableHVSDenoise == false &&
839                bEnableSlimIPUDenoise == false &&
840                b.bEnableSlimIPUDenoise == false;
841     }
842 } VPHAL_DENOISE_PARAMS, *PVPHAL_DENOISE_PARAMS;
843 
844 //!
845 //! Structure VPHAL_STE_PARAMS
846 //! \brief STE parameters - Skin Tone Enhancement
847 //!
848 typedef struct _VPHAL_STE_PARAMS
849 {
850     uint32_t dwSTEFactor = 0;
851 } VPHAL_STE_PARAMS, *PVPHAL_STE_PARAMS;
852 
853 //!
854 //! Structure VPHAL_STE_PARAMS
855 //! \brief STE parameters - Skin Tone Enhancement
856 //!
857 typedef struct _VPHAL_STD_PARAMS
858 {
859     uint32_t           paraSizeInBytes  = 0;
860     void              *param            = nullptr;
861     unsigned long long sysMem           = 0;
862     bool               bOutputSkinScore = false;
863 } VPHAL_STD_PARAMS, *PVPHAL_STD_PARAMS;
864 
865 //!
866 //! Structure VPHAL_TCC_PARAMS
867 //! \brief TCC parameters - Total Color Control
868 //!
869 typedef struct _VPHAL_TCC_PARAMS
870 {
871     uint8_t Red     = 0;
872     uint8_t Green   = 0;
873     uint8_t Blue    = 0;
874     uint8_t Cyan    = 0;
875     uint8_t Magenta = 0;
876     uint8_t Yellow  = 0;
877 } VPHAL_TCC_PARAMS, *PVPHAL_TCC_PARAMS;
878 
879 //!
880 //! Structure VPHAL_COLORPIPE_PARAMS
881 //! \brief IECP Parameters - Color Pipe
882 //!
883 typedef struct _VPHAL_COLORPIPE_PARAMS
884 {
885     bool             bEnableACE       = false;
886     bool             bEnableSTE       = false;
887     bool             bEnableSTD       = false;  // Is vebox STD alone enabled
888     bool             bEnableTCC       = false;
889     bool             bAceLevelChanged = false;
890     uint32_t         dwAceLevel       = 0;
891     uint32_t         dwAceStrength    = 0;
892     VPHAL_STE_PARAMS SteParams        = {};
893     VPHAL_STD_PARAMS StdParams        = {};
894     VPHAL_TCC_PARAMS TccParams        = {};
895 } VPHAL_COLORPIPE_PARAMS, *PVPHAL_COLORPIPE_PARAMS;
896 
897 //!
898 //! Structure VPHAL_3DLUT_PARAMS
899 //! \brief 3DLUT parameters - 3DLUT
900 //!
901 typedef struct _VPHAL_3DLUT_PARAMS
902 {
903     PVPHAL_SURFACE pExt3DLutSurface   = nullptr;  // Pointer to the 3DLUT surface which app passes to driver.
904     uint32_t       LutSize            = 0;        // Size of 3DLUT, i.e, how many entries LUT has.
905     uint32_t       ChannelMapping     = 0;        // Channel Mapping for the 3DLUT input to 3DLUT output.
906     uint16_t       BitDepthPerChannel = 0;        // Bit Depth Per Channel(4 channels for 3DLUT).
907     uint16_t       ByteCountPerEntry  = 0;        // Byte Count Per Entry including reserved bytes.
908 
909     VPHAL_3DLUT_INTERPOLATION InterpolationMethod = VPHAL_3DLUT_INTERPOLATION_DEFAULT;  // VEBox 3DLut interpolation mode
910 } VPHAL_3DLUT_PARAMS, *PVPHAL_3DLUT_PARAMS;
911 
912 //!
913 //! Structure VPHAL_GAMUT_PARAMS
914 //! \brief IECP Gamut Mapping Parameters
915 //!
916 typedef struct _VPHAL_GAMUT_PARAMS
917 {
918     VPHAL_GAMUT_MODE  GCompMode;
919     VPHAL_GAMUT_MODE  GExpMode;
920     VPHAL_GAMMA_VALUE GammaValue;
921     uint32_t          dwAttenuation;  //!< U2.10 [0, 1024] 0 = No down scaling, 1024 = Full down scaling
922     float             displayRGBW_x[4];
923     float             displayRGBW_y[4];
924     bool              bColorBalance;
925     int32_t           colorBalanceMatrix[3][3];
926 } VPHAL_GAMUT_PARAMS, *PVPHAL_GAMUT_PARAMS;
927 
928 //!
929 //! Structure VPHAL_NLAS_PARAMS
930 //! \brief NLAS parameters - Non-Anamorphic Scaling
931 //!
932 typedef struct _VPHAL_NLAS_PARAMS
933 {
934     float fVerticalCrop;
935     float fHLinearRegion;
936     float fNonLinearCrop;
937 } VPHAL_NLAS_PARAMS, *PVPHAL_NLAS_PARAMS;
938 
939 typedef struct _VPHAL_VIDEO_COLOR_RGBA
940 {
941     float R;
942     float G;
943     float B;
944     float A;
945 } VPHAL_VIDEO_COLOR_RGBA;
946 
947 //!
948 //! Structure VPHAL_COLORFILL_PARAMS
949 //! \brief ColorFill parameters
950 //!
951 typedef struct _VPHAL_COLORFILL_PARAMS
952 {
953     bool         bYCbCr                 = false;
954     uint32_t     Color                  = 0;
955     VPHAL_VIDEO_COLOR_RGBA Color1       = {};
956     VPHAL_CSPACE CSpace                 = CSpace_None;
957     bool         bDisableColorfillinSFC = false;
958     bool         bOnePixelBiasinSFC     = false;
959 } VPHAL_COLORFILL_PARAMS, *PVPHAL_COLORFILL_PARAMS;
960 
961 //!
962 //! Structure VPHAL_ALPHA_FILL_MODE
963 //! \brief Alpha mode
964 //!
965 typedef enum _VPHAL_ALPHA_FILL_MODE
966 {
967     VPHAL_ALPHA_FILL_MODE_NONE = 0,
968     VPHAL_ALPHA_FILL_MODE_OPAQUE,
969     VPHAL_ALPHA_FILL_MODE_BACKGROUND,
970     VPHAL_ALPHA_FILL_MODE_SOURCE_STREAM,
971 } VPHAL_ALPHA_FILL_MODE;
972 
973 //!
974 //! Structure VPHAL_ALPHA_PARAMS
975 //! \brief Alpha parameters
976 //!
977 typedef struct _VPHAL_ALPHA_PARAMS
978 {
979     float                 fAlpha;
980     VPHAL_ALPHA_FILL_MODE AlphaMode;
981 } VPHAL_ALPHA_PARAMS, *PVPHAL_ALPHA_PARAMS;
982 
983 //!
984 //! Structure VPHAL_SPLIT_SCREEN_DEMO_POSITION
985 //! \brief Split-Screen Demo Mode Position
986 //!
987 typedef enum _VPHAL_SPLIT_SCREEN_DEMO_POSITION
988 {
989     SPLIT_SCREEN_DEMO_DISABLED = 0,
990     SPLIT_SCREEN_DEMO_LEFT,
991     SPLIT_SCREEN_DEMO_RIGHT,
992     SPLIT_SCREEN_DEMO_TOP,
993     SPLIT_SCREEN_DEMO_BOTTOM,
994     SPLIT_SCREEN_DEMO_END_POS_LIST
995 } VPHAL_SPLIT_SCREEN_DEMO_POSITION;
996 
997 //!
998 //! Structure VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS
999 //! \brief Split-Screen Demo Mode Parameters
1000 //!
1001 typedef struct _VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS
1002 {
1003     VPHAL_SPLIT_SCREEN_DEMO_POSITION Position;             //!< Position of split mode area (disable features)
1004     bool                             bDisableACE : 1;      //!< Disable ACE
1005     bool                             bDisableAVS : 1;      //!< Disable AVS
1006     bool                             bDisableDN : 1;       //!< Disable DN
1007     bool                             bDisableFMD : 1;      //!< Disable FMD
1008     bool                             bDisableIEF : 1;      //!< Disable IEF
1009     bool                             bDisableProcamp : 1;  //!< Disable Procamp
1010     bool                             bDisableSTE : 1;      //!< Disable STE
1011     bool                             bDisableTCC : 1;      //!< Disable TCC
1012     bool                             bDisableIS : 1;       //!< Disable IS
1013     bool                             bDisableDrDb : 1;     //!< Disable DRDB
1014     bool                             bDisableDNUV : 1;     //!< Disable DNUV
1015     bool                             bDisableFRC : 1;      //!< Disable FRC
1016     bool                             bDisableLACE : 1;     //!< Disable LACE
1017 } VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS, *PVPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS;
1018 
1019 //!
1020 //! Structure VPHAL_RENDER_PARAMS
1021 //! \brief VPHAL Rendering Parameters
1022 //!
1023 struct VPHAL_RENDER_PARAMS
1024 {
1025     // Input/output surfaces
1026     uint32_t       uSrcCount                  = 0;   //!< Num sources
1027     VPHAL_SURFACE *pSrc[VPHAL_MAX_SOURCES]    = {};  //!< Source Samples
1028     uint32_t       uDstCount                  = 0;   //!< Num Targets
1029     VPHAL_SURFACE *pTarget[VPHAL_MAX_TARGETS] = {};  //!< Render Target
1030 
1031     // Additional parameters not included in PVPHAL_SURFACE
1032     PRECT                                pConstriction              = nullptr;  //!< Constriction rectangle
1033     PVPHAL_COLORFILL_PARAMS              pColorFillParams           = nullptr;  //!< ColorFill - BG only
1034     bool                                 bTurboMode                 = false;    //!< Enable Media Turbo Mode
1035     bool                                 bStereoMode                = false;    //!< Stereo BLT mode
1036     PVPHAL_ALPHA_PARAMS                  pCompAlpha                 = nullptr;  //!< Alpha for composited surfaces
1037     bool                                 bDisableDemoMode           = false;    //!< Enable/Disable demo mode function calls
1038     PVPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS pSplitScreenDemoModeParams = nullptr;  //!< Split-screen demo mode for VP features
1039     bool                                 bIsDefaultStream           = false;    //!< Identifier to differentiate default stream
1040 
1041     // Debugging parameters
1042     MOS_COMPONENT Component = COMPONENT_UNKNOWN;  //!< DDI component (for DEBUGGING only)
1043 
1044     // Status Report
1045     bool     bReportStatus    = false;  //!< Report current media BB status (Pre-Processing)
1046     uint32_t StatusFeedBackID = 0;      //!< Unique Staus ID;
1047 #if (_DEBUG || _RELEASE_INTERNAL)
1048     bool bTriggerGPUHang = false;  //!< Trigger GPU HANG
1049 #endif
1050 
1051     bool bCalculatingAlpha = false;  //!< Alpha calculation parameters
1052 
1053     // extension parameters
1054     void *pExtensionData = nullptr;  //!< Extension data
1055 
1056     bool bPathKernel        = false;  // HDR path config if use kernel
1057     bool bAPGWorkloadEnable = false;  //!< Identify Whether APG workload Enabled or not
1058 
1059     bool bDisableVeboxFor8K = false;
1060     bool bUseVEHdrSfc       = false;  // use SFC for to perform CSC/Scaling/RGBSwap of HDR streaming; if false, use composite render.
1061     bool bNonFirstFrame     = false;  // first frame or not: first frame false, otherwise true considering zeromemory parameters.
1062     bool bOptimizeCpuTiming = false;  //!< Optimize Cpu Timing
1063 
1064     bool bForceToRender = false;  // Force to render to perform scaling.
1065 
VPHAL_RENDER_PARAMSVPHAL_RENDER_PARAMS1066     VPHAL_RENDER_PARAMS() : uSrcCount(0),
1067                             pSrc(),
1068                             uDstCount(0),
1069                             pTarget(),
1070                             pConstriction(nullptr),
1071                             pColorFillParams(nullptr),
1072                             bTurboMode(false),
1073                             bStereoMode(false),
1074                             pCompAlpha(nullptr),
1075                             bDisableDemoMode(false),
1076                             pSplitScreenDemoModeParams(nullptr),
1077                             bIsDefaultStream(false),
1078                             Component(),
1079                             bReportStatus(false),
1080                             StatusFeedBackID(0),
1081 #if (_DEBUG || _RELEASE_INTERNAL)
1082                             bTriggerGPUHang(false),
1083 #endif
1084                             bCalculatingAlpha(false),
1085                             pExtensionData(nullptr),
1086                             bPathKernel(false),
1087                             bUseVEHdrSfc(false),
1088                             bNonFirstFrame(false)
1089     {
1090     }
1091 };
1092 
1093 typedef VPHAL_RENDER_PARAMS       *PVPHAL_RENDER_PARAMS;
1094 typedef const VPHAL_RENDER_PARAMS *PCVPHAL_RENDER_PARAMS;
1095 
1096 //!
1097 //! Structure VPHAL_GET_SURFACE_INFO
1098 //! \brief VPHAL Get Surface Infomation Parameters
1099 //!
1100 
1101 typedef struct VPHAL_GET_SURFACE_INFO *PVPHAL_GET_SURFACE_INFO;
1102 struct VPHAL_GET_SURFACE_INFO
1103 {
1104     uint32_t        ArraySlice;
1105     uint32_t        MipSlice;
1106     MOS_S3D_CHANNEL S3dChannel;
1107 };
1108 
1109 #endif  // __VP_COMMON_DEFS_H__