1 /* 2 * Copyright (c) 2024, Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included 12 * in all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 * OTHER DEALINGS IN THE SOFTWARE. 21 */ 22 #ifndef __VP_RENDER_VEBOX_HDR_3DLUT_L0_KERNEL_H__ 23 #define __VP_RENDER_VEBOX_HDR_3DLUT_L0_KERNEL_H__ 24 25 #include "vp_render_cmd_packet.h" 26 #include "vp_render_vebox_hdr_3dlut_kernel.h" 27 #define VP_HDR_KERNEL_NAME_L0_3DLUT "fillLutTable_3dlut" 28 namespace vp 29 { 30 //! 31 //! \brief Tone Mapping Source Type, Please don't change the Enmu Value. 32 //! \details These Enmu Values are passed to media kernel for further processing. 33 //! 34 35 class VpRenderHdr3DLutL0Kernel : public VpRenderKernelObj 36 { 37 public: 38 VpRenderHdr3DLutL0Kernel(PVP_MHWINTERFACE hwInterface, PVpAllocator allocator); 39 virtual ~VpRenderHdr3DLutL0Kernel(); 40 41 virtual MOS_STATUS Init(VpRenderKernel& kernel); 42 virtual MOS_STATUS GetCurbeState(void *&curbe, uint32_t &curbeLength) override; 43 FreeCurbe(void * & curbe)44 virtual MOS_STATUS FreeCurbe(void*& curbe) override 45 { 46 return MOS_STATUS_SUCCESS; 47 } 48 GetInlineDataSize()49 virtual uint32_t GetInlineDataSize() override 50 { 51 return 0; 52 } 53 IsKernelCached()54 virtual bool IsKernelCached() override 55 { 56 return true; 57 } 58 virtual MOS_STATUS GetWalkerSetting(KERNEL_WALKER_PARAMS &walkerParam, KERNEL_PACKET_RENDER_DATA &renderData) override; 59 virtual MOS_STATUS InitCoefSurface(const uint32_t maxDLL, const uint32_t maxCLL, const VPHAL_HDR_MODE hdrMode); 60 61 protected: 62 virtual MOS_STATUS SetupSurfaceState() override; 63 virtual MOS_STATUS CpPrepareResources() override; 64 virtual MOS_STATUS SetupStatelessBuffer() override; 65 virtual MOS_STATUS SetWalkerSetting(KERNEL_THREAD_SPACE &threadSpace, bool bSyncFlag, bool flushL1 = false); 66 virtual MOS_STATUS SetKernelArgs(KERNEL_ARGS &kernelArgs, VP_PACKET_SHARED_CONTEXT *sharedContext); 67 virtual MOS_STATUS SetKernelConfigs(KERNEL_CONFIGS &kernelConfigs) override; 68 virtual void DumpSurfaces(); 69 70 //kernel Arguments 71 KERNEL_ARGS m_kernelArgs = {}; 72 KERNEL_WALKER_PARAMS m_walkerParam = {}; 73 uint8_t m_inlineData[32] = {}; 74 75 float m_ccmMatrix[VP_CCM_MATRIX_SIZE] = {0.0}; 76 uint32_t m_maxDisplayLum = 1000; //!< Maximum Display Luminance 77 uint32_t m_maxContentLevelLum = 4000; //!< Maximum Content Level Luminance 78 VPHAL_HDR_MODE m_hdrMode = VPHAL_HDR_MODE_NONE; 79 uint32_t m_hdrLutSize = LUT65_SEG_SIZE; 80 void* m_curbe = nullptr; 81 uint32_t m_curbeSize = 0; 82 KERNEL_BTIS m_kernelBtis = {}; 83 KRN_EXECUTE_ENV m_kernelEnv = {}; 84 KERNEL_ARG_INDEX_SURFACE_MAP m_argIndexSurfMap = {}; 85 86 MEDIA_CLASS_DEFINE_END(vp__VpRenderHdr3DLutL0Kernel) 87 }; 88 89 } // namespace vp 90 91 #endif //__RENDER_VEBOX_HDR_3DLUT_L0_KERNEL__