// Copyright 2017 The NXT Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "utils/BackendBinding.h"

namespace backend {
    namespace vulkan {
        void Init(nxtProcTable* procs, nxtDevice* device);
    }
}

namespace utils {

    class VulkanBinding : public BackendBinding {
        public:
            void SetupGLFWWindowHints() override {
            }
            void GetProcAndDevice(nxtProcTable* procs, nxtDevice* device) override {
                backend::vulkan::Init(procs, device);
            }
            uint64_t GetSwapChainImplementation() override {
                return 0;
            }
    };


    BackendBinding* CreateVulkanBinding() {
        return new VulkanBinding;
    }

}
