{"id":29,"date":"2008-01-10T16:19:15","date_gmt":"2008-01-10T15:19:15","guid":{"rendered":"http:\/\/www.ozone3d.net\/blogs\/lab\/?p=29"},"modified":"2011-09-07T20:46:28","modified_gmt":"2011-09-07T19:46:28","slug":"les-catalyst-712-toujours-a-la-sauce-bug-inside","status":"publish","type":"post","link":"https:\/\/www.ozone3d.net\/blogs\/lab\/20080110\/les-catalyst-712-toujours-a-la-sauce-bug-inside\/","title":{"rendered":"Les Catalyst 7.12 toujours \u00e0 la sauce &#8220;Bug-Inside&#8221;"},"content":{"rendered":"<p><center><img decoding=\"async\" src=\"http:\/\/www.ozone3d.net\/public\/news\/ati_radeon.png\" \/><\/center><\/p>\n<p>Les derniers pilotes Catalyst ont la version 7.12 (le num\u00e9ro interne des Cat7.12 est le 8.442.0.0 &#8211; c&#8217;est pas un t\u00e9l\u00e9phone ok!). Mais exactement comme les 7.11, ces drivers ont un bug dans la gestion des lumi\u00e8res dynamiques en GLSL. Mais cette fois-ci, je me suis mis \u00e0 la recherche du bug car il est un peu, voire tr\u00e8s g\u00e9nant pour les demos <a href=\"http:\/\/www.ozone3d.net\/demoniak3d\/\">Demoniak3D<\/a>. J&#8217;ai donc pondu un petit script <a href=\"http:\/\/www.ozone3d.net\/demoniak3d\/\">Demoniak3D<\/a> qui met en \u00e9vidence ce bug. Ce script montre un mesh plan \u00e9clair\u00e9 par une lumi\u00e8re dynamique. Un appui sur la touche SPACE permet de changer de shader GLSL: on passe du shader bogu\u00e9 au shader corrig\u00e9 et inversement.<\/p>\n<p>&#8211; L&#8217;image suivante montre le plan \u00e9clair\u00e9 avec le shader corrig\u00e9:<br \/>\n<center><img decoding=\"async\" src=\"https:\/\/www.ozone3d.net\/blogs\/lab\/public\/200712\/cat7_12_one_light_with_workaround_w530.jpg\" \/><\/center><\/p>\n<p>&#8211; L&#8217;image suivante montre le plan \u00e9clair\u00e9 avec le shader bogu\u00e9:<br \/>\n<center><img decoding=\"async\" src=\"https:\/\/www.ozone3d.net\/blogs\/lab\/public\/200712\/cat7_12_one_light_with_bug_w530.jpg\" \/><\/center><\/p>\n<p>okay tout ceci est bien, mais d&#8217;o\u00fb vient le bug? Apr\u00e8s avoir pass\u00e9 un peu de temps \u00e0 tweaker les shaders, j&#8217;en suis arriv\u00e9 \u00e0 la conclusion que le bug se situe au niveau de la valeur contenue dans la variable uniforme built-in gl_LightSource[0].position. Au niveau du vertex shader, cette variable contient la position de la lumi\u00e8re exprim\u00e9e l&#8217;espace de la cam\u00e9ra. C&#8217;est OpenGL qui effectue cette transformation, \u00e0 notre niveau il suffit de sp\u00e9cifier la position de la lumi\u00e8re en coordonn\u00e9es du monde. Au niveau du vertex shader, gl_LightSource[0].position nous permet de calculer la direction de la lumi\u00e8re utilis\u00e9e plus tard dans le pixel shader:<\/p>\n<pre>\r\n\tlightDir = gl_LightSource[0].position.xyz - vVertex;\r\n<\/pre>\n<p>Avec la Radeon HD 3870 et les Catalyst 7.11 et 7.12, la valeur contenue dans gl_LightSource[0].position est fausse.<br \/>\nDonc le workaround que je propose en attendant que la driver team d&#8217;ATI corrige le bug, est de passer au vertex shader la position de la lumi\u00e8re exprim\u00e9e dans les coordonn\u00e9es du monde ainsi que la matrice de vue de la camera et de faire la transformation \u00e0 la main:<\/p>\n<pre>\r\n\tvec3 lightPosEye = vec3(mv * vec4(-150.0, 50.0, 0.0, 1.0));\r\n\tlightDir = lightPosEye - vVertex;\r\n<\/pre>\n<p>mv repr\u00e9sente la matrice 4&#215;4 de vue de la cam\u00e9ra et vec4(-150.0, 50.0, 0.0, 1.0) repr\u00e9sente la position de la lumi\u00e8re en coordonn\u00e9es du monde.<\/p>\n<p>Au niveau pipeline fixe, les lumi\u00e8res dynamiques sont bien g\u00e9r\u00e9es comme le montre l&#8217;image suivante:<br \/>\n<center><img decoding=\"async\" src=\"https:\/\/www.ozone3d.net\/blogs\/lab\/public\/200712\/cat7_12_fixed_pipeline_one_light_w530\" \/><\/center><\/p>\n<p>Au niveau de la d\u00e9mo <a href=\"http:\/\/www.ozone3d.net\/demoniak3d\/\">Demoniak3D<\/a>, le shader GLSL bogu\u00e9 est appel\u00e9 <b>OneDynLightShader<\/b> et celui corrig\u00e9 <b>OneDynLightShader_Fixed<\/b>. Le code source de la d\u00e9mo Demoniak3D se trouve dans le fichier <b>OneDynLightTest.xml<\/b>. Pour lancer la demo, d\u00e9zippez l&#8217;archive dans un r\u00e9pertoire<br \/>\net lancez <b>DEMO_Catalyst_Bug.exe<\/b>.<\/p>\n<p>La d\u00e9mo est t\u00e9l\u00e9chargeable ici: <a href=\"https:\/\/www.ozone3d.net\/blogs\/lab\/public\/200712\/DEMO_Catalyst_7_12_Bug.zip\">Demoniak3D Catalyst 7.11\/7.12 Bug<\/a><\/p>\n<p>Ce bug affecte toutes les radeons <b>MAIS sous Windows XP uniquement<\/b>. On dirait qu&#8217;ATI nous force un peu la main pour passer sous Vista. Pas trop sympa&#8230; Ou alors ATI commence \u00e0 impl\u00e9menter OpenGL 3.0 dans les drivers XP. Car n&#8217;oublions pas qu&#8217;avec OpenGL 3.0, tout comme avec DX10, les fonctions fixes du pipelines 3D comme la gestion des lumi\u00e8res dynamiques sont supprim\u00e9es.<\/p>\n<p>Je voudrais remercier la <a href=\"http:\/\/www.worldpcspecs.com\/index.php?option=com_smf&#038;Itemid=47&#038;topic=742.0\">communaut\u00e9 WorldPCSpecs pour les tests<\/a>. Merci les gars!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les derniers pilotes Catalyst ont la version 7.12 (le num\u00e9ro interne des Cat7.12 est le 8.442.0.0 &#8211; c&#8217;est pas un t\u00e9l\u00e9phone ok!). Mais exactement comme les 7.11, ces drivers ont un bug dans la gestion des lumi\u00e8res dynamiques en GLSL. Mais cette fois-ci, je me suis mis \u00e0 la recherche du bug car il est un peu, voire tr\u00e8s g\u00e9nant pour les demos Demoniak3D. J&#8217;ai &hellip; <a href=\"https:\/\/www.ozone3d.net\/blogs\/lab\/20080110\/les-catalyst-712-toujours-a-la-sauce-bug-inside\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Les Catalyst 7.12 toujours \u00e0 la sauce &#8220;Bug-Inside&#8221;<\/span> <span class=\"meta-nav\">&raquo;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,8],"tags":[31,29,69,83,127,128,18,139,130,110,129],"class_list":["post-29","post","type-post","status-publish","format-standard","hentry","category-opengl","category-programming","tag-bug","tag-catalyst","tag-demoniak3d","tag-dx10","tag-dynamic-light","tag-fix","tag-glsl","tag-pilote-graphique","tag-shader","tag-tech-demos","tag-workaround"],"aioseo_notices":[],"views":905,"_links":{"self":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/posts\/29","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/comments?post=29"}],"version-history":[{"count":0,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/posts\/29\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/media?parent=29"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/categories?post=29"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/tags?post=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}