OpenGL計算著色器工作組設定測試

2021-10-05 05:02:44 字數 2292 閱讀 6312

先看看不同的顯示卡上工作組的數量情況。

glgetintegeri_v

(gl_max_compute_work_group_count,

0, data)

;glgetintegeri_v

(gl_max_compute_work_group_count,

1, data +1)

;glgetintegeri_v

(gl_max_compute_work_group_count,

2, data +2)

;glgetintegerv

(gl_max_compute_work_group_invocations,data +3)

;glgetintegeri_v

(gl_max_compute_work_group_size,

0, data +4)

;glgetintegeri_v

(gl_max_compute_work_group_size,

1, data +5)

;glgetintegeri_v

(gl_max_compute_work_group_size,

2, data +6)

; cout <<

"gl_max_compute_work_group_count:"

<< data[0]

<<

" "<< data[1]

<<

" "<< data[2]

<< endl;

cout <<

"gl_max_compute_work_group_invocations:"

<< data[3]

<< endl;

cout <<

"gl_max_compute_work_group_size:"

<< data[4]

<<

" "<< data[5]

<<

" "<< data[6]

<< endl;

整合顯示卡:

高效能invidia處理器:

很明顯獨顯可設定的工作組數量要比整合顯示卡多一些。先看一下相同的維度下整合顯示卡和獨顯的執行時間(毫秒)。

gldispatchcompute

(8000,1

,1);

//著色器設定

layout (local_size_x =

1024

,local_size_y =

1) in;

整合:

獨顯:

很明顯,獨顯的執行速度要比整合顯示卡快很多。

再在整合顯示卡下,修改一下工作組維度看下。

gldispatchcompute(20

,20,20

);//著色器設定

本地工作組的積都是1024的時候,好像並沒有什麼的改善。。。。。。。也許只要設定成x單維的,用gl_globalinvocationid.x做為索引就行。。。

再試下把本地工作組的值減小:

再對比一下感覺31和32佔的比例明顯增多。個人認為還是最好把本地工作組設成乙個顯示卡能支援的最大值 ,但是不同的顯示卡支援的最大值又不同,該怎麼設定?

OpenGL著色器程式解析 著色器基礎

部分內容 於 現代opengl渲染管線嚴重依賴著色器來處理傳入的資料。如果不使用著色器,那麼用opengl可以做到的事情可能只有清除視窗內容了,可見著色器對於opengl的重要性。在opengl 3.0版本以前 含該版本 或者如果你用到了相容模式 compatibility prof?ile 環境,...

Opengl(四) 著色器

1.opengl確保至少有16個包含4個元素的頂點屬性可用。2.不同著色器之間的資料傳輸,在傳送方中宣告乙個輸出,在接收方中宣告乙個同名輸入。3.uniform是全域性的,uniform會一直保留他的資料,直到他被重置或更新。4.設定uniform的方式 glint x glgetuniformlo...

著色器與OpenGL

現代opengl渲染管線嚴重依賴著色器來處理傳入的資料。如果不使用著色器,那麼用opengl可以做到的事情可能只有清除視窗內容了,可見著色器對於opengl的重要性。在opengl 3.0版本以前 含該版本 或者如果你用到了相容模式 compatibility prof?ile 環境,opengl還...