blob: abb88b4b5f346b97f25e379942371f24fa0cdd6e [file] [log] [blame]
/*
* Copyright (c) 2017-2020, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
//!
//! \file mhw_vdbox_avp_hwcmd_g12_X.h
//! \brief Auto-generated constructors for MHW and states.
//! \details This file may not be included outside of g12_X as other components
//! should use MHW interface to interact with MHW commands and states.
//!
// DO NOT EDIT
#ifndef __MHW_AVP_HWCMD_G12_H__
#define __MHW_AVP_HWCMD_G12_H__
#pragma once
#pragma pack(1)
#include <cstdint>
#include <cstddef>
class mhw_vdbox_avp_g12_X
{
public:
// Internal Macros
#define __CODEGEN_MAX(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
#define __CODEGEN_BITFIELD(l, h) (h) - (l) + 1
#define __CODEGEN_OP_LENGTH_BIAS 2
#define __CODEGEN_OP_LENGTH(x) (uint32_t)((__CODEGEN_MAX(x, __CODEGEN_OP_LENGTH_BIAS)) - __CODEGEN_OP_LENGTH_BIAS)
static uint32_t GetOpLength(uint32_t uiLength) { return __CODEGEN_OP_LENGTH(uiLength); }
//!
//! \brief MEMORYADDRESSATTRIBUTES
//! \details
//! This field controls the priority of arbitration used in the GAC/GAM
//! pipeline for this surface. It defines the attributes for VDBOX addresses
//! on BDW+.
//!
struct MEMORYADDRESSATTRIBUTES_CMD
{
union
{
struct
{
uint32_t Reserved0 : __CODEGEN_BITFIELD( 0, 0) ; //!< Reserved
uint32_t BaseAddressIndexToMemoryObjectControlStateMocsTables : __CODEGEN_BITFIELD( 1, 6) ; //!< Base Address - Index to Memory Object Control State (MOCS) Tables
uint32_t BaseAddressArbitrationPriorityControl : __CODEGEN_BITFIELD( 7, 8) ; //!< Base Address - Arbitration Priority Control
uint32_t BaseAddressMemoryCompressionEnable : __CODEGEN_BITFIELD( 9, 9) ; //!< Base Address - Memory Compression Enable
uint32_t CompressionType : __CODEGEN_BITFIELD(10, 10) ; //!< COMPRESSION_TYPE
uint32_t Reserved11 : __CODEGEN_BITFIELD(11, 11) ; //!< Reserved
uint32_t BaseAddressRowStoreScratchBufferCacheSelect : __CODEGEN_BITFIELD(12, 12) ; //!< BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT
uint32_t BaseAddressTiledResourceMode : __CODEGEN_BITFIELD(13, 14) ; //!< BASE_ADDRESS_TILED_RESOURCE_MODE
uint32_t Reserved15 : __CODEGEN_BITFIELD(15, 31) ; //!< Reserved
};
uint32_t Value;
} DW0;
//! \name Local enumerations
//! \brief COMPRESSION_TYPE
//! \details
//! Indicates if buffer is render/media compressed.
enum COMPRESSION_TYPE
{
COMPRESSION_TYPE_MEDIACOMPRESSIONENABLE = 0, //!< No additional details
COMPRESSION_TYPE_RENDERCOMPRESSIONENABLE = 1, //!< No additional details
};
//! \brief BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT
//! \details
//! This field controls if the Row Store is going to store inside Media
//! Cache (rowstore cache) or to LLC.
enum BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT
{
BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT_UNNAMED0 = 0, //!< Buffer going to LLC.
BASE_ADDRESS_ROW_STORE_SCRATCH_BUFFER_CACHE_SELECT_UNNAMED1 = 1, //!< Buffer going to Internal Media Storage.
};
//! \brief BASE_ADDRESS_TILED_RESOURCE_MODE
//! \details
//! For Media Surfaces: This field specifies the tiled resource mode.
enum BASE_ADDRESS_TILED_RESOURCE_MODE
{
BASE_ADDRESS_TILED_RESOURCE_MODE_TRMODENONE = 0, //!< TileY resources
BASE_ADDRESS_TILED_RESOURCE_MODE_TRMODETILEYF = 1, //!< 4KB tiled resources
BASE_ADDRESS_TILED_RESOURCE_MODE_TRMODETILEYS = 2, //!< 64KB tiled resources
};
//! \name Initializations
//! \brief Explicit member initialization function
MEMORYADDRESSATTRIBUTES_CMD();
static const size_t dwSize = 1;
static const size_t byteSize = 4;
};
//!
//! \brief SPLITBASEADDRESS4KBYTEALIGNED
//! \details
//! Specifies a 64-bit (48-bit canonical) 4K-byte aligned memory base
//! address. GraphicsAddress is a 64-bit value [63:0], but only a portion of
//! it is used by hardware. The upper reserved bits are ignored and MBZ.
//!
struct SPLITBASEADDRESS4KBYTEALIGNED_CMD
{
union
{
struct
{
uint64_t Reserved0 : __CODEGEN_BITFIELD( 0, 11) ; //!< Reserved
uint64_t BaseAddress : __CODEGEN_BITFIELD(12, 63) ; //!< Base Address
};
uint32_t Value[2];
} DW0_1;
//! \name Local enumerations
//! \name Initializations
//! \brief Explicit member initialization function
SPLITBASEADDRESS4KBYTEALIGNED_CMD();
static const size_t dwSize = 2;
static const size_t byteSize = 8;
};
//!
//! \brief SPLITBASEADDRESS64BYTEALIGNED
//! \details
//! Specifies a 64-bit (48-bit canonical) 64-byte aligned memory base
//! address.
//!
struct SPLITBASEADDRESS64BYTEALIGNED_CMD
{
union
{
struct
{
uint64_t Reserved0 : __CODEGEN_BITFIELD( 0, 5) ; //!< Reserved
uint64_t BaseAddress : __CODEGEN_BITFIELD( 6, 63) ; //!< Base Address
};
uint32_t Value[2];
} DW0_1;
//! \name Local enumerations
//! \name Initializations
//! \brief Explicit member initialization function
SPLITBASEADDRESS64BYTEALIGNED_CMD();
static const size_t dwSize = 2;
static const size_t byteSize = 8;
};
//!
//! \brief AVP_BSD_OBJECT
//! \details
//! The AVP Pipeline is selected with the Media Instruction Opcode "8h" for
//! all AVP Commands. Each AVP command has assigned a media instruction
//! command as defined in DWord 0, BitField 22:16.
//!
//! style="margin:0in 0in 7.5pt">The AVP_BSD_OBJECT command sends to HW a
//! tile at a time from an AV1 bitstream, starting with the first coded byte
//! of the tile, not including the prefixed tile byte size. The bit stream
//! of a tile, tile group, and of a frame may end with trailing bits and
//! extra padding zero bytes. The prefixed tile byte size includes all the
//! trailing bits and padding zero bytes at the end of a tile.
//! style="margin:0in 0in 7.5pt">Each tile's coded/compressed bitstream is
//! started and ended at a byte boundary.
//! style="margin:0in 0in 7.5pt">HW is not required to parse the trailing
//! bits and padding zero bytes. HW can stop processing right after it has
//! completed the decoding of the last block in the tile. Potentially, error
//! checkng can be implemented to detect the trailing bits and padding
//! zeros, but is not implemented in this generation of AVP Pipeline.
//! style="margin:0in 0in 7.5pt">here can be multiple tiles in an AV1 frame
//! and thus this command can be issued multiple times per frame. A coded
//! frame minumum has at least 1 tile definition, i.e a tile can cover the
//! entire frame, unless the frame size exceeds the max allowed tile size
//! limits in pixels, then the frame must contain more than 1 tile.There is
//! no compressed header in AV1, hence AVP_BSD_OBJECT command is only used
//! to process the bitstream of each individual tile of a frame.
//! style="margin:0in 0in 7.5pt; text-align:start;
//! -webkit-text-stroke-width:0px">The AVP_BSD_OBJECT command must be the
//! last command issued in the sequence of batch commands before the AVP
//! Pipeline starts decoding. Prior to issuing this command, it is assumed
//! that all configuration parameters needed by the AVP Pipeline have been
//! loaded in a specific order,including workload configuration registers
//! and configuration tables. When this command is issued, the AVP Pipeline
//! is waiting for bitstream data to be presented to its bitstream input
//! shift register.
//!
struct AVP_BSD_OBJECT_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
union
{
struct
{
uint32_t TileIndirectBsdDataLength ; //!< Tile Indirect BSD Data Length
};
uint32_t Value;
} DW1;
union
{
struct
{
uint32_t TileIndirectDataStartAddress ; //!< Tile Indirect Data Start Address
};
uint32_t Value;
} DW2;
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPBSDOBJECTSTATE = 32, //!< No additional details
};
//! \brief MEDIA_INSTRUCTION_OPCODE
//! \details
//! Codec/Engine Name = AV1 = 3h
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_BSD_OBJECT_CMD();
static const size_t dwSize = 3;
static const size_t byteSize = 12;
};
//!
//! \brief AVP_PIC_STATE
//! \details
//! All AVP_PIC_STATE should stay the same for the whole frame even if
//! AVP_PIC_STATE is re-programmed for every tiles.
//! The bitfields of AVP_PIC_STATE are defined either from
//! 1) syntax elements of the uncompressed sequence header (received from
//! sequence_header_obu) and of the uncompressed frame header (received from
//! frame_header_obu),
//! 2) or, parameters derived from 1).
//! Note : Bitstreams may contain several copies of the frame header (there
//! can only be one frame_header_obu, but multiple
//! redundant_frame_header_obu)interspersed with tile_group_obu to allow for
//! greater error resilience. However, the copies must contain identical
//! contents to the original frame_header_obu.
//! Note : there should be only one sequence_header_obu per video sequence.
//! Note : AVP pipeline is invoked to decode a frame from the bitstream,
//! only if that frame has show_existing_frame flag (syntax element in the
//! frame header) set to 0. For the case that show_existing_frame flag is set
//! to 1, application and driver process the frame instead, no block level
//! decoding is needed.
//! Note : Unlike VP9, AV1 does not have a compressed header. All the syntax
//! elements defined in the AV1 sequence and frame level headers are not
//! arithmetic coded, hence application and driver can directly read them
//! off from the bitstream. If encryption is ON, then only application can
//! parse the sequence and frame headers.
//! Note : the values of the sequence header/level syntax elements and their
//! derived parameters are to last throughout all frames in the video
//! sequence, until the next Sequence Header OBU is received that may change
//! them. But some sequence header/level syntax elements or their derived
//! parameters may further qualified by frame header/level syntax elements
//! and their derived parameters, then these type of syntax elements and
//! their derived parameters can be changed frame to frame.
//! Note : the values of the frame header/level syntax elements and their
//! derived parameters can be changed from frame to frame.
//! Note : there are some syntax elements and their derived parameters can
//! be changed only at KEY FRAME. Hence, the values of these type of syntax
//! elements and their derived parameters can last for the entire GOP, i.e.
//! until the next KEY FRAME that may change them.
//! Note : there is no separate profile for Still Picture. Still Picture is
//! coded and decoded as a KEY FRAME, with all coding tools supported
//! (tiling, all post in-loop filters, film grain injection, monochrome,
//! intraBC, palette prediction mode, etc.). There is no restriction in
//! coding Still Picture as a KEY FRAME.
//!
struct AVP_PIC_STATE_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
union
{
struct
{
uint32_t FrameWidthInPixelMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< Frame Width In Pixel Minus 1
uint32_t FrameHeightInPixelMinus1 : __CODEGEN_BITFIELD(16, 31) ; //!< Frame Height In Pixel Minus 1
};
uint32_t Value;
} DW1;
union
{
struct
{
uint32_t SequenceChromaSubsamplingFormat : __CODEGEN_BITFIELD( 0, 1) ; //!< SEQUENCE_CHROMA_SUBSAMPLING_FORMAT
uint32_t Reserved66 : __CODEGEN_BITFIELD( 2, 2) ; //!< Reserved (for expansion of Chroma SubSampling Format)
uint32_t SequencePixelBitDepthIdc : __CODEGEN_BITFIELD( 3, 4) ; //!< Sequence Pixel Bit-Depth Idc
uint32_t Reserved69 : __CODEGEN_BITFIELD( 5, 5) ; //!< Reserved (for expansion of Sequence Pixel Bit-Depth Idc)
uint32_t SequenceFullColorRangeFlag : __CODEGEN_BITFIELD( 6, 6) ; //!< Sequence Full Color Range Flag
uint32_t SequenceSuperblockSizeUsed : __CODEGEN_BITFIELD( 7, 8) ; //!< Sequence Superblock Size Used
uint32_t SequenceEnableOrderHintFlag : __CODEGEN_BITFIELD( 9, 9) ; //!< Sequence Enable Order Hint Flag
uint32_t SequenceOrderHintBitsMinus1 : __CODEGEN_BITFIELD(10, 12) ; //!< Sequence Order Hint Bits Minus1
uint32_t Reserved77 : __CODEGEN_BITFIELD(13, 15) ; //!< Reserved (for the expansion of Sequence Order Hint Bits Minus1)
uint32_t SequenceEnableFilterIntraFlag : __CODEGEN_BITFIELD(16, 16) ; //!< Sequence Enable Filter_Intra Flag
uint32_t SequenceEnableIntraEdgeFilterFlag : __CODEGEN_BITFIELD(17, 17) ; //!< Sequence Enable Intra Edge Filter Flag
uint32_t SequenceEnableDualFilterFlag : __CODEGEN_BITFIELD(18, 18) ; //!< Sequence Enable Dual_Filter Flag
uint32_t SequenceEnableInterIntraCompoundFlag : __CODEGEN_BITFIELD(19, 19) ; //!< Sequence Enable Inter-Intra Compound Flag
uint32_t SequenceEnableMaskedCompoundFlag : __CODEGEN_BITFIELD(20, 20) ; //!< Sequence Enable Masked Compound Flag
uint32_t SequenceEnableJointCompoundFlag : __CODEGEN_BITFIELD(21, 21) ; //!< Sequence Enable Joint Compound Flag
uint32_t Reserved86 : __CODEGEN_BITFIELD(22, 31) ; //!< Reserved
};
uint32_t Value;
} DW2;
union
{
struct
{
uint32_t AllowScreenContentToolsFlag : __CODEGEN_BITFIELD( 0, 0) ; //!< Allow Screen Content Tools Flag
uint32_t ForceIntegerMvFlag : __CODEGEN_BITFIELD( 1, 1) ; //!< Force Integer MV Flag
uint32_t AllowWarpedMotionFlag : __CODEGEN_BITFIELD( 2, 2) ; //!< Allow Warped Motion Flag
uint32_t Reserved99 : __CODEGEN_BITFIELD( 3, 3) ; //!< Reserved
uint32_t UseCdefFilterFlag : __CODEGEN_BITFIELD( 4, 4) ; //!< Use CDEF Filter Flag
uint32_t UseSuperResFlag : __CODEGEN_BITFIELD( 5, 5) ; //!< Use Super-Res Flag
uint32_t FrameLevelLoopRestorationFilterEnableFlag : __CODEGEN_BITFIELD( 6, 6) ; //!< Frame Level Loop Restoration Filter Enable Flag
uint32_t Reserved103 : __CODEGEN_BITFIELD( 7, 7) ; //!< Reserved
uint32_t LargeScaleTileEnableFlag : __CODEGEN_BITFIELD( 8, 8) ; //!< Large Scale Tile Enable Flag
uint32_t Reserved104 : __CODEGEN_BITFIELD( 9, 15) ; //!< Reserved
uint32_t FrameType : __CODEGEN_BITFIELD(16, 17) ; //!< Frame Type
uint32_t Reserved114 : __CODEGEN_BITFIELD(18, 18) ; //!< Reserved (for the expansion of Frame Type)
uint32_t IntraonlyFlag : __CODEGEN_BITFIELD(19, 19) ; //!< IntraOnly Flag
uint32_t ShowFrameFlag : __CODEGEN_BITFIELD(20, 20) ; //!< Show Frame Flag
uint32_t ShowableFrameFlag : __CODEGEN_BITFIELD(21, 21) ; //!< Showable Frame Flag
uint32_t ErrorResilientModeFlag : __CODEGEN_BITFIELD(22, 22) ; //!< ERROR_RESILIENT_MODE_FLAG
uint32_t AllowIntrabcFlag : __CODEGEN_BITFIELD(23, 23) ; //!< Allow IntraBC Flag
uint32_t Reserved120 : __CODEGEN_BITFIELD(24, 27) ; //!< Reserved
uint32_t PrimaryReferenceFrameIdx : __CODEGEN_BITFIELD(28, 30) ; //!< Primary Reference Frame Idx
uint32_t Reserved127 : __CODEGEN_BITFIELD(31, 31) ; //!< Reserved (for future expansion of Primary Reference Frame Idx)
};
uint32_t Value;
} DW3;
union
{
struct
{
uint32_t SegmentationEnableFlag : __CODEGEN_BITFIELD( 0, 0) ; //!< SEGMENTATION_ENABLE_FLAG
uint32_t SegmentationUpdateMapFlag : __CODEGEN_BITFIELD( 1, 1) ; //!< Segmentation Update Map Flag
uint32_t SegmentationTemporalUpdateFlag : __CODEGEN_BITFIELD( 2, 2) ; //!< SEGMENTATION_TEMPORAL_UPDATE_FLAG
uint32_t PreSkipSegmentIdFlag : __CODEGEN_BITFIELD( 3, 3) ; //!< Pre-Skip Segment ID Flag
uint32_t LastActiveSegmentId : __CODEGEN_BITFIELD( 4, 6) ; //!< Last Active Segment ID
uint32_t DeltaQPresentFlag : __CODEGEN_BITFIELD( 7, 7) ; //!< Delta Q Present Flag
uint32_t DeltaQRes : __CODEGEN_BITFIELD( 8, 9) ; //!< Delta Q RES
uint32_t FrameCodedLosslessMode : __CODEGEN_BITFIELD(10, 10) ; //!< FRAME_CODED_LOSSLESS_MODE
uint32_t SegmentMapIsZeroFlag : __CODEGEN_BITFIELD(11, 11) ; //!< Segment Map Is Zero Flag
uint32_t SegmentIdBufferStreamInEnableFlag : __CODEGEN_BITFIELD(12, 12) ; //!< Reserved
uint32_t SegmentIdBufferStreamOutEnableFlag : __CODEGEN_BITFIELD(13, 13) ; //!< Reserved
uint32_t Reserved140 : __CODEGEN_BITFIELD(14, 15) ; //!< Reserved
uint32_t BaseQindex : __CODEGEN_BITFIELD(16, 23) ; //!< Base Qindex
uint32_t YDcDeltaQ : __CODEGEN_BITFIELD(24, 30) ; //!< Y_dc_delta_q
uint32_t Reserved159 : __CODEGEN_BITFIELD(31, 31) ; //!< Reserved
};
uint32_t Value;
} DW4;
union
{
struct
{
uint32_t UDcDeltaQ : __CODEGEN_BITFIELD( 0, 6) ; //!< U_dc_delta_q
uint32_t Reserved167 : __CODEGEN_BITFIELD( 7, 7) ; //!< Reserved
uint32_t UAcDeltaQ : __CODEGEN_BITFIELD( 8, 14) ; //!< U_ac_delta_q
uint32_t Reserved175 : __CODEGEN_BITFIELD(15, 15) ; //!< Reserved
uint32_t VDcDeltaQ : __CODEGEN_BITFIELD(16, 22) ; //!< V_dc_delta_q
uint32_t Reserved183 : __CODEGEN_BITFIELD(23, 23) ; //!< Reserved
uint32_t VAcDeltaQ : __CODEGEN_BITFIELD(24, 30) ; //!< V_ac_delta_q
uint32_t Reserved191 : __CODEGEN_BITFIELD(31, 31) ; //!< Reserved
};
uint32_t Value;
} DW5;
union
{
struct
{
uint32_t AllowHighPrecisionMv : __CODEGEN_BITFIELD( 0, 0) ; //!< Allow High Precision MV
uint32_t FrameLevelReferenceModeSelect : __CODEGEN_BITFIELD( 1, 1) ; //!< Frame Level Reference Mode Select
uint32_t McompFilterType : __CODEGEN_BITFIELD( 2, 4) ; //!< MCOMP_FILTER_TYPE
uint32_t Reserved197 : __CODEGEN_BITFIELD( 5, 5) ; //!< Reserved (for future expansion of Mcomp Filter Type)
uint32_t MotionModeSwitchableFlag : __CODEGEN_BITFIELD( 6, 6) ; //!< Motion Mode Switchable Flag
uint32_t UseReferenceFrameMvSetFlag : __CODEGEN_BITFIELD( 7, 7) ; //!< Use Reference Frame MV Set Flag
uint32_t ReferenceFrameSignBiasI0To7 : __CODEGEN_BITFIELD( 8, 15) ; //!< Reference Frame Sign Bias [i=0 to 7]
uint32_t CurrentFrameOrderHint : __CODEGEN_BITFIELD(16, 23) ; //!< Current Frame Order Hint
uint32_t Reserved216 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved (for future expansion of Frame Order Hint)
};
uint32_t Value;
} DW6;
union
{
struct
{
uint32_t ReducedTxSetUsed : __CODEGEN_BITFIELD( 0, 0) ; //!< Reduced Tx Set Used
uint32_t FrameTransformMode : __CODEGEN_BITFIELD( 1, 2) ; //!< Frame Transform Mode
uint32_t Reserved227 : __CODEGEN_BITFIELD( 3, 3) ; //!< Reserved
uint32_t SkipModePresentFlag : __CODEGEN_BITFIELD( 4, 4) ; //!< Skip Mode Present Flag
uint32_t SkipModeFrame0 : __CODEGEN_BITFIELD( 5, 7) ; //!< Skip Mode Frame [0]
uint32_t Reserved232 : __CODEGEN_BITFIELD( 8, 8) ; //!< Reserved (for future expansion of Skip Mode Frame[0])
uint32_t SkipModeFrame1 : __CODEGEN_BITFIELD( 9, 11) ; //!< Skip Mode Frame [1]
uint32_t Reserved236 : __CODEGEN_BITFIELD(12, 23) ; //!< Reserved (for future expansion of Skip Mode Frame[1])
uint32_t RefFrameSide : __CODEGEN_BITFIELD(24, 31) ; //!< ref_frame_side for the 8 reference frames INTRA...ALTREF
};
uint32_t Value;
} DW7;
union
{
struct
{
uint32_t Reserved256 : __CODEGEN_BITFIELD( 0, 2) ; //!< Reserved (for future expansion of Global Motion Type[0])
uint32_t GlobalMotionType1 : __CODEGEN_BITFIELD( 3, 4) ; //!< Global Motion Type[1]
uint32_t Reserved261 : __CODEGEN_BITFIELD( 5, 5) ; //!< Reserved (for future expansion of Global Motion Type[1]
uint32_t GlobalMotionType2 : __CODEGEN_BITFIELD( 6, 7) ; //!< Global Motion Type[2]
uint32_t Reserved264 : __CODEGEN_BITFIELD( 8, 8) ; //!< Reserved (for future expansion of Global Motion Type[2]
uint32_t GlobalMotionType3 : __CODEGEN_BITFIELD( 9, 10) ; //!< Global Motion Type[3]
uint32_t Reserved267 : __CODEGEN_BITFIELD(11, 11) ; //!< Reserved (for future expansion of Global Motion Type[3]
uint32_t GlobalMotionType4 : __CODEGEN_BITFIELD(12, 13) ; //!< Global Motion Type[4]
uint32_t Reserved270 : __CODEGEN_BITFIELD(14, 14) ; //!< Reserved (for future expansion of Global Motion Type[4]
uint32_t GlobalMotionType5 : __CODEGEN_BITFIELD(15, 16) ; //!< Global Motion Type[5]
uint32_t Reserved273 : __CODEGEN_BITFIELD(17, 17) ; //!< Reserved (for future expansion of Global Motion Type[5]
uint32_t GlobalMotionType6 : __CODEGEN_BITFIELD(18, 19) ; //!< Global Motion Type[6]
uint32_t Reserved276 : __CODEGEN_BITFIELD(20, 20) ; //!< Reserved (for future expansion of Global Motion Type[6]
uint32_t GlobalMotionType7 : __CODEGEN_BITFIELD(21, 22) ; //!< Global Motion Type[7]
uint32_t Reserved279 : __CODEGEN_BITFIELD(23, 23) ; //!< Reserved (for future expansion of Global Motion Type[7]
uint32_t FrameLevelGlobalMotionInvalidFlags : __CODEGEN_BITFIELD(24, 31) ; //!< Frame Level Global Motion Invalid Flags
};
uint32_t Value;
} DW8;
uint32_t WarpParametersArrayReference1To7Projectioncoeff0To5[21]; //!< Warp Parameters Array [Reference=1 to 7][ProjectionCoeff=0 to 5]
union
{
struct
{
uint32_t ReferenceFrameIdx0 : __CODEGEN_BITFIELD( 0, 2) ; //!< Reference Frame Idx[0]
uint32_t Reserved963 : __CODEGEN_BITFIELD( 3, 3) ; //!< Reserved (for future expansion of reference frame idx0)
uint32_t ReferenceFrameIdx1 : __CODEGEN_BITFIELD( 4, 6) ; //!< Reference Frame Idx[1]
uint32_t Reserved967 : __CODEGEN_BITFIELD( 7, 7) ; //!< Reserved (for future expansion of reference frame idx1)
uint32_t ReferenceFrameIdx2 : __CODEGEN_BITFIELD( 8, 10) ; //!< Reference Frame Idx[2]
uint32_t Reserved971 : __CODEGEN_BITFIELD(11, 11) ; //!< Reserved (for future expansion of reference frame idx2)
uint32_t ReferenceFrameIdx3 : __CODEGEN_BITFIELD(12, 14) ; //!< Reference Frame Idx[3]
uint32_t Reserved975 : __CODEGEN_BITFIELD(15, 15) ; //!< Reserved (for future expansion of reference frame idx3)
uint32_t ReferenceFrameIdx4 : __CODEGEN_BITFIELD(16, 18) ; //!< Reference Frame Idx[4]
uint32_t Reserved979 : __CODEGEN_BITFIELD(19, 19) ; //!< Reserved (for future expansion of reference frame idx4)
uint32_t ReferenceFrameIdx5 : __CODEGEN_BITFIELD(20, 22) ; //!< Reference Frame Idx[5]
uint32_t Reserved983 : __CODEGEN_BITFIELD(23, 23) ; //!< Reserved (for future expansion of reference frame idx5)
uint32_t ReferenceFrameIdx6 : __CODEGEN_BITFIELD(24, 26) ; //!< Reference Frame Idx[6]
uint32_t Reserved987 : __CODEGEN_BITFIELD(27, 27) ; //!< Reserved (for future expansion of reference frame idx6)
uint32_t ReferenceFrameIdx7 : __CODEGEN_BITFIELD(28, 30) ; //!< Reference Frame Idx[7]
uint32_t Reserved991 : __CODEGEN_BITFIELD(31, 31) ; //!< Reserved (for future expansion of reference frame idx7)
};
uint32_t Value;
} DW30;
union
{
struct
{
uint32_t IntraFrameWidthInPixelMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< Intra Frame Width In Pixel Minus 1
uint32_t IntraFrameHeightInPixelMinus1 : __CODEGEN_BITFIELD(16, 31) ; //!< Intra Frame Height In Pixel Minus 1
};
uint32_t Value;
} DW31;
union
{
struct
{
uint32_t LastFrameWidthInPixelMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< Last Frame Width In Pixel Minus 1
uint32_t LastFrameHeightInPixelMinus1 : __CODEGEN_BITFIELD(16, 31) ; //!< Last Frame Height In Pixel Minus 1
};
uint32_t Value;
} DW32;
union
{
struct
{
uint32_t Last2FrameWidthInPixelMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< Last2 Frame Width In Pixel Minus 1
uint32_t Last2FrameHeightInPixelMinus1 : __CODEGEN_BITFIELD(16, 31) ; //!< Last2 Frame Height In Pixel Minus 1
};
uint32_t Value;
} DW33;
union
{
struct
{
uint32_t Last3FrameWidthInPixelMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< Last3 Frame Width In Pixel Minus 1
uint32_t Last3FrameHeightInPixelMinus1 : __CODEGEN_BITFIELD(16, 31) ; //!< Last3 Frame Height In Pixel Minus 1
};
uint32_t Value;
} DW34;
union
{
struct
{
uint32_t GoldenFrameWidthInPixelMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< Golden Frame Width In Pixel Minus 1
uint32_t GoldenFrameHeightInPixelMinus1 : __CODEGEN_BITFIELD(16, 31) ; //!< Golden Frame Height In Pixel Minus 1
};
uint32_t Value;
} DW35;
union
{
struct
{
uint32_t BwdrefFrameWidthInPixelMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< BWDREF Frame Width In Pixel Minus 1
uint32_t BwdrefFrameHeightInPixelMinus1 : __CODEGEN_BITFIELD(16, 31) ; //!< BWDREF Frame Height In Pixel Minus 1
};
uint32_t Value;
} DW36;
union
{
struct
{
uint32_t Altref2FrameWidthInPixelMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< ALTREF2 Frame Width In Pixel Minus 1
uint32_t Altref2FrameHeightInPixelMinus1 : __CODEGEN_BITFIELD(16, 31) ; //!< ALTREF2 Frame Height In Pixel Minus 1
};
uint32_t Value;
} DW37;
union
{
struct
{
uint32_t AltrefFrameWidthInPixelMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< ALTREF Frame Width In Pixel Minus 1
uint32_t AltrefFrameHeightInPixelMinus1 : __CODEGEN_BITFIELD(16, 31) ; //!< ALTREF Frame Height In Pixel Minus 1
};
uint32_t Value;
} DW38;
union
{
struct
{
uint32_t VerticalScaleFactorForIntra : __CODEGEN_BITFIELD( 0, 15) ; //!< Vertical Scale Factor for INTRA
uint32_t HorizontalScaleFactorForIntra : __CODEGEN_BITFIELD(16, 31) ; //!< Horizontal Scale Factor for INTRA
};
uint32_t Value;
} DW39;
union
{
struct
{
uint32_t VerticalScaleFactorForLast : __CODEGEN_BITFIELD( 0, 15) ; //!< Vertical Scale Factor for LAST
uint32_t HorizontalScaleFactorForLast : __CODEGEN_BITFIELD(16, 31) ; //!< Horizontal Scale Factor for LAST
};
uint32_t Value;
} DW40;
union
{
struct
{
uint32_t VerticalScaleFactorForLast2 : __CODEGEN_BITFIELD( 0, 15) ; //!< Vertical Scale Factor for LAST2
uint32_t HorizontalScaleFactorForLast2 : __CODEGEN_BITFIELD(16, 31) ; //!< Horizontal Scale Factor for LAST2
};
uint32_t Value;
} DW41;
union
{
struct
{
uint32_t VerticalScaleFactorForLast3 : __CODEGEN_BITFIELD( 0, 15) ; //!< Vertical Scale Factor for LAST3
uint32_t HorizontalScaleFactorForLast3 : __CODEGEN_BITFIELD(16, 31) ; //!< Horizontal Scale Factor for LAST3
};
uint32_t Value;
} DW42;
union
{
struct
{
uint32_t VerticalScaleFactorForGolden : __CODEGEN_BITFIELD( 0, 15) ; //!< Vertical Scale Factor for GOLDEN
uint32_t HorizontalScaleFactorForGolden : __CODEGEN_BITFIELD(16, 31) ; //!< Horizontal Scale Factor for GOLDEN
};
uint32_t Value;
} DW43;
union
{
struct
{
uint32_t VerticalScaleFactorForBwdrefFrame : __CODEGEN_BITFIELD( 0, 15) ; //!< Vertical Scale Factor for BWDREF_FRAME
uint32_t HorizontalScaleFactorForBwdrefFrame : __CODEGEN_BITFIELD(16, 31) ; //!< Horizontal Scale Factor for BWDREF_FRAME
};
uint32_t Value;
} DW44;
union
{
struct
{
uint32_t VerticalScaleFactorForAltref2 : __CODEGEN_BITFIELD( 0, 15) ; //!< Vertical Scale Factor for ALTREF2
uint32_t HorizontalScaleFactorForAltref2 : __CODEGEN_BITFIELD(16, 31) ; //!< Horizontal Scale Factor for ALTREF2
};
uint32_t Value;
} DW45;
union
{
struct
{
uint32_t VerticalScaleFactorForAltref : __CODEGEN_BITFIELD( 0, 15) ; //!< Vertical Scale Factor for ALTREF
uint32_t HorizontalScaleFactorForAltref : __CODEGEN_BITFIELD(16, 31) ; //!< Horizontal Scale Factor for ALTREF
};
uint32_t Value;
} DW46;
union
{
struct
{
uint32_t ReferenceFrameOrderHint0ForIntraFrame : __CODEGEN_BITFIELD( 0, 7) ; //!< Reference Frame Order Hint [0] for Intra Frame
uint32_t ReferenceFrameOrderHint1ForLastFrame : __CODEGEN_BITFIELD( 8, 15) ; //!< Reference Frame Order Hint [1] for Last Frame
uint32_t ReferenceFrameOrderHint2ForLast2Frame : __CODEGEN_BITFIELD(16, 23) ; //!< Reference Frame Order Hint [2] for Last2 Frame
uint32_t ReferenceFrameOrderHint3ForLast3Frame : __CODEGEN_BITFIELD(24, 31) ; //!< Reference Frame Order Hint [3] for Last3 Frame
};
uint32_t Value;
} DW47;
union
{
struct
{
uint32_t ReferenceFrameOrderHint4ForGoldenFrame : __CODEGEN_BITFIELD( 0, 7) ; //!< Reference Frame Order Hint [4] for Golden Frame
uint32_t ReferenceFrameOrderHint5ForBwdrefFrame : __CODEGEN_BITFIELD( 8, 15) ; //!< Reference Frame Order Hint [5] for BWDREF Frame
uint32_t ReferenceFrameOrderHint6ForAltref2Frame : __CODEGEN_BITFIELD(16, 23) ; //!< Reference Frame Order Hint [6] for ALTREF2 Frame
uint32_t ReferenceFrameOrderHint7ForAltrefFrame : __CODEGEN_BITFIELD(24, 31) ; //!< Reference Frame Order Hint [7] for ALTREF Frame
};
uint32_t Value;
} DW48;
union
{
struct
{
uint32_t Reserved1568 ; //!< Reserved
};
uint32_t Value;
} DW49;
union
{
struct
{
uint32_t Reserved1600 ; //!< Reserved
};
uint32_t Value;
} DW50;
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPPICSTATE = 48, //!< No additional details
};
//! \brief MEDIA_INSTRUCTION_OPCODE
//! \details
//! Codec/Engine Name = AVP = 3h
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
//! \brief SEQUENCE_CHROMA_SUBSAMPLING_FORMAT
//! \details
//! It specifies the chroma subsampling format for all frames in the
//! video sequencebeing decoded.
//! [1:0] = 00 ; stands for Monochrome 4:0:0, no Chroma planes at all,
//! but [subsampling_x and subsampling_y] is defaulted to [1, 1], as only
//! Profile 0 can support monochrome video coding.
//! [1:0] = 01 ; stands for 4:2:0, with[subsampling_x and subsampling_y]
//! defining as[1, 1]. It is supported in all profiles (seq_profile=0, 1, 2
//! - syntax element in the sequence header)
//! [1:0] = 10 ; stands for 4:2:2, with[subsampling_x and subsampling_y]
//! defining as[1, 0]. It is supported only in seq_profile=2.
//! [1:0] = 11 ; stands for 4:4:4 with[subsampling_x and subsampling_y]
//! defining as[0, 0]. It is supported in both seq_profile=1 and 2.
//! It is a sequence-level parameter derived from the sequence header
//! syntax elements: seq_profile, subsampling_x, subsampling_y, monochome,
//! high_bitdepth and twelve_bit. Default is 1, i.e. 4:2:0..
//! Note : AV1 supports 3 profiles:
//! seq_profile Bit_depth Chroma Subsampling
//! 0 (Main Profile) 8 / 10 YUV 4:2:0 and 4:0:0
//! 1 (High Profile) 8 / 10 YUV 4:4:4 (4:0:0 is not allowed)
//! 2 (Pro Profile) 8 / 10 /12 YUV 4:2:2 AND
//! 12 YUV 4:2:0/4:4:4/4:0:0
//! Note : for AV1 decoder:
//! type="disc" style="margin-top:0in; margin-bottom:0in">
//! style="margin:0in 0in 0.0001pt; font-size:11pt;
//! font-family:Calibri, sans-serif">A profile 0 compliant decoder must be
//! able to decode all bitstreams labeled profile 0
//! style="margin:0in 0in 0.0001pt; font-size:11pt;
//! font-family:Calibri, sans-serif">A profile 1 compliant decoder must be
//! able to decode all bitstreams labeled profile 0 or 1
//! style="margin:0in 0in 0.0001pt; font-size:11pt;
//! font-family:Calibri, sans-serif">A profile 2 compliant decoder must be
//! able to decode all bitstreams labeled profile 0, 1, or 2
//!
enum SEQUENCE_CHROMA_SUBSAMPLING_FORMAT
{
SEQUENCE_CHROMA_SUBSAMPLING_FORMAT_420 = 1, //!< Chroma Sampling 4:2:0
};
//! \brief ERROR_RESILIENT_MODE_FLAG
//! \details
//! It specifies whether all syntax decoding of the current frame is
//! independent of the previous frames, or not.
//! Set to 0 to disable error resilient mode
//! Set to 1 to enable error resilient mode (for independent syntax
//! decoding)
//! It is the frame-level syntax element, error_resilient_mode. Default
//! is 0.
//! It is read from the bitstream for all frame types (KEY Frame,
//! INTRA-ONLY Frame and INTER Frame), except when frame_type is set to
//! SWITCH_FRAME, in which it is forced to 1 instead of reading from the
//! bitstream.
//! When error resilient mode is set to 1 (active), Refresh Frame Context
//! is set to0. When error resilient is set to 0,Refresh Frame Context is
//! read from the bit stream.
//!
//! Valid only in Decoder Mode
//!
//!
enum ERROR_RESILIENT_MODE_FLAG
{
ERROR_RESILIENT_MODE_FLAG_DISABLE = 0, //!< No additional details
ERROR_RESILIENT_MODE_FLAG_ENABLE = 1, //!< No additional details
};
//! \brief SEGMENTATION_ENABLE_FLAG
//! \details
//! Indicate if segementation is enabled or not
enum SEGMENTATION_ENABLE_FLAG
{
SEGMENTATION_ENABLE_FLAG_ALLBLOCKSAREIMPLIEDTOBELONGTOSEGMENT0 = 0, //!< No additional details
SEGMENTATION_ENABLE_FLAG_SEGIDDETERMINATIONDEPENDSONSEGMENTATIONUPDATEMAPSETTING = 1, //!< No additional details
};
//! \brief SEGMENTATION_TEMPORAL_UPDATE_FLAG
//! \details
//! Indicates whether segID is decoding from bitstream or predicted from
//! previous frame.
enum SEGMENTATION_TEMPORAL_UPDATE_FLAG
{
SEGMENTATION_TEMPORAL_UPDATE_FLAG_DECODESEGIDFROMBITSTREAM = 0, //!< No additional details
SEGMENTATION_TEMPORAL_UPDATE_FLAG_GETSEGIDEITHERFROMBITSTREAMORFROMPREVIOUSFRAME = 1, //!< No additional details
};
//! \brief FRAME_CODED_LOSSLESS_MODE
//! \details
//! This bitSet to indicate lossless coding mode at frame level.
//! Frame Coded Lossless Mode is set to 1, if all active segment's
//! segment lossless flag are set to 1.
//! The equation for deriving coded lossless mode is presented in the
//! AVP_SEGMENT_STATE Command.
//! AllLossless = CodedLossless &amp;&amp; ( FrameWidth == UpscaledWidth
//! ). The second condition in this equation is equivalent tohaving
//! Super-res NOT enabled.
//! Only CodedLossless flag is sent to HW. AllLossless flag is not.
//! CodedLossless directly control the enabling/disabling of deblocker,
//! CDEF in-loop filters.
//! But AllLossless is used to control the enabling/disabling of Loop
//! Restoration filter. Hence, when super-res is ON, Loop Restoration filter
//! can still be ON/OFF, regardless of CodedLossless.
enum FRAME_CODED_LOSSLESS_MODE
{
FRAME_CODED_LOSSLESS_MODE_NORMALMODE = 0, //!< No additional details
FRAME_CODED_LOSSLESS_MODE_CODEDLOSSLESSMODE = 1, //!< No additional details
};
//! \brief MCOMP_FILTER_TYPE
//! \details
//! It specifies which Motion Compensation Filter type is to be used for
//! the current frame.
//! It is a frame-level derived parameters. It is derived from the frame
//! level syntax elements (is_filter_switchable flag and the 2-bits
//! interpolation_filter).
//! Default is 0 (i.e. use the eight-tap basic filter).
enum MCOMP_FILTER_TYPE
{
MCOMP_FILTER_TYPE_EIGHT_TAP = 0, //!< No additional details
MCOMP_FILTER_TYPE_EIGHT_TAP_SMOOTH = 1, //!< No additional details
MCOMP_FILTER_TYPE_EIGHT_TAP_SHARP = 2, //!< No additional details
MCOMP_FILTER_TYPE_BILINEAR = 3, //!< No additional details
MCOMP_FILTER_TYPE_SWITCHABLE = 4, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_PIC_STATE_CMD();
static const size_t dwSize = 51;
static const size_t byteSize = 204;
};
//!
//! \brief AVP_PIPE_MODE_SELECT
//! \details
//! The AVP Pipeline is selected with the Media Instruction Opcode "8h" for
//! all AVP Commands. Each AVP command has assigned a media instruction
//! command as defined in DWord 0, BitField 22:16.
//!
//! The workload for the AVP pipeline is tile based. Once the bit stream DMA
//! is configured with the AVP_BSD_OBJECT command for a tile in a frame, and
//! the tile's bitstream is presented to the AVP, the tile decoding will
//! begin.
//! AVP pipeline is stateless, i.e. there is no states saved between the
//! decoding of each tile. Hence all sequence, frame and segment state
//! commands have to be resent before the tile coding command and the BSD
//! object command.
//! The AVP_PIPE_MODE_SELECT command is responsible for general pipeline
//! level configuration that would normally be set once for a single stream
//! encode or decode and would not be modified on a frame workload basis.
//! This is a frame level state command and is shared by both encoding and
//! decoding processes.
//!
struct AVP_PIPE_MODE_SELECT_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
union
{
struct
{
uint32_t CodecSelect : __CODEGEN_BITFIELD( 0, 0) ; //!< CODEC_SELECT
uint32_t CdefOutputStreamoutEnableFlag : __CODEGEN_BITFIELD( 1, 1) ; //!< CDEF_OUTPUT_STREAMOUT_ENABLE_FLAG
uint32_t LoopRestorationOutputStreamoutEnableFlag : __CODEGEN_BITFIELD( 2, 2) ; //!< LOOP_RESTORATION_OUTPUT_STREAMOUT_ENABLE_FLAG
uint32_t PicStatusErrorReportEnable : __CODEGEN_BITFIELD( 3, 3) ; //!< PIC_STATUSERROR_REPORT_ENABLE
uint32_t Reserved36 : __CODEGEN_BITFIELD( 4, 4) ; //!< Reserved
uint32_t CodecStandardSelect : __CODEGEN_BITFIELD( 5, 7) ; //!< CODEC_STANDARD_SELECT
uint32_t Reserved40 : __CODEGEN_BITFIELD( 8, 12) ; //!< Reserved
uint32_t MultiEngineMode : __CODEGEN_BITFIELD(13, 14) ; //!< MULTI_ENGINE_MODE
uint32_t PipeWorkingMode : __CODEGEN_BITFIELD(15, 16) ; //!< PIPE_WORKING_MODE
uint32_t TileBasedEngine : __CODEGEN_BITFIELD(17, 17) ; //!< Tile Based Engine
uint32_t Reserved50 : __CODEGEN_BITFIELD(18, 31) ; //!< Reserved
};
uint32_t Value;
} DW1;
union
{
struct
{
uint32_t MediaSoftResetCounterPer1000Clocks ; //!< MEDIA_SOFT_RESET_COUNTER_PER_1000_CLOCKS
};
uint32_t Value;
} DW2;
union
{
struct
{
uint32_t PicStatusErrorReportId ; //!< PIC_STATUSERROR_REPORT_ID
};
uint32_t Value;
} DW3;
union
{
struct
{
uint32_t Reserved128 ; //!< Reserved
};
uint32_t Value;
} DW4;
union
{
struct
{
uint32_t PhaseIndicator : __CODEGEN_BITFIELD( 0, 1) ; //!< PHASE_INDICATOR
uint32_t Reserved162 : __CODEGEN_BITFIELD( 2, 31) ; //!< Reserved
};
uint32_t Value;
} DW5;
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPPIPEMODESELECT = 0, //!< No additional details
};
//! \brief MEDIA_INSTRUCTION_OPCODE
//! \details
//! Codec/Engine Name = AVP = 3h
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
enum CODEC_SELECT
{
CODEC_SELECT_DECODE = 0, //!< No additional details
CODEC_SELECT_ENCODE = 1, //!< No additional details
};
//! \brief CDEF_OUTPUT_STREAMOUT_ENABLE_FLAG
//! \details
//! It allows the Super-Resolution, Loop Restoration Filtering, and Out
//! of Loop Film Graim Synthesisto be done in a separate pass with SW
//! instead.
//! Since these are in-loop filtering, the results are provided back to
//! the HW AV1 pipeline.
//! This feature is currently not being implemented in HW.
enum CDEF_OUTPUT_STREAMOUT_ENABLE_FLAG
{
CDEF_OUTPUT_STREAMOUT_ENABLE_FLAG_DISABLE = 0, //!< Super-Resolution, Loop Restoration Filtering, and Out of Loop Film Graim Synthesis, if enabled, are performed in HW AVP pipeline.
CDEF_OUTPUT_STREAMOUT_ENABLE_FLAG_ENABLE = 1, //!< Super-Resolution, Loop Restoration Filtering, and Out of Loop Film Graim Synthesis, if enabled, are NOT performed in HW AVP pipeline.
};
//! \brief LOOP_RESTORATION_OUTPUT_STREAMOUT_ENABLE_FLAG
//! \details
//! It allows the Film Grain Synthesisto be done in a separate pass with
//! SW instead.
//! All the Post In-Loop Filters, if any enabled, (Deblocker, CDEF,
//! Super-Resolution and Loop Restoration) are still be done in AV1 HW
//! pipeline.
//! This feature is currently not being implemented in HW.
enum LOOP_RESTORATION_OUTPUT_STREAMOUT_ENABLE_FLAG
{
LOOP_RESTORATION_OUTPUT_STREAMOUT_ENABLE_FLAG_DISABLE = 0, //!< Film Grain Synthesis, if enabled, is performed in HW AVP Pipeline.
LOOP_RESTORATION_OUTPUT_STREAMOUT_ENABLE_FLAG_ENABLE = 1, //!< Film Grain Synthesis, if enabled, is NOT performed in HW AVP Pipeline.
};
enum PIC_STATUSERROR_REPORT_ENABLE
{
PIC_STATUSERROR_REPORT_ENABLE_DISABLE = 0, //!< Disable status/error reporting
PIC_STATUSERROR_REPORT_ENABLE_ENABLE = 1, //!< Status/Error reporting is written out once per picture. The Pic Status/Error Report ID in DWord3 along with the status/error status bits are packed into one cache line and written to the Status/Error Buffer address in the AVP_PIPE_BUF_ADDR_STATE command. Must be zero for encoder mode.
};
enum CODEC_STANDARD_SELECT
{
CODEC_STANDARD_SELECT_HEVC = 0, //!< No additional details
CODEC_STANDARD_SELECT_VP9 = 1, //!< No additional details
CODEC_STANDARD_SELECT_AV1 = 2, //!< No additional details
};
//! \brief MULTI_ENGINE_MODE
//! \details
//! This indicates the current pipe is in single pipe mode or if in
//! scalable mode is in left/right/middle pipe in multi-engine mode.
enum MULTI_ENGINE_MODE
{
MULTI_ENGINE_MODE_SINGLEENGINEMODEORMSACFEONLYDECODEMODE = 0, //!< This is for single engine mode (legacy) OR MSAC FE only decode mode During AV1Decoder Scalability Real Tile Mode, for the last phase, it is possible to have single tile column left. In this case, it should be programmed with pipe as a single engine mode (using this value).For example, for 9 tile column running on 4 pipes. The first two phases will use all 4 pipes and finish 8 tile column. The remaining one column will be processed as last third phase as single tile column.
MULTI_ENGINE_MODE_PIPEISTHELEFTENGINEINAMULTI_ENGINEMODE = 1, //!< Current pipe is the most left engine while running in scalable multi-engine mode
MULTI_ENGINE_MODE_PIPEISTHERIGHTENGINEINAMULTI_ENGINEMODE = 2, //!< Current pipe is the most right engine while running in scalable multi-engine mode
MULTI_ENGINE_MODE_PIPEISONEOFTHEMIDDLEENGINEINAMULTI_ENGINEMODE = 3, //!< Current pipe is in one of the middle engine while running in scalable multi-engine mode
};
//! \brief PIPE_WORKING_MODE
//! \details
//! This programs the working mode for AVP pipe.
enum PIPE_WORKING_MODE
{
PIPE_WORKING_MODE_LEGACYDECODERENCODERMODE_SINGLEPIPE = 0, //!< This is for single pipe mode non-scalable mode. It is used by both decoder and encoder.
PIPE_WORKING_MODE_MSACFEONLYDECODEMODE_SINGLEMSACPIPE = 1, //!< This is for the single MSAC FE only in decoder mode. This will be only run MSAC and streamout syntax element.
PIPE_WORKING_MODE_DECODERBEONLYORENCODERMODE_SCALABLEMULTI_PIPE = 2, //!< This is for multiple-pipe scalable mode. In decoder, it is only on BE reconstruction. In encoder, it is for PAK.
PIPE_WORKING_MODE_DECODERSCALABLEMODEWITHMSACINREALTILES_SCALABLEMULTI_PIPE = 3, //!< This is for multiple-pipe scalable mode decoder mode in real tiles. MSAC and reconstruction will run together. Each pipes will run in real tiles vertically.
};
//! \brief MEDIA_SOFT_RESET_COUNTER_PER_1000_CLOCKS
//! \details
//! In decoder modes, this counter value specifies the number of clocks (per
//! 1000) of GAC inactivity before a media soft-reset is applied to the AVP
//! and HuC. If counter value is set to 0, the media soft-reset feature is
//! disabled and no reset will occur.
//! In encoder modes, this counter must be set to 0 to disable media soft
//! reset. This feature is not supported for the encoder.
enum MEDIA_SOFT_RESET_COUNTER_PER_1000_CLOCKS
{
MEDIA_SOFT_RESET_COUNTER_PER_1000_CLOCKS_DISABLE = 0, //!< No additional details
};
//! \brief PIC_STATUSERROR_REPORT_ID
//! \details
//! The Pic Status/Error Report ID is a unique 32-bit unsigned integer
//! assigned to each picture
//! status/error output. Must be zero for encoder mode.
enum PIC_STATUSERROR_REPORT_ID
{
PIC_STATUSERROR_REPORT_ID_32_BITUNSIGNED = 0, //!< Unique ID Number
};
//! \brief PHASE_INDICATOR
//! \details
//! This is used to indicate whether this is first, middle or last phase
//! of programming during Real-Tile Decoder Mode. This is used by hardware
//! to know if the current programming is first or last phases.
//! This field is ignored (programmed to 0) for other modes other than
//! AV1 Real-Tile Decoder Mode.
enum PHASE_INDICATOR
{
PHASE_INDICATOR_FIRSTPHASE = 0, //!< No additional details
PHASE_INDICATOR_MIDDLEPHASE = 1, //!< No additional details
PHASE_INDICATOR_LASTPHASE = 2, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_PIPE_MODE_SELECT_CMD();
static const size_t dwSize = 6;
static const size_t byteSize = 24;
};
//!
//! \brief AVP_IND_OBJ_BASE_ADDR_STATE
//! \details
//! The AVP Pipeline is selected with the Media Instruction Opcode "8h" for
//! all AVP Commands. Each AVP command has assigned a media instruction
//! command as defined in DWord 0, BitField 22:16.
//!
//! The AVP_IND_OBJ_BASE_ADDR_STATE command is used to define the indirect
//! object base address of the AV1 compressed bitstream in graphics memory.
//! This is a frame level command issued in both encoding and decoding
//! processes.
//! Although a frame is coded as separate tiles, all tiles' compressed
//! bitstream are still required to line up sequentially as one AV1
//! bitstream. Hence, there is only one Indirect Object Base Address for the
//! entire AV1 codedframe. If the frame contains more than 1 tiles, the BSD
//! Object Command will be issued multiple times, once for each tile and
//! with its own tile bitstream starting memory address.
//!
struct AVP_IND_OBJ_BASE_ADDR_STATE_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
SPLITBASEADDRESS4KBYTEALIGNED_CMD AvpIndirectBitstreamObjectBaseAddress; //!< DW1..2, AVP Indirect Bitstream Object Base Address
MEMORYADDRESSATTRIBUTES_CMD AvpIndirectBitstreamObjectMemoryAddressAttributes; //!< DW3, AVP Indirect Bitstream Object Memory Address Attributes
SPLITBASEADDRESS4KBYTEALIGNED_CMD AvpIndirectBitstreamObjectAccessUpperBound; //!< DW4..5, AVP Indirect Bitstream Object Access Upper Bound
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPINDOBJBASEADDRSTATE = 3, //!< No additional details
};
//! \brief MEDIA_INSTRUCTION_OPCODE
//! \details
//! Codec/Engine Name = AVP = 3h
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_IND_OBJ_BASE_ADDR_STATE_CMD();
static const size_t dwSize = 6;
static const size_t byteSize = 24;
};
//!
//! \brief AVP_TILE_CODING
//! \details
//! This command is used only for AV1codec. It is issued for every tile of a
//! frame. If a frame is composed of only 1 tile, it is still being issued.
//! Tiling and Tile Group organization in AV1 cannot be disabled, a frame
//! minimum must have 1 tile. Currently, each batch buffer can contain only
//! 1 tile to be processed, it cannot contain more than 1 tile or the entire
//! tile group of tiles.
//! When the tile width exceeds 4096 pixels or the tile area exceeds
//! 4096x2304 pixels, tiling must be performed and number of tiles in such
//! frame must be >1. There is no mandatory tiling driven by tile height.
//! The frame height in pixels will limit the allowed tile height in extreme
//! situation. Hence, the AVP_TILE_CODING can be issued multiple times for
//! decoding a frame.
//! Since AVP HW pipeline is stateless, all sequence, frame and segment
//! level states (coding parameters in all Frame Level State Commands) must
//! be resent before sending each TILE_CODING_STATE command.
//! Although tile size is specified in SuperBlock unit, the minimum tile
//! size is actually set to be 8x8 pixels (which is the same as the minimum
//! frame size in pixels). It can also happen to the rightmost tile column
//! and bottommost tile row of a frame which is not divisible by the
//! SuperBlock size - this leads to the presence of partial tile and partial
//! SuperBlock handling.
//! AV1 supports both
//! 1) a uniform-spacing tiling scheme (as in VP9, which is always in the
//! form of 2^N x 2^M number of tiles, for the entire frame), and
//! 2) a non-uniform-spacing tiling scheme. Bitstream syntax will specify
//! the width and height of each tile size in the frame.
//! AVP HW pipeline is a tile-based codec engine, it does not need to
//! distinguish between these two tiling schemes. Driver will take care of
//! the difference and details of these tiling schemes. At the end, Driver
//! will send out one tile at a time with all the related tile information
//! to the HW through this TILE_CODING State Command.
//! In AV1, a frame is partitioned by tile row and tile column. That is, a
//! tile boundary must go across the full frame width or the full frame
//! height only. There is no tiling within a tile.
//! For AV1, the max number of tiles per frame is set to 256 in the LEVEL
//! definition for regular video decoding. The ext-tile (Virtual Reality
//! mode, currently not supported) has a different tiling configuration,
//! constraints and definition.
//!
struct AVP_TILE_CODING_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
union
{
struct
{
uint32_t FrameTileId : __CODEGEN_BITFIELD( 0, 11) ; //!< Frame Tile ID
uint32_t TgTileNum : __CODEGEN_BITFIELD(12, 23) ; //!< TG Tile Num
uint32_t TileGroupId : __CODEGEN_BITFIELD(24, 31) ; //!< Tile Group ID
};
uint32_t Value;
} DW1;
union
{
struct
{
uint32_t TileColumnPositionInSbUnit : __CODEGEN_BITFIELD( 0, 9) ; //!< Tile Column Position in SB Unit
uint32_t Reserved74 : __CODEGEN_BITFIELD(10, 15) ; //!< Reserved
uint32_t TileRowPositionInSbUnit : __CODEGEN_BITFIELD(16, 25) ; //!< Tile Row Position in SB Unit
uint32_t Reserved90 : __CODEGEN_BITFIELD(26, 31) ; //!< Reserved
};
uint32_t Value;
} DW2;
union
{
struct
{
uint32_t TileWidthInSuperblockUnitMinus1 : __CODEGEN_BITFIELD( 0, 5) ; //!< Tile Width in SuperBlock Unit Minus1
uint32_t Reserved102 : __CODEGEN_BITFIELD( 6, 15) ; //!< Reserved
uint32_t TileHeightInSuperblockUnitMinus1 : __CODEGEN_BITFIELD(16, 25) ; //!< Tile Height in SuperBlock Unit Minus1
uint32_t Reserved122 : __CODEGEN_BITFIELD(26, 31) ; //!< Reserved
};
uint32_t Value;
} DW3;
union
{
struct
{
uint32_t FilmGrainSampleTemplateWriteReadControl : __CODEGEN_BITFIELD( 0, 0) ; //!< FILM_GRAIN_SAMPLE_TEMPLATE_WRITEREAD_CONTROL
uint32_t Reserved129 : __CODEGEN_BITFIELD( 1, 24) ; //!< Reserved
uint32_t IslasttileofcolumnFlag : __CODEGEN_BITFIELD(25, 25) ; //!< IsLastTileOfColumn Flag
uint32_t IslasttileofrowFlag : __CODEGEN_BITFIELD(26, 26) ; //!< IsLastTileOfRow Flag
uint32_t IsstarttileoftilegroupFlag : __CODEGEN_BITFIELD(27, 27) ; //!< IsStartTileOfTileGroup Flag
uint32_t IsendtileoftilegroupFlag : __CODEGEN_BITFIELD(28, 28) ; //!< IsEndTileOfTileGroup Flag
uint32_t IslasttileofframeFlag : __CODEGEN_BITFIELD(29, 29) ; //!< IsLastTileOfFrame Flag
uint32_t DisableCdfUpdateFlag : __CODEGEN_BITFIELD(30, 30) ; //!< Disable CDF Update Flag
uint32_t DisableFrameContextUpdateFlag : __CODEGEN_BITFIELD(31, 31) ; //!< Disable Frame Context Update Flag
};
uint32_t Value;
} DW4;
union
{
struct
{
uint32_t NumberOfActiveBePipes : __CODEGEN_BITFIELD( 0, 7) ; //!< Number of Active BE Pipes
uint32_t Reserved168 : __CODEGEN_BITFIELD( 8, 11) ; //!< Reserved MBZ
uint32_t NumOfTileColumnsMinus1InAFrame : __CODEGEN_BITFIELD(12, 21) ; //!< Num of Tile Columns Minus1 in a Frame
uint32_t NumOfTileRowsMinus1InAFrame : __CODEGEN_BITFIELD(22, 31) ; //!< Num of Tile Rows Minus1 in a Frame
};
uint32_t Value;
} DW5;
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPTILECODING = 21, //!< No additional details
};
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
//! \brief FILM_GRAIN_SAMPLE_TEMPLATE_WRITEREAD_CONTROL
//! \details
//! This should only be set to write on the first tile of the frame in
//! single pipe mode (when film grain is enabled) and read for the remaining
//! tiles. In scalable mode, this should be set to writeon the first phase
//! and top tile of the frame and read for the remaining frames.
enum FILM_GRAIN_SAMPLE_TEMPLATE_WRITEREAD_CONTROL
{
FILM_GRAIN_SAMPLE_TEMPLATE_WRITEREAD_CONTROL_READ = 0, //!< No additional details
FILM_GRAIN_SAMPLE_TEMPLATE_WRITEREAD_CONTROL_WRITE = 1, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_TILE_CODING_CMD();
static const size_t dwSize = 6;
static const size_t byteSize = 24;
};
//!
//! \brief AVP_TILE_CODING_CMD for LST
//! \details
//! This command is used when Large Scale Tile decoding is supported
//!
struct AVP_TILE_CODING_CMD_LST
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
union
{
struct
{
uint32_t FrameTileId : __CODEGEN_BITFIELD( 0, 11) ; //!< Frame Tile ID
uint32_t TgTileNum : __CODEGEN_BITFIELD(12, 23) ; //!< TG Tile Num
uint32_t TileGroupId : __CODEGEN_BITFIELD(24, 31) ; //!< Tile Group ID
};
uint32_t Value;
} DW1;
union
{
struct
{
uint32_t TileColumnPositionInSbUnit : __CODEGEN_BITFIELD( 0, 9) ; //!< Tile Column Position in SB Unit
uint32_t Reserved74 : __CODEGEN_BITFIELD(10, 15) ; //!< Reserved
uint32_t TileRowPositionInSbUnit : __CODEGEN_BITFIELD(16, 25) ; //!< Tile Row Position in SB Unit
uint32_t Reserved90 : __CODEGEN_BITFIELD(26, 31) ; //!< Reserved
};
uint32_t Value;
} DW2;
union
{
struct
{
uint32_t TileWidthInSuperblockUnitMinus1 : __CODEGEN_BITFIELD( 0, 5) ; //!< Tile Width in SuperBlock Unit Minus1
uint32_t Reserved102 : __CODEGEN_BITFIELD( 6, 15) ; //!< Reserved
uint32_t TileHeightInSuperblockUnitMinus1 : __CODEGEN_BITFIELD(16, 25) ; //!< Tile Height in SuperBlock Unit Minus1
uint32_t Reserved122 : __CODEGEN_BITFIELD(26, 31) ; //!< Reserved
};
uint32_t Value;
} DW3;
union
{
struct
{
uint32_t Reserved128 : __CODEGEN_BITFIELD( 0, 24) ; //!< Reserved
uint32_t IslasttileofcolumnFlag : __CODEGEN_BITFIELD(25, 25) ; //!< IsLastTileOfColumn Flag
uint32_t IslasttileofrowFlag : __CODEGEN_BITFIELD(26, 26) ; //!< IsLastTileOfRow Flag
uint32_t IsstarttileoftilegroupFlag : __CODEGEN_BITFIELD(27, 27) ; //!< IsStartTileOfTileGroup Flag
uint32_t IsendtileoftilegroupFlag : __CODEGEN_BITFIELD(28, 28) ; //!< IsEndTileOfTileGroup Flag
uint32_t IslasttileofframeFlag : __CODEGEN_BITFIELD(29, 29) ; //!< IsLastTileOfFrame Flag
uint32_t DisableCdfUpdateFlag : __CODEGEN_BITFIELD(30, 30) ; //!< Disable CDF Update Flag
uint32_t DisableFrameContextUpdateFlag : __CODEGEN_BITFIELD(31, 31) ; //!< Disable Frame Context Update Flag
};
uint32_t Value;
} DW4;
union
{
struct
{
uint32_t NumberOfActiveBePipes : __CODEGEN_BITFIELD( 0, 7) ; //!< Number of Active BE Pipes
uint32_t Reserved168 : __CODEGEN_BITFIELD( 8, 11) ; //!< Reserved MBZ
uint32_t NumOfTileColumnsMinus1InAFrame : __CODEGEN_BITFIELD(12, 21) ; //!< Num of Tile Columns Minus1 in a Frame
uint32_t NumOfTileRowsMinus1InAFrame : __CODEGEN_BITFIELD(22, 31) ; //!< Num of Tile Rows Minus1 in a Frame
};
uint32_t Value;
} DW5;
union
{
struct
{
uint32_t OutputDecodedTileColumnPositionInSbUnit : __CODEGEN_BITFIELD( 0, 9) ; //!< Output Decoded Tile Column Position in SB Unit
uint32_t Reserved202 : __CODEGEN_BITFIELD(10, 15) ; //!< Reserved
uint32_t OutputDecodedTileRowPositionInSbUnit : __CODEGEN_BITFIELD(16, 25) ; //!< Output Decoded Tile Row Position in SB Unit
uint32_t Reserved218 : __CODEGEN_BITFIELD(26, 31) ; //!< Reserved
};
uint32_t Value;
} DW6;
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPTILECODING = 21, //!< No additional details
};
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_TILE_CODING_CMD_LST();
static const size_t dwSize = 7;
static const size_t byteSize = 28;
};
//!
//! \brief AVP_SURFACE_STATE
//! \details
//! The AVP Pipeline is selected with the Media Instruction Opcode "8h" for
//! all AVP Commands. Each AVP command has assigned a media instruction
//! command as defined in DWord 0, BitField 22:16.
//!
//! The AVP_SURFACE_STATE command is responsible for defining the frame
//! buffer pitch and the offset of the chroma component.
//! This is a picture level state command and is shared by both encoding and
//! decoding processes.
//! For Decoder, this command is issued once per frame. That is, all pixel
//! buffers within the current decoding session using the same surface
//! definition.
//! For Encoder, this command is issued once per surface type. There are 3
//! surface types :source, reference and dst. Hence, all reference frames
//! are defined with the same surface command.
//! Tile-Yf and Tile-Ys are not supported in Gen12, but HW interface still
//! need to keep these bits as reserved bits.
//! Note : When NV12 and Tile Y are being used, full pitch and interleaved
//! UV is always in use. U and V Xoffset must be set to 0; U and V Yoffset
//! must be 16-pixel aligned. This Surface State is not the same as that of
//! the 3D engine and of the MFX pipeline. For 10-bit pixel, P010 surface
//! definition is being used.
//!
struct AVP_SURFACE_STATE_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
union
{
struct
{
uint32_t SurfacePitchMinus1 : __CODEGEN_BITFIELD( 0, 16) ; //!< Surface Pitch Minus1
uint32_t Reserved49 : __CODEGEN_BITFIELD(17, 27) ; //!< Reserved
uint32_t SurfaceId : __CODEGEN_BITFIELD(28, 31) ; //!< SURFACE_ID
};
uint32_t Value;
} DW1;
union
{
struct
{
uint32_t YOffsetForUCbInPixel : __CODEGEN_BITFIELD( 0, 14) ; //!< Y Offset for U(Cb) in pixel
uint32_t Reserved79 : __CODEGEN_BITFIELD(15, 26) ; //!< Reserved
uint32_t SurfaceFormat : __CODEGEN_BITFIELD(27, 31) ; //!< SURFACE_FORMAT
};
uint32_t Value;
} DW2;
union
{
struct
{
uint32_t DefaultAlphaValue : __CODEGEN_BITFIELD( 0, 15) ; //!< Default Alpha Value
uint32_t YOffsetForVCr : __CODEGEN_BITFIELD(16, 31) ; //!< Y Offset for V(Cr)
};
uint32_t Value;
} DW3;
union
{
struct
{
uint32_t MemoryCompressionEnableForAv1IntraFrame : __CODEGEN_BITFIELD( 0, 0) ; //!< MEMORY_COMPRESSION_ENABLE_FOR_AV1_INTRA_FRAME
uint32_t MemoryCompressionEnableForAv1LastFrame : __CODEGEN_BITFIELD( 1, 1) ; //!< MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST_FRAME
uint32_t MemoryCompressionEnableForAv1Last2Frame : __CODEGEN_BITFIELD( 2, 2) ; //!< MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST2_FRAME
uint32_t MemoryCompressionEnableForAv1Last3Frame : __CODEGEN_BITFIELD( 3, 3) ; //!< MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST3_FRAME
uint32_t MemoryCompressionEnableForAv1GoldenFrame : __CODEGEN_BITFIELD( 4, 4) ; //!< MEMORY_COMPRESSION_ENABLE_FOR_AV1_GOLDEN_FRAME
uint32_t MemoryCompressionEnableForAv1BwdrefFrame : __CODEGEN_BITFIELD( 5, 5) ; //!< MEMORY_COMPRESSION_ENABLE_FOR_AV1_BWDREF_FRAME
uint32_t MemoryCompressionEnableForAv1Altref2Frame : __CODEGEN_BITFIELD( 6, 6) ; //!< MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF2_FRAME
uint32_t MemoryCompressionEnableForAv1AltrefFrame : __CODEGEN_BITFIELD( 7, 7) ; //!< MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF_FRAME
uint32_t CompressionTypeForIntraFrame : __CODEGEN_BITFIELD( 8, 8) ; //!< COMPRESSION_TYPE_FOR_INTRA_FRAME
uint32_t CompressionTypeForLastFrame : __CODEGEN_BITFIELD( 9, 9) ; //!< COMPRESSION_TYPE_FOR_LAST_FRAME
uint32_t CompressionTypeForLast2Frame : __CODEGEN_BITFIELD(10, 10) ; //!< COMPRESSION_TYPE_FOR_LAST2_FRAME
uint32_t CompressionTypeForLast3Frame : __CODEGEN_BITFIELD(11, 11) ; //!< COMPRESSION_TYPE_FOR_LAST3_FRAME
uint32_t CompressionTypeForGoldenFrame : __CODEGEN_BITFIELD(12, 12) ; //!< COMPRESSION_TYPE_FOR_GOLDEN_FRAME
uint32_t CompressionTypeForBwdrefFrame : __CODEGEN_BITFIELD(13, 13) ; //!< COMPRESSION_TYPE_FOR_BWDREF_FRAME
uint32_t CompressionTypeForAltref2Frame : __CODEGEN_BITFIELD(14, 14) ; //!< COMPRESSION_TYPE_FOR_ALTREF2_FRAME
uint32_t CompressionTypeForAltrefFrame : __CODEGEN_BITFIELD(15, 15) ; //!< COMPRESSION_TYPE_FOR_ALTREF_FRAME
uint32_t CompressionFormat : __CODEGEN_BITFIELD(16, 20) ; //!< COMPRESSION_FORMAT
uint32_t Reserved144 : __CODEGEN_BITFIELD(21, 31) ; //!< Reserved
};
uint32_t Value;
} DW4;
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_SURFACESTATE = 1, //!< No additional details
};
//! \brief MEDIA_INSTRUCTION_OPCODE
//! \details
//! Codec/Engine Name = AVP = 3h
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
enum SURFACE_ID
{
SURFACE_ID_RECONSTRUCTEDPICTURE = 0, //!< This is for the reconstructed picture surface state
SURFACE_ID_AV1INTRAFRAME = 6, //!< This is for AV1 Intra Frame (Reference Picture 0). Each AV1 Reference Pictures can have different size so a separate ID is needed.
SURFACE_ID_AV1LASTFRAME = 7, //!< This is for AV1Last Frame (Reference Picture 1). Each AV1 Reference Pictures can have different size so a separate ID is needed.
SURFACE_ID_AV1LAST2FRAME = 8, //!< This is for AV1 Last2 Frame (Reference Picture 2). Each AV1 Reference Pictures can have different size so a separate ID is needed.
SURFACE_ID_AV1LAST3FRAME = 9, //!< This is for AV1 Last3 Frame (Reference Picture 3). Each AV1 Reference Pictures can have different size so a separate ID is needed.
SURFACE_ID_AV1GOLDENFRAME = 10, //!< This is for AV1 Golden Frame (Reference Picture 4). Each AV1 Reference Pictures can have different size so a separate ID is needed.
SURFACE_ID_AV1BWDREFFRAME = 11, //!< This is for AV1 Bwdref Frame (Reference Picture 5). Each AV1 Reference Pictures can have different size so a separate ID is needed.
SURFACE_ID_AV1ALTREF2FRAME = 12, //!< This is for AV1 Altref2 Frame (Reference Picture 6). Each AV1 Reference Pictures can have different size so a separate ID is needed.
SURFACE_ID_AV1ALTREFFRAME = 13, //!< This is for AV1 Altref Frame (Reference Picture 7). Each AV1 Reference Pictures can have different size so a separate ID is needed.
SURFACE_ID_INTRABCDECODEDFRAME = 14, //!< This is for AV1 IntraBC Decoded Frame. It will be used both Read/Write at the same time. This surface requires multiple of 8 pixels on both width and height.
};
//! \brief SURFACE_FORMAT
//! \details
//! Specifies the format of the surface. This field should be ignored for
//! now. HW should use the definition in AVP_PIC_STATE instead. (HW team
//! needs to double check on this ???)
enum SURFACE_FORMAT
{
SURFACE_FORMAT_P010VARIANT = 3, //!< No additional details
SURFACE_FORMAT_PLANAR4208 = 4, //!< No additional details
SURFACE_FORMAT_P010 = 13, //!< No additional details
};
//! \brief MEMORY_COMPRESSION_ENABLE_FOR_AV1_INTRA_FRAME
//! \details
//! This bit is for AV1 Intra Frame (Reference Picture 0).
enum MEMORY_COMPRESSION_ENABLE_FOR_AV1_INTRA_FRAME
{
MEMORY_COMPRESSION_ENABLE_FOR_AV1_INTRA_FRAME_MEMORYCOMPRESSIONDISABLE = 0, //!< No additional details
MEMORY_COMPRESSION_ENABLE_FOR_AV1_INTRA_FRAME_MEMORYCOMPRESSIONENABLE = 1, //!< No additional details
};
//! \brief MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST_FRAME
//! \details
//! This bit is for AV1 Last Frame (Reference Picture 1).
enum MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST_FRAME
{
MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST_FRAME_MEMORYCOMPRESSIONDISABLE = 0, //!< No additional details
MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST_FRAME_MEMORYCOMPRESSIONENABLE = 1, //!< No additional details
};
//! \brief MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST2_FRAME
//! \details
//! This bit is for AV1 Last2 Frame (Reference Picture 2).
enum MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST2_FRAME
{
MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST2_FRAME_MEMORYCOMPRESSIONDISABLE = 0, //!< No additional details
MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST2_FRAME_MEMORYCOMPRESSIONENABLE = 1, //!< No additional details
};
//! \brief MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST3_FRAME
//! \details
//! This bit is for AV1 Last3 Frame (Reference Picture 3).
enum MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST3_FRAME
{
MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST3_FRAME_MEMORYCOMPRESSIONDISABLE = 0, //!< No additional details
MEMORY_COMPRESSION_ENABLE_FOR_AV1_LAST3_FRAME_MEMORYCOMPRESSIONENABLE = 1, //!< No additional details
};
//! \brief MEMORY_COMPRESSION_ENABLE_FOR_AV1_GOLDEN_FRAME
//! \details
//! This bit is for AV1 Golden Frame (Reference Picture 4).
enum MEMORY_COMPRESSION_ENABLE_FOR_AV1_GOLDEN_FRAME
{
MEMORY_COMPRESSION_ENABLE_FOR_AV1_GOLDEN_FRAME_MEMORYCOMPRESSIONDISABLE = 0, //!< No additional details
MEMORY_COMPRESSION_ENABLE_FOR_AV1_GOLDEN_FRAME_MEMORYCOMPRESSIONENABLE = 1, //!< No additional details
};
//! \brief MEMORY_COMPRESSION_ENABLE_FOR_AV1_BWDREF_FRAME
//! \details
//! This bit is for AV1 Bwdref Frame (Reference Picture 5).
enum MEMORY_COMPRESSION_ENABLE_FOR_AV1_BWDREF_FRAME
{
MEMORY_COMPRESSION_ENABLE_FOR_AV1_BWDREF_FRAME_MEMORYCOMPRESSIONDISABLE = 0, //!< No additional details
MEMORY_COMPRESSION_ENABLE_FOR_AV1_BWDREF_FRAME_MEMORYCOMPRESSIONENABLE = 1, //!< No additional details
};
//! \brief MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF2_FRAME
//! \details
//! This bit is for AV1Altref2 Frame (Reference Picture 6).
enum MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF2_FRAME
{
MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF2_FRAME_MEMORYCOMPRESSIONDISABLE = 0, //!< No additional details
MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF2_FRAME_MEMORYCOMPRESSIONENABLE = 1, //!< No additional details
};
//! \brief MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF_FRAME
//! \details
//! This bit is for AV1Altref Frame (Reference Picture 7).
enum MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF_FRAME
{
MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF_FRAME_MEMORYCOMPRESSIONDISABLE = 0, //!< No additional details
MEMORY_COMPRESSION_ENABLE_FOR_AV1_ALTREF_FRAME_MEMORYCOMPRESSIONENABLE = 1, //!< No additional details
};
//! \brief COMPRESSION_TYPE_FOR_INTRA_FRAME
//! \details
//! This bit is for Intra Frame (Reference Picture 0). Valid only when
//! Memory Compression for Intra Frame is enabled.
enum COMPRESSION_TYPE_FOR_INTRA_FRAME
{
COMPRESSION_TYPE_FOR_INTRA_FRAME_MEDIACOMPRESSIONENABLED = 0, //!< No additional details
COMPRESSION_TYPE_FOR_INTRA_FRAME_RENDERCOMPRESSIONENABLED = 1, //!< No additional details
};
//! \brief COMPRESSION_TYPE_FOR_LAST_FRAME
//! \details
//! This bit is for AV1 Last Frame (Reference Picture 1). Valid only when
//! Memory Compression for Last Frameis enabled.
enum COMPRESSION_TYPE_FOR_LAST_FRAME
{
COMPRESSION_TYPE_FOR_LAST_FRAME_MEDIACOMPRESSIONENABLED = 0, //!< No additional details
COMPRESSION_TYPE_FOR_LAST_FRAME_RENDERCOMPRESSIONENABLED = 1, //!< No additional details
};
//! \brief COMPRESSION_TYPE_FOR_LAST2_FRAME
//! \details
//! This bit is for AV1 Last2 Frame (Reference Picture 2). Valid only when
//! Memory Compression for Last2 Frame is enabled.
enum COMPRESSION_TYPE_FOR_LAST2_FRAME
{
COMPRESSION_TYPE_FOR_LAST2_FRAME_MEDIACOMPRESSIONENABLED = 0, //!< No additional details
COMPRESSION_TYPE_FOR_LAST2_FRAME_RENDERCOMPRESSIONENABLED = 1, //!< No additional details
};
//! \brief COMPRESSION_TYPE_FOR_LAST3_FRAME
//! \details
//! This bit is for AV1 Last3 Frame (Reference Picture 3). Valid only when
//! Memory Compression for Last3 Frameis enabled.
enum COMPRESSION_TYPE_FOR_LAST3_FRAME
{
COMPRESSION_TYPE_FOR_LAST3_FRAME_MEDIACOMPRESSIONENABLED = 0, //!< No additional details
COMPRESSION_TYPE_FOR_LAST3_FRAME_RENDERCOMPRESSIONENABLED = 1, //!< No additional details
};
//! \brief COMPRESSION_TYPE_FOR_GOLDEN_FRAME
//! \details
//! This bit is for AV1 Golden Frame (Reference Picture 4). Valid only when
//! Memory Compression for Golden Frame is enabled.
enum COMPRESSION_TYPE_FOR_GOLDEN_FRAME
{
COMPRESSION_TYPE_FOR_GOLDEN_FRAME_MEDIACOMPRESSIONENABLED = 0, //!< No additional details
COMPRESSION_TYPE_FOR_GOLDEN_FRAME_RENDERCOMPRESSIONENABLED = 1, //!< No additional details
};
//! \brief COMPRESSION_TYPE_FOR_BWDREF_FRAME
//! \details
//! This bit is for AV1 Bwdref Frame (Reference Picture 5). Valid only when
//! Memory Compression for Bwdref Frame is enabled.
enum COMPRESSION_TYPE_FOR_BWDREF_FRAME
{
COMPRESSION_TYPE_FOR_BWDREF_FRAME_MEDIACOMPRESSIONENABLED = 0, //!< No additional details
COMPRESSION_TYPE_FOR_BWDREF_FRAME_RENDERCOMPRESSIONENABLED = 1, //!< No additional details
};
//! \brief COMPRESSION_TYPE_FOR_ALTREF2_FRAME
//! \details
//! This bit is for AV1 Altref2 Frame (Reference Picture 6). Valid only when
//! Memory Compression for Altref2 Frame is enabled.
enum COMPRESSION_TYPE_FOR_ALTREF2_FRAME
{
COMPRESSION_TYPE_FOR_ALTREF2_FRAME_MEDIACOMPRESSIONENABLED = 0, //!< No additional details
COMPRESSION_TYPE_FOR_ALTREF2_FRAME_RENDERCOMPRESSIONENABLED = 1, //!< No additional details
};
//! \brief COMPRESSION_TYPE_FOR_ALTREF_FRAME
//! \details
//! This bit is for AV1 Altref Frame (Reference Picture 7). Valid only when
//! Memory Compression for Altref Frame is enabled.
enum COMPRESSION_TYPE_FOR_ALTREF_FRAME
{
COMPRESSION_TYPE_FOR_ALTREF_FRAME_MEDIACOMPRESSIONENABLED = 0, //!< No additional details
COMPRESSION_TYPE_FOR_ALTREF_FRAME_RENDERCOMPRESSIONENABLED = 1, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_SURFACE_STATE_CMD();
static const size_t dwSize = 5;
static const size_t byteSize = 20;
};
//!
//! \brief AVP_SEGMENT_STATE
//! \details
//! When segmentation is enabled, this Segment State command is issued
//! onceper segment. There can be maximum 8 segments specified to decode a
//! given frame, so this Segment State Command can be issued maximum 8
//! times. It is assumed that there is no gap in segment IDs. So, when the
//! AVP PIC States specified that the number of active
//! When segmentation is disabled, driver still sends out this command once
//! for segment id = 0. HW needs to check the segmentation enable flag from
//! AVP_PIC_STATE Command as well to distinguish from the case when
//! segmentation is enabled for segment id = 0.
//! Each segment can have its own specification of enabling any one of the 8
//! features defined in AV1 and their corresponding feature data. When a
//! feature is not enabled, its feature data is defaulted to 0. When
//! segmentation is not enabled, all the features are disabled and their
//! corresponding feature data are set to 0.
//! style="margin:0in 0in 8pt">Segment State Command also provides other
//! segement related parameters.
//! style="margin:0in 0in 8pt">It is assumed that HW is keeping a copy of
//! the complete AV1 QM Matrix Tablefor all color components inside its
//! internal memory, and Driver only needs to send the qm_level as index
//! into this Table.
//!
struct AVP_SEGMENT_STATE_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
union
{
struct
{
uint32_t SegmentId : __CODEGEN_BITFIELD( 0, 2) ; //!< Segment ID
uint32_t Reserved35 : __CODEGEN_BITFIELD( 3, 31) ; //!< Reserved
};
uint32_t Value;
} DW1;
union
{
struct
{
uint32_t SegmentFeatureMask : __CODEGEN_BITFIELD( 0, 7) ; //!< Segment Feature Mask
uint32_t SegmentDeltaQindex : __CODEGEN_BITFIELD( 8, 16) ; //!< Segment Delta Qindex
uint32_t SegmentBlockSkipFlag : __CODEGEN_BITFIELD(17, 17) ; //!< Segment Block Skip Flag
uint32_t SegmentBlockGlobalmvFlag : __CODEGEN_BITFIELD(18, 18) ; //!< Segment Block GlobalMV Flag
uint32_t SegmentLosslessFlag : __CODEGEN_BITFIELD(19, 19) ; //!< Segment Lossless Flag
uint32_t SegmentLumaYQmLevel : __CODEGEN_BITFIELD(20, 23) ; //!< Segment Luma Y QM Level
uint32_t SegmentChromaUQmLevel : __CODEGEN_BITFIELD(24, 27) ; //!< Segment Chroma U QM Level
uint32_t SegmentChromaVQmLevel : __CODEGEN_BITFIELD(28, 31) ; //!< Segment Chroma V QM Level
};
uint32_t Value;
} DW2;
union
{
struct
{
uint32_t SegmentDeltaLoopFilterLevelLumaVertical : __CODEGEN_BITFIELD( 0, 6) ; //!< Segment Delta Loop Filter Level Luma Vertical
uint32_t SegmentDeltaLoopFilterLevelLumaHorizontal : __CODEGEN_BITFIELD( 7, 13) ; //!< Segment Delta Loop Filter Level Luma Horizontal
uint32_t SegmentDeltaLoopFilterLevelChromaU : __CODEGEN_BITFIELD(14, 20) ; //!< Segment Delta Loop Filter Level Chroma U
uint32_t SegmentDeltaLoopFilterLevelChromaV : __CODEGEN_BITFIELD(21, 27) ; //!< Segment Delta Loop Filter Level Chroma V
uint32_t SegmentReferenceFrame : __CODEGEN_BITFIELD(28, 30) ; //!< Segment Reference Frame
uint32_t Reserved127 : __CODEGEN_BITFIELD(31, 31) ; //!< Reserved
};
uint32_t Value;
} DW3;
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPSEGMENTSTATE = 50, //!< No additional details
};
//! \brief MEDIA_INSTRUCTION_OPCODE
//! \details
//! Codec/Engine Name = AVP = 3h
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_SEGMENT_STATE_CMD();
static const size_t dwSize = 4;
static const size_t byteSize = 16;
};
//!
//! \brief AVP_PIPE_BUF_ADDR_STATE
//! \details
//! The AVP Pipeline is selected with the Media Instruction Opcode "8h" for
//! all AVP Commands. Each AVP command has assigned a media instruction
//! command as defined in DWord 0, BitField 22:16.
//!
//! This state command provides the physical memory base addresses for all
//! row store buffers, column store buffers (for tile column and in
//! scalability mode), reconstructed output and reference frame buffers, and
//! auxiliary data buffers (MV, segment map, etc.) that are required by the
//! AV1 decoding and encoding process.
//! This is a frame level state command and is shared by both encoding and
//! decoding processes.
//! AVP is a tile based pipeline and is a stateless pipeline, hence all
//! sequence level, frame level, and segment level state commands must be
//! resent to process each tile.
//! Memory compression may be applicable to some of these buffers for BW
//! saving.
//! Note : there is no buffer to store the 16 QM table sets, they are
//! implemented directly inside the HW pipeline.
//!
struct AVP_PIPE_BUF_ADDR_STATE_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
SPLITBASEADDRESS64BYTEALIGNED_CMD ReferenceFrameBufferBaseAddressRefaddr07[8]; //!< DW1..16, Reference Frame Buffer Base Address (RefAddr[0-7])
MEMORYADDRESSATTRIBUTES_CMD ReferenceFrameBufferBaseAddressAttributes; //!< DW17, Reference Frame Buffer Base Address Attributes
SPLITBASEADDRESS4KBYTEALIGNED_CMD DecodedOutputFrameBufferAddress; //!< DW18..19, Decoded Output Frame Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DecodedOutputFrameBufferAddressAttributes; //!< DW20, Decoded Output Frame Buffer Address Attributes
uint32_t Reserved672[3]; //!< Reserved
SPLITBASEADDRESS4KBYTEALIGNED_CMD IntrabcDecodedOutputFrameBufferAddress; //!< DW24..25, IntraBC Decoded Output Frame Buffer Address
MEMORYADDRESSATTRIBUTES_CMD IntrabcDecodedOutputFrameBufferAddressAttributes; //!< DW26, IntraBC Decoded Output Frame Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD CdfTablesInitializationBufferAddress; //!< DW27..28, CDF Tables Initialization Buffer Address
MEMORYADDRESSATTRIBUTES_CMD CdfTablesInitializationBufferAddressAttributes; //!< DW29, CDF Tables Initialization Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD CdfTablesBackwardAdaptationBufferAddress; //!< DW30..31, CDF Tables Backward Adaptation Buffer Address
MEMORYADDRESSATTRIBUTES_CMD CdfTablesBackwardAdaptationBufferAddressAttributes; //!< DW32, CDF Tables Backward Adaptation Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD Av1SegmentIdReadBufferAddress; //!< DW33..34, AV1 Segment ID Read Buffer Address
MEMORYADDRESSATTRIBUTES_CMD Av1SegmentIdReadBufferAddressAttributes; //!< DW35, AV1 Segment ID Read Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD Av1SegmentIdWriteBufferAddress; //!< DW36..37, AV1 Segment ID Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD Av1SegmentIdWriteBufferAddressAttributes; //!< DW38, AV1 Segment ID Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD CollocatedMotionVectorTemporalBufferBaseAddressTmvaddr07[8]; //!< DW39..54, Collocated Motion Vector Temporal Buffer Base Address (TmvAddr[0-7])
MEMORYADDRESSATTRIBUTES_CMD CollocatedMotionVectorTemporalBufferBaseAddressAttributes; //!< DW55, Collocated Motion Vector Temporal Buffer Base Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD CurrentFrameMotionVectorWriteBufferAddress; //!< DW56..57, Current Frame Motion Vector Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD CurrentFrameMotionVectorWriteBufferAddressAttributes; //!< DW58, Current Frame Motion Vector Write Buffer Address Attributes
uint32_t Reserved1888[3]; //!< Reserved
SPLITBASEADDRESS64BYTEALIGNED_CMD BitstreamDecoderEncoderLineRowstoreReadWriteBufferAddress; //!< DW62..63, Bitstream Decoder/Encoder Line Rowstore Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD BitstreamDecoderEncoderLineRowstoreReadWriteBufferAddressAttributes; //!< DW64, Bitstream Decoder/Encoder Line Rowstore Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD BitstreamDecoderEncoderTileLineRowstoreReadWriteBufferAddress; //!< DW65..66, Bitstream Decoder/Encoder Tile Line Rowstore Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD BitstreamDecoderEncoderTileLineRowstoreReadWriteBufferAddressAttributes; //!< DW67, Bitstream Decoder/Encoder Tile Line Rowstore Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD IntraPredictionLineRowstoreReadWriteBufferAddress; //!< DW68..69, Intra Prediction Line Rowstore Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD IntraPredictionLineRowstoreReadWriteBufferAddressAttributes; //!< DW70, Intra Prediction Line Rowstore Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD IntraPredictionTileLineRowstoreReadWriteBufferAddress; //!< DW71..72, Intra Prediction Tile Line Rowstore Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD IntraPredictionTileLineRowstoreReadWriteBufferAddressAttributes; //!< DW73, Intra Prediction Tile Line Rowstore Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD SpatialMotionVectorLineReadWriteBufferAddress; //!< DW74..75, Spatial Motion Vector Line Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD SpatialMotionVectorLineReadWriteBufferAddressAttributes; //!< DW76, Spatial Motion Vector Line Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD SpatialMotionVectorCodingTileLineReadWriteBufferAddress; //!< DW77..78, Spatial Motion Vector Coding Tile Line Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD SpatialMotionVectorTileLineReadWriteBufferAddressAttributes; //!< DW79, Spatial Motion Vector Tile Line Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD LoopRestorationMetaTileColumnReadWriteBufferAddress; //!< DW80..81, Loop Restoration Meta Tile Column Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD LoopRestorationMetaTileColumnReadWriteBufferAddressAttributes; //!< DW82, Loop Restoration Meta Tile Column Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD LoopRestorationFilterTileReadWriteLineYBufferAddress; //!< DW83..84, Loop Restoration Filter Tile Read/Write Line Y Buffer Address
MEMORYADDRESSATTRIBUTES_CMD LoopRestorationFilterTileReadWriteLineYBufferAddressAttributes; //!< DW85, Loop Restoration Filter Tile Read/Write Line Y Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD LoopRestorationFilterTileReadWriteLineUBufferAddress; //!< DW86..87, Loop Restoration Filter Tile Read/Write Line U Buffer Address
MEMORYADDRESSATTRIBUTES_CMD LoopRestorationFilterTileReadWriteLineUBufferAddressAttributes; //!< DW88, Loop Restoration Filter Tile Read/Write Line U Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD LoopRestorationFilterTileReadWriteLineVBufferAddress; //!< DW89..90, Loop Restoration Filter Tile Read/Write Line V Buffer Address
MEMORYADDRESSATTRIBUTES_CMD LoopRestorationFilterTileReadWriteLineVBufferAddressAttributes; //!< DW91, Loop Restoration Filter Tile Read/Write Line V Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DeblockerFilterLineReadWriteYBufferAddress; //!< DW92..93, Deblocker Filter Line Read/Write Y Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DeblockerFilterLineReadWriteYBufferAddressAttributes; //!< DW94, Deblocker Filter Line Read/Write Y Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DeblockerFilterLineReadWriteUBufferAddress; //!< DW95..96, Deblocker Filter Line Read/Write U Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DeblockerFilterLineReadWriteUBufferAddressAttributes; //!< DW97, Deblocker Filter Line Read/Write U Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DeblockerFilterLineReadWriteVBufferAddress; //!< DW98..99, Deblocker Filter Line Read/Write V Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DeblockerFilterLineReadWriteVBufferAddressAttributes; //!< DW100, Deblocker Filter Line Read/Write V Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DeblockerFilterTileLineReadWriteYBufferAddress; //!< DW101..102, Deblocker Filter Tile Line Read/Write Y Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DeblockerFilterTileLineReadWriteYBufferAddressAttributes; //!< DW103, Deblocker Filter Tile Line Read/Write Y Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DeblockerFilterTileLineReadWriteVBufferAddress; //!< DW104..105, Deblocker Filter Tile Line Read/Write V Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DeblockerFilterTileLineReadWriteVBufferAddressAttributes; //!< DW106, Deblocker Filter Tile Line Read/Write V Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DeblockerFilterTileLineReadWriteUBufferAddress; //!< DW107..108, Deblocker Filter Tile Line Read/Write U Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DeblockerFilterTileLineReadWriteUBufferAddressAttributes; //!< DW109, Deblocker Filter Tile Line Read/Write U Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DeblockerFilterTileColumnReadWriteYBufferAddress; //!< DW110..111, Deblocker Filter Tile Column Read/Write Y Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DeblockerFilterTileColumnReadWriteYBufferAddressAttributes; //!< DW112, Deblocker Filter Tile Column Read/Write Y Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DeblockerFilterTileColumnReadWriteUBufferAddress; //!< DW113..114, Deblocker Filter Tile Column Read/Write U Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DeblockerFilterTileColumnReadWriteUBufferAddressAttributes; //!< DW115, Deblocker Filter Tile Column Read/Write U Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DeblockerFilterTileColumnReadWriteVBufferAddress; //!< DW116..117, Deblocker Filter Tile Column Read/Write V Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DeblockerFilterTileColumnReadWriteVBufferAddressAttributes; //!< DW118, Deblocker Filter Tile Column Read/Write V Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD CdefFilterLineReadWriteBufferAddress; //!< DW119..120, CDEF Filter Line Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD CdefFilterLineReadWriteBufferAddressAttributes; //!< DW121, CDEF Filter Line Read/Write Buffer Address Attributes
uint32_t Reserved3904[6]; //!< Reserved
SPLITBASEADDRESS64BYTEALIGNED_CMD CdefFilterTileLineReadWriteBufferAddress; //!< DW128..129, CDEF Filter Tile Line Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD CdefFilterTileLineReadWriteBufferAddressAttributes; //!< DW130, CDEF Filter Tile Line Read/Write Buffer Address Attributes
uint32_t Reserved4192[6]; //!< Reserved
SPLITBASEADDRESS64BYTEALIGNED_CMD CdefFilterTileColumnReadWriteBufferAddress; //!< DW137..138, CDEF Filter Tile Column Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD CdefFilterTileColumnReadWriteBufferAddressAttributes; //!< DW139, CDEF Filter Tile Column Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD CdefFilterMetaTileLineReadWriteBufferAddress; //!< DW140..141, CDEF Filter Meta Tile Line Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD CdefFilterMetaTileLineReadWriteBufferAddressAttributes; //!< DW142, CDEF Filter Meta Tile Line Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD CdefFilterMetaTileColumnReadWriteBufferAddress; //!< DW143..144, CDEF Filter Meta Tile Column Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD CdefFilterMetaTileColumnReadWriteBufferAddressAttributes; //!< DW145, CDEF Filter Meta Tile Column Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD CdefFilterTopLeftCornerReadWriteBufferAddress; //!< DW146..147, CDEF Filter Top-Left Corner Read/Write Buffer Address
MEMORYADDRESSATTRIBUTES_CMD CdefFilterTopLeftCornerReadWriteBufferAddressAttributes; //!< DW148, CDEF Filter Top-Left Corner Read/Write Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD SuperResTileColumnReadWriteYBufferAddress; //!< DW149..150, Super-Res Tile Column Read/Write Y Buffer Address
MEMORYADDRESSATTRIBUTES_CMD SuperResTileColumnReadWriteYBufferAddressAttributes; //!< DW151, Super-Res Tile Column Read/Write Y Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD SuperResTileColumnReadWriteUBufferAddress; //!< DW152..153, Super-Res Tile Column Read/Write U Buffer Address
MEMORYADDRESSATTRIBUTES_CMD SuperResTileColumnReadWriteUBufferAddressAttributes; //!< DW154, Super-Res Tile Column Read/Write U Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD SuperResTileColumnReadWriteVBufferAddress; //!< DW155..156, Super-Res Tile Column Read/Write V Buffer Address
MEMORYADDRESSATTRIBUTES_CMD SuperResTileColumnReadWriteVBufferAddressAttributes; //!< DW157, Super-Res Tile Column Read/Write V Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD LoopRestorationFilterTileColumnReadWriteYBufferAddress; //!< DW158..159, Loop Restoration Filter Tile Column Read/Write Y Buffer Address
MEMORYADDRESSATTRIBUTES_CMD LoopRestorationFilterTileColumnReadWriteYBufferAddressAttributes; //!< DW160, Loop Restoration Filter Tile Column Read/Write Y Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD LoopRestorationFilterTileColumnReadWriteUBufferAddress; //!< DW161..162, Loop Restoration Filter Tile Column Read/Write U Buffer Address
MEMORYADDRESSATTRIBUTES_CMD LoopRestorationFilterTileColumnReadWriteUBufferAddressAttributes; //!< DW163, Loop Restoration Filter Tile Column Read/Write U Buffer Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD LoopRestorationFilterTileColumnReadWriteVBufferAddress; //!< DW164..165, Loop Restoration Filter Tile Column Read/Write V Buffer Address
MEMORYADDRESSATTRIBUTES_CMD LoopRestorationFilterTileColumnReadWriteVBufferAddressAttributes; //!< DW166, Loop Restoration Filter Tile Column Read/Write V Buffer Address Attributes
uint32_t Reserved5344[9]; //!< Reserved
SPLITBASEADDRESS64BYTEALIGNED_CMD DecodedFrameStatusErrorBufferBaseAddress; //!< DW176..177, Decoded Frame Status/Error Buffer Base Address
MEMORYADDRESSATTRIBUTES_CMD DecodedFrameStatusErrorBufferBaseAddressAttributes; //!< DW178, Decoded Frame Status/Error Buffer Base Address Attributes
SPLITBASEADDRESS64BYTEALIGNED_CMD DecodedBlockDataStreamoutBufferAddress; //!< DW179..180, Decoded Block Data Streamout Buffer Address
MEMORYADDRESSATTRIBUTES_CMD DecodedBlockDataStreamoutBufferAddressAttributes; //!< DW181, Decoded Block Data Streamout Buffer Address Attributes
uint32_t Reserved5824[3]; //!< Reserved
uint32_t Reserved5920[3]; //!< Reserved
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPPIPEBUFADDRSTATE = 2, //!< No additional details
};
//! \brief MEDIA_INSTRUCTION_OPCODE
//! \details
//! Codec/Engine Name = AVP = 3h
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_PIPE_BUF_ADDR_STATE_CMD();
static const size_t dwSize = 188;
static const size_t byteSize = 752;
};
//!
//! \brief AVP_INLOOP_FILTER_STATE
//! \details
//! The AVP_INLOOP_FILTER_STATE command provides all the frame level syntax
//! elements and derived parameters that are needed for the processing of
//! all the post in-loop filters present in the AV1 codec. This includes the
//! Deblocker, the CDEF (Constrained Directional Enhancement Filter), the
//! HSRF (Horizontal-only Super-Resolution Filter), and the LRF (Loop
//! Restoration Filter). These syntax elements can be changed in the
//! bitstream from frame to frame.
//! All Post In-Loop Filters are inherently frame-based filtering, but when
//! implemented in a HW pipeline, the filtering process is performed in a
//! block by block fashion. In the addition to these frame level states,
//! there are additional syntax elements and derived parameters that are
//! generated at SuperBlock level, and are not described here.
//! Each of these 4 Post In-Loop Filters can be controlled independently and
//! each can be enabled or disabled independently. Except the HSRF, all the
//! other 3 filters have separate controls for each color plane as well. To
//! disable a Post In-Loop Filter, its control parameter(s) are set to 0 -
//! the default state.
//! This command should be issued once per tile, even if no post in-loop
//! filter is enabled for decoding the current frame. When in frame lossless
//! mode or when IntraBC is enabled, all the Post In-Loop Filters are
//! disabled for all color planes, this command will provide the default
//! values for all parameters. All syntax elements are then assumed a value
//! of 0, except otherwise specified in each field of this State Command.
//! When it is in monochrome video, no filter parameter for the two chroma
//! planes is present in the bitstream.
//!
struct AVP_INLOOP_FILTER_STATE_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
union
{
struct
{
uint32_t LumaYDeblockerFilterLevelVertical : __CODEGEN_BITFIELD( 0, 5) ; //!< Luma Y Deblocker Filter Level Vertical
uint32_t LumaYDeblockerFilterLevelHorizontal : __CODEGEN_BITFIELD( 6, 11) ; //!< Luma Y Deblocker Filter Level Horizontal
uint32_t ChromaUDeblockerFilterLevel : __CODEGEN_BITFIELD(12, 17) ; //!< Chroma U Deblocker Filter Level
uint32_t ChromaVDeblockerFilterLevel : __CODEGEN_BITFIELD(18, 23) ; //!< Chroma V Deblocker Filter Level
uint32_t DeblockerFilterSharpnessLevel : __CODEGEN_BITFIELD(24, 26) ; //!< Deblocker Filter Sharpness Level
uint32_t DeblockerFilterModeRefDeltaEnableFlag : __CODEGEN_BITFIELD(27, 27) ; //!< Deblocker Filter Mode Ref Delta Enable Flag
uint32_t DeblockerDeltaLfResolution : __CODEGEN_BITFIELD(28, 29) ; //!< Deblocker Delta LF Resolution
uint32_t DeblockerFilterDeltaLfMultiFlag : __CODEGEN_BITFIELD(30, 30) ; //!< Deblocker Filter Delta LF Multi Flag
uint32_t DeblockerFilterDeltaLfPresentFlag : __CODEGEN_BITFIELD(31, 31) ; //!< Deblocker Filter Delta LF Present Flag
};
uint32_t Value;
} DW1;
union
{
struct
{
uint32_t DeblockerFilterRefDeltas0 : __CODEGEN_BITFIELD( 0, 6) ; //!< Deblocker Filter Ref Deltas[0]
uint32_t Reserved71 : __CODEGEN_BITFIELD( 7, 7) ; //!< Reserved
uint32_t DeblockerFilterRefDeltas1 : __CODEGEN_BITFIELD( 8, 14) ; //!< Deblocker Filter Ref Deltas[1]
uint32_t Reserved79 : __CODEGEN_BITFIELD(15, 15) ; //!< Reserved
uint32_t DeblockerFilterRefDeltas2 : __CODEGEN_BITFIELD(16, 22) ; //!< Deblocker Filter Ref Deltas[2]
uint32_t Reserved87 : __CODEGEN_BITFIELD(23, 23) ; //!< Reserved
uint32_t DeblockerFilterRefDeltas3 : __CODEGEN_BITFIELD(24, 30) ; //!< Deblocker Filter Ref Deltas[3]
uint32_t Reserved95 : __CODEGEN_BITFIELD(31, 31) ; //!< Reserved
};
uint32_t Value;
} DW2;
union
{
struct
{
uint32_t DeblockerFilterRefDeltas4 : __CODEGEN_BITFIELD( 0, 6) ; //!< Deblocker Filter Ref Deltas[4]
uint32_t Reserved103 : __CODEGEN_BITFIELD( 7, 7) ; //!< Reserved
uint32_t DeblockerFilterRefDeltas5 : __CODEGEN_BITFIELD( 8, 14) ; //!< Deblocker Filter Ref Deltas[5]
uint32_t Reserved111 : __CODEGEN_BITFIELD(15, 15) ; //!< Reserved
uint32_t DeblockerFilterRefDeltas6 : __CODEGEN_BITFIELD(16, 22) ; //!< Deblocker Filter Ref Deltas[6]
uint32_t Reserved119 : __CODEGEN_BITFIELD(23, 23) ; //!< Reserved
uint32_t DeblockerFilterRefDeltas7 : __CODEGEN_BITFIELD(24, 30) ; //!< Deblocker Filter Ref Deltas[7]
uint32_t Reserved127 : __CODEGEN_BITFIELD(31, 31) ; //!< Reserved
};
uint32_t Value;
} DW3;
union
{
struct
{
uint32_t DeblockerFilterModeDeltas0 : __CODEGEN_BITFIELD( 0, 6) ; //!< Deblocker Filter Mode Deltas[0]
uint32_t Reserved135 : __CODEGEN_BITFIELD( 7, 7) ; //!< Reserved
uint32_t DeblockerFilterModeDeltas1 : __CODEGEN_BITFIELD( 8, 14) ; //!< Deblocker Filter Mode Deltas[1]
uint32_t Reserved143 : __CODEGEN_BITFIELD(15, 31) ; //!< Reserved
};
uint32_t Value;
} DW4;
union
{
struct
{
uint32_t CdefYStrength0 : __CODEGEN_BITFIELD( 0, 5) ; //!< CDEF Y Strength[0]
uint32_t CdefYStrength1 : __CODEGEN_BITFIELD( 6, 11) ; //!< CDEF Y Strength[1]
uint32_t CdefYStrength2 : __CODEGEN_BITFIELD(12, 17) ; //!< CDEF Y Strength[2]
uint32_t CdefYStrength3 : __CODEGEN_BITFIELD(18, 23) ; //!< CDEF Y Strength[3]
uint32_t Reserved184 : __CODEGEN_BITFIELD(24, 27) ; //!< Reserved
uint32_t CdefBits : __CODEGEN_BITFIELD(28, 29) ; //!< CDEF Bits
uint32_t CdefFilterDampingFactorMinus3 : __CODEGEN_BITFIELD(30, 31) ; //!< CDEF Filter Damping Factor Minus3
};
uint32_t Value;
} DW5;
union
{
struct
{
uint32_t CdefYStrength4 : __CODEGEN_BITFIELD( 0, 5) ; //!< CDEF Y Strength[4]
uint32_t CdefYStrength5 : __CODEGEN_BITFIELD( 6, 11) ; //!< CDEF Y Strength[5]
uint32_t CdefYStrength6 : __CODEGEN_BITFIELD(12, 17) ; //!< CDEF Y Strength[6]
uint32_t CdefYStrength7 : __CODEGEN_BITFIELD(18, 23) ; //!< CDEF Y Strength[7]
uint32_t Reserved216 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved
};
uint32_t Value;
} DW6;
union
{
struct
{
uint32_t CdefUvStrength0 : __CODEGEN_BITFIELD( 0, 5) ; //!< CDEF UV Strength[0]
uint32_t CdefUvStrength1 : __CODEGEN_BITFIELD( 6, 11) ; //!< CDEF UV Strength[1]
uint32_t CdefUvStrength2 : __CODEGEN_BITFIELD(12, 17) ; //!< CDEF UV Strength[2]
uint32_t CdefUvStrength3 : __CODEGEN_BITFIELD(18, 23) ; //!< CDEF UV Strength[3]
uint32_t Reserved248 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved
};
uint32_t Value;
} DW7;
union
{
struct
{
uint32_t CdefUvStrength4 : __CODEGEN_BITFIELD( 0, 5) ; //!< CDEF UV Strength[4]
uint32_t CdefUvStrength5 : __CODEGEN_BITFIELD( 6, 11) ; //!< CDEF UV Strength[5]
uint32_t CdefUvStrength6 : __CODEGEN_BITFIELD(12, 17) ; //!< CDEF UV Strength[6]
uint32_t CdefUvStrength7 : __CODEGEN_BITFIELD(18, 23) ; //!< CDEF UV Strength[7]
uint32_t Reserved280 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved
};
uint32_t Value;
} DW8;
union
{
struct
{
uint32_t SuperResUpscaledFrameWidthMinus1 : __CODEGEN_BITFIELD( 0, 15) ; //!< Super-Res Upscaled Frame Width Minus1
uint32_t SuperResDenom : __CODEGEN_BITFIELD(16, 20) ; //!< Super-Res Denom
uint32_t HorzSuperResEnableFlag : __CODEGEN_BITFIELD(21, 21) ; //!< Horz Super-Res Enable Flag
uint32_t Reserved310 : __CODEGEN_BITFIELD(22, 31) ; //!< Reserved
};
uint32_t Value;
} DW9;
union
{
struct
{
uint32_t FrameLoopRestorationFilterTypeForLumaY : __CODEGEN_BITFIELD( 0, 1) ; //!< Frame Loop Restoration Filter Type for Luma Y
uint32_t FrameLoopRestorationFilterTypeForChromaU : __CODEGEN_BITFIELD( 2, 3) ; //!< Frame Loop Restoration Filter Type for Chroma U
uint32_t FrameLoopRestorationFilterTypeForChromaV : __CODEGEN_BITFIELD( 4, 5) ; //!< Frame Loop Restoration Filter Type for Chroma V
uint32_t Reserved326 : __CODEGEN_BITFIELD( 6, 7) ; //!< Reserved
uint32_t LoopRestorationUnitSizeForLumaY : __CODEGEN_BITFIELD( 8, 9) ; //!< Loop Restoration Unit Size for Luma Y
uint32_t UseSameLoopRestorationUnitSizeForChromasUvFlag : __CODEGEN_BITFIELD(10, 10) ; //!< Use Same Loop Restoration Unit Size for Chromas UV Flag
uint32_t Reserved331 : __CODEGEN_BITFIELD(11, 31) ; //!< Reserved
};
uint32_t Value;
} DW10;
union
{
struct
{
uint32_t LumaPlaneXStepQn : __CODEGEN_BITFIELD( 0, 15) ; //!< Luma Plane x_step_qn
uint32_t Reserved368 : __CODEGEN_BITFIELD(16, 31) ; //!< Reserved (for higher precision of x_step_qn)
};
uint32_t Value;
} DW11;
union
{
struct
{
uint32_t LumaPlaneX0Qn : __CODEGEN_BITFIELD( 0, 31) ; //!< Luma Plane x0_qn
};
uint32_t Value;
} DW12;
union
{
struct
{
uint32_t ChromaPlaneXStepQn : __CODEGEN_BITFIELD( 0, 15) ; //!< Chroma Plane x_step_qn
uint32_t Reserved368 : __CODEGEN_BITFIELD(16, 31) ; //!< Reserved (for higher precision of x_step_qn)
};
uint32_t Value;
} DW13;
union
{
struct
{
uint32_t ChromaPlaneX0Qn : __CODEGEN_BITFIELD( 0, 31) ; //!< Chroma Plane x0_qn
};
uint32_t Value;
} DW14;
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPINLOOPFILTERSTATE = 51, //!< No additional details
};
//! \brief MEDIA_INSTRUCTION_OPCODE
//! \details
//! Codec/Engine Name = AV1 = 3h
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_INLOOP_FILTER_STATE_CMD();
static const size_t dwSize = 15;
static const size_t byteSize = 60;
};
//!
//! \brief AVP_INTER_PRED_STATE
//! \details
//! The AVP Pipeline is selected with the Media Instruction Opcode "8h" for
//! all AVP Commands. Each AVP command has assigned a media instruction
//! command as defined in DWord 0, BitField 22:16.
//! AVP supports a 8-reference frames display buffer. But at any given frame
//! being decoded, only up to 7reference frames out of the 8 can be active.
//! There are also further constraints on which of these 7frames can be used
//! for forward and backward reference in the compound mode.
//! For each inter-codedtile, this command is issued only once.
//!
struct AVP_INTER_PRED_STATE_CMD
{
union
{
struct
{
uint32_t DwordLength : __CODEGEN_BITFIELD( 0, 11) ; //!< DWORD_LENGTH
uint32_t Reserved12 : __CODEGEN_BITFIELD(12, 15) ; //!< Reserved
uint32_t MediaInstructionCommand : __CODEGEN_BITFIELD(16, 22) ; //!< MEDIA_INSTRUCTION_COMMAND
uint32_t MediaInstructionOpcode : __CODEGEN_BITFIELD(23, 26) ; //!< MEDIA_INSTRUCTION_OPCODE
uint32_t PipelineType : __CODEGEN_BITFIELD(27, 28) ; //!< PIPELINE_TYPE
uint32_t CommandType : __CODEGEN_BITFIELD(29, 31) ; //!< COMMAND_TYPE
};
uint32_t Value;
} DW0;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences00 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[0][0]
uint32_t SavedOrderHintsForAllReferences01 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[0][1]
uint32_t SavedOrderHintsForAllReferences02 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[0][2]
uint32_t SavedOrderHintsForAllReferences03 : __CODEGEN_BITFIELD(24, 31) ; //!< Saved Order Hints for All References[0][3]
};
uint32_t Value;
} DW1;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences04 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[0][4]
uint32_t SavedOrderHintsForAllReferences05 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[0][5]
uint32_t SavedOrderHintsForAllReferences06 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[0][6]
uint32_t ActiveReferenceBitmaskForMotionFieldProjection : __CODEGEN_BITFIELD(24, 31) ; //!< Active Reference Bitmask for Motion Field Projection
};
uint32_t Value;
} DW2;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences10 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[1][0]
uint32_t SavedOrderHintsForAllReferences11 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[1][1]
uint32_t SavedOrderHintsForAllReferences12 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[1][2]
uint32_t SavedOrderHintsForAllReferences13 : __CODEGEN_BITFIELD(24, 31) ; //!< Saved Order Hints for All References[1][3]
};
uint32_t Value;
} DW3;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences14 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[1][4]
uint32_t SavedOrderHintsForAllReferences15 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[1][5]
uint32_t SavedOrderHintsForAllReferences16 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[1][6]
uint32_t Reserved152 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved
};
uint32_t Value;
} DW4;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences20 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[2][0]
uint32_t SavedOrderHintsForAllReferences21 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[2][1]
uint32_t SavedOrderHintsForAllReferences22 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[2][2]
uint32_t SavedOrderHintsForAllReferences23 : __CODEGEN_BITFIELD(24, 31) ; //!< Saved Order Hints for All References[2][3]
};
uint32_t Value;
} DW5;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences24 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[2][4]
uint32_t SavedOrderHintsForAllReferences25 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[2][5]
uint32_t SavedOrderHintsForAllReferences26 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[2][6]
uint32_t Reserved216 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved
};
uint32_t Value;
} DW6;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences30 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[3][0]
uint32_t SavedOrderHintsForAllReferences31 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[3][1]
uint32_t SavedOrderHintsForAllReferences32 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[3][2]
uint32_t SavedOrderHintsForAllReferences33 : __CODEGEN_BITFIELD(24, 31) ; //!< Saved Order Hints for All References[3][3]
};
uint32_t Value;
} DW7;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences34 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[3][4]
uint32_t SavedOrderHintsForAllReferences35 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[3][5]
uint32_t SavedOrderHintsForAllReferences36 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[3][6]
uint32_t Reserved280 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved
};
uint32_t Value;
} DW8;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences40 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[4][0]
uint32_t SavedOrderHintsForAllReferences41 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[4][1]
uint32_t SavedOrderHintsForAllReferences42 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[4][2]
uint32_t SavedOrderHintsForAllReferences43 : __CODEGEN_BITFIELD(24, 31) ; //!< Saved Order Hints for All References[4][3]
};
uint32_t Value;
} DW9;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences44 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[4][4]
uint32_t SavedOrderHintsForAllReferences45 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[4][5]
uint32_t SavedOrderHintsForAllReferences46 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[4][6]
uint32_t Reserved344 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved
};
uint32_t Value;
} DW10;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences50 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[5][0]
uint32_t SavedOrderHintsForAllReferences51 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[5][1]
uint32_t SavedOrderHintsForAllReferences52 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[5][2]
uint32_t SavedOrderHintsForAllReferences53 : __CODEGEN_BITFIELD(24, 31) ; //!< Saved Order Hints for All References[5][3]
};
uint32_t Value;
} DW11;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences54 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[5][4]
uint32_t SavedOrderHintsForAllReferences55 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[5][5]
uint32_t SavedOrderHintsForAllReferences56 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[5][6]
uint32_t Reserved408 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved
};
uint32_t Value;
} DW12;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences60 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[6][0]
uint32_t SavedOrderHintsForAllReferences61 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[6][1]
uint32_t SavedOrderHintsForAllReferences62 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[6][2]
uint32_t SavedOrderHintsForAllReferences63 : __CODEGEN_BITFIELD(24, 31) ; //!< Saved Order Hints for All References[6][3]
};
uint32_t Value;
} DW13;
union
{
struct
{
uint32_t SavedOrderHintsForAllReferences64 : __CODEGEN_BITFIELD( 0, 7) ; //!< Saved Order Hints for All References[6][4]
uint32_t SavedOrderHintsForAllReferences65 : __CODEGEN_BITFIELD( 8, 15) ; //!< Saved Order Hints for All References[6][5]
uint32_t SavedOrderHintsForAllReferences66 : __CODEGEN_BITFIELD(16, 23) ; //!< Saved Order Hints for All References[6][6]
uint32_t Reserved472 : __CODEGEN_BITFIELD(24, 31) ; //!< Reserved
};
uint32_t Value;
} DW14;
//! \name Local enumerations
enum MEDIA_INSTRUCTION_COMMAND
{
MEDIA_INSTRUCTION_COMMAND_AVPINTERPREDSTATE = 18, //!< No additional details
};
//! \brief MEDIA_INSTRUCTION_OPCODE
//! \details
//! Codec/Engine Name = AVP = 3h
enum MEDIA_INSTRUCTION_OPCODE
{
MEDIA_INSTRUCTION_OPCODE_CODECENGINENAME = 3, //!< No additional details
};
enum PIPELINE_TYPE
{
PIPELINE_TYPE_UNNAMED2 = 2, //!< No additional details
};
enum COMMAND_TYPE
{
COMMAND_TYPE_PARALLELVIDEOPIPE = 3, //!< No additional details
};
//! \name Initializations
//! \brief Explicit member initialization function
AVP_INTER_PRED_STATE_CMD();
static const size_t dwSize = 15;
static const size_t byteSize = 60;
};
};
#pragma pack()
#endif // __MHW_AVP_HWCMD_G12_H__