我的系统具有以下规格:
GPU:
中央处理器:
当我运行 vkEnumeratePhysicalDevices() 时,它仅返回 1 个设备,即我的集成显卡(AMD Radeon(TM) Graphics)。但我发现,如果我使用 Windows 设置中的图形设置(设置 > 系统 > 显示 > 图形设置,然后浏览查找 Vulkan 项目的 build .exe 并将选项设置为高性能)。然而,当我现在运行 Vulkan 项目时,它仍然只在系统上显示 1 个 GPU,只是切换为仅显示 RTX 2060。
这显然不是一个没有代码经验的游戏玩家会做的事情(如果我要使用 Vulkan 完成一款游戏的话)。我推断这可能会发生,因为我使用的是笔记本电脑,所以我尝试禁用所有省电设置,但没有任何改变。
所以我想知道是否有一种方法可以找到 Vulkan 之外系统上的所有 GPU,并将物理设备设置在该列表之外,因为 Vulkan 似乎无法立即找到所有 GPU?
编辑: 我发现如果我在设备管理器中关闭集成 GPU,然后重新打开它,我可以让它看到专用 GPU。
我也收到错误:validation layer: setupLoaderTrampPhysDevs: Failed during dispatch call of 'vkEnumeratePhysicalDevices' to lower layers or loader to get count.
编辑2: …
这是一个奇怪的问题。我有一个功能:
void drawLines(std::vector<GLfloat> lines) {
glBindVertexArray(VAO2);
//positions
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)0);
glEnableVertexAttribArray(0);
//colors
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, VBO2);
glBufferData(GL_ARRAY_BUFFER, sizeof(lines[0]) * lines.size(), &lines[0], GL_STATIC_DRAW);
glUseProgram(pShaderProgram);
glDrawArrays(GL_TRIANGLES, 0, lines.size() / 6);
}
Run Code Online (Sandbox Code Playgroud)
它绘制指定粗细的线条(这是内置于数据中的,其中lines包含三个浮点数用于位置,三个浮点数用于颜色,每个点有超过 200 个点来标记线条结尾)。SwapBuffers(HDC)即使在使用and之后,调用该函数一次也不会产生任何结果glFlush()。但是,当我调用该函数两次时,一切都会显示出来。我怀疑我在通过渲染管道推送缓冲区时遗漏了一些细微差别,这可能通过多次绑定缓冲区来激活。我不确定。有什么想法吗?