diff --git a/src/Device/Clipper.cpp b/src/Device/Clipper.cpp
index f011507..5ab5534 100644
--- a/src/Device/Clipper.cpp
+++ b/src/Device/Clipper.cpp
@@ -264,7 +264,7 @@
 unsigned int Clipper::ComputeClipFlags(const float4 &v, bool depthClipEnable)
 {
 	int depthClipFlags = ((v.z > v.w) ? CLIP_FAR : 0) |
-					     ((v.z < 0) ? CLIP_NEAR : 0);
+	                     ((v.z < 0) ? CLIP_NEAR : 0);
 	return ((v.x > v.w) ? CLIP_RIGHT : 0) |
 	       ((v.y > v.w) ? CLIP_TOP : 0) |
 	       ((v.x < -v.w) ? CLIP_LEFT : 0) |
diff --git a/src/Pipeline/SpirvShaderControlFlow.cpp b/src/Pipeline/SpirvShaderControlFlow.cpp
index 68375be..7893023 100644
--- a/src/Pipeline/SpirvShaderControlFlow.cpp
+++ b/src/Pipeline/SpirvShaderControlFlow.cpp
@@ -717,7 +717,7 @@
 {
 	if(semantics == spv::MemorySemanticsMaskNone)
 	{
-		return;  //no-op
+		return;  // no-op
 	}
 	rr::Fence(MemoryOrder(semantics));
 }
diff --git a/src/System/LRUCache.hpp b/src/System/LRUCache.hpp
index ff18671..1c24490 100644
--- a/src/System/LRUCache.hpp
+++ b/src/System/LRUCache.hpp
@@ -93,7 +93,7 @@
 	LRUCache &operator=(const LRUCache &) = delete;
 	LRUCache &operator=(LRUCache &&) = delete;
 
-	//Keyed holds a key. See find() for more information.
+	// Keyed holds a key. See find() for more information.
 	struct Keyed
 	{
 		Key key = {};
diff --git a/src/Vulkan/VkSemaphore.hpp b/src/Vulkan/VkSemaphore.hpp
index c188a93..aab89e2 100644
--- a/src/Vulkan/VkSemaphore.hpp
+++ b/src/Vulkan/VkSemaphore.hpp
@@ -50,7 +50,7 @@
 	}
 
 	VkSemaphoreType getSemaphoreType() const;
-	//static size_t ComputeRequiredAllocationSize(const VkSemaphoreCreateInfo *pCreateInfo);
+	// static size_t ComputeRequiredAllocationSize(const VkSemaphoreCreateInfo *pCreateInfo);
 
 protected:
 	VkSemaphoreType type;
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 6d53ce4..0568fa6 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -365,7 +365,7 @@
 	{ { VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME, VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION } },
 	{ { VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION } },
 	{ { VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION } },
-	{ { VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION} },
+	{ { VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION } },
 	// Only 1.1 core version of this is supported. The extension has additional requirements
 	//{{ VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION }},
 	{ { VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION } },
diff --git a/src/WSI/DirectFBSurfaceEXT.hpp b/src/WSI/DirectFBSurfaceEXT.hpp
index e259b10..cceab0c 100644
--- a/src/WSI/DirectFBSurfaceEXT.hpp
+++ b/src/WSI/DirectFBSurfaceEXT.hpp
@@ -47,4 +47,4 @@
 };
 
 }  // namespace vk
-#endif  //SWIFTSHADER_DIRECTFBSURFACEEXT_HPP
+#endif  // SWIFTSHADER_DIRECTFBSURFACEEXT_HPP
diff --git a/src/WSI/DisplaySurfaceKHR.hpp b/src/WSI/DisplaySurfaceKHR.hpp
index 553945b..05a25eb 100644
--- a/src/WSI/DisplaySurfaceKHR.hpp
+++ b/src/WSI/DisplaySurfaceKHR.hpp
@@ -60,4 +60,4 @@
 };
 
 }  // namespace vk
-#endif  //SWIFTSHADER_DISPLAYSURFACEKHR_HPP
+#endif  // SWIFTSHADER_DISPLAYSURFACEKHR_HPP
diff --git a/src/WSI/HeadlessSurfaceKHR.hpp b/src/WSI/HeadlessSurfaceKHR.hpp
index b8b3b1e..395b144 100644
--- a/src/WSI/HeadlessSurfaceKHR.hpp
+++ b/src/WSI/HeadlessSurfaceKHR.hpp
@@ -34,4 +34,4 @@
 };
 
 }  // namespace vk
-#endif  //SWIFTSHADER_HEADLESSSURFACEKHR_HPP
+#endif  // SWIFTSHADER_HEADLESSSURFACEKHR_HPP
diff --git a/src/WSI/MetalSurface.hpp b/src/WSI/MetalSurface.hpp
index 2b56e77..0e2229d 100644
--- a/src/WSI/MetalSurface.hpp
+++ b/src/WSI/MetalSurface.hpp
@@ -65,4 +65,4 @@
 #endif
 
 }  // namespace vk
-#endif  //SWIFTSHADER_METALSURFACE_HPP
+#endif  // SWIFTSHADER_METALSURFACE_HPP
diff --git a/src/WSI/VkSurfaceKHR.hpp b/src/WSI/VkSurfaceKHR.hpp
index 2c7e423..8508455 100644
--- a/src/WSI/VkSurfaceKHR.hpp
+++ b/src/WSI/VkSurfaceKHR.hpp
@@ -109,4 +109,4 @@
 
 }  // namespace vk
 
-#endif  //SWIFTSHADER_VKSURFACEKHR_HPP_
+#endif  // SWIFTSHADER_VKSURFACEKHR_HPP_
diff --git a/src/WSI/VkSwapchainKHR.hpp b/src/WSI/VkSwapchainKHR.hpp
index b4dcbad..31e0cf0 100644
--- a/src/WSI/VkSwapchainKHR.hpp
+++ b/src/WSI/VkSwapchainKHR.hpp
@@ -63,4 +63,4 @@
 
 }  // namespace vk
 
-#endif  //SWIFTSHADER_VKSWAPCHAINKHR_HPP
+#endif  // SWIFTSHADER_VKSWAPCHAINKHR_HPP
diff --git a/src/WSI/WaylandSurfaceKHR.hpp b/src/WSI/WaylandSurfaceKHR.hpp
index 818436b..17abe89 100644
--- a/src/WSI/WaylandSurfaceKHR.hpp
+++ b/src/WSI/WaylandSurfaceKHR.hpp
@@ -54,4 +54,4 @@
 };
 
 }  // namespace vk
-#endif  //SWIFTSHADER_WAYLANDSURFACEKHR_HPP
+#endif  // SWIFTSHADER_WAYLANDSURFACEKHR_HPP
diff --git a/src/WSI/Win32SurfaceKHR.hpp b/src/WSI/Win32SurfaceKHR.hpp
index 68a717e..32cfaec 100644
--- a/src/WSI/Win32SurfaceKHR.hpp
+++ b/src/WSI/Win32SurfaceKHR.hpp
@@ -60,4 +60,4 @@
 };
 
 }  // namespace vk
-#endif  //SWIFTSHADER_WIN32SURFACEKHR_HPP
+#endif  // SWIFTSHADER_WIN32SURFACEKHR_HPP
diff --git a/src/WSI/XcbSurfaceKHR.hpp b/src/WSI/XcbSurfaceKHR.hpp
index 4d4e218..91c1d7e 100644
--- a/src/WSI/XcbSurfaceKHR.hpp
+++ b/src/WSI/XcbSurfaceKHR.hpp
@@ -49,4 +49,4 @@
 };
 
 }  // namespace vk
-#endif  //SWIFTSHADER_XCBSURFACEKHR_HPP
+#endif  // SWIFTSHADER_XCBSURFACEKHR_HPP
diff --git a/src/WSI/XlibSurfaceKHR.hpp b/src/WSI/XlibSurfaceKHR.hpp
index 4d26173..fbba62a 100644
--- a/src/WSI/XlibSurfaceKHR.hpp
+++ b/src/WSI/XlibSurfaceKHR.hpp
@@ -49,4 +49,4 @@
 };
 
 }  // namespace vk
-#endif  //SWIFTSHADER_XLIBSURFACEKHR_HPP
+#endif  // SWIFTSHADER_XLIBSURFACEKHR_HPP
diff --git a/src/clang-format-all.sh b/src/clang-format-all.sh
index d2cc316..80b7057 100755
--- a/src/clang-format-all.sh
+++ b/src/clang-format-all.sh
@@ -1,3 +1,5 @@
+#! /usr/bin/env sh
+
 SRC_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
 ROOT_DIR="$( cd "${SRC_DIR}/.." >/dev/null 2>&1 && pwd )"
 TESTS_DIR="$( cd "${ROOT_DIR}/tests" >/dev/null 2>&1 && pwd )"
@@ -5,10 +7,45 @@
 CLANG_FORMAT=${CLANG_FORMAT:-clang-format}
 ${CLANG_FORMAT} --version
 
-for DIR in "${SRC_DIR}/Device" "${SRC_DIR}/Pipeline" "${SRC_DIR}/Reactor" "${SRC_DIR}/System" "${SRC_DIR}/Vulkan" "${SRC_DIR}/WSI" "${TESTS_DIR}"
+show_help()
+{
+# Tells cat to stop reading file when EOF is detected
+cat << EOF
+Usage: ./clang-format-all.sh [-ah]
+Format files in the SwiftShader repository
+-h, --help      Display this message and exit
+-a, --all       Format all files (default is to format only files active in a git CL)
+EOF
+# cat finishes printing
+}
+
+while [[ $# -gt 0 ]]
 do
-    # Double clang-format, as it seems that one pass isn't always enough
-    find ${DIR} -iname "*.hpp" -o -iname "*.cpp" -o -iname "*.inl" | xargs ${CLANG_FORMAT} -i -style=file
-    find ${DIR} -iname "*.hpp" -o -iname "*.cpp" -o -iname "*.inl" | xargs ${CLANG_FORMAT} -i -style=file
+    case $1 in
+        -a|--all)
+            all=1
+            shift
+            ;;
+        -h|--help)
+            show_help
+            exit 0
+            ;;
+    esac
 done
 
+if [[ $all -eq 1 ]]
+then
+    for DIR in "${SRC_DIR}/Device" "${SRC_DIR}/Pipeline" "${SRC_DIR}/Reactor" "${SRC_DIR}/System" "${SRC_DIR}/Vulkan" "${SRC_DIR}/WSI" "${TESTS_DIR}"
+    do
+        # Double clang-format, as it seems that one pass isn't always enough
+        find ${DIR} -iname "*.hpp" -o -iname "*.cpp" -o -iname "*.inl" | xargs ${CLANG_FORMAT} -i -style=file
+        find ${DIR} -iname "*.hpp" -o -iname "*.cpp" -o -iname "*.inl" | xargs ${CLANG_FORMAT} -i -style=file
+    done
+else
+    BASEDIR=$(git rev-parse --show-toplevel)
+    FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -v '\.sh')
+    for FILE in $FILES
+    do
+        ${CLANG_FORMAT} -i -style=file "$BASEDIR/$FILE"
+    done
+fi
diff --git a/tests/ReactorUnitTests/ReactorUnitTests.cpp b/tests/ReactorUnitTests/ReactorUnitTests.cpp
index e52d060..79fd5d4 100644
--- a/tests/ReactorUnitTests/ReactorUnitTests.cpp
+++ b/tests/ReactorUnitTests/ReactorUnitTests.cpp
@@ -637,7 +637,7 @@
 {
 	FunctionT<int(int)> function;
 	{
-		//Int b = function.Arg<0>();
+		// Int b = function.Arg<0>();
 
 		Int b;
 		Pointer<Int> p = &b;
diff --git a/tests/VulkanUnitTests/BasicTests.cpp b/tests/VulkanUnitTests/BasicTests.cpp
index 4e9312c..9629212 100644
--- a/tests/VulkanUnitTests/BasicTests.cpp
+++ b/tests/VulkanUnitTests/BasicTests.cpp
@@ -115,70 +115,70 @@
 /*
 TEST_F(BasicTest, UnsupportedDeviceExtension_DISABLED)
 {
-	uint32_t apiVersion = 0;
-	VkResult result = driver.vkEnumerateInstanceVersion(&apiVersion);
+    uint32_t apiVersion = 0;
+    VkResult result = driver.vkEnumerateInstanceVersion(&apiVersion);
 
-	const VkInstanceCreateInfo createInfo = {
-		VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,  // sType
-		nullptr,                                 // pNext
-		0,                                       // flags
-		nullptr,                                 // pApplicationInfo
-		0,                                       // enabledLayerCount
-		nullptr,                                 // ppEnabledLayerNames
-		0,                                       // enabledExtensionCount
-		nullptr,                                 // ppEnabledExtensionNames
-	};
-	VkInstance instance = VK_NULL_HANDLE;
-	result = driver.vkCreateInstance(&createInfo, nullptr, &instance);
-	EXPECT_EQ(result, VK_SUCCESS);
+    const VkInstanceCreateInfo createInfo = {
+        VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,  // sType
+        nullptr,                                 // pNext
+        0,                                       // flags
+        nullptr,                                 // pApplicationInfo
+        0,                                       // enabledLayerCount
+        nullptr,                                 // ppEnabledLayerNames
+        0,                                       // enabledExtensionCount
+        nullptr,                                 // ppEnabledExtensionNames
+    };
+    VkInstance instance = VK_NULL_HANDLE;
+    result = driver.vkCreateInstance(&createInfo, nullptr, &instance);
+    EXPECT_EQ(result, VK_SUCCESS);
 
-	ASSERT_TRUE(driver.resolve(instance));
+    ASSERT_TRUE(driver.resolve(instance));
 
-	VkBaseInStructure unsupportedExt = { VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT, nullptr };
+    VkBaseInStructure unsupportedExt = { VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT, nullptr };
 
-	// Gather all physical devices
-	std::vector<VkPhysicalDevice> physicalDevices;
-	result = Device::GetPhysicalDevices(&driver, instance, physicalDevices);
-	EXPECT_EQ(result, VK_SUCCESS);
+    // Gather all physical devices
+    std::vector<VkPhysicalDevice> physicalDevices;
+    result = Device::GetPhysicalDevices(&driver, instance, physicalDevices);
+    EXPECT_EQ(result, VK_SUCCESS);
 
-	// Inspect each physical device's queue families for compute support.
-	for(auto physicalDevice : physicalDevices)
-	{
-		int queueFamilyIndex = Device::GetComputeQueueFamilyIndex(&driver, physicalDevice);
-		if(queueFamilyIndex < 0)
-		{
-			continue;
-		}
+    // Inspect each physical device's queue families for compute support.
+    for(auto physicalDevice : physicalDevices)
+    {
+        int queueFamilyIndex = Device::GetComputeQueueFamilyIndex(&driver, physicalDevice);
+        if(queueFamilyIndex < 0)
+        {
+            continue;
+        }
 
-		const float queuePrioritory = 1.0f;
-		const VkDeviceQueueCreateInfo deviceQueueCreateInfo = {
-			VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,  // sType
-			nullptr,                                     // pNext
-			0,                                           // flags
-			(uint32_t)queueFamilyIndex,                  // queueFamilyIndex
-			1,                                           // queueCount
-			&queuePrioritory,                            // pQueuePriorities
-		};
+        const float queuePrioritory = 1.0f;
+        const VkDeviceQueueCreateInfo deviceQueueCreateInfo = {
+            VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,  // sType
+            nullptr,                                     // pNext
+            0,                                           // flags
+            (uint32_t)queueFamilyIndex,                  // queueFamilyIndex
+            1,                                           // queueCount
+            &queuePrioritory,                            // pQueuePriorities
+        };
 
-		const VkDeviceCreateInfo deviceCreateInfo = {
-			VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,  // sType
-			&unsupportedExt,                       // pNext
-			0,                                     // flags
-			1,                                     // queueCreateInfoCount
-			&deviceQueueCreateInfo,                // pQueueCreateInfos
-			0,                                     // enabledLayerCount
-			nullptr,                               // ppEnabledLayerNames
-			0,                                     // enabledExtensionCount
-			nullptr,                               // ppEnabledExtensionNames
-			nullptr,                               // pEnabledFeatures
-		};
+        const VkDeviceCreateInfo deviceCreateInfo = {
+            VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,  // sType
+            &unsupportedExt,                       // pNext
+            0,                                     // flags
+            1,                                     // queueCreateInfoCount
+            &deviceQueueCreateInfo,                // pQueueCreateInfos
+            0,                                     // enabledLayerCount
+            nullptr,                               // ppEnabledLayerNames
+            0,                                     // enabledExtensionCount
+            nullptr,                               // ppEnabledExtensionNames
+            nullptr,                               // pEnabledFeatures
+        };
 
-		VkDevice device;
-		result = driver.vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &device);
-		EXPECT_EQ(result, VK_SUCCESS);
-		driver.vkDestroyDevice(device, nullptr);
-	}
+        VkDevice device;
+        result = driver.vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &device);
+        EXPECT_EQ(result, VK_SUCCESS);
+        driver.vkDestroyDevice(device, nullptr);
+    }
 
-	driver.vkDestroyInstance(instance, nullptr);
+    driver.vkDestroyInstance(instance, nullptr);
 }
 */
diff --git a/tests/VulkanWrapper/Buffer.cpp b/tests/VulkanWrapper/Buffer.cpp
index 93e6b0e..6997969 100644
--- a/tests/VulkanWrapper/Buffer.cpp
+++ b/tests/VulkanWrapper/Buffer.cpp
@@ -29,7 +29,7 @@
 
 	vk::MemoryAllocateInfo allocInfo{};
 	allocInfo.allocationSize = memRequirements.size;
-	allocInfo.memoryTypeIndex = 0;  //TODO: getMemoryTypeIndex(memRequirements.memoryTypeBits, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
+	allocInfo.memoryTypeIndex = 0;  // TODO: getMemoryTypeIndex(memRequirements.memoryTypeBits, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
 
 	bufferMemory = device.allocateMemory(allocInfo);
 	device.bindBufferMemory(buffer, bufferMemory, 0);
diff --git a/tests/VulkanWrapper/VulkanTester.cpp b/tests/VulkanWrapper/VulkanTester.cpp
index 585aebf..18ded58 100644
--- a/tests/VulkanWrapper/VulkanTester.cpp
+++ b/tests/VulkanWrapper/VulkanTester.cpp
@@ -282,7 +282,7 @@
 			   return strcmp(layer, lp.layerName) == 0;
 		   }) != layerProperties.end())
 		{
-			//std::cout << "Enabled layer: " << layer << std::endl;
+			// std::cout << "Enabled layer: " << layer << std::endl;
 			layers.push_back(layer);
 		}
 	};
@@ -318,7 +318,7 @@
 		        VkDebugUtilsMessageTypeFlagsEXT messageTypes,
 		        const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData,
 		        void *pUserData) -> VkBool32 {
-			//assert(false);
+			// assert(false);
 			std::cerr << "[DebugInfoCallback] " << pCallbackData->pMessage << std::endl;
 			return VK_FALSE;
 		};
