GLSL 扩展在应该可用时不可用

Posted

技术标签:

【中文标题】GLSL 扩展在应该可用时不可用【英文标题】:GLSL extension not available when it should be 【发布时间】:2019-01-18 12:05:49 【问题描述】:

我正在华硕 RoG fx553 笔记本电脑上的 Nvidia GeForce GTX 1050 上进行 GPU 计算,出于某种原因,尽管 Nvidia 官方网站将此 GPU 列为与线程内在指令兼容(GL_NV_shader_thread_group 等),使用#extension GL_NV_shader_thread_group : require 不断抛出错误并报告扩展不可用,即使我使用带有#version 430 的4.3 上下文(我也尝试了4.4 无济于事)。由于我是加载扩展程序的新手,我不知道我是否遗漏了 Glad/GLFW 端的一些设置。

编辑:我下载了 OpenGL 扩展查看器,它继续告诉我,我的 GPU 应该支持 GL_NV_shader_thread_group,即使在 OpenGL 4.3 上下文中也是如此。

【问题讨论】:

【参考方案1】:

由于您提到您在笔记本电脑上运行,我假设这台笔记本电脑还具有 iGPU(例如,集成到 CPU 中的 Intel GPU)。问题很可能是您的程序未在 NVIDIA GPU 上运行,而仅在 iGPU 上运行。一种解决方案是在 NVIDIA 驱动程序控制面板中设置应用程序配置文件,以使其将 NVIDIA GPU 用于您的应用程序。还应该有一个选项可以全局强制使用 NVIDIA GPU 进行所有操作(但不推荐)。另一种方式(我常用的)是add the following line of code to your program:

extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 1U;

这将为一个全局变量导出相应的符号,驱动程序在加载到您的进程时检查该变量。如果符号存在且变量设置为 1,则驱动程序将使用 NVIDIA GPU 进行该特定进程……

【讨论】:

确实,这就是它的全部内容......非常感谢。不过我有点惭愧;我已经遇到过这个问题,因为程序是从make run 命令运行的,而且显然发生这一切的终端没有使用 Nvidia GPU。不过我不知道出口,好提示! 别担心。我不记得我现在自己遇到了多少次这个问题。从症状中并不总是很明显这一定是问题所在……?

以上是关于GLSL 扩展在应该可用时不可用的主要内容,如果未能解决你的问题,请参考以下文章

突发错误“iOS 8.4 模拟器运行时不可用。”在 Xcode 6.4 中

PHP JSON 函数在被称为 CLI 脚本时不可用?

RuntimeError: `set_session` 在使用 TensorFlow 2.0 时不可用

@RequestMapping 注释在使用 Press 'Ctrl+Space' 时不显示。没有可用的完成。我在 STS-3 IDE 上工作 [关闭]

注意避坑,Vue Router 4: 路由参数在 created/setup 时不可用

Qt & OpenGL OS X:山狮上的 GLSL 着色器版本只有 120