/* * Copyright (c) 2009-2022, 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 renderhal.h //! \brief //! //! //! \file renderhal.h //! \brief Render Engine Interfaces shared across platforms //! \details Platform Independent Hardware Interfaces //! #ifndef __RENDERHAL_H__ #define __RENDERHAL_H__ #include "mos_os.h" // Interface to OS functions #include "mhw_state_heap.h" #include "mhw_render.h" #include "mhw_memory_pool.h" #include "media_perf_profiler.h" #include "frame_tracker.h" #include "media_common_defs.h" #include "surface_state_heap_mgr.h" class XRenderHal_Platform_Interface; //------------------------------------------------------------------------------ // Macros specific to RenderHal sub-comp //------------------------------------------------------------------------------ #define MHW_RENDERHAL_ASSERT(_expr) \ MOS_ASSERT(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _expr) #define MHW_RENDERHAL_ASSERTMESSAGE(_message, ...) \ MOS_ASSERTMESSAGE(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _message, ##__VA_ARGS__) #define MHW_RENDERHAL_NORMALMESSAGE(_message, ...) \ MOS_NORMALMESSAGE(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _message, ##__VA_ARGS__) #define MHW_RENDERHAL_VERBOSEMESSAGE(_message, ...) \ MOS_VERBOSEMESSAGE(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _message, ##__VA_ARGS__) #define MHW_RENDERHAL_FUNCTION_ENTER \ MOS_FUNCTION_ENTER(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL) #define MHW_RENDERHAL_FUNCTION_EXIT \ MOS_FUNCTION_EXIT(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, eStatus) #define MHW_RENDERHAL_CHK_STATUS(_stmt) \ MOS_CHK_STATUS(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _stmt) #define MHW_RENDERHAL_CHK_STATUS_RETURN(_stmt) \ MOS_CHK_STATUS_RETURN(MOS_COMPONENT_VP, MOS_VP_SUBCOMP_PUBLIC, _stmt) #define MHW_RENDERHAL_CHK_STATUS_MESSAGE(_stmt, _message, ...) \ MOS_CHK_STATUS_MESSAGE(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _stmt, _message, ##__VA_ARGS__) #define MHW_RENDERHAL_CHK_NULL(_ptr) \ MOS_CHK_NULL(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _ptr) #define MHW_RENDERHAL_CHK_NULL_NO_STATUS(_ptr) \ MOS_CHK_NULL_NO_STATUS(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _ptr) #define MHW_RENDERHAL_CHK_NULL_NO_STATUS_RETURN(_ptr) \ MOS_CHK_NULL_NO_STATUS_RETURN(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _ptr) #define MHW_RENDERHAL_CHK_NULL_RETURN(_ptr) \ MOS_CHK_NULL_RETURN(MOS_COMPONENT_CM, MOS_CM_SUBCOMP_RENDERHAL, _ptr) #define MHW_RENDERHAL_UNUSED(x) \ MOS_UNUSED(x) //! //! \brief Kernel allocation control //! #define RENDERHAL_KERNEL_LOAD_FAIL -1 #define RENDERHAL_KERNEL_ALLOCATION_FREE 0 // Kernel entry free #define RENDERHAL_KERNEL_ALLOCATION_USED 1 // Kernel entry in use #define RENDERHAL_KERNEL_ALLOCATION_LOCKED 2 // Kernel entry locked (no garbage collection) #define RENDERHAL_KERNEL_ALLOCATION_REMOVED 3 // Kernel entry in use, but no longer loaded in ISH to make room for others #define RENDERHAL_KERNEL_ALLOCATION_LOADING 4 // Kernel selected to be loaded (was stale or used) #define RENDERHAL_KERNEL_ALLOCATION_STALE 5 // Kernel memory block became invalid, needs to be reloaded //! //! \brief SSH defaults and limits //! #define RENDERHAL_SSH_INSTANCES 16 #define RENDERHAL_SSH_INSTANCES_MAX 64 #define RENDERHAL_SSH_BINDING_TABLES 1 #define RENDERHAL_SSH_BINDING_TABLES_MIN 1 #define RENDERHAL_SSH_BINDING_TABLES_MAX 16 #define RENDERHAL_SSH_BINDING_TABLE_ALIGN 64 #define RENDERHAL_SSH_SURFACE_STATES 40 #define RENDERHAL_SSH_SURFACE_STATES_MIN 16 #define RENDERHAL_SSH_SURFACE_STATES_MAX 256 #define RENDERHAL_SSH_SURFACES_PER_BT 64 #define RENDERHAL_SSH_SURFACES_PER_BT_MIN 4 #define RENDERHAL_SSH_SURFACES_PER_BT_MAX 256 //! //! \brief Default size of area for sync, debugging, performance collecting //! #define RENDERHAL_SYNC_SIZE_MIN 128 #define RENDERHAL_SYNC_SIZE_MAX 4096 #define RENDERHAL_SYNC_SIZE 128 //! //! \brief Default number of media states (Dynamic GSH mode) //! #define RENDERHAL_MEDIA_STATES 16 //! //! \brief Default number of media IDs //! #define RENDERHAL_MEDIA_IDS 16 //! //! \brief Max URB Size //! #define RENDERHAL_URB_SIZE_MAX 2048 //! //! \brief Interface Descriptor Entries //! #define RENDERHAL_INTERFACE_DESCRIPTOR_ENTRIES_MAX 64 //! //! \brief Max URB Entry Size //! #define RENDERHAL_URB_ENTRY_SIZE_MAX (RENDERHAL_URB_SIZE_MAX - RENDERHAL_INTERFACE_DESCRIPTOR_ENTRIES_MAX) //! //! \brief Max CURBE Allocation Size //! #define RENDERHAL_CURBE_SIZE_MAX (RENDERHAL_URB_SIZE_MAX - RENDERHAL_INTERFACE_DESCRIPTOR_ENTRIES_MAX) //! //! \brief Max Samplers //! #define RENDERHAL_SAMPLERS_AVS_MAX 8 //! //! \brief Default Samplers //! #define RENDERHAL_SAMPLERS 16 #define RENDERHAL_SAMPLERS_VA 8 //! //! \brief Default CURBE size in GSH //! Use the size of composition kernel static param since it's the largest of all //! #define RENDERHAL_CURBE_SIZE 832 // MOS ALIGN CEIL(sizeof(GPGPU_WALKER_ISTAB_GMC_STATIC_DATA_G8), RENDERHAL_URB_BLOCK_ALIGN) //! //! \brief Default number of kernels that may be cached in GSH //! #define RENDERHAL_KERNEL_COUNT 32 //! //! \brief Max number of kernels cached in GSH //! #define RENDERHAL_KERNEL_COUNT_MIN 2 //! //! \brief Default kernel heap size //! #define RENDERHAL_KERNEL_HEAP 2097152 //! //! \brief Min kernel heap size //! #define RENDERHAL_KERNEL_HEAP_MIN 65536 #define RENDERHAL_KERNEL_HEAP_MAX 2097152 //! //! \brief Default kernel block size (granularity for kernel allocation) //! #define RENDERHAL_KERNEL_BLOCK_SIZE 65536 //! //! \brief Default ISA ASM Debug Surface BTI //! #define RENDERHAL_ISA_ASM_SURFACE_BTI_DEFAULT 39 //! //! \brief Min kernel block size //! #define RENDERHAL_KERNEL_BLOCK_MIN 1024 #define RENDERHAL_KERNEL_BLOCK_MAX 65536 //! //! \brief Max number of Media Threads //! #define RENDERHAL_USE_MEDIA_THREADS_MAX 0 //! //! \brief Number and size of palettes //! #define RENDERHAL_PALETTE_COUNT 2 #define RENDERHAL_PALETTE_MAX 2 #define RENDERHAL_PALETTE_ENTRIES 256 #define RENDERHAL_PALETTE_ENTRIES_MAX 256 //! //! \brief SIP Size //! #define RENDERHAL_MAX_SIP_SIZE 0x4000 //! //! \brief Number of chroma keys //! #define RENDERHAL_CHROMA_KEY_COUNT 4 #define RENDERHAL_CHROMA_KEY_MAX 4 //! //! \brief Alignment //! #define RENDERHAL_KERNEL_BLOCK_ALIGN 64 #define RENDERHAL_URB_BLOCK_ALIGN 64 #define RENDERHAL_SYNC_BLOCK_ALIGN 128 #define RENDERHAL_CURBE_BLOCK_ALIGN 64 //! //! \brief Max number of Y_Uoffset size //! #define RENDERHAL_MAX_YV12_PLANE_Y_U_OFFSET_G9 16383 //! //! \brief Palette allocation id //! #define RENDERHAL_PALETTE_ID_ALLOCATE_ONLY -2 // Allocate but don't load palette #define RENDERHAL_PALETTE_ID_ALLOCATE_LOAD -1 // Allocate and load palette //! //! \brief Hw Interface defaults //! #define RENDERHAL_TIMEOUT_MS_DEFAULT 100 #define RENDERHAL_EVENT_TIMEOUT_MS 5 //! //! \brief Sampler State Indices //! #define RENDERHAL_SAMPLER_Y 1 #define RENDERHAL_SAMPLER_U 2 #define RENDERHAL_SAMPLER_V 3 #define RENDERHAL_SAMPLER_8x8_AVS_Y 4 #define RENDERHAL_SAMPLER_8x8_AVS_U 8 #define RENDERHAL_SAMPLER_8x8_AVS_V 12 //*----------------------------------------------------------------------------- //| MMIO register offsets used for the EU debug support //*----------------------------------------------------------------------------- #define MEDIASTATE_AVS_MAX_DERIVATIVE_4_PIXELS 7 #define MEDIASTATE_AVS_MAX_DERIVATIVE_8_PIXELS 20 #define MEDIASTATE_AVS_TRANSITION_AREA_4_PIXELS 4 #define MEDIASTATE_AVS_TRANSITION_AREA_8_PIXELS 5 enum GFX_COMMON_TOKEN_SUBOPCODE { GFXSUBOP_BINDING_TABLE_STATE_TOKEN = 0xFE, GFXSUBOP_SURFACE_STATE_TOKEN = 0xFF }; enum MEDIASTATE_AVS_SHARPNESS_LEVEL { MEDIASTATE_AVS_SHARPNESS_LEVEL_SMOOTH = 0, MEDIASTATE_AVS_SHARPNESS_LEVEL_SHARP = 255 }; // Render chroma siting vertical value enum CHROMA_SITING_VDIRECTION { CHROMA_SITING_VDIRECTION_0 = 0x0, CHROMA_SITING_VDIRECTION_1_4 = 0x1, CHROMA_SITING_VDIRECTION_1_2 = 0x2, CHROMA_SITING_VDIRECTION_3_4 = 0x3, CHROMA_SITING_VDIRECTION_1 = 0x4 }; // Render chroma siting horizontal value enum CHROMA_SITING_UDIRECTION { CHROMA_SITING_UDIRECTION_LEFT = 0x0, CHROMA_SITING_UDIRECTION_CENTER = 0x1 }; enum GFX3DSTATE_TILEWALK { GFX3DSTATE_TILEWALK_XMAJOR = 0, GFX3DSTATE_TILEWALK_YMAJOR = 1 }; enum MEDIA_STATE_DEBUG_COUNTER_CONTROL { MEDIASTATE_DEBUG_COUNTER_FREE_RUNNING = 0, MEDIASTATE_DEBUG_COUNTER_FROZEN = 1, MEDIASTATE_DEBUG_COUNTER_INITIALIZED_ONCE = 2, MEDIASTATE_DEBUG_COUNTER_INITIALIZED_ALWAYS = 3 }; enum MEDIASTATE_BINDING_TABLE_STATE_TYPE { MEDIASTATE_BTS_DEFAULT_TYPE = 0, MEDIASTATE_BTS_DI_SAMPLE8x8_VME_TYPE = 1 }; struct SURFACE_STATE_TOKEN_COMMON { // DWORD 0 union { struct { uint32_t Length : 8; // OP_LENGTH uint32_t : 8; uint32_t InstructionSubOpcode : 8; // GFX3DSTATE_PIPELINED_SUBOPCODE uint32_t InstructionOpcode : 3; // GFX_OPCODE uint32_t InstructionPipeLine : 2; // INSTRUCTION_PIPELINE uint32_t InstructionType : 2; // INSTRUCTION_TYPE uint32_t Token : 1; // bool }; // DriverID for IMOLA patching struct { uint32_t DriverID; }; struct { uint32_t Value; }; } DW0; // DWORD 1 union { struct { uint32_t SurfaceStateHeapOffset : 16; // U16 32-byte aligned uint32_t SurfaceAllocationIndex : 16; // U16 }; struct { uint32_t Value; }; } DW1; // DWORD 2 union { struct { uint32_t SurfaceOffset : 32; }; struct { uint32_t Value; }; } DW2; // DWORD 3 union { struct { uint32_t RenderTargetEnable : 1; // bool uint32_t YUVPlane : 2; // U2 uint32_t SurfaceStateType : 1; // U1 uint32_t: 28; }; struct { uint32_t Value; }; } DW3; // DWORD 4 union { struct { uint32_t SurfaceBaseAddress; // SurfaceBaseAddress[31:12] }; struct { uint32_t Value; }; } DW4; // DWORD 5 union { struct { uint32_t SurfaceBaseAddress64 : BITFIELD_RANGE(0, 15); // SurfaceBaseAddress[47:32] uint32_t : BITFIELD_RANGE(16, 31); }; struct { uint32_t Value; }; } DW5; void* pResourceInfo; }; // Forward declarations typedef struct _RENDERHAL_SURFACE RENDERHAL_SURFACE, *PRENDERHAL_SURFACE; typedef struct _RENDERHAL_INTERFACE RENDERHAL_INTERFACE, *PRENDERHAL_INTERFACE; typedef struct _RENDERHAL_SURFACE_STATE_ENTRY *PRENDERHAL_SURFACE_STATE_ENTRY; typedef const struct _RENDERHAL_KERNEL_PARAM CRENDERHAL_KERNEL_PARAM, *PCRENDERHAL_KERNEL_PARAM; //! //! Structure RENDERHAL_SETTINGS //! \brief RenderHal Settings - creation parameters for RenderHal //! typedef struct _RENDERHAL_SETTINGS { int32_t iMediaStates; } RENDERHAL_SETTINGS, *PRENDERHAL_SETTINGS; //! //! Enum RENDERHAL_COMPONENT //! \brief RenderHal client component ID (for debugging/timing) //! typedef enum _RENDERHAL_COMPONENT { RENDERHAL_COMPONENT_UNKNOWN = 0, RENDERHAL_COMPONENT_COMP, RENDERHAL_COMPONENT_DNDI, RENDERHAL_COMPONENT_VEBOX, RENDERHAL_COMPONENT_CM, RENDERHAL_COMPONENT_PACKET, RENDERHAL_COMPONENT_16ALIGN, RENDERHAL_COMPONENT_FAST1TON, RENDERHAL_COMPONENT_HDR, RENDERHAL_COMPONENT_COUNT_BASE, RENDERHAL_COMPONENT_RENDER_COPY, RENDERHAL_COMPONENT_RESERVED_NUM = 16, RENDERHAL_COMPONENT_COUNT } RENDERHAL_COMPONENT; //! //! \brief Scaling Mode enum //! typedef enum _RENDERHAL_SCALING_MODE { RENDERHAL_SCALING_NEAREST, RENDERHAL_SCALING_BILINEAR, RENDERHAL_SCALING_AVS } RENDERHAL_SCALING_MODE; //! //! \brief Surface types enum //! IMPORTANT : SurfaceType_Layer[] must be updated to match this enum type //! typedef enum _RENDERHAL_SURFACE_TYPE { RENDERHAL_SURF_NONE = 0, RENDERHAL_SURF_IN_BACKGROUND, RENDERHAL_SURF_IN_PRIMARY, RENDERHAL_SURF_IN_SUBSTREAM, RENDERHAL_SURF_IN_REFERENCE, RENDERHAL_SURF_OUT_RENDERTARGET, RENDERHAL_SURF_TYPE_COUNT //!< Keep this line at the end } RENDERHAL_SURFACE_TYPE; //! //! \brief Batch buffer types enum //! typedef enum _RENDERHAL_BB_TYPE { RENDERHAL_BB_TYPE_UNKNOWN = 0, // Batch Buffer created by unknown client RENDERHAL_BB_TYPE_CM = 6, // Batch Buffer created by Media Development Framework (CM) component RENDERHAL_BB_TYPE_COUNT } RENDERHAL_BB_TYPE; //! //! \brief Sample Type enum //! typedef enum _RENDERHAL_SAMPLE_TYPE { RENDERHAL_SAMPLE_PROGRESSIVE, RENDERHAL_SAMPLE_SINGLE_TOP_FIELD, RENDERHAL_SAMPLE_SINGLE_BOTTOM_FIELD, RENDERHAL_SAMPLE_INTERLEAVED_EVEN_FIRST_TOP_FIELD, RENDERHAL_SAMPLE_INTERLEAVED_EVEN_FIRST_BOTTOM_FIELD, RENDERHAL_SAMPLE_INTERLEAVED_ODD_FIRST_TOP_FIELD, RENDERHAL_SAMPLE_INTERLEAVED_ODD_FIRST_BOTTOM_FIELD, RENDERHAL_SAMPLE_INVALID //!< Keep this line at the end } RENDERHAL_SAMPLE_TYPE; //! //! Structure RENDERHAL_GET_SURFACE_INFO //! \brief Structure to retrieve Surface Infomation Parameters //! typedef struct _RENDERHAL_GET_SURFACE_INFO { uint32_t ArraySlice; uint32_t MipSlice; MOS_S3D_CHANNEL S3dChannel; } RENDERHAL_GET_SURFACE_INFO, *PRENDERHAL_GET_SURFACE_INFO; //! //! \brief Structure of power control info //! typedef struct _RENDERHAL_POWEROPTION { uint16_t nSlice; //!< Number of slices to use: 0 (default), 1, 2... uint16_t nSubSlice; //!< Number of subslices to use: 0 (default), 1, 2... uint16_t nEU; //!< Number of EUs to use: 0 (default), 1, 2... } RENDERHAL_POWEROPTION, *PRENDERHAL_POWEROPTION; //! //! Structure RENDERHAL_SURFACE //! \brief RENDERHAL surface definition //! typedef struct _RENDERHAL_SURFACE { MOS_SURFACE OsSurface; //!< Surface provided by the client // Auxiliary rendering parameters RENDERHAL_SURFACE_TYPE SurfType; //!< Surface Type (context) RENDERHAL_SCALING_MODE ScalingMode; //!< Scaling Mode MHW_ROTATION Rotation; //!< Rotation Mode uint32_t ChromaSiting; //!< Chroma Siting // Src/Dst rectangles RECT rcSrc; //!< Source rectangle RECT rcDst; //!< Destination rectangle RECT rcMaxSrc; //!< Max source rectangle // Auxiliary VP parameters provided by client bool bDeinterlaceEnable; //!< Active Deinterlace messages bool bQueryVariance; //!< enable variance query bool bInterlacedScaling; //!< Interlaced scaling void *pDeinterlaceParams; //!< Pointer to Deinterlacing parameters RENDERHAL_SAMPLE_TYPE SampleType; //!< Interlaced/Progressive sample type int32_t iPaletteID; //! &samplerMap); int32_t (* pfnAllocateMediaID) ( PRENDERHAL_INTERFACE pRenderHal, int32_t iKernelAllocationID, int32_t iBindingTableID, int32_t iCurbeOffset, int32_t iCurbeLength, int32_t iCrsThrdConstDataLn, PMHW_GPGPU_WALKER_PARAMS pGpGpuWalkerParams); int32_t (* pfnGetMediaID) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_MEDIA_STATE pMediaState, PRENDERHAL_KRN_ALLOCATION pKernelAllocation); MOS_STATUS (* pfnSetupInterfaceDescriptor) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_MEDIA_STATE pMediaState, PRENDERHAL_KRN_ALLOCATION pKernelAllocation, PRENDERHAL_INTERFACE_DESCRIPTOR_PARAMS pInterfaceDescriptorParams); uint32_t (* pfnEncodeSLMSize)(PRENDERHAL_INTERFACE pRenderHal, uint32_t SLMSize); //--------------------------- // Kernels //--------------------------- int32_t (* pfnLoadKernel) ( PRENDERHAL_INTERFACE pRenderHal, PCRENDERHAL_KERNEL_PARAM pParameters, PMHW_KERNEL_PARAM pKernel, Kdll_CacheEntry *pKernelEntry); MOS_STATUS (* pfnUnloadKernel) ( PRENDERHAL_INTERFACE pRenderHal, int32_t iKernelAllocationID); void (* pfnResetKernels) ( PRENDERHAL_INTERFACE pRenderHal); void (* pfnTouchKernel) ( PRENDERHAL_INTERFACE pRenderHal, int32_t iKernelAllocationID); int32_t (* pfnGetKernelOffset) ( PRENDERHAL_INTERFACE pRenderHal, int32_t iKernelAllocationIndex); MOS_STATUS (* pfnUnregisterKernel) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_KRN_ALLOCATION pKernelAllocation); //--------------------------- // New Dynamic State Heap interfaces //--------------------------- MOS_STATUS(*pfnAssignSpaceInStateHeap)( uint32_t trackerIndex, FrameTrackerProducer *trackerProducer, HeapManager *heapManager, MemoryBlock *block, uint32_t size); PRENDERHAL_MEDIA_STATE (* pfnAssignDynamicState) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_DYNAMIC_MEDIA_STATE_PARAMS pParams, RENDERHAL_COMPONENT componentID); MOS_STATUS (* pfnReleaseDynamicState) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_MEDIA_STATE pMediaState); MOS_STATUS (* pfnSubmitDynamicState) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_MEDIA_STATE pMediaState); int32_t (* pfnAllocateDynamicMediaID) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_KRN_ALLOCATION pKernelAllocation, int32_t iBindingTableID, int32_t iCurbeOffset, int32_t iCurbeLength, int32_t iCrsThrdConstDataLn, PMHW_GPGPU_WALKER_PARAMS pGpGpuWalkerParams); PRENDERHAL_KRN_ALLOCATION (* pfnLoadDynamicKernel) ( PRENDERHAL_INTERFACE pRenderHal, PCRENDERHAL_KERNEL_PARAM pParameters, PMHW_KERNEL_PARAM pKernel, uint32_t *pdwLoaded); PRENDERHAL_KRN_ALLOCATION (* pfnSearchDynamicKernel) ( PRENDERHAL_INTERFACE pRenderHal, int32_t iKernelUniqueID, int32_t iCacheID); PRENDERHAL_KRN_ALLOCATION (* pfnAllocateDynamicKernel) ( PRENDERHAL_INTERFACE pRenderHal, int32_t iKernelUniqueID, int32_t iCacheID); MOS_STATUS (* pfnUnloadDynamicKernel) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_KRN_ALLOCATION pKernelAllocation); MOS_STATUS (* pfnRefreshDynamicKernels) ( PRENDERHAL_INTERFACE pRenderHal, uint32_t dwSpaceNeeded, uint32_t *pdwSizes, int32_t iCount); void (* pfnResetDynamicKernels) ( PRENDERHAL_INTERFACE pRenderHal); void (* pfnTouchDynamicKernel) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_KRN_ALLOCATION pKernelAllocation); MOS_STATUS (* pfnExpandKernelStateHeap)( PRENDERHAL_INTERFACE pRenderHal, uint32_t dwAdditionalKernelSpaceNeeded); //--------------------------- // HW interface configuration functions //--------------------------- MOS_STATUS (* pfnSetVfeStateParams) ( PRENDERHAL_INTERFACE pRenderHal, uint32_t dwDebugCounterControl, uint32_t dwMaximumNumberofThreads, uint32_t dwCURBEAllocationSize, uint32_t dwURBEntryAllocationSize, PMHW_VFE_SCOREBOARD pScoreboardParams); bool (* pfnGetMediaWalkerStatus) ( PRENDERHAL_INTERFACE pRenderHal); //--------------------------- // Command buffer programming functions //--------------------------- MOS_STATUS (* pfnSendStateBaseAddress) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); MOS_STATUS (* pfnSendMediaStates) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer, PMHW_WALKER_PARAMS pWalkerParams, PMHW_GPGPU_WALKER_PARAMS pGpGpuWalkerParams); MOS_STATUS (* pfnInitCommandBuffer) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer, PRENDERHAL_GENERIC_PROLOG_PARAMS pGenericPrologParams); MOS_STATUS (* pfnSendSurfaces) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); MOS_STATUS (* pfnSendSyncTag) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); MOS_STATUS (*pfnSendCscCoeffSurface) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer, PMOS_RESOURCE presCscCoeff, Kdll_CacheEntry *pKernelEntry); // Samplers and other states MOS_STATUS (*pfnGetSamplerOffsetAndPtr) ( PRENDERHAL_INTERFACE pRenderHal, int32_t iMediaID, int32_t iSamplerID, PMHW_SAMPLER_STATE_PARAM pSamplerParams, uint32_t *pdwSamplerOffset, void **ppSampler); MOS_STATUS (* pfnSendCurbeLoad) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); MOS_STATUS (* pfnSendMediaIdLoad) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); MOS_STATUS (* pfnSendChromaKey) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); MOS_STATUS (* pfnSendPalette) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); MOS_STATUS (* pfnSendSurfaceStateEntry) ( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer, PMHW_SURFACE_STATE_SEND_PARAMS pParams); MOS_STATUS (* pfnSetSurfaceStateToken)( PRENDERHAL_INTERFACE pRenderHal, PMHW_SURFACE_TOKEN_PARAMS pParams, void *pSurfaceStateToken); MOS_STATUS (* pfnSetSurfaceStateBuffer)( PRENDERHAL_INTERFACE pRenderHal, PMHW_RCS_SURFACE_PARAMS pParams, void *pSurfaceState); //----------------------------- // Slice Shutdown Mode function //----------------------------- void (* pfnSetSliceShutdownMode) ( PRENDERHAL_INTERFACE pRenderHal, bool bMode); //----------------------------- // General Slice Shut Down Mode function //----------------------------- void( *pfnSetPowerOptionMode ) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_POWEROPTION pMode); //----------------------------- // Enable Middle Batch Buffer Preemption //----------------------------- void (* pfnEnableGpgpuMiddleBatchBufferPreemption) ( PRENDERHAL_INTERFACE pRenderHal); //----------------------------- // Enable Middle Thread Preemption //----------------------------- void (* pfnEnableGpgpuMiddleThreadPreemption) ( PRENDERHAL_INTERFACE pRenderHal); //--------------------------- // Generic HAL Layer Commands and State Functions //--------------------------- void (* pfnConvertToNanoSeconds) ( PRENDERHAL_INTERFACE pRenderHal, uint64_t iTicks, uint64_t *piNs); MOS_STATUS (* pfnSendRcsStatusTag) ( PRENDERHAL_INTERFACE pRenderHal, // [in] Hardware interface PMOS_COMMAND_BUFFER pCmdBuffer); // [in] Command Buffer MOS_STATUS (* pfnSendTimingData) ( PRENDERHAL_INTERFACE pRenderHal, // [in] Hardware interface PMOS_COMMAND_BUFFER pCmdBuffer, // [in] Command Buffer bool bStartTime); // [in] Start Timestamp flag uint32_t (* pfnGetScratchSpaceSize)( PRENDERHAL_INTERFACE pRenderHal, // [in] Hardware interface uint32_t iPerThreadScratchSpaceSize); // [in] Per thread scrach space size bool (* pfnIs2PlaneNV12Needed) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_SURFACE pRenderHalSurface, RENDERHAL_SS_BOUNDARY Boundary); uint8_t (* pfnSetChromaDirection) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_SURFACE pRenderHalSurface); bool(*pfnPerThreadScratchSpaceStart2K) ( PRENDERHAL_INTERFACE pRenderHal); //--------------------------- // Overwrite L3 Cache control register //--------------------------- MOS_STATUS (* pfnEnableL3Caching) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_L3_CACHE_SETTINGS pCacheSettings); MOS_STATUS(*pfnSetCacheOverrideParams) ( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_L3_CACHE_SETTINGS pCacheSettings, bool bEnableSLM); //! //! \brief Get mmio registers address //! \details Get mmio registers address //! \return [out] PMHW_MI_MMIOREGISTERS* //! mmio registers got. //! PMHW_MI_MMIOREGISTERS GetMmioRegisters(); //----------------------------- //Platform related interface XRenderHal_Platform_Interface *pRenderHalPltInterface; } RENDERHAL_INTERFACE; //! //! \brief Functions //! //! //! \brief Init Interface //! \details Initializes Render Hal Interface structure, responsible for HW //! abstraction of Render Engine for MDF/VP //! \param PRENDERHAL_INTERFACE pRenderHal //! [in] Pointer to Hardware Interface Structure //! \param MhwCpInterface** ppCpInterface //! [in/out] Pointer of pointer to MHW CP Interface Structure, which //! is created during renderhal initialization //! \param PMOS_INTERFACE pOsInterface //! [in] Pointer to OS Interface Structure //! \return MOS_STATUS //! MOS_STATUS_UNKNOWN : Invalid parameters //! MOS_STATUS RenderHal_InitInterface( PRENDERHAL_INTERFACE pRenderHal, MhwCpInterface **ppCpInterface, PMOS_INTERFACE pOsInterface); //! //! \brief Get Pixels Per Sample //! \details Get Number of Pixels per Dataport Sample //! \param MOS_FORMAT format //! [in] Surface Format //! \param uint32_t *pdwPixelsPerSampleUV //! [in] Pointer to dwPixelsPerSampleUV //! \return void //! void RenderHal_GetPixelsPerSample( MOS_FORMAT format, uint32_t *pdwPixelsPerSampleUV); //! //! \brief Set Surface for HW Access //! \details Common Function for setting up surface state //! \param PRENDERHAL_INTERFACE pRenderHal //! [in] Pointer to Hardware Interface Structure //! \param PRENDERHAL_SURFACE pRenderHalSurface //! [in] Pointer to Render Hal Surface //! \param PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams //! [in] Pointer to Surface Params //! \param int32_t iBindingTable //! [in] Binding Table to bind surface //! \param int32_t iBTEntry //! [in] Binding Table Entry index //! \param bool bWrite //! [in] Write mode flag //! \return MOS_STATUS //! MOS_STATUS_SUCCESS if success. Error code otherwise //! MOS_STATUS RenderHal_SetSurfaceForHwAccess( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_SURFACE pRenderHalSurface, PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams, int32_t iBindingTable, int32_t iBTEntry, bool bWrite); //! //! \brief Set Buffer Surface for HW Access //! \details Common Function for setting up buffer surface state //! \param PRENDERHAL_INTERFACE pRenderHal //! [in] Pointer to Hardware Interface Structure //! \param PRENDERHAL_SURFACE pRenderHalSurface //! [in] Pointer to Render Hal Surface //! \param PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams //! [in] Pointer to Surface Params //! \param int32_t iBindingTable //! [in] Binding Table to Bind Surface //! \param int32_t iBTEntry //! [in] Binding Table Entry index //! \param bool bWrite //! Write mode flag //! \return MOS_STATUS //! MOS_STATUS_SUCCESS if success. Error code otherwise //! MOS_STATUS RenderHal_SetBufferSurfaceForHwAccess( PRENDERHAL_INTERFACE pRenderHal, PRENDERHAL_SURFACE pRenderHalSurface, PRENDERHAL_SURFACE_STATE_PARAMS pSurfaceParams, int32_t iBindingTable, int32_t iBTEntry, bool bWrite); //! //! \brief Get Surface Info from OsResource //! \details Update surface info in PRENDERHAL_SURFACE based on allocated OsResource //! \param PMOS_INTERFACE pOsInterface //! [in] Pointer to MOS_INTERFACE //! \param PRENDERHAL_GET_SURFACE_INFO pInfo //! [in] Pointer to RENDERHAL_GET_SURFACE_INFO //! \param PMOS_SURFACE pSurface //! [in/out] Pointer to PMOS_SURFACE //! \return MOS_STATUS //! Return MOS_STATUS_SUCCESS if successful, otherwise failed //! MOS_STATUS RenderHal_GetSurfaceInfo( PMOS_INTERFACE pOsInterface, PRENDERHAL_GET_SURFACE_INFO pInfo, PMOS_SURFACE pSurface); //! //! \brief Send Media States //! \details Send Media States //! \param PRENDERHAL_INTERFACE pRenderHal //! [in] Pointer to Hardware Interface Structure //! \param PMOS_COMMAND_BUFFER pCmdBuffer //! [in] Pointer to Command Buffer //! \param PRENDERHAL_GPGPU_WALKER_PARAMS pGpGpuWalkerParams //! [in] Pointer to GPGPU walker parameters //! \return MOS_STATUS //! MOS_STATUS RenderHal_SendMediaStates( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer, PMHW_WALKER_PARAMS pWalkerParams, PMHW_GPGPU_WALKER_PARAMS pGpGpuWalkerParams); //! //! \brief Issue command to write timestamp //! \param [in] pRenderHal //! \param [in] pCmdBuffer //! \param [in] bStartTime //! \return MOS_STATUS //! MOS_STATUS RenderHal_SendTimingData( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer, bool bStartTime); //! //! \brief Get Y Offset according to the planeOffset struct and surface pitch //! \details Get Y Offset according to the planeOffset struct and surface pitch //! \param pOsInterface //! [in] pointer to OS Interface //! \param pOsResource //! [in] Pointers to Surface OsResource //! \return uint16_t //! [out] the plane Y offset //! uint16_t RenderHal_CalculateYOffset( PMOS_INTERFACE pOsInterface, PMOS_RESOURCE pOsResource); MOS_STATUS RenderHal_AllocateDebugSurface( PRENDERHAL_INTERFACE pRenderHal); MOS_STATUS RenderHal_SetupDebugSurfaceState( PRENDERHAL_INTERFACE pRenderHal); void RenderHal_FreeDebugSurface( PRENDERHAL_INTERFACE pRenderHal); MOS_STATUS RenderHal_AddDebugControl( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); MOS_STATUS RenderHal_SetSurfaceStateToken( PRENDERHAL_INTERFACE pRenderHal, PMHW_SURFACE_TOKEN_PARAMS pParams, void *pSurfaceStateToken); //! //! \brief Send Surfaces PatchList //! \details Send Surface State commands //! \param PRENDERHAL_INTERFACE pRenderHal //! [in] Pointer to Hardware Interface Structure //! \param PMOS_COMMAND_BUFFER pCmdBuffer //! [in] Pointer to Command Buffer //! \return MOS_STATUS //! MOS_STATUS RenderHal_SendSurfaces_PatchList( PRENDERHAL_INTERFACE pRenderHal, PMOS_COMMAND_BUFFER pCmdBuffer); //! //! \brief Init Special Interface //! \details Initializes RenderHal Interface structure, responsible for HW //! abstraction of HW Rendering Engine for CM(MDF) and VP. //! \param PRENDERHAL_INTERFACE pRenderHal //! [in] Pointer to RenderHal Interface Structure //! void RenderHal_InitInterfaceEx( PRENDERHAL_INTERFACE pRenderHal); // Constants defined in RenderHal interface extern const SURFACE_STATE_TOKEN_COMMON g_cInit_SURFACE_STATE_TOKEN_COMMON; extern const MHW_PIPE_CONTROL_PARAMS g_cRenderHal_InitPipeControlParams; extern const MHW_VFE_PARAMS g_cRenderHal_InitVfeParams; extern const MHW_MEDIA_STATE_FLUSH_PARAM g_cRenderHal_InitMediaStateFlushParams; extern const RENDERHAL_KERNEL_PARAM g_cRenderHal_InitKernelParams; #endif // __RENDERHAL_H__