SDL: Fixed SDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER with IYUV and YV12 pixel buffers

From ec4bdfd11865002e0870fe169e8419ed2e9963b0 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
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 ccef22aa97b18..6978562c1240e 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<MTLTexture>)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<MTLTexture>)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");