Explorar el Código

Fix Metal 3D texture upload stride calculation

Signed-off-by: Victor Ilyushchenko <alt13ri@gmail.com>
(cherry picked from commit a34d31322ce7423b54db29ca6da5883c189b82ee)
Victor Ilyushchenko hace 5 meses
padre
commit
5d47efe7fb
Se han modificado 1 ficheros con 2 adiciones y 1 borrados
  1. 2 1
      src/gpu/metal/SDL_gpu_metal.m

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

@@ -1778,7 +1778,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