Remove the legacy GLSL ES vertex shader fuzzer

Chromium no longer runs it now that we're switching to SwANGLE. Note
that ANGLE still has a fuzzer for its GLSL translator.

Bug: swiftshader:86
Change-Id: I581c17b40e4c1f58ebacd089e6f2eff4b53c8751
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/57669
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Commit-Queue: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 3bf24fe..f6d86c9 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -75,20 +75,6 @@
   }
 }
 
-source_set("vertex_routine_fuzzer") {
-  sources = [ "tests/fuzzers/VertexRoutineFuzzer.cpp" ]
-  if (is_win) {
-    cflags = [
-      "/wd4201",  # nameless struct/union
-      "/wd4065",  # switch statement contains 'default' but no 'case' labels
-      "/wd5030",  # attribute is not recognized
-    ]
-  }
-  include_dirs = [ "src/" ]
-  deps = [ "src/OpenGL/libGLESv2:swiftshader_libGLESv2_static" ]
-  configs += [ ":swiftshader_config" ]
-}
-
 group("swiftshader") {
   data_deps = [
     "src/OpenGL/libEGL:swiftshader_libEGL",
diff --git a/tests/fuzzers/VertexRoutineFuzzer.cpp b/tests/fuzzers/VertexRoutineFuzzer.cpp
deleted file mode 100644
index e2d3c35..0000000
--- a/tests/fuzzers/VertexRoutineFuzzer.cpp
+++ /dev/null
@@ -1,244 +0,0 @@
-// Copyright 2017 The SwiftShader Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "OpenGL/compiler/InitializeGlobals.h"
-#include "OpenGL/compiler/InitializeParseContext.h"
-#include "OpenGL/compiler/TranslatorASM.h"
-
-// TODO: Debug macros of the GLSL compiler clash with core SwiftShader's.
-// They should not be exposed through the interface headers above.
-#undef ASSERT
-#undef UNIMPLEMENTED
-
-#include "Renderer/VertexProcessor.hpp"
-#include "Shader/VertexProgram.hpp"
-
-#include <cassert>
-#include <cstdint>
-#include <memory>
-
-namespace {
-
-// TODO(cwallez@google.com): Like in ANGLE, disable most of the pool allocator for fuzzing
-// This is a helper class to make sure all the resources used by the compiler are initialized
-class ScopedPoolAllocatorAndTLS
-{
-public:
-	ScopedPoolAllocatorAndTLS()
-	{
-		InitializeParseContextIndex();
-		InitializePoolIndex();
-		SetGlobalPoolAllocator(&allocator);
-	}
-	~ScopedPoolAllocatorAndTLS()
-	{
-		SetGlobalPoolAllocator(nullptr);
-		FreePoolIndex();
-		FreeParseContextIndex();
-	}
-
-private:
-	TPoolAllocator allocator;
-};
-
-// Trivial implementation of the glsl::Shader interface that fakes being an API-level
-// shader object.
-class FakeVS : public glsl::Shader
-{
-public:
-	FakeVS(sw::VertexShader *bytecode)
-	    : bytecode(bytecode)
-	{
-	}
-
-	sw::Shader *getShader() const override
-	{
-		return bytecode;
-	}
-	sw::VertexShader *getVertexShader() const override
-	{
-		return bytecode;
-	}
-
-private:
-	sw::VertexShader *bytecode;
-};
-
-}  // anonymous namespace
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
-{
-	// Data layout:
-	//
-	// byte: boolean states
-	// {
-	//   byte: stream type
-	//   byte: stream count and normalized
-	// } [MAX_VERTEX_INPUTS]
-	// {
-	//   byte[32]: reserved sampler state
-	// } [VERTEX_TEXTURE_IMAGE_UNITS]
-	//
-	// char source[] // null terminated
-	const size_t kHeaderSize = 1 + 2 * sw::MAX_VERTEX_INPUTS + 32 * sw::VERTEX_TEXTURE_IMAGE_UNITS;
-
-	if(size <= kHeaderSize)
-	{
-		return 0;
-	}
-
-	if(data[size - 1] != 0)
-	{
-		return 0;
-	}
-
-	std::unique_ptr<ScopedPoolAllocatorAndTLS> allocatorAndTLS(new ScopedPoolAllocatorAndTLS);
-	std::unique_ptr<sw::VertexShader> shader(new sw::VertexShader);
-	std::unique_ptr<FakeVS> fakeVS(new FakeVS(shader.get()));
-
-	std::unique_ptr<TranslatorASM> glslCompiler(new TranslatorASM(fakeVS.get(), GL_VERTEX_SHADER));
-
-	// TODO(cwallez@google.com): have a function to init to default values somewhere
-	ShBuiltInResources resources;
-	resources.MaxVertexAttribs = sw::MAX_VERTEX_INPUTS;
-	resources.MaxVertexUniformVectors = sw::VERTEX_UNIFORM_VECTORS - 3;
-	resources.MaxVaryingVectors = MIN(sw::MAX_VERTEX_OUTPUTS, sw::MAX_VERTEX_INPUTS);
-	resources.MaxVertexTextureImageUnits = sw::VERTEX_TEXTURE_IMAGE_UNITS;
-	resources.MaxCombinedTextureImageUnits = sw::TEXTURE_IMAGE_UNITS + sw::VERTEX_TEXTURE_IMAGE_UNITS;
-	resources.MaxTextureImageUnits = sw::TEXTURE_IMAGE_UNITS;
-	resources.MaxFragmentUniformVectors = sw::FRAGMENT_UNIFORM_VECTORS - 3;
-	resources.MaxDrawBuffers = sw::RENDERTARGETS;
-	resources.MaxVertexOutputVectors = 16;   // ???
-	resources.MaxFragmentInputVectors = 15;  // ???
-	resources.MinProgramTexelOffset = sw::MIN_PROGRAM_TEXEL_OFFSET;
-	resources.MaxProgramTexelOffset = sw::MAX_PROGRAM_TEXEL_OFFSET;
-	resources.OES_standard_derivatives = 1;
-	resources.OES_fragment_precision_high = 1;
-	resources.OES_EGL_image_external = 1;
-	resources.OES_EGL_image_external_essl3 = 1;
-	resources.EXT_draw_buffers = 1;
-	resources.ARB_texture_rectangle = 1;
-	resources.MaxCallStackDepth = 16;
-
-	glslCompiler->Init(resources);
-
-	const char *glslSource = reinterpret_cast<const char *>(data + kHeaderSize);
-	if(!glslCompiler->compile(&glslSource, 1, SH_OBJECT_CODE))
-	{
-		return 0;
-	}
-
-	std::unique_ptr<sw::VertexShader> bytecodeShader(new sw::VertexShader(fakeVS->getVertexShader()));
-
-	sw::VertexProcessor::State state;
-
-	state.textureSampling = bytecodeShader->containsTextureSampling();
-	state.positionRegister = bytecodeShader->getPositionRegister();
-	state.pointSizeRegister = bytecodeShader->getPointSizeRegister();
-
-	state.preTransformed = (data[0] & 0x01) != 0;
-	state.superSampling = (data[0] & 0x02) != 0;
-
-	state.transformFeedbackQueryEnabled = (data[0] & 0x08) != 0;
-	state.transformFeedbackEnabled = (data[0] & 0x10) != 0;
-	state.verticesPerPrimitive = 1 + ((data[0] & 0x20) != 0) + ((data[0] & 0x40) != 0);
-
-	if((data[0] & 0x80) != 0)  // Unused/reserved.
-	{
-		return 0;
-	}
-
-	constexpr int MAX_ATTRIBUTE_COMPONENTS = 4;
-
-	struct Stream
-	{
-		uint8_t count : BITS(MAX_ATTRIBUTE_COMPONENTS);
-		bool normalized : 1;
-		uint8_t reserved : 8 - BITS(MAX_ATTRIBUTE_COMPONENTS) - 1;
-	};
-
-	for(int i = 0; i < sw::MAX_VERTEX_INPUTS; i++)
-	{
-		sw::StreamType type = (sw::StreamType)data[1 + 2 * i + 0];
-		Stream stream = (Stream &)data[1 + 2 * i + 1];
-
-		if(type > sw::STREAMTYPE_LAST) return 0;
-		if(stream.count > MAX_ATTRIBUTE_COMPONENTS) return 0;
-		if(stream.reserved != 0) return 0;
-
-		state.input[i].type = type;
-		state.input[i].count = stream.count;
-		state.input[i].normalized = stream.normalized;
-		state.input[i].attribType = bytecodeShader->getAttribType(i);
-	}
-
-	for(unsigned int i = 0; i < sw::VERTEX_TEXTURE_IMAGE_UNITS; i++)
-	{
-		// TODO
-		//	if(bytecodeShader->usesSampler(i))
-		//	{
-		//		state.samplerState[i] = context->sampler[sw::TEXTURE_IMAGE_UNITS + i].samplerState();
-		//	}
-
-		for(int j = 0; j < 32; j++)
-		{
-			if(data[1 + 2 * sw::MAX_VERTEX_INPUTS + 32 * i + j] != 0)
-			{
-				return 0;
-			}
-		}
-	}
-
-	for(int i = 0; i < sw::MAX_VERTEX_OUTPUTS; i++)
-	{
-		state.output[i].xWrite = bytecodeShader->getOutput(i, 0).active();
-		state.output[i].yWrite = bytecodeShader->getOutput(i, 1).active();
-		state.output[i].zWrite = bytecodeShader->getOutput(i, 2).active();
-		state.output[i].wWrite = bytecodeShader->getOutput(i, 3).active();
-	}
-
-	sw::VertexProgram program(state, bytecodeShader.get());
-	program.generate();
-
-	auto routine = program("VertexRoutine");
-	assert(routine);
-	const void *entry = routine->getEntry();
-	assert(entry);
-	(void)entry;
-
-	return 0;
-}
-
-#if defined(FUZZER_STANDALONE_REPRODUCE)
-int main(int argc, char *argv[])
-{
-	FILE *file = fopen("clusterfuzz-testcase", "r");
-
-	fseek(file, 0L, SEEK_END);
-	long numbytes = ftell(file);
-	fseek(file, 0L, SEEK_SET);
-	uint8_t *buffer = (uint8_t *)calloc(numbytes, sizeof(uint8_t));
-	fread(buffer, sizeof(char), numbytes, file);
-	fclose(file);
-
-	while(true)
-	{
-		LLVMFuzzerTestOneInput(buffer, numbytes);
-	}
-
-	free(buffer);
-
-	return 0;
-}
-#endif