真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mesa調(diào)用主線分析與理解-創(chuàng)新互聯(lián)

技術(shù)關(guān)鍵詞:mesa 調(diào)試、mesa調(diào)用棧

創(chuàng)新互聯(lián)是一家專業(yè)提供樂平企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、HTML5、小程序制作等業(yè)務(wù)。10年已為樂平眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。

目錄

前言

一、Linux圖形軟件棧的再討論

二、glClear的調(diào)用棧分析

2.1 _mesa_開頭的函數(shù)

2.2?st_開頭的函數(shù)

2.3 pipe層字樣的函數(shù)

2.4?GPU-specific層的函數(shù)

三、gl api 典型調(diào)用棧

總結(jié)



前言

前文總結(jié)了mesa的主要模塊和模塊間的靜態(tài)關(guān)系,本文從一個OpenGL應(yīng)用程序的典型api入手,分析gl api 調(diào)用到用戶態(tài)驅(qū)動后端的過程,進而總結(jié)出一個典型的調(diào)用棧。理解了這個典型調(diào)用棧,對后續(xù)任何一個API的調(diào)用過程分析,都是a piece of cake。


一、Linux圖形軟件棧的再討論

? 前文給出了一個頂層的linux圖形棧的關(guān)系圖。這里把原圖中的xserver拿掉,把mesa剖開,把linux系統(tǒng)和硬件層加入,形成了如下linux的mesa圖形軟件棧。

下圖的左側(cè)調(diào)用棧是在gallium 架構(gòu)之前采用的模式,右側(cè)是gallium架構(gòu)下的模式。可以看出gallium架構(gòu)有比較明顯的三個分層(夾心餅干):

1、state_tracker層:負責(zé)收集OpenGL狀態(tài);

2、GPU-specific層:廠商的用戶態(tài)驅(qū)動核心部分;

3、OS WinSys層:操作系統(tǒng)對接層。

這里的圖形調(diào)用棧的不妥之處是把libdrm放入了mesa中,實際上libdrm是linux系統(tǒng)提供的使用drm內(nèi)核功能的一個用戶態(tài)庫,可以單獨作為一層來看待(有時間再修改下該圖,該圖出處見圖下的文字鏈接)。

圖形棧中的mesa位置圖

二、glClear的調(diào)用棧分析

? 接下來以glClear的函數(shù)實現(xiàn),來分析從應(yīng)用程序到GPU-specific的調(diào)用棧。先把關(guān)鍵調(diào)用棧組織如下(省略了不相關(guān)的調(diào)用)。

glClear(GL_COLOR_BUFFER_BIT);
    _mesa_Clear(GL_COLOR_BUFFER_BIT);
        st_Clear(ctx, GL_COLOR_BUFFER_BIT);
            st->pipe->Clear(...);
                gpu_specific_Clear(...);
2.1 _mesa_開頭的函數(shù)

gl_打頭的函數(shù)是OpenGL API,首先這些函數(shù)都是函數(shù)指針,這些函數(shù)掛載的函數(shù)就是mesa里以_mesa_打頭的對應(yīng)函數(shù)。這里有個調(diào)試技巧,把函數(shù)名gl_前綴換成_mesa_前綴即可。例如glGenBuffers的mesa入口函數(shù)是_mesa_GenBuffers。 _mesa_打頭函數(shù)在前文的libmesa.a靜態(tài)庫中,而libmesa.a又被libgallium_dri.so包含,因此這些代碼都是后端驅(qū)動的一部分,可以隨意修改。

2.2?st_開頭的函數(shù)

? _mesa_打頭的函數(shù)會調(diào)用st_開頭的函數(shù)。這些st函數(shù)就是上圖中的state tracker層。

2.3 pipe層字樣的函數(shù)

? pipe層,是接近于硬件的模塊,GPU-specific 層是從pipe層繼承的??梢园裵ipe層看成接口層,各家驅(qū)動實現(xiàn)該接口。

2.4?GPU-specific層的函數(shù)

? 把pipe層的OpenGL狀態(tài)轉(zhuǎn)換為廠商支持的狀態(tài)字段。該層一般會封裝和處理硬件相關(guān)的狀態(tài),即硬件命令字。這些封裝數(shù)據(jù)一般要由kmd交給硬件配置相關(guān)寄存器。

三、gl api 典型調(diào)用棧

? 通過以上分析,這里給出一個典型的gl函數(shù)的調(diào)用棧。即:mesa層、st層、pipe層、gpu-spec層。

mesa典型調(diào)用棧

這里并沒有給出winsys層,因為不同的OS有不同實現(xiàn),這里關(guān)注linux。就是上圖中的與libdrm交互的那一層,這層會使用ioctl將gpu-spec層組織的數(shù)據(jù)交給kmd,再由kmd把數(shù)據(jù)下發(fā)到gpu硬件。

總結(jié)

? 本文從glClear的函數(shù)的調(diào)用棧分析了mesa實現(xiàn)OpenGL的一個典型流程。對于任何一個gl api可以套用該流程,熟悉mesa代碼的調(diào)用脈絡(luò)。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)頁名稱:mesa調(diào)用主線分析與理解-創(chuàng)新互聯(lián)
分享URL:http://weahome.cn/article/ccighs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部