[all] Remove old compute shader code

This commit is contained in:
Eryn Wells 2017-08-06 07:55:39 -07:00
parent ddc0938ae4
commit a49c370ceb
4 changed files with 0 additions and 117 deletions

View file

@ -113,14 +113,8 @@ public class Field {
// MARK: - Metal Configuration
private var device: MTLDevice?
// private var sampleComputeState: MTLComputePipelineState?
public private(set) var parametersBuffer: MTLBuffer?
public private(set) var ballBuffer: MTLBuffer?
// public private(set) var sampleTexture: MTLTexture?
// private var threadgroupCount = MTLSize()
// TODO: It might be possible to (more dynamically) right-size this.
// private var threadgroupSize = MTLSize(width: 16, height: 16, depth: 1)
/// Create the Metal buffer containing basic parameters of the simulation.
private func populateParametersBuffer() {
@ -176,29 +170,6 @@ public class Field {
}
}
/// Create a Metal texture to hold sample values created by the sampling compute shader.
/// @param device The Metal device to use to create the texture.
/// @return A new texture.
// private func makeSampleTextureIfNeeded(withDevice device: MTLDevice) -> MTLTexture? {
// if sampleTexture == nil {
// let desc = MTLTextureDescriptor()
// desc.pixelFormat = .r16Float
// desc.width = Int(size.width)
// desc.height = Int(size.height)
// desc.usage = [.shaderWrite, .shaderRead]
// sampleTexture = device.makeTexture(descriptor: desc)
// }
// return sampleTexture
// }
/// Update the threadgroup divisions based on the size of the field.
/// @param size The size of the field.
// private func updateThreadgroupSizes(withFieldSize size: CGSize) {
// let width = Int(size.width)
// let height = Int(size.height)
// threadgroupCount = MTLSize(width: width + threadgroupSize.width - 1, height: height + threadgroupSize.height - 1, depth: 1)
// }
private func write<T>(value: inout T, to ptr: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer {
let sizeOfType = MemoryLayout<T>.stride
ptr.copyBytes(from: &value, count: sizeOfType)
@ -211,40 +182,7 @@ public class Field {
}
NSLog("Setting up Metal")
self.device = device
// sampleComputeState = try computePipelineStateForSamplingKernel(withDevice: device)
populateParametersBuffer()
populateBallBuffer()
}
// public func computePipelineStateForSamplingKernel(withDevice device: MTLDevice) throws -> MTLComputePipelineState? {
// let bundle = Bundle(for: type(of: self))
// let library = try device.makeDefaultLibrary(bundle: bundle)
// guard let samplingKernel = library.makeFunction(name: "sampleFieldKernel") else {
// throw MetaballsError.metalError("Unable to create sampling kernel function")
// }
// let state = try device.makeComputePipelineState(function: samplingKernel)
// return state
// }
// public func computeEncoderForSamplingKernel(withDevice device: MTLDevice, commandBuffer buffer: MTLCommandBuffer) throws -> MTLComputeCommandEncoder {
// guard let parametersBuffer = makeParametersBufferIfNeeded(withDevice: device),
// let ballBuffer = makeBallBufferIfNeeded(withDevice: device),
// let sampleTexture = makeSampleTextureIfNeeded(withDevice: device),
// let state = sampleComputeState
// else {
// throw MetaballsError.metalError("Missing Metal buffers or compute state")
// }
//
// let encoder = buffer.makeComputeCommandEncoder()
// encoder.setComputePipelineState(state)
// encoder.setBuffer(parametersBuffer, offset: 0, at: 0)
// encoder.setBuffer(ballBuffer, offset: 0, at: 1)
// encoder.setTexture(sampleTexture, at: 0)
// encoder.dispatchThreadgroups(threadgroupCount, threadsPerThreadgroup: threadgroupSize)
// encoder.endEncoding()
//
// updateParametersBuffer()
//
// return encoder
// }
}

View file

@ -1,40 +0,0 @@
//
// SamplingKernel.metal
// Metaballs
//
// Created by Eryn Wells on 8/1/17.
// Copyright © 2017 Eryn Wells. All rights reserved.
//
#include <metal_stdlib>
using namespace metal;
// TODO: This is a dupe of the Ball struct. Is there a way to DRY this?
typedef struct {
float radius;
float2 position;
float2 velocity;
} Ball;
typedef struct {
int2 size;
int numberOfBalls;
} Parameters;
kernel void
sampleFieldKernel(constant Parameters& parameters [[buffer(0)]],
constant Ball* balls [[buffer(1)]],
texture2d<half, access::write> samples [[texture(0)]],
uint2 gid [[thread_position_in_grid]])
{
float sample = 0.0;
// TODO: Get number of metaballs.
for (int i = 0; i < 2; i++) {
constant Ball& ball = balls[i];
float r2 = ball.radius * ball.radius;
float xDiff = gid[0] - ball.position[0];
float yDiff = gid[1] - ball.position[1];
sample += r2 / ((xDiff * xDiff) + (yDiff * yDiff));
}
samples.write(sample, gid);
}