Consistently format const references

This change replaces occurrences of `T const &x` with `const T &x`.

The latter was already the predominant style. While consistency is a
strong motivation for this change in itself, this arguably also
improves readability.

The common argument for the former order of the const qualifier is that
compilers primarily perform type parsing in right-to-left order. While
there are cases where we need to pay special attention to that, types
like `unsigned int *` read more naturally as a pointer to an unsigned
integer than `int unsigned *`, i.e. we mentally group the modifier with
the basic type and read this part left-to-right. The same justification
applies to `const int &` as being easily correctly read as a reference
to a constant integer.

This also avoids confusion with `int &const` which is invalid since a
reference variable is always immutable. However `int *const` exists and
means something else than `int const *`. Writing the latter as
`const int *` makes them easier to discern.

Bug: code style formatting
Change-Id: I17188aa5ea4a20b81375e87754b64a3bcc84f0b5
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/68670
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
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);