From 73aed239c356c4c573819eb6ee1e2d414d2d5579 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sun, 4 Dec 2022 15:07:11 -0300 Subject: Implement non-MS to MS copies with draws (#3958) * Implement non-MS to MS copies with draws, simplify MS to non-MS copies and supports any host sample count * Remove unused program --- .../Shaders/ColorDrawToMsFragmentShaderSource.frag | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Ryujinx.Graphics.Vulkan/Shaders/ColorDrawToMsFragmentShaderSource.frag (limited to 'Ryujinx.Graphics.Vulkan/Shaders/ColorDrawToMsFragmentShaderSource.frag') diff --git a/Ryujinx.Graphics.Vulkan/Shaders/ColorDrawToMsFragmentShaderSource.frag b/Ryujinx.Graphics.Vulkan/Shaders/ColorDrawToMsFragmentShaderSource.frag new file mode 100644 index 00000000..e9151c44 --- /dev/null +++ b/Ryujinx.Graphics.Vulkan/Shaders/ColorDrawToMsFragmentShaderSource.frag @@ -0,0 +1,27 @@ +#version 450 core + +layout (std140, binding = 0) uniform sample_counts_log2_in +{ + ivec4 sample_counts_log2; +}; + +layout (set = 2, binding = 0) uniform usampler2D src; + +layout (location = 0) out uvec4 colour; + +void main() +{ + int deltaX = sample_counts_log2.x - sample_counts_log2.z; + int deltaY = sample_counts_log2.y - sample_counts_log2.w; + int samplesInXLog2 = sample_counts_log2.z; + int samplesInYLog2 = sample_counts_log2.w; + int samplesInX = 1 << samplesInXLog2; + int samplesInY = 1 << samplesInYLog2; + + int sampleIndex = gl_SampleID; + + int inX = (int(gl_FragCoord.x) << sample_counts_log2.x) | ((sampleIndex & (samplesInX - 1)) << deltaX); + int inY = (int(gl_FragCoord.y) << sample_counts_log2.y) | ((sampleIndex >> samplesInXLog2) << deltaY); + + colour = texelFetch(src, ivec2(inX, inY), 0); +} \ No newline at end of file -- cgit v1.2.3