From 55a4c3dee6247e9dc971d632c607ff185ed28e35 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 26 Nov 2024 10:13:10 -0500 Subject: [PATCH] Updates for breaking changes (nov 7 Sokol pr) --- backend/sokol/backend_sokol.odin | 37 ++-- backend/sokol/blit_atlas.odin | 278 +++++++++++++------------- backend/sokol/blit_atlas.shdc.glsl | 6 +- backend/sokol/draw_text.odin | 292 +++++++++++++++------------- backend/sokol/draw_text.shdc.glsl | 6 +- backend/sokol/render_glyph.odin | 95 ++++----- examples/sokol_demo/sokol_demo.odin | 4 +- 7 files changed, 369 insertions(+), 349 deletions(-) diff --git a/backend/sokol/backend_sokol.odin b/backend/sokol/backend_sokol.odin index 00288c7..ecbdc3c 100644 --- a/backend/sokol/backend_sokol.odin +++ b/backend/sokol/backend_sokol.odin @@ -65,14 +65,14 @@ setup_gfx_objects :: proc( ctx : ^Context, ve_ctx : ^ve.Context, vert_cap, index screen_shader = gfx.make_shader(draw_text_shader_desc(backend) ) draw_list_vbuf = gfx.make_buffer( Buffer_Desciption { - size = size_of([4]f32) * vert_cap, + size = cast(uint)(size_of([4]f32) * vert_cap), usage = Buffer_Usage.STREAM, type = Buffer_Type.VERTEXBUFFER, }) assert( gfx.query_buffer_state( draw_list_vbuf) < Resource_State.FAILED, "Failed to make draw_list_vbuf" ) draw_list_ibuf = gfx.make_buffer( Buffer_Desciption { - size = size_of(u32) * index_cap, + size = cast(uint)(size_of(u32) * index_cap), usage = Buffer_Usage.STREAM, type = Buffer_Type.INDEXBUFFER, }) @@ -85,12 +85,12 @@ setup_gfx_objects :: proc( ctx : ^Context, ve_ctx : ^ve.Context, vert_cap, index vs_layout : Vertex_Layout_State { using vs_layout - attrs[ATTR_render_glyph_vs_v_position] = Vertex_Attribute_State { + attrs[ATTR_render_glyph_v_position] = Vertex_Attribute_State { format = Vertex_Format.FLOAT2, offset = 0, buffer_index = 0, } - attrs[ATTR_render_glyph_vs_v_texture] = Vertex_Attribute_State { + attrs[ATTR_render_glyph_v_texture] = Vertex_Attribute_State { format = Vertex_Format.FLOAT2, offset = size_of(ve.Vec2), buffer_index = 0, @@ -221,12 +221,12 @@ setup_gfx_objects :: proc( ctx : ^Context, ve_ctx : ^ve.Context, vert_cap, index vs_layout : Vertex_Layout_State { using vs_layout - attrs[ATTR_blit_atlas_vs_v_position] = Vertex_Attribute_State { + attrs[ATTR_blit_atlas_v_position] = Vertex_Attribute_State { format = Vertex_Format.FLOAT2, offset = 0, buffer_index = 0, } - attrs[ATTR_blit_atlas_vs_v_texture] = Vertex_Attribute_State { + attrs[ATTR_blit_atlas_v_texture] = Vertex_Attribute_State { format = Vertex_Format.FLOAT2, offset = size_of(ve.Vec2), buffer_index = 0, @@ -358,12 +358,12 @@ setup_gfx_objects :: proc( ctx : ^Context, ve_ctx : ^ve.Context, vert_cap, index vs_layout : Vertex_Layout_State { using vs_layout - attrs[ATTR_draw_text_vs_v_position] = Vertex_Attribute_State { + attrs[ATTR_draw_text_v_position] = Vertex_Attribute_State { format = Vertex_Format.FLOAT2, offset = 0, buffer_index = 0, } - attrs[ATTR_draw_text_vs_v_texture] = Vertex_Attribute_State { + attrs[ATTR_draw_text_v_texture] = Vertex_Attribute_State { format = Vertex_Format.FLOAT2, offset = size_of(ve.Vec2), buffer_index = 0, @@ -456,8 +456,8 @@ render_text_layer :: proc( screen_extent : ve.Vec2, ve_ctx : ^ve.Context, ctx : vbuf_layer_slice, ibuf_layer_slice, calls_layer_slice := ve.get_draw_list_layer( ve_ctx, optimize_before_returning = true ) - vbuf_ve_range := Range{ raw_data(vbuf_layer_slice), cast(u64) len(vbuf_layer_slice) * size_of(ve.Vertex) } - ibuf_ve_range := Range{ raw_data(ibuf_layer_slice), cast(u64) len(ibuf_layer_slice) * size_of(u32) } + vbuf_ve_range := Range{ raw_data(vbuf_layer_slice), cast(uint) len(vbuf_layer_slice) * size_of(ve.Vertex) } + ibuf_ve_range := Range{ raw_data(ibuf_layer_slice), cast(uint) len(ibuf_layer_slice) * size_of(u32) } gfx.append_buffer( draw_list_vbuf, vbuf_ve_range ) gfx.append_buffer( draw_list_ibuf, ibuf_ve_range ) @@ -508,7 +508,6 @@ render_text_layer :: proc( screen_extent : ve.Vec2, ve_ctx : ^ve.Context, ctx : }, index_buffer = draw_list_ibuf, index_buffer_offset = 0, - fs = {}, } gfx.apply_bindings( bindings ) @@ -536,7 +535,7 @@ render_text_layer :: proc( screen_extent : ve.Vec2, ve_ctx : ^ve.Context, ctx : gfx.apply_pipeline( atlas_pipeline ) fs_uniform := Blit_Atlas_Fs_Params { region = cast(i32) draw_call.region } - gfx.apply_uniforms( Shader_Stage.FS, SLOT_blit_atlas_fs_params, Range { & fs_uniform, size_of(Blit_Atlas_Fs_Params) }) + gfx.apply_uniforms( UB_blit_atlas_fs_params, Range { & fs_uniform, size_of(Blit_Atlas_Fs_Params) }) gfx.apply_bindings(Bindings { vertex_buffers = { @@ -547,10 +546,8 @@ render_text_layer :: proc( screen_extent : ve.Vec2, ve_ctx : ^ve.Context, ctx : }, index_buffer = draw_list_ibuf, index_buffer_offset = 0, - fs = { - images = { SLOT_blit_atlas_src_texture = glyph_rt_color, }, - samplers = { SLOT_blit_atlas_src_sampler = glyph_rt_sampler, }, - }, + images = { IMG_blit_atlas_src_texture = glyph_rt_color, }, + samplers = { SMP_blit_atlas_src_sampler = glyph_rt_sampler, }, }) // 3. Use the atlas to then render the text. @@ -583,7 +580,7 @@ render_text_layer :: proc( screen_extent : ve.Vec2, ve_ctx : ^ve.Context, ctx : src_rt = glyph_rt_color src_sampler = glyph_rt_sampler } - gfx.apply_uniforms( Shader_Stage.FS, SLOT_draw_text_fs_params, Range { & fs_target_uniform, size_of(Draw_Text_Fs_Params) }) + gfx.apply_uniforms( UB_draw_text_fs_params, Range { & fs_target_uniform, size_of(Draw_Text_Fs_Params) }) gfx.apply_bindings(Bindings { vertex_buffers = { @@ -594,10 +591,8 @@ render_text_layer :: proc( screen_extent : ve.Vec2, ve_ctx : ^ve.Context, ctx : }, index_buffer = draw_list_ibuf, index_buffer_offset = 0, - fs = { - images = { SLOT_draw_text_src_texture = src_rt, }, - samplers = { SLOT_draw_text_src_sampler = src_sampler, }, - }, + images = { IMG_draw_text_src_texture = src_rt, }, + samplers = { SMP_draw_text_src_sampler = src_sampler, }, }) } diff --git a/backend/sokol/blit_atlas.odin b/backend/sokol/blit_atlas.odin index 6c63e98..42a8cc5 100644 --- a/backend/sokol/blit_atlas.odin +++ b/backend/sokol/blit_atlas.odin @@ -12,31 +12,29 @@ import sg "thirdparty:sokol/gfx" ========= Shader program: 'blit_atlas': Get shader desc: blit_atlas_shader_desc(sg.query_backend()) - Vertex shader: blit_atlas_vs - Attributes: - ATTR_blit_atlas_vs_v_position => 0 - ATTR_blit_atlas_vs_v_texture => 1 - Fragment shader: blit_atlas_fs - Uniform block 'blit_atlas_fs_params': - Odin struct: Blit_Atlas_Fs_Params - Bind slot: SLOT_blit_atlas_fs_params => 0 - Image 'blit_atlas_src_texture': - Image type: ._2D - Sample type: .FLOAT - Multisampled: false - Bind slot: SLOT_blit_atlas_src_texture => 0 - Sampler 'blit_atlas_src_sampler': - Type: .FILTERING - Bind slot: SLOT_blit_atlas_src_sampler => 0 - Image Sampler Pair 'blit_atlas_src_texture_blit_atlas_src_sampler': - Image: blit_atlas_src_texture - Sampler: blit_atlas_src_sampler + Vertex Shader: blit_atlas_vs + Fragment Shader: blit_atlas_fs + Attributes: + ATTR_blit_atlas_v_position => 0 + ATTR_blit_atlas_v_texture => 1 + Bindings: + Uniform block 'blit_atlas_fs_params': + Odin struct: Blit_Atlas_Fs_Params + Bind slot: UB_blit_atlas_fs_params => 0 + Image 'blit_atlas_src_texture': + Image type: ._2D + Sample type: .FLOAT + Multisampled: false + Bind slot: IMG_blit_atlas_src_texture => 0 + Sampler 'blit_atlas_src_sampler': + Type: .FILTERING + Bind slot: SMP_blit_atlas_src_sampler => 0 */ -ATTR_blit_atlas_vs_v_position :: 0 -ATTR_blit_atlas_vs_v_texture :: 1 -SLOT_blit_atlas_fs_params :: 0 -SLOT_blit_atlas_src_texture :: 0 -SLOT_blit_atlas_src_sampler :: 0 +ATTR_blit_atlas_v_position :: 0 +ATTR_blit_atlas_v_texture :: 1 +UB_blit_atlas_fs_params :: 0 +IMG_blit_atlas_src_texture :: 0 +SMP_blit_atlas_src_sampler :: 0 Blit_Atlas_Fs_Params :: struct #align(16) { using _: struct #packed { region: i32, @@ -57,7 +55,7 @@ Blit_Atlas_Fs_Params :: struct #align(16) { } */ -@(private) +@(private="file") blit_atlas_vs_source_glsl410 := [235]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, @@ -129,7 +127,7 @@ blit_atlas_vs_source_glsl410 := [235]u8 { } */ -@(private) +@(private="file") blit_atlas_fs_source_glsl410 := [1700]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x69,0x76,0x65,0x63,0x34,0x20,0x62,0x6c,0x69,0x74, @@ -253,7 +251,7 @@ blit_atlas_fs_source_glsl410 := [1700]u8 { } */ -@(private) +@(private="file") blit_atlas_vs_source_glsl300es := [217]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61, @@ -326,7 +324,7 @@ blit_atlas_vs_source_glsl300es := [217]u8 { } */ -@(private) +@(private="file") blit_atlas_fs_source_glsl300es := [1806]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d, @@ -477,7 +475,7 @@ blit_atlas_fs_source_glsl300es := [1806]u8 { return stage_output; } */ -@(private) +@(private="file") blit_atlas_vs_source_hlsl4 := [705]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c, 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69, @@ -600,7 +598,7 @@ blit_atlas_vs_source_hlsl4 := [705]u8 { return stage_output; } */ -@(private) +@(private="file") blit_atlas_fs_source_hlsl4 := [2107]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x62,0x6c,0x69,0x74,0x5f,0x61,0x74,0x6c, 0x61,0x73,0x5f,0x66,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x20,0x3a,0x20,0x72, @@ -762,7 +760,7 @@ blit_atlas_fs_source_hlsl4 := [2107]u8 { } */ -@(private) +@(private="file") blit_atlas_vs_source_metal_macos := [473]u8 { 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, @@ -866,7 +864,7 @@ blit_atlas_vs_source_metal_macos := [473]u8 { } */ -@(private) +@(private="file") blit_atlas_fs_source_metal_macos := [2373]u8 { 0x23,0x70,0x72,0x61,0x67,0x6d,0x61,0x20,0x63,0x6c,0x61,0x6e,0x67,0x20,0x64,0x69, 0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x20,0x69,0x67,0x6e,0x6f,0x72,0x65,0x64, @@ -1054,7 +1052,7 @@ blit_atlas_fs_source_metal_macos := [2373]u8 { } */ -@(private) +@(private="file") blit_atlas_vs_source_wgsl := [698]u8 { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, @@ -1109,11 +1107,11 @@ blit_atlas_vs_source_wgsl := [698]u8 { region : i32, } - @group(1) @binding(48) var blit_atlas_src_texture : texture_2d; + @group(1) @binding(64) var blit_atlas_src_texture : texture_2d; - @group(1) @binding(64) var blit_atlas_src_sampler : sampler; + @group(1) @binding(80) var blit_atlas_src_sampler : sampler; - @group(0) @binding(4) var x_88 : blit_atlas_fs_params; + @group(0) @binding(8) var x_88 : blit_atlas_fs_params; var uv_1 : vec2f; @@ -1219,7 +1217,7 @@ blit_atlas_vs_source_wgsl := [698]u8 { } */ -@(private) +@(private="file") blit_atlas_fs_source_wgsl := [3640]u8 { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, @@ -1229,15 +1227,15 @@ blit_atlas_fs_source_wgsl := [3640]u8 { 0x73,0x65,0x74,0x28,0x30,0x29,0x20,0x2a,0x2f,0x0a,0x20,0x20,0x72,0x65,0x67,0x69, 0x6f,0x6e,0x20,0x3a,0x20,0x69,0x33,0x32,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,0x67,0x72, 0x6f,0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28, - 0x34,0x38,0x29,0x20,0x76,0x61,0x72,0x20,0x62,0x6c,0x69,0x74,0x5f,0x61,0x74,0x6c, + 0x36,0x34,0x29,0x20,0x76,0x61,0x72,0x20,0x62,0x6c,0x69,0x74,0x5f,0x61,0x74,0x6c, 0x61,0x73,0x5f,0x73,0x72,0x63,0x5f,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x20,0x3a, 0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x5f,0x32,0x64,0x3c,0x66,0x33,0x32,0x3e, 0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69, - 0x6e,0x64,0x69,0x6e,0x67,0x28,0x36,0x34,0x29,0x20,0x76,0x61,0x72,0x20,0x62,0x6c, + 0x6e,0x64,0x69,0x6e,0x67,0x28,0x38,0x30,0x29,0x20,0x76,0x61,0x72,0x20,0x62,0x6c, 0x69,0x74,0x5f,0x61,0x74,0x6c,0x61,0x73,0x5f,0x73,0x72,0x63,0x5f,0x73,0x61,0x6d, 0x70,0x6c,0x65,0x72,0x20,0x3a,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x3b,0x0a, 0x0a,0x40,0x67,0x72,0x6f,0x75,0x70,0x28,0x30,0x29,0x20,0x40,0x62,0x69,0x6e,0x64, - 0x69,0x6e,0x67,0x28,0x34,0x29,0x20,0x76,0x61,0x72,0x3c,0x75,0x6e,0x69,0x66,0x6f, + 0x69,0x6e,0x67,0x28,0x38,0x29,0x20,0x76,0x61,0x72,0x3c,0x75,0x6e,0x69,0x66,0x6f, 0x72,0x6d,0x3e,0x20,0x78,0x5f,0x38,0x38,0x20,0x3a,0x20,0x62,0x6c,0x69,0x74,0x5f, 0x61,0x74,0x6c,0x61,0x73,0x5f,0x66,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x3b, 0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x75, @@ -1455,103 +1453,117 @@ blit_atlas_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.label = "blit_atlas_shader" #partial switch backend { case .GLCORE: - desc.attrs[0].name = "v_position" - desc.attrs[1].name = "v_texture" - desc.vs.source = transmute(cstring)&blit_atlas_vs_source_glsl410 - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&blit_atlas_fs_source_glsl410 - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 16 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.uniform_blocks[0].uniforms[0].name = "blit_atlas_fs_params" - desc.fs.uniform_blocks[0].uniforms[0].type = .INT4 - desc.fs.uniform_blocks[0].uniforms[0].array_count = 1 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[0].glsl_name = "blit_atlas_src_texture_blit_atlas_src_sampler" + desc.vertex_func.source = transmute(cstring)&blit_atlas_vs_source_glsl410 + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&blit_atlas_fs_source_glsl410 + desc.fragment_func.entry = "main" + desc.attrs[0].glsl_name = "v_position" + desc.attrs[1].glsl_name = "v_texture" + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 16 + desc.uniform_blocks[0].glsl_uniforms[0].type = .INT4 + desc.uniform_blocks[0].glsl_uniforms[0].array_count = 1 + desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "blit_atlas_fs_params" + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 + desc.image_sampler_pairs[0].glsl_name = "blit_atlas_src_texture_blit_atlas_src_sampler" case .GLES3: - desc.attrs[0].name = "v_position" - desc.attrs[1].name = "v_texture" - desc.vs.source = transmute(cstring)&blit_atlas_vs_source_glsl300es - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&blit_atlas_fs_source_glsl300es - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 16 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.uniform_blocks[0].uniforms[0].name = "blit_atlas_fs_params" - desc.fs.uniform_blocks[0].uniforms[0].type = .INT4 - desc.fs.uniform_blocks[0].uniforms[0].array_count = 1 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[0].glsl_name = "blit_atlas_src_texture_blit_atlas_src_sampler" + desc.vertex_func.source = transmute(cstring)&blit_atlas_vs_source_glsl300es + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&blit_atlas_fs_source_glsl300es + desc.fragment_func.entry = "main" + desc.attrs[0].glsl_name = "v_position" + desc.attrs[1].glsl_name = "v_texture" + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 16 + desc.uniform_blocks[0].glsl_uniforms[0].type = .INT4 + desc.uniform_blocks[0].glsl_uniforms[0].array_count = 1 + desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "blit_atlas_fs_params" + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 + desc.image_sampler_pairs[0].glsl_name = "blit_atlas_src_texture_blit_atlas_src_sampler" case .D3D11: - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&blit_atlas_vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&blit_atlas_fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 16 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.vertex_func.source = transmute(cstring)&blit_atlas_vs_source_hlsl4 + desc.vertex_func.d3d11_target = "vs_4_0" + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&blit_atlas_fs_source_hlsl4 + desc.fragment_func.d3d11_target = "ps_4_0" + desc.fragment_func.entry = "main" + desc.attrs[0].hlsl_sem_name = "TEXCOORD" + desc.attrs[0].hlsl_sem_index = 0 + desc.attrs[1].hlsl_sem_name = "TEXCOORD" + desc.attrs[1].hlsl_sem_index = 1 + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 16 + desc.uniform_blocks[0].hlsl_register_b_n = 0 + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.images[0].hlsl_register_t_n = 0 + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.samplers[0].hlsl_register_s_n = 0 + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 case .METAL_MACOS: - desc.vs.source = transmute(cstring)&blit_atlas_vs_source_metal_macos - desc.vs.entry = "main0" - desc.fs.source = transmute(cstring)&blit_atlas_fs_source_metal_macos - desc.fs.entry = "main0" - desc.fs.uniform_blocks[0].size = 16 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.vertex_func.source = transmute(cstring)&blit_atlas_vs_source_metal_macos + desc.vertex_func.entry = "main0" + desc.fragment_func.source = transmute(cstring)&blit_atlas_fs_source_metal_macos + desc.fragment_func.entry = "main0" + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 16 + desc.uniform_blocks[0].msl_buffer_n = 0 + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.images[0].msl_texture_n = 0 + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.samplers[0].msl_sampler_n = 0 + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 case .WGPU: - desc.vs.source = transmute(cstring)&blit_atlas_vs_source_wgsl - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&blit_atlas_fs_source_wgsl - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 16 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.vertex_func.source = transmute(cstring)&blit_atlas_vs_source_wgsl + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&blit_atlas_fs_source_wgsl + desc.fragment_func.entry = "main" + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 16 + desc.uniform_blocks[0].wgsl_group0_binding_n = 8 + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.images[0].wgsl_group1_binding_n = 64 + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.samplers[0].wgsl_group1_binding_n = 80 + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 } return desc } diff --git a/backend/sokol/blit_atlas.shdc.glsl b/backend/sokol/blit_atlas.shdc.glsl index e6af42b..de64c33 100644 --- a/backend/sokol/blit_atlas.shdc.glsl +++ b/backend/sokol/blit_atlas.shdc.glsl @@ -11,10 +11,10 @@ in vec2 uv; out vec4 frag_color; -uniform texture2D blit_atlas_src_texture; -uniform sampler blit_atlas_src_sampler; +layout(binding = 0) uniform texture2D blit_atlas_src_texture; +layout(binding = 0) uniform sampler blit_atlas_src_sampler; -uniform blit_atlas_fs_params { +layout(binding = 0) uniform blit_atlas_fs_params { int region; }; diff --git a/backend/sokol/draw_text.odin b/backend/sokol/draw_text.odin index 0d475be..285e2fc 100644 --- a/backend/sokol/draw_text.odin +++ b/backend/sokol/draw_text.odin @@ -12,31 +12,29 @@ import sg "thirdparty:sokol/gfx" ========= Shader program: 'draw_text': Get shader desc: draw_text_shader_desc(sg.query_backend()) - Vertex shader: draw_text_vs - Attributes: - ATTR_draw_text_vs_v_position => 0 - ATTR_draw_text_vs_v_texture => 1 - Fragment shader: draw_text_fs - Uniform block 'draw_text_fs_params': - Odin struct: Draw_Text_Fs_Params - Bind slot: SLOT_draw_text_fs_params => 0 - Image 'draw_text_src_texture': - Image type: ._2D - Sample type: .FLOAT - Multisampled: false - Bind slot: SLOT_draw_text_src_texture => 0 - Sampler 'draw_text_src_sampler': - Type: .FILTERING - Bind slot: SLOT_draw_text_src_sampler => 0 - Image Sampler Pair 'draw_text_src_texture_draw_text_src_sampler': - Image: draw_text_src_texture - Sampler: draw_text_src_sampler + Vertex Shader: draw_text_vs + Fragment Shader: draw_text_fs + Attributes: + ATTR_draw_text_v_position => 0 + ATTR_draw_text_v_texture => 1 + Bindings: + Uniform block 'draw_text_fs_params': + Odin struct: Draw_Text_Fs_Params + Bind slot: UB_draw_text_fs_params => 0 + Image 'draw_text_src_texture': + Image type: ._2D + Sample type: .FLOAT + Multisampled: false + Bind slot: IMG_draw_text_src_texture => 0 + Sampler 'draw_text_src_sampler': + Type: .FILTERING + Bind slot: SMP_draw_text_src_sampler => 0 */ -ATTR_draw_text_vs_v_position :: 0 -ATTR_draw_text_vs_v_texture :: 1 -SLOT_draw_text_fs_params :: 0 -SLOT_draw_text_src_texture :: 0 -SLOT_draw_text_src_sampler :: 0 +ATTR_draw_text_v_position :: 0 +ATTR_draw_text_v_texture :: 1 +UB_draw_text_fs_params :: 0 +IMG_draw_text_src_texture :: 0 +SMP_draw_text_src_sampler :: 0 Draw_Text_Fs_Params :: struct #align(16) { using _: struct #packed { down_sample: i32, @@ -58,7 +56,7 @@ Draw_Text_Fs_Params :: struct #align(16) { } */ -@(private) +@(private="file") draw_text_vs_source_glsl410 := [255]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, @@ -104,7 +102,7 @@ draw_text_vs_source_glsl410 := [255]u8 { } */ -@(private) +@(private="file") draw_text_fs_source_glsl410 := [882]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x73,0x74, 0x72,0x75,0x63,0x74,0x20,0x64,0x72,0x61,0x77,0x5f,0x74,0x65,0x78,0x74,0x5f,0x66, @@ -177,7 +175,7 @@ draw_text_fs_source_glsl410 := [882]u8 { } */ -@(private) +@(private="file") draw_text_vs_source_glsl300es := [237]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61, @@ -224,7 +222,7 @@ draw_text_vs_source_glsl300es := [237]u8 { } */ -@(private) +@(private="file") draw_text_fs_source_glsl300es := [940]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d, @@ -321,7 +319,7 @@ draw_text_fs_source_glsl300es := [940]u8 { return stage_output; } */ -@(private) +@(private="file") draw_text_vs_source_hlsl4 := [724]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c, 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69, @@ -412,7 +410,7 @@ draw_text_vs_source_hlsl4 := [724]u8 { return stage_output; } */ -@(private) +@(private="file") draw_text_fs_source_hlsl4 := [1257]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x64,0x72,0x61,0x77,0x5f,0x74,0x65,0x78, 0x74,0x5f,0x66,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x20,0x3a,0x20,0x72,0x65, @@ -521,7 +519,7 @@ draw_text_fs_source_hlsl4 := [1257]u8 { } */ -@(private) +@(private="file") draw_text_vs_source_metal_macos := [495]u8 { 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, @@ -590,7 +588,7 @@ draw_text_vs_source_metal_macos := [495]u8 { } */ -@(private) +@(private="file") draw_text_fs_source_metal_macos := [1141]u8 { 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, @@ -702,7 +700,7 @@ draw_text_fs_source_metal_macos := [1141]u8 { } */ -@(private) +@(private="file") draw_text_vs_source_wgsl := [756]u8 { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, @@ -763,13 +761,13 @@ draw_text_vs_source_wgsl := [756]u8 { colour : vec4f, } - @group(1) @binding(48) var draw_text_src_texture : texture_2d; + @group(1) @binding(64) var draw_text_src_texture : texture_2d; - @group(1) @binding(64) var draw_text_src_sampler : sampler; + @group(1) @binding(80) var draw_text_src_sampler : sampler; var uv : vec2f; - @group(0) @binding(4) var x_31 : draw_text_fs_params; + @group(0) @binding(8) var x_31 : draw_text_fs_params; var frag_color : vec4f; @@ -811,7 +809,7 @@ draw_text_vs_source_wgsl := [756]u8 { } */ -@(private) +@(private="file") draw_text_fs_source_wgsl := [1772]u8 { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, @@ -823,17 +821,17 @@ draw_text_fs_source_wgsl := [1772]u8 { 0x2f,0x2a,0x20,0x40,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x31,0x36,0x29,0x20,0x2a, 0x2f,0x0a,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x75,0x72,0x20,0x3a,0x20,0x76,0x65,0x63, 0x34,0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,0x70,0x28,0x31,0x29, - 0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x34,0x38,0x29,0x20,0x76,0x61, + 0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x36,0x34,0x29,0x20,0x76,0x61, 0x72,0x20,0x64,0x72,0x61,0x77,0x5f,0x74,0x65,0x78,0x74,0x5f,0x73,0x72,0x63,0x5f, 0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x20,0x3a,0x20,0x74,0x65,0x78,0x74,0x75,0x72, 0x65,0x5f,0x32,0x64,0x3c,0x66,0x33,0x32,0x3e,0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f, - 0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x36, - 0x34,0x29,0x20,0x76,0x61,0x72,0x20,0x64,0x72,0x61,0x77,0x5f,0x74,0x65,0x78,0x74, + 0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x38, + 0x30,0x29,0x20,0x76,0x61,0x72,0x20,0x64,0x72,0x61,0x77,0x5f,0x74,0x65,0x78,0x74, 0x5f,0x73,0x72,0x63,0x5f,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x20,0x3a,0x20,0x73, 0x61,0x6d,0x70,0x6c,0x65,0x72,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69, 0x76,0x61,0x74,0x65,0x3e,0x20,0x75,0x76,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66, 0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,0x70,0x28,0x30,0x29,0x20,0x40,0x62,0x69, - 0x6e,0x64,0x69,0x6e,0x67,0x28,0x34,0x29,0x20,0x76,0x61,0x72,0x3c,0x75,0x6e,0x69, + 0x6e,0x64,0x69,0x6e,0x67,0x28,0x38,0x29,0x20,0x76,0x61,0x72,0x3c,0x75,0x6e,0x69, 0x66,0x6f,0x72,0x6d,0x3e,0x20,0x78,0x5f,0x33,0x31,0x20,0x3a,0x20,0x64,0x72,0x61, 0x77,0x5f,0x74,0x65,0x78,0x74,0x5f,0x66,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, 0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20, @@ -930,109 +928,123 @@ draw_text_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.label = "draw_text_shader" #partial switch backend { case .GLCORE: - desc.attrs[0].name = "v_position" - desc.attrs[1].name = "v_texture" - desc.vs.source = transmute(cstring)&draw_text_vs_source_glsl410 - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&draw_text_fs_source_glsl410 - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 32 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.uniform_blocks[0].uniforms[0].name = "_31.down_sample" - desc.fs.uniform_blocks[0].uniforms[0].type = .INT - desc.fs.uniform_blocks[0].uniforms[0].array_count = 0 - desc.fs.uniform_blocks[0].uniforms[1].name = "_31.colour" - desc.fs.uniform_blocks[0].uniforms[1].type = .FLOAT4 - desc.fs.uniform_blocks[0].uniforms[1].array_count = 0 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[0].glsl_name = "draw_text_src_texture_draw_text_src_sampler" + desc.vertex_func.source = transmute(cstring)&draw_text_vs_source_glsl410 + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&draw_text_fs_source_glsl410 + desc.fragment_func.entry = "main" + desc.attrs[0].glsl_name = "v_position" + desc.attrs[1].glsl_name = "v_texture" + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 32 + desc.uniform_blocks[0].glsl_uniforms[0].type = .INT + desc.uniform_blocks[0].glsl_uniforms[0].array_count = 0 + desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "_31.down_sample" + desc.uniform_blocks[0].glsl_uniforms[1].type = .FLOAT4 + desc.uniform_blocks[0].glsl_uniforms[1].array_count = 0 + desc.uniform_blocks[0].glsl_uniforms[1].glsl_name = "_31.colour" + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 + desc.image_sampler_pairs[0].glsl_name = "draw_text_src_texture_draw_text_src_sampler" case .GLES3: - desc.attrs[0].name = "v_position" - desc.attrs[1].name = "v_texture" - desc.vs.source = transmute(cstring)&draw_text_vs_source_glsl300es - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&draw_text_fs_source_glsl300es - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 32 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.uniform_blocks[0].uniforms[0].name = "_31.down_sample" - desc.fs.uniform_blocks[0].uniforms[0].type = .INT - desc.fs.uniform_blocks[0].uniforms[0].array_count = 0 - desc.fs.uniform_blocks[0].uniforms[1].name = "_31.colour" - desc.fs.uniform_blocks[0].uniforms[1].type = .FLOAT4 - desc.fs.uniform_blocks[0].uniforms[1].array_count = 0 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[0].glsl_name = "draw_text_src_texture_draw_text_src_sampler" + desc.vertex_func.source = transmute(cstring)&draw_text_vs_source_glsl300es + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&draw_text_fs_source_glsl300es + desc.fragment_func.entry = "main" + desc.attrs[0].glsl_name = "v_position" + desc.attrs[1].glsl_name = "v_texture" + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 32 + desc.uniform_blocks[0].glsl_uniforms[0].type = .INT + desc.uniform_blocks[0].glsl_uniforms[0].array_count = 0 + desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "_31.down_sample" + desc.uniform_blocks[0].glsl_uniforms[1].type = .FLOAT4 + desc.uniform_blocks[0].glsl_uniforms[1].array_count = 0 + desc.uniform_blocks[0].glsl_uniforms[1].glsl_name = "_31.colour" + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 + desc.image_sampler_pairs[0].glsl_name = "draw_text_src_texture_draw_text_src_sampler" case .D3D11: - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&draw_text_vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&draw_text_fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 32 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.vertex_func.source = transmute(cstring)&draw_text_vs_source_hlsl4 + desc.vertex_func.d3d11_target = "vs_4_0" + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&draw_text_fs_source_hlsl4 + desc.fragment_func.d3d11_target = "ps_4_0" + desc.fragment_func.entry = "main" + desc.attrs[0].hlsl_sem_name = "TEXCOORD" + desc.attrs[0].hlsl_sem_index = 0 + desc.attrs[1].hlsl_sem_name = "TEXCOORD" + desc.attrs[1].hlsl_sem_index = 1 + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 32 + desc.uniform_blocks[0].hlsl_register_b_n = 0 + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.images[0].hlsl_register_t_n = 0 + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.samplers[0].hlsl_register_s_n = 0 + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 case .METAL_MACOS: - desc.vs.source = transmute(cstring)&draw_text_vs_source_metal_macos - desc.vs.entry = "main0" - desc.fs.source = transmute(cstring)&draw_text_fs_source_metal_macos - desc.fs.entry = "main0" - desc.fs.uniform_blocks[0].size = 32 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.vertex_func.source = transmute(cstring)&draw_text_vs_source_metal_macos + desc.vertex_func.entry = "main0" + desc.fragment_func.source = transmute(cstring)&draw_text_fs_source_metal_macos + desc.fragment_func.entry = "main0" + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 32 + desc.uniform_blocks[0].msl_buffer_n = 0 + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.images[0].msl_texture_n = 0 + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.samplers[0].msl_sampler_n = 0 + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 case .WGPU: - desc.vs.source = transmute(cstring)&draw_text_vs_source_wgsl - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&draw_text_fs_source_wgsl - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 32 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.vertex_func.source = transmute(cstring)&draw_text_vs_source_wgsl + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&draw_text_fs_source_wgsl + desc.fragment_func.entry = "main" + desc.uniform_blocks[0].stage = .FRAGMENT + desc.uniform_blocks[0].layout = .STD140 + desc.uniform_blocks[0].size = 32 + desc.uniform_blocks[0].wgsl_group0_binding_n = 8 + desc.images[0].stage = .FRAGMENT + desc.images[0].multisampled = false + desc.images[0].image_type = ._2D + desc.images[0].sample_type = .FLOAT + desc.images[0].wgsl_group1_binding_n = 64 + desc.samplers[0].stage = .FRAGMENT + desc.samplers[0].sampler_type = .FILTERING + desc.samplers[0].wgsl_group1_binding_n = 80 + desc.image_sampler_pairs[0].stage = .FRAGMENT + desc.image_sampler_pairs[0].image_slot = 0 + desc.image_sampler_pairs[0].sampler_slot = 0 } return desc } diff --git a/backend/sokol/draw_text.shdc.glsl b/backend/sokol/draw_text.shdc.glsl index 264039d..fa73f4f 100644 --- a/backend/sokol/draw_text.shdc.glsl +++ b/backend/sokol/draw_text.shdc.glsl @@ -23,10 +23,10 @@ void main() in vec2 uv; out vec4 frag_color; -uniform texture2D draw_text_src_texture; -uniform sampler draw_text_src_sampler; +layout(binding = 0) uniform texture2D draw_text_src_texture; +layout(binding = 0) uniform sampler draw_text_src_sampler; -uniform draw_text_fs_params { +layout(binding = 0) uniform draw_text_fs_params { int down_sample; vec4 colour; }; diff --git a/backend/sokol/render_glyph.odin b/backend/sokol/render_glyph.odin index 3dea9d4..e8b369e 100644 --- a/backend/sokol/render_glyph.odin +++ b/backend/sokol/render_glyph.odin @@ -12,14 +12,15 @@ import sg "thirdparty:sokol/gfx" ========= Shader program: 'render_glyph': Get shader desc: render_glyph_shader_desc(sg.query_backend()) - Vertex shader: render_glyph_vs - Attributes: - ATTR_render_glyph_vs_v_position => 0 - ATTR_render_glyph_vs_v_texture => 1 - Fragment shader: render_glyph_fs + Vertex Shader: render_glyph_vs + Fragment Shader: render_glyph_fs + Attributes: + ATTR_render_glyph_v_position => 0 + ATTR_render_glyph_v_texture => 1 + Bindings: */ -ATTR_render_glyph_vs_v_position :: 0 -ATTR_render_glyph_vs_v_texture :: 1 +ATTR_render_glyph_v_position :: 0 +ATTR_render_glyph_v_texture :: 1 /* #version 410 @@ -34,7 +35,7 @@ ATTR_render_glyph_vs_v_texture :: 1 } */ -@(private) +@(private="file") render_glyph_vs_source_glsl410 := [235]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, @@ -64,7 +65,7 @@ render_glyph_vs_source_glsl410 := [235]u8 { } */ -@(private) +@(private="file") render_glyph_fs_source_glsl410 := [136]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, @@ -90,7 +91,7 @@ render_glyph_fs_source_glsl410 := [136]u8 { } */ -@(private) +@(private="file") render_glyph_vs_source_glsl300es := [217]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61, @@ -121,7 +122,7 @@ render_glyph_vs_source_glsl300es := [217]u8 { } */ -@(private) +@(private="file") render_glyph_fs_source_glsl300es := [176]u8 { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d, @@ -171,7 +172,7 @@ render_glyph_fs_source_glsl300es := [176]u8 { return stage_output; } */ -@(private) +@(private="file") render_glyph_vs_source_hlsl4 := [705]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c, 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69, @@ -247,7 +248,7 @@ render_glyph_vs_source_hlsl4 := [705]u8 { return stage_output; } */ -@(private) +@(private="file") render_glyph_fs_source_hlsl4 := [427]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, @@ -304,7 +305,7 @@ render_glyph_fs_source_hlsl4 := [427]u8 { } */ -@(private) +@(private="file") render_glyph_vs_source_metal_macos := [473]u8 { 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, @@ -356,7 +357,7 @@ render_glyph_vs_source_metal_macos := [473]u8 { } */ -@(private) +@(private="file") render_glyph_fs_source_metal_macos := [238]u8 { 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, @@ -410,7 +411,7 @@ render_glyph_fs_source_metal_macos := [238]u8 { } */ -@(private) +@(private="file") render_glyph_vs_source_wgsl := [698]u8 { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, @@ -482,7 +483,7 @@ render_glyph_vs_source_wgsl := [698]u8 { } */ -@(private) +@(private="file") render_glyph_fs_source_wgsl := [361]u8 { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, @@ -513,40 +514,40 @@ render_glyph_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.label = "render_glyph_shader" #partial switch backend { case .GLCORE: - desc.attrs[0].name = "v_position" - desc.attrs[1].name = "v_texture" - desc.vs.source = transmute(cstring)&render_glyph_vs_source_glsl410 - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&render_glyph_fs_source_glsl410 - desc.fs.entry = "main" + desc.vertex_func.source = transmute(cstring)&render_glyph_vs_source_glsl410 + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&render_glyph_fs_source_glsl410 + desc.fragment_func.entry = "main" + desc.attrs[0].glsl_name = "v_position" + desc.attrs[1].glsl_name = "v_texture" case .GLES3: - desc.attrs[0].name = "v_position" - desc.attrs[1].name = "v_texture" - desc.vs.source = transmute(cstring)&render_glyph_vs_source_glsl300es - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&render_glyph_fs_source_glsl300es - desc.fs.entry = "main" + desc.vertex_func.source = transmute(cstring)&render_glyph_vs_source_glsl300es + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&render_glyph_fs_source_glsl300es + desc.fragment_func.entry = "main" + desc.attrs[0].glsl_name = "v_position" + desc.attrs[1].glsl_name = "v_texture" case .D3D11: - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&render_glyph_vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&render_glyph_fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" - desc.fs.entry = "main" + desc.vertex_func.source = transmute(cstring)&render_glyph_vs_source_hlsl4 + desc.vertex_func.d3d11_target = "vs_4_0" + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&render_glyph_fs_source_hlsl4 + desc.fragment_func.d3d11_target = "ps_4_0" + desc.fragment_func.entry = "main" + desc.attrs[0].hlsl_sem_name = "TEXCOORD" + desc.attrs[0].hlsl_sem_index = 0 + desc.attrs[1].hlsl_sem_name = "TEXCOORD" + desc.attrs[1].hlsl_sem_index = 1 case .METAL_MACOS: - desc.vs.source = transmute(cstring)&render_glyph_vs_source_metal_macos - desc.vs.entry = "main0" - desc.fs.source = transmute(cstring)&render_glyph_fs_source_metal_macos - desc.fs.entry = "main0" + desc.vertex_func.source = transmute(cstring)&render_glyph_vs_source_metal_macos + desc.vertex_func.entry = "main0" + desc.fragment_func.source = transmute(cstring)&render_glyph_fs_source_metal_macos + desc.fragment_func.entry = "main0" case .WGPU: - desc.vs.source = transmute(cstring)&render_glyph_vs_source_wgsl - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&render_glyph_fs_source_wgsl - desc.fs.entry = "main" + desc.vertex_func.source = transmute(cstring)&render_glyph_vs_source_wgsl + desc.vertex_func.entry = "main" + desc.fragment_func.source = transmute(cstring)&render_glyph_fs_source_wgsl + desc.fragment_func.entry = "main" } return desc } diff --git a/examples/sokol_demo/sokol_demo.odin b/examples/sokol_demo/sokol_demo.odin index b1b2659..a8ba18b 100644 --- a/examples/sokol_demo/sokol_demo.odin +++ b/examples/sokol_demo/sokol_demo.odin @@ -217,7 +217,7 @@ draw_text_zoomed_norm :: proc(content : string, id : Font_ID, size : f32, pos : ve.draw_text(&demo_ctx.ve_ctx, ve_id, content, pos, text_scale) } -sokol_app_alloc :: proc "c" ( size : u64, user_data : rawptr ) -> rawptr { +sokol_app_alloc :: proc "c" ( size : uint, user_data : rawptr ) -> rawptr { context = runtime.default_context() block, error := mem.alloc( int(size), allocator = context.allocator ) assert(error == .None, "sokol_app allocation failed") @@ -229,7 +229,7 @@ sokol_app_free :: proc "c" ( data : rawptr, user_data : rawptr ) { free(data, allocator = context.allocator) } -sokol_gfx_alloc :: proc "c" ( size : u64, user_data : rawptr ) -> rawptr { +sokol_gfx_alloc :: proc "c" ( size : uint, user_data : rawptr ) -> rawptr { context = runtime.default_context() block, error := mem.alloc( int(size), allocator = context.allocator ) assert(error == .None, "sokol_gfx allocation failed")