PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : recompile der vs/ps 2,0 shader ...


Mad-Marty
2003-03-16, 10:48:53
Hi,

ich hab mir heute mal die Dawn shaderfiles angeschaut,
und dachte, das müsse man doch irgendwie für DX 8 compilen können.

Leider hab ich mit dem CG shice nix hingekriegt und bin
mir auch gar nicht sicher wie das geht und ob das geht.


Könnte nicht mal jemand mit ahnung die shader für ps 1.3 / vs 1.1 compilieren ? Falls das geht (nehme ich doch mal an mit mehreren Passes und halt kein Float) wäre das super.

Demirug
2003-03-16, 11:06:26
Kurze Antwort: Vergies es einfach.

Lange Antwort: Der Cg Compiler ist (genau wie der HLSL Compiler von MS) nicht in der Lage einen Shader automatisch in mehrer Passes zu zerlegen. Erfordert ein Shader mehr als mit einem bestimmten Profil in einem Pass gemacht werden kann dann weigert sich der Compiler einfach den Shader zu compilieren.

Die Shader für Dawn sind übrigens für die OpenGL Profile der NV3x Chips gedacht. Ich bin im Moment noch nicht mal sicher ob sie überhaupt für VS und PS 2.0+ von DX9 compiliert werden können.

Mad-Marty
2003-03-16, 11:32:36
Demi, sind die tools dann aber nicht irgendwie sinnlos ?

Ich mein sie solltes das ja vereinfachen, und der Cg unterstützt ja auch die profile für jede version, aber wenn der Programmierer trotzdem noch für jeden chip den code schreiben muss ... irgendwie sinnlos oder ?

Naja schade, ich dachte man kann das da unten elegant in PS 1.3 umwandeln lassen, damit mal die emulate nv30 slideshow wegkommt auf meiner GF4.


EDIT: Wie siehts mit ATi's Shaderstudio aus ? kann das evtl. importieren und splitten und nen 1.3 kompatiblen output machen ?

die Dawn shader sehen übrigens so aus:
Hair:

!!FP1.0
# NV_fragment_program generated by NVIDIA Cg compiler
# cgc version 1.5.0001, build date Oct 29 2002 01:02:54
# command line args: -profile fp30
#vendor NVIDIA Corporation
#version 1.0.1
#profile fp30
#program main
#semantic main.anisoTex
#semantic main.hairDiff
#semantic main.cube_bleed_map
#semantic main.cube_diffuse_map
#var half4 v2f.wpos : $vin.WPOS : WPOS : 0 : 1
#var half3 v2f.silhouette : $vin.TEX0 : TEX0 : 0 : 1
#var half4 v2f.worldEyeDir : $vin.TEX1 : TEX1 : 0 : 1
#var half4 v2f.texCoord : $vin.TEX2 : TEX2 : 0 : 1
#####/var half3 v2f.fakeNorm : $vin.TEX3 : TEX3 : 0 : 1
#var sampler2D anisoTex : : texunit 0 : 1 : 1
#var sampler2D hairDiff : : texunit 1 : 2 : 1
#var samplerCUBE cube_bleed_map : : texunit 2 : 3 : 1
#var samplerCUBE cube_diffuse_map : : texunit 3 : 4 : 1
#var float4 COL : $vout.COL : COL : -1 : 1
MOVH H3.w, f[TEX0].x;
TEX H2, f[TEX2].zwzz, TEX1, 2D; #diffuse
TEX H3.xyz, f[TEX1], TEX2, CUBE; #hilight
MULX H3.xyz, H3, H2.y;
MULX H3.xyz, H3, H3.w;
MULX H3.xyz, H3, 0.3;
MOVX o[COLH].w, H2.x;

TEX H2, f[TEX2].xyxx, TEX0, 2D; #aniso
ADDX o[COLH].xyz, H2, H3;

#MOVH o[COLH].xyz, H3;

END
# End of program

Demirug
2003-03-16, 11:40:22
Originally posted by Mad-Marty
Demi, sind die tools dann aber nicht irgendwie sinnlos ?

Ich mein sie solltes das ja vereinfachen, und der Cg unterstützt ja auch die profile für jede version, aber wenn der Programmierer trotzdem noch für jeden chip den code schreiben muss ... irgendwie sinnlos oder ?

Naja schade, ich dachte man kann das da unten elegant in PS 1.3 umwandeln lassen, damit mal die emulate nv30 slideshow wegkommt auf meiner GF4.

die Dawn shader sehen übrigens so aus:
Hair:

!!FP1.0
# NV_fragment_program generated by NVIDIA Cg compiler
# cgc version 1.5.0001, build date Oct 29 2002 01:02:54
# command line args: -profile fp30
#vendor NVIDIA Corporation
#version 1.0.1
#profile fp30
#program main
#semantic main.anisoTex
#semantic main.hairDiff
#semantic main.cube_bleed_map
#semantic main.cube_diffuse_map
#var half4 v2f.wpos : $vin.WPOS : WPOS : 0 : 1
#var half3 v2f.silhouette : $vin.TEX0 : TEX0 : 0 : 1
#var half4 v2f.worldEyeDir : $vin.TEX1 : TEX1 : 0 : 1
#var half4 v2f.texCoord : $vin.TEX2 : TEX2 : 0 : 1
#####/var half3 v2f.fakeNorm : $vin.TEX3 : TEX3 : 0 : 1
#var sampler2D anisoTex : : texunit 0 : 1 : 1
#var sampler2D hairDiff : : texunit 1 : 2 : 1
#var samplerCUBE cube_bleed_map : : texunit 2 : 3 : 1
#var samplerCUBE cube_diffuse_map : : texunit 3 : 4 : 1
#var float4 COL : $vout.COL : COL : -1 : 1
MOVH H3.w, f[TEX0].x;
TEX H2, f[TEX2].zwzz, TEX1, 2D; #diffuse
TEX H3.xyz, f[TEX1], TEX2, CUBE; #hilight
MULX H3.xyz, H3, H2.y;
MULX H3.xyz, H3, H3.w;
MULX H3.xyz, H3, 0.3;
MOVX o[COLH].w, H2.x;

TEX H2, f[TEX2].xyxx, TEX0, 2D; #aniso
ADDX o[COLH].xyz, H2, H3;

#MOVH o[COLH].xyz, H3;

END
# End of program


Nein Sinnlos sind die Tools nicht. Es ist eben einfacher einen Shader in einer Hochsprache zu schreiben. Was das skalieren angeht so muss man im zweifelsfall den vrohandenen Code etwas abspecken und oder den Split von Hand machen. Man spart dabei aber wenn man es richtig macht immer noch eine menge arbeit.

Den Shadercode den du hast ist aber schon das ergebniss des Compilerlaufs und nicht der Cg code. Ich hatte mich auch schon gewundert woher du den original Shader-Quellcode der Dawn Demo bekommen hast.

PS: das ist einer der einfachen Shader. Da müssen noch längere sein.