Make sure invalid programs and shaders are invalid

Change-Id: If840c7bb15c0c531e71cc55a8dfbacccda6bfac9
diff --git a/modules/gles31/functional/es31fNegativeShaderApiTests.cpp b/modules/gles31/functional/es31fNegativeShaderApiTests.cpp
index 9f36f47..e33ecbf 100644
--- a/modules/gles31/functional/es31fNegativeShaderApiTests.cpp
+++ b/modules/gles31/functional/es31fNegativeShaderApiTests.cpp
@@ -125,10 +125,11 @@
 
 void compile_shader (NegativeTestContext& ctx)
 {
-	// \note Shader compilation must be supported.
+	const GLuint notAShader = ctx.glCreateShader(GL_VERTEX_SHADER);
+	ctx.glDeleteShader(notAShader);
 
 	ctx.beginSection("GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
-	ctx.glCompileShader(9);
+	ctx.glCompileShader(notAShader);
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -143,8 +144,11 @@
 
 void delete_shader (NegativeTestContext& ctx)
 {
+	const GLuint notAShader = ctx.glCreateShader(GL_VERTEX_SHADER);
+	ctx.glDeleteShader(notAShader);
+
 	ctx.beginSection("GL_INVALID_VALUE is generated if shader is not a value generated by OpenGL.");
-	ctx.glDeleteShader(9);
+	ctx.glDeleteShader(notAShader);
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 }
@@ -231,6 +235,12 @@
 	GLuint shader2 = ctx.glCreateShader(GL_VERTEX_SHADER);
 	GLuint program = ctx.glCreateProgram();
 
+	const GLuint notAShader = ctx.glCreateShader(GL_VERTEX_SHADER);
+	const GLuint notAProgram = ctx.glCreateProgram();
+
+	ctx.glDeleteShader(notAShader);
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.beginSection("GL_INVALID_OPERATION is generated if program is not a program object.");
 	ctx.glAttachShader(shader1, shader1);
 	ctx.expectError(GL_INVALID_OPERATION);
@@ -244,11 +254,11 @@
 	ctx.endSection();
 
 	ctx.beginSection("GL_INVALID_VALUE is generated if either program or shader is not a value generated by OpenGL.");
-	ctx.glAttachShader(program, -1);
+	ctx.glAttachShader(program, notAShader);
 	ctx.expectError(GL_INVALID_VALUE);
-	ctx.glAttachShader(-1, shader1);
+	ctx.glAttachShader(notAProgram, shader1);
 	ctx.expectError(GL_INVALID_VALUE);
-	ctx.glAttachShader(-1, -1);
+	ctx.glAttachShader(notAProgram, notAShader);
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -274,12 +284,18 @@
 	GLuint shader = ctx.glCreateShader(GL_VERTEX_SHADER);
 	GLuint program = ctx.glCreateProgram();
 
+	const GLuint notAShader = ctx.glCreateShader(GL_VERTEX_SHADER);
+	const GLuint notAProgram = ctx.glCreateProgram();
+
+	ctx.glDeleteShader(notAShader);
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.beginSection("GL_INVALID_VALUE is generated if either program or shader is not a value generated by OpenGL.");
-	ctx.glDetachShader(-1, shader);
+	ctx.glDetachShader(notAProgram, shader);
 	ctx.expectError(GL_INVALID_VALUE);
-	ctx.glDetachShader(program, -1);
+	ctx.glDetachShader(program, notAShader);
 	ctx.expectError(GL_INVALID_VALUE);
-	ctx.glDetachShader(-1, -1);
+	ctx.glDetachShader(notAProgram, notAShader);
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -308,8 +324,11 @@
 {
 	GLuint shader = ctx.glCreateShader(GL_VERTEX_SHADER);
 
+	const GLuint notAProgram = ctx.glCreateProgram();
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
-	ctx.glLinkProgram(-1);
+	ctx.glLinkProgram(notAProgram);
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -353,8 +372,11 @@
 {
 	GLuint shader = ctx.glCreateShader(GL_VERTEX_SHADER);
 
+	const GLuint notAProgram = ctx.glCreateProgram();
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.beginSection("GL_INVALID_VALUE is generated if program is neither 0 nor a value generated by OpenGL.");
-	ctx.glUseProgram(-1);
+	ctx.glUseProgram(notAProgram);
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -404,8 +426,11 @@
 {
 	GLuint shader = ctx.glCreateShader(GL_VERTEX_SHADER);
 
+	const GLuint notAProgram = ctx.glCreateProgram();
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
-	ctx.glDeleteProgram(-1);
+	ctx.glDeleteProgram(notAProgram);
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -421,8 +446,11 @@
 {
 	GLuint shader = ctx.glCreateShader(GL_VERTEX_SHADER);
 
+	const GLuint notAProgram = ctx.glCreateProgram();
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
-	ctx.glValidateProgram(-1);
+	ctx.glValidateProgram(notAProgram);
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -513,8 +541,11 @@
 	GLuint program	= ctx.glCreateProgram();
 	GLuint shader	= ctx.glCreateShader(GL_VERTEX_SHADER);
 
+	const GLuint notAProgram = ctx.glCreateProgram();
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.beginSection("GL_INVALID_VALUE is generated if program is not the name of an existing program object.");
-	ctx.glProgramParameteri(0, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
+	ctx.glProgramParameteri(notAProgram, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -809,6 +840,9 @@
 
 	glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
 
+	const GLuint notAProgram = ctx.glCreateProgram();
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.beginSection("GL_INVALID_OPERATION is generated if program has not been successfully linked.");
 	ctx.glBindAttribLocation		(programEmpty, 0, "test");
 	ctx.glGetAttribLocation			(programEmpty, "test");
@@ -821,7 +855,7 @@
 	ctx.expectError				(GL_NO_ERROR);
 	ctx.glGetAttribLocation			(program.getProgram(), "test");
 	ctx.expectError				(GL_NO_ERROR);
-	ctx.glGetAttribLocation			(-2, "test");
+	ctx.glGetAttribLocation			(notAProgram, "test");
 	ctx.expectError				(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -842,6 +876,9 @@
 
 	glu::ShaderProgram program(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
 
+	const GLuint notAProgram = ctx.glCreateProgram();
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.beginSection("GL_INVALID_OPERATION is generated if program has not been successfully linked.");
 	ctx.glGetUniformLocation(programEmpty, "test");
 	ctx.expectError(GL_INVALID_OPERATION);
@@ -849,7 +886,7 @@
 
 	ctx.beginSection("GL_INVALID_VALUE is generated if program is not a value generated by OpenGL.");
 	ctx.glUseProgram(program.getProgram());
-	ctx.glGetUniformLocation(-2, "test");
+	ctx.glGetUniformLocation(notAProgram, "test");
 	ctx.expectError(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -2142,6 +2179,9 @@
 	GLenum					type;
 	char					name[32];
 
+	const GLuint notAProgram = ctx.glCreateProgram();
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.glGenTransformFeedbacks				(1, &tfID);
 
 	ctx.glTransformFeedbackVaryings			(program.getProgram(), 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
@@ -2153,7 +2193,7 @@
 	ctx.expectError						(GL_NO_ERROR);
 
 	ctx.beginSection("GL_INVALID_VALUE is generated if program is not the name of a program object.");
-	ctx.glGetTransformFeedbackVarying		(-1, 0, 32, &length, &size, &type, &name[0]);
+	ctx.glGetTransformFeedbackVarying		(notAProgram, 0, 32, &length, &size, &type, &name[0]);
 	ctx.expectError						(GL_INVALID_VALUE);
 	ctx.endSection();
 
@@ -2175,21 +2215,23 @@
 void transform_feedback_varyings (NegativeTestContext& ctx)
 {
 	GLuint										tfID = 0;
-	GLuint shader								= -1;
+	GLuint shader								= ctx.glCreateShader(GL_VERTEX_SHADER);
 	glu::ShaderProgram program					(ctx.getRenderContext(), glu::makeVtxFragSources(vertexShaderSource, fragmentShaderSource));
 	const char* tfVarying						= "gl_Position";
 	GLint maxTransformFeedbackSeparateAttribs	= 0;
 
+	const GLuint notAProgram = ctx.glCreateProgram();
+	ctx.glDeleteProgram(notAProgram);
+
 	ctx.glGenTransformFeedbacks				(1, &tfID);
 	ctx.expectError						(GL_NO_ERROR);
 
 	ctx.beginSection("GL_INVALID_VALUE is generated if program is not the name of a program object.");
-	ctx.glTransformFeedbackVaryings			(0, 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
+	ctx.glTransformFeedbackVaryings			(notAProgram, 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
 	ctx.expectError						(GL_INVALID_VALUE);
 	ctx.endSection();
 
 	ctx.beginSection("GL_INVALID_OPERATION is generated if program is the name of a shader object.");
-	shader = ctx.glCreateShader(GL_VERTEX_SHADER);
 	ctx.glTransformFeedbackVaryings(shader, 1, &tfVarying, GL_INTERLEAVED_ATTRIBS);
 	ctx.expectError(GL_INVALID_OPERATION);
 	ctx.glDeleteShader(shader);