/*
 * Copyright 2020 Google LLC
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef GrMtlSemaphore_DEFINED
#define GrMtlSemaphore_DEFINED

#include "include/gpu/GrBackendSemaphore.h"
#include "include/gpu/d3d/GrD3DTypes.h"
#include "include/private/GrTypesPriv.h"
#include "src/gpu/GrSemaphore.h"

class GrD3DGpu;

class GrD3DSemaphore : public GrSemaphore {
public:
    static std::unique_ptr<GrD3DSemaphore> Make(GrD3DGpu* gpu);

    static std::unique_ptr<GrD3DSemaphore> MakeWrapped(const GrD3DFenceInfo&);

    ~GrD3DSemaphore() override {}

    ID3D12Fence* fence() const { return fFenceInfo.fFence.get(); }
    uint64_t value() const { return fFenceInfo.fValue; }

    GrBackendSemaphore backendSemaphore() const override;

private:
    GrD3DSemaphore(const GrD3DFenceInfo&);

    void setIsOwned() override {}

    GrD3DFenceInfo fFenceInfo;

    using INHERITED = GrSemaphore;
};

#endif
