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 ¶ms, 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