mirror of
https://github.com/ScrelliCopter/NeHe-SDL_GPU.git
synced 2025-06-19 21:49:17 +10:00
swift: Simplify copy pass variants
This commit is contained in:
@@ -24,13 +24,7 @@ public struct NeHeCopyPass: ~Copyable
|
|||||||
// Free transfer buffers
|
// Free transfer buffers
|
||||||
for copy in self.copies.reversed()
|
for copy in self.copies.reversed()
|
||||||
{
|
{
|
||||||
switch copy
|
SDL_ReleaseGPUTransferBuffer(self.device, copy.transferBuffer)
|
||||||
{
|
|
||||||
case .buffer(_, let xferBuffer, _):
|
|
||||||
SDL_ReleaseGPUTransferBuffer(self.device, xferBuffer)
|
|
||||||
case .texture(_, let xferBuffer, _, _):
|
|
||||||
SDL_ReleaseGPUTransferBuffer(self.device, xferBuffer)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,15 +42,15 @@ public struct NeHeCopyPass: ~Copyable
|
|||||||
// Upload buffers and textures into the GPU buffer(s)
|
// Upload buffers and textures into the GPU buffer(s)
|
||||||
for copy in self.copies
|
for copy in self.copies
|
||||||
{
|
{
|
||||||
switch copy
|
switch copy.payload
|
||||||
{
|
{
|
||||||
case .buffer(let buffer, let xferBuffer, let size):
|
case .buffer(let buffer, let size):
|
||||||
var source = SDL_GPUTransferBufferLocation(transfer_buffer: xferBuffer, offset: 0)
|
var source = SDL_GPUTransferBufferLocation(transfer_buffer: copy.transferBuffer, offset: 0)
|
||||||
var destination = SDL_GPUBufferRegion(buffer: buffer, offset: 0, size: size)
|
var destination = SDL_GPUBufferRegion(buffer: buffer, offset: 0, size: size)
|
||||||
SDL_UploadToGPUBuffer(pass, &source, &destination, false)
|
SDL_UploadToGPUBuffer(pass, &source, &destination, false)
|
||||||
case .texture(let texture, let xferBuffer, let size, _):
|
case .texture(let texture, let size, _):
|
||||||
var source = SDL_GPUTextureTransferInfo()
|
var source = SDL_GPUTextureTransferInfo()
|
||||||
source.transfer_buffer = xferBuffer
|
source.transfer_buffer = copy.transferBuffer
|
||||||
source.offset = 0
|
source.offset = 0
|
||||||
var destination = SDL_GPUTextureRegion()
|
var destination = SDL_GPUTextureRegion()
|
||||||
destination.texture = texture
|
destination.texture = texture
|
||||||
@@ -71,7 +65,7 @@ public struct NeHeCopyPass: ~Copyable
|
|||||||
SDL_EndGPUCopyPass(pass)
|
SDL_EndGPUCopyPass(pass)
|
||||||
|
|
||||||
// Generate mipmaps if needed
|
// Generate mipmaps if needed
|
||||||
for case .texture(let texture, _, _, let genMipmaps) in self.copies where genMipmaps
|
for case .texture(let texture, _, let genMipmaps) in self.copies.map(\.payload) where genMipmaps
|
||||||
{
|
{
|
||||||
SDL_GenerateMipmapsForGPUTexture(cmd, texture)
|
SDL_GenerateMipmapsForGPUTexture(cmd, texture)
|
||||||
}
|
}
|
||||||
@@ -118,10 +112,9 @@ public extension NeHeCopyPass
|
|||||||
}
|
}
|
||||||
SDL_UnmapGPUTransferBuffer(self.device, xferBuffer)
|
SDL_UnmapGPUTransferBuffer(self.device, xferBuffer)
|
||||||
|
|
||||||
self.copies.append(.buffer(
|
self.copies.append(.init(
|
||||||
buffer: buffer,
|
transferBuffer: xferBuffer,
|
||||||
xferBuffer: xferBuffer,
|
payload: .buffer(buffer: buffer, size: size)))
|
||||||
size: size))
|
|
||||||
return buffer
|
return buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,20 +251,27 @@ fileprivate extension NeHeCopyPass
|
|||||||
count: pixels.count)
|
count: pixels.count)
|
||||||
SDL_UnmapGPUTransferBuffer(self.device, xferBuffer)
|
SDL_UnmapGPUTransferBuffer(self.device, xferBuffer)
|
||||||
|
|
||||||
self.copies.append(.texture(
|
self.copies.append(.init(
|
||||||
texture: texture,
|
transferBuffer: xferBuffer,
|
||||||
xferBuffer: xferBuffer,
|
payload: .texture(
|
||||||
size: .init(info.width, info.height),
|
texture: texture,
|
||||||
genMipmaps: genMipmaps))
|
size: .init(info.width, info.height),
|
||||||
|
genMipmaps: genMipmaps)))
|
||||||
return texture
|
return texture
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate extension NeHeCopyPass
|
fileprivate extension NeHeCopyPass
|
||||||
{
|
{
|
||||||
enum Copy
|
struct Copy
|
||||||
{
|
{
|
||||||
case buffer(buffer: OpaquePointer, xferBuffer: OpaquePointer, size: UInt32)
|
enum Payload
|
||||||
case texture(texture: OpaquePointer, xferBuffer: OpaquePointer, size: Size<UInt32>, genMipmaps: Bool)
|
{
|
||||||
|
case buffer(buffer: OpaquePointer, size: UInt32)
|
||||||
|
case texture(texture: OpaquePointer, size: Size<UInt32>, genMipmaps: Bool)
|
||||||
|
}
|
||||||
|
|
||||||
|
let transferBuffer: OpaquePointer
|
||||||
|
let payload: Payload
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user