Имам програма, която изобразява първо текстура, след това предава текстурата на изчислителния шейдър за обработка, след което изобразява изходния резултат на екрана чрез текстуриран четворен екран на цял екран.
Прочетох в ръководството за програмиране на nVidia за изчислителни шейдъри, че всеки път, когато изпратите изчислителен шейдър, той инициира превключване на контекста на GPU устройство, което не трябва да се прави много често.
В момента съм много объркан. Начинът, по който го виждам, в моя конвейер за изобразяване графичният процесор превключва контекстите два пъти. нали Веднъж по време на първото диспечерско повикване, следващия път, когато изобразя нормално четириъгълника си на цял екран.
Ако това е правилно, тогава мога да избегна едно превключване, като реорганизирам кода си по този начин. Първо рендирайте до текстура. Второ, направете обработката в компютърния шейдър. След това, В СЛЕДВАЩИЯ КАДЪР изобразете резултата, след това (все още в следващия кадър) изобразете всички актуализации на текстурата, извършете обработка в изчислителен шейдър... Така че по принцип всяко начало на кадъра изобразявам резултатите от последния кадър ( първият кадър ще бъде изключение). Тогава ще има само едно превключване на контекста, нали?
Но тогава GPU пак ще трябва да превключва контекста между кадрите, нали? Така че двете версии на моя тръбопровод за изобразяване имат два контекстни превключвателя. Няма да има разлика в производителността. Прав ли съм?
Всяка помощ ще бъде оценена.