diff --git a/src/Vulkan/VkPipeline.cpp b/src/Vulkan/VkPipeline.cpp
index 0ff6777..7fad7b5 100644
--- a/src/Vulkan/VkPipeline.cpp
+++ b/src/Vulkan/VkPipeline.cpp
@@ -32,12 +32,13 @@
 
 namespace {
 
-// preprocessSpirv applies and freezes specializations into constants, and inlines all functions.
-sw::SpirvBinary preprocessSpirv(
-    sw::SpirvBinary const &code,
-    VkSpecializationInfo const *specializationInfo,
-    bool optimize)
+// optimizeSpirv() applies and freezes specializations into constants, and runs spirv-opt.
+sw::SpirvBinary optimizeSpirv(const vk::PipelineCache::SpirvBinaryKey &key)
 {
+	const sw::SpirvBinary &code = key.getInsns();
+	const VkSpecializationInfo *specializationInfo = key.getSpecializationInfo();
+	bool optimize = key.getOptimization();
+
 	spvtools::Optimizer opt{ vk::SPIRV_VERSION };
 
 	opt.SetMessageConsumer([](spv_message_level_t level, const char *source, const spv_position_t &position, const char *message) {
@@ -90,6 +91,7 @@
 
 	sw::SpirvBinary optimized;
 	opt.Run(code.data(), code.size(), &optimized, optimizerOptions);
+	ASSERT(optimized.size() > 0);
 
 	if(false)
 	{
@@ -105,14 +107,6 @@
 	return optimized;
 }
 
-sw::SpirvBinary optimizeSpirv(const vk::PipelineCache::SpirvShaderKey &key)
-{
-	auto code = preprocessSpirv(key.getInsns(), key.getSpecializationInfo(), key.getOptimization());
-	ASSERT(code.size() > 0);
-
-	return code;
-}
-
 std::shared_ptr<sw::ComputeProgram> createProgram(vk::Device *device, std::shared_ptr<sw::SpirvShader> shader, const vk::PipelineLayout *layout)
 {
 	MARL_SCOPED_EVENT("createProgram");
@@ -225,7 +219,7 @@
 		const bool optimize = !dbgctx;
 
 		const ShaderModule *module = vk::Cast(pStage->module);
-		const PipelineCache::SpirvShaderKey key(module->getCode(), pStage->pSpecializationInfo, optimize);
+		const PipelineCache::SpirvBinaryKey key(module->getCode(), pStage->pSpecializationInfo, optimize);
 
 		sw::SpirvBinary spirv;
 
@@ -282,7 +276,7 @@
 	// instructions.
 	const bool optimize = !dbgctx;
 
-	const PipelineCache::SpirvShaderKey shaderKey(module->getCode(), stage.pSpecializationInfo, optimize);
+	const PipelineCache::SpirvBinaryKey shaderKey(module->getCode(), stage.pSpecializationInfo, optimize);
 
 	sw::SpirvBinary spirv;
 
diff --git a/src/Vulkan/VkPipelineCache.cpp b/src/Vulkan/VkPipelineCache.cpp
index 506e670..817ee5c 100644
--- a/src/Vulkan/VkPipelineCache.cpp
+++ b/src/Vulkan/VkPipelineCache.cpp
@@ -18,7 +18,7 @@
 
 namespace vk {
 
-PipelineCache::SpirvShaderKey::SpirvShaderKey(const sw::SpirvBinary &insns,
+PipelineCache::SpirvBinaryKey::SpirvBinaryKey(const sw::SpirvBinary &insns,
                                               const vk::SpecializationInfo &specializationInfo,
                                               bool optimize)
     : insns(insns)
@@ -27,7 +27,7 @@
 {
 }
 
-bool PipelineCache::SpirvShaderKey::operator<(const SpirvShaderKey &other) const
+bool PipelineCache::SpirvBinaryKey::operator<(const SpirvBinaryKey &other) const
 {
 	if(insns.size() != other.insns.size())
 	{
diff --git a/src/Vulkan/VkPipelineCache.hpp b/src/Vulkan/VkPipelineCache.hpp
index 3b00cb6..195b284 100644
--- a/src/Vulkan/VkPipelineCache.hpp
+++ b/src/Vulkan/VkPipelineCache.hpp
@@ -53,13 +53,13 @@
 	VkResult getData(size_t *pDataSize, void *pData);
 	VkResult merge(uint32_t srcCacheCount, const VkPipelineCache *pSrcCaches);
 
-	struct SpirvShaderKey
+	struct SpirvBinaryKey
 	{
-		SpirvShaderKey(const sw::SpirvBinary &insns,
+		SpirvBinaryKey(const sw::SpirvBinary &insns,
 		               const vk::SpecializationInfo &specializationInfo,
 		               bool optimize);
 
-		bool operator<(const SpirvShaderKey &other) const;
+		bool operator<(const SpirvBinaryKey &other) const;
 
 		const sw::SpirvBinary &getInsns() const { return insns; }
 		const VkSpecializationInfo *getSpecializationInfo() const { return specializationInfo.get(); }
@@ -77,7 +77,7 @@
 	// Function must be a function of the signature:
 	//     sw::ShaderBinary()
 	template<typename Function>
-	inline sw::SpirvBinary getOrOptimizeSpirv(const PipelineCache::SpirvShaderKey &key, Function &&create);
+	inline sw::SpirvBinary getOrOptimizeSpirv(const PipelineCache::SpirvBinaryKey &key, Function &&create);
 
 	struct ComputeProgramKey
 	{
@@ -113,7 +113,7 @@
 	uint8_t *data = nullptr;
 
 	marl::mutex spirvShadersMutex;
-	std::map<SpirvShaderKey, sw::SpirvBinary> spirvShaders GUARDED_BY(spirvShadersMutex);
+	std::map<SpirvBinaryKey, sw::SpirvBinary> spirvShaders GUARDED_BY(spirvShadersMutex);
 
 	marl::mutex computeProgramsMutex;
 	std::map<ComputeProgramKey, std::shared_ptr<sw::ComputeProgram>> computePrograms GUARDED_BY(computeProgramsMutex);
@@ -142,7 +142,7 @@
 }
 
 template<typename Function>
-sw::SpirvBinary PipelineCache::getOrOptimizeSpirv(const PipelineCache::SpirvShaderKey &key, Function &&create)
+sw::SpirvBinary PipelineCache::getOrOptimizeSpirv(const PipelineCache::SpirvBinaryKey &key, Function &&create)
 {
 	marl::lock lock(spirvShadersMutex);
 
