1 /* 2 * Copyright (C) 2020-2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8 #pragma once 9 #include "opencl/extensions/public/cl_gl_private_intel.h" 10 #include "opencl/source/sharings/gl/windows/gl_sharing_windows.h" 11 #include "opencl/test/unit_test/sharings/gl/gl_dll_helper.h" 12 13 #include "config.h" 14 15 #include <cstring> 16 17 namespace NEO { 18 struct EGLBkpContextParams { 19 int32_t configAttrs; 20 int32_t contextAttrs[3]; 21 int32_t numConfigs; 22 }; 23 24 struct GLXBkpContextParams { 25 int FBConfigAttrs; 26 int queryAttribute; 27 int renderType; 28 }; 29 30 struct GLMockReturnedValues { 31 GLContext currentContext; 32 GLDisplay currentDisplay; 33 GLContext madeCurrentContext; 34 bool forceMakeCurrentCallFail; 35 int numberOfCallFails; 36 int failsCounter; 37 int syncivRetVal; 38 }; 39 40 extern int GLSetSharedOCLContextStateCalled; 41 extern int EGLCreateContextCalled; 42 extern int EGLDeleteContextCalled; 43 extern int EGLChooseConfigCalled; 44 extern int GlxChooseFBConfigCalled; 45 extern int GlxQueryContextCalled; 46 extern int GlxCreateNewContextCalled; 47 extern int GlxDeleteContextCalled; 48 extern int GlxIsDirectCalled; 49 extern EGLBkpContextParams eglBkpContextParams; 50 extern GLXBkpContextParams glxBkpContextParams; 51 52 namespace glTextureTargets { 53 static const unsigned int supportedTargets[] = { 54 GL_TEXTURE_1D, 55 GL_TEXTURE_1D_ARRAY, 56 GL_TEXTURE_BUFFER, 57 GL_TEXTURE_2D, 58 GL_TEXTURE_2D_ARRAY, 59 GL_TEXTURE_RECTANGLE, 60 GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 61 GL_TEXTURE_CUBE_MAP_POSITIVE_X, 62 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 63 GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 64 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 65 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 66 GL_TEXTURE_3D, 67 GL_RENDERBUFFER_EXT, 68 GL_TEXTURE_2D_MULTISAMPLE, 69 GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 70 }; 71 } 72 73 class GlSharingFunctionsMock : public GLSharingFunctionsWindows { 74 75 void initMembers(); 76 77 public: mockGLSetSharedOCLContextState(GLDisplay,GLContext,GLboolean,GLvoid * pBufferInfo)78 static GLboolean OSAPI mockGLSetSharedOCLContextState(GLDisplay, GLContext, GLboolean, GLvoid *pBufferInfo) { 79 GLSetSharedOCLContextStateCalled++; 80 return (GLboolean)1; 81 }; 82 ~GlSharingFunctionsMock() override = default; 83 84 using GLSharingFunctionsWindows::GLAcquireSharedBuffer; 85 using GLSharingFunctionsWindows::GLAcquireSharedRenderBuffer; 86 using GLSharingFunctionsWindows::GLAcquireSharedTexture; 87 using GLSharingFunctionsWindows::GLGetCurrentContext; 88 using GLSharingFunctionsWindows::GLGetCurrentDisplay; 89 using GLSharingFunctionsWindows::glGetIntegerv; 90 using GLSharingFunctionsWindows::glGetString; 91 using GLSharingFunctionsWindows::glGetStringi; 92 using GLSharingFunctionsWindows::GLGetSynciv; 93 using GLSharingFunctionsWindows::GLReleaseSharedBuffer; 94 using GLSharingFunctionsWindows::GLReleaseSharedRenderBuffer; 95 using GLSharingFunctionsWindows::GLReleaseSharedTexture; 96 using GLSharingFunctionsWindows::GLReleaseSync; 97 using GLSharingFunctionsWindows::GLRetainSync; 98 using GLSharingFunctionsWindows::GLSetSharedOCLContextState; 99 using GLSharingFunctionsWindows::isOpenGlExtensionSupported; 100 using GLSharingFunctionsWindows::pfnWglCreateContext; 101 using GLSharingFunctionsWindows::pfnWglDeleteContext; 102 using GLSharingFunctionsWindows::pfnWglShareLists; 103 using GLSharingFunctionsWindows::setSharedOCLContextState; 104 using GLSharingFunctionsWindows::wglMakeCurrent; 105 106 using GLSharingFunctionsWindows::glArbEventMapping; 107 using GLSharingFunctionsWindows::GLContextHandle; 108 using GLSharingFunctionsWindows::GLDeviceHandle; 109 110 using GLSharingFunctionsWindows::getSupportedFormats; 111 using GLSharingFunctionsWindows::pfnGlArbSyncObjectCleanup; 112 using GLSharingFunctionsWindows::pfnGlArbSyncObjectSetup; 113 using GLSharingFunctionsWindows::pfnGlArbSyncObjectSignal; 114 using GLSharingFunctionsWindows::pfnGlArbSyncObjectWaitServer; 115 GlSharingFunctionsMock(GLType GLHDCType,GLContext GLHGLRCHandle,GLContext GLHGLRCHandleBkpCtx,GLDisplay GLHDCHandle)116 GlSharingFunctionsMock(GLType GLHDCType, GLContext GLHGLRCHandle, GLContext GLHGLRCHandleBkpCtx, GLDisplay GLHDCHandle) 117 : GLSharingFunctionsWindows(GLHDCType, GLHGLRCHandle, GLHGLRCHandleBkpCtx, GLHDCHandle) { 118 initMembers(); 119 updateOpenGLContext(); 120 createBackupContext(); 121 } 122 GlSharingFunctionsMock(); 123 setHandles(GLType GLHDCType,GLContext GLHGLRCHandle,GLContext GLHGLRCHandleBkpCtx,GLDisplay GLHDCHandle)124 void setHandles(GLType GLHDCType, GLContext GLHGLRCHandle, GLContext GLHGLRCHandleBkpCtx, GLDisplay GLHDCHandle) { 125 this->GLHDCType = GLHDCType; 126 this->GLHGLRCHandle = GLHGLRCHandle; 127 this->GLHGLRCHandleBkpCtx = GLHGLRCHandleBkpCtx; 128 this->GLHDCHandle = GLHDCHandle; 129 } 130 setGLAcquireSharedBufferMock(PFNOGLAcquireSharedBufferINTEL mock)131 void setGLAcquireSharedBufferMock(PFNOGLAcquireSharedBufferINTEL mock) { GLAcquireSharedBuffer = mock; } 132 setGLAcquireSharedTextureMock(PFNOGLAcquireSharedTextureINTEL mock)133 void setGLAcquireSharedTextureMock(PFNOGLAcquireSharedTextureINTEL mock) { GLAcquireSharedTexture = mock; } 134 }; 135 136 class MockGlSharing { 137 public: MockGlSharing()138 MockGlSharing() {} 139 MockGlSharing(GLType GLHDCType, GLContext GLHGLRCHandle, GLContext GLHGLRCHandleBkpCtx, GLDisplay GLHDCHandle); uploadDataToBufferInfo()140 void uploadDataToBufferInfo() { 141 dllParam->loadBuffer(m_bufferInfoOutput); 142 } uploadDataToBufferInfo(unsigned int sharedHandle,int bufferOffset,GMM_RESOURCE_INFO * gmmResInfo)143 void uploadDataToBufferInfo(unsigned int sharedHandle, int bufferOffset, GMM_RESOURCE_INFO *gmmResInfo) { 144 m_bufferInfoOutput.globalShareHandle = sharedHandle; 145 m_bufferInfoOutput.bufferOffset = bufferOffset; 146 m_bufferInfoOutput.pGmmResInfo = gmmResInfo; 147 dllParam->loadBuffer(m_bufferInfoOutput); 148 } uploadDataToTextureInfo()149 void uploadDataToTextureInfo() { 150 dllParam->loadTexture(m_textureInfoOutput); 151 } uploadDataToTextureInfo(unsigned int sharedHandle)152 void uploadDataToTextureInfo(unsigned int sharedHandle) { 153 m_textureInfoOutput.globalShareHandle = sharedHandle; 154 dllParam->loadTexture(m_textureInfoOutput); 155 } uploadTextureBufferOffsetToTextureInfo(int texBufOffset)156 void uploadTextureBufferOffsetToTextureInfo(int texBufOffset) { 157 m_textureInfoOutput.textureBufferOffset = texBufOffset; 158 dllParam->loadTexture(m_textureInfoOutput); 159 } 160 void overrideGetCurrentValues(GLContext ctx, GLDisplay display, bool forceMakeCurrentFail = false, int numberOfFails = 0) { 161 glMockReturnedValues.currentContext = ctx; 162 glMockReturnedValues.currentDisplay = display; 163 glMockReturnedValues.forceMakeCurrentCallFail = forceMakeCurrentFail; 164 glMockReturnedValues.numberOfCallFails = numberOfFails; 165 glMockReturnedValues.failsCounter = 0; 166 dllParam->setGlMockReturnedValues(glMockReturnedValues); 167 } setGetSyncivReturnValue(int val)168 void setGetSyncivReturnValue(int val) { 169 glMockReturnedValues.syncivRetVal = val; 170 dllParam->setGlMockReturnedValues(glMockReturnedValues); 171 } 172 173 std::unique_ptr<GlSharingFunctionsMock> sharingFunctions = std::make_unique<GlSharingFunctionsMock>(); 174 std::unique_ptr<GlDllHelper> dllParam = std::make_unique<GlDllHelper>(); 175 CL_GL_RESOURCE_INFO m_clGlResourceInfo = {0}; 176 GL_CL_RESOURCE_INFO m_glClResourceInfo = {0}; 177 CL_GL_BUFFER_INFO m_bufferInfoOutput = {0}; 178 CL_GL_RESOURCE_INFO m_textureInfoOutput = {0}; 179 GLMockReturnedValues glMockReturnedValues = {0}; 180 }; 181 182 class MockGLSharingFunctions : public GLSharingFunctionsWindows { 183 public: 184 using GLSharingFunctionsWindows::isOpenGlExtensionSupported; 185 using GLSharingFunctionsWindows::setSharedOCLContextState; 186 187 static bool SharingEnabled; 188 glGetIntegervTest(GLenum pname,GLint * data)189 static void OSAPI glGetIntegervTest(GLenum pname, GLint *data) { 190 if (pname == GL_NUM_EXTENSIONS) 191 *data = 2; 192 }; 193 using GLSharingFunctionsWindows::glGetIntegerv; 194 using GLSharingFunctionsWindows::glGetString; 195 std::unique_ptr<GlDllHelper> dllParam = std::make_unique<GlDllHelper>(); MockGLSharingFunctions()196 MockGLSharingFunctions() { 197 GLSharingFunctionsWindows::initGLFunctions(); 198 MockGLSharingFunctions::SharingEnabled = 1; 199 } 200 }; 201 } // namespace NEO 202