at4 pos : SV_POSITION; float2 uv : TEXCOORD0; }; #line 84 S__VSOut F__VSMain( #line 84 in uint vid : SV_VERTEXID) { #line 86 S__VSOut o = (S__VSOut)0; #line 87 bool _22 = vid == 2; #line 87 float _25 = _22 ? 2.00000000e+00 : 0.00000000e+00; #line 87 o.uv[0] = _25; #line 88 bool _27 = vid == 1; #line 88 float _30 = _27 ? 2.00000000e+00 : 0.00000000e+00; #line 88 o.uv[1] = _30; #line 89 float2 _33 = o.uv * float2(2.00000000e+00, -2.00000000e+00); #line 89 float2 _35 = _33 + float2(-1.00000000e+00, 1.00000000e+00); #line 89 float4 _40 = float4(_35.x, _35.y, 0.00000000e+00, 1.00000000e+00); #line 89 o.pos = _40; return o; } #line 93 void F__VSMainOut( #line 93 in uint vid : SV_VERTEXID, #line 93 out float4 position : SV_POSITION, #line 93 out float2 texcoord : TEXCOORD0) { #line 95 uint _46; #line 95 _46 = vid; #line 95 S__VSOut _47 = F__VSMain(_46); #line 95 S__VSOut o_48 = _47; #line 96 position = o_48.pos; #line 97 texcoord = o_48.uv; return; } #line 52 "Painterly.fx" float2 F__sobel( #line 52 in float2 uv, #line 53 in float2 pixel_size) { #line 55 float2 grad = float2(0.00000000e+00, 0.00000000e+00); #line 56 float3x3 sobel_m = float3x3(-1.00000000e+00, -2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.00000000e+00, 2.00000000e+00, 1.00000000e+00); #line 60 int x = -1; #line 60 bool _67 = x <= 1; #line 60 [unroll] while (_67) { { #line 61 int y = -1; #line 61 bool _79 = y <= 1; #line 61 [unroll] while (_79) { { #line 63 int2 _83 = int2(x, y); #line 63 float4 _84 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, uv, _83); #line 63 float3 _85; #line 63 _85 = _84.xyz; #line 63 float _87 = F__NV__GetLuma(_85); #line 63 float v = _87; #line 64 int _90 = x + 1; #line 64 int _92 = y + 1; #line 64 int _94 = y + 1; #line 64 int _96 = x + 1; #line 64 float2 _99 = float2(sobel_m[_90][_92], sobel_m[_94][_96]); #line 64 float2 _101 = v.xx * _99; #line 64 float2 _102 = grad + _101; #line 64 grad = _102; } int _80 = y; #line 61 int _82 = _80 + 1; #line 61 y = _82; #line 61 _79 = y <= 1; } } int _68 = x; #line 60 int _70 = _68 + 1; #line 60 x = _70; #line 60 _67 = x <= 1; } #line 66 float2 _104 = grad * float2(1.00000000e+00, -1.00000000e+00); return _104; } #line 69 float3 F__faux_kuwahara( #line 69 in float2 uv, #line 70 in float2 pixel_size, #line 71 in float pass_id) { #line 74 float2 _110; #line 74 float2 _111; #line 74 _110 = uv; #line 74 _111 = pixel_size; #line 74 float2 _112 = F__sobel(_110, _111); #line 74 float2 grad_113 = _112; #line 76 float _115 = -grad_113.x; #line 76 float2 _117 = float2(grad_113.y, _115); #line 76 float2 orthogonal = _117; #line 77 float _119 = dot(grad_113, grad_113); #line 77 float _121 = _119 * 4.00000000e+00; #line 77 float steepness = _121; #line 79 float _125 = orthogonal.y / orthogonal.x; #line 79 float _126 = atan(_125); #line 79 float edge_angle = _126; #line 80 float _128 = cos(edge_angle); #line 80 float _129 = sin(edge_angle); #line 80 float _130 = -_129; #line 81 float _131 = sin(edge_angle); #line 81 float _132 = cos(edge_angle); #line 80 float2x2 _133 = float2x2(_128, _130, _131, _132); #line 80 float2x2 rot_to_edge = _133; #line 83 float4 weighted_sum = float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 84 float4 _141 = float4(uv.x, uv.y, 0.00000000e+00, 0.00000000e+00); #line 84 float4 _142 = V__NV__ColorInput.t.SampleLevel(V__NV__ColorInput.s, _141.xy, _141.w); #line 84 float3 center = _142.xyz; const float4 _145[20] = { float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00), float4(0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00) }; #line 86 float4 dirsum[20] = _145; #line 87 float totalvariance = 0.00000000e+00; #line 90 float j = 0.00000000e+00; #line 90 bool _157 = j < ((float)g_sldPaintDirs); #line 90 [loop] while (_157) { { #line 92 float2 dir = float2(0.00000000e+00, 0.00000000e+00); #line 93 float _165 = 3.60000000e+02 / ((float)g_sldPaintDirs); #line 93 float _167 = pass_id / ((float)g_sldPasses); #line 93 float _168 = j + _167; #line 93 float _169 = _165 * _168; #line 93 float _170 = radians(_169); #line 93 float _171; #line 93 float _172; #line 93 _171 = sin(_170), _172 = cos(_170); #line 93 dir[1] = _171; #line 93 dir[0] = _172; #line 96 float _175 = 1.00000000e+00 + steepness; #line 96 float _177 = dir.x * _175; #line 96 dir[0] = _177; #line 97 float _179 = 1.00000000e+00 + steepness; #line 97 float _181 = dir.y / _179; #line 97 dir[1] = _181; #line 100 float2 _182 = mul(dir, rot_to_edge); #line 100 dir = _182; #line 103 float2 _184 = pixel_size * float2(1.41400003e+00, 1.41400003e+00); #line 103 float2 _185 = dir * _184; #line 103 dir = _185; #line 105 float4 _190 = float4(center.x, center.y, center.z, 1.00000000e+00); #line 105 float4 mean = _190; #line 106 float3 _192 = center * center; #line 106 float4 _197 = float4(_192.x, _192.y, _192.z, 1.00000000e+00); #line 106 float4 variance = _197; #line 109 int k = 1; #line 109 bool _206 = k <= g_sldPaintLen; #line 109 [loop] while (_206) { { #line 111 float2 _211 = dir * ((float2)k.xx); #line 111 float2 _212 = uv + _211; #line 111 float4 _217 = float4(_212.x, _212.y, 0.00000000e+00, 0.00000000e+00); #line 111 float4 _218 = V__NV__ColorInput.t.SampleLevel(V__NV__ColorInput.s, _217.xy, _217.w); #line 111 float3 color_220 = _218.xyz; #line 112 float4 _225 = float4(color_220.x, color_220.y, color_220.z, 1.00000000e+00); #line 112 float4 _226 = mean + _225; #line 112 mean = _226; #line 113 float3 _227 = color_220 * color_220; #line 113 float4 _232 = float4(_227.x, _227.y, _227.z, 1.00000000e+00); #line 113 float4 _233 = variance + _232; #line 113 variance = _233; } int _207 = k; #line 109 int _209 = _207 + 1; #line 109 k = _209; #line 109 _206 = k <= g_sldPaintLen; } #line 116 float3 _236 = mean.xyz / mean.w.xxx; #line 116 mean.xyz = _236; #line 117 float3 _239 = variance.xyz / variance.w.xxx; #line 117 variance.xyz = _239; #line 119 float3 _242 = mean.xyz * mean.xyz; #line 119 float3 _244 = variance.xyz - _242; #line 119 variance.xyz = _244; #line 120 float _247 = max(variance.x, variance.y); #line 120 float _249 = max(_247, variance.z); #line 120 float _251 = _249 + 1.00000005e-03; #line 120 variance[3] = _251; #line 122 float4 _257 = float4(mean.xyz.x, mean.xyz.y, mean.xyz.z, variance.w); #line 122 dirsum[((int)j)] = _257; #line 123 float _259 = totalvariance + variance.w; #line 123 totalvariance = _259; } float _158 = j; #line 90 float _160 = _158 + 1.00000000e+00; #line 90 j = _160; #line 90 _157 = j < ((float)g_sldPaintDirs); } #line 126 float _261 = totalvariance / ((float)g_sldPaintDirs); #line 126 totalvariance = _261; #line 128 int j_263 = 0; #line 128 bool _269 = j_263 < g_sldPaintDirs; #line 128 while (_269) { { #line 130 float _274 = g_sldSharpen * 8.00000000e+00; #line 130 float sharpen_intensity = _274; #line 131 float4 _280 = float4(dirsum[j_263].xyz.x, dirsum[j_263].xyz.y, dirsum[j_263].xyz.z, 1.00000000e+00); #line 131 float _281 = -sharpen_intensity; #line 131 float _283 = pow(dirsum[j_263].w, _281); #line 131 float4 _285 = _280 * _283.xxxx; #line 131 float4 _286 = weighted_sum + _285; #line 131 weighted_sum = _286; } int _270 = j_263; #line 128 int _272 = _270 + 1; #line 128 j_263 = _272; #line 128 _269 = j_263 < g_sldPaintDirs; } #line 134 float3 _289 = weighted_sum.xyz / weighted_sum.w.xxx; return _289; } #line 138 float3 F__paint_filter( #line 138 in S__VSOut i, #line 138 in float pass_id) { #line 140 float3 least_divergent = float3(0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 141 float3 total_sum = float3(0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 142 float min_divergence = 1.00000000e+10; #line 144 int g_sldPaintLen_301 = 2; #line 145 int NUM_PASSES_2 = 2; #line 146 int NUM_DIRS_2 = 6; #line 149 int j_307 = 0; #line 149 bool _313 = j_307 < NUM_DIRS_2; #line 149 [loop] while (_313) { { #line 151 float2 dir_318 = float2(0.00000000e+00, 0.00000000e+00); #line 151 float _320 = pass_id / ((float)NUM_PASSES_2); #line 151 float _322 = ((float)j_307) + _320; #line 151 float _324 = 1.80000000e+02 * _322; #line 151 float _326 = _324 / ((float)NUM_DIRS_2); #line 151 float _327 = radians(_326); #line 151 float _328; #line 151 float _329; #line 151 _328 = sin(_327), _329 = cos(_327); #line 151 dir_318[1] = _328; #line 151 dir_318[0] = _329; #line 153 float3 col_avg_per_dir = float3(0.00000000e+00, 0.00000000e+00, 0.00000000e+00); #line 154 float curr_divergence = 0.00000000e+00; #line 156 float2 _336 = dir_318 * ((float2)g_sldPaintLen_301.xx); #line 156 float _339 = 1.00000000e+00 / _1.x; #line 156 float _342 = 1.00000000e+00 / _1.y; #line 156 float2 _343 = float2(_339, _342); #line 156 float2 _344 = _336 * _343; #line 156 float2 _346 = i.uv.xy - _344; #line 156 float4 _351 = float4(_346.x, _346.y, 0.00000000e+00, 0.00000000e+00); #line 156 float4 _352 = V__NV__ColorInput.t.SampleLevel(V__NV__ColorInput.s, _351.xy, _351.w); #line 156 float3 col_prev = _352.xyz; #line 158 int _355 = -g_sldPaintLen_301; #line 158 int _357 = _355 + 1; #line 158 int k_358 = _357; #line 158 bool _364 = k_358 <= g_sldPaintLen_301; #line 158 while (_364) { { #line 160 float2 _369 = dir_318 * ((float2)k_358.xx); #line 160 float _372 = 1.00000000e+00 / _1.x; #line 160 float _375 = 1.00000000e+00 / _1.y; #line 160 float2 _376 = float2(_372, _375); #line 160 float2 _377 = _369 * _376; #line 160 float2 _379 = i.uv.xy + _377; #line 160 float4 _384 = float4(_379.x, _379.y, 0.00000000e+00, 0.00000000e+00); #line 160 float4 _385 = V__NV__ColorInput.t.SampleLevel(V__NV__ColorInput.s, _384.xy, _384.w); #line 160 float3 col_curr = _385.xyz; #line 161 float3 _388 = col_avg_per_dir + col_curr; #line 161 col_avg_per_dir = _388; #line 163 float3 _389 = col_curr - col_prev; #line 163 float3 _390 = abs(_389); #line 163 float3 color_diff = _390; #line 165 float _394 = max(color_diff.x, color_diff.y); #line 165 float _396 = max(_394, color_diff.z); #line 165 float _397 = curr_divergence + _396; #line 165 curr_divergence = _397; #line 166 col_prev = col_curr; } int _365 = k_358; #line 158 int _367 = _365 + 1; #line 158 k_358 = _367; #line 158 _364 = k_358 <= g_sldPaintLen_301; } #line 170 bool _401 = curr_divergence < min_divergence; #line 170 [flatten] if (_401) { #line 172 least_divergent = col_avg_per_dir; #line 173 min_divergence = curr_divergence; } #line 176 float3 _402 = total_sum + col_avg_per_dir; #line 176 total_sum = _402; } int _314 = j_307; #line 149 int _316 = _314 + 1; #line 149 j_307 = _316; #line 149 _313 = j_307 < NUM_DIRS_2; } #line 179 int _404 = 2 * g_sldPaintLen_301; #line 179 float3 _406 = least_divergent / ((float3)_404.xxx); #line 179 least_divergent = _406; #line 180 int _408 = 2 * g_sldPaintLen_301; #line 180 int _409 = _408 * NUM_DIRS_2; #line 180 float3 _411 = total_sum / ((float3)_409.xxx); #line 180 total_sum = _411; #line 181 int _413 = 2 * g_sldPaintLen_301; #line 181 float _415 = min_divergence / ((float)_413); #line 181 min_divergence = _415; return least_divergent; } #line 206 void F__PS_Paint_1( #line 206 in S__VSOut i, #line 206 out float3 color : SV_TARGET) { #line 206 bool _424 = g_sldPasses >= 1; #line 206 if (_424) { #line 206 float _427 = 1.00000000e+00 / _1.x; #line 206 float _430 = 1.00000000e+00 / _1.y; #line 206 float2 _431 = float2(_427, _430); #line 206 float2 _432; #line 206 float2 _433; #line 206 float _434; #line 206 _432 = i.uv; #line 206 _433 = _431; #line 206 _434 = 1.00000000e+00; #line 206 float3 _437 = F__faux_kuwahara(_432, _433, _434); #line 206 color = _437; } else { #line 206 float4 _439 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 206 color = _439.xyz; } return; } #line 207 void F__PS_Paint_2( #line 207 in S__VSOut i, #line 207 out float3 color : SV_TARGET) { #line 207 bool _449 = g_sldPasses >= 2; #line 207 if (_449) { #line 207 float _452 = 1.00000000e+00 / _1.x; #line 207 float _455 = 1.00000000e+00 / _1.y; #line 207 float2 _456 = float2(_452, _455); #line 207 float2 _457; #line 207 float2 _458; #line 207 float _459; #line 207 _457 = i.uv; #line 207 _458 = _456; #line 207 _459 = 2.00000000e+00; #line 207 float3 _462 = F__faux_kuwahara(_457, _458, _459); #line 207 color = _462; } else { #line 207 float4 _464 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 207 color = _464.xyz; } return; } #line 208 void F__PS_Paint_3( #line 208 in S__VSOut i, #line 208 out float3 color : SV_TARGET) { #line 208 bool _474 = g_sldPasses >= 3; #line 208 if (_474) { #line 208 float _477 = 1.00000000e+00 / _1.x; #line 208 float _480 = 1.00000000e+00 / _1.y; #line 208 float2 _481 = float2(_477, _480); #line 208 float2 _482; #line 208 float2 _483; #line 208 float _484; #line 208 _482 = i.uv; #line 208 _483 = _481; #line 208 _484 = 3.00000000e+00; #line 208 float3 _487 = F__faux_kuwahara(_482, _483, _484); #line 208 color = _487; } else { #line 208 float4 _489 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 208 color = _489.xyz; } return; } #line 209 void F__PS_Paint_4( #line 209 in S__VSOut i, #line 209 out float3 color : SV_TARGET) { #line 209 bool _499 = g_sldPasses >= 4; #line 209 if (_499) { #line 209 float _502 = 1.00000000e+00 / _1.x; #line 209 float _505 = 1.00000000e+00 / _1.y; #line 209 float2 _506 = float2(_502, _505); #line 209 float2 _507; #line 209 float2 _508; #line 209 float _509; #line 209 _507 = i.uv; #line 209 _508 = _506; #line 209 _509 = 4.00000000e+00; #line 209 float3 _512 = F__faux_kuwahara(_507, _508, _509); #line 209 color = _512; } else { #line 209 float4 _514 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 209 color = _514.xyz; } return; } #line 210 void F__PS_Paint_5( #line 210 in S__VSOut i, #line 210 out float3 color : SV_TARGET) { #line 210 bool _524 = g_sldPasses >= 5; #line 210 if (_524) { #line 210 float _527 = 1.00000000e+00 / _1.x; #line 210 float _530 = 1.00000000e+00 / _1.y; #line 210 float2 _531 = float2(_527, _530); #line 210 float2 _532; #line 210 float2 _533; #line 210 float _534; #line 210 _532 = i.uv; #line 210 _533 = _531; #line 210 _534 = 5.00000000e+00; #line 210 float3 _537 = F__faux_kuwahara(_532, _533, _534); #line 210 color = _537; } else { #line 210 float4 _539 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 210 color = _539.xyz; } return; } #line 211 void F__PS_Paint_6( #line 211 in S__VSOut i, #line 211 out float3 color : SV_TARGET) { #line 211 bool _549 = g_sldPasses >= 6; #line 211 if (_549) { #line 211 float _552 = 1.00000000e+00 / _1.x; #line 211 float _555 = 1.00000000e+00 / _1.y; #line 211 float2 _556 = float2(_552, _555); #line 211 float2 _557; #line 211 float2 _558; #line 211 float _559; #line 211 _557 = i.uv; #line 211 _558 = _556; #line 211 _559 = 6.00000000e+00; #line 211 float3 _562 = F__faux_kuwahara(_557, _558, _559); #line 211 color = _562; } else { #line 211 float4 _564 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 211 color = _564.xyz; } return; } #line 212 void F__PS_Paint_7( #line 212 in S__VSOut i, #line 212 out float3 color : SV_TARGET) { #line 212 bool _574 = g_sldPasses >= 7; #line 212 if (_574) { #line 212 float _577 = 1.00000000e+00 / _1.x; #line 212 float _580 = 1.00000000e+00 / _1.y; #line 212 float2 _581 = float2(_577, _580); #line 212 float2 _582; #line 212 float2 _583; #line 212 float _584; #line 212 _582 = i.uv; #line 212 _583 = _581; #line 212 _584 = 7.00000000e+00; #line 212 float3 _587 = F__faux_kuwahara(_582, _583, _584); #line 212 color = _587; } else { #line 212 float4 _589 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 212 color = _589.xyz; } return; } #line 213 void F__PS_Paint_8( #line 213 in S__VSOut i, #line 213 out float3 color : SV_TARGET) { #line 213 bool _599 = g_sldPasses >= 8; #line 213 if (_599) { #line 213 float _602 = 1.00000000e+00 / _1.x; #line 213 float _605 = 1.00000000e+00 / _1.y; #line 213 float2 _606 = float2(_602, _605); #line 213 float2 _607; #line 213 float2 _608; #line 213 float _609; #line 213 _607 = i.uv; #line 213 _608 = _606; #line 213 _609 = 8.00000000e+00; #line 213 float3 _612 = F__faux_kuwahara(_607, _608, _609); #line 213 color = _612; } else { #line 213 float4 _614 = V__NV__ColorInput.t.Sample(V__NV__ColorInput.s, i.uv); #line 213 color = _614.xyz; } return; } #line 215 void F__PS_Paint_Post_1( #line 215 in S__VSOut i, #line 215 out float3 color : SV_TARGET) { #line 217 S__VSOut _620; #line 217 float _621; #line 217 _620 = i; #line 217 _621 = 1.00000000e+00; #line 217 float3 _623 = F__paint_filter(_620, _621); #line 217 color.xyz = _623; return; } #line 220 void F__PS_Paint_Post_2( #line 220 in S__VSOut i, #line 220 out float3 color : SV_TARGET) { #line 222 S__VSOut _628; #line 222 float _629; #line 222 _628 = i; #line 222 _629 = 2.00000000e+00; #line 222 float3 _631 = F__paint_filter(_628, _629); #line 222 color.xyz = _631; return; }