Browse Source

Fix Metal 3D texture upload stride calculation

Signed-off-by: Victor Ilyushchenko <[email protected]>
Victor Ilyushchenko 1 week ago
parent
commit
a34d31322c
1 changed files with 2 additions and 1 deletions
  1. 2 1
      src/gpu/metal/SDL_gpu_metal.m

+ 2 - 1
src/gpu/metal/SDL_gpu_metal.m

@@ -1805,7 +1805,8 @@ static void METAL_UploadToTexture(
                  copyFromBuffer:bufferContainer->activeBuffer->handle
                  copyFromBuffer:bufferContainer->activeBuffer->handle
                    sourceOffset:source->offset
                    sourceOffset:source->offset
               sourceBytesPerRow:BytesPerRow(destination->w, textureContainer->header.info.format)
               sourceBytesPerRow:BytesPerRow(destination->w, textureContainer->header.info.format)
-            sourceBytesPerImage:SDL_CalculateGPUTextureFormatSize(textureContainer->header.info.format, destination->w, destination->h, destination->d)
+            // sourceBytesPerImage expects the stride between 2D images (slices) of a 3D texture, not the size of the entire region
+            sourceBytesPerImage:SDL_CalculateGPUTextureFormatSize(textureContainer->header.info.format, destination->w, destination->h, 1)
                      sourceSize:MTLSizeMake(destination->w, destination->h, destination->d)
                      sourceSize:MTLSizeMake(destination->w, destination->h, destination->d)
                       toTexture:metalTexture->handle
                       toTexture:metalTexture->handle
                destinationSlice:destination->layer
                destinationSlice:destination->layer