From 023a08f8e8801f6b3fd984e5e6611e236c8a3835 Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Fri, 1 Mar 2024 17:53:01 +0100 Subject: [PATCH] in the Metal samples, SG_PIXELFORMAT_NONE/DEPTH/DEPTH_STENCIL as depth buffer formats --- metal/arraytex-metal.c | 2 +- metal/binshader-metal.c | 2 +- metal/blend-metal.c | 2 +- metal/bufferoffsets-metal.c | 2 +- metal/clear-metal.c | 2 +- metal/cube-metal.c | 2 +- metal/dyntex-metal.c | 2 +- metal/imgui-metal.cc | 2 +- metal/inject-metal.m | 2 +- metal/instancing-metal.c | 2 +- metal/mipmap-metal.c | 2 +- metal/mrt-metal.c | 2 +- metal/noninterleaved-metal.c | 2 +- metal/offscreen-metal.c | 2 +- metal/osxentry.h | 2 +- metal/osxentry.m | 21 +++++++++++++++++---- metal/quad-metal.c | 2 +- metal/releasetest-metal.c | 2 +- metal/texcube-metal.c | 2 +- metal/triangle-metal.c | 2 +- 20 files changed, 36 insertions(+), 23 deletions(-) diff --git a/metal/arraytex-metal.c b/metal/arraytex-metal.c index c493d285..bdab755e 100644 --- a/metal/arraytex-metal.c +++ b/metal/arraytex-metal.c @@ -233,6 +233,6 @@ static void shutdown() { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol Array Texture (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH, "arraytex-metal", init, frame, shutdown); return 0; } diff --git a/metal/binshader-metal.c b/metal/binshader-metal.c index 213c1bde..d8374c5b 100644 --- a/metal/binshader-metal.c +++ b/metal/binshader-metal.c @@ -143,6 +143,6 @@ static void shutdown() { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol Shader Bytecode (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH, "binshader-metal", init, frame, shutdown); return 0; } diff --git a/metal/blend-metal.c b/metal/blend-metal.c index 0bc7cf0c..1d2f15c0 100644 --- a/metal/blend-metal.c +++ b/metal/blend-metal.c @@ -219,5 +219,5 @@ static void shutdown(void) { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol Blend (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH_STENCIL, "blend-metal", init, frame, shutdown); } diff --git a/metal/bufferoffsets-metal.c b/metal/bufferoffsets-metal.c index 6d69bf6d..752fe949 100644 --- a/metal/bufferoffsets-metal.c +++ b/metal/bufferoffsets-metal.c @@ -115,6 +115,6 @@ static void shutdown(void) { } int main() { - osx_start(640, 480, 1, "Sokol Buffer Offsets (Metal)", init, frame, shutdown); + osx_start(640, 480, 1, SG_PIXELFORMAT_NONE, "bufferoffsets-metal", init, frame, shutdown); return 0; } diff --git a/metal/clear-metal.c b/metal/clear-metal.c index b3e8a245..bc84656f 100644 --- a/metal/clear-metal.c +++ b/metal/clear-metal.c @@ -36,6 +36,6 @@ static void shutdown(void) { } int main() { - osx_start(640, 480, 1, "Sokol Clear (Metal)", init, frame, shutdown); + osx_start(640, 480, 1, SG_PIXELFORMAT_NONE, "clear-metal", init, frame, shutdown); return 0; } diff --git a/metal/cube-metal.c b/metal/cube-metal.c index f15704ec..99432ca4 100644 --- a/metal/cube-metal.c +++ b/metal/cube-metal.c @@ -160,6 +160,6 @@ static void shutdown(void) { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol Cube (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH, "cube-metal", init, frame, shutdown); return 0; } diff --git a/metal/dyntex-metal.c b/metal/dyntex-metal.c index 9090af3d..3f822452 100644 --- a/metal/dyntex-metal.c +++ b/metal/dyntex-metal.c @@ -204,7 +204,7 @@ static void shutdown(void) { } int main() { - osx_start(DISPLAY_WIDTH, DISPLAY_HEIGHT, SAMPLE_COUNT, "Dynamic Texture (Metal)", init, frame, shutdown); + osx_start(DISPLAY_WIDTH, DISPLAY_HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH, "dyntex-metal", init, frame, shutdown); return 0; } diff --git a/metal/imgui-metal.cc b/metal/imgui-metal.cc index 1124ccbf..b352a46b 100644 --- a/metal/imgui-metal.cc +++ b/metal/imgui-metal.cc @@ -117,6 +117,6 @@ void shutdown() { } int main() { - osx_start(WIDTH, HEIGHT, 1, "Sokol Dear ImGui (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, 1, SG_PIXELFORMAT_NONE, "Sokol Dear ImGui (Metal)", init, frame, shutdown); return 0; } diff --git a/metal/inject-metal.m b/metal/inject-metal.m index c132441d..ec97a5fa 100644 --- a/metal/inject-metal.m +++ b/metal/inject-metal.m @@ -269,6 +269,6 @@ static void shutdown(void) { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol Resource Injection (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH_STENCIL, "inject-metal", init, frame, shutdown); return 0; } diff --git a/metal/instancing-metal.c b/metal/instancing-metal.c index b7494ae3..8c3761c7 100644 --- a/metal/instancing-metal.c +++ b/metal/instancing-metal.c @@ -193,6 +193,6 @@ static void shutdown(void) { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol Instancing (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH, "instancing-metal", init, frame, shutdown); return 0; } diff --git a/metal/mipmap-metal.c b/metal/mipmap-metal.c index e69912c6..91f041e3 100644 --- a/metal/mipmap-metal.c +++ b/metal/mipmap-metal.c @@ -234,5 +234,5 @@ static void shutdown(void) { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol Mipmapping (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH, "mipmap-metal", init, frame, shutdown); } diff --git a/metal/mrt-metal.c b/metal/mrt-metal.c index 915e3b67..fd4de7e4 100644 --- a/metal/mrt-metal.c +++ b/metal/mrt-metal.c @@ -409,6 +409,6 @@ static void shutdown(void) { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol MRT (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH, "mrt-metal", init, frame, shutdown); return 0; } diff --git a/metal/noninterleaved-metal.c b/metal/noninterleaved-metal.c index a683235d..064d55d5 100644 --- a/metal/noninterleaved-metal.c +++ b/metal/noninterleaved-metal.c @@ -169,6 +169,6 @@ static void shutdown(void) { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol Non-Interleaved Vertex Data (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH, "noninterleaved-metal", init, frame, shutdown); return 0; } diff --git a/metal/offscreen-metal.c b/metal/offscreen-metal.c index d70f43c6..f3976321 100644 --- a/metal/offscreen-metal.c +++ b/metal/offscreen-metal.c @@ -315,6 +315,6 @@ static void shutdown(void) { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol Offscreen (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH_STENCIL, "offscreen-metal", init, frame, shutdown); return 0; } diff --git a/metal/osxentry.h b/metal/osxentry.h index 876794de..2e293ece 100644 --- a/metal/osxentry.h +++ b/metal/osxentry.h @@ -23,7 +23,7 @@ typedef void(*osx_mouse_pos_func)(float x, float y); typedef void(*osx_mouse_wheel_func)(float v); /* entry function */ -extern void osx_start(int w, int h, int sample_count, const char* title, osx_init_func, osx_frame_func, osx_shutdown_func); +extern void osx_start(int w, int h, int sample_count, sg_pixel_format depth_format, const char* title, osx_init_func, osx_frame_func, osx_shutdown_func); /* return an initialized sg_environment struct */ sg_environment osx_environment(void); /* return an initialized sg_swapchain struct */ diff --git a/metal/osxentry.m b/metal/osxentry.m index a1cfd3b1..95dd4008 100644 --- a/metal/osxentry.m +++ b/metal/osxentry.m @@ -31,6 +31,7 @@ @interface SokolMTKView : MTKView static int width; static int height; static int sample_count; +static sg_pixel_format depth_format; static const char* window_title; static osx_init_func init_func; static osx_frame_func frame_func; @@ -109,7 +110,17 @@ - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(N [mtk_view setDelegate:mtk_view_delegate]; [mtk_view setDevice: mtl_device]; [mtk_view setColorPixelFormat:MTLPixelFormatBGRA8Unorm]; - [mtk_view setDepthStencilPixelFormat:MTLPixelFormatDepth32Float_Stencil8]; + switch (depth_format) { + case SG_PIXELFORMAT_DEPTH_STENCIL: + [mtk_view setDepthStencilPixelFormat:MTLPixelFormatDepth32Float_Stencil8]; + break; + case SG_PIXELFORMAT_DEPTH: + [mtk_view setDepthStencilPixelFormat:MTLPixelFormatDepth32Float]; + break; + default: + [mtk_view setDepthStencilPixelFormat:MTLPixelFormatInvalid]; + break; + } [mtk_view setSampleCount:(NSUInteger)sample_count]; #if !TARGET_OS_IPHONE [window setContentView:mtk_view]; @@ -305,10 +316,12 @@ - (void)scrollWheel:(NSEvent*)event { @end //------------------------------------------------------------------------------ -void osx_start(int w, int h, int smp_count, const char* title, osx_init_func ifun, osx_frame_func ffun, osx_shutdown_func sfun) { +void osx_start(int w, int h, int smp_count, sg_pixel_format depth_fmt, const char* title, osx_init_func ifun, osx_frame_func ffun, osx_shutdown_func sfun) { + assert((depth_fmt == SG_PIXELFORMAT_DEPTH_STENCIL) || (depth_fmt == SG_PIXELFORMAT_DEPTH) || (depth_fmt == SG_PIXELFORMAT_NONE)); width = w; height = h; sample_count = smp_count; + depth_format = depth_fmt; window_title = title; init_func = ifun; frame_func = ffun; @@ -340,7 +353,7 @@ sg_environment osx_environment(void) { .defaults = { .sample_count = sample_count, .color_format = SG_PIXELFORMAT_BGRA8, - .depth_format = SG_PIXELFORMAT_DEPTH_STENCIL, + .depth_format = depth_format, }, .metal = { .device = (__bridge const void*) mtl_device, @@ -354,7 +367,7 @@ sg_swapchain osx_swapchain(void) { .height = (int) [mtk_view drawableSize].height, .sample_count = sample_count, .color_format = SG_PIXELFORMAT_BGRA8, - .depth_format = SG_PIXELFORMAT_DEPTH_STENCIL, + .depth_format = depth_format, .metal = { .current_drawable = (__bridge const void*) [mtk_view currentDrawable], .depth_stencil_texture = (__bridge const void*) [mtk_view depthStencilTexture], diff --git a/metal/quad-metal.c b/metal/quad-metal.c index 63dcb1e7..741c00dd 100644 --- a/metal/quad-metal.c +++ b/metal/quad-metal.c @@ -96,6 +96,6 @@ static void shutdown(void) { } int main() { - osx_start(640, 480, 1, "Sokol Quad (Metal)", init, frame, shutdown); + osx_start(640, 480, 1, SG_PIXELFORMAT_NONE, "quad-metal", init, frame, shutdown); return 0; } diff --git a/metal/releasetest-metal.c b/metal/releasetest-metal.c index 1ec1e478..39f67f40 100644 --- a/metal/releasetest-metal.c +++ b/metal/releasetest-metal.c @@ -105,6 +105,6 @@ static void shutdown(void) { } int main() { - osx_start(640, 480, 1, "Sokol Resource Stress (Metal)", init, frame, shutdown); + osx_start(640, 480, 1, SG_PIXELFORMAT_DEPTH_STENCIL, "releasetest-metal", init, frame, shutdown); return 0; } diff --git a/metal/texcube-metal.c b/metal/texcube-metal.c index ed4c85f0..4108bf8c 100644 --- a/metal/texcube-metal.c +++ b/metal/texcube-metal.c @@ -198,6 +198,6 @@ static void shutdown(void) { } int main() { - osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, "Sokol TexCube (Metal)", init, frame, shutdown); + osx_start(WIDTH, HEIGHT, SAMPLE_COUNT, SG_PIXELFORMAT_DEPTH, "texcube-metal", init, frame, shutdown); return 0; } diff --git a/metal/triangle-metal.c b/metal/triangle-metal.c index 3652a37d..d1bc96b2 100644 --- a/metal/triangle-metal.c +++ b/metal/triangle-metal.c @@ -92,6 +92,6 @@ static void shutdown(void) { } int main() { - osx_start(640, 480, 1, "Sokol Triangle (Metal)", init, frame, shutdown); + osx_start(640, 480, 1, SG_PIXELFORMAT_NONE, "triangle-metal", init, frame, shutdown); return 0; }