blob: c237da795555f7d9086923f3ef38015ae8dc2fc7 [file] [log] [blame]
/*
* Copyright (c) 2014-2017, 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_vebox_g10_X.h
//! \brief Defines functions for constructing vebox commands on Gen10-based platforms
#ifndef __MHW_VEBOX_G10_X_H__
#define __MHW_VEBOX_G10_X_H__
#include "mhw_vebox_generic.h"
#include "mhw_vebox_hwcmd_g10_X.h"
const MHW_VEBOX_SETTINGS g_Vebox_Settings_g10 =
{
MHW_MAX_VEBOX_STATES, //!< uiNumInstances
MHW_SYNC_SIZE, //!< uiSyncSize
MHW_PAGE_SIZE, //!< uiDndiStateSize
MHW_PAGE_SIZE, //!< uiIecpStateSize
MHW_PAGE_SIZE * 2, //!< uiGamutStateSize
MHW_PAGE_SIZE, //!< uiVertexTableSize
MHW_PAGE_SIZE, //!< uiCapturePipeStateSize
MHW_PAGE_SIZE * 2, //!< uiGammaCorrectionStateSize
0 //!< uiHdrStateSize
};
class MhwVeboxInterfaceG10 : public MhwVeboxInterfaceGeneric<mhw_vebox_g10_X>
{
public:
MhwVeboxInterfaceG10(
PMOS_INTERFACE pInputInterface);
virtual ~MhwVeboxInterfaceG10() { MHW_FUNCTION_ENTER; }
MOS_STATUS VeboxAdjustBoundary(
PMHW_VEBOX_SURFACE_PARAMS pSurfaceParam,
uint32_t *pdwSurfaceWidth,
uint32_t *pdwSurfaceHeight,
bool bDIEnable);
MOS_STATUS AddVeboxState(
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_VEBOX_STATE_CMD_PARAMS pVeboxStateCmdParams,
bool bUseCmBuffer);
MOS_STATUS AddVeboxDiIecp(
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_VEBOX_DI_IECP_CMD_PARAMS pVeboxDiIecpCmdParams);
MOS_STATUS AddVeboxDndiState(
PMHW_VEBOX_DNDI_PARAMS pVeboxDndiParams);
MOS_STATUS AddVeboxGamutState(
PMHW_VEBOX_IECP_PARAMS pVeboxIecpParams,
PMHW_VEBOX_GAMUT_PARAMS pVeboxGamutParams);
MOS_STATUS AddVeboxIecpState(
PMHW_VEBOX_IECP_PARAMS pVeboxIecpParams);
MOS_STATUS AddVeboxIecpAceState(
PMHW_VEBOX_IECP_PARAMS pVeboxIecpParams);
MOS_STATUS SetVeboxIecpStateSTE(
mhw_vebox_g10_X::VEBOX_STD_STE_STATE_CMD *pVeboxStdSteState,
PMHW_COLORPIPE_PARAMS pColorPipeParams)
{
MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
MHW_FUNCTION_ENTER;
MHW_CHK_NULL(pVeboxStdSteState);
MHW_CHK_NULL(pColorPipeParams);
MhwVeboxInterfaceGeneric<mhw_vebox_g10_X>::SetVeboxIecpStateSTE(pVeboxStdSteState, pColorPipeParams);
// Enable Skin Score Output surface to be written by Vebox
pVeboxStdSteState->DW1.StdScoreOutput = pColorPipeParams->bEnableLACE && pColorPipeParams->LaceParams.bSTD;
finish:
return eStatus;
}
//!
//! \brief Add VEBOX Scalar States for Gen10+
//! \details Add vebox scalar states
//! \param [in] pVeboxScalarParams
//! Pointer to VEBOX Scalar State Params
//! \return MOS_STATUS
//!
MOS_STATUS AddVeboxScalarState(
PMHW_VEBOX_SCALAR_PARAMS pVeboxScalarParams);
MOS_STATUS AddVeboxSurfaceControlBits(
PMHW_VEBOX_SURFACE_CNTL_PARAMS pVeboxSurfCntlParams,
uint32_t *pSurfCtrlBits);
private:
uint32_t m_BT2020InvPixelValue[256];
uint32_t m_BT2020FwdPixelValue[256];
uint32_t m_BT2020InvGammaLUT[256];
uint32_t m_BT2020FwdGammaLUT[256];
//!
//! \brief Set Vebox Iecp State Back-End CSC
//! \details Set Back-End CSC part of the VEBOX IECP States
//! \param [in] pVeboxIecpState
//! Pointer to VEBOX IECP States
//! \param [in] pVeboxIecpParams
//! Pointer to VEBOX IECP State Params
//! \param [in] bEnableFECSC
//! Flag to enable FECSC
//! \return void
//!
void SetVeboxIecpStateBecsc(
mhw_vebox_g10_X::VEBOX_IECP_STATE_CMD *pVeboxIecpState,
PMHW_VEBOX_IECP_PARAMS pVeboxIecpParams,
bool bEnableFECSC);
//!
//! \brief Manual mode H2S
//! \details Manual mode H2S
// Based on WW23'16 algorithm design.
//! \param [in] pVeboxIecpParams
//! Pointer to VEBOX IECP State Params
//! \param [in] pVeboxGamutParams
//! Pointer to VEBOX Gamut State Params
//! \return MOS_STATUS
//!
MOS_STATUS VeboxInterface_H2SManualMode(
PMHW_VEBOX_HEAP pVeboxHeapInput,
PMHW_VEBOX_IECP_PARAMS pVeboxIecpParams,
PMHW_VEBOX_GAMUT_PARAMS pVeboxGamutParams);
//!
//! \brief Back end CSC setting, BT2020 YUV Full/Limited to BT2020 RGB Full (G10 +)
//! \details Back end CSC setting, BT2020 YUV Full/Limited to BT2020 RGB Full
//! \param [in] pVeboxIecpParams
//! Pointer to VEBOX IECP State Params
//! \param [in] pVeboxGamutParams
//! Pointer to VEBOX Gamut State Params
//! \return MOS_STATUS
//!
MOS_STATUS VeboxInterface_BT2020YUVToRGB(
PMHW_VEBOX_HEAP pVeboxHeapInput,
PMHW_VEBOX_IECP_PARAMS pVeboxIecpParams,
PMHW_VEBOX_GAMUT_PARAMS pVeboxGamutParams);
//!
//! \brief init VEBOX IECP States
//! \details init Vebox IECP states STD/E, ACE, TCC, Gamut
//! \param [in] pVeboxIecpStateCmd
//! Pointer to Vebox Interface Structure
//! \return viod
//!
void IecpStateInitialization(
mhw_vebox_g10_X::VEBOX_IECP_STATE_CMD *pVeboxIecpState);
MOS_STATUS AdjustBoundary(
PMHW_VEBOX_SURFACE_PARAMS pSurfaceParam,
uint32_t *pdwSurfaceWidth,
uint32_t *pdwSurfaceHeight,
bool bDIEnable);
void SetVeboxSurfaces(
PMHW_VEBOX_SURFACE_PARAMS pSurfaceParam,
PMHW_VEBOX_SURFACE_PARAMS pDerivedSurfaceParam,
PMHW_VEBOX_SURFACE_PARAMS pSkinScoreSurfaceParam,
mhw_vebox_g10_X::VEBOX_SURFACE_STATE_CMD *pVeboxSurfaceState,
bool bIsOutputSurface,
bool bDIEnable);
};
#endif