1 /*===================== begin_copyright_notice ================================== 2 3 # Copyright (c) 2022, Intel Corporation 4 5 # Permission is hereby granted, free of charge, to any person obtaining a 6 # copy of this software and associated documentation files (the "Software"), 7 # to deal in the Software without restriction, including without limitation 8 # the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 # and/or sell copies of the Software, and to permit persons to whom the 10 # Software is furnished to do so, subject to the following conditions: 11 12 # The above copyright notice and this permission notice shall be included 13 # in all copies or substantial portions of the Software. 14 15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 19 # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 20 # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 21 # OTHER DEALINGS IN THE SOFTWARE. 22 23 ======================= end_copyright_notice ==================================*/ 24 //! 25 //! \file mhw_vdbox_vdenc_impl_xe_lpm_plus_base.h 26 //! \brief MHW VDBOX VDENC interface common base for Xe_LPM_plus+ platforms 27 //! \details 28 //! 29 30 #ifndef __MHW_VDBOX_VDENC_IMPL_XE_LPM_PLUS_BASE_H__ 31 #define __MHW_VDBOX_VDENC_IMPL_XE_LPM_PLUS_BASE_H__ 32 33 #include "mhw_vdbox_vdenc_impl.h" 34 #include "mos_interface.h" 35 36 namespace mhw 37 { 38 namespace vdbox 39 { 40 namespace vdenc 41 { 42 namespace xe_lpm_plus_base 43 { 44 template <typename cmd_t> 45 class BaseImplGeneric : public vdenc::Impl<cmd_t> 46 { 47 protected: 48 using base_t = vdenc::Impl<cmd_t>; 49 BaseImplGeneric(PMOS_INTERFACE osItf)50 BaseImplGeneric(PMOS_INTERFACE osItf) : base_t(osItf){}; 51 _MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_MODE_SELECT)52 _MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_MODE_SELECT) 53 { 54 _MHW_SETCMD_CALLBASE(VDENC_PIPE_MODE_SELECT); 55 56 #define DO_FIELDS() \ 57 DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT22, params.VdencPipeModeSelectPar2); \ 58 DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT24, params.VdencPipeModeSelectPar3); \ 59 DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT26, params.VdencPipeModeSelectPar4); \ 60 DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT28, params.VdencPipeModeSelectPar5); \ 61 DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT16, params.VdencPipeModeSelectPar6); \ 62 DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT18, params.VdencPipeModeSelectPar7); \ 63 DO_FIELD(DW4, VDENC_PIPE_MODE_SELECT_DW4_BIT12, 0); 64 65 #include "mhw_hwcmd_process_cmdfields.h" 66 } 67 _MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_BUF_ADDR_STATE)68 _MHW_SETCMD_OVERRIDE_DECL(VDENC_PIPE_BUF_ADDR_STATE) 69 { 70 _MHW_SETCMD_CALLBASE(VDENC_PIPE_BUF_ADDR_STATE); 71 72 { 73 MHW_RESOURCE_PARAMS resourceParams = {}; 74 resourceParams.HwCommandType = MOS_VDENC_PIPE_BUF_ADDR; 75 if (!Mos_ResourceIsNull(params.vdencPipeBufAddrStatePar0)) 76 { 77 resourceParams.presResource = params.vdencPipeBufAddrStatePar0; 78 resourceParams.dwOffset = 0; 79 resourceParams.pdwCmd = (uint32_t *)&(cmd.VDENC_PIPE_BUF_ADDR_STATE_DW71_73.LowerAddress); 80 resourceParams.dwLocationInCmd = 71; 81 resourceParams.bIsWritable = false; 82 83 cmd.VDENC_PIPE_BUF_ADDR_STATE_DW71_73.PictureFields.DW0.MemoryCompressionEnable = 0; 84 cmd.VDENC_PIPE_BUF_ADDR_STATE_DW71_73.PictureFields.DW0.CompressionType = 0; 85 InitMocsParams(resourceParams, &cmd.VDENC_PIPE_BUF_ADDR_STATE_DW71_73.PictureFields.DW0.Value, 1, 6); 86 87 MHW_MI_CHK_STATUS(this->AddResourceToCmd( 88 this->m_osItf, 89 this->m_currentCmdBuf, 90 &resourceParams)); 91 } 92 if (!Mos_ResourceIsNull(params.vdencPipeBufAddrStatePar1)) 93 { 94 resourceParams.presResource = params.vdencPipeBufAddrStatePar1; 95 resourceParams.dwOffset = 0; 96 resourceParams.pdwCmd = (uint32_t *)&(cmd.VDENC_PIPE_BUF_ADDR_STATE_DW74_76.LowerAddress); 97 resourceParams.dwLocationInCmd = 74; 98 resourceParams.bIsWritable = true; 99 100 cmd.VDENC_PIPE_BUF_ADDR_STATE_DW74_76.PictureFields.DW0.MemoryCompressionEnable = 0; 101 cmd.VDENC_PIPE_BUF_ADDR_STATE_DW74_76.PictureFields.DW0.CompressionType = 0; 102 InitMocsParams(resourceParams, &cmd.VDENC_PIPE_BUF_ADDR_STATE_DW74_76.PictureFields.DW0.Value, 1, 6); 103 104 MHW_MI_CHK_STATUS(this->AddResourceToCmd( 105 this->m_osItf, 106 this->m_currentCmdBuf, 107 &resourceParams)); 108 } 109 } 110 111 return MOS_STATUS_SUCCESS; 112 } 113 MEDIA_CLASS_DEFINE_END(mhw__vdbox__vdenc__xe_lpm_plus_base__BaseImplGeneric) 114 }; 115 } // namespace xe_lpm_plus_base 116 } // namespace vdenc 117 } // namespace vdbox 118 } // namespace mhw 119 120 #endif // __MHW_VDBOX_VDENC_IMPL_XE_LPM_PLUS_BASE_H__ 121