OpenGL: Don't bind non-existent shader resources.

In OpenGL we have to query a resource's location or index before we can
bind it. The driver can tell us that the resource doesn't exist using
special values (-1 for locations, GL_INVALID_INDEX for indices). This
happens when Dawn compiles a pipeline that has bind group bindings that
none of the shader modules uses.

This was found while enable OpenGL debug output.

BUG=dawn:190

Change-Id: I58b3a1a65f87b4408985c1258f1a95379e6b540e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9203
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn_native/opengl/PipelineGL.cpp b/src/dawn_native/opengl/PipelineGL.cpp
index 2debae8..e04dbc7 100644
--- a/src/dawn_native/opengl/PipelineGL.cpp
+++ b/src/dawn_native/opengl/PipelineGL.cpp
@@ -120,13 +120,18 @@
                 switch (groupInfo.types[binding]) {
                     case dawn::BindingType::UniformBuffer: {
                         GLint location = gl.GetUniformBlockIndex(mProgram, name.c_str());
-                        gl.UniformBlockBinding(mProgram, location, indices[group][binding]);
+                        if (location != -1) {
+                            gl.UniformBlockBinding(mProgram, location, indices[group][binding]);
+                        }
                     } break;
 
                     case dawn::BindingType::StorageBuffer: {
                         GLuint location = gl.GetProgramResourceIndex(
                             mProgram, GL_SHADER_STORAGE_BLOCK, name.c_str());
-                        gl.ShaderStorageBlockBinding(mProgram, location, indices[group][binding]);
+                        if (location != GL_INVALID_INDEX) {
+                            gl.ShaderStorageBlockBinding(mProgram, location,
+                                                         indices[group][binding]);
+                        }
                     } break;
 
                     case dawn::BindingType::Sampler:
@@ -161,6 +166,11 @@
             for (const auto& combined : combinedSamplersSet) {
                 std::string name = combined.GetName();
                 GLint location = gl.GetUniformLocation(mProgram, name.c_str());
+
+                if (location == -1) {
+                    continue;
+                }
+
                 gl.Uniform1i(location, textureUnit);
 
                 GLuint samplerIndex =