View previous topic :: View next topic |
Author |
Message |
Vecais_Dumais_Laacis Guru
Joined: 29 Jan 2004 Posts: 800
|
Posted: Fri Aug 10, 2007 4:34 pm Post subject: opengla optimizators vajadziigs |
|
vajadzeetu kaadu cilveeku kursh ogl paarzin un grib mazliet briivo laiku pateereet - ogl iipashi pats nemaaku.
situaacija ~ taada.
projekts stepmania.
renderee izmantojot d3d un ogl.
d3d modee nekaadu probleemu
ogl modee 3d modelji bremzee.
stepmania paarsvaraa izmanto quadus. shajaa gadiijumaa bremze iestaajaas tikliidz tiek rendereeti 3d objekti.
pie paaris 3d objektiem fps nokriitaas 2x. patesteejos ar gDEBugeri. atsleedzot rendereeshanu fps ir normaals. gpu noslodze arii nekaada.
ja izmanto normaalu ogl renderingu (glDrawElements) viss straadaa normaali. fps ~300 (bez modeljiem ~320)
enableejot vertex bufferus (un lietojot glDrawRangeElements) iestaajaas bremze. fps ~55
moka kaadam ir idejas kuraa virzienaa rakt.
testa video karte Radeon X800
edit:
normal mode draw funkcija
http://stepmania.cvs.sourceforge.net/stepmania/stepmania/src/RageDisplay_OGL.cpp?view=markup&sortby=date#l_953
vertex buffers
http://stepmania.cvs.sourceforge.net/stepmania/stepmania/src/RageDisplay_OGL.cpp?view=markup&sortby=date#l_1236
profaileris (ne opengl profaileris) raada ka saape ir tieshi tajaa glDrawRangeElements _________________ ...un ja bites buutu laachi... |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Aug 10, 2007 5:29 pm Post subject: |
|
Vajadzētu pamēģināt likt tos datus (virsotnes, normāles, texcoord) katru savā buferī, bet gan likt pakotā buferī, tb masīvā no struct { float vertex[3]; float normal[3]; float uv[2]; }. Daudz labāka struktūra cache izmantošanas ziņā.
Vēl var tam pašam VBO lietot parastu glDrawElements, bez nekāda Range norādīšanas, varbūt tur ir vaina.. Cik esmu dzirdējis par to Range funkciju - cilvēki sakot, ka vajag būt pārliecinātam, ka norādītie indeksi neizies ārpus robežas, ko supportē videokarte (manam X1600 tas ir 65535). Ja izies, tad būs bremze. Vai tas tiek ievērots? |
|
Back to top |
|
|
Vecais_Dumais_Laacis Guru
Joined: 29 Jan 2004 Posts: 800
|
Posted: Fri Aug 10, 2007 5:43 pm Post subject: |
|
tie objekti ko renderee ir vienkaarshi - zem 100 triangljiem/vertexiem _________________ ...un ja bites buutu laachi... |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Aug 10, 2007 6:24 pm Post subject: |
|
Nu tādam mazam apjomam var gadīties, ka VBO ir pārāk liels overheads, kaut arī īsti neticās. Tad jau labāk lietot prastus Vertex Array, vai arī listus (glList), kuri draivera iekšienē pēc draivera uzskatiem tāpat var tikt pārtaisīti par VBO.
Kā ir lielākiem apjomiem - vai tad VBO kautko iegūst performances ziņā pār immediate modi? |
|
Back to top |
|
|
Vecais_Dumais_Laacis Guru
Joined: 29 Jan 2004 Posts: 800
|
Posted: Sat Aug 11, 2007 7:23 am Post subject: |
|
gjeniaali jociiga kljuuda
visa vaina shaderii
Quote: | attribute vec4 TextureMatrixScale;
void main(void)
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
vec4 multiplied_tex_coord = gl_TextureMatrix[0] * gl_MultiTexCoord0;
gl_TexCoord[0] = (multiplied_tex_coord * TextureMatrixScale) +
(gl_MultiTexCoord0 * (vec4(1)-TextureMatrixScale));
gl_FrontColor = gl_Color;
} |
tikliidz nonjem lieko iekavu taa 80fps vietaa uzrodaas 510fps. _________________ ...un ja bites buutu laachi... |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Aug 11, 2007 10:42 am Post subject: |
|
Mja.. ATI ar saviem draiveriem... Varu derēt, ka tas pats kods uz NVIDIA videokartes/draiveriem ies bez problēmām. Mani šādi gļuki jau vairākas reizes ir izbesījuši. Bieži vien ir sanācis vienkārši, ka draiveris krašo uz šeidera kompilēšanu (un tika ar ATI). Un neko tur nepadarīt. Vēl arī esmu konstatējis, ka ar ATI nestrādā kompresētās tekstūras (DXTn), kuras grib uploadēd caur PBO (Pixel Buffer Object). Arī notiek krašs un neko tur nepadarīt..
Tajā šeiderī iesaku lietot vec4(1.0). Citreiz draiverim nepatīk, ka integer tipi tiek pielietoti float operācijās. GLSL valodā kā nekā tipi netiek impliciti pārvērsti, tur visa pārvēršana pašam jānrāda. |
|
Back to top |
|
|
Vecais_Dumais_Laacis Guru
Joined: 29 Jan 2004 Posts: 800
|
Posted: Sat Aug 11, 2007 7:54 pm Post subject: |
|
tomeer paliek atklaata probleema
tas ko es 'salaboju' vienkaarshi failoja shaderi un notika software fallbacks
bez taa
Code: | gl_TexCoord[0] = (multiplied_tex_coord * TextureMatrixScale) +
(gl_MultiTexCoord0 * (vec4(1.0)-TextureMatrixScale));
|
viss iet labi _________________ ...un ja bites buutu laachi... |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sat Aug 11, 2007 8:29 pm Post subject: |
|
Mans laucins ir HLSL un es par GLSL neko nezinu, bet vai in da vec4() nevajadzeetu tikt nodefineetaam 4 veetrtiibaam? eg vec4(1.0,1.0,1.0,1.0)? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Aug 11, 2007 9:57 pm Post subject: |
|
vec4 tipam ir "konstruktors" no floata, un vec4(x) nozīmē to pašu, ko vec4(x,x,x,x). Tāpat vec4 ir arī šādi te "konstruktori":
vec4(vec2, vec3), vec4(vec3, float), vec4(float, vec3), utt - šajos gadījumos vec4 tipam tiks piešķirtas vērtības pa elemntiem pēc kārtas - vispirms x, pēc tam y, tad z, un beigās w. Piemēram: vec4(vec3(a,b,c),d) == vec4(a,b,c,d) = vec4(vec2(a,b), c, d).
Tas pats notiek arī ar citiem vektoru un matricu tipiem. Piemēram, 4x4 matricai konstruktorā vari padot 4 vec4 tipus vai arī 8 vec2 tipus.
HLSL'am ir tieši tas pats - float4. Ja tam piešķirsi vienu floatu, tas to "izpletīs" pa visām četrām komonentēm.
vdl: es īsti nesapratu - tad problēma vēl ir vai vairs nav? glsl software fallbacku btw var noteikt izvadot info loga atskaiti pēc šeidera nolinkošanas. Ja tajā stringā ir vārds "software", tad noticis tas fallbacks. |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Sat Aug 11, 2007 11:26 pm Post subject: |
|
bubu wrote: |
HLSL'am ir tieši tas pats - float4. Ja tam piešķirsi vienu floatu, tas to "izpletīs" pa visām četrām komonentēm |
Es teicu ka zinu par HLSL nu vismaz to ka taa drikst .
P.S Varbut vajag salidzinat glsl kodu ar hlsl respektiivo, maybe tur ir nepareiza implementacija tam glsl. t.i. ieposto hlsl kodu? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Aug 12, 2007 12:35 am Post subject: |
|
Ko nozīmē nepareiza implementācija tam glsl?
Tāda kādu vajadzēja, tāda droši vien arī ir. |
|
Back to top |
|
|
Vecais_Dumais_Laacis Guru
Joined: 29 Jan 2004 Posts: 800
|
Posted: Sun Aug 12, 2007 10:17 am Post subject: |
|
probleema joprojaam pastaav.
vienk tas ko es 'salaboju' lika shaderim failoties un softs attieciigi redzot ka shaderis nava izmanto fixed funkcijas lai panaaktu attieciigo efektu.
hvz kas tajaa shaderii taads leens ir _________________ ...un ja bites buutu laachi... |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Aug 13, 2007 10:30 am Post subject: |
|
Tad šeideris ir lēns vai VBO ir lēns? Nesaprotu vairs. Šeideris + VA (Vertex Array) arī ir lēns, vai nē? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Tue Aug 21, 2007 4:35 pm Post subject: |
|
zini, kaa var meeginaat dariit? njemt tajaa funkcijaa katru aizdomiigo darbiibu un meeginaat aizstaat ar jau gatavu rezultaatu - tas vareetu paraadiit, kura darbiiba leena...
man nojauta liek domaat par TextureMatrixScale...
tas ir pilnais kods?
kam tas sheideris domaats? _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Aug 21, 2007 5:55 pm Post subject: |
|
Kā tu iedomājies aizstāt glDrawElements ar "gatavu rezultātu"? |
|
Back to top |
|
|
|