- 博客(210)
- 资源 (23)
- 问答 (1)
- 收藏
- 关注

原创 display:从Weston到DP
本文旨在总结最进工作经验以及汇总之前博文wayland/weston介绍文章:display:Wayland Architecture https://blog.youkuaiyun.com/u012839187/article/details/94599565 简单介绍x-server与weston的区别与联系。
2021-04-11 21:56:14
2533
2
原创 display: mesa: eglapi接口:createWindowSurface
详细跟踪eglCreateWindowSurface 相关函数mesa内部具体实现
2021-12-09 20:40:10
3819
原创 display: mesa: eglapi接口:getdisplay&initialize
详细跟踪eglinitliaze/eglgetdisplay相关函数具体实现
2021-10-26 23:20:44
1749
4
转载 Linux GPU系列-05-MESA架构 [转载]
代码分析本应该自下而上的,但是GPU的主要驱动主要在用户态,所以这次从用户态先开始。而且Frame怎么画出来的,也是由用户设置state和调用draw call产生的。下图是从DirectX Spec官网来的:MESAMESA源码里面有2套架构,现在驱动主要基于Gallium架构。Gallium架构MESA其实实现了很多API接口,不只是上图的OpenGL、GLX、还有OpenGL ES、OpenVG、OpenCL、VDPAU和OpenMAX等。当前MESA驱动实现状..
2021-10-19 13:52:37
3730
原创 display: weston: client: screenshoot
总体三部分:client: screenshot.cserver: screenshooter.c + gl-renderer.c
2021-09-15 19:19:31
925
原创 display: weston: opaque region笔记
client的设置方法:region = wl_compositor_create_region(window->display->compositor);wl_region_add(region, 0, 0, window->geometry.width, window->geometry.height);wl_surface_set_opaque_region(window->surface, region);wl_region_de
2021-09-01 22:49:13
1522
原创 display: drm: virtio-gpu-drm
static struct virtio_driver virtio_gpu_driver = { .feature_table = features, .feature_table_size = ARRAY_SIZE(features),… .id_table = id_table, .probe = virtio_gpu_probe, .remove = virtio_gpu_remove, .config_changed = virtio_gpu_...
2021-08-17 20:57:21
1835
转载 Where is the implementation of pixman_region32_init()?
https://stackoverflow.com/questions/48434760/where-is-the-implementation-of-pixman-region32-initIt's inpixman-region32.c. You don't see it because those functions are generated by thePREFIXmacro and then the code inpixman-region.cis used. See here:...
2021-08-06 11:25:59
528
原创 display: mesa: eglapi接口:eglswapbuffers
某一帧eglswapbuffer事件的时间格外长,达到300ms以上的情况基于这个问题。因为是wayland/weston的体系。所以面对的eglswapbuffer其实有两个部分:1.client端的eglswapbuffer,这部分是有相关的wayland协议支持的。platform_waylan2.weston内部gl-renderer模块的eglswapbuffer。platform_drm.c
2021-08-01 22:34:11
2280
2
翻译 [机翻]An introduction to Mesa’s GLSL compiler (II)[翻译]
回顾我之前的文章是对 Mesa 的 GLSL 编译器的初步了解,我们在其中讨论了 Mesa IR,它是编译器的一个核心方面。在这篇文章中,我将介绍另一个相关方面:IR 降低。IR降低Mesa 中实现了多个降低通道(查看src/glsl/lower_*.cpp以获取完整列表),但它们都有一个共同点:它们的目的是重写 IR 中的某些构造,以便它们更适合底层 GPU硬件。在这篇文章中,我们将研究lower_instructions.cpp降低传递,它重写了具有不同实现的GPU硬件可能不直接支持的表
2021-06-18 14:22:22
464
2
翻译 [机翻]An introduction to Mesa’s GLSL compiler (I)[翻译]
回顾在我的上一篇文章中,我解释了现代 3D 管道是可编程的,以及这如何影响图形驱动程序。在接下来的文章中,我们将通过查看 Mesa GLSL 编译器的不同部分来更深入地研究这个方面。具体来说,这篇文章将涵盖 GLSL 解析器、Mesa IR 以及内置变量和函数。GLSL 解析器解析器的工作是处理通过 glShaderSource 提供的着色器源代码字符串,并将其转换为合适的二进制表示,存储在 RAM 中,并且可以在后期由编译器的其他部分有效处理。解析器由一组Lex/Yacc规则组成,用于处理
2021-06-15 20:27:54
633
翻译 [机翻]A brief overview of the 3D pipeline[翻译]
回顾在上一篇文章中,我讨论了 Mesa 开发环境,并为新手提供了一些提示,但在我们开始编写代码之前,我们应该先看看现代 GPU 的样子,因为这对设计和实现有一定的影响驱动程序代码。让我们开始吧。固定功能与可编程硬件在GLSL等着色语言出现之前,我们无法随意对 3D 硬件进行编程。相反,硬件将具有专门用于实现某些操作(如顶点变换)的特定单元,这些操作只能通过特定的 API 使用,例如 OpenGL 公开的那些。这些单元通常被标记为Fixed Function,以将它们与现代 GPU 区分开来,后者
2021-06-15 18:24:05
255
3
翻译 [机翻]Setting up a development environment for Mesa[翻译]
回顾在我之前的文章中,我提供了 Mesa 源代码树的概述并确定了它的一些主要模块。由于我们正在讨论这个主题,因此我认为提供一些关于如何为 Mesa 设置开发环境的提示也很有意义,所以我就开始了。开发环境Mesa 主要是用C和C++组合编写的,它的构建系统使用autotools,版本控制使用Git,所以对于很多人来说应该是一个相当熟悉的环境。我不会在这里解释如何构建autotools项目,有很多关于该主题的文档,因此我将专注于 Mesa 的细节。首先,我们需要检出源代码。如果您没有开发者帐
2021-06-15 17:15:28
354
翻译 [机翻]An eagle eye view into the Mesa source tree[翻译]
回顾我的上一篇文章介绍了 Mesa 的加载器作为负责为我们的硬件自动选择正确驱动程序的模块。如果加载程序找不到合适的硬件驱动程序,它将回退到软件驱动程序,但我们也可以自己强制这种情况,这在某些情况下可能会派上用场。我们还快速浏览了glxinfo工具,我们可以使用该工具查询所选驱动程序公开的功能和特性。今天的主题重点是提供 Mesa 源代码树的快速概述,这将帮助我们根据驱动程序和/或我们打算使用的功能识别与我们的兴趣相关的代码部分。浏览源代码...
2021-06-12 23:21:44
322
翻译 [机翻]Driver loading and querying in Mesa[翻译]
回顾在我之前的文章中,我解释过 Mesa 是一个用于 OpenGL 驱动程序开发的框架。因此,它提供了可由多个驱动程序实现重用的代码。当然,此代码与硬件无关,但可以将驱动程序开发人员从做大部分工作中解放出来。该框架还为开发人员提供了挂钩,以添加处理实际硬件的代码位。这种设计允许多个驱动程序共存并共享大量代码。我还解释说,在 Mesa 提供的各种驱动程序中,我们可以找到利用特定 GPU 的硬件驱动程序和完全在软件中实现的软件驱动程序(因此它们在 CPU 上工作,不依赖于特定 GPU )。后者显然更慢
2021-06-12 22:14:20
1245
1
翻译 [机翻]Diving into Mesa[翻译]
回顾在我的上一篇文章中,我简要介绍了 Linux 图形堆栈。在那里我解释了我们在 Linux 中所谓的图形驱动程序实际上是三个不同驱动程序的组合: 处理 2D 图形的用户空间 X 服务器 DDX 驱动程序。 用户空间 3D OpenGL 驱动程序,可以由 Mesa 提供。 内核空间 DRM 驱动程序。 现在我们知道了 Mesa 适合的位置,让我们更详细地研究一下。 DRI 驱动程序和非 DRI 驱动程序 如前所述,Mesa 通过提供 OpenGL API 的实现来处理 3D 图形。 Mesa OpenG
2021-06-09 22:56:29
641
翻译 [机翻]Linux图形堆栈简介[翻译]
2014 年 7 月 29 日这篇文章试图对 Linux 图形堆栈做一个简短的介绍,因此,它具有介绍性。我将专注于提供足够的背景信息,以了解 Mesa 和 3D 驱动程序通常在堆栈中扮演的角色,并将其留给后续帖子,以更深入地了解 Mesa 的总体内容和英特尔 DRI 驱动程序的具体内容。一点历史为了了解当前图形堆栈的一些特殊性,了解它多年来如何适应新挑战非常重要。你看,现在的事情比以前复杂得多,但在早期,只有一个软件可以直接访问图形硬件:X 服务器。这种方法使图形堆栈更简单,因为它不...
2021-06-09 18:38:22
996
转载 [转载]Cairo 图形指南[转载]
欢迎阅读 Cairo 绘图指南,这份指南会向你讲述 Cairo 二维矢量绘图库的基本知识以及一些高级问题。指南中的示例采用 C 语言实现,其中大部分使用了 GTK+ 库。二维矢量图形计算机图形可分为两类,矢量图形与光栅图形。光栅图形是将图像表示为像素点集。矢量图形则是使用一些几何图元(点、直线、曲线、多边形等)表示图像,这些图元是使用数学公式生成的。这两类计算机图形表达方式各有所长短。相较于光栅图形,矢量图形存在以下优越性:图形文件更小 可任意缩放 平移、缩放、填充或旋转等图形变换...
2021-06-08 15:54:25
3142
1
原创 display:weston:desktop & xdg-shell
xdgshell里面有几套接口,分别是:static const struct xdg_wm_base_interface weston_desktop_xdg_shell_implementation = { .destroy = weston_desktop_destroy_request, .create_positioner = weston_desktop_xdg_shell_protocol_create_positioner, .get_xdg_surface = weston_d
2021-06-04 09:48:17
2532
原创 display:weston结构体笔记
一下例子均基于desktop-shellweston_headweston_outputweston_surface:客户端调用wl_compositor_create_surfaceserver端调用 static voidcompositor_create_surface(struct wl_client *client, struct wl_resource *resource, uint32_t id){ struct weston_compositor *.
2021-05-31 13:59:00
1664
6
原创 display:kernel送显流程:commit
drmModeAtomicCommit先是libdrm中的drmModeAtomicCommitdrmModeAtomicCommit ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ATOMIC, &atomic);随后进入kernel DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATOMIC, drm_mode_atomic_ioctl, DRM_MASTER), drm_mode_atomic_ioctl //实际的ioctl函数
2021-05-31 13:51:06
2118
翻译 Linux:tools:dmesg
maze@maze-VirtualBox:~$ dmesg --versiondmesg from util-linux 2.34maze@maze-VirtualBox:~$ dmesg --helpUsage: dmesg [options]Display or control the kernel ring buffer.Options: -C, --clear clear the kernel ring buffer //清空dm.
2021-05-09 10:12:19
180
原创 display:agl-compositor
https://docs.automotivelinux.org/en/master/#5_Component_Documentation/1_agl-compositor/这个agl-compositor有点ivi-shell的味道。
2021-04-23 14:21:55
1094
1
翻译 display:Buffer Sharing and Synchronization
缓冲区共享和同步dma-buf子系统提供了用于在多个设备驱动程序和子系统之间共享用于硬件(DMA)访问的缓冲区以及用于同步异步硬件访问的框架。例如,drm的“prime”多GPU支持可使用此功能,但当然不限于GPU用例。它的三个主要组成部分是:(1)dma-buf,表示一个sg_table,并作为文件描述符公开给用户空间,以允许在设备之间传递;(2)fence,该机制提供了一种机制,用于在一个设备完成访问时发出信号, (3)保留,它管理与缓冲区关联的共享或专用fence。NOTE:dma
2021-03-26 11:16:38
1791
1
原创 display:Weston:怎么让某个surface永远置于顶层
问题如标题:假设我有一个app。想一直置于顶层,那么我可以怎么做?1.想办法拿掉weston或者说drm关于master权限的处理,然后自己基于libdrm画一个即可。2.可以想办法分出一个硬件的pipleline用来专门给这个显示用,同时枚举出另一个/dev/dri/cardX,然后自己写一个基于此card的绘图client即可。这个方法的问题就是,本质上和cma有点像,这个单独分出来的硬件,永远不会被weston看到。 如果能做到pipeline的动态分配到节点(打个比方crtc0可以在不
2021-03-18 11:16:47
2287
1
转载 Dynamic DMA mapping Guide
作者:linuxer发布于:2017-7-20 19:23 分类:内存管理一、前言这是一篇指导驱动工程师如何使用DMA API的文档,为了方便理解,文档中给出了伪代码的例程。另外一篇文档dma-api.txt给出了相关API的简明描述,有兴趣也可以看看那一篇,这两份文档在DMA API的描述方面是一致的。二、从CPU角度看到的地址和从DMA控制器看到的地址有什么不同?在DMA API中涉及好几个地址的概念(物理地址、虚拟地址和总线地址),正确的理解这些地址是非常重要的。内核通常使..
2021-03-09 19:47:11
1361
2
翻译 display:Driver porting: DMA changes-2003
直接内存访问(DMA)支持层在2.6中已进行了广泛更改,但是在许多情况下,设备驱动程序应保持不变。对于使用新驱动程序的开发人员,或希望使用最新API保持其代码最新的开发人员,有很多更改需要注意。最明显的变化是创建了新的通用DMA层。大多数驱动程序程序员都知道pci_* DMA支持函数;。SPARC程序员可能也遇到过类似的sbus_*函数集。从2.5.53开始,添加了一组新的通用DMA函数,目的是提供一个DMA支持API,而不是特定于任何特定总线。新的功能看起来很像旧的功能;从一个API切换到另一个...
2021-03-08 14:54:09
268
2
翻译 memory:DMA-BUF cache handling: Off the DMA API map (part 1/2)
最近,DMA-BUF堆接口已添加到5.6内核。此API接口类似于ION,Android供应商已使用ION多年。但是,在尝试供应商转移使用DMA-BUF堆的过程中,我们已经开始了解DMA API模型如何不适合现代移动设备。此外,由于缺乏关于如何有效处理缓存操作的明确指导,导致供应商使用定制的特定于设备的优化,而这些优化对于上游解决方案而言不够通用。本文将描述问题的性质。接下来的第二期将探讨解决方案。内核的DMA api都是为CPU和设备之间的内存共享而提供的。近年来,传统的DMA API加入了ION、DM
2021-02-25 14:21:42
711
2
翻译 display:Destaging ION-2019
多年来,Android系统已经为DMA缓冲区提供了几个分配器;首先是PMEM,然后是其替代ION。ION分配器在2012年左右就开始使用了,但是它仍然停留在内核的staging树中。将ION加入主线的工作始于2013年;在那个时候,分配程序有多个问题,这使得mianline包含ION仍然不可能。最近,John Stultz发布了一个补丁集,引入了DMA-BUF堆,这是ION的一个进化,它的设计就是要做到这一点——将Android的dma缓冲区分配程序合入到主流Linux内核中。
2021-02-23 20:25:35
956
5
翻译 display: Scheduling for the Android display pipeline-2020
显示由Android显示管道管理,Android显示管道是一个复杂的系统,其中不同的任务和硬件加速器在应用程序的执行以及通过屏幕呈现给用户的图形内容的更新方面进行协作。显示管道负责生成显示输出,因此其性能表现直接影响用户与设备之间最重要的交互渠道之一。除了不断增长的移动游戏行业所要求的低延迟要求外,在显示管线中优先考虑的是提供稳定的帧速率(不跳过任何帧)。此外,Android在移动设备中处于领先地位,其中有限的电量消耗和散热代表了系统必须满足的其他严格要求;这些可以概括为使功耗最小化。所有这些需求是相互
2021-02-22 11:17:33
712
翻译 display:Integrating the ION memory allocator-2013
作为2013 Linux Plumbers Conference大会上Android + Graphics会议的一部分,我们将讨论ION内存分配器及其功能如何上传到主流内核。由于时间有限,我想创建一些背景文档,以提供我们将在会议上讨论并试图解决的问题的背景。ION overviewAndroid ION子系统的主要目标是允许在硬件设备和用户空间之间分配和共享缓冲区,以便在设备之间实现零拷贝内存共享。这听起来很简单,但实际上是一个困难的问题。在片上系统(SoC)硬件上,通常有许多不同的设备具有直接内存
2021-02-18 10:05:51
547
1
翻译 display: XDC2012: Graphics stack security
在XDC2012的第一天,Martin Peres和TimothéeRavier的会议探讨了图形堆栈中的安全性。他们考虑了用户对图形用户界面(GUI)中安全性的期望,并针对X11和Weston(Wayland的参考合成窗口管理器)中的实现回顾了这些期望,并涵盖了其他一些方面。 Martin在开始演讲时指出,他们已经对该主题进行了大量研究,尽管他们是Linux安全工程师而不是X开发人员,但他希望他们仍然可以向听众提供有用的信息。User security expectations and the X se
2021-02-16 20:49:29
517
1
翻译 display:3.3中的DMA缓冲区共享-2012
早在2011年8月,LWN就研究了Marek Szyprowski发布的DMA缓冲区共享补丁集。从那以后,Sumit Semwal拾起了该补丁,他对大量开发人员的评论做出了很大的修改。合并为3.3的此修补程序的版本与以前的版本有很大不同,因此值得在此进行其他介绍。但是,核心思想仍然是相同的:这种机制允许DMA缓冲区在可能不知道彼此的驱动程序之间共享。最初的目标用途是在视频流的生产者和消费者之间共享缓冲区;例如,摄像头设备可以将帧流捕获到与图形适配器共享的一系列缓冲区中,从而无需在内核中进行复制就可以捕获
2021-02-03 19:12:15
644
2
翻译 display:Android ION内存分配器-2012
早在2011年12月,LWN审查了linux-next登台目录中的Android内核补丁列表。这些驱动程序的合并(其中之一是称为PMEM的内存分配器)可以保证主线内核发行版有一天可以引导Android用户空间。从那时起,很明显PMEM被视为过时的,并将由ION内存管理器替换。ION是Google在Android 4.0 ICS(冰淇淋三明治)版本中引入的一种通用内存管理器,旨在解决跨不同Android设备的内存管理碎片化问题。至少有三个(可能更多)类似PMEM的接口。在使用NVIDIA Tegra的An..
2021-02-03 17:31:24
1359
2
原创 display:libdrm/libgbm/ion/gem/dma_buf
#include "xf86drm.h"#include "xf86drmMode.h"#include <stdio.h>#include <stdint.h>#include <unistd.h>#include <string.h>#include <fcntl.h>#include <sys/mman.h>struct buffer_object { uint32_t width; uint3.
2021-02-02 15:05:47
3961
5
原创 display:weston:weston-simple-egl: server端
接上篇:https://blog.youkuaiyun.com/u012839187/article/details/112415876
2021-01-25 10:33:16
1720
1
原创 display:weston:weston-simple-egl
写在前面:客户端渲染在Wayland架构中,客户端UI的所有呈现均由客户端代码执行,通常由客户端使用的图形工具包执行。图形工具箱可以使用其希望呈现UI元素的任何方法:在CPU上进行软件呈现,使用GLES进行硬件呈现。 Wayland所需要做的就是将客户端渲染的每一帧和窗口的结果像素发送到合成器。 像素数据可能以几种方式传输,具体取决于渲染方式以及客户端和合成器相互支持的内容: 包含实际像素数据的共享内存缓冲区。 如果没有其他机制,则支持这些备用机制。 GPU缓冲区共享(DRM
2021-01-09 23:44:09
4570
1
翻译 display:weston:man weston 相关
man westonWESTON(1) General Commands Manual WESTON(1)NAME weston - the reference Wayland ...
2020-12-31 22:12:24
2401
AMD_EDID_DisplayID_Example.txt
2020-09-01
Vysor_2.2.1_amd64.snap
2020-04-04
基于opengl的细胞分裂
2014-11-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人