Skip to content

Commit

Permalink
Make ssao buffers dynamic
Browse files Browse the repository at this point in the history
  • Loading branch information
mateuszstompor committed Sep 4, 2023
1 parent f4b1703 commit 1af5ef4
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 24 deletions.
44 changes: 23 additions & 21 deletions Engine/Core/Rendering/Jobs/SSAO/PNSSAOJob.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,42 @@ struct PNSSAOJob: PNComputeJob {
private let prTexture: PNTextureProvider
private let nmTexture: PNTextureProvider
private let outputTexture: PNTextureProvider
private var kernelBuffer: PNAnyStaticBuffer<simd_float3>
private var noiseBuffer: PNAnyStaticBuffer<simd_float3>
private var kernelBuffer: PNAnyDynamicBuffer<simd_float3>
private var noiseBuffer: PNAnyDynamicBuffer<simd_float3>
private var uniforms: PNAnyStaticBuffer<SSAOUniforms>
private let dispatchSize: MTLSize
private let threadGroupSize: MTLSize
init?(pipelineState: MTLComputePipelineState,
prTexture: PNTextureProvider,
nmTexture: PNTextureProvider,
outputTexture: PNTextureProvider,
kernelBuffer: PNAnyStaticBuffer<simd_float3>,
noiseBuffer: PNAnyStaticBuffer<simd_float3>,
uniforms: PNAnyStaticBuffer<SSAOUniforms>,
maxNoiseCount: Int,
maxSamplesCount: Int) {
kernelBuffer: PNAnyDynamicBuffer<simd_float3>,
noiseBuffer: PNAnyDynamicBuffer<simd_float3>,
uniforms: PNAnyStaticBuffer<SSAOUniforms>) {
// Default values
let ssaoUniforms = SSAOUniforms.default
let samples = PNISSAOHemisphere().samples(size: Int(ssaoUniforms.sampleCount))
let noise = PNISSAOHemisphere().noise(count: Int(ssaoUniforms.noiseCount))
self.pipelineState = pipelineState
self.nmTexture = nmTexture
self.outputTexture = outputTexture
self.prTexture = prTexture
self.kernelBuffer = kernelBuffer
self.noiseBuffer = noiseBuffer
self.uniforms = uniforms
self.kernelBuffer.upload(data: PNISSAOHemisphere().samples(size: maxSamplesCount))
self.noiseBuffer.upload(data: PNISSAOHemisphere().noise(count: maxNoiseCount))
self.uniforms.upload(value: .default)
self.kernelBuffer.upload(data: samples)
self.noiseBuffer.upload(data: noise)
self.uniforms.upload(value: ssaoUniforms)
guard let inputTexture = prTexture.texture else {
return nil
}
dispatchSize = MTLSize(width: inputTexture.width,
height: inputTexture.height)
threadGroupSize = MTLSize(width: 8, height: 8)
// TODO: Rescale
let sideThreadGroup = 4
assertDivisible(inputTexture.width, sideThreadGroup)
assertDivisible(inputTexture.height, sideThreadGroup)
threadGroupSize = MTLSize(width: sideThreadGroup, height: sideThreadGroup)
}
func compute(encoder: MTLComputeCommandEncoder, supply: PNFrameSupply) {
let time = Int32(Date.timeIntervalSinceReferenceDate)
Expand All @@ -59,13 +65,11 @@ struct PNSSAOJob: PNComputeJob {
static func make(device: MTLDevice,
prTexture: PNTextureProvider,
nmTexture: PNTextureProvider,
outputTexture: PNTextureProvider,
maxNoiseCount: Int,
maxSamplesCount: Int) -> PNSSAOJob? {
outputTexture: PNTextureProvider) -> PNSSAOJob? {
guard let library = device.makePorcelainLibrary(),
let pipelineState = device.makeCPSSSAO(library: library),
let kernelBuffer = PNIStaticBuffer<simd_float3>(device: device, capacity: 64),
let noiseBuffer = PNIStaticBuffer<simd_float3>(device: device, capacity: 64),
let kernelBuffer = PNIDynamicBuffer<simd_float3>(device: device, initialCapacity: 1),
let noiseBuffer = PNIDynamicBuffer<simd_float3>(device: device, initialCapacity: 1),
let uniforms = PNIStaticBuffer<SSAOUniforms>(device: device, capacity: 1)
else {
return nil
Expand All @@ -74,10 +78,8 @@ struct PNSSAOJob: PNComputeJob {
prTexture: prTexture,
nmTexture: nmTexture,
outputTexture: outputTexture,
kernelBuffer: PNAnyStaticBuffer(kernelBuffer),
noiseBuffer: PNAnyStaticBuffer(noiseBuffer),
uniforms: PNAnyStaticBuffer(uniforms),
maxNoiseCount: maxNoiseCount,
maxSamplesCount: maxSamplesCount)
kernelBuffer: PNAnyDynamicBuffer(kernelBuffer),
noiseBuffer: PNAnyDynamicBuffer(noiseBuffer),
uniforms: PNAnyStaticBuffer(uniforms))
}
}
4 changes: 1 addition & 3 deletions Engine/Core/Rendering/Stages/PNSSAOStage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ struct PNSSAOStage: PNStage {
let ssaoKernel = PNSSAOJob.make(device: device,
prTexture: prTexture,
nmTexture: nmTexture,
outputTexture: PNStaticTexture(ssaoTexture),
maxNoiseCount: 64,
maxSamplesCount: 64),
outputTexture: PNStaticTexture(ssaoTexture)),
let gaussTexture = device.makeTexture(descriptor: .ssaoC(size: renderingSize)) else {
return nil
}
Expand Down

0 comments on commit 1af5ef4

Please sign in to comment.