xref: /aosp_15_r20/external/intel-media-driver/media_driver/agnostic/common/cm/cm_task_rt.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2017, 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 //!
23 //! \file      cm_task_rt.h
24 //! \brief     Declaration of CmTaskRT.
25 //!
26 
27 #ifndef MEDIADRIVER_AGNOSTIC_COMMON_CM_CMTASKRT_H_
28 #define MEDIADRIVER_AGNOSTIC_COMMON_CM_CMTASKRT_H_
29 
30 #include "cm_task.h"
31 #include "cm_hal.h"
32 #include "cm_log.h"
33 
34 namespace CMRT_UMD
35 {
36 class CmKernelRT;
37 class CmDeviceRT;
38 
39 class CmTaskRT: public CmTask
40 {
41 public:
42     static int32_t Create(CmDeviceRT *device,
43                           uint32_t index,
44                           uint32_t maxKernelCount,
45                           CmTaskRT* &kernelArray);
46 
47     static int32_t Destroy(CmTaskRT *&kernelArray);
48 
49     CM_RT_API int32_t AddKernel(CmKernel *kernel);
50 
51     CM_RT_API int32_t Reset();
52 
53     CM_RT_API int32_t AddSync();
54 
AddSyncEx(const CM_KERNEL_SYNC_CONFIG * config)55     CM_RT_API int32_t AddSyncEx(const CM_KERNEL_SYNC_CONFIG *config) { return CM_SUCCESS; }
56 
57     CM_RT_API int32_t SetPowerOption(PCM_POWER_OPTION powerOption);
58 
59     CM_RT_API int32_t AddConditionalEnd(SurfaceIndex *conditionalSurfaceIndex,
60                                         uint32_t offset,
61                                         CM_CONDITIONAL_END_PARAM *conditionalParam);
62 
63     CM_RT_API int32_t SetProperty(const CM_TASK_CONFIG &taskConfig);
64     CM_RT_API int32_t GetProperty(CM_TASK_CONFIG &taskConfig);
65 
66     CM_RT_API int32_t AddKernelWithConfig(CmKernel *kernel, const CM_EXECUTION_CONFIG *config);
67 
68     virtual uint32_t GetKernelCount();
69 
70     virtual CmKernelRT *GetKernelPointer(uint32_t index);
71 
72     virtual uint32_t GetIndexInTaskArray();
73 
74     bool IntegrityCheckKernelThreadspace();
75 
76     uint64_t GetSyncBitmap();
77 
78     uint64_t GetConditionalEndBitmap();
79 
80     CM_HAL_CONDITIONAL_BB_END_INFO *GetConditionalEndInfo();
81 
82     int32_t SetConditionalEndInfo(SurfaceIndex *index,
83                                   uint32_t offset,
84                                   CM_CONDITIONAL_END_PARAM *conditionalParam);
85 
86     PCM_POWER_OPTION GetPowerOption();
87 
88     int32_t AddKernelInternal( CmKernel *kernel,  const CM_EXECUTION_CONFIG *config);
89 
GetKernelExecuteConfig()90     const CM_EXECUTION_CONFIG* GetKernelExecuteConfig() { return m_kernelExecuteConfig; };
91 
92 #if CM_LOG_ON
93     std::string Log();
94 
95     CM_HAL_STATE* GetHalState();
96 #endif  // #if CM_LOG_ON
97 
98 protected:
99     CmTaskRT(CmDeviceRT *device,
100              uint32_t index,
101              uint32_t maxKernelCount);
102 
103     ~CmTaskRT();
104 
105     int32_t Initialize();
106 
107 #if USE_EXTENSION_CODE
108     void AddKernelForGTPin(CmKernel *kernel);
109 #endif
110 
111     CmKernelRT **m_kernelArray;
112 
113     CmDeviceRT *m_device;
114 
115     uint32_t m_kernelCount;
116 
117     uint32_t m_maxKernelCount;
118 
119     uint32_t m_indexTaskArray;
120 
121     // Reserve a 64-bit variable to indicate if synchronization is insert for kernels.
122     // 1 bit per kernel, 0 -- No sync, 1 -- Need sync
123     // Up to 64 kernels supported
124     uint64_t m_syncBitmap;
125 
126     // 64-bit variable to indicate if a conditional batch buffer end is inserted between kernels
127     // 1 bit per kernel, 0 -- No conditional end, 1 -- Insert conditional end
128     // Up to 64 kernels supported
129     uint64_t m_conditionalEndBitmap;
130 
131     CM_HAL_CONDITIONAL_BB_END_INFO
132     m_conditionalEndInfo[CM_MAX_CONDITIONAL_END_CMDS];
133 
134     CM_POWER_OPTION m_powerOption;
135 
136     CM_TASK_CONFIG m_taskConfig;
137 
138     CM_EXECUTION_CONFIG m_kernelExecuteConfig[CM_MAX_KERNELS_PER_TASK]; // replace numOfWalkers in CM_TASK_CONFIG.
139 
140 private:
141     CmTaskRT(const CmTaskRT &other);
142     CmTaskRT &operator=(const CmTaskRT &other);
143 };
144 };  // namespace;
145 
146 #endif  // #ifndef MEDIADRIVER_AGNOSTIC_COMMON_CM_CMTASKRT_H_
147