Add OpCopyLogical

This operand was added in SPIR-V 1.4. It allows copying from similar,
but inequal types. Otherwise it functions identically as OpCopyObject.

Tests: dEQP-VK.spirv_assembly.instruction.spirv1p4.opcopylogical.*
Bug: b/173046235
Change-Id: Ibf46185c79dde05f52743425b570d5ef978830cf
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/50508
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Sean Risser <srisser@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 0e2ac63..0f66987 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -673,6 +673,7 @@
 			case spv::OpGroupNonUniformLogicalOr:
 			case spv::OpGroupNonUniformLogicalXor:
 			case spv::OpCopyObject:
+			case spv::OpCopyLogical:
 			case spv::OpArrayLength:
 				// Instructions that yield an intermediate value or divergent pointer
 				DefineResult(insn);
@@ -1955,6 +1956,7 @@
 			return EmitSampledImageCombineOrSplit(insn, state);
 
 		case spv::OpCopyObject:
+		case spv::OpCopyLogical:
 			return EmitCopyObject(insn, state);
 
 		case spv::OpCopyMemory: