Vulkan: Don't access the XFB object during link

The descriptor set layout set up for XFB emulation lived in
TransfromFeedbackVk, but did not access anything in that object at all.
More importantly, it doesn't make any sense to look at the current XFB
object when linking a program.

Bug: angleproject:8297
Change-Id: I8bd0e747b7d3e3783ef053f20378cc42d2c1d997
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4774786
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
diff --git a/src/libANGLE/renderer/vulkan/ProgramExecutableVk.cpp b/src/libANGLE/renderer/vulkan/ProgramExecutableVk.cpp
index 31ce9c9..11ce662 100644
--- a/src/libANGLE/renderer/vulkan/ProgramExecutableVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ProgramExecutableVk.cpp
@@ -1361,7 +1361,6 @@
     const gl::ProgramExecutable &glExecutable,
     gl::ActiveTextureArray<TextureVk *> *activeTextures)
 {
-    gl::TransformFeedback *transformFeedback = contextVk->getState().getCurrentTransformFeedback();
     const gl::ShaderBitSet &linkedShaderStages = glExecutable.getLinkedShaderStages();
 
     resetLayout(contextVk);
@@ -1387,12 +1386,17 @@
     gl::ShaderType linkedTransformFeedbackStage = glExecutable.getLinkedTransformFeedbackStage();
     bool hasXfbVaryings = linkedTransformFeedbackStage != gl::ShaderType::InvalidEnum &&
                           !glExecutable.getLinkedTransformFeedbackVaryings().empty();
-    if (transformFeedback && hasXfbVaryings)
+    if (contextVk->getFeatures().emulateTransformFeedback.enabled && hasXfbVaryings)
     {
-        size_t xfbBufferCount                    = glExecutable.getTransformFeedbackBufferCount();
-        TransformFeedbackVk *transformFeedbackVk = vk::GetImpl(transformFeedback);
-        transformFeedbackVk->updateDescriptorSetLayout(contextVk, mVariableInfoMap, xfbBufferCount,
-                                                       &uniformsAndXfbSetDesc);
+        size_t xfbBufferCount = glExecutable.getTransformFeedbackBufferCount();
+        for (uint32_t bufferIndex = 0; bufferIndex < xfbBufferCount; ++bufferIndex)
+        {
+            const uint32_t binding = mVariableInfoMap.getEmulatedXfbBufferBinding(bufferIndex);
+            ASSERT(binding != std::numeric_limits<uint32_t>::max());
+
+            uniformsAndXfbSetDesc.update(binding, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1,
+                                         VK_SHADER_STAGE_VERTEX_BIT, nullptr);
+        }
     }
 
     ANGLE_TRY(contextVk->getDescriptorSetLayoutCache().getDescriptorSetLayout(
diff --git a/src/libANGLE/renderer/vulkan/TransformFeedbackVk.cpp b/src/libANGLE/renderer/vulkan/TransformFeedbackVk.cpp
index cf24f1d..222ef48 100644
--- a/src/libANGLE/renderer/vulkan/TransformFeedbackVk.cpp
+++ b/src/libANGLE/renderer/vulkan/TransformFeedbackVk.cpp
@@ -193,28 +193,6 @@
     return angle::Result::Continue;
 }
 
-void TransformFeedbackVk::updateDescriptorSetLayout(
-    ContextVk *contextVk,
-    const ShaderInterfaceVariableInfoMap &variableInfoMap,
-    size_t xfbBufferCount,
-    vk::DescriptorSetLayoutDesc *descSetLayoutOut) const
-{
-    if (!contextVk->getFeatures().emulateTransformFeedback.enabled)
-    {
-        return;
-    }
-
-    for (uint32_t bufferIndex = 0; bufferIndex < xfbBufferCount; ++bufferIndex)
-    {
-        const uint32_t binding = variableInfoMap.getEmulatedXfbBufferBinding(bufferIndex);
-
-        ASSERT(binding != std::numeric_limits<uint32_t>::max());
-
-        descSetLayoutOut->update(binding, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1,
-                                 VK_SHADER_STAGE_VERTEX_BIT, nullptr);
-    }
-}
-
 void TransformFeedbackVk::getBufferOffsets(ContextVk *contextVk,
                                            GLint drawCallFirstVertex,
                                            int32_t *offsetsOut,
diff --git a/src/libANGLE/renderer/vulkan/TransformFeedbackVk.h b/src/libANGLE/renderer/vulkan/TransformFeedbackVk.h
index f9ad523..91e3031 100644
--- a/src/libANGLE/renderer/vulkan/TransformFeedbackVk.h
+++ b/src/libANGLE/renderer/vulkan/TransformFeedbackVk.h
@@ -45,10 +45,6 @@
                                     size_t index,
                                     const gl::OffsetBindingPointer<gl::Buffer> &binding) override;
 
-    void updateDescriptorSetLayout(ContextVk *contextVk,
-                                   const ShaderInterfaceVariableInfoMap &variableInfoMap,
-                                   size_t xfbBufferCount,
-                                   vk::DescriptorSetLayoutDesc *descSetLayoutOut) const;
     void getBufferOffsets(ContextVk *contextVk,
                           GLint drawCallFirstVertex,
                           int32_t *offsetsOut,