forked from eden-emu/eden
		
	renderer_vulkan/shader: Add helper GLSL shaders
These shaders are used to specify code that is not dynamically generated in the Vulkan backend. Instead of packing it inside the build system, it's manually built and copied to the C++ file to avoid adding unnecessary build time dependencies. quad_array should be dropped in the future since it can be emulated with a memory pool generated from the CPU.
This commit is contained in:
		
							parent
							
								
									2cd276c0d0
								
							
						
					
					
						commit
						1690b747d8
					
				
					 4 changed files with 122 additions and 0 deletions
				
			
		
							
								
								
									
										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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 ReinUsesLisp
						ReinUsesLisp