From ec4bdfd11865002e0870fe169e8419ed2e9963b0 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 31 Jul 2026 15:47:28 -0700 Subject: [PATCH] Fixed SDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER with IYUV and YV12 pixel buffers --- src/render/metal/SDL_render_metal.m | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/render/metal/SDL_render_metal.m b/src/render/metal/SDL_render_metal.m index ccef22aa97..6978562c12 100644 --- a/src/render/metal/SDL_render_metal.m +++ b/src/render/metal/SDL_render_metal.m @@ -830,7 +830,12 @@ static bool METAL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD if (yuv) { mtltexture = (__bridge id)SDL_GetPointerProperty(create_props, SDL_PROP_TEXTURE_CREATE_METAL_TEXTURE_U_POINTER, nil); if (mtltexture == nil) { - mtltexture = [data.mtldevice newTextureWithDescriptor:mtltexdesc]; + if (surface) { + NSUInteger Uplane = (texture->format == SDL_PIXELFORMAT_YV12) ? 2 : 1; + mtltexture = [data.mtldevice newTextureWithDescriptor:mtltexdesc iosurface:surface plane:Uplane]; + } else { + mtltexture = [data.mtldevice newTextureWithDescriptor:mtltexdesc]; + } } if (mtltexture == nil) { return SDL_SetError("Texture allocation failed"); @@ -840,7 +845,12 @@ static bool METAL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD mtltexture = (__bridge id)SDL_GetPointerProperty(create_props, SDL_PROP_TEXTURE_CREATE_METAL_TEXTURE_V_POINTER, nil); if (mtltexture == nil) { - mtltexture = [data.mtldevice newTextureWithDescriptor:mtltexdesc]; + if (surface) { + NSUInteger Vplane = (texture->format == SDL_PIXELFORMAT_YV12) ? 1 : 2; + mtltexture = [data.mtldevice newTextureWithDescriptor:mtltexdesc iosurface:surface plane:Vplane]; + } else { + mtltexture = [data.mtldevice newTextureWithDescriptor:mtltexdesc]; + } } if (mtltexture == nil) { return SDL_SetError("Texture allocation failed");