Vulkan fixes
This commit is contained in:
@@ -25,11 +25,15 @@ struct vert_out {
|
||||
|
||||
fun layer_invert_vert(input: vert_in): vert_out {
|
||||
var output: vert_out;
|
||||
|
||||
var cpos: float4 = constants.pos;
|
||||
var ctex: float4 = constants.tex;
|
||||
|
||||
output.pos = float4(input.pos, 0.0, 1.0);
|
||||
output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy;
|
||||
output.pos.xy = output.pos.xy * cpos.zw + cpos.xy;
|
||||
output.pos.xy = output.pos.xy * 2.0 - 1.0;
|
||||
output.pos.y = -output.pos.y;
|
||||
output.tex = input.pos * constants.tex.zw + constants.tex.xy;
|
||||
output.tex = input.pos * ctex.zw + ctex.xy;
|
||||
output.col = constants.col;
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -26,11 +26,15 @@ struct vert_out {
|
||||
|
||||
fun layer_view_vert(input: vert_in): vert_out {
|
||||
var output: vert_out;
|
||||
|
||||
var cpos: float4 = constants.pos;
|
||||
var ctex: float4 = constants.tex;
|
||||
|
||||
output.pos = float4(input.pos, 0.0, 1.0);
|
||||
output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy;
|
||||
output.pos.xy = output.pos.xy * cpos.zw + cpos.xy;
|
||||
output.pos.xy = output.pos.xy * 2.0 - 1.0;
|
||||
output.pos.y = -output.pos.y;
|
||||
output.tex = input.pos * constants.tex.zw + constants.tex.xy;
|
||||
output.tex = input.pos * ctex.zw + ctex.xy;
|
||||
output.col = constants.col;
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ fun bloom_downsample_pass_vert(input: vert_in): vert_out {
|
||||
return output;
|
||||
}
|
||||
|
||||
fun downsample_dual_filter(tex: tex2d, tex_coord: float2, texel_size: float2): float3 {
|
||||
fun downsample_dual_filter(tex_coord: float2, texel_size: float2): float3 {
|
||||
var delta: float3 = float3(texel_size.xy, texel_size.x) * float3(0.5, 0.5, -0.5);
|
||||
|
||||
var result: float3;
|
||||
@@ -47,14 +47,14 @@ fun downsample_dual_filter(tex: tex2d, tex_coord: float2, texel_size: float2): f
|
||||
|
||||
fun bloom_downsample_pass_frag(input: vert_out): float4 {
|
||||
var color: float4;
|
||||
color.rgb = downsample_dual_filter(tex, input.tex, constants.screen_size_inv);
|
||||
color.rgb = downsample_dual_filter(input.tex, constants.screen_size_inv);
|
||||
|
||||
if (constants.current_mip_level == 0) {
|
||||
var brightness: float = max(color.r, max(color.g, color.b));
|
||||
|
||||
var softening_curve: float = brightness - bloom_threshold + bloom_knee;
|
||||
softening_curve = clamp(softening_curve, 0.0, 2.0 * bloom_knee);
|
||||
softening_curve = softening_curve * softening_curve / (4 * bloom_knee + epsilon);
|
||||
softening_curve = softening_curve * softening_curve / (4.0 * bloom_knee + epsilon);
|
||||
|
||||
var contribution_factor: float = max(softening_curve, brightness - bloom_threshold);
|
||||
|
||||
|
||||
@@ -31,28 +31,28 @@ fun bloom_upsample_pass_vert(input: vert_in): vert_out {
|
||||
return output;
|
||||
}
|
||||
|
||||
fun upsample_dual_filter(tex: tex2d, tex_coord: float2, texel_size: float2): float3 {
|
||||
fun upsample_dual_filter(tex_coord: float2, texel_size: float2): float3 {
|
||||
var delta: float2 = texel_size * constants.sample_scale;
|
||||
|
||||
var result: float3;
|
||||
result = sample_lod(tex, sampler_linear, tex_coord + float2(-delta.x * 2.0, 0.0), 0.0).rgb;
|
||||
result += sample_lod(tex, sampler_linear, tex_coord + float2(-delta.x, delta.y), 0.0).rgb * 2.0;
|
||||
result += sample_lod(tex, sampler_linear, tex_coord + float2(0.0, delta.y * 2.0), 0.0).rgb;
|
||||
result += sample_lod(tex, sampler_linear, tex_coord + delta, 0.0).rgb * 2.0;
|
||||
result += sample_lod(tex, sampler_linear, tex_coord + delta, 0.0).rgb * 2.0;
|
||||
result += sample_lod(tex, sampler_linear, tex_coord + float2(delta.x * 2.0, 0.0), 0.0).rgb;
|
||||
result += sample_lod(tex, sampler_linear, tex_coord + float2(delta.x, -delta.y), 0.0).rgb * 2.0;
|
||||
result += sample_lod(tex, sampler_linear, tex_coord + float2(0.0, -delta.y * 2.0), 0.0).rgb;
|
||||
result += sample_lod(tex, sampler_linear, tex_coord - delta, 0.0).rgb * 2.0;
|
||||
result += sample_lod(tex, sampler_linear, tex_coord - delta, 0.0).rgb * 2.0;
|
||||
|
||||
return result * (1.0 / 12.0);
|
||||
}
|
||||
|
||||
fun bloom_upsample_pass_frag(input: vert_out): float4 {
|
||||
var color: float4;
|
||||
color.rgb = upsample_dual_filter(tex, input.tex, constants.screen_size_inv);
|
||||
color.rgb = upsample_dual_filter(input.tex, constants.screen_size_inv);
|
||||
|
||||
if (constants.current_mip_level == 0) {
|
||||
color.rgb = color.rgb * bloom_strength;
|
||||
color.rgb = color.rgb * float3(bloom_strength, bloom_strength, bloom_strength);
|
||||
}
|
||||
|
||||
color.a = 1.0;
|
||||
|
||||
@@ -38,7 +38,7 @@ fun tonemap_filmic(color: float3): float3 {
|
||||
x.x = max(0.0, color.x - 0.004);
|
||||
x.y = max(0.0, color.y - 0.004);
|
||||
x.z = max(0.0, color.z - 0.004);
|
||||
return (x * (6.2 * x + 0.5)) / (x * (6.2 * x + 1.7) + 0.06);
|
||||
return (x * (x * 6.2 + 0.5)) / (x * (x * 6.2 + 1.7) + 0.06);
|
||||
}
|
||||
|
||||
fun compositor_pass_frag(input: vert_out): float4 {
|
||||
@@ -47,13 +47,13 @@ fun compositor_pass_frag(input: vert_out): float4 {
|
||||
// Static grain
|
||||
var x: float = (input.tex.x + 4.0) * (input.tex.y + 4.0) * 10.0;
|
||||
var g: float = (((x % 13.0) + 1.0) * ((x % 123.0) + 1.0) % 0.01) - 0.005;
|
||||
color.rgb += float3(g, g, g) * constants.grain_strength;
|
||||
color.rgb = color.rgb + (float3(g, g, g) * constants.grain_strength);
|
||||
|
||||
color.rgb *= (1.0 - constants.vignette_strength) + constants.vignette_strength * pow(16.0 * input.tex.x * input.tex.y * (1.0 - input.tex.x) * (1.0 - input.tex.y), 0.2);
|
||||
color.rgb = color.rgb * ((1.0 - constants.vignette_strength) + constants.vignette_strength * pow(16.0 * input.tex.x * input.tex.y * (1.0 - input.tex.x) * (1.0 - input.tex.y), 0.2));
|
||||
|
||||
// Auto exposure
|
||||
// const float auto_exposure_strength = 1.0;
|
||||
// float expo = 2.0 - clamp(length(sample_lod(histogram, sampler_linear, float2(0.5, 0.5), 0.0).rgb), 0.0, 1.0);
|
||||
// const auto_exposure_strength: float = 1.0;
|
||||
// var expo: float = 2.0 - clamp(length(sample_lod(histogram, sampler_linear, float2(0.5, 0.5), 0.0).rgb), 0.0, 1.0);
|
||||
// color.rgb *= pow(expo, auto_exposure_strength * 2.0);
|
||||
|
||||
color.rgb = tonemap_filmic(color.rgb); // With gamma
|
||||
|
||||
@@ -60,7 +60,7 @@ fun deferred_light_vert(input: vert_in): vert_out {
|
||||
var v: float4 = float4(input.pos.xy, 1.0, 1.0);
|
||||
v = constants.invVP * v;
|
||||
v.xyz /= v.w;
|
||||
output.view_ray = float3(v.xyz - constants.eye);
|
||||
output.view_ray = v.xyz - constants.eye;
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -25,11 +25,15 @@ struct vert_out {
|
||||
|
||||
fun draw_image_vert(input: vert_in): vert_out {
|
||||
var output: vert_out;
|
||||
|
||||
var cpos: float4 = constants.pos;
|
||||
var ctex: float4 = constants.tex;
|
||||
|
||||
output.pos = float4(input.pos, 0.0, 1.0);
|
||||
output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy;
|
||||
output.pos.xy = output.pos.xy * cpos.zw + cpos.xy;
|
||||
output.pos.xy = output.pos.xy * 2.0 - 1.0;
|
||||
output.pos.y = -output.pos.y;
|
||||
output.tex = input.pos * constants.tex.zw + constants.tex.xy;
|
||||
output.tex = input.pos * ctex.zw + ctex.xy;
|
||||
output.col = constants.col;
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -17,8 +17,11 @@ struct vert_out {
|
||||
|
||||
fun draw_rect_vert(input: vert_in): vert_out {
|
||||
var output: vert_out;
|
||||
|
||||
var cpos: float4 = constants.pos;
|
||||
|
||||
output.pos = float4(input.pos, 0.0, 1.0);
|
||||
output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy;
|
||||
output.pos.xy = output.pos.xy * cpos.zw + cpos.xy;
|
||||
output.pos.xy = output.pos.xy * 2.0 - 1.0;
|
||||
output.pos.y = -output.pos.y;
|
||||
output.col = constants.col;
|
||||
|
||||
@@ -25,11 +25,15 @@ struct vert_out {
|
||||
|
||||
fun draw_text_vert(input: vert_in): vert_out {
|
||||
var output: vert_out;
|
||||
|
||||
var cpos: float4 = constants.pos;
|
||||
var ctex: float4 = constants.tex;
|
||||
|
||||
output.pos = float4(input.pos, 0.0, 1.0);
|
||||
output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy;
|
||||
output.pos.xy = output.pos.xy * cpos.zw + cpos.xy;
|
||||
output.pos.xy = output.pos.xy * 2.0 - 1.0;
|
||||
output.pos.y = -output.pos.y;
|
||||
output.tex = input.pos * constants.tex.zw + constants.tex.xy;
|
||||
output.tex = input.pos * ctex.zw + ctex.xy;
|
||||
output.col = constants.col;
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -25,11 +25,15 @@ struct vert_out {
|
||||
|
||||
fun layer_copy_vert(input: vert_in): vert_out {
|
||||
var output: vert_out;
|
||||
|
||||
var cpos: float4 = constants.pos;
|
||||
var ctex: float4 = constants.tex;
|
||||
|
||||
output.pos = float4(input.pos, 0.0, 1.0);
|
||||
output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy;
|
||||
output.pos.xy = output.pos.xy * cpos.zw + cpos.xy;
|
||||
output.pos.xy = output.pos.xy * 2.0 - 1.0;
|
||||
output.pos.y = -output.pos.y;
|
||||
output.tex = input.pos * constants.tex.zw + constants.tex.xy;
|
||||
output.tex = input.pos * ctex.zw + ctex.xy;
|
||||
output.col = constants.col;
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -25,11 +25,15 @@ struct vert_out {
|
||||
|
||||
fun layer_copy_bgra_vert(input: vert_in): vert_out {
|
||||
var output: vert_out;
|
||||
|
||||
var cpos: float4 = constants.pos;
|
||||
var ctex: float4 = constants.tex;
|
||||
|
||||
output.pos = float4(input.pos, 0.0, 1.0);
|
||||
output.pos.xy = output.pos.xy * constants.pos.zw + constants.pos.xy;
|
||||
output.pos.xy = output.pos.xy * cpos.zw + cpos.xy;
|
||||
output.pos.xy = output.pos.xy * 2.0 - 1.0;
|
||||
output.pos.y = -output.pos.y;
|
||||
output.tex = input.pos * constants.tex.zw + constants.tex.xy;
|
||||
output.tex = input.pos * ctex.zw + ctex.xy;
|
||||
output.col = constants.col;
|
||||
return output;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user