1.首先看三个设备节点
<1>.基于CPU的framebuffer
/dev/fb0<2>.基于GPU的framebuffer
/dev/graphics/fb0<3>.基于Mesa3D图形库(Mesa3D图形库是OpenGL API的一种开源实现)
/dev/dri/renderD128总结:各个芯片厂商的OpenGL实现是不一样的,如展讯9863(Android9.0)就是使用的Mesa3D的OpenGL实现。测试截图命令:
# strace /system/bin/screencap
openat(AT_FDCWD, "/dev/dri/renderD128", O_RDWR) = 9
ioctl(9, DRM_IOCTL_VERSION, 0x7fd100d3c8) = 0
fcntl(9, F_SETFD, FD_CLOEXEC)           = 0
ioctl(9, DRM_IOCTL_AMDGPU_GEM_CREATE or DRM_IOCTL_VIA_ALLOCMEM, 0x7fd100e278) = 0
注意:这里打开的不是/dev/graphics/fb0,而是/dev/dri/renderD128查看调用:
external/drm_gralloc/gralloc_drm.cpp
struct gralloc_drm_t *gralloc_drm_create(void)
{char path[PROPERTY_VALUE_MAX];struct gralloc_drm_t *drm;int err;drm = new gralloc_drm_t;if (!drm)return NULL;property_get("gralloc.drm.device", path, "/dev/dri/renderD128");drm->fd = open(path, O_RDWR);if (drm->fd < 0) {ALOGE("failed to open %s", path);return NULL;}drm->drv = init_drv_from_fd(drm->fd);if (!drm->drv) {close(drm->fd);delete drm;return NULL;}return drm;
}<3>.DRM(Direct RENDER Manager)
DRM是Linux目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件。比如FB原生不支持
多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fence机制等等,而这些功能DRM原生都支
持。同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护。<4>.什么是Mesa3D图形库简单来说Mesa3D图形库就是OpenGL API的一种开源实现. 众所周知, OpenGL API是定义了一个跨编程语言、 跨平台的应用程序接口(API)的规范, 它用于生成2D和
3D图像, 而它仅仅是定义了一种API, 并没有任何实现细节. 而OpenGL API的具体实现有很多, 主要分为开
源实现和闭源实现, 闭源实现如各大GPU厂商自己实现的闭源OpenGL图形库, 例如AMD显卡的Catalyst闭源
驱动; 而开源实现便是Mesa3D, 它是由Brian Paul在1993年8月开始开发的一个实现了OpenGL API的开源
图形库. 它目前隶属于freedesktop.org, 广泛运用在Liunx, BSD等操作系统.PS: 其实最新版本的Mesa3D图形库也支持Direct3D9的, Mesa3D除此之外还支持OpenCl, OpenGL ES等等.

2.离屏(offscreen)渲染

OpenGL中,GPU屏幕渲染有两种方式:

(1)On-Screen Rendering (当前屏幕渲染)

指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区进行。

(2)Off-Screen Rendering (离屏渲染)

指的是在GPU在当前屏幕缓冲区以外,开辟一个缓冲区进行渲染操作。

当前屏幕渲染不需要额外创建新的缓存,也不需要开启新的上下文,相对于离屏渲染性能更好。但是受当前屏幕渲染的局限因素限制(只有自身上下文、屏幕缓存有限等),当前屏幕渲染有些情况下的渲染解决不了的,就使用到离屏渲染。

OpenGL调用GPU(七)相关推荐

  1. matlab中如何调用gpu进行并行计算_极致安卓-Termux/Aid learning开启WebGL手机GPU并行计算...

    在我的之前的测评中,我利用Termux和Aid Learning测试过基于C/C++的openmp并行程序,基于Java的并行程序,还有基于MPI以及基于Java的分布式集群并行.但是很遗憾,一直无法 ...

  2. Ubuntu16.04 LTS 安装NVIDIA驱动的辛酸史!+ nvidia-settings无法正常打开!+ Tensorflow-gpu成功调用GPU!

    ** 笔者小白经历了从入门到放弃,坚持到成功的大起大落,决定写一些东西记录一下这一路爬过的坑! 废话不多说,直奔主题. 在跑代码的过程中发现无法调用GPU,于是输入 nvidia-smi命令查看GPU ...

  3. tensorflow2.x版本无法调用gpu的一种解决方法

    最近学校给了一个服务器账号用来训练神经网络使用,服务器本身配置是十路titan V,然后在上面装了tensorflow2.2,对应的python版本是3.6.2,装好之后用tf.test.is_gpu ...

  4. python无法使用1号gpu_详解tensorflow2.x版本无法调用gpu的一种解决方法

    最近学校给了一个服务器账号用来训练神经网络使用,服务器本身配置是十路titan V,然后在上面装了tensorflow2.2,对应的python版本是3.6.2,装好之后用tf.test.is_gpu ...

  5. docker用gpu的参数_初探Docker调用GPU

    前一阵子写了一篇docker的学习笔记[1],但是当时没有gpu,所以没法做显卡调用相关的内容.最近机房的电脑启动了,有了实验环境,打算把docker调用gpu相关的内容测试一下.实验环境依然为Ubu ...

  6. tensorflow不能调用GPU

    问题:在环境了安装了tensorflow-gpu,但是,在程序运行时,代码并没有调用GPU 原因:环境中存在CPU版tensorflow,程序运行时可能默认使用CPU版tensorflow. 解决方法 ...

  7. OpenGL EGL GPU工作流程理解(十四)

    基本概念 1.OpenGL ES :OpenGL是一套绘图函数的标准,OpenGL|ES是OpenGL中针对嵌入式系统的一套函数子集. 2.EGL:通俗上讲,OpenGL是一个操作GPU的API,它通 ...

  8. cuda的安装,及pytorch调用GPU步骤

    前言: 深度学习涉及很多向量或多矩阵运算,如矩阵相乘.矩阵相加.矩阵-向量乘法等.深层模型的算法,如BP,Auto-Encoder,CNN等,都可以写成矩阵运算的形式,无须写成循环运算.然而,在单核C ...

  9. K8S调用GPU资源配置指南

    06-09 K8S调用GPU资源配置指南 时间 版本号 修改描述 修改人 2022年6月9日15:33:12 V0.1 新建K8S调用GPU资源配置指南, 编写了Nvidia驱动安装过程 2022年6 ...

最新文章

  1. MySQL 性能调优的10个方法
  2. Python 技术篇-调用浏览器访问指定网页,一行代码实现。非Selenium。
  3. Netty防止内存泄漏措施
  4. Shiro+springboot+mybatis+EhCache(md5+salt+散列)认证与授权-03
  5. centos 新装mysql 进入,centos5安装 mysql 提示需要用户及密码进入?Duplicate entry 'localhost-' for key 1...
  6. 二分法之旋转有序数组
  7. (转)DB2 db2diag.log 日志分析
  8. python pip 快速安装第三方库和下载好whl文件
  9. angularjs姓名转拼音js
  10. 基于Python的动漫人物分类识别系统
  11. WIN10打印机显示服务器脱机,win10网络打印机显示脱机处理方法
  12. Thinkcmf QQ邮箱配置
  13. 使用Python PIL库中的Image.thumbnail函数裁剪图片
  14. python读取图片文字-Python3实现获取图片文字里中文的方法分析
  15. HTTP详解(请求方式)
  16. 打表+dp思维+博弈
  17. dx12 龙书第四章学习笔记 -- Direct3D的初始化
  18. 文秀才文档管理系统文档管理,CAD, 图纸管理, 百度文库, 文档在线预览
  19. 短视频社交应用系统开发-节省人力、物力成本,快速拥用短视频社交主流功能
  20. 【python】 中英文混合块加密算法文本文件的块加密

热门文章

  1. koa搭建node服务
  2. 26期20180718 rsync
  3. 1. BeeGo 介绍与项目的创建,启动
  4. 表达式,语句,变量与宏的一些概念
  5. UbuntuServer安装Node.js
  6. Struts2 校验框架学习笔记
  7. ACS被集成到了Windows Azure Management Portal中
  8. C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent
  9. Android 和 iOS 各有千秋
  10. Javascript第五章innerHTML/innerText/创建新节点元素添加内容第八课