小编Bra*_*ano的帖子

vkEnumeratePhysicalDevices() 未找到所有 GPU

我的系统具有以下规格:

GPU:

  • AMD Radeon(TM) 显卡
  • 采用 Max-Q 设计的 NVIDIA GeForce RTX 2060

中央处理器:

  • AMD Ryzen 9 4900HS 搭载 Radeon 显卡

当我运行 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: …

c++ vulkan

8
推荐指数
1
解决办法
4658
查看次数

使用 glDrawArrays() 的绘制函数需要调用两次才能显示任何内容

这是一个奇怪的问题。我有一个功能:

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()。但是,当我调用该函数两次时,一切都会显示出来。我怀疑我在通过渲染管道推送缓冲区时遗漏了一些细微差别,这可能通过多次绑定缓冲区来激活。我不确定。有什么想法吗?

c++ opengl winapi

2
推荐指数
1
解决办法
221
查看次数

标签 统计

c++ ×2

opengl ×1

vulkan ×1

winapi ×1