Vulkan Memory Allocator(VMA)在NVIDIA GPU上运行样本失败求助
解决Vulkan Memory Allocator样本程序断言失败问题
问题概述
已安装Vulkan Memory Allocator(VMA)及样本程序,运行时触发断言失败:
Assertion failed: file.is_open(), file C:\Users\usr\VulkanMemoryAllocator\src\VulkanSample.cpp, line 296
环境及设备信息:
- OS:Windows 11
- IDE:Visual Studio 2022
- GPU:NVIDIA RTX 2060
- 驱动版本:546.65
- Vulkan SDK版本:1.3.275.0
- VMA样本版本:3.0.1
- 已安装Microsoft Visual C++ Redistributable 2015/2017/2019 x64版本,且更新了NVIDIA驱动
设备及Vulkan配置详情:
Vulkan Memory Allocator Sample 3.0.1 使用的Vulkan API版本:1.3 physicalDeviceProperties: driverVersion: 0x88904000 vendorID: 0x10DE (NVIDIA) deviceID: 0x1E89 deviceType: 2 (DISCRETE_GPU) deviceName: NVIDIA GeForce RTX 2060 limits: maxMemoryAllocationCount: 4096 bufferImageGranularity: 1024 B nonCoherentAtomSize: 64 B physicalDeviceVulkan11Properties: maxMemoryAllocationSize: 4292870144 B (4.00 GB) physicalDeviceVulkan12Properties: driverID: 4 (NVIDIA_PROPRIETARY) driverName: NVIDIA driverInfo: 546.65 MEMORY HEAPS: heapCount=3, typeCount=5 Heap 0: 6247415808 B (5.82 GB) DEVICE_LOCAL Type 1: DEVICE_LOCAL Heap 1: 25648566272 B (23.89 GB) Type 0: Type 2: HOST_VISIBLE, HOST_COHERENT Type 3: HOST_VISIBLE, HOST_COHERENT, HOST_CACHED Heap 2: 224395264 B (214.00 MB) DEVICE_LOCAL Type 4: DEVICE_LOCAL, HOST_VISIBLE, HOST_COHERENT 结论: - 2个DEVICE_LOCAL堆,总计6.03 GB。 - 2个HOST_VISIBLE堆,总计24.10 GB。 - 1个同时为DEVICE_LOCAL和HOST_VISIBLE的堆,总计214.00 MB。 - 不存在仅HOST_VISIBLE但非HOST_COHERENT的类型。 - 1个既非DEVICE_LOCAL也非HOST_VISIBLE的类型。 - 不存在AMD专属的DEVICE_COHERENT或DEVICE_UNCACHED类型。 - 不存在LAZILY_ALLOCATED类型。 - 带有VERTEX_BUFFER用途的缓冲区可在某些非DEVICE_LOCAL类型中创建。 - 带有OPTIMAL平铺和SAMPLED用途的图像可在某些非DEVICE_LOCAL类型中创建。 已启用的扩展和功能: Validation layer: 1 Sparse binding: 1 VK_EXT_memory_budget: 1 VK_AMD_device_coherent_memory: 0 bufferDeviceAddress: 1 VK_EXT_memory_priority: 1
问题原因分析
断言file.is_open()失败说明程序尝试打开某个文件但未成功,常见原因包括:
- 程序运行时工作目录错误,导致找不到目标文件
- 样本依赖的资源文件未被正确复制到输出目录
- 文件所在目录权限不足,程序无法读取文件
解决方案
1. 调整程序工作目录
在Visual Studio中操作:
- 右键点击VMA样本项目 → 属性 → 调试 → 工作目录
- 将工作目录设置为样本资源文件所在的目录,比如项目根目录
$(ProjectDir),或具体资源文件夹路径$(ProjectDir)assets
2. 确保资源文件复制到输出目录
- 找到样本项目中的资源文件(如纹理、配置文件等)
- 右键点击文件 → 属性 → 常规 → 复制到输出目录,设置为「如果较新则复制」或「始终复制」
- 手动检查输出目录(如
x64/Debug或x64/Release),确认资源文件存在
3. 检查文件权限
- 避免将程序安装在
C:\Program Files这类系统保护目录 - 若程序已在保护目录,尝试以管理员身份运行Visual Studio或样本程序
4. 定位缺失的具体文件
打开VulkanSample.cpp第296行,查看代码中尝试打开的文件名,比如:
std::ifstream file("sample_texture.png"); assert(file.is_open()); // 第296行
找到文件名后,手动确认文件位置,要么将文件移至程序工作目录,要么修改代码中的文件路径为绝对路径
内容的提问来源于stack exchange,提问作者siwameron
相关产品推荐
相关产品推荐

