dahakon schreef op zondag 07 juni 2015 @ 16:43:
Boven alles is het eigenlijk bijzonder dat een extentie al uit is nog voordat de hoofd-API uberhaupt officieel gelanceerd is. Voor zover ik mij kan heugen is dat nog nooit eerder gebeurd.
Dat is inderdaad nog niet gebeurd nee. Wel is het al vaker gebeurd dat extensies bij Intel, Nvidia of AMD vandaan kwamen. Sterker nog, dat is met de meeste dingen in DX11 gebeurd.
Dat zal sneller zijn dan je denkt. Developers zitten al heel lang te wachten op veel van deze features.
Sp3ci3s8472 schreef op zondag 07 juni 2015 @ 20:24:
Heeft Vulkan feature levels? Voor zover ik het begrijp hebben ze een van de oudere OpenGL gepakt en dat als minimale voor Vulkan te nemen om daarmee een groot gedeelte van de markt aan te kunnen spreken. Ik dacht dat dit OpenGL 4.1 en hoger was.
Vulkan gaat op feature flags werken; zelfde als D3D, maar dan zonder feature level gezever.
OpenGL werkt met extensies; stukjes code die "buiten" de "standaard" API werken, maar wel aan de API standaarden voldoen. Die extensies krijgen vaak wel een vendor prefix, maar elke vendor mag ze implementeren. In de praktijk is het meestal zo dat Intel en AMD elkaars extensies wel implementeren; Nvidia vaak juist niet. Ik heb er hierboven al twee genoemd, maar ik zal ze er weer even uit pikken.
TR zit in een OpenGL extensie genaamd AMD_sparse_texture. Intel ondersteunt deze ook als ik me niet vergis. Deze extensie is equivalent aan TR Tier 2; Nvidia heeft deze nooit ondersteund maar heeft inmiddels wel EXT_sparse_texture2 toegevoegd, wat dan weer Tier 3 is (of Intel en AMD deze ondersteunen weet ik eerlijk gezegd niet, is ook niet zo boeiend momenteel

).
ROV zit in INTEL_fragment_shader_ordering - AMD ondersteunt deze ook, Nvidia niet.
Er wordt vaak beweerd dat Nvidia "achter" OpenGL staat, maar dat is maar het halve verhaal. Zij zijn sneller met het ondersteunen van nieuwe OpenGL versies, dat is helemaal waar. Maar waar de andere twee elkaar vooral volgen als het op nieuwe features aan komt, doet Nvidia dit niet. Alle drie voegen regelmatig nieuwe extensies toe aan OpenGL, die uiteindelijk ook vaak als "algemene" extensie terug komen. GL_ARB_bindless_texture bijvoorbeeld komt van NV_bindless_texture; bindless texture is een deel van dat resource binding
Waar het bij Nvidia mis gaat is dat zij het vertikken de extensies van anderen te ondersteunen. AMD_sparse_texture (TR) hierboven is een geweldig voorbeeld. Het zou voor OpenGL zo veel beter geweest zijn als Nvidia dat gewoon ondersteund had. In plaats daarvan doen ze er geen flikker mee tot ze het zelf ook in hun hardware hebben en voegen dan een iets uitgebreidere versie toe. Alle hardware die EXT_sparse_texture2 ondersteunt, ondersteunt ook AMD_sparse_texture, maar omdat Nvidia niet mee wil werken kunnen OpenGL ontwikkelaars er nog steeds geen donder mee.
Dat is ook de reden waarom OpenGL zo veel in populariteit is verloren. Voor sommige dingen moet je gewoon 4 of 5 feature flags controleren omdat je de oorspronkelijke vendor implementatie hebt, een uitbreiding daar op, wellicht een andere vendor's versie en dan uiteindelijk de "algemeen" geaccepteerde ARB* implementatie. Het kost gewoon heel veel tijd om met de kleine verschillen om te gaan, dat gezeik heb je in D3D niet. En ik wil nu niet zeggen dat het Nvidia's schuld is, maar zij zijn wel degenen die er het minst aan hebben gedaan om OpenGL in leven te houden.
* ARB was het "Architecture Review Board" - een groep mensen die nieuwe features goedkeurden. Tegenwoordig ligt dit bij de Khronos group, maar in de praktijk is het nog allemaal hetzelfde.