From 89516e2da232ba9247c393f000e5b64bd2584ab7 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 18 Jul 2019 14:48:54 +0200 Subject: [PATCH] [dxvk] Add meta copy shaders for depth-stencil formats --- src/dxvk/meson.build | 3 +++ .../shaders/dxvk_copy_depth_stencil_1d.frag | 20 +++++++++++++++++++ .../shaders/dxvk_copy_depth_stencil_2d.frag | 20 +++++++++++++++++++ .../shaders/dxvk_copy_depth_stencil_ms.frag | 20 +++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 src/dxvk/shaders/dxvk_copy_depth_stencil_1d.frag create mode 100644 src/dxvk/shaders/dxvk_copy_depth_stencil_2d.frag create mode 100644 src/dxvk/shaders/dxvk_copy_depth_stencil_ms.frag diff --git a/src/dxvk/meson.build b/src/dxvk/meson.build index 604434c2..706e0f3d 100644 --- a/src/dxvk/meson.build +++ b/src/dxvk/meson.build @@ -20,6 +20,9 @@ dxvk_shaders = files([ 'shaders/dxvk_copy_depth_1d.frag', 'shaders/dxvk_copy_depth_2d.frag', 'shaders/dxvk_copy_depth_ms.frag', + 'shaders/dxvk_copy_depth_stencil_1d.frag', + 'shaders/dxvk_copy_depth_stencil_2d.frag', + 'shaders/dxvk_copy_depth_stencil_ms.frag', 'shaders/dxvk_mipgen_vert.vert', 'shaders/dxvk_mipgen_geom.geom', diff --git a/src/dxvk/shaders/dxvk_copy_depth_stencil_1d.frag b/src/dxvk/shaders/dxvk_copy_depth_stencil_1d.frag new file mode 100644 index 00000000..e017145d --- /dev/null +++ b/src/dxvk/shaders/dxvk_copy_depth_stencil_1d.frag @@ -0,0 +1,20 @@ +#version 450 + +#extension GL_ARB_shader_stencil_export : enable + +layout(set = 0, binding = 0) +uniform sampler1DArray s_depth; + +layout(set = 0, binding = 1) +uniform usampler1DArray s_stencil; + +layout(push_constant) +uniform u_info_t { + ivec2 offset; +} u_info; + +void main() { + ivec2 coord = ivec2(gl_FragCoord.x + u_info.offset.x, gl_Layer); + gl_FragDepth = texelFetch(s_depth, coord, 0).r; + gl_FragStencilRefARB = int(texelFetch(s_stencil, coord, 0).r); +} \ No newline at end of file diff --git a/src/dxvk/shaders/dxvk_copy_depth_stencil_2d.frag b/src/dxvk/shaders/dxvk_copy_depth_stencil_2d.frag new file mode 100644 index 00000000..29e7d6b0 --- /dev/null +++ b/src/dxvk/shaders/dxvk_copy_depth_stencil_2d.frag @@ -0,0 +1,20 @@ +#version 450 + +#extension GL_ARB_shader_stencil_export : enable + +layout(set = 0, binding = 0) +uniform sampler2DArray s_depth; + +layout(set = 0, binding = 1) +uniform usampler2DArray s_stencil; + +layout(push_constant) +uniform u_info_t { + ivec2 offset; +} u_info; + +void main() { + ivec3 coord = ivec3(gl_FragCoord.xy + u_info.offset.xy, gl_Layer); + gl_FragDepth = texelFetch(s_depth, coord, 0).r; + gl_FragStencilRefARB = int(texelFetch(s_stencil, coord, 0).r); +} \ No newline at end of file diff --git a/src/dxvk/shaders/dxvk_copy_depth_stencil_ms.frag b/src/dxvk/shaders/dxvk_copy_depth_stencil_ms.frag new file mode 100644 index 00000000..dfb5f005 --- /dev/null +++ b/src/dxvk/shaders/dxvk_copy_depth_stencil_ms.frag @@ -0,0 +1,20 @@ +#version 450 + +#extension GL_ARB_shader_stencil_export : enable + +layout(set = 0, binding = 0) +uniform sampler2DMSArray s_depth; + +layout(set = 0, binding = 1) +uniform usampler2DMSArray s_stencil; + +layout(push_constant) +uniform u_info_t { + ivec2 offset; +} u_info; + +void main() { + ivec3 coord = ivec3(gl_FragCoord.xy + u_info.offset.xy, gl_Layer); + gl_FragDepth = texelFetch(s_depth, coord, gl_SampleID).r; + gl_FragStencilRefARB = int(texelFetch(s_stencil, coord, gl_SampleID).r); +} \ No newline at end of file