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