From fd0daa5ec716ef93e5e96ed6816e91f223987df7 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 25 Mar 2019 15:30:34 +0100 Subject: [PATCH] [dxvk] Optimize meta geometry shaders --- src/dxvk/shaders/dxvk_mipgen_geom.geom | 29 +++++++++++++------------ src/dxvk/shaders/dxvk_resolve_geom.geom | 25 ++++++++++----------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/dxvk/shaders/dxvk_mipgen_geom.geom b/src/dxvk/shaders/dxvk_mipgen_geom.geom index c7413a43..d81f4b19 100644 --- a/src/dxvk/shaders/dxvk_mipgen_geom.geom +++ b/src/dxvk/shaders/dxvk_mipgen_geom.geom @@ -1,25 +1,26 @@ #version 450 layout(points) in; -layout(triangle_strip, max_vertices = 4) out; +layout(triangle_strip, max_vertices = 3) out; layout(location = 0) in int i_instance[1]; layout(location = 0) out vec3 o_pos; -const vec4 g_vpos[4] = { - vec4(-1.0f, -1.0f, 0.0f, 1.0f), - vec4(-1.0f, 1.0f, 0.0f, 1.0f), - vec4( 1.0f, -1.0f, 0.0f, 1.0f), - vec4( 1.0f, 1.0f, 0.0f, 1.0f), -}; - void main() { - for (int i = 0; i < 4; i++) { - o_pos = vec3(0.5f + 0.5f * g_vpos[i].xy, float(i_instance[0])); - gl_Position = g_vpos[i]; - gl_Layer = i_instance[0]; - EmitVertex(); - } + gl_Position = vec4(-1.0f, 3.0f, 0.0f, 1.0f); + gl_Layer = i_instance[0]; + o_pos = vec3(0.0f, 2.0f, float(i_instance[0])); + EmitVertex(); + + gl_Position = vec4(-1.0f, -1.0f, 0.0f, 1.0f); + gl_Layer = i_instance[0]; + o_pos = vec3(0.0f, 0.0f, float(i_instance[0])); + EmitVertex(); + + gl_Position = vec4( 3.0f, -1.0f, 0.0f, 1.0f); + gl_Layer = i_instance[0]; + o_pos = vec3(2.0f, 0.0f, float(i_instance[0])); + EmitVertex(); EndPrimitive(); } \ No newline at end of file diff --git a/src/dxvk/shaders/dxvk_resolve_geom.geom b/src/dxvk/shaders/dxvk_resolve_geom.geom index 33a266c5..456d935d 100644 --- a/src/dxvk/shaders/dxvk_resolve_geom.geom +++ b/src/dxvk/shaders/dxvk_resolve_geom.geom @@ -1,23 +1,22 @@ #version 450 layout(points) in; -layout(triangle_strip, max_vertices = 4) out; +layout(triangle_strip, max_vertices = 3) out; layout(location = 0) in int i_instance[1]; -const vec4 g_vpos[4] = { - vec4(-1.0f, -1.0f, 0.0f, 1.0f), - vec4(-1.0f, 1.0f, 0.0f, 1.0f), - vec4( 1.0f, -1.0f, 0.0f, 1.0f), - vec4( 1.0f, 1.0f, 0.0f, 1.0f), -}; - void main() { - for (int i = 0; i < 4; i++) { - gl_Position = g_vpos[i]; - gl_Layer = i_instance[0]; - EmitVertex(); - } + gl_Position = vec4(-1.0f, 3.0f, 0.0f, 1.0f); + gl_Layer = i_instance[0]; + EmitVertex(); + + gl_Position = vec4(-1.0f, -1.0f, 0.0f, 1.0f); + gl_Layer = i_instance[0]; + EmitVertex(); + + gl_Position = vec4( 3.0f, -1.0f, 0.0f, 1.0f); + gl_Layer = i_instance[0]; + EmitVertex(); EndPrimitive(); } \ No newline at end of file