标签: mesa

Mesa与OpenGL驱动程序有何不同?

说Mesa是OpenGL的实现到底是什么意思?我的Nvidia卡的驱动程序不能实现所有OpenGL功能等吗?因此,鉴于我的Nvidia卡的驱动程序正在接受Opengl调用并将其交给硬件,Mesa究竟做了什么?有人可以澄清梅萨和司机之间的区别吗?

opengl mesa

14
推荐指数
2
解决办法
6292
查看次数

如何使用开源驱动程序在AMD videocard上设置OpenCL?

我已经阅读了这个链接 - https://wiki.debian.org/ru/AtiHowTo 并决定设置OpenCL.

r600g驱动程序仍然需要将专用微码加载到GPU中以实现硬件加速.该固件通常包含在内核中,但在Debian中单独打包.

所以,我安装了固件:

# apt-show-versions firmware-linux-nonfree firmware-linux
firmware-linux-nonfree:all/sid 0.40 uptodate
firmware-linux:all/sid 0.40 uptodate
Run Code Online (Sandbox Code Playgroud)

然后我升级内核版本:

uname -v
#1 SMP PREEMPT RT Debian 3.12.8-1 (2014-01-19)
Run Code Online (Sandbox Code Playgroud)

并检查内核标志:

grep DRM_RADEON /boot/config-$(uname -r)
CONFIG_DRM_RADEON=m
# CONFIG_DRM_RADEON_UMS is not set
grep AGP /boot/config-$(uname -r)
CONFIG_AGP=y
CONFIG_AGP_AMD64=y
CONFIG_AGP_INTEL=y
CONFIG_AGP_SIS=y
CONFIG_AGP_VIA=y
Run Code Online (Sandbox Code Playgroud)

另外我最近设置了xserver版本:

# apt-show-versions xorg
xorg:amd64/sid 1:7.7+5 uptodate
Run Code Online (Sandbox Code Playgroud)

我选择radeon作为驱动程序:

你肯定使用的是wheezy的xserver-xorg-core,它不再提供xorg-video-abi-6.0,radeonhd不适用于较新的xorg-video-abi,因为它已从Debian中删除

# apt-show-versions xserver-xorg-video-radeon
xserver-xorg-video-radeon:amd64/sid 1:7.3.0-1 uptodate
Run Code Online (Sandbox Code Playgroud)

这给了我OpenGL工作:

$ glxinfo | grep OpenGL
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD RV770
OpenGL …
Run Code Online (Sandbox Code Playgroud)

opencl mesa

12
推荐指数
2
解决办法
2万
查看次数

在Linux上构建VTK时收到错误"GLintptr尚未声明"

在Linux上构建VTK时,我收到以下错误:

In file included from /usr/include/GL/glx.h:333:0,
             from /home/mildred/Work/3DKF/VTK/Rendering/vtkXOpenGLRenderWindow.cxx:31:
/usr/include/GL/glxext.h:480:143: error: ‘GLintptr’ has not been declared
Run Code Online (Sandbox Code Playgroud)

linux build vtk mesa

11
推荐指数
1
解决办法
4992
查看次数

使用Qt5时,opengl32.dll的延迟加载失败

我需要在Windows 7的Qt5项目中使用OpenGL版本2功能(Qt是使用桌面OpenGL而不是ANGLE构建的).为了支持通过远程桌面运行应用程序,我想在必要时通过Mesa回退到软件渲染.我的计划是在启动时检查OpenGl版本.如果它是低,我在应用程序设置中设置一个标志,打印一条消息并终止该程序.当程序再次启动时,我可以读取标志并决定是否需要从Mesa而不是Windows的内置版本加载opengl32.dll.

为了实现这一点,我尝试通过设置/DELAYLOAD:opengl32.dll链接器标志然后使用SetDllDierectoryW([path to dir with Mesa's opengl32.dll])重定向dll查找来延迟加载opengl32.dll .不幸的是,这不起作用,因为内置版本的opengl32.dll在进入后就已经在内存中main(),因此SetDllDirectory没有任何效果.

Dependency Walker向我显示Qt5Gui.dll本身与opengl32.dll相关联,我怀疑这会破坏延迟加载.但是当我尝试延迟加载Qt5Gui.dll时,链接器由于导入的符号而失败"__declspec(dllimport) public: static struct QMetaObject const QWindow::staticMetaObject" (__imp_?staticMetaObject@QWindow@@2UQMetaObject@@B).我怎么知道怎么摆脱这个.

我真的需要OpenGL 2所以似乎无法使用Mesa进行软件渲染.但我无法想出延迟加载的替代方案.每当我想在硬件和软件渲染之间切换时更改PATH设置似乎不起作用,并且通过将Mesa的opengl32.dll移入或移出应用程序目录而进行切换不是一个选项,因为普通用户不应该具有所需的写入权限.

有没有办法让opengl32.dll的延迟加载与Qt5一起使用?

c++ windows opengl mesa qt5

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

EGLD上的EGLD显示

我想通过EGL创建一个OpenGL上下文.由于我实际上不会绘制,我想将Pbuffers与GBM平台结合使用.这是代码(C99):

#include <stdlib.h>
#include <assert.h>

#include <fcntl.h>
#include <unistd.h>

#include <EGL/egl.h>
#include <EGL/eglext.h>

#include <gbm.h>


int main( void )
{
    assert( eglBindAPI( EGL_OPENGL_API ) == EGL_TRUE );

    int fd = open("/dev/dri/card0", O_RDWR);
    struct gbm_device * gbm = gbm_create_device( fd );

    EGLDisplay dpy = eglGetDisplay( gbm );
    eglInitialize( dpy , NULL , NULL );

    EGLConfig config;
    EGLint n_of_configs;
    assert( eglGetConfigs( dpy , &config , 1 , &n_of_configs ) == EGL_TRUE );

    EGLSurface srf = eglCreatePbufferSurface( dpy , config , NULL ); …
Run Code Online (Sandbox Code Playgroud)

c mesa egl

7
推荐指数
1
解决办法
4366
查看次数

xvfb(使用 Mesa 19.2)与 Vulkan 兼容吗?

我正在尝试通过xvfb在无头 Ubuntu 19.10 虚拟机上运行基于 Vulkan 的图形应用程序。

从裸 Ubuntu 19.10 映像(使用lxc创建)开始,我按如下方式准备机器:

> sudo apt update
> sudo apt install -y xvfb mesa-vulkan-drivers vulkan-tools
Run Code Online (Sandbox Code Playgroud)

然后我运行以下两个命令:

在终端 1:启动 XVFB

Xvfb :1 -screen 0 1024x768x24
Run Code Online (Sandbox Code Playgroud)

在终端 2:运行 vulkaninfo

> DISPLAY=:1 vulkaninfo 
==========
VULKANINFO
==========

Vulkan Instance Version: 1.1.114

/build/vulkan-tools-IZAxVX/vulkan-tools-1.1.114.0+dfsg1/vulkaninfo/vulkaninfo.c:5884: 
failed with VK_ERROR_INITIALIZATION_FAILED
Run Code Online (Sandbox Code Playgroud)

(运行我自己的自定义 Vulkan 应用程序会产生类似的失败。)

据我了解,Xvfb 依赖于台面,而我使用的是台面 19.2.1

而且,根据Mesa 19.2.1 发行说明,它应该支持 Vulkan:

“Mesa 19.2.1 实现了 Vulkan 1.1 API,但 VkPhysicalDeviceProperties 结构的 apiVersion 属性报告的版本取决于所使用的特定驱动程序。”

问题:期望 vulkan 应用程序可以在 Ubuntu 19.10 …

mesa xvfb vulkan

7
推荐指数
0
解决办法
481
查看次数

如何在Ubuntu上使用Mesa 10.1启用OpenGL 3.3

我试图得到一个依赖OpenGL 3.3和GLSL 3.3的基于OpenGL的渲染引擎,使用AMD Radeon 6950在Ubuntu 13.10上运行.我想使用开源驱动程序(radeon),它依赖于Mesa来实现OpenGL.Ubuntu 13.10仅提供"开箱即用"的Mesa 9.2(实现OpenGL 3.1).但是,可以从此PPA安装Mesa 10.1(实现OpenGL 3.3),如本主题中所述:

StackOverflow:在Ubuntu 12.04下的HD Graphics 4000上的OpenGL和GLSL 3.3

我使用了与那里解释完全相同的步骤:

1.) Add the PPA Repository
  $ sudo add-apt-repository ppa:oibaf/graphics-drivers
2.) Update sources
  $ sudo apt-get update
3.) Dist-upgrade (rebuilds many packages)
  $ sudo apt-get dist-upgrade
4.) Then I rebooted.
Run Code Online (Sandbox Code Playgroud)

Mesa 10.1已成功安装.但是,glxinfo虽然它现在报告正在使用Mesa 10.1,但仍然只报告OpenGL 3.0(compat配置文件)和OpenGL 3.1(核心配置文件):

$ glxinfo | grep OpenGL
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD CAYMAN
OpenGL core profile version string: …
Run Code Online (Sandbox Code Playgroud)

opengl ubuntu mesa

6
推荐指数
1
解决办法
6万
查看次数

如何使用 CMake 在 Ubuntu 中查找和链接 OpenGL(mesa) 包

我是CMakeOpenGL 的新手。我现在需要在我的 Ubuntu 15.04 64 位 PC 上的项目中使用OpenGL作为库,该 PC 由CMake 3.0.2构建。

我已经为此工作了几天,几乎感到沮丧。我对一堆问题感到困惑。


台面和 OpenGL

首先,我使用 command安装了mesasudo apt-get install mesa-common-dev,这让我得到了mesa 10.5.2

然后我浏览包文件dpkg -L mesa-common-dev

/.
/usr
/usr/share
/usr/share/bug
...
/usr/share/bug/mesa-common-dev/control

/usr/share/doc
...
/usr/share/doc/mesa-common-dev/faq.html

/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/dri.pc

/usr/include
/usr/include/GL
/usr/include/GL/gl.h
...
/usr/include/GL/glx_mangle.h
Run Code Online (Sandbox Code Playgroud)

问题 1:共享库 (.so) 和静态库 (.a) 在哪里?


制作

我现在有一个CMakeLists.txt, 名为 OpenGL 模块OPENGL

...
find_package(OPENGL REQUIRED)  # here is CMakeLists.txt:45
... …
Run Code Online (Sandbox Code Playgroud)

opengl cmake mesa

6
推荐指数
1
解决办法
1万
查看次数

OpenGL 直接到 Linux 帧缓冲区,无需 X-Server

我有一个使用 GLUT 开发的小型 OpenGL 应用程序。在没有 X-Server 的情况下,使用 OpenGL 直接渲染到 Linux 帧缓冲区 (fbdev) 的最佳选择是什么?我知道 GLUT 需要 X,所以我不是在寻找在没有 X 的情况下使用 GLUT 的方法。

我打算使用的帧缓冲设备已确认与fbi和一起使用mplayer

我已经完成(或者我认为我已经完成了)一项非常详尽的研究,并找到了一些可能有用的资源和库。但大部分信息都有些过时,我不确定该相信什么。

因此,虽然很多 SO 答案都提到 DirectFB 和 Mesa 作为解决方案,但我无法让自己对这些选项充满信心,因为可以找到的材料很少。

所以,如果你能在这里指出我正确的方向,给我任何例子,我将不胜感激。我错过了什么?


由于问题被标记为重复而进行编辑:

相关问题的答案建议使用 DRM。我打算在尚不支持主线 Linux 内核的基于 Allwinner H3 的嵌入式计算机上运行我的代码。目前,它在内核版本 3.14 上运行,我认为它不支持 DRM。

那么,有没有其他选择?

linux opengl framebuffer directfb mesa

6
推荐指数
0
解决办法
2800
查看次数

如何在不成为 DRM 大师的情况下渲染到第二个屏幕?

我有一个嵌入式进程,可以使用 DRM 和 KMS API 直接呈现到屏幕上。它运行在最小的 Yocto 发行版上(没有桌面或 Wayland)。我想从另一个进程渲染到连接到同一个 GPU 的第二个屏幕。第一个进程打开'/dev/dri/card0'并成为事实上的DRM master,它可以在主屏幕上执行drmModeSetCrtc & drmModePageFlip来显示帧缓冲区。但是,如果我调用 drmDropMaster,它就不能再进行翻页了。因此,第二个进程不能成为 DRM 母版并使用相同的技术渲染到另一个显示器。

有很多关于如何使用直接渲染管理器 (DRM) 和内核模式设置 (KMS) 渲染到一个屏幕的示例,但我发现没有一个可以从另一个进程渲染到第二个屏幕。

一旦设置了显示模式,如果可能的话,我想没有大师,但翻页也是一个受限制的API。如果这无法实现,也许是一个关于如何使用 drmAuthMagic 授予第二个进程权限的示例?

opengl embedded-linux mesa yocto

6
推荐指数
1
解决办法
997
查看次数

标签 统计

mesa ×10

opengl ×6

linux ×2

build ×1

c ×1

c++ ×1

cmake ×1

directfb ×1

egl ×1

embedded-linux ×1

framebuffer ×1

opencl ×1

qt5 ×1

ubuntu ×1

vtk ×1

vulkan ×1

windows ×1

xvfb ×1

yocto ×1