tag:blogger.com,1999:blog-4338251266540090894.post9132029861145437950..comments2020-10-22T10:38:02.467-07:00Comments on AndreyGL/D3D: Добавлен встроенный профайлAndreyhttp://www.blogger.com/profile/16201443526225351421noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-4338251266540090894.post-34020479461907759572008-11-16T23:28:00.000-08:002008-11-16T23:28:00.000-08:00Arseny Kapoulkineлибо в момент скажем DrawElements...<B>Arseny Kapoulkine</B><BR/><I>либо в момент скажем DrawElements брать настройки из source слота (значение параметра glsl семплера) и переставлять в target (индекс семплера, выборка из которого прописана в микрокод)</I><BR/><BR/>Этот вариант мне кажется более логичным, т.к. разработка GLSL велась ARB в тесном сотрудничестве с IHV (nVidia, ATI etc.) поэтому не думаю что они бы разрешили такой вариант чтобы потом страдать с написанием драйверов и уж тем более если бы это противоречило устройству железок.<BR/><BR/>ЗЫ. Очень приятно общаться с людьми Вашего уровня, я всегда стараюсь почерпнуть много для себя интересного, с огромным удовольствием читаю Ваш блог, спасибо Вам.<BR/><BR/>С ув. =[ 0r@ngE ]=iOrangehttps://www.blogger.com/profile/03728028794052902348noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-71336558719039344272008-11-16T13:12:00.000-08:002008-11-16T13:12:00.000-08:00Ну, либо пересобирать микрокод, либо в момент скаж...Ну, либо пересобирать микрокод, либо в момент скажем DrawElements брать настройки из source слота (значение параметра glsl семплера) и переставлять в target (индекс семплера, выборка из которого прописана в микрокод).Arseny Kapoulkinehttps://www.blogger.com/profile/18310595345818946666noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-47100436598895673502008-11-16T12:58:00.000-08:002008-11-16T12:58:00.000-08:00Arseny KapoulkineВ GL, насколько я помню, можно в ...<B>Arseny Kapoulkine</B><BR/><I>В GL, насколько я помню, можно в любой момент перепривязать семплер к другой текстурной стадии, вызвав glUniform1i на нужный параметр.<BR/><BR/>Железо такого не умеет. По крайней мере, железо которое я знаю. Боюсь, радости драйверописателям это не прибавляет - скорее всего такой glUniform1i приводит к перефигачиванию собранного микрокода шейдера...</I><BR/><BR/>Позвольте не согласиться.<BR/>Вы написали "можно в любой момент перепривязать семплер к другой текстурной стадии". По моему здесь как-раз наоборот - мы именно привязываем текстуру к текстурному блоку, да у блока есть sampler-state, но смена текстуры на этот sampler-state не влияет, и при непосредственно выборке sampler-state расскажет КАК нужно семплировать текстуру. Поэтому tex2D абсолютно пофигу откуда делать выборку, ибо glUniform1i задает просто int - номер текстурного блока из которого <B>на момент выборки</B> брать текстуру и параметры самплера. Зачем пересобирать микрокод?<BR/><BR/>С ув. =[ 0r@ngE ]=iOrangehttps://www.blogger.com/profile/03728028794052902348noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-70208718959562630312008-11-16T12:37:00.000-08:002008-11-16T12:37:00.000-08:00Про семплеры в glsl.В pre D3D10 железе (про d3d10 ...Про семплеры в glsl.<BR/><BR/>В pre D3D10 железе (про d3d10 железо не знаю ничего) есть такая штука, семплер. У нее есть какие-то настройки - настройки, которые типично называются sampler state (фильтрация, maxlod, etc.), и настройки которые типично называются texture (адрес данных текстуры, кол-во мипов, размерность, формат).<BR/><BR/>В D3D9 эта штука повторяется - есть для каждого, хм, стейджа семплер стейт и текстура, в коде шейдера семплер статически привязан к номеру стейджа либо явным указанием register(s0), либо аллокацией регистров при компиляции.<BR/><BR/>В GL, насколько я помню, можно в любой момент перепривязать семплер к другой текстурной стадии, вызвав glUniform1i на нужный параметр.<BR/><BR/>Железо такого не умеет. По крайней мере, железо которое я знаю. Боюсь, радости драйверописателям это не прибавляет - скорее всего такой glUniform1i приводит к перефигачиванию собранного микрокода шейдера...Arseny Kapoulkinehttps://www.blogger.com/profile/18310595345818946666noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-22679105479939533832008-11-14T11:26:00.000-08:002008-11-14T11:26:00.000-08:00Да, именно так я и планирую сделать.Еще думаю доба...Да, именно так я и планирую сделать.<BR/>Еще думаю добавить число вызовов для текущей функции, думаю тоже будет полезная информация.Andreyhttps://www.blogger.com/profile/16201443526225351421noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-82208804699404213032008-11-14T00:50:00.000-08:002008-11-14T00:50:00.000-08:00ясно, теперь понял о чем ты... да это известная пр...ясно, теперь понял о чем ты... да это известная проблема, ну думаю её не будет сложно побороть. например вычислять среднее значение для каждого счетчика и выводить через определенный промежуток времени...Neillhttps://www.blogger.com/profile/01348282751826555692noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-65399921520325572722008-11-12T12:45:00.000-08:002008-11-12T12:45:00.000-08:00neillНу очень быстро меняются значения что трудно ...<B>neill</B><BR/>Ну очень быстро меняются значения что трудно понять что за цифра в данный момент. Причем изменения значений разное по ходу дела в разных кадрах. Нужно как-то это усреднять n значений за время t и тогда выводить. Тем более я пользуюсь высокоточным Win32 таймером<BR/>функции используя функции: QueryPeformanceFrequency/QueryPerformanceCounter<BR/>Ну под Unix системами есть аналог gettimeofday, если надумаю портировать. Само собой может прыгать. Возможно проблема где-то ещё. FPS кстати так не прыгает. Но дробные значения у него меняются. Речь идет о долях мили секунд, поэтому возможно было это ожидать.Andreyhttps://www.blogger.com/profile/16201443526225351421noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-23740960396852832652008-11-12T05:00:00.000-08:002008-11-12T05:00:00.000-08:00неплохо придумал с профайлером, а мог объяснить чт...неплохо придумал с профайлером, а мог объяснить что за такой разброс значений времени?<BR/>> Нужно ещё решить как-то проблему мигания значение цифр, что происходит из-за разброса значений времени.Neillhttps://www.blogger.com/profile/01348282751826555692noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-17543348730096409112008-11-11T12:03:00.000-08:002008-11-11T12:03:00.000-08:00Ну к примеру в Direct3D9/Direct3D10текстуры попада...Ну к примеру в Direct3D9/Direct3D10<BR/>текстуры попадают в текстурные самплеры - текстурные регистры s0..sn<BR/>и можно работать без всяких имен.<BR/>Это если не использовать ID3DXEffec/ID3D10Effect, а использовать напрямую IDirect3DPixelShader9/ID3D10PixelShader<BR/>тоже самое в GL_ARB_vertex_program.Andreyhttps://www.blogger.com/profile/16201443526225351421noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-64774288235721776602008-11-11T11:44:00.000-08:002008-11-11T11:44:00.000-08:00В общем очень плохо сделали при проектировании GLS...<I>В общем очень плохо сделали при проектировании GLSL требование выставлять текстуру по имени. Это очень неудобно. Да простят меня фанаты/поклонники OpenGL API.</I><BR/><BR/>Прощаю =)<BR/>Здесь полностью с тобой согласен, неудобно, однако легко объяснимо - таким образом облегчается Run-Time часть драйвера отвечающего за GLSL. Ведь в конечном итоге мы имеем дело с sampler-unit. Я думаю что и в D3D тоже в конечном итоге привязка идет к sampler-unit, только делается это уже в Run-Time'е облегчая жизнь программиста. Скорее всего ARB сделала такой выбор для того чтобы программисты четко представляли что происходит.iOrangehttps://www.blogger.com/profile/03728028794052902348noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-61765145081783490862008-11-11T11:35:00.000-08:002008-11-11T11:35:00.000-08:00orangeИтак насчёт работы с самплерами в GLSL, полу...<B>orange</B><BR/>Итак насчёт работы с самплерами в GLSL, полученного из Cg кода. Пока в GLSL я не передаю никакие самплеры. Потому у меня и не все шейдеры работают которые я хотел переделать на профили glslv/glslf. Пока был сделан переход из GL_ARB_vertex_program/GL_ARB_fragment_program для шейдеров использующихся для от рисовки объектов в ShadowMap, и то те которые не используют текстур. Например деревья используют текстуру что-бы не рисовать пиксели с каким-то значением альфы.<BR/>В будущем я думаю сделать передачу самплеров в GLSL, полученный из Cg кода. Но есть 1 проблема, после вызова cgProgram, из созданной программы через профили glslf никак нельзя вытянуть имя uniform переменной определяющий текстурный самплер. Я не могу понять почему так. Так что я пока думаю что это нужно делать ручками, разбирая GLSL код. Я думаю это будет не проблема. Ну и потом получить index через glGetUniformLocationARB<BR/>и по порядку записать в массив. При установке шейдера все текстуры выставить по порядку, перебирая имена uniform переменных.К примеру у меня в рендере все выставленные текстуры записываются в массив. В общем очень плохо сделали при проектировании GLSL требование выставлять текстуру по имени. Это очень неудобно. Да простят меня фанаты/поклонники OpenGL API.Andreyhttps://www.blogger.com/profile/16201443526225351421noreply@blogger.comtag:blogger.com,1999:blog-4338251266540090894.post-46036205857475983762008-11-11T01:03:00.000-08:002008-11-11T01:03:00.000-08:00Правильно, давно пора!Способ я такой подсмотрел да...Правильно, давно пора!<BR/>Способ я такой подсмотрел давно в исходниках UT и активно использую не только для профайлеров.<BR/><BR/>Хотелось бы узнать как боролся с проблемой установки текстурных самплеров в GLSL.iOrangehttps://www.blogger.com/profile/03728028794052902348noreply@blogger.com