@@ -34,6 +34,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3434// PhysicalDevice.cpp
3535
3636#include " ../Math/NumberTypes.h"
37+ #include " ../Memory/Array.h"
38+ #include " ../Memory/DynamicArray.h"
3739#include " ../Error.h"
3840
3941#include " GraphicsCoreCVars.h"
@@ -58,7 +60,7 @@ static void PrintDeviceInfo( const EngineConfig& config ) {
5860 config.conformanceVersion .major , config.conformanceVersion .minor , config.conformanceVersion .patch );
5961}
6062
61- bool SelectPhysicalDevice ( const DynamicArray<VkPhysicalDevice>& devices, EngineConfig* config ) {
63+ bool SelectPhysicalDevice ( const DynamicArray<VkPhysicalDevice>& devices, EngineConfig* config, VkPhysicalDevice* deviceOut ) {
6264 if ( !devices.size ) {
6365 Err ( " No Vulkan devices found" );
6466 return false ;
@@ -109,7 +111,45 @@ bool SelectPhysicalDevice( const DynamicArray<VkPhysicalDevice>& devices, Engine
109111
110112 *config = bestCFG;
111113
112- QueuesConfig queuesConfig = GetQueuesConfigForDevice ( *bestDevice ) ;
114+ *deviceOut = *bestDevice;
113115
114116 return true ;
115117}
118+
119+ void CreateDevice ( const VkPhysicalDevice& physicalDevice, EngineConfig& config, QueuesConfig& queuesConfig,
120+ const char * const * requiredExtensions, const uint32 extensionCount,
121+ VkDevice* device ) {
122+ VkPhysicalDeviceVulkan12Features features12 {};
123+ VkPhysicalDeviceVulkan13Features features13 { .pNext = &features12 };
124+ VkPhysicalDeviceFeatures2 features { .pNext = &features13 };
125+
126+ vkGetPhysicalDeviceFeatures2 ( physicalDevice, &features );
127+
128+ DynamicArray<VkDeviceQueueCreateInfo> queueInfos;
129+ queueInfos.Resize ( queuesConfig.count );
130+
131+ for ( uint32 i = 0 ; i < queuesConfig.count ; i++ ) {
132+ DynamicArray<float > priorities;
133+ priorities.Resize ( queuesConfig[i].queues );
134+
135+ for ( float * value = priorities.memory ; value < priorities.memory + priorities.size ; value++ ) {
136+ *value = 1 .0f ;
137+ }
138+
139+ VkDeviceQueueCreateInfo& queueInfo = queueInfos[i];
140+
141+ queueInfo.queueFamilyIndex = i;
142+ queueInfo.queueCount = queuesConfig[i].queues ;
143+ queueInfo.pQueuePriorities = priorities.memory ;
144+ }
145+
146+ VkDeviceCreateInfo info {
147+ .pNext = &features,
148+ .queueCreateInfoCount = queuesConfig.count ,
149+ .pQueueCreateInfos = queueInfos.memory ,
150+ .enabledExtensionCount = extensionCount,
151+ .ppEnabledExtensionNames = requiredExtensions
152+ };
153+
154+ VkResult res = vkCreateDevice ( physicalDevice, &info, nullptr , device );
155+ }
0 commit comments