home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / Riza / source / cap_screen_glshaders.vdfx < prev    next >
Encoding:
Text File  |  2009-09-14  |  8.9 KB  |  295 lines

  1. ///////////////////////////////////// YV12 shaders (NV1x) /////////////////////////////////////
  2.  
  3. // NV_register_combiners: RGB -> Y1,Y2 -> gb
  4. technique YV12_NV1x_Y_gb {
  5.     pass {
  6.         fragmentshader = fragment_shader NV_register_combiners {
  7.             def c0, 0.299f * 219.0f / 255.0f, 0.587f * 219.0f / 255.0f, 0.114f * 219.0f / 255.0f, 16.0f / 255.0f
  8.             def c1, 0.0f, 1.0f, 0.0f, 0.0f
  9.  
  10.             dd r0.rgb, r1.rgb, t0, c0, t1, c0
  11.             mma discard, discard, r0.rgb, r0, v0, r1, c1
  12.  
  13.             final zero, r0, r0, c0.a, zero, zero, zero
  14.         };
  15.     }
  16. }
  17.  
  18. // NV_register_combiners: RGB -> Y1,Y2 -> ra
  19. technique YV12_NV1x_Y_ra {
  20.     pass {
  21.         fragmentshader = fragment_shader NV_register_combiners {
  22.             def c0, 0.299f * 219.0f / 255.0f, 0.587f * 219.0f / 255.0f, 0.114f * 219.0f / 255.0f, 16.0f / 255.0f
  23.  
  24.             dd    r0.rgb, r1.rgb, t0, c0, t1, c0
  25.  
  26.             add r0.rgb, r0, c0.a
  27.             + add r0.a, r1.b, c0
  28.         };
  29.     }
  30. }
  31.  
  32. // NV_register_combiners: RGB -> Cr -> rb/ga
  33. technique YV12_NV1x_Cr {
  34.     pass {
  35.         fragmentshader = fragment_shader NV_register_combiners {
  36.             def c0, ((1.0f-0.299f) * 224.0f / 255.0f * 0.713f) * -0.5f + 0.5f, (-0.587f * 224.0f / 255.0f * 0.713f) * -0.5f + 0.5f, (-0.114f * 224.0f / 255.0f * 0.713f) * -0.5f + 0.5f, 128.0f / 255.0f
  37.             def c1, 0, 1, 0, 0
  38.  
  39.             dd_bias r0.rgb, r1.rgb, t0, c0_bx2, t1, c0_bx2
  40.  
  41.             mma discard, discard, r0.rgb, -r0, 1-c1, -r1.rgb, c1
  42.             + mov r0.a, -r1.b
  43.         };
  44.     }
  45. }
  46.  
  47. // NV_register_combiners: RGB -> Cb -> rgb/a
  48. technique YV12_NV1x_Cb {
  49.     pass {
  50.         fragmentshader = fragment_shader NV_register_combiners {
  51.             def c0, (-0.299f * 224.0f / 255.0f * 0.564f) * -0.5f + 0.5f, (-0.587f * 224.0f / 255.0f * 0.564f) * -0.5f + 0.5f, ((1.0f-0.114f) * 224.0f / 255.0f * 0.564f) * -0.5f + 0.5f, 128.0f / 255.0f
  52.             def c1, 0, 1, 0, 0
  53.  
  54.             dd_bias r0.rgb, r1.rgb, t0, c0_bx2, t1, c0_bx2
  55.  
  56.             mma discard, discard, r0.rgb, -r0, 1-c1, -r1, c1
  57.             + mov r0.a, -r1.b
  58.         };
  59.     }
  60. }
  61.  
  62. ///////////////////////////////////// YV12 shaders (NV2x) /////////////////////////////////////
  63.  
  64. // NV_register_combiners2: RGB -> Y1,Y2,Y3,Y4 -> bgra
  65. technique YV12_NV2x_Y {
  66.     pass {
  67.         fragmentshader = fragment_shader NV_register_combiners2 {
  68.             def c0, 0.299f * 219.0f / 255.0f, 0.587f * 219.0f / 255.0f, 0.114f * 219.0f / 255.0f, 16.0f / 255.0f
  69.             def c1, 0, 0, 1, 0
  70.             def c2, 1, 0, 0, 16.0f / 255.0f
  71.  
  72.             dd t0.rgb, t1.rgb, t0, c0, t1, c0
  73.             dd t2.rgb, t3.rgb, t2, c0, t3, c0
  74.             mma discard, discard, r0.rgb, c1, t0, 1-c1, t1
  75.             mma discard, discard, r0.rgb, c2, t2, 1-c2, r0
  76.             + add r0.a, t3.b, c0
  77.  
  78.             final zero, r0, r0, c0.a, zero, zero, r0
  79.         };
  80.     }
  81. }
  82.  
  83. // NV_register_combiners: RGB -> Cr -> rb/ga
  84. technique YV12_NV2x_Cr {
  85.     pass {
  86.         fragmentshader = fragment_shader NV_register_combiners2 {
  87.             def c0, ((1.0f-0.299f) * 224.0f / 255.0f * 0.713f) * -0.25f + 0.5f, (-0.587f * 224.0f / 255.0f * 0.713f) * -0.25f + 0.5f, (-0.114f * 224.0f / 255.0f * 0.713f) * -0.25f + 0.5f, 128.0f / 255.0f
  88.             def c1, 0, 1, 0, 0
  89.  
  90.             dda_bias discard, discard, r0.rgb, t0, c0_bx2, t1, c0_bx2
  91.             dda_bias discard, discard, r1.rgb, t1, c0_bx2, t2, c0_bx2
  92.             mma discard, discard, r0.rgb, -r0, 1-c1, -r1, c1
  93.             + mov r0.a, -r1.b
  94.         };
  95.     }
  96. }
  97.  
  98. // NV_register_combiners: RGB -> Cb -> rb/ga
  99. technique YV12_NV2x_Cb {
  100.     pass {
  101.         fragmentshader = fragment_shader NV_register_combiners2 {
  102.             def c0, (-0.299f * 224.0f / 255.0f * 0.564f) * -0.25f + 0.5f, (-0.587f * 224.0f / 255.0f * 0.564f) * -0.25f + 0.5f, ((1.0f-0.114f) * 224.0f / 255.0f * 0.564f) * -0.25f + 0.5f, 128.0f / 255.0f
  103.             def c1, 0, 1, 0, 0
  104.  
  105.             dda_bias discard, discard, r0.rgb, t0, c0_bx2, t1, c0_bx2
  106.             dda_bias discard, discard, r1.rgb, t1, c0_bx2, t2, c0_bx2
  107.             mma discard, discard, r0.rgb, -r0, 1-c1, -r1, c1
  108.             + mov r0.a, -r1.b
  109.         };
  110.     }
  111. }
  112.  
  113. ///////////////////////////////////// YV12 shaders (ATIFS) /////////////////////////////////////
  114.  
  115. technique YV12_ATIFS_Y {
  116.     pass {
  117.         fragmentshader = fragment_shader ATI_fragment_shader {
  118.             def c0, 0.299f, 0.587f, 0.114f, 0
  119.             def c1, 219.0f / 255.0f, 16.0f / 255.0f, 0, 0
  120.             texld r0, t0
  121.             texld r1, t1
  122.             texld r2, t2
  123.             texld r3, t3
  124.             dp3 r4, r3, c0
  125.             dp3 r4.b, r0, c0
  126.             dp3 r4.g, r1, c0
  127.             dp3 r4.r, r2, c0
  128.             mad r0, r4, c1.r, c1.g
  129.         };
  130.     }
  131. }
  132.  
  133. technique YV12_ATIFS_Cb {
  134.     pass {
  135.         fragmentshader = fragment_shader ATI_fragment_shader {
  136.             def c0, (-0.299f) * 0.5f + 0.5f, (-0.587f) * 0.5f + 0.5f, ((1.0f-0.114f)) * 0.5f + 0.5f, 0
  137.             def c1, 0.564f * 224.0f / 255.0f, 128.0f / 255.0f, 0, 0
  138.             texld r0, t0
  139.             texld r1, t1
  140.             texld r2, t2
  141.             texld r3, t3
  142.             dp3 r4, r3, c0_bx2
  143.             dp3 r4.b, r0, c0_bx2
  144.             dp3 r4.g, r1, c0_bx2
  145.             dp3 r4.r, r2, c0_bx2
  146.             mad r0, r4, c1.r, c1.g
  147.         };
  148.     }
  149. }
  150.  
  151. technique YV12_ATIFS_Cr {
  152.     pass {
  153.         fragmentshader = fragment_shader ATI_fragment_shader {
  154.             def c0, ((1.0f-0.299f)) * 0.5f + 0.5f, (-0.587f) * 0.5f + 0.5f, (-0.114f) * 0.5f + 0.5f, 0
  155.             def c1, 0.713f * 224.0f / 255.0f, 128.0f / 255.0f, 0, 0
  156.             texld r0, t0
  157.             texld r1, t1
  158.             texld r2, t2
  159.             texld r3, t3
  160.             dp3 r4, r3, c0_bx2
  161.             dp3 r4.b, r0, c0_bx2
  162.             dp3 r4.g, r1, c0_bx2
  163.             dp3 r4.r, r2, c0_bx2
  164.             mad r0, r4, c1.r, c1.g
  165.         };
  166.     }
  167. }
  168.  
  169. ///////////////////////////////////// YUY2 shaders (NV1x) /////////////////////////////////////
  170.  
  171. // NV_register_combiners: RGB -> (Y1 -> r, Y2 -> b)
  172. technique YUY2_NV1x_Y {
  173.     pass {
  174.         fragmentshader = fragment_shader NV_register_combiners {
  175.             def c0, 0.299f * 219.0f / 255.0f, 0.587f * 219.0f / 255.0f, 0.114f * 219.0f / 255.0f, 16.0f / 255.0f
  176.             def c1, 1, 0, 0, 0
  177.  
  178.             dd r0.rgb, r1.rgb, t1, c0, t0, c0
  179.  
  180.             mma discard, discard, r0.rgb, r0, c1, r1, v0
  181.             
  182.             final zero, r0, r0, c0.a, zero, zero, r0
  183.         };
  184.     }
  185. }
  186.  
  187. // NV_register_combiners: RGB -> (Cb -> rgb, Cr -> a)
  188. technique YUY2_NV1x_C {
  189.     pass {
  190.         fragmentshader = fragment_shader NV_register_combiners {
  191.             def c0, (-0.299f * 224.0f / 255.0f * 0.564f) * 0.5f + 0.5f, (-0.587f * 224.0f / 255.0f * 0.564f) * 0.5f + 0.5f, ((1.0f-0.114f) * 224.0f / 255.0f * 0.564f) * 0.5f + 0.5f, 128.0f / 255.0f
  192.             def c1, ((1.0f-0.299f) * 224.0f / 255.0f * 0.713f) * 0.5f + 0.5f, (-0.587f * 224.0f / 255.0f * 0.713f) * 0.5f + 0.5f, (-0.114f * 224.0f / 255.0f * 0.713f) * 0.5f + 0.5f, 128.0f / 255.0f
  193.  
  194.             dd r0.rgb, r1.rgb, t0, c0_bx2, t0, c1_bx2
  195.  
  196.             add r0.rgb, r0, c0.a
  197.             + add r0.a, r1.b, c0.a
  198.         };
  199.     }
  200. }
  201.  
  202. ///////////////////////////////////// YUY2 shaders (NV2x) /////////////////////////////////////
  203.  
  204. // NV_register_combiners2: RGB -> YUY2
  205. technique YUY2_NV2x {
  206.     pass {
  207.         fragmentshader = fragment_shader NV_register_combiners2 {
  208.             def c0, (-0.299f) * 0.5f + 0.5f, (-0.587f) * 0.5f + 0.5f, ((1.0f-0.114f)) * 0.5f + 0.5f, 128.0f / 255.0f
  209.             def c1, ((1.0f-0.299f)) * 0.5f + 0.5f, (-0.587f) * 0.5f + 0.5f, (-0.114f) * 0.5f + 0.5f, 128.0f / 255.0f
  210.             def c2, 0.299f, 0.587f, 0.114f, 0
  211.             def c3, 0.564f * 224.0f / 255.0f, 0.564f * 224.0f / 255.0f, 0.564f * 224.0f / 255.0f, 128.0f / 255.0f
  212.             def c4, 0, 0, 219.0f / 255.0f, 0
  213.             def c5, 219.0f / 255.0f, 0, 0, 0
  214.             def c6, 0, 1, 0, 0
  215.             def c7, 0.713f * 224.0f / 255.0f, 0.713f * 224.0f / 255.0f, 0.713f * 224.0f / 255.0f, 128.0f / 255.0f
  216.             def c8, 16.0f / 255.0f, 0.0f / 255.0f, 16.0f / 255.0f, 0
  217.             
  218.             // downfilter chroma pixel
  219.             add_d2 t2.rgb, t2, t3
  220.  
  221.             // compute Cr and Cb
  222.             dd t2.rgb, t3.rgb, t2, c0_bx2, t2, c1_bx2
  223.  
  224.             // compute Y1 and Y2
  225.             dd t0.rgb, t1.rgb, t0, c2, t1, c2
  226.             + mad t2.a, t2.b, c3.b, c3
  227.  
  228.             // merge Y1 (b) and Y2 (r)
  229.             mma discard, discard, r0.rgb, t0, c4, t1, c5
  230.  
  231.             // merge Cb (g)
  232.             mad r0.rgb, t2.a, c6, r0
  233.             + mad r0.a, t3.b, c7.b, c7
  234.  
  235.             final zero, r0, r0, c8, zero, zero, r0
  236.         };
  237.     }
  238. }
  239.  
  240. ///////////////////////////////////// YUY2 shaders (ATIFS) /////////////////////////////////////
  241. technique YUY2_ATIFS {
  242.     pass {
  243.         fragmentshader = fragment_shader ATI_fragment_shader {
  244.             def c0, (-0.299f) * 0.5f + 0.5f, (-0.587f) * 0.5f + 0.5f, ((1.0f-0.114f)) * 0.5f + 0.5f, 128.0f / 255.0f
  245.             def c1, ((1.0f-0.299f)) * 0.5f + 0.5f, (-0.587f) * 0.5f + 0.5f, (-0.114f) * 0.5f + 0.5f, 128.0f / 255.0f
  246.             def c2, 0.299f, 0.587f, 0.114f, 0
  247.             def c5, 219.0f / 255.0f, 0.564f * 224.0f / 255.0f, 219.0f / 255.0f, 0.713f * 224.0f / 255.0f
  248.             def c8, 16.0f / 255.0f, 128.0f / 255.0f, 16.0f / 255.0f, 128.0f / 255.0f
  249.  
  250.             texld r0, t0
  251.             texld r1, t1
  252.             texld r2, t2
  253.             texld r3, t3
  254.  
  255.             // downfilter chroma pixel
  256.             add_d2 r2.rgb, r2, r3
  257.  
  258.             // compute Cr (a) and Cb (g)
  259.             dp3 r4, r2, c1_bx2
  260.             dp3 r4.g, r2, c0_bx2
  261.             
  262.             // compute Y1 (b) and Y2 (r)
  263.             dp3 r4.b, r0, c2
  264.             dp3 r4.r, r1, c2
  265.  
  266.             mad r0, r4, c5, c8
  267.         };
  268.     }
  269. }
  270.  
  271. ///////////////////////////////////// Differencing shaders (NV1x) /////////////////////////////////////
  272.  
  273. technique difference_NV1x {
  274.     pass {
  275.         fragmentshader = fragment_shader NV_register_combiners {
  276.             add r0, t0, -t1
  277.             dp3 r0.rgb, r0, r0
  278.             final zero, r0, r0, zero, zero, zero, r0.b
  279.         };
  280.     }
  281. }
  282.  
  283. technique difference_ATIFS {
  284.     pass {
  285.         fragmentshader = fragment_shader ATI_fragment_shader {
  286.             texld r0, t0
  287.             texld r1, t1
  288.             add r0.rgb, r0, -r1
  289.             dp3 r0.rgb, r0, r0
  290.             mov r0.a, r0.b
  291.             mov r0.a, r0.b
  292.         };
  293.     }
  294. }
  295.