diff --git a/src/Device/BC_Decoder.cpp b/src/Device/BC_Decoder.cpp
index 1fd7ebe..8e8b7ad 100644
--- a/src/Device/BC_Decoder.cpp
+++ b/src/Device/BC_Decoder.cpp
@@ -117,7 +117,7 @@
 			return res;
 		}
 
-		Color operator+(Color const &obj) const
+		Color operator+(const Color &obj) const
 		{
 			Color res;
 			for(int i = 0; i < 4; ++i)
diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index 3519950..2a04a3c 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -32,7 +32,7 @@
 
 namespace sw {
 
-static rr::RValue<rr::Int> PackFields(rr::Int4 const &ints, const sw::int4 shifts)
+static rr::RValue<rr::Int> PackFields(const rr::Int4 &ints, const sw::int4 shifts)
 {
 	return (rr::Int(ints.x) << shifts[0]) |
 	       (rr::Int(ints.y) << shifts[1]) |
diff --git a/src/Device/Renderer.cpp b/src/Device/Renderer.cpp
index 34e5289..bf6d20c 100644
--- a/src/Device/Renderer.cpp
+++ b/src/Device/Renderer.cpp
@@ -182,7 +182,7 @@
 
 void Renderer::draw(const vk::GraphicsPipeline *pipeline, const vk::DynamicState &dynamicState, unsigned int count, int baseVertex,
                     CountedEvent *events, int instanceID, int layer, void *indexBuffer, const VkRect2D &renderArea,
-                    vk::Pipeline::PushConstantStorage const &pushConstants, bool update)
+                    const vk::Pipeline::PushConstantStorage &pushConstants, bool update)
 {
 	if(count == 0) { return; }
 
diff --git a/src/Device/Renderer.hpp b/src/Device/Renderer.hpp
index 0e5afb4..a2ea92d 100644
--- a/src/Device/Renderer.hpp
+++ b/src/Device/Renderer.hpp
@@ -211,7 +211,7 @@
 
 	void draw(const vk::GraphicsPipeline *pipeline, const vk::DynamicState &dynamicState, unsigned int count, int baseVertex,
 	          CountedEvent *events, int instanceID, int layer, void *indexBuffer, const VkRect2D &renderArea,
-	          vk::Pipeline::PushConstantStorage const &pushConstants, bool update = true);
+	          const vk::Pipeline::PushConstantStorage &pushConstants, bool update = true);
 
 	void addQuery(vk::Query *query);
 	void removeQuery(vk::Query *query);
diff --git a/src/Pipeline/ComputeProgram.cpp b/src/Pipeline/ComputeProgram.cpp
index d142bb8..4c433e4 100644
--- a/src/Pipeline/ComputeProgram.cpp
+++ b/src/Pipeline/ComputeProgram.cpp
@@ -189,10 +189,10 @@
 }
 
 void ComputeProgram::run(
-    vk::DescriptorSet::Array const &descriptorSetObjects,
-    vk::DescriptorSet::Bindings const &descriptorSets,
-    vk::DescriptorSet::DynamicOffsets const &descriptorDynamicOffsets,
-    vk::Pipeline::PushConstantStorage const &pushConstants,
+    const vk::DescriptorSet::Array &descriptorSetObjects,
+    const vk::DescriptorSet::Bindings &descriptorSets,
+    const vk::DescriptorSet::DynamicOffsets &descriptorDynamicOffsets,
+    const vk::Pipeline::PushConstantStorage &pushConstants,
     uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
     uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
 {
diff --git a/src/Pipeline/ComputeProgram.hpp b/src/Pipeline/ComputeProgram.hpp
index 9af300c..4260f80 100644
--- a/src/Pipeline/ComputeProgram.hpp
+++ b/src/Pipeline/ComputeProgram.hpp
@@ -56,10 +56,10 @@
 
 	// run executes the compute shader routine for all workgroups.
 	void run(
-	    vk::DescriptorSet::Array const &descriptorSetObjects,
-	    vk::DescriptorSet::Bindings const &descriptorSetBindings,
-	    vk::DescriptorSet::DynamicOffsets const &descriptorDynamicOffsets,
-	    vk::Pipeline::PushConstantStorage const &pushConstants,
+	    const vk::DescriptorSet::Array &descriptorSetObjects,
+	    const vk::DescriptorSet::Bindings &descriptorSetBindings,
+	    const vk::DescriptorSet::DynamicOffsets &descriptorDynamicOffsets,
+	    const vk::Pipeline::PushConstantStorage &pushConstants,
 	    uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
 	    uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
 
diff --git a/src/Pipeline/ShaderCore.cpp b/src/Pipeline/ShaderCore.cpp
index 1c12a06..1ce4980 100644
--- a/src/Pipeline/ShaderCore.cpp
+++ b/src/Pipeline/ShaderCore.cpp
@@ -914,7 +914,7 @@
 	return As<Float4>((linear & As<Int4>(lc)) | (~linear & As<Int4>(ec)));  // TODO: IfThenElse()
 }
 
-rr::RValue<SIMD::Float> Sign(rr::RValue<SIMD::Float> const &val)
+rr::RValue<SIMD::Float> Sign(const rr::RValue<SIMD::Float> &val)
 {
 	return rr::As<SIMD::Float>((rr::As<SIMD::UInt>(val) & SIMD::UInt(0x80000000)) | SIMD::UInt(0x3f800000));
 }
@@ -922,7 +922,7 @@
 // Returns the <whole, frac> of val.
 // Both whole and frac will have the same sign as val.
 std::pair<rr::RValue<SIMD::Float>, rr::RValue<SIMD::Float>>
-Modf(rr::RValue<SIMD::Float> const &val)
+Modf(const rr::RValue<SIMD::Float> &val)
 {
 	auto abs = Abs(val);
 	auto sign = Sign(val);
@@ -932,7 +932,7 @@
 }
 
 // Returns the number of 1s in bits, per lane.
-SIMD::UInt CountBits(rr::RValue<SIMD::UInt> const &bits)
+SIMD::UInt CountBits(const rr::RValue<SIMD::UInt> &bits)
 {
 	// TODO: Add an intrinsic to reactor. Even if there isn't a
 	// single vector instruction, there may be target-dependent
@@ -948,13 +948,13 @@
 
 // Returns 1 << bits.
 // If the resulting bit overflows a 32 bit integer, 0 is returned.
-rr::RValue<SIMD::UInt> NthBit32(rr::RValue<SIMD::UInt> const &bits)
+rr::RValue<SIMD::UInt> NthBit32(const rr::RValue<SIMD::UInt> &bits)
 {
 	return ((SIMD::UInt(1) << bits) & CmpLT(bits, SIMD::UInt(32)));
 }
 
 // Returns bitCount number of of 1's starting from the LSB.
-rr::RValue<SIMD::UInt> Bitmask32(rr::RValue<SIMD::UInt> const &bitCount)
+rr::RValue<SIMD::UInt> Bitmask32(const rr::RValue<SIMD::UInt> &bitCount)
 {
 	return NthBit32(bitCount) - SIMD::UInt(1);
 }
@@ -962,7 +962,7 @@
 // Returns y if y < x; otherwise result is x.
 // If one operand is a NaN, the other operand is the result.
 // If both operands are NaN, the result is a NaN.
-rr::RValue<SIMD::Float> NMin(rr::RValue<SIMD::Float> const &x, rr::RValue<SIMD::Float> const &y)
+rr::RValue<SIMD::Float> NMin(const rr::RValue<SIMD::Float> &x, const rr::RValue<SIMD::Float> &y)
 {
 	auto xIsNan = IsNan(x);
 	auto yIsNan = IsNan(y);
@@ -978,7 +978,7 @@
 // Returns y if y > x; otherwise result is x.
 // If one operand is a NaN, the other operand is the result.
 // If both operands are NaN, the result is a NaN.
-rr::RValue<SIMD::Float> NMax(rr::RValue<SIMD::Float> const &x, rr::RValue<SIMD::Float> const &y)
+rr::RValue<SIMD::Float> NMax(const rr::RValue<SIMD::Float> &x, const rr::RValue<SIMD::Float> &y)
 {
 	auto xIsNan = IsNan(x);
 	auto yIsNan = IsNan(y);
@@ -993,27 +993,27 @@
 
 // Returns the determinant of a 2x2 matrix.
 rr::RValue<SIMD::Float> Determinant(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b,
-    rr::RValue<SIMD::Float> const &c, rr::RValue<SIMD::Float> const &d)
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b,
+    const rr::RValue<SIMD::Float> &c, const rr::RValue<SIMD::Float> &d)
 {
 	return a * d - b * c;
 }
 
 // Returns the determinant of a 3x3 matrix.
 rr::RValue<SIMD::Float> Determinant(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b, rr::RValue<SIMD::Float> const &c,
-    rr::RValue<SIMD::Float> const &d, rr::RValue<SIMD::Float> const &e, rr::RValue<SIMD::Float> const &f,
-    rr::RValue<SIMD::Float> const &g, rr::RValue<SIMD::Float> const &h, rr::RValue<SIMD::Float> const &i)
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b, const rr::RValue<SIMD::Float> &c,
+    const rr::RValue<SIMD::Float> &d, const rr::RValue<SIMD::Float> &e, const rr::RValue<SIMD::Float> &f,
+    const rr::RValue<SIMD::Float> &g, const rr::RValue<SIMD::Float> &h, const rr::RValue<SIMD::Float> &i)
 {
 	return a * e * i + b * f * g + c * d * h - c * e * g - b * d * i - a * f * h;
 }
 
 // Returns the determinant of a 4x4 matrix.
 rr::RValue<SIMD::Float> Determinant(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b, rr::RValue<SIMD::Float> const &c, rr::RValue<SIMD::Float> const &d,
-    rr::RValue<SIMD::Float> const &e, rr::RValue<SIMD::Float> const &f, rr::RValue<SIMD::Float> const &g, rr::RValue<SIMD::Float> const &h,
-    rr::RValue<SIMD::Float> const &i, rr::RValue<SIMD::Float> const &j, rr::RValue<SIMD::Float> const &k, rr::RValue<SIMD::Float> const &l,
-    rr::RValue<SIMD::Float> const &m, rr::RValue<SIMD::Float> const &n, rr::RValue<SIMD::Float> const &o, rr::RValue<SIMD::Float> const &p)
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b, const rr::RValue<SIMD::Float> &c, const rr::RValue<SIMD::Float> &d,
+    const rr::RValue<SIMD::Float> &e, const rr::RValue<SIMD::Float> &f, const rr::RValue<SIMD::Float> &g, const rr::RValue<SIMD::Float> &h,
+    const rr::RValue<SIMD::Float> &i, const rr::RValue<SIMD::Float> &j, const rr::RValue<SIMD::Float> &k, const rr::RValue<SIMD::Float> &l,
+    const rr::RValue<SIMD::Float> &m, const rr::RValue<SIMD::Float> &n, const rr::RValue<SIMD::Float> &o, const rr::RValue<SIMD::Float> &p)
 {
 	return a * Determinant(f, g, h,
 	                       j, k, l,
@@ -1031,8 +1031,8 @@
 
 // Returns the inverse of a 2x2 matrix.
 std::array<rr::RValue<SIMD::Float>, 4> MatrixInverse(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b,
-    rr::RValue<SIMD::Float> const &c, rr::RValue<SIMD::Float> const &d)
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b,
+    const rr::RValue<SIMD::Float> &c, const rr::RValue<SIMD::Float> &d)
 {
 	auto s = SIMD::Float(1.0f) / Determinant(a, b, c, d);
 	return { { s * d, -s * b, -s * c, s * a } };
@@ -1040,9 +1040,9 @@
 
 // Returns the inverse of a 3x3 matrix.
 std::array<rr::RValue<SIMD::Float>, 9> MatrixInverse(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b, rr::RValue<SIMD::Float> const &c,
-    rr::RValue<SIMD::Float> const &d, rr::RValue<SIMD::Float> const &e, rr::RValue<SIMD::Float> const &f,
-    rr::RValue<SIMD::Float> const &g, rr::RValue<SIMD::Float> const &h, rr::RValue<SIMD::Float> const &i)
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b, const rr::RValue<SIMD::Float> &c,
+    const rr::RValue<SIMD::Float> &d, const rr::RValue<SIMD::Float> &e, const rr::RValue<SIMD::Float> &f,
+    const rr::RValue<SIMD::Float> &g, const rr::RValue<SIMD::Float> &h, const rr::RValue<SIMD::Float> &i)
 {
 	auto s = SIMD::Float(1.0f) / Determinant(
 	                                 a, b, c,
@@ -1064,10 +1064,10 @@
 
 // Returns the inverse of a 4x4 matrix.
 std::array<rr::RValue<SIMD::Float>, 16> MatrixInverse(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b, rr::RValue<SIMD::Float> const &c, rr::RValue<SIMD::Float> const &d,
-    rr::RValue<SIMD::Float> const &e, rr::RValue<SIMD::Float> const &f, rr::RValue<SIMD::Float> const &g, rr::RValue<SIMD::Float> const &h,
-    rr::RValue<SIMD::Float> const &i, rr::RValue<SIMD::Float> const &j, rr::RValue<SIMD::Float> const &k, rr::RValue<SIMD::Float> const &l,
-    rr::RValue<SIMD::Float> const &m, rr::RValue<SIMD::Float> const &n, rr::RValue<SIMD::Float> const &o, rr::RValue<SIMD::Float> const &p)
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b, const rr::RValue<SIMD::Float> &c, const rr::RValue<SIMD::Float> &d,
+    const rr::RValue<SIMD::Float> &e, const rr::RValue<SIMD::Float> &f, const rr::RValue<SIMD::Float> &g, const rr::RValue<SIMD::Float> &h,
+    const rr::RValue<SIMD::Float> &i, const rr::RValue<SIMD::Float> &j, const rr::RValue<SIMD::Float> &k, const rr::RValue<SIMD::Float> &l,
+    const rr::RValue<SIMD::Float> &m, const rr::RValue<SIMD::Float> &n, const rr::RValue<SIMD::Float> &o, const rr::RValue<SIMD::Float> &p)
 {
 	auto s = SIMD::Float(1.0f) / Determinant(
 	                                 a, b, c, d,
diff --git a/src/Pipeline/ShaderCore.hpp b/src/Pipeline/ShaderCore.hpp
index 3f1427e..c49b01f 100644
--- a/src/Pipeline/ShaderCore.hpp
+++ b/src/Pipeline/ShaderCore.hpp
@@ -187,86 +187,86 @@
 Float4 sRGBtoLinear(const Float4 &c);
 
 template<typename T>
-inline rr::RValue<T> AndAll(rr::RValue<T> const &mask);
+inline rr::RValue<T> AndAll(const rr::RValue<T> &mask);
 
 template<typename T>
-inline rr::RValue<T> OrAll(rr::RValue<T> const &mask);
+inline rr::RValue<T> OrAll(const rr::RValue<T> &mask);
 
-rr::RValue<SIMD::Float> Sign(rr::RValue<SIMD::Float> const &val);
+rr::RValue<SIMD::Float> Sign(const rr::RValue<SIMD::Float> &val);
 
 // Returns the <whole, frac> of val.
 // Both whole and frac will have the same sign as val.
 std::pair<rr::RValue<SIMD::Float>, rr::RValue<SIMD::Float>>
-Modf(rr::RValue<SIMD::Float> const &val);
+Modf(const rr::RValue<SIMD::Float> &val);
 
 // Returns the number of 1s in bits, per lane.
-SIMD::UInt CountBits(rr::RValue<SIMD::UInt> const &bits);
+SIMD::UInt CountBits(const rr::RValue<SIMD::UInt> &bits);
 
 // Returns 1 << bits.
 // If the resulting bit overflows a 32 bit integer, 0 is returned.
-rr::RValue<SIMD::UInt> NthBit32(rr::RValue<SIMD::UInt> const &bits);
+rr::RValue<SIMD::UInt> NthBit32(const rr::RValue<SIMD::UInt> &bits);
 
 // Returns bitCount number of of 1's starting from the LSB.
-rr::RValue<SIMD::UInt> Bitmask32(rr::RValue<SIMD::UInt> const &bitCount);
+rr::RValue<SIMD::UInt> Bitmask32(const rr::RValue<SIMD::UInt> &bitCount);
 
 // Computes `a * b + c`, which may be fused into one operation to produce a higher-precision result.
 rr::RValue<SIMD::Float> FMA(
-    rr::RValue<SIMD::Float> const &a,
-    rr::RValue<SIMD::Float> const &b,
-    rr::RValue<SIMD::Float> const &c);
+    const rr::RValue<SIMD::Float> &a,
+    const rr::RValue<SIMD::Float> &b,
+    const rr::RValue<SIMD::Float> &c);
 
 // Returns y if y < x; otherwise result is x.
 // If one operand is a NaN, the other operand is the result.
 // If both operands are NaN, the result is a NaN.
-rr::RValue<SIMD::Float> NMin(rr::RValue<SIMD::Float> const &x, rr::RValue<SIMD::Float> const &y);
+rr::RValue<SIMD::Float> NMin(const rr::RValue<SIMD::Float> &x, const rr::RValue<SIMD::Float> &y);
 
 // Returns y if y > x; otherwise result is x.
 // If one operand is a NaN, the other operand is the result.
 // If both operands are NaN, the result is a NaN.
-rr::RValue<SIMD::Float> NMax(rr::RValue<SIMD::Float> const &x, rr::RValue<SIMD::Float> const &y);
+rr::RValue<SIMD::Float> NMax(const rr::RValue<SIMD::Float> &x, const rr::RValue<SIMD::Float> &y);
 
 // Returns the determinant of a 2x2 matrix.
 rr::RValue<SIMD::Float> Determinant(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b,
-    rr::RValue<SIMD::Float> const &c, rr::RValue<SIMD::Float> const &d);
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b,
+    const rr::RValue<SIMD::Float> &c, const rr::RValue<SIMD::Float> &d);
 
 // Returns the determinant of a 3x3 matrix.
 rr::RValue<SIMD::Float> Determinant(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b, rr::RValue<SIMD::Float> const &c,
-    rr::RValue<SIMD::Float> const &d, rr::RValue<SIMD::Float> const &e, rr::RValue<SIMD::Float> const &f,
-    rr::RValue<SIMD::Float> const &g, rr::RValue<SIMD::Float> const &h, rr::RValue<SIMD::Float> const &i);
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b, const rr::RValue<SIMD::Float> &c,
+    const rr::RValue<SIMD::Float> &d, const rr::RValue<SIMD::Float> &e, const rr::RValue<SIMD::Float> &f,
+    const rr::RValue<SIMD::Float> &g, const rr::RValue<SIMD::Float> &h, const rr::RValue<SIMD::Float> &i);
 
 // Returns the determinant of a 4x4 matrix.
 rr::RValue<SIMD::Float> Determinant(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b, rr::RValue<SIMD::Float> const &c, rr::RValue<SIMD::Float> const &d,
-    rr::RValue<SIMD::Float> const &e, rr::RValue<SIMD::Float> const &f, rr::RValue<SIMD::Float> const &g, rr::RValue<SIMD::Float> const &h,
-    rr::RValue<SIMD::Float> const &i, rr::RValue<SIMD::Float> const &j, rr::RValue<SIMD::Float> const &k, rr::RValue<SIMD::Float> const &l,
-    rr::RValue<SIMD::Float> const &m, rr::RValue<SIMD::Float> const &n, rr::RValue<SIMD::Float> const &o, rr::RValue<SIMD::Float> const &p);
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b, const rr::RValue<SIMD::Float> &c, const rr::RValue<SIMD::Float> &d,
+    const rr::RValue<SIMD::Float> &e, const rr::RValue<SIMD::Float> &f, const rr::RValue<SIMD::Float> &g, const rr::RValue<SIMD::Float> &h,
+    const rr::RValue<SIMD::Float> &i, const rr::RValue<SIMD::Float> &j, const rr::RValue<SIMD::Float> &k, const rr::RValue<SIMD::Float> &l,
+    const rr::RValue<SIMD::Float> &m, const rr::RValue<SIMD::Float> &n, const rr::RValue<SIMD::Float> &o, const rr::RValue<SIMD::Float> &p);
 
 // Returns the inverse of a 2x2 matrix.
 std::array<rr::RValue<SIMD::Float>, 4> MatrixInverse(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b,
-    rr::RValue<SIMD::Float> const &c, rr::RValue<SIMD::Float> const &d);
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b,
+    const rr::RValue<SIMD::Float> &c, const rr::RValue<SIMD::Float> &d);
 
 // Returns the inverse of a 3x3 matrix.
 std::array<rr::RValue<SIMD::Float>, 9> MatrixInverse(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b, rr::RValue<SIMD::Float> const &c,
-    rr::RValue<SIMD::Float> const &d, rr::RValue<SIMD::Float> const &e, rr::RValue<SIMD::Float> const &f,
-    rr::RValue<SIMD::Float> const &g, rr::RValue<SIMD::Float> const &h, rr::RValue<SIMD::Float> const &i);
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b, const rr::RValue<SIMD::Float> &c,
+    const rr::RValue<SIMD::Float> &d, const rr::RValue<SIMD::Float> &e, const rr::RValue<SIMD::Float> &f,
+    const rr::RValue<SIMD::Float> &g, const rr::RValue<SIMD::Float> &h, const rr::RValue<SIMD::Float> &i);
 
 // Returns the inverse of a 4x4 matrix.
 std::array<rr::RValue<SIMD::Float>, 16> MatrixInverse(
-    rr::RValue<SIMD::Float> const &a, rr::RValue<SIMD::Float> const &b, rr::RValue<SIMD::Float> const &c, rr::RValue<SIMD::Float> const &d,
-    rr::RValue<SIMD::Float> const &e, rr::RValue<SIMD::Float> const &f, rr::RValue<SIMD::Float> const &g, rr::RValue<SIMD::Float> const &h,
-    rr::RValue<SIMD::Float> const &i, rr::RValue<SIMD::Float> const &j, rr::RValue<SIMD::Float> const &k, rr::RValue<SIMD::Float> const &l,
-    rr::RValue<SIMD::Float> const &m, rr::RValue<SIMD::Float> const &n, rr::RValue<SIMD::Float> const &o, rr::RValue<SIMD::Float> const &p);
+    const rr::RValue<SIMD::Float> &a, const rr::RValue<SIMD::Float> &b, const rr::RValue<SIMD::Float> &c, const rr::RValue<SIMD::Float> &d,
+    const rr::RValue<SIMD::Float> &e, const rr::RValue<SIMD::Float> &f, const rr::RValue<SIMD::Float> &g, const rr::RValue<SIMD::Float> &h,
+    const rr::RValue<SIMD::Float> &i, const rr::RValue<SIMD::Float> &j, const rr::RValue<SIMD::Float> &k, const rr::RValue<SIMD::Float> &l,
+    const rr::RValue<SIMD::Float> &m, const rr::RValue<SIMD::Float> &n, const rr::RValue<SIMD::Float> &o, const rr::RValue<SIMD::Float> &p);
 
 ////////////////////////////////////////////////////////////////////////////
 // Inline functions
 ////////////////////////////////////////////////////////////////////////////
 
 template<typename T>
-inline rr::RValue<T> AndAll(rr::RValue<T> const &mask)
+inline rr::RValue<T> AndAll(const rr::RValue<T> &mask)
 {
 	T v1 = mask;               // [x]    [y]    [z]    [w]
 	T v2 = v1.xzxz & v1.ywyw;  // [xy]   [zw]   [xy]   [zw]
@@ -274,7 +274,7 @@
 }
 
 template<typename T>
-inline rr::RValue<T> OrAll(rr::RValue<T> const &mask)
+inline rr::RValue<T> OrAll(const rr::RValue<T> &mask)
 {
 	T v1 = mask;               // [x]    [y]    [z]    [w]
 	T v2 = v1.xzxz | v1.ywyw;  // [xy]   [zw]   [xy]   [zw]
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index dae58d1..3e3e9c6 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -30,7 +30,7 @@
 SpirvShader::SpirvShader(
     VkShaderStageFlagBits pipelineStage,
     const char *entryPointName,
-    SpirvBinary const &insns,
+    const SpirvBinary &insns,
     const vk::RenderPass *renderPass,
     uint32_t subpassIndex,
     bool robustBufferAccess,
@@ -974,7 +974,7 @@
 	{
 		object.kind = Object::Kind::InterfaceVariable;
 		VisitInterface(resultId,
-		               [&userDefinedInterface](Decorations const &d, AttribType type) {
+		               [&userDefinedInterface](const Decorations &d, AttribType type) {
 			               // Populate a single scalar slot in the interface from a collection of decorations and the intended component type.
 			               int32_t scalarSlot = (d.Location << 2) | d.Component;
 			               ASSERT(scalarSlot >= 0 &&
@@ -1841,7 +1841,7 @@
 	}
 }
 
-void SpirvShader::emit(SpirvRoutine *routine, RValue<SIMD::Int> const &activeLaneMask, RValue<SIMD::Int> const &storesAndAtomicsMask, const vk::DescriptorSet::Bindings &descriptorSets, unsigned int multiSampleCount) const
+void SpirvShader::emit(SpirvRoutine *routine, const RValue<SIMD::Int> &activeLaneMask, const RValue<SIMD::Int> &storesAndAtomicsMask, const vk::DescriptorSet::Bindings &descriptorSets, unsigned int multiSampleCount) const
 {
 	EmitState state(routine, entryPoint, activeLaneMask, storesAndAtomicsMask, descriptorSets, multiSampleCount);
 
@@ -2748,7 +2748,7 @@
 					auto &dst = routine->getVariable(insn.resultId());
 					int offset = 0;
 					VisitInterface(insn.resultId(),
-					               [&](Decorations const &d, AttribType type) {
+					               [&](const Decorations &d, AttribType type) {
 						               auto scalarSlot = d.Location << 2 | d.Component;
 						               routine->outputs[scalarSlot] = dst[offset++];
 					               });
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index b25c131..aa82774 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -127,9 +127,9 @@
 	}
 
 	// No copy/move construction or assignment
-	Intermediate(Intermediate const &) = delete;
+	Intermediate(const Intermediate &) = delete;
 	Intermediate(Intermediate &&) = delete;
-	Intermediate &operator=(Intermediate const &) = delete;
+	Intermediate &operator=(const Intermediate &) = delete;
 	Intermediate &operator=(Intermediate &&) = delete;
 
 	const uint32_t componentCount;
@@ -173,7 +173,7 @@
 	{
 	public:
 		InsnIterator() = default;
-		InsnIterator(InsnIterator const &other) = default;
+		InsnIterator(const InsnIterator &other) = default;
 		InsnIterator &operator=(const InsnIterator &other) = default;
 
 		explicit InsnIterator(SpirvBinary::const_iterator iter)
@@ -260,12 +260,12 @@
 			return static_cast<uint32_t>(iter - other.iter);
 		}
 
-		bool operator==(InsnIterator const &other) const
+		bool operator==(const InsnIterator &other) const
 		{
 			return iter == other.iter;
 		}
 
-		bool operator!=(InsnIterator const &other) const
+		bool operator!=(const InsnIterator &other) const
 		{
 			return iter != other.iter;
 		}
@@ -487,7 +487,7 @@
 		// notPassingThrough.
 		bool ExistsPath(Block::ID from, Block::ID to, Block::ID notPassingThrough) const;
 
-		Block const &getBlock(Block::ID id) const
+		const Block &getBlock(Block::ID id) const
 		{
 			auto it = blocks.find(id);
 			ASSERT_MSG(it != blocks.end(), "Unknown block %d", id.value());
@@ -653,7 +653,7 @@
 
 	SpirvShader(VkShaderStageFlagBits stage,
 	            const char *entryPointName,
-	            SpirvBinary const &insns,
+	            const SpirvBinary &insns,
 	            const vk::RenderPass *renderPass,
 	            uint32_t subpassIndex,
 	            bool robustBufferAccess,
@@ -862,9 +862,9 @@
 		{
 		}
 
-		Decorations(Decorations const &) = default;
+		Decorations(const Decorations &) = default;
 
-		void Apply(Decorations const &src);
+		void Apply(const Decorations &src);
 
 		void Apply(spv::Decoration decoration, uint32_t arg);
 	};
@@ -878,7 +878,7 @@
 		int32_t Binding = -1;
 		int32_t InputAttachmentIndex = -1;
 
-		void Apply(DescriptorDecorations const &src);
+		void Apply(const DescriptorDecorations &src);
 	};
 
 	std::unordered_map<Object::ID, DescriptorDecorations> descriptorDecorations;
@@ -943,7 +943,7 @@
 	std::vector<InterfaceComponent> outputs;
 
 	void emitProlog(SpirvRoutine *routine) const;
-	void emit(SpirvRoutine *routine, RValue<SIMD::Int> const &activeLaneMask, RValue<SIMD::Int> const &storesAndAtomicsMask, const vk::DescriptorSet::Bindings &descriptorSets, unsigned int multiSampleCount = 0) const;
+	void emit(SpirvRoutine *routine, const RValue<SIMD::Int> &activeLaneMask, const RValue<SIMD::Int> &storesAndAtomicsMask, const vk::DescriptorSet::Bindings &descriptorSets, unsigned int multiSampleCount = 0) const;
 	void emitEpilog(SpirvRoutine *routine) const;
 	void clearPhis(SpirvRoutine *routine) const;
 
@@ -1168,7 +1168,7 @@
 			return it.first->second;
 		}
 
-		Intermediate const &getIntermediate(Object::ID id) const
+		const Intermediate &getIntermediate(Object::ID id) const
 		{
 			auto it = intermediates.find(id);
 			ASSERT_MSG(it != intermediates.end(), "Unknown intermediate %d", id.value());
@@ -1181,7 +1181,7 @@
 			ASSERT_MSG(added, "Pointer %d created twice", id.value());
 		}
 
-		SIMD::Pointer const &getPointer(Object::ID id) const
+		const SIMD::Pointer &getPointer(Object::ID id) const
 		{
 			auto it = pointers.find(id);
 			ASSERT_MSG(it != pointers.end(), "Unknown pointer %d", id.value());
@@ -1194,7 +1194,7 @@
 			ASSERT_MSG(added, "Sampled image %d created twice", id.value());
 		}
 
-		SampledImagePointer const &getSampledImage(Object::ID id) const
+		const SampledImagePointer &getSampledImage(Object::ID id) const
 		{
 			auto it = sampledImages.find(id);
 			ASSERT_MSG(it != sampledImages.end(), "Unknown sampled image %d", id.value());
@@ -1206,7 +1206,7 @@
 			return sampledImages.find(id) != sampledImages.end();
 		}
 
-		SIMD::Pointer const &getImage(Object::ID id) const
+		const SIMD::Pointer &getImage(Object::ID id) const
 		{
 			return isSampledImage(id) ? getSampledImage(id) : getPointer(id);
 		}
@@ -1310,45 +1310,45 @@
 
 	RR_PRINT_ONLY(friend struct rr::PrintValue::Ty<Operand>;)
 
-	Type const &getType(Type::ID id) const
+	const Type &getType(Type::ID id) const
 	{
 		auto it = types.find(id);
 		ASSERT_MSG(it != types.end(), "Unknown type %d", id.value());
 		return it->second;
 	}
 
-	Type const &getType(const Object &object) const
+	const Type &getType(const Object &object) const
 	{
 		return getType(object.typeId());
 	}
 
-	Object const &getObject(Object::ID id) const
+	const Object &getObject(Object::ID id) const
 	{
 		auto it = defs.find(id);
 		ASSERT_MSG(it != defs.end(), "Unknown object %d", id.value());
 		return it->second;
 	}
 
-	Type const &getObjectType(Object::ID id) const
+	const Type &getObjectType(Object::ID id) const
 	{
 		return getType(getObject(id));
 	}
 
-	Function const &getFunction(Function::ID id) const
+	const Function &getFunction(Function::ID id) const
 	{
 		auto it = functions.find(id);
 		ASSERT_MSG(it != functions.end(), "Unknown function %d", id.value());
 		return it->second;
 	}
 
-	String const &getString(StringID id) const
+	const String &getString(StringID id) const
 	{
 		auto it = strings.find(id);
 		ASSERT_MSG(it != strings.end(), "Unknown string %d", id.value());
 		return it->second;
 	}
 
-	Extension const &getExtension(Extension::ID id) const
+	const Extension &getExtension(Extension::ID id) const
 	{
 		auto it = extensionsByID.find(id);
 		ASSERT_MSG(it != extensionsByID.end(), "Unknown extension %d", id.value());
@@ -1456,7 +1456,7 @@
 	Pointer<Byte> lookupSamplerFunction(Pointer<Byte> imageDescriptor, Pointer<Byte> samplerDescriptor, const ImageInstruction &instruction, EmitState *state) const;
 	void callSamplerFunction(Pointer<Byte> samplerFunction, Array<SIMD::Float> &out, Pointer<Byte> imageDescriptor, const ImageInstruction &instruction, EmitState *state) const;
 
-	void GetImageDimensions(EmitState const *state, Type const &resultTy, Object::ID imageId, Object::ID lodId, Intermediate &dst) const;
+	void GetImageDimensions(EmitState const *state, const Type &resultTy, Object::ID imageId, Object::ID lodId, Intermediate &dst) const;
 	struct TexelAddressData
 	{
 		bool isArrayed;
@@ -1482,7 +1482,7 @@
 		AtSample,
 		AtOffset,
 	};
-	SIMD::Float EmitInterpolate(SIMD::Pointer const &ptr, int32_t location, Object::ID paramId,
+	SIMD::Float EmitInterpolate(const SIMD::Pointer &ptr, int32_t location, Object::ID paramId,
 	                            uint32_t component, EmitState *state, InterpolationType type) const;
 
 	// Helper for implementing OpStore, which doesn't take an InsnIterator so it
@@ -1496,7 +1496,7 @@
 	// StorePhi updates the phi's alloca storage value using the incoming
 	// values from blocks that are both in the OpPhi instruction and in
 	// filter.
-	void StorePhi(Block::ID blockID, InsnIterator insn, EmitState *state, std::unordered_set<SpirvShader::Block::ID> const &filter) const;
+	void StorePhi(Block::ID blockID, InsnIterator insn, EmitState *state, const std::unordered_set<SpirvShader::Block::ID> &filter) const;
 
 	// Emits a rr::Fence for the given MemorySemanticsMask.
 	void Fence(spv::MemorySemanticsMask semantics) const;
@@ -1522,10 +1522,10 @@
 	static bool HasTypeAndResult(spv::Op op);
 
 	// Helper as we often need to take dot products as part of doing other things.
-	static SIMD::Float FDot(unsigned numComponents, Operand const &x, Operand const &y);
-	static SIMD::Int SDot(unsigned numComponents, Operand const &x, Operand const &y, Operand const *accum);
-	static SIMD::UInt UDot(unsigned numComponents, Operand const &x, Operand const &y, Operand const *accum);
-	static SIMD::Int SUDot(unsigned numComponents, Operand const &x, Operand const &y, Operand const *accum);
+	static SIMD::Float FDot(unsigned numComponents, const Operand &x, const Operand &y);
+	static SIMD::Int SDot(unsigned numComponents, const Operand &x, const Operand &y, Operand const *accum);
+	static SIMD::UInt UDot(unsigned numComponents, const Operand &x, const Operand &y, Operand const *accum);
+	static SIMD::Int SUDot(unsigned numComponents, const Operand &x, const Operand &y, Operand const *accum);
 	static SIMD::Int AddSat(RValue<SIMD::Int> a, RValue<SIMD::Int> b);
 	static SIMD::UInt AddSat(RValue<SIMD::UInt> a, RValue<SIMD::UInt> b);
 
diff --git a/src/Pipeline/SpirvShaderArithmetic.cpp b/src/Pipeline/SpirvShaderArithmetic.cpp
index 86acfe6..57a075e 100644
--- a/src/Pipeline/SpirvShaderArithmetic.cpp
+++ b/src/Pipeline/SpirvShaderArithmetic.cpp
@@ -628,7 +628,7 @@
 	return EmitResult::Continue;
 }
 
-SIMD::Float SpirvShader::FDot(unsigned numComponents, Operand const &x, Operand const &y)
+SIMD::Float SpirvShader::FDot(unsigned numComponents, const Operand &x, const Operand &y)
 {
 	SIMD::Float d = x.Float(0) * y.Float(0);
 
@@ -640,7 +640,7 @@
 	return d;
 }
 
-SIMD::Int SpirvShader::SDot(unsigned numComponents, Operand const &x, Operand const &y, Operand const *accum)
+SIMD::Int SpirvShader::SDot(unsigned numComponents, const Operand &x, const Operand &y, Operand const *accum)
 {
 	SIMD::Int d(0);
 
@@ -676,7 +676,7 @@
 	return d;
 }
 
-SIMD::UInt SpirvShader::UDot(unsigned numComponents, Operand const &x, Operand const &y, Operand const *accum)
+SIMD::UInt SpirvShader::UDot(unsigned numComponents, const Operand &x, const Operand &y, Operand const *accum)
 {
 	SIMD::UInt d(0);
 
@@ -712,7 +712,7 @@
 	return d;
 }
 
-SIMD::Int SpirvShader::SUDot(unsigned numComponents, Operand const &x, Operand const &y, Operand const *accum)
+SIMD::Int SpirvShader::SUDot(unsigned numComponents, const Operand &x, const Operand &y, Operand const *accum)
 {
 	SIMD::Int d(0);
 
diff --git a/src/Pipeline/SpirvShaderControlFlow.cpp b/src/Pipeline/SpirvShaderControlFlow.cpp
index 2377ef5..0c70a62 100644
--- a/src/Pipeline/SpirvShaderControlFlow.cpp
+++ b/src/Pipeline/SpirvShaderControlFlow.cpp
@@ -692,7 +692,7 @@
 	}
 }
 
-void SpirvShader::StorePhi(Block::ID currentBlock, InsnIterator insn, EmitState *state, std::unordered_set<SpirvShader::Block::ID> const &filter) const
+void SpirvShader::StorePhi(Block::ID currentBlock, InsnIterator insn, EmitState *state, const std::unordered_set<SpirvShader::Block::ID> &filter) const
 {
 	auto typeId = Type::ID(insn.word(1));
 	auto type = getType(typeId);
diff --git a/src/Pipeline/SpirvShaderDebugger.cpp b/src/Pipeline/SpirvShaderDebugger.cpp
index 0bd8368..e35aaf3 100644
--- a/src/Pipeline/SpirvShaderDebugger.cpp
+++ b/src/Pipeline/SpirvShaderDebugger.cpp
@@ -1185,7 +1185,7 @@
 	LocalVariableValue(debug::LocalVariable *variable, State const *const state, int lane);
 
 	LocalVariableValue(
-	    std::shared_ptr<const Shared> const &shared,
+	    const std::shared_ptr<const Shared> &shared,
 	    debug::Type const *ty,
 	    debug::LocalVariable::ValueNode const *node);
 
@@ -2020,7 +2020,7 @@
 {}
 
 sw::SpirvShader::Impl::Debugger::LocalVariableValue::LocalVariableValue(
-    std::shared_ptr<const Shared> const &shared,
+    const std::shared_ptr<const Shared> &shared,
     debug::Type const *ty,
     debug::LocalVariable::ValueNode const *node)
     : shared(shared)
diff --git a/src/Pipeline/SpirvShaderGLSLstd450.cpp b/src/Pipeline/SpirvShaderGLSLstd450.cpp
index c69c001..61c2e42 100644
--- a/src/Pipeline/SpirvShaderGLSLstd450.cpp
+++ b/src/Pipeline/SpirvShaderGLSLstd450.cpp
@@ -978,7 +978,7 @@
 	return interpolant;
 }
 
-SIMD::Float SpirvShader::EmitInterpolate(SIMD::Pointer const &ptr, int32_t location, Object::ID paramId,
+SIMD::Float SpirvShader::EmitInterpolate(const SIMD::Pointer &ptr, int32_t location, Object::ID paramId,
                                          uint32_t component, EmitState *state, InterpolationType type) const
 {
 	uint32_t interpolant = (location * 4);
diff --git a/src/Pipeline/SpirvShaderImage.cpp b/src/Pipeline/SpirvShaderImage.cpp
index 3d96ed4..addcd1f 100644
--- a/src/Pipeline/SpirvShaderImage.cpp
+++ b/src/Pipeline/SpirvShaderImage.cpp
@@ -526,7 +526,7 @@
 	return EmitResult::Continue;
 }
 
-void SpirvShader::GetImageDimensions(EmitState const *state, Type const &resultTy, Object::ID imageId, Object::ID lodId, Intermediate &dst) const
+void SpirvShader::GetImageDimensions(EmitState const *state, const Type &resultTy, Object::ID imageId, Object::ID lodId, Intermediate &dst) const
 {
 	auto routine = state->routine;
 	auto &image = getObject(imageId);
diff --git a/src/Pipeline/SpirvShaderMemory.cpp b/src/Pipeline/SpirvShaderMemory.cpp
index 476ecf4..d8a7873 100644
--- a/src/Pipeline/SpirvShaderMemory.cpp
+++ b/src/Pipeline/SpirvShaderMemory.cpp
@@ -174,7 +174,7 @@
 				auto &dst = routine->getVariable(resultId);
 				int offset = 0;
 				VisitInterface(resultId,
-				               [&](Decorations const &d, AttribType type) {
+				               [&](const Decorations &d, AttribType type) {
 					               auto scalarSlot = d.Location << 2 | d.Component;
 					               dst[offset++] = routine->inputs[scalarSlot];
 				               });
diff --git a/src/Reactor/LLVMReactorDebugInfo.cpp b/src/Reactor/LLVMReactorDebugInfo.cpp
index e0d2da7..79ea930 100644
--- a/src/Reactor/LLVMReactorDebugInfo.cpp
+++ b/src/Reactor/LLVMReactorDebugInfo.cpp
@@ -150,7 +150,7 @@
 	}
 }
 
-void DebugInfo::syncScope(Backtrace const &backtrace)
+void DebugInfo::syncScope(const Backtrace &backtrace)
 {
 	using namespace ::llvm;
 
diff --git a/src/Reactor/LLVMReactorDebugInfo.hpp b/src/Reactor/LLVMReactorDebugInfo.hpp
index 677e81b..5538c8b 100644
--- a/src/Reactor/LLVMReactorDebugInfo.hpp
+++ b/src/Reactor/LLVMReactorDebugInfo.hpp
@@ -151,7 +151,7 @@
 	LineTokens const *getOrParseFileTokens(const char *path);
 
 	// Synchronizes diScope with the current backtrace.
-	void syncScope(Backtrace const &backtrace);
+	void syncScope(const Backtrace &backtrace);
 
 	IRBuilder *builder;
 	llvm::LLVMContext *context;
diff --git a/src/Vulkan/Debug/Value.hpp b/src/Vulkan/Debug/Value.hpp
index 6deb3d6..9e8cf61 100644
--- a/src/Vulkan/Debug/Value.hpp
+++ b/src/Vulkan/Debug/Value.hpp
@@ -85,7 +85,7 @@
 	std::string get(const FormatFlags &fmt = FormatFlags::Default) override { return std::to_string(ref); }
 
 private:
-	T const &ref;
+	const T &ref;
 };
 
 // Struct is an implementation of Value that delegates calls to children() on to
diff --git a/src/Vulkan/VkDescriptorSetLayout.cpp b/src/Vulkan/VkDescriptorSetLayout.cpp
index 41f39ad..beae8c1 100644
--- a/src/Vulkan/VkDescriptorSetLayout.cpp
+++ b/src/Vulkan/VkDescriptorSetLayout.cpp
@@ -335,7 +335,7 @@
 	mipmap.sampleMax = sw::uint4(sampleMax);
 }
 
-void DescriptorSetLayout::WriteDescriptorSet(Device *device, DescriptorSet *dstSet, VkDescriptorUpdateTemplateEntry const &entry, const char *src)
+void DescriptorSetLayout::WriteDescriptorSet(Device *device, DescriptorSet *dstSet, const VkDescriptorUpdateTemplateEntry &entry, const char *src)
 {
 	DescriptorSetLayout *dstLayout = dstSet->header.layout;
 	const DescriptorSetLayout::Binding &binding = dstLayout->bindings[entry.dstBinding];
diff --git a/src/Vulkan/VkDescriptorSetLayout.hpp b/src/Vulkan/VkDescriptorSetLayout.hpp
index 10ac3b3..a0c0227 100644
--- a/src/Vulkan/VkDescriptorSetLayout.hpp
+++ b/src/Vulkan/VkDescriptorSetLayout.hpp
@@ -104,7 +104,7 @@
 	static void WriteDescriptorSet(Device *device, const VkWriteDescriptorSet &descriptorWrites);
 	static void CopyDescriptorSet(const VkCopyDescriptorSet &descriptorCopies);
 
-	static void WriteDescriptorSet(Device *device, DescriptorSet *dstSet, VkDescriptorUpdateTemplateEntry const &entry, char const *src);
+	static void WriteDescriptorSet(Device *device, DescriptorSet *dstSet, const VkDescriptorUpdateTemplateEntry &entry, char const *src);
 
 	void initialize(DescriptorSet *descriptorSet, uint32_t variableDescriptorCount);
 
diff --git a/src/Vulkan/VkPipeline.cpp b/src/Vulkan/VkPipeline.cpp
index 99c6580..9eea52a 100644
--- a/src/Vulkan/VkPipeline.cpp
+++ b/src/Vulkan/VkPipeline.cpp
@@ -660,10 +660,10 @@
 
 void ComputePipeline::run(uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
                           uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ,
-                          vk::DescriptorSet::Array const &descriptorSetObjects,
-                          vk::DescriptorSet::Bindings const &descriptorSets,
-                          vk::DescriptorSet::DynamicOffsets const &descriptorDynamicOffsets,
-                          vk::Pipeline::PushConstantStorage const &pushConstants)
+                          const vk::DescriptorSet::Array &descriptorSetObjects,
+                          const vk::DescriptorSet::Bindings &descriptorSets,
+                          const vk::DescriptorSet::DynamicOffsets &descriptorDynamicOffsets,
+                          const vk::Pipeline::PushConstantStorage &pushConstants)
 {
 	ASSERT_OR_RETURN(program != nullptr);
 	program->run(
diff --git a/src/Vulkan/VkPipeline.hpp b/src/Vulkan/VkPipeline.hpp
index c3322cd..65b221b 100644
--- a/src/Vulkan/VkPipeline.hpp
+++ b/src/Vulkan/VkPipeline.hpp
@@ -147,10 +147,10 @@
 
 	void run(uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ,
 	         uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ,
-	         vk::DescriptorSet::Array const &descriptorSetObjects,
-	         vk::DescriptorSet::Bindings const &descriptorSets,
-	         vk::DescriptorSet::DynamicOffsets const &descriptorDynamicOffsets,
-	         vk::Pipeline::PushConstantStorage const &pushConstants);
+	         const vk::DescriptorSet::Array &descriptorSetObjects,
+	         const vk::DescriptorSet::Bindings &descriptorSets,
+	         const vk::DescriptorSet::DynamicOffsets &descriptorDynamicOffsets,
+	         const vk::Pipeline::PushConstantStorage &pushConstants);
 
 protected:
 	std::shared_ptr<sw::SpirvShader> shader;
diff --git a/src/Vulkan/VkRenderPass.hpp b/src/Vulkan/VkRenderPass.hpp
index e90274e..7de4c6c 100644
--- a/src/Vulkan/VkRenderPass.hpp
+++ b/src/Vulkan/VkRenderPass.hpp
@@ -48,7 +48,7 @@
 		return subpassCount;
 	}
 
-	VkSubpassDescription const &getSubpass(uint32_t subpassIndex) const
+	const VkSubpassDescription &getSubpass(uint32_t subpassIndex) const
 	{
 		return subpasses[subpassIndex];
 	}
diff --git a/src/WSI/VkSwapchainKHR.hpp b/src/WSI/VkSwapchainKHR.hpp
index 31e0cf0..1c4a61e 100644
--- a/src/WSI/VkSwapchainKHR.hpp
+++ b/src/WSI/VkSwapchainKHR.hpp
@@ -45,7 +45,7 @@
 	VkResult getNextImage(uint64_t timeout, BinarySemaphore *semaphore, Fence *fence, uint32_t *pImageIndex);
 
 	VkResult present(uint32_t index);
-	PresentImage const &getImage(uint32_t imageIndex) { return images[imageIndex]; }
+	const PresentImage &getImage(uint32_t imageIndex) { return images[imageIndex]; }
 
 private:
 	SurfaceKHR *surface = nullptr;
diff --git a/tests/ReactorUnitTests/ReactorUnitTests.cpp b/tests/ReactorUnitTests/ReactorUnitTests.cpp
index e17ea6d..6407e60 100644
--- a/tests/ReactorUnitTests/ReactorUnitTests.cpp
+++ b/tests/ReactorUnitTests/ReactorUnitTests.cpp
@@ -3545,7 +3545,7 @@
 	{
 		for(int l = 0; l < numLoops; l++)
 		{
-			auto const &result = results[t * numLoops + l];
+			const auto &result = results[t * numLoops + l];
 			EXPECT_EQ(result.yieldReturns[0], true);
 			EXPECT_EQ(result.yieldValues[0], t);
 			EXPECT_EQ(result.yieldReturns[1], true);
