10ed5401bSmrg/* 20ed5401bSmrg * Copyright © 2016-2018 NVIDIA Corporation 30ed5401bSmrg * 40ed5401bSmrg * Permission is hereby granted, free of charge, to any person obtaining a 50ed5401bSmrg * copy of this software and associated documentation files (the "Software"), 60ed5401bSmrg * to deal in the Software without restriction, including without limitation 70ed5401bSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 80ed5401bSmrg * and/or sell copies of the Software, and to permit persons to whom the 90ed5401bSmrg * Software is furnished to do so, subject to the following conditions: 100ed5401bSmrg * 110ed5401bSmrg * The above copyright notice and this permission notice shall be included in 120ed5401bSmrg * all copies or substantial portions of the Software. 130ed5401bSmrg * 140ed5401bSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 150ed5401bSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 160ed5401bSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 170ed5401bSmrg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 180ed5401bSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 190ed5401bSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 200ed5401bSmrg * OTHER DEALINGS IN THE SOFTWARE. 210ed5401bSmrg */ 220ed5401bSmrg 230ed5401bSmrg#ifndef VIC40_H 240ed5401bSmrg#define VIC40_H 250ed5401bSmrg 260ed5401bSmrg#include <stdint.h> 270ed5401bSmrg 280ed5401bSmrg#define NVB0B6_VIDEO_COMPOSITOR_SET_APPLICATION_ID 0x00000200 290ed5401bSmrg#define NVB0B6_VIDEO_COMPOSITOR_EXECUTE 0x00000300 300ed5401bSmrg#define NVB0B6_VIDEO_COMPOSITOR_SET_SURFACE0_SLOT0_LUMA_OFFSET 0x00000400 310ed5401bSmrg#define NVB0B6_VIDEO_COMPOSITOR_SET_SURFACE0_SLOT0_CHROMA_U_OFFSET 0x00000404 320ed5401bSmrg#define NVB0B6_VIDEO_COMPOSITOR_SET_SURFACE0_SLOT0_CHROMA_V_OFFSET 0x00000408 330ed5401bSmrg#define NVB0B6_VIDEO_COMPOSITOR_SET_CONTROL_PARAMS 0x00000704 340ed5401bSmrg#define NVB0B6_VIDEO_COMPOSITOR_SET_CONFIG_STRUCT_OFFSET 0x00000708 350ed5401bSmrg#define NVB0B6_VIDEO_COMPOSITOR_SET_HIST_OFFSET 0x00000714 360ed5401bSmrg#define NVB0B6_VIDEO_COMPOSITOR_SET_OUTPUT_SURFACE_LUMA_OFFSET 0x00000720 370ed5401bSmrg 380ed5401bSmrgtypedef struct { 390ed5401bSmrg uint64_t SlotEnable : 1; /* 0 */ 400ed5401bSmrg uint64_t DeNoise : 1; /* 1 */ 410ed5401bSmrg uint64_t AdvancedDenoise : 1; /* 2 */ 420ed5401bSmrg uint64_t CadenceDetect : 1; /* 3 */ 430ed5401bSmrg uint64_t MotionMap : 1; /* 4 */ 440ed5401bSmrg uint64_t MMapCombine : 1; /* 5 */ 450ed5401bSmrg uint64_t IsEven : 1; /* 6 */ 460ed5401bSmrg uint64_t ChromaEven : 1; /* 7 */ 470ed5401bSmrg uint64_t CurrentFieldEnable : 1; /* 8 */ 480ed5401bSmrg uint64_t PrevFieldEnable : 1; /* 9 */ 490ed5401bSmrg uint64_t NextFieldEnable : 1; /* 10 */ 500ed5401bSmrg uint64_t NextNrFieldEnable : 1; /* 11 */ 510ed5401bSmrg uint64_t CurMotionFieldEnable : 1; /* 12 */ 520ed5401bSmrg uint64_t PrevMotionFieldEnable : 1; /* 13 */ 530ed5401bSmrg uint64_t PpMotionFieldEnable : 1; /* 14 */ 540ed5401bSmrg uint64_t CombMotionFieldEnable : 1; /* 15 */ 550ed5401bSmrg uint64_t FrameFormat : 4; /* 19..16 */ 560ed5401bSmrg uint64_t FilterLengthY : 2; /* 21..20 */ 570ed5401bSmrg uint64_t FilterLengthX : 2; /* 23..22 */ 580ed5401bSmrg uint64_t Panoramic : 12; /* 35..24 */ 590ed5401bSmrg uint64_t reserved1 : 22; /* 57..36 */ 600ed5401bSmrg uint64_t DetailFltClamp : 6; /* 63..58 */ 610ed5401bSmrg uint64_t FilterNoise : 10; /* 73..64 */ 620ed5401bSmrg uint64_t FilterDetail : 10; /* 83..74 */ 630ed5401bSmrg uint64_t ChromaNoise : 10; /* 93..84 */ 640ed5401bSmrg uint64_t ChromaDetail : 10; /* 103..94 */ 650ed5401bSmrg uint64_t DeinterlaceMode : 4; /* 107..104 */ 660ed5401bSmrg uint64_t MotionAccumWeight : 3; /* 110..108 */ 670ed5401bSmrg uint64_t NoiseIir : 11; /* 121..111 */ 680ed5401bSmrg uint64_t LightLevel : 4; /* 125..122 */ 690ed5401bSmrg uint64_t reserved4 : 2; /* 127..126 */ 700ed5401bSmrg /* 128 */ 710ed5401bSmrg uint64_t SoftClampLow : 10; /* 9..0 */ 720ed5401bSmrg uint64_t SoftClampHigh : 10; /* 19..10 */ 730ed5401bSmrg uint64_t reserved5 : 3; /* 22..20 */ 740ed5401bSmrg uint64_t reserved6 : 9; /* 31..23 */ 750ed5401bSmrg uint64_t PlanarAlpha : 10; /* 41..32 */ 760ed5401bSmrg uint64_t ConstantAlpha : 1; /* 42 */ 770ed5401bSmrg uint64_t StereoInterleave : 3; /* 45..43 */ 780ed5401bSmrg uint64_t ClipEnabled : 1; /* 46 */ 790ed5401bSmrg uint64_t ClearRectMask : 8; /* 54..47 */ 800ed5401bSmrg uint64_t DegammaMode : 2; /* 56..55 */ 810ed5401bSmrg uint64_t reserved7 : 1; /* 57 */ 820ed5401bSmrg uint64_t DecompressEnable : 1; /* 58 */ 830ed5401bSmrg uint64_t reserved9 : 5; /* 63..59 */ 840ed5401bSmrg uint64_t DecompressCtbCount : 8; /* 71..64 */ 850ed5401bSmrg uint64_t DecompressZbcColor : 32; /* 103..72 */ 860ed5401bSmrg uint64_t reserved12 : 24; /* 127..104 */ 870ed5401bSmrg /* 256 */ 880ed5401bSmrg uint64_t SourceRectLeft : 30; /* 29..0 */ 890ed5401bSmrg uint64_t reserved14 : 2; /* 31..30 */ 900ed5401bSmrg uint64_t SourceRectRight : 30; /* 61..32 */ 910ed5401bSmrg uint64_t reserved15 : 2; /* 63..62 */ 920ed5401bSmrg uint64_t SourceRectTop : 30; /* 93..64 */ 930ed5401bSmrg uint64_t reserved16 : 2; /* 95..94 */ 940ed5401bSmrg uint64_t SourceRectBottom : 30; /* 125..96 */ 950ed5401bSmrg uint64_t reserved17 : 2; /* 127..126 */ 960ed5401bSmrg /* 384 */ 970ed5401bSmrg uint64_t DestRectLeft : 14; /* 13..0 */ 980ed5401bSmrg uint64_t reserved18 : 2; /* 15..14 */ 990ed5401bSmrg uint64_t DestRectRight : 14; /* 29..16 */ 1000ed5401bSmrg uint64_t reserved19 : 2; /* 31..30 */ 1010ed5401bSmrg uint64_t DestRectTop : 14; /* 45..32 */ 1020ed5401bSmrg uint64_t reserved20 : 2; /* 47..46 */ 1030ed5401bSmrg uint64_t DestRectBottom : 14; /* 61..48 */ 1040ed5401bSmrg uint64_t reserved21 : 2; /* 63..62 */ 1050ed5401bSmrg uint64_t reserved22 : 32; /* 95..64 */ 1060ed5401bSmrg uint64_t reserved23 : 32; /* 127..96 */ 1070ed5401bSmrg} SlotConfig; 1080ed5401bSmrg 1090ed5401bSmrgtypedef struct { 1100ed5401bSmrg uint64_t SlotPixelFormat : 7; /* 6..0 */ 1110ed5401bSmrg uint64_t SlotChromaLocHoriz : 2; /* 8..7 */ 1120ed5401bSmrg uint64_t SlotChromaLocVert : 2; /* 10..9 */ 1130ed5401bSmrg uint64_t SlotBlkKind : 4; /* 14..11 */ 1140ed5401bSmrg uint64_t SlotBlkHeight : 4; /* 18..15 */ 1150ed5401bSmrg uint64_t SlotCacheWidth : 3; /* 21..19 */ 1160ed5401bSmrg uint64_t reserved0 : 10; /* 31..22 */ 1170ed5401bSmrg uint64_t SlotSurfaceWidth : 14; /* 45..32 */ 1180ed5401bSmrg uint64_t SlotSurfaceHeight : 14; /* 59..46 */ 1190ed5401bSmrg uint64_t reserved1 : 4; /* 63..60 */ 1200ed5401bSmrg uint64_t SlotLumaWidth : 14; /* 77..64 */ 1210ed5401bSmrg uint64_t SlotLumaHeight : 14; /* 91..78 */ 1220ed5401bSmrg uint64_t reserved2 : 4; /* 95..92 */ 1230ed5401bSmrg uint64_t SlotChromaWidth : 14; /* 109..96 */ 1240ed5401bSmrg uint64_t SlotChromaHeight : 14; /* 123..110 */ 1250ed5401bSmrg uint64_t reserved3 : 4; /* 127..124 */ 1260ed5401bSmrg} SlotSurfaceConfig; 1270ed5401bSmrg 1280ed5401bSmrgtypedef struct { 1290ed5401bSmrg uint64_t luma_coeff0 : 20; /* 19..0 */ 1300ed5401bSmrg uint64_t luma_coeff1 : 20; /* 39..20 */ 1310ed5401bSmrg uint64_t luma_coeff2 : 20; /* 59..40 */ 1320ed5401bSmrg uint64_t luma_r_shift : 4; /* 63..60 */ 1330ed5401bSmrg uint64_t luma_coeff3 : 20; /* 83..64 */ 1340ed5401bSmrg uint64_t LumaKeyLower : 10; /* 93..84 */ 1350ed5401bSmrg uint64_t LumaKeyUpper : 10; /* 103..94 */ 1360ed5401bSmrg uint64_t LumaKeyEnabled : 1; /* 104 */ 1370ed5401bSmrg uint64_t reserved0 : 2; /* 106..105 */ 1380ed5401bSmrg uint64_t reserved1 : 21; /* 127..107 */ 1390ed5401bSmrg} LumaKeyStruct; 1400ed5401bSmrg 1410ed5401bSmrgtypedef struct { 1420ed5401bSmrg uint64_t matrix_coeff00 : 20; /* 19..0 */ 1430ed5401bSmrg uint64_t matrix_coeff10 : 20; /* 39..20 */ 1440ed5401bSmrg uint64_t matrix_coeff20 : 20; /* 59..40 */ 1450ed5401bSmrg uint64_t matrix_r_shift : 4; /* 63..60 */ 1460ed5401bSmrg uint64_t matrix_coeff01 : 20; /* 83..64 */ 1470ed5401bSmrg uint64_t matrix_coeff11 : 20; /* 103..84 */ 1480ed5401bSmrg uint64_t matrix_coeff21 : 20; /* 123..104 */ 1490ed5401bSmrg uint64_t reserved0 : 3; /* 126..124 */ 1500ed5401bSmrg uint64_t matrix_enable : 1; /* 127 */ 1510ed5401bSmrg /* 128 */ 1520ed5401bSmrg uint64_t matrix_coeff02 : 20; /* 19..0 */ 1530ed5401bSmrg uint64_t matrix_coeff12 : 20; /* 39..20 */ 1540ed5401bSmrg uint64_t matrix_coeff22 : 20; /* 59..40 */ 1550ed5401bSmrg uint64_t reserved1 : 4; /* 63..60 */ 1560ed5401bSmrg uint64_t matrix_coeff03 : 20; /* 83..64 */ 1570ed5401bSmrg uint64_t matrix_coeff13 : 20; /* 103..84 */ 1580ed5401bSmrg uint64_t matrix_coeff23 : 20; /* 123..104 */ 1590ed5401bSmrg uint64_t reserved2 : 4; /* 127..124 */ 1600ed5401bSmrg} MatrixStruct; 1610ed5401bSmrg 1620ed5401bSmrgtypedef struct { 1630ed5401bSmrg uint64_t ClearRect0Left : 14; /* 13..0 */ 1640ed5401bSmrg uint64_t reserved0 : 2; /* 15..14 */ 1650ed5401bSmrg uint64_t ClearRect0Right : 14; /* 29..16 */ 1660ed5401bSmrg uint64_t reserved1 : 2; /* 31..30 */ 1670ed5401bSmrg uint64_t ClearRect0Top : 14; /* 45..32 */ 1680ed5401bSmrg uint64_t reserved2 : 2; /* 47..46 */ 1690ed5401bSmrg uint64_t ClearRect0Bottom : 14; /* 61..48 */ 1700ed5401bSmrg uint64_t reserved3 : 2; /* 63..62 */ 1710ed5401bSmrg uint64_t ClearRect1Left : 14; /* 77..64 */ 1720ed5401bSmrg uint64_t reserved4 : 2; /* 79..78 */ 1730ed5401bSmrg uint64_t ClearRect1Right : 14; /* 93..80 */ 1740ed5401bSmrg uint64_t reserved5 : 2; /* 95..94 */ 1750ed5401bSmrg uint64_t ClearRect1Top : 14; /* 109..96 */ 1760ed5401bSmrg uint64_t reserved6 : 2; /* 111..110 */ 1770ed5401bSmrg uint64_t ClearRect1Bottom : 14; /* 125..112 */ 1780ed5401bSmrg uint64_t reserved7 : 2; /* 127..126 */ 1790ed5401bSmrg} ClearRectStruct; 1800ed5401bSmrg 1810ed5401bSmrgtypedef struct { 1820ed5401bSmrg uint64_t AlphaK1 : 10; /* 9..0 */ 1830ed5401bSmrg uint64_t reserved0 : 6; /* 15..10 */ 1840ed5401bSmrg uint64_t AlphaK2 : 10; /* 25..16 */ 1850ed5401bSmrg uint64_t reserved1 : 6; /* 31..26 */ 1860ed5401bSmrg uint64_t SrcFactCMatchSelect : 3; /* 34..32 */ 1870ed5401bSmrg uint64_t reserved2 : 1; /* 35 */ 1880ed5401bSmrg uint64_t DstFactCMatchSelect : 3; /* 38..36 */ 1890ed5401bSmrg uint64_t reserved3 : 1; /* 39 */ 1900ed5401bSmrg uint64_t SrcFactAMatchSelect : 3; /* 42..40 */ 1910ed5401bSmrg uint64_t reserved4 : 1; /* 43 */ 1920ed5401bSmrg uint64_t DstFactAMatchSelect : 3; /* 46..44 */ 1930ed5401bSmrg uint64_t reserved5 : 1; /* 47 */ 1940ed5401bSmrg uint64_t reserved6 : 4; /* 51..48 */ 1950ed5401bSmrg uint64_t reserved7 : 4; /* 55..52 */ 1960ed5401bSmrg uint64_t reserved8 : 4; /* 59..56 */ 1970ed5401bSmrg uint64_t reserved9 : 4; /* 63..60 */ 1980ed5401bSmrg uint64_t reserved10 : 2; /* 65..64 */ 1990ed5401bSmrg uint64_t OverrideR : 10; /* 75..66 */ 2000ed5401bSmrg uint64_t OverrideG : 10; /* 85..76 */ 2010ed5401bSmrg uint64_t OverrideB : 10; /* 95..86 */ 2020ed5401bSmrg uint64_t OverrideA : 10; /* 105..96 */ 2030ed5401bSmrg uint64_t reserved11 : 2; /* 107..106 */ 2040ed5401bSmrg uint64_t UseOverrideR : 1; /* 108 */ 2050ed5401bSmrg uint64_t UseOverrideG : 1; /* 109 */ 2060ed5401bSmrg uint64_t UseOverrideB : 1; /* 110 */ 2070ed5401bSmrg uint64_t UseOverrideA : 1; /* 111 */ 2080ed5401bSmrg uint64_t MaskR : 1; /* 112 */ 2090ed5401bSmrg uint64_t MaskG : 1; /* 113 */ 2100ed5401bSmrg uint64_t MaskB : 1; /* 114 */ 2110ed5401bSmrg uint64_t MaskA : 1; /* 115 */ 2120ed5401bSmrg uint64_t reserved12 : 12; /* 127..116 */ 2130ed5401bSmrg} BlendingSlotStruct; 2140ed5401bSmrg 2150ed5401bSmrgtypedef struct { 2160ed5401bSmrg uint64_t AlphaFillMode : 3; /* 2..0 */ 2170ed5401bSmrg uint64_t AlphaFillSlot : 3; /* 5..3 */ 2180ed5401bSmrg uint64_t BackgroundAlpha : 10; /* 15..6 */ 2190ed5401bSmrg uint64_t BackgroundR : 10; /* 25..16 */ 2200ed5401bSmrg uint64_t BackgroundG : 10; /* 35..26 */ 2210ed5401bSmrg uint64_t BackgroundB : 10; /* 45..36 */ 2220ed5401bSmrg uint64_t RegammaMode : 2; /* 47..46 */ 2230ed5401bSmrg uint64_t OutputFlipX : 1; /* 48 */ 2240ed5401bSmrg uint64_t OutputFlipY : 1; /* 49 */ 2250ed5401bSmrg uint64_t OutputTranspose : 1; /* 50 */ 2260ed5401bSmrg uint64_t reserved1 : 1; /* 51 */ 2270ed5401bSmrg uint64_t reserved2 : 12; /* 63..52 */ 2280ed5401bSmrg uint64_t TargetRectLeft : 14; /* 77..64 */ 2290ed5401bSmrg uint64_t reserved3 : 2; /* 79..78 */ 2300ed5401bSmrg uint64_t TargetRectRight : 14; /* 93..80 */ 2310ed5401bSmrg uint64_t reserved4 : 2; /* 95..94 */ 2320ed5401bSmrg uint64_t TargetRectTop : 14; /* 109..96 */ 2330ed5401bSmrg uint64_t reserved5 : 2; /* 111..110 */ 2340ed5401bSmrg uint64_t TargetRectBottom : 14; /* 125..112 */ 2350ed5401bSmrg uint64_t reserved6 : 2; /* 127..126 */ 2360ed5401bSmrg} OutputConfig; 2370ed5401bSmrg 2380ed5401bSmrgtypedef struct { 2390ed5401bSmrg uint64_t OutPixelFormat : 7; /* 6..0 */ 2400ed5401bSmrg uint64_t OutChromaLocHoriz : 2; /* 8..7 */ 2410ed5401bSmrg uint64_t OutChromaLocVert : 2; /* 10..9 */ 2420ed5401bSmrg uint64_t OutBlkKind : 4; /* 14..11 */ 2430ed5401bSmrg uint64_t OutBlkHeight : 4; /* 18..15 */ 2440ed5401bSmrg uint64_t reserved0 : 3; /* 21..19 */ 2450ed5401bSmrg uint64_t reserved1 : 10; /* 31..22 */ 2460ed5401bSmrg uint64_t OutSurfaceWidth : 14; /* 45..32 */ 2470ed5401bSmrg uint64_t OutSurfaceHeight : 14; /* 59..46 */ 2480ed5401bSmrg uint64_t reserved2 : 4; /* 63..60 */ 2490ed5401bSmrg uint64_t OutLumaWidth : 14; /* 77..64 */ 2500ed5401bSmrg uint64_t OutLumaHeight : 14; /* 91..78 */ 2510ed5401bSmrg uint64_t reserved3 : 4; /* 95..92 */ 2520ed5401bSmrg uint64_t OutChromaWidth : 14; /* 109..96 */ 2530ed5401bSmrg uint64_t OutChromaHeight : 14; /* 123..110 */ 2540ed5401bSmrg uint64_t reserved4 : 4; /* 127..124 */ 2550ed5401bSmrg} OutputSurfaceConfig; 2560ed5401bSmrg 2570ed5401bSmrgtypedef struct { 2580ed5401bSmrg uint64_t DownsampleHoriz : 11; /* 10..0 */ 2590ed5401bSmrg uint64_t reserved0 : 5; /* 15..11 */ 2600ed5401bSmrg uint64_t DownsampleVert : 11; /* 26..16 */ 2610ed5401bSmrg uint64_t reserved1 : 5; /* 31..27 */ 2620ed5401bSmrg uint64_t reserved2 : 32; /* 63..32 */ 2630ed5401bSmrg uint64_t reserved3 : 32; /* 95..64 */ 2640ed5401bSmrg uint64_t reserved4 : 32; /* 127..96 */ 2650ed5401bSmrg} PipeConfig; 2660ed5401bSmrg 2670ed5401bSmrgtypedef struct { 2680ed5401bSmrg SlotConfig slotConfig; 2690ed5401bSmrg SlotSurfaceConfig slotSurfaceConfig; 2700ed5401bSmrg LumaKeyStruct lumaKeyStruct; 2710ed5401bSmrg MatrixStruct colorMatrixStruct; 2720ed5401bSmrg MatrixStruct gamutMatrixStruct; 2730ed5401bSmrg BlendingSlotStruct blendingSlotStruct; 2740ed5401bSmrg} SlotStruct; 2750ed5401bSmrg 2760ed5401bSmrgtypedef struct { 2770ed5401bSmrg PipeConfig pipeConfig; 2780ed5401bSmrg OutputConfig outputConfig; 2790ed5401bSmrg OutputSurfaceConfig outputSurfaceConfig; 2800ed5401bSmrg MatrixStruct outColorMatrixStruct; 2810ed5401bSmrg ClearRectStruct clearRectStruct[4]; 2820ed5401bSmrg SlotStruct slotStruct[8]; 2830ed5401bSmrg} ConfigStruct; 2840ed5401bSmrg 2850ed5401bSmrg#endif 286