Conservative depth output

A conservative depth output a DirectX 11-es API egyik legérdekesebb újítása, hiszen lehetővé teszi a raszterizálás irányítását. Ennek köszönhetően a fejlesztő egy olyan pixel shadert írhat, ami manuálisan kiértékeli az adott képponthoz tartozó mélységértéket.

Az API két paramétert kínál erre. Az SV_DepthGreater arra szolgál, hogy a számítások legyenek elhagyva, ha a kinyert mélységérték nagyobb a mélységpufferben szereplő adatnál, míg az SV_DepthLessEqual akkor veti el a kalkulációt, ha a mélységérték kisebb vagy egyenlő a mélységpufferben tárolt információnál. Gyakorlatilag az eljárás alkalmazásával a GPU a felesleges számítások alól menti fel magát, mivel a conservative depth mellett végrehajtható egy irányított mélységteszt, ami ott vezet eredményre, ahol a hagyományos SV_Depth paraméter már nem képes meghatározni, hogy mely képpontok esetében érdemes elhagyni a további számításokat.

Egy conservative depth output demonstráció. Képminőségre nincs hatással, de nagyobb lesz a teljesítmény.
Egy conservative depth output demonstráció. Képminőségre nincs hatással, de nagyobb lesz a teljesítmény.

Az eljárás jó eredményeket tud felmutatni, ugyanis a mérések szerint a conservative depth alkalmazása – függően a jelenet komplexitásától – 5-20%-os teljesítménynövekedést eredményezhet a hagyományos feldolgozáshoz viszonyítva. A DirectX 11 már támogatja ezt a funkciót, sőt az implementáció úgy lett megoldva, hogy a régebbi DirectX 10-es és 10.1-es kártyák is profitáljanak belőle.

A conservative depth output azonban egy opcionálisan támogatható szolgáltatás, így ha az adott hardver a funkciót nem támogatja, akkor a grafikus meghajtó emulálhatja azt a korai mélységteszt (Early Z) letiltása mellett. Ilyenkor a program működőképes lesz és a végeredmény sem változik, de elmarad a sebességnövekedés.

Jelen pillanatban csak a DirectX 10, 10.1, 11 és 11.1 API-t kezelő Radeonok támogatják hardveresen a conservative depth outputot. A többi termék szoftveres emulációt használ rá.

Az OpenGL-en belül ez a funkció a GL_ARB_conservative_depth kiterjesztéssel érhető el, ami a GL_AMD_conservative_depth másolata.

Hirdetés