【自作ゲームエンジン開発】Vulkan 物理デバイス

はじめて読む方へ

この記事はサイト主が【自作ゲームエンジン開発】を行うまでのほぼ全行程を記事にまとめたものです。

主自体はC++からVulkanから何まで初心者のため、同じようなレベルの人の役に立てればと書いています。

上級者の方々にはあまりおすすめできない記事ですのでご了承ください。

前の記事→【自作ゲームエンジン開発】Vulkan 検証レイヤーの作成

自作ゲームエンジン開発記事一覧→【自作ゲームエンジン開発】記事一覧

Vulkan 物理デバイス

今回は物理デバイスに関するプログラムです。

VkInstanceでVulkanライブラリを初期化した後、必要な機能をサポートするグラフィックカードをシステム内で探して選択する必要があります。

実際には何枚でも選択して同時に使用することができますが、必要な機能をサポートしているグラフィックカードを最初に選択することにします。

void initVulkan() {
    createInstance();
    setupDebugMessenger();
    pickPhysicalDevice();
}

void pickPhysicalDevice() {

}

pickPhysicalDevice関数を追加し、initVulkanから呼び出します。

後で使うのでisDeviceSuitable関数を作成しておきます。

条件を指定してその条件に合えばtrueを返します。

条件は後で設定します。

bool isDeviceSuitable(VkPhysicalDevice device) {
    return true;
}

pickPhysicalDeviceのコードです。

VkPhysvoid pickPhysicalDevice() {
    VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
    uint32_t deviceCount = 0;
    vkEnumeratePhysicalDevices(instance, &deviceCount, nullptr);

    if (deviceCount == 0) {
        throw std::runtime_error("failed to find GPUs with Vulkan support!");
    }

    std::vector<VkPhysicalDevice> devices(deviceCount);
    vkEnumeratePhysicalDevices(instance, &deviceCount, devices.data());

    for (const auto& device : devices) {
        if (isDeviceSuitable(device)) {
            physicalDevice = device;
            break;
        }
    }

    if (physicalDevice == VK_NULL_HANDLE) {
        throw std::runtime_error("failed to find a suitable GPU!");
    }
}

物理デバイスの数を取得してからisDeviceSuitableで自分の欲しい機能がついている物理デバイスを探し、見つけたらそれを使うようにしています。

条件はまだ指定していないのでどのデバイスでも使えることになってしまいますが、今後条件は随時設定していきます。

コメント

タイトルとURLをコピーしました