Skip to content

Commit

Permalink
Revert to using matrices in the shader, just to measure performance. …
Browse files Browse the repository at this point in the history
…The vertex shader is 36ms slower! (iPhone6)
  • Loading branch information
endavid committed Aug 28, 2016
1 parent 1edc8fe commit c9ca914
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
8 changes: 4 additions & 4 deletions VidEngine/Shaders/Shaders.metal
Expand Up @@ -38,13 +38,13 @@ vertex VertexInOut passGeometry(uint vid [[ vertex_id ]],
uint iid [[ instance_id ]],
constant TexturedVertex* vdata [[ buffer(0) ]],
constant Uniforms& uniforms [[ buffer(1) ]],
constant Transform* perInstanceUniforms [[ buffer(2) ]])
constant PerInstanceUniforms* perInstanceUniforms [[ buffer(2) ]])
{
VertexInOut outVertex;
Transform t = perInstanceUniforms[iid];
float4x4 m = uniforms.projectionMatrix * uniforms.viewMatrix;
PerInstanceUniforms iu = perInstanceUniforms[iid];
float4x4 m = uniforms.projectionMatrix * uniforms.viewMatrix * iu.modelMatrix;
TexturedVertex v = vdata[vid];
outVertex.position = m * float4(t * v.position, 1.0);
outVertex.position = m * float4(v.position, 1.0);
outVertex.color = float4(0.5 * v.normal + 0.5, 1);
return outVertex;
}
Expand Down
9 changes: 6 additions & 3 deletions VidEngine/gfx/SpherePrimitive.swift
Expand Up @@ -17,7 +17,7 @@ class SpherePrimitive : Primitive {

/// @param tesselationLevel: 2: 162 vertices; 3: 642 vertices; 4: 2562 vertices
init(priority: Int, numInstances: Int, tesselationLevel: Int) {
uniformBuffer = RenderManager.sharedInstance.createTransformsBuffer("sphereUniforms", numElements: RenderManager.NumSyncBuffers * numInstances)
uniformBuffer = RenderManager.sharedInstance.createPerInstanceUniformsBuffer("sphereUniforms", numElements: RenderManager.NumSyncBuffers * numInstances)
super.init(priority: priority, numInstances: numInstances)
initBuffers(tesselationLevel)
}
Expand Down Expand Up @@ -54,7 +54,10 @@ class SpherePrimitive : Primitive {

override func updateBuffers(syncBufferIndex: Int) {
let uniformB = uniformBuffer.contents()
let uniformData = UnsafeMutablePointer<Float>(uniformB + sizeof(Transform) * transforms.count * syncBufferIndex)
memcpy(uniformData, &transforms, sizeof(Transform) * transforms.count)
for i in 0..<transforms.count {
let uniformData = UnsafeMutablePointer<Float>(uniformB + sizeof(PerInstanceUniforms) * (transforms.count * syncBufferIndex + i))
var u = PerInstanceUniforms(modelMatrix: transforms[i].toMatrix4().m)
memcpy(uniformData, &u, sizeof(PerInstanceUniforms))
}
}
}

0 comments on commit c9ca914

Please sign in to comment.