VkPipeline: Fix unsigned integer underflows in computePrimitiveCount()

Tests: dEQP-VK.draw.basic_draw.*
Change-Id: I609e22601c4aae1bdebaca6d42d33754cfaa57bb
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31840
Presubmit-Ready: Ben Clayton <bclayton@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Chris Forbes <chrisforbes@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Vulkan/VkPipeline.cpp b/src/Vulkan/VkPipeline.cpp
index 3d9040c..831838e 100644
--- a/src/Vulkan/VkPipeline.cpp
+++ b/src/Vulkan/VkPipeline.cpp
@@ -485,13 +485,13 @@
 	case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:
 		return vertexCount / 2;
 	case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:
-		return vertexCount - 1;
+		return std::max<uint32_t>(vertexCount, 1) - 1;
 	case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:
 		return vertexCount / 3;
 	case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:
-		return vertexCount - 2;
+		return std::max<uint32_t>(vertexCount, 2) - 2;
 	case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:
-		return vertexCount - 2;
+		return std::max<uint32_t>(vertexCount, 2) - 2;
 	default:
 		UNIMPLEMENTED("context.topology %d", int(context.topology));
 	}