175f0d3110b04346b901771f96ce15cdbe907278fYang Ni/*
275f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Copyright (C) 2016 The Android Open Source Project
375f0d3110b04346b901771f96ce15cdbe907278fYang Ni *
475f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Licensed under the Apache License, Version 2.0 (the "License");
575f0d3110b04346b901771f96ce15cdbe907278fYang Ni * you may not use this file except in compliance with the License.
675f0d3110b04346b901771f96ce15cdbe907278fYang Ni * You may obtain a copy of the License at
775f0d3110b04346b901771f96ce15cdbe907278fYang Ni *
875f0d3110b04346b901771f96ce15cdbe907278fYang Ni *      http://www.apache.org/licenses/LICENSE-2.0
975f0d3110b04346b901771f96ce15cdbe907278fYang Ni *
1075f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Unless required by applicable law or agreed to in writing, software
1175f0d3110b04346b901771f96ce15cdbe907278fYang Ni * distributed under the License is distributed on an "AS IS" BASIS,
1275f0d3110b04346b901771f96ce15cdbe907278fYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1375f0d3110b04346b901771f96ce15cdbe907278fYang Ni * See the License for the specific language governing permissions and
1475f0d3110b04346b901771f96ce15cdbe907278fYang Ni * limitations under the License.
1575f0d3110b04346b901771f96ce15cdbe907278fYang Ni */
1675f0d3110b04346b901771f96ce15cdbe907278fYang Ni
1775f0d3110b04346b901771f96ce15cdbe907278fYang Ni#ifndef RSOV_CONTEXT_H
1875f0d3110b04346b901771f96ce15cdbe907278fYang Ni#define RSOV_CONTEXT_H
1975f0d3110b04346b901771f96ce15cdbe907278fYang Ni
2075f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include <vulkan/vulkan.h>
2175f0d3110b04346b901771f96ce15cdbe907278fYang Ni#include <mutex>
2275f0d3110b04346b901771f96ce15cdbe907278fYang Ni
2375f0d3110b04346b901771f96ce15cdbe907278fYang Ninamespace android {
2475f0d3110b04346b901771f96ce15cdbe907278fYang Ninamespace renderscript {
2575f0d3110b04346b901771f96ce15cdbe907278fYang Ni
2675f0d3110b04346b901771f96ce15cdbe907278fYang Ninamespace rsov {
2775f0d3110b04346b901771f96ce15cdbe907278fYang Ni
2875f0d3110b04346b901771f96ce15cdbe907278fYang Niclass RSoVContext {
2975f0d3110b04346b901771f96ce15cdbe907278fYang Ni public:
3075f0d3110b04346b901771f96ce15cdbe907278fYang Ni  static RSoVContext* create();
3175f0d3110b04346b901771f96ce15cdbe907278fYang Ni  ~RSoVContext();
3275f0d3110b04346b901771f96ce15cdbe907278fYang Ni
3375f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkDevice getDevice() const { return mDevice; }
3475f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkQueue getQueue() const { return mQueue; }
3575f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkCommandPool getCmdPool() const { return mCmdPool; }
3675f0d3110b04346b901771f96ce15cdbe907278fYang Ni
3775f0d3110b04346b901771f96ce15cdbe907278fYang Ni  bool MemoryTypeFromProperties(uint32_t typeBits, VkFlags requirements_mask,
3875f0d3110b04346b901771f96ce15cdbe907278fYang Ni                                uint32_t* typeIndex);
3975f0d3110b04346b901771f96ce15cdbe907278fYang Ni
4075f0d3110b04346b901771f96ce15cdbe907278fYang Ni private:
4175f0d3110b04346b901771f96ce15cdbe907278fYang Ni  RSoVContext();
4275f0d3110b04346b901771f96ce15cdbe907278fYang Ni
43257223a176702c1b408d1530cba3f9a10c978c95Yang Ni  bool Initialize(char const* const name);
4475f0d3110b04346b901771f96ce15cdbe907278fYang Ni
4575f0d3110b04346b901771f96ce15cdbe907278fYang Ni  static RSoVContext* mContext;
4675f0d3110b04346b901771f96ce15cdbe907278fYang Ni  static std::once_flag mInitFlag;
4775f0d3110b04346b901771f96ce15cdbe907278fYang Ni
4875f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkInstance mInstance;
4975f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkPhysicalDevice mGPU;
5075f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkDevice mDevice;
5175f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkPhysicalDeviceMemoryProperties mMemoryProperties;
5275f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkQueue mQueue;
5375f0d3110b04346b901771f96ce15cdbe907278fYang Ni  VkCommandPool mCmdPool;
5475f0d3110b04346b901771f96ce15cdbe907278fYang Ni};
5575f0d3110b04346b901771f96ce15cdbe907278fYang Ni
5675f0d3110b04346b901771f96ce15cdbe907278fYang Ni}  // namespace rsov
5775f0d3110b04346b901771f96ce15cdbe907278fYang Ni}  // namespace renderscript
5875f0d3110b04346b901771f96ce15cdbe907278fYang Ni}  // namespace android
5975f0d3110b04346b901771f96ce15cdbe907278fYang Ni
6075f0d3110b04346b901771f96ce15cdbe907278fYang Ni#endif  // RSOV_CONTEXT_H
61