1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2017 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef GrVkSemaphore_DEFINED 9cb93a386Sopenharmony_ci#define GrVkSemaphore_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "src/gpu/GrSemaphore.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ci#include "include/gpu/vk/GrVkTypes.h" 14cb93a386Sopenharmony_ci#include "src/gpu/vk/GrVkManagedResource.h" 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_ci#include <cinttypes> 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciclass GrBackendSemaphore; 19cb93a386Sopenharmony_ciclass GrVkGpu; 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_ciclass GrVkSemaphore : public GrSemaphore { 22cb93a386Sopenharmony_cipublic: 23cb93a386Sopenharmony_ci static std::unique_ptr<GrVkSemaphore> Make(GrVkGpu* gpu, bool isOwned); 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_ci static std::unique_ptr<GrVkSemaphore> MakeWrapped(GrVkGpu*, 26cb93a386Sopenharmony_ci VkSemaphore, 27cb93a386Sopenharmony_ci GrSemaphoreWrapType, 28cb93a386Sopenharmony_ci GrWrapOwnership); 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci ~GrVkSemaphore() override; 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ci GrBackendSemaphore backendSemaphore() const override; 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ci class Resource : public GrVkManagedResource { 35cb93a386Sopenharmony_ci public: 36cb93a386Sopenharmony_ci Resource(const GrVkGpu* gpu, VkSemaphore semaphore, 37cb93a386Sopenharmony_ci bool prohibitSignal, bool prohibitWait, bool isOwned) 38cb93a386Sopenharmony_ci : INHERITED(gpu) 39cb93a386Sopenharmony_ci , fSemaphore(semaphore) 40cb93a386Sopenharmony_ci , fHasBeenSubmittedToQueueForSignal(prohibitSignal) 41cb93a386Sopenharmony_ci , fHasBeenSubmittedToQueueForWait(prohibitWait) 42cb93a386Sopenharmony_ci , fIsOwned(isOwned) {} 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci ~Resource() override {} 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci VkSemaphore semaphore() const { return fSemaphore; } 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci bool shouldSignal() const { 49cb93a386Sopenharmony_ci return !fHasBeenSubmittedToQueueForSignal; 50cb93a386Sopenharmony_ci } 51cb93a386Sopenharmony_ci bool shouldWait() const { 52cb93a386Sopenharmony_ci return !fHasBeenSubmittedToQueueForWait; 53cb93a386Sopenharmony_ci } 54cb93a386Sopenharmony_ci 55cb93a386Sopenharmony_ci void markAsSignaled() { 56cb93a386Sopenharmony_ci fHasBeenSubmittedToQueueForSignal = true; 57cb93a386Sopenharmony_ci } 58cb93a386Sopenharmony_ci void markAsWaited() { 59cb93a386Sopenharmony_ci fHasBeenSubmittedToQueueForWait = true; 60cb93a386Sopenharmony_ci } 61cb93a386Sopenharmony_ci 62cb93a386Sopenharmony_ci void setIsOwned() { 63cb93a386Sopenharmony_ci fIsOwned = true; 64cb93a386Sopenharmony_ci } 65cb93a386Sopenharmony_ci 66cb93a386Sopenharmony_ci#ifdef SK_TRACE_MANAGED_RESOURCES 67cb93a386Sopenharmony_ci void dumpInfo() const override { 68cb93a386Sopenharmony_ci SkDebugf("GrVkSemaphore: %" PRIdPTR " (%d refs)\n", (intptr_t)fSemaphore, 69cb93a386Sopenharmony_ci this->getRefCnt()); 70cb93a386Sopenharmony_ci } 71cb93a386Sopenharmony_ci#endif 72cb93a386Sopenharmony_ci private: 73cb93a386Sopenharmony_ci void freeGPUData() const override; 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ci VkSemaphore fSemaphore; 76cb93a386Sopenharmony_ci bool fHasBeenSubmittedToQueueForSignal; 77cb93a386Sopenharmony_ci bool fHasBeenSubmittedToQueueForWait; 78cb93a386Sopenharmony_ci bool fIsOwned; 79cb93a386Sopenharmony_ci 80cb93a386Sopenharmony_ci using INHERITED = GrVkManagedResource; 81cb93a386Sopenharmony_ci }; 82cb93a386Sopenharmony_ci 83cb93a386Sopenharmony_ci Resource* getResource() { return fResource; } 84cb93a386Sopenharmony_ci 85cb93a386Sopenharmony_ciprivate: 86cb93a386Sopenharmony_ci GrVkSemaphore(GrVkGpu* gpu, VkSemaphore semaphore, bool prohibitSignal, bool prohibitWait, 87cb93a386Sopenharmony_ci bool isOwned); 88cb93a386Sopenharmony_ci 89cb93a386Sopenharmony_ci void setIsOwned() override { 90cb93a386Sopenharmony_ci fResource->setIsOwned(); 91cb93a386Sopenharmony_ci } 92cb93a386Sopenharmony_ci 93cb93a386Sopenharmony_ci Resource* fResource; 94cb93a386Sopenharmony_ci 95cb93a386Sopenharmony_ci using INHERITED = GrSemaphore; 96cb93a386Sopenharmony_ci}; 97cb93a386Sopenharmony_ci 98cb93a386Sopenharmony_ci#endif 99