私は、NULL ハンドルで Destroy / Free を呼び出すことができるという印象を受けました。
2.5.1 有効な使用法
VK_NULL_HANDLE を任意の vkDestroy* または vkFree* コマンドに渡すことは有効であり、これらの値は黙って無視されます。
しかし、vkGetInstanceProcAddrとvkGetDeviceProcAddrを使用して関数ポインターを取得するとどうなるでしょうか。私は次のことをしています:
Device::Device(Device&& other) :
handle(other.handle),
functions(other.functions)
{
other.handle = VK_NULL_HANDLE;
}
もちろん、元のデバイスに対してデストラクタが呼び出されると、null ハンドルがデバイス固有のvkDestroyDeviceに渡されます。
現在、これにより読み取りアクセス違反が発生しています。これが AMD のせいなのか、LunarG のせいなのか、それとも私のせいなのかわかりません。