Возникла задача писать в две разные текстуры (одинаковые) в зависимости от условия в вертексном шейдере.
Первая идея - сделать два рендер таргета вместо одного. Минус (фатальный) вывод пойдет сразу в обе текстуры. Значит вторая будет запорчена.
Решение в лоб - вместо рендер таргета использовать две UAV текстуры. Минус - подозреваю будет заметно тормозить.
Второе решение - сделать таргет в 2 раза шире, писать в свой кусок в зависимости от условия, потом разделить на 2 текстуры. Минус - как-то криво...
Что-то еще можно придумать? Идеально - поставить что-то в вертексный шейдер что бы если это не его текстура, то пиксельный сразу бы отвалился и рендер таргет не портил.
san
> Что-то еще можно придумать?
SV_ViewportArrayIndex
MrShoor
Ты не умничай, ты пальцем покажи.
P.S. Погуглил. Похоже там вылезает геометрический шейдер. Добавлять GS во все сотню шейдеров как-то влом. А что-то попроще слабо?
Кстати еще одна мысль пришла - а если посылать вертексные координаты far-far away? Тогда же вроде записи в таргет быть не должно?
san
> Ты не умничай, ты пальцем покажи.
Чувак, вот что с тобой не так? Ты спросил: "что еще можно придумать?". Я тебе показал вариант, дав ключевое слово для поиска, по которому можно за 5 минут понять как пользоваться этим вариантом. В ответ вместо: "спасибо, но не хочется добавлять везде геометрический шейдер" ты говоришь: "Ты не умничай, ты пальцем покажи."
Ты всегда говном всех поливал по жизни? Или это с возрастом у тебя?
san
> А что-то попроще слабо?
Я то могу еще варианты предложить, но как-то уже не горю, давай сам.
MrShoor
Ну вот, сразу и спекся... Я потому и вопрос задал, что ничего путного сам придумать не могу. Точнее задача то решаема, но хотелось бы как-то поэлегантнее. А не тупо дубиной по башке...
>Ты всегда говном всех поливал по жизни? Или это с возрастом у тебя?
О, полилось... Ну пусть и по возрасту, старый уже, соображаю уже не так быстро - это факт. Потому и помощи прошу. Но я хоть надыбал 3 варианта. Реальные, не поиск в гугле. Ты по делу можешь что-то сказать? Сам с подобной задачей дело имел, помочь можешь, или как innuendo - главное анонимнно обосрать кого-то и тем возвыситься в собственных глазах?
san
> Я потому и вопрос задал, что ничего путного сам придумать не могу.
Любопытно, а выглядело так, что ты не знал про SV_ViewportArrayIndex. А не просто потому что придумать не мог.
Ну так то там есть еще варианты, ищи.
MrShoor
> Любопытно, а выглядело так, что ты не знал про SV_ViewportArrayIndex.
Ну так и не знал, то тут такого? Я много что не знаю или не держу в памяти. Я все же практик а не теоретик. Ты наверно тоже мало что знаешь про структуру драйверов в Linux/FreeBSD или про специфику разработки в VR. Ну и что? Нельза обьять необьятное. Для этого и есть Интернет. Но в любом случае поскольку твой вариант требует включения в сотню шейдеров еще и по геометрическому шейдеру, то это еще более криво чем то я описал в первом посте.
Другие идеи есть?
P.S.
Фраза: "Ты не умничай, ты пальцем покажи" - это вообще-то из известного анектота про чукчу. В данном случае я выступал в роли "тупого шкипера", т.е. это было сказано с самоиронией. У тебя либо нет чуства юмора либо ты этот анекдот на знаешь по молодости лет. Погугли тогда что ли.
san
> У тебя либо нет чуства юмора либо ты этот анекдот на знаешь по молодости лет.
> Погугли тогда что ли.
Погуглил я твой анекдот. Странная у тебя манера использовать анекдоты.
Ок, VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation погугли. Подходит?
MrShoor
>Погуглил я твой анекдот. Странная у тебя манера использовать анекдоты.
Что тут странного? Я просто хотел сказать, "что расскажи подробнее, я не понял, ибо тупой". Что тут непонятного то? То, что я себя выставил в роли тупого шкипера? Ну так я же вопросы задаю а не наоборот.
>Ок, VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation погугли. Подходит?
Не, не подходит. Ты сам то знаешь как эту задачу решить, в смысле ты с ней сталкивался практически, или ты просто парсишь Интернет на обшие слова?
Если первое, то как по фразе из анекдота - "ты пальцем покажи", в смысле обьясни что делать. По возможности подробно (ну я же тупой как я сразу сказал).
Если второе - то не надо флудить, может появится кто-то кто по настоящему в теме. Он и поможет. Или нет. Тогда сам.
san
> Ты сам то знаешь как эту задачу решить, в смысле ты с ней сталкивался
> практически, или ты просто парсишь Интернет на обшие слова?
Ну это фича, которая позволяет писать в SV_ViewportArrayIndex не только из геометрического шейдера, а из любого шейдера, который передает данные в пиксельный.
Ограничение - железо с поддержкой dx 11.3 и выше.
MrShoor
Ну поскольку я работаю в ВР, и на DX12 то железо не столь критично. Но ты можешь подробнее обьяснить что это за фича и как ее использовать? Пока все что я нашел сводитсяя к использованию геометрическогои шейдера что неприемлимо. Я не очень понимаю почему просто не отправить всю геометрию очень далеко прямо в вертексном шейдере, что этому мешает? (Сам пока не проверял - пятница... Бушмиллс - святое дело...).
MrShoor
> VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation
Вначале я подумал что это троллинг и всё таки решил погуглить.
Но оказалось там ещё лучше
san
> Но ты можешь подробнее обьяснить что это за фича и как ее использовать?
В вершинном шейдере объявляешь SV_ViewportArrayIndex семантику в которую пишешь индекс вьюпорта. Шейдер компилируешь с соответствующим таргетом. Не помню нужен дополнительный дефайн в шейдере или нет, попробуй скомпилировать, если нужен - оно тебе подскажет какой