summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-03-17 21:56:42 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-03-17 21:56:42 +0000
commitc56c2613bee0c44ef22a2f435dc8fa6ee5f52f9a (patch)
treef3383fd3eab4c98754d416c703ab862f424ab7f2 /Graphics/GraphicsEngineVulkan
parentAdded VulkanInstance helper class (diff)
downloadDiligentCore-c56c2613bee0c44ef22a2f435dc8fa6ee5f52f9a.tar.gz
DiligentCore-c56c2613bee0c44ef22a2f435dc8fa6ee5f52f9a.zip
Added VulkanPhysiclDevice class
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/CMakeLists.txt2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanPhysicalDevice.h44
-rw-r--r--Graphics/GraphicsEngineVulkan/src/RenderDeviceFactoryVk.cpp8
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanPhysicalDevice.cpp55
4 files changed, 106 insertions, 3 deletions
diff --git a/Graphics/GraphicsEngineVulkan/CMakeLists.txt b/Graphics/GraphicsEngineVulkan/CMakeLists.txt
index 91875ac1..2ae05941 100644
--- a/Graphics/GraphicsEngineVulkan/CMakeLists.txt
+++ b/Graphics/GraphicsEngineVulkan/CMakeLists.txt
@@ -35,6 +35,7 @@ set(INCLUDE
set(VULKAN_UTILS_INCLUDE
include/VulkanUtilities/VulkanDebug.h
include/VulkanUtilities/VulkanInstance.h
+ include/VulkanUtilities/VulkanPhysicalDevice.h
)
@@ -86,6 +87,7 @@ set(SRC
set(VULKAN_UTILS_SRC
src/VulkanUtilities/VulkanDebug.cpp
src/VulkanUtilities/VulkanInstance.cpp
+ src/VulkanUtilities/VulkanPhysicalDevice.cpp
)
#set(SHADERS
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanPhysicalDevice.h b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanPhysicalDevice.h
new file mode 100644
index 00000000..76cd8bc8
--- /dev/null
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanPhysicalDevice.h
@@ -0,0 +1,44 @@
+/* Copyright 2015-2018 Egor Yusov
+*
+* 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
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.
+*
+* In no event and under no legal theory, whether in tort (including negligence),
+* contract, or otherwise, unless required by applicable law (such as deliberate
+* and grossly negligent acts) or agreed to in writing, shall any Contributor be
+* liable for any damages, including any direct, indirect, special, incidental,
+* or consequential damages of any character arising as a result of this License or
+* out of the use or inability to use the software (including but not limited to damages
+* for loss of goodwill, work stoppage, computer failure or malfunction, or any and
+* all other commercial damages or losses), even if such Contributor has been advised
+* of the possibility of such damages.
+*/
+
+#pragma once
+
+#include <vector>
+#include "vulkan.h"
+
+namespace VulkanUtilities
+{
+ class VulkanPhysicalDevice
+ {
+ public:
+ VulkanPhysicalDevice(VkPhysicalDevice vkDevice);
+
+ private:
+ const VkPhysicalDevice m_VkDevice;
+ VkPhysicalDeviceProperties m_Properties;
+ VkPhysicalDeviceFeatures m_Features;
+ VkPhysicalDeviceMemoryProperties m_MemoryProperties;
+ std::vector<VkQueueFamilyProperties> m_QueueFamilyProperties;
+ std::vector<VkExtensionProperties> m_SupportedExtensions;
+ };
+}
diff --git a/Graphics/GraphicsEngineVulkan/src/RenderDeviceFactoryVk.cpp b/Graphics/GraphicsEngineVulkan/src/RenderDeviceFactoryVk.cpp
index 0f49494d..c3b4c5ea 100644
--- a/Graphics/GraphicsEngineVulkan/src/RenderDeviceFactoryVk.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/RenderDeviceFactoryVk.cpp
@@ -25,8 +25,6 @@
/// Routines that initialize Vulkan-based engine implementation
#include "pch.h"
-#include <unordered_set>
-
#include "RenderDeviceFactoryVk.h"
#include "RenderDeviceVkImpl.h"
#include "DeviceContextVkImpl.h"
@@ -36,6 +34,7 @@
#include "EngineMemory.h"
#include "CommandQueueVkImpl.h"
#include "VulkanUtilities/VulkanInstance.h"
+#include "VulkanUtilities/VulkanPhysicalDevice.h"
namespace Diligent
{
@@ -138,7 +137,10 @@ void EngineFactoryVkImpl::CreateDeviceAndContextsVk( const EngineVkAttribs& Crea
return;
}
- Instance->SelectPhysicalDevice();
+ auto vkDevice = Instance->SelectPhysicalDevice();
+ std::unique_ptr<VulkanUtilities::VulkanPhysicalDevice> PhysicalDevice(new VulkanUtilities::VulkanPhysicalDevice(vkDevice));
+
+
#if 0
for(Uint32 Type=Vk_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; Type < Vk_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; ++Type)
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanPhysicalDevice.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanPhysicalDevice.cpp
new file mode 100644
index 00000000..f75e24b5
--- /dev/null
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanPhysicalDevice.cpp
@@ -0,0 +1,55 @@
+/* Copyright 2015-2018 Egor Yusov
+*
+* 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
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.
+*
+* In no event and under no legal theory, whether in tort (including negligence),
+* contract, or otherwise, unless required by applicable law (such as deliberate
+* and grossly negligent acts) or agreed to in writing, shall any Contributor be
+* liable for any damages, including any direct, indirect, special, incidental,
+* or consequential damages of any character arising as a result of this License or
+* out of the use or inability to use the software (including but not limited to damages
+* for loss of goodwill, work stoppage, computer failure or malfunction, or any and
+* all other commercial damages or losses), even if such Contributor has been advised
+* of the possibility of such damages.
+*/
+
+#include "pch.h"
+#include "VulkanUtilities/VulkanPhysicalDevice.h"
+
+namespace VulkanUtilities
+{
+ VulkanPhysicalDevice::VulkanPhysicalDevice(VkPhysicalDevice vkDevice) :
+ m_VkDevice(vkDevice)
+ {
+ VERIFY_EXPR(m_VkDevice != VK_NULL_HANDLE);
+
+ vkGetPhysicalDeviceProperties(m_VkDevice, &m_Properties);
+ vkGetPhysicalDeviceFeatures(m_VkDevice, &m_Features);
+ vkGetPhysicalDeviceMemoryProperties(m_VkDevice, &m_MemoryProperties);
+ uint32_t QueueFamilyCount = 0;
+ vkGetPhysicalDeviceQueueFamilyProperties(m_VkDevice, &QueueFamilyCount, nullptr);
+ VERIFY_EXPR(QueueFamilyCount> 0);
+ m_QueueFamilyProperties.resize(QueueFamilyCount);
+ vkGetPhysicalDeviceQueueFamilyProperties(m_VkDevice, &QueueFamilyCount, m_QueueFamilyProperties.data());
+ VERIFY_EXPR(QueueFamilyCount == m_QueueFamilyProperties.size());
+
+ // Get list of supported extensions
+ uint32_t ExtensionCount = 0;
+ vkEnumerateDeviceExtensionProperties(m_VkDevice, nullptr, &ExtensionCount, nullptr);
+ if (ExtensionCount > 0)
+ {
+ m_SupportedExtensions.resize(ExtensionCount);
+ auto res = vkEnumerateDeviceExtensionProperties(m_VkDevice, nullptr, &ExtensionCount, m_SupportedExtensions.data());
+ VERIFY_EXPR(res == VK_SUCCESS);
+ VERIFY_EXPR(ExtensionCount == m_SupportedExtensions.size());
+ }
+ }
+}