2-2. 論理デバイス

論理デバイスの作成

物理デバイスを選んだら次は論理デバイスを作成します。GPUの能力を使うようなVulkanの機能は全てこの論理デバイスを通して利用します。GPUの能力を使いたいとするとき、物理デバイスを直接いじることは出来ません。

コンピュータの仕組みについて多少知識のある人であれば、この「物理」「論理」の区別はメモリアドレスの「物理アドレス」「論理アドレス」と同じ話であることが想像できるでしょう。マルチタスクOS上で、1つのプロセスが特定のGPU(物理デバイス)を独占して管理するような状態はよろしくありません。そこで仮想化されたデバイスが論理デバイスです。これならあるプロセスが他のプロセスの存在を意識することなくGPUの能力を使うことができます。

論理デバイスは次のように作成します。

vk::DeviceCreateInfo devCreateInfo;
vk::UniqueDevice device = physicalDevice.createDeviceUnique(devCreateInfo);

このようにして物理デバイスから論理デバイスを作成することができます。

インスタンスを作成するときにvk::InstanceCreateInfo構造体を使ったのと同じように、vk::DeviceCreateInfo構造体の中にも論理デバイス作成時の色々な情報を含めることができます。これは次回「2-3. キュー」の項で実際に使用することになります。


この節では論理デバイスの作成をやりました。次回はキューの取得をやります。

// 環境に合わせて
#define VK_USE_PLATFORM_WIN32_KHR

#define VULKAN_HPP_TYPESAFE_CONVERSION

#include <vulkan/vulkan.hpp>
#include <vector>

int main()
{
    vk::InstanceCreateInfo createInfo;

    vk::UniqueInstance instance;
    instance = vk::createInstanceUnique(createInfo);

    std::vector<vk::PhysicalDevice> physicalDevices = instance->enumeratePhysicalDevices();

    vk::PhysicalDevice physicalDevice = physicalDevices[0];

    vk::DeviceCreateInfo devCreateInfo;
    vk::UniqueDevice device = physicalDevice.createDeviceUnique(devCreateInfo);

    return 0;
}

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です