1 object Shader = 2 val font_vertex = "font.vert" 3 val font_fragment = "font.frag" 4 val font_rgba_vertex = "font_rgba.vert" 5 val font_rgba_fragment = "font_rgba.frag" 6 val color_vertex = "color.vert" 7 val color_fragment = "color.frag" 8 val bitmap_vertex = "bitmap.vert" 9 val bitmap_fragment = "bitmap.frag" 10 val local_fragment = "local.frag" 11 val default_vertex = "default.vert" 12 val default_fragment = "default.frag" 13 val depth_vertex = "depth.vert" 14 val depth_skinned_vertex = "depth_skinned.vert" 15 val depth_fragment = "depth.frag" 16 val tonemap_vertex = "tonemap.vert" 17 val tonemap_fragment = "tonemap.frag" 18 val blit_vertex = "blit.vert" 19 val blit_fragment = "blit.frag" 20 val resolve_depth = "resolve_depth.comp" 21 val default_fragment_xz = "default_xz.frag" 22 val default_fragment_xyz = "default_xyz.frag" 23 24 type ShaderStage = 25 val shader_stage : ShaderStageFlags 26 val spir_v : Array<u8> 27 28 type Shader @abstract = 29 val push_constant_size : u32 30 val push_constant_stages : ShaderStageFlags 31 val entry_point : CString 32 val metadata : Metadata 33 val create_info : PipelineShaderStageCreateInfo 34 let bytes : Array<u8> 35 36 fun destruct = 37 bytes.discard 38 39 typealias GetShader = String -> Shader 40 41 type VertexShader = 42 inherit Shader 43 44 val input_mask : u32 45 46 type FragmentShader = 47 inherit Shader 48 49 val output_mask : u32 50 51 type ComputeShader = 52 inherit Shader 53 54 val compute_local_size : [u32; 3] 55 56 let create (name : String 57 stage : ShaderStageFlags 58 bytes : Slice<u8>) = 59 let instance : Instance @auto 60 61 let shader_module_create_info = ShaderModuleCreateInfo 62 type = StructureType/ShaderModuleCreateInfo 63 next = null 64 flags = ShaderModuleCreateFlags@zero 65 code_size = bytes.size as usize 66 code = bytes.ptr as Ptr<u32> 67 68 let mut module = null 69 vk/create_shader_module instance.device shader_module_create_info@ptr 70 null module@mut_ptr 71 |> assert_success 72 73 set_name ObjectType/ShaderModule module.unwrap.as<u64> name 74 75 PipelineShaderStageCreateInfo 76 type = StructureType/PipelineShaderStageCreateInfo 77 next = null 78 flags = PipelineShaderStageCreateFlags@zero 79 =stage 80 =module 81 name = "main" 82 specialization_info = null 83 84 object ComputeShader = 85 def create (name : String 86 bytes : Array<u8> 87 metadata : Metadata) = 88 let create_info = create name ShaderStageFlags/Compute bytes.as_slice 89 90 ComputeShader push_constant_size = metadata.push_constant_size 91 push_constant_stages = metadata.push_constant_stages 92 compute_local_size = [8, 8, 1] 93 entry_point = create_info.name 94 =metadata =create_info =bytes 95 96 object VertexShader = 97 def create (name : String 98 bytes : Array<u8> 99 metadata : Metadata) = 100 let create_info = create name ShaderStageFlags/Vertex bytes.as_slice 101 102 VertexShader input_mask = metadata.vertex_input_mask 103 push_constant_size = metadata.push_constant_size 104 push_constant_stages = metadata.push_constant_stages 105 entry_point = create_info.name 106 =metadata =create_info =bytes 107 108 object FragmentShader = 109 def create (name : String 110 bytes : Array<u8> 111 metadata : Metadata) = 112 let create_info = create name ShaderStageFlags/Fragment bytes.as_slice 113 114 FragmentShader output_mask = metadata.fragment_output_mask 115 push_constant_size = metadata.push_constant_size 116 push_constant_stages = metadata.push_constant_stages 117 entry_point = create_info.name 118 =metadata =create_info =bytes 119