スポンサーリンク

vulkanをインストール・Rust+ashで動作確認

とりあえずVulkan SDKをいれる。LunarGのサイトからVulkanSDKのインストーラをダウンロードしてインストール。

何も考えず次へを押していく。なおインストール先のデフォルトはC:\VulkanSDK\バージョン。

Rustで動作チェック

Rustのvulkanラッパーはいくつかあるがとりあえずashを使用

Cargo.toml

[dependencies]
ash = { version = "0.38.0", features = ["linked"] }

main.rs

extern crate ash;

use ash::vk;
use std::ffi::{CStr, CString};
use std::ptr;

fn main() {

    /////////////////////////////////////////////
    // Vulkanライブラリのエントリポイントを作成
    let entry = ash::Entry::linked();

    /////////////////////////////////////////////
    // アプリケーション情報を設定
    let app_name = CString::new("Vulkan Sample").unwrap();
    let engine_name = CString::new("No Engine").unwrap();
    let app_info = vk::ApplicationInfo {
        s_type: vk::StructureType::APPLICATION_INFO,
        p_next: ptr::null(),
        p_application_name: app_name.as_ptr(),
        application_version: vk::make_version(1, 0, 0),
        p_engine_name: engine_name.as_ptr(),
        engine_version: vk::make_version(1, 0, 0),
        api_version: vk::API_VERSION_1_0,
        _marker: Default::default(),
    };

    /////////////////////////////////////////////
    // インスタンス作成情報の設定
    let create_info = vk::InstanceCreateInfo {
        s_type: vk::StructureType::INSTANCE_CREATE_INFO,
        p_next: ptr::null(),
        flags: vk::InstanceCreateFlags::empty(),
        p_application_info: &app_info,
        enabled_layer_count: 0,
        pp_enabled_layer_names: ptr::null(),
        enabled_extension_count: 0,
        pp_enabled_extension_names: ptr::null(),
        _marker: Default::default(),
    };

    /////////////////////////////////////////////
    // Vulkanインスタンスの作成
    let instance = unsafe {
        entry.create_instance(&create_info, None)
            .expect("Vulkanインスタンスの作成に失敗しました")
    };

    /////////////////////////////////////////////
    // システム上の物理デバイス(GPUなど)の列挙
    let physical_devices = unsafe {
        instance.enumerate_physical_devices()
            .expect("物理デバイスの列挙に失敗しました")
    };

    println!("検出された物理デバイス数: {}", physical_devices.len());

    /////////////////////////////////////////////
    // デバイスの情報を出力
    for device in physical_devices {
        let properties = unsafe { instance.get_physical_device_properties(device) };
        // device_name はnull終端
        let device_name = unsafe { CStr::from_ptr(properties.device_name.as_ptr()) };
        println!("デバイス名: {}", device_name.to_str().unwrap());
    }

    /////////////////////////////////////////////
    // 使用したVulkanインスタンスの破棄
    unsafe {
        instance.destroy_instance(None);
    }
}

結果

検出された物理デバイス数: 1
デバイス名: NVIDIA GeForce RTX 3070 Ti

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: