Merge pull request #3230 from ReinUsesLisp/vk-emu-shaders
renderer_vulkan/shader: Add helper GLSL shaders
This commit is contained in:
commit
aea978e037
4 changed files with 122 additions and 0 deletions
src/video_core/renderer_vulkan/shaders
24
src/video_core/renderer_vulkan/shaders/blit.frag
Normal file
24
src/video_core/renderer_vulkan/shaders/blit.frag
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
// Copyright 2019 yuzu Emulator Project
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Build instructions:
|
||||||
|
* $ glslangValidator -V $THIS_FILE -o output.spv
|
||||||
|
* $ spirv-opt -O --strip-debug output.spv -o optimized.spv
|
||||||
|
* $ xxd -i optimized.spv
|
||||||
|
*
|
||||||
|
* Then copy that bytecode to the C++ file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 460 core
|
||||||
|
|
||||||
|
layout (location = 0) in vec2 frag_tex_coord;
|
||||||
|
|
||||||
|
layout (location = 0) out vec4 color;
|
||||||
|
|
||||||
|
layout (binding = 1) uniform sampler2D color_texture;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
color = texture(color_texture, frag_tex_coord);
|
||||||
|
}
|
28
src/video_core/renderer_vulkan/shaders/blit.vert
Normal file
28
src/video_core/renderer_vulkan/shaders/blit.vert
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
// Copyright 2019 yuzu Emulator Project
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Build instructions:
|
||||||
|
* $ glslangValidator -V $THIS_FILE -o output.spv
|
||||||
|
* $ spirv-opt -O --strip-debug output.spv -o optimized.spv
|
||||||
|
* $ xxd -i optimized.spv
|
||||||
|
*
|
||||||
|
* Then copy that bytecode to the C++ file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 460 core
|
||||||
|
|
||||||
|
layout (location = 0) in vec2 vert_position;
|
||||||
|
layout (location = 1) in vec2 vert_tex_coord;
|
||||||
|
|
||||||
|
layout (location = 0) out vec2 frag_tex_coord;
|
||||||
|
|
||||||
|
layout (set = 0, binding = 0) uniform MatrixBlock {
|
||||||
|
mat4 modelview_matrix;
|
||||||
|
};
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_Position = modelview_matrix * vec4(vert_position, 0.0, 1.0);
|
||||||
|
frag_tex_coord = vert_tex_coord;
|
||||||
|
}
|
37
src/video_core/renderer_vulkan/shaders/quad_array.comp
Normal file
37
src/video_core/renderer_vulkan/shaders/quad_array.comp
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
// Copyright 2019 yuzu Emulator Project
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Build instructions:
|
||||||
|
* $ glslangValidator -V $THIS_FILE -o output.spv
|
||||||
|
* $ spirv-opt -O --strip-debug output.spv -o optimized.spv
|
||||||
|
* $ xxd -i optimized.spv
|
||||||
|
*
|
||||||
|
* Then copy that bytecode to the C++ file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 460 core
|
||||||
|
|
||||||
|
layout (local_size_x = 1024) in;
|
||||||
|
|
||||||
|
layout (std430, set = 0, binding = 0) buffer OutputBuffer {
|
||||||
|
uint output_indexes[];
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (push_constant) uniform PushConstants {
|
||||||
|
uint first;
|
||||||
|
};
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
uint primitive = gl_GlobalInvocationID.x;
|
||||||
|
if (primitive * 6 >= output_indexes.length()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint quad_map[6] = uint[](0, 1, 2, 0, 2, 3);
|
||||||
|
for (uint vertex = 0; vertex < 6; ++vertex) {
|
||||||
|
uint index = first + primitive * 4 + quad_map[vertex];
|
||||||
|
output_indexes[primitive * 6 + vertex] = index;
|
||||||
|
}
|
||||||
|
}
|
33
src/video_core/renderer_vulkan/shaders/uint8.comp
Normal file
33
src/video_core/renderer_vulkan/shaders/uint8.comp
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// Copyright 2019 yuzu Emulator Project
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Build instructions:
|
||||||
|
* $ glslangValidator -V $THIS_FILE -o output.spv
|
||||||
|
* $ spirv-opt -O --strip-debug output.spv -o optimized.spv
|
||||||
|
* $ xxd -i optimized.spv
|
||||||
|
*
|
||||||
|
* Then copy that bytecode to the C++ file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#version 460 core
|
||||||
|
#extension GL_EXT_shader_16bit_storage : require
|
||||||
|
#extension GL_EXT_shader_8bit_storage : require
|
||||||
|
|
||||||
|
layout (local_size_x = 1024) in;
|
||||||
|
|
||||||
|
layout (std430, set = 0, binding = 0) readonly buffer InputBuffer {
|
||||||
|
uint8_t input_indexes[];
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (std430, set = 0, binding = 1) writeonly buffer OutputBuffer {
|
||||||
|
uint16_t output_indexes[];
|
||||||
|
};
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
uint id = gl_GlobalInvocationID.x;
|
||||||
|
if (id < input_indexes.length()) {
|
||||||
|
output_indexes[id] = uint16_t(input_indexes[id]);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue