1 /* 2 * Copyright � 2014 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 6 * "Software"), to deal in the Software without restriction, including 7 * without limitation the rights to use, copy, modify, merge, publish, 8 * distribute, sub license, and/or sell copies of the Software, and to 9 * permit persons to whom the Software is furnished to do so, subject to 10 * the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the 13 * next paragraph) shall be included in all copies or substantial portions 14 * of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 * 24 * Authors: 25 * Wei Lin<wei.w.lin@intel.com> 26 * Yuting Yang<yuting.yang@intel.com> 27 */ 28 #pragma once 29 #include "cm_def.h" 30 31 class CmDevice_RT; 32 class CmKernel; 33 class CmTask_RT; 34 35 class CmThreadSpace { 36 public: 37 static INT Create(CmDevice_RT * pDevice, UINT indexTsArray, UINT width, 38 UINT height, CmThreadSpace * &pTS); 39 static INT Destroy(CmThreadSpace * &pTS); 40 41 CM_RT_API INT AssociateThread(UINT x, UINT y, CmKernel * pKernel, 42 UINT threadId, BYTE dependencyMask); 43 CM_RT_API INT SetThreadDependencyPattern(UINT count, INT * deltaX, 44 INT * deltaY); 45 CM_RT_API INT SelectThreadDependencyPattern(CM_HAL_DEPENDENCY_PATTERN 46 pattern); 47 CM_RT_API INT SetThreadSpaceColorCount(UINT colorCount); 48 CM_RT_API INT SelectMediaWalkingPattern(CM_HAL_WALKING_PATTERN pattern); 49 CM_RT_API INT Set26ZIDispatchPattern(CM_HAL_26ZI_DISPATCH_PATTERN 50 pattern); 51 CM_RT_API INT Set26ZIMacroBlockSize(UINT width, UINT height); 52 CM_RT_API INT SelectMediaWalkingParameters(CM_HAL_WALKING_PARAMETERS 53 parameters); 54 CM_RT_API INT SelectThreadDependencyVectors(CM_HAL_DEPENDENCY 55 dependencyVectors); 56 57 INT GetThreadSpaceSize(UINT & width, UINT & height); 58 INT GetThreadSpaceUnit(CM_THREAD_SPACE_UNIT * &pThreadSpaceUnit); 59 INT GetDependency(CM_DEPENDENCY * &pDependency); 60 INT GetDependencyPatternType(CM_HAL_DEPENDENCY_PATTERN & 61 DependencyPatternType); 62 INT GetWalkingPattern(CM_HAL_WALKING_PATTERN & pWalkingPattern); 63 INT Get26ZIDispatchPattern(CM_HAL_26ZI_DISPATCH_PATTERN & pattern); 64 INT GetWalkingParameters(CM_HAL_WALKING_PARAMETERS & 65 pWalkingParameters); 66 INT GetDependencyVectors(CM_HAL_DEPENDENCY & pDependencyVectors); 67 BOOLEAN CheckWalkingParametersSet(); 68 BOOLEAN CheckDependencyVectorsSet(); 69 INT GetColorCountMinusOne(UINT & colorCount); 70 INT GetWavefront26ZDispatchInfo(CM_HAL_WAVEFRONT26Z_DISPATCH_INFO & 71 dispatchInfo); 72 BOOLEAN IntegrityCheck(CmTask_RT * pTask); 73 INT GetBoardOrder(UINT * &pBoardOrder); 74 INT Wavefront45Sequence(); 75 INT Wavefront26Sequence(); 76 INT Wavefront26ZSequence(); 77 INT Wavefront26ZISeqVVHV26(); 78 INT Wavefront26ZISeqVVHH26(); 79 INT Wavefront26ZISeqVV26HH26(); 80 INT Wavefront26ZISeqVV1x26HH1x26(); 81 INT HorizentalSequence(); 82 INT VerticalSequence(); 83 84 BOOLEAN IsThreadAssociated() const; 85 BOOLEAN IsDependencySet(); 86 87 UINT GetIndexInTsArray(); 88 CM_THREAD_SPACE_DIRTY_STATUS GetDirtyStatus() const; 89 UINT SetDirtyStatus(CM_THREAD_SPACE_DIRTY_STATUS DirtyStatus) const; 90 91 BOOLEAN GetNeedSetKernelPointer() const; 92 INT SetKernelPointer(CmKernel * pKernel) const; 93 BOOLEAN KernelPointerIsNULL() const; 94 CmKernel *GetKernelPointer() const; 95 96 protected: 97 CmThreadSpace(CmDevice_RT * pDevice, UINT indexTsArray, UINT width, 98 UINT height); 99 ~CmThreadSpace(void); 100 101 INT Initialize(void); 102 103 CmDevice_RT *m_pDevice; 104 105 UINT m_Width; 106 UINT m_Height; 107 UINT m_ColorCountMinusOne; 108 109 UINT m_26ZIBlockWidth; 110 UINT m_26ZIBlockHeight; 111 112 CM_THREAD_SPACE_UNIT *m_pThreadSpaceUnit; 113 BOOLEAN m_ThreadAssociated; 114 115 BOOLEAN m_NeedSetKernelPointer; 116 CmKernel **m_ppKernel; 117 118 CM_HAL_DEPENDENCY_PATTERN m_DependencyPatternType; 119 CM_HAL_DEPENDENCY_PATTERN m_CurrentDependencyPattern; 120 CM_DEPENDENCY m_Dependency; 121 CM_HAL_26ZI_DISPATCH_PATTERN m_26ZIDispatchPattern; 122 CM_HAL_26ZI_DISPATCH_PATTERN m_Current26ZIDispatchPattern; 123 124 UINT *m_pBoardFlag; 125 UINT *m_pBoardOrderList; 126 UINT m_IndexInList; 127 UINT m_IndexInTsArray; 128 129 CM_HAL_WALKING_PATTERN m_WalkingPattern; 130 DWORD m_WalkingParameters[CM_NUM_DWORD_FOR_MW_PARAM]; 131 BOOLEAN m_MediaWalkerParamsSet; 132 CM_HAL_DEPENDENCY m_DependencyVectors; 133 BOOLEAN m_DependencyVectorsSet; 134 135 private: 136 CmThreadSpace(const CmThreadSpace & other); 137 CmThreadSpace & operator=(const CmThreadSpace & other); 138 139 PCM_THREAD_SPACE_DIRTY_STATUS m_pDirtyStatus; 140 141 CM_HAL_WAVEFRONT26Z_DISPATCH_INFO m_Wavefront26ZDispatchInfo; 142 }; 143