1/* 2 * Copyright 2017 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#ifndef GrBackendSemaphore_DEFINED 9#define GrBackendSemaphore_DEFINED 10 11#include "GrTypes.h" 12 13#include "gl/GrGLTypes.h" 14 15#ifdef SK_VULKAN 16#include "vk/GrVkTypes.h" 17#endif 18 19/** 20 * Wrapper class for passing into and receiving data from Ganesh about a backend semaphore object. 21 */ 22class GrBackendSemaphore { 23public: 24 // For convenience we just set the backend here to OpenGL. The GrBackendSemaphore cannot be used 25 // until either initGL or initVulkan are called which will set the appropriate GrBackend. 26 GrBackendSemaphore() : fBackend(kOpenGL_GrBackend), fGLSync(0), fIsInitialized(false) {} 27 28 void initGL(GrGLsync sync) { 29 fBackend = kOpenGL_GrBackend; 30 fGLSync = sync; 31 fIsInitialized = true; 32 } 33 34#ifdef SK_VULKAN 35 void initVulkan(VkSemaphore semaphore) { 36 fBackend = kVulkan_GrBackend; 37 fVkSemaphore = semaphore; 38 fIsInitialized = true; 39 } 40#endif 41 42 bool isInitialized() const { return fIsInitialized; } 43 44 GrGLsync glSync() const { 45 if (!fIsInitialized || kOpenGL_GrBackend != fBackend) { 46 return 0; 47 } 48 return fGLSync; 49 } 50 51#ifdef SK_VULKAN 52 VkSemaphore vkSemaphore() const { 53 if (!fIsInitialized || kVulkan_GrBackend != fBackend) { 54 return VK_NULL_HANDLE; 55 } 56 return fVkSemaphore; 57 } 58#endif 59 60private: 61 GrBackend fBackend; 62 union { 63 GrGLsync fGLSync; 64#ifdef SK_VULKAN 65 VkSemaphore fVkSemaphore; 66#endif 67 }; 68 bool fIsInitialized; 69}; 70 71#endif 72