From fc07a0d0186071ad0f5d8c45d4ea0727876924b9 Mon Sep 17 00:00:00 2001 From: Martin Fouilleul Date: Tue, 11 Jul 2023 14:27:15 +0200 Subject: [PATCH] [osx, canvas] use 32 pixels-wide tiles --- src/mtl_renderer.m | 10 +++++----- src/mtl_renderer.metal | 9 ++++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/mtl_renderer.m b/src/mtl_renderer.m index 5103c00..503efef 100644 --- a/src/mtl_renderer.m +++ b/src/mtl_renderer.m @@ -17,7 +17,7 @@ #include"mtl_renderer.h" const int MG_MTL_INPUT_BUFFERS_COUNT = 3, - MG_MTL_TILE_SIZE = 16, + MG_MTL_TILE_SIZE = 32, MG_MTL_MSAA_COUNT = 8; typedef struct mg_mtl_canvas_backend @@ -914,7 +914,7 @@ void mg_mtl_render_batch(mg_mtl_canvas_backend* backend, [mergeEncoder setBuffer:backend->logOffsetBuffer[backend->bufferIndex] offset:0 atIndex:11]; MTLSize mergeGridSize = MTLSizeMake(nTilesX, nTilesY, 1); - MTLSize mergeGroupSize = MTLSizeMake(16, 16, 1); + MTLSize mergeGroupSize = MTLSizeMake(MG_MTL_TILE_SIZE, MG_MTL_TILE_SIZE, 1); [mergeEncoder dispatchThreads: mergeGridSize threadsPerThreadgroup: mergeGroupSize]; [mergeEncoder endEncoding]; @@ -946,7 +946,7 @@ void mg_mtl_render_batch(mg_mtl_canvas_backend* backend, [rasterEncoder setBytes: &useTexture length:sizeof(int) atIndex: 9]; MTLSize rasterGridSize = MTLSizeMake(viewportSize.x, viewportSize.y, 1); - MTLSize rasterGroupSize = MTLSizeMake(16, 16, 1); + MTLSize rasterGroupSize = MTLSizeMake(MG_MTL_TILE_SIZE, MG_MTL_TILE_SIZE, 1); // [rasterEncoder dispatchThreads: rasterGridSize threadsPerThreadgroup: rasterGroupSize]; [rasterEncoder dispatchThreadgroupsWithIndirectBuffer: backend->rasterDispatchBuffer @@ -999,7 +999,7 @@ void mg_mtl_canvas_resize(mg_mtl_canvas_backend* backend, vec2 size) MTLTextureDescriptor* texDesc = [[MTLTextureDescriptor alloc] init]; texDesc.textureType = MTLTextureType2D; texDesc.storageMode = MTLStorageModePrivate; - texDesc.usage = MTLTextureUsageShaderRead | MTLTextureUsageShaderWrite; + texDesc.usage = MTLTextureUsageShaderRead | MTLTextureUsageShaderWrite | MTLTextureUsageRenderTarget; texDesc.pixelFormat = MTLPixelFormatRGBA8Unorm; texDesc.width = size.x; texDesc.height = size.y; @@ -1407,7 +1407,7 @@ mg_canvas_backend* mtl_canvas_backend_create(mg_mtl_surface* surface) MTLTextureDescriptor* texDesc = [[MTLTextureDescriptor alloc] init]; texDesc.textureType = MTLTextureType2D; texDesc.storageMode = MTLStorageModePrivate; - texDesc.usage = MTLTextureUsageShaderRead | MTLTextureUsageShaderWrite; + texDesc.usage = MTLTextureUsageShaderRead | MTLTextureUsageShaderWrite | MTLTextureUsageRenderTarget; texDesc.pixelFormat = MTLPixelFormatRGBA8Unorm; texDesc.width = backend->frameSize.x; texDesc.height = backend->frameSize.y; diff --git a/src/mtl_renderer.metal b/src/mtl_renderer.metal index f0dad17..08276b6 100644 --- a/src/mtl_renderer.metal +++ b/src/mtl_renderer.metal @@ -1611,6 +1611,13 @@ kernel void mtl_raster(const device mg_mtl_screen_tile* screenTilesBuffer [[buff } opIndex = op->next; } + +/* + if((pixelCoord.x % tileSize[0] == 0) || (pixelCoord.y % tileSize[0] == 0)) + { + color = float4(0, 0, 0, 1); + } +//*/ outTexture.write(color, pixelCoord); } @@ -1631,7 +1638,7 @@ vertex vs_out mtl_vertex_shader(ushort vid [[vertex_id]]) return(out); } -fragment float4 mtl_fragment_shader(vs_out i [[stage_in]], texture2d tex [[texture(0)]]) +fragment float4 mtl_fragment_shader(vs_out i [[stage_in]], texture2d tex [[texture(0)]]) { constexpr sampler smp(mip_filter::nearest, mag_filter::linear, min_filter::linear); return(tex.sample(smp, i.uv));