vulkan.hppで拡張機能を使う際のアクセス違反解決ログ

1 min read読了の目安(約600字

問題

Instance::createDebugUtilsMessengerEXTUnique()を呼び出すとAccess violation executing location ...が発生する。

厳密にはVulkan-Hppサンプルの中のutils.cppに含まれるvk::su::createDebugUtilsMessenger()を使用した。

解決

手法1

vulkan.hppをインクルードする前にVULKAN_HPP_DISPATCH_LOADER_DYNAMICをdefineする。

#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
#include "vulkan/vulkan.hpp"

手法2

Visual Studioの場合はプロジェクトプロパティから C/C++ -> Preprocessor -> Preprocessor Definitionsの中に VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1 を追加する方法でもOK。

詳細

Vulkan-Hppにおける拡張機能と関数ポインタ周りの詳細はVulkan-HppのREADMEの Extensions / Per Device function pointers にしっかり記載されていた。