From aad101565abff3368af76e8c2e93cbe7c278a89f Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Tue, 19 Nov 2024 18:41:55 -0800 Subject: [PATCH] macos: enable Metal shader logging This enables the compile options and Xcode configuration so that logging in Metal shaders shows up in our Xcode debug console. This doesn't add any log messages, but makes it so that when we iterate on the shaders in the future, we can add and see logs to help us out. --- .github/workflows/test.yml | 6 ++ build.zig | 11 +++ .../xcshareddata/xcschemes/Ghostty.xcscheme | 17 ++++ src/build/MetallibStep.zig | 18 ++++- src/renderer/shaders/cell.metal | 81 ++++++++----------- 5 files changed, 86 insertions(+), 47 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 68ab0b48a..2cbb76a50 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -196,6 +196,9 @@ jobs: name: ghostty authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + - name: XCode Select + run: sudo xcode-select -s /Applications/Xcode_16.0.app + - name: Test All run: | # OpenGL @@ -352,6 +355,9 @@ jobs: name: ghostty authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + - name: XCode Select + run: sudo xcode-select -s /Applications/Xcode_16.0.app + - name: test run: nix develop -c zig build test diff --git a/build.zig b/build.zig index 8ba5d6b97..d2b1e63ce 100644 --- a/build.zig +++ b/build.zig @@ -1384,10 +1384,21 @@ fn addMetallib( b: *std.Build, step: *std.Build.Step.Compile, ) !void { + const optimize = step.root_module.optimize.?; + const metal_step = MetallibStep.create(b, .{ .name = "Ghostty", .target = step.root_module.resolved_target.?, .sources = &.{b.path("src/renderer/shaders/cell.metal")}, + .logging = switch (optimize) { + .Debug, + => true, + + .ReleaseFast, + .ReleaseSmall, + .ReleaseSafe, + => false, + }, }); metal_step.output.addStepDependencies(&step.step); diff --git a/macos/Ghostty.xcodeproj/xcshareddata/xcschemes/Ghostty.xcscheme b/macos/Ghostty.xcodeproj/xcshareddata/xcschemes/Ghostty.xcscheme index d9b7183aa..59ae8d9d8 100644 --- a/macos/Ghostty.xcodeproj/xcshareddata/xcschemes/Ghostty.xcscheme +++ b/macos/Ghostty.xcodeproj/xcshareddata/xcschemes/Ghostty.xcscheme @@ -55,6 +55,23 @@ isEnabled = "YES"> + + + + + + + + 1.0f && in.mode == MODE_TEXT) { - float4 bg_color = float4(bg_colors[in.grid_pos.y * uniforms.grid_size.x + in.grid_pos.x]) / 255.0f; + float4 bg_color = + float4( + bg_colors[in.grid_pos.y * uniforms.grid_size.x + in.grid_pos.x]) / + 255.0f; out.color = contrasted_color(uniforms.min_contrast, out.color, bg_color); } // If this cell is the cursor cell, then we need to change the color. - if ( - in.mode != MODE_TEXT_CURSOR && - ( - in.grid_pos.x == uniforms.cursor_pos.x || - uniforms.cursor_wide && - in.grid_pos.x == uniforms.cursor_pos.x + 1 - ) && - in.grid_pos.y == uniforms.cursor_pos.y - ) { + if (in.mode != MODE_TEXT_CURSOR && + (in.grid_pos.x == uniforms.cursor_pos.x || + uniforms.cursor_wide && in.grid_pos.x == uniforms.cursor_pos.x + 1) && + in.grid_pos.y == uniforms.cursor_pos.y) { out.color = float4(uniforms.cursor_color) / 255.0f; } return out; } -fragment float4 cell_text_fragment( - CellTextVertexOut in [[stage_in]], - texture2d textureGrayscale [[texture(0)]], - texture2d textureColor [[texture(1)]] -) { - constexpr sampler textureSampler( - coord::pixel, - address::clamp_to_edge, - filter::nearest - ); +fragment float4 cell_text_fragment(CellTextVertexOut in [[stage_in]], + texture2d textureGrayscale + [[texture(0)]], + texture2d textureColor + [[texture(1)]]) { + constexpr sampler textureSampler(coord::pixel, address::clamp_to_edge, + filter::nearest); switch (in.mode) { default: @@ -367,12 +361,10 @@ struct ImageVertexOut { float2 tex_coord; }; -vertex ImageVertexOut image_vertex( - uint vid [[vertex_id]], - ImageVertexIn in [[stage_in]], - texture2d image [[texture(0)]], - constant Uniforms& uniforms [[buffer(1)]] -) { +vertex ImageVertexOut image_vertex(uint vid [[vertex_id]], + ImageVertexIn in [[stage_in]], + texture2d image [[texture(0)]], + constant Uniforms& uniforms [[buffer(1)]]) { // The size of the image in pixels float2 image_size = float2(image.get_width(), image.get_height()); @@ -409,10 +401,8 @@ vertex ImageVertexOut image_vertex( return out; } -fragment float4 image_fragment( - ImageVertexOut in [[stage_in]], - texture2d image [[texture(0)]] -) { +fragment float4 image_fragment(ImageVertexOut in [[stage_in]], + texture2d image [[texture(0)]]) { constexpr sampler textureSampler(address::clamp_to_edge, filter::linear); // Ehhhhh our texture is in RGBA8Uint but our color attachment is @@ -426,4 +416,3 @@ fragment float4 image_fragment( result.rgb *= result.a; return result; } -