[glsl] Extract textureBuiltinFromUniformData

This CL splits the TextureBuiltinFromUniformData generation out to an
individual method.

Bug: 340582170
Change-Id: I5586bd7ad772d0d0bb74b49c01f23ab154268d4a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/194340
Reviewed-by: Stephen White <senorblanco@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/dawn/native/opengl/ShaderModuleGL.cpp b/src/dawn/native/opengl/ShaderModuleGL.cpp
index 6816d11..63f7e80 100644
--- a/src/dawn/native/opengl/ShaderModuleGL.cpp
+++ b/src/dawn/native/opengl/ShaderModuleGL.cpp
@@ -199,6 +199,50 @@
     return combinedSamplerInfo;
 }
 
+bool generateTextureBuiltinFromUniformData(tint::inspector::Inspector& inspector,
+                                           const std::string& entryPoint,
+                                           const PipelineLayout* layout,
+                                           BindingPointToFunctionAndOffset* bindingPointToData,
+                                           tint::glsl::writer::Bindings& bindings) {
+    auto textureBuiltinsFromUniformData = inspector.GetTextureQueries(entryPoint);
+
+    if (textureBuiltinsFromUniformData.empty()) {
+        return false;
+    }
+
+    for (size_t i = 0; i < textureBuiltinsFromUniformData.size(); ++i) {
+        const auto& info = textureBuiltinsFromUniformData[i];
+
+        // This is the unmodified binding point from the WGSL shader.
+        tint::BindingPoint srcBindingPoint{info.group, info.binding};
+        bindings.texture_builtins_from_uniform.ubo_bindingpoint_ordering.emplace_back(
+            srcBindingPoint);
+
+        // The remapped binding point is inserted into the Dawn data structure.
+        const BindGroupLayoutInternalBase* bgl =
+            layout->GetBindGroupLayout(BindGroupIndex{info.group});
+        tint::BindingPoint dstBindingPoint = tint::BindingPoint{
+            info.group, static_cast<uint32_t>(bgl->GetBindingIndex(BindingNumber{info.binding}))};
+
+        BindPointFunction type = BindPointFunction::kTextureNumLevels;
+        switch (info.type) {
+            case tint::inspector::Inspector::TextureQueryType::kTextureNumLevels:
+                type = BindPointFunction::kTextureNumLevels;
+                break;
+            case tint::inspector::Inspector::TextureQueryType::kTextureNumSamples:
+                type = BindPointFunction::kTextureNumSamples;
+                break;
+        }
+
+        // Note, the `sizeof(uint32_t)` has to match up with the data type created by the
+        // `TextureBuiltinsFromUniform` when it creates the UBO structure.
+        bindingPointToData->emplace(dstBindingPoint,
+                                    std::pair{type, static_cast<uint32_t>(i * sizeof(uint32_t))});
+    }
+
+    return true;
+}
+
 }  // namespace
 
 std::string GetBindingName(BindGroupIndex group, BindingNumber bindingNumber) {
@@ -399,41 +443,8 @@
         generateCombinedSamplerInfo(inspector, programmableStage.entryPoint, bindings,
                                     externalTextureExpansionMap, needsPlaceholderSampler);
 
-    auto textureBuiltinsFromUniformData = inspector.GetTextureQueries(programmableStage.entryPoint);
-    bool needsInternalUBO = false;
-    if (!textureBuiltinsFromUniformData.empty()) {
-        needsInternalUBO = true;
-        for (size_t i = 0; i < textureBuiltinsFromUniformData.size(); ++i) {
-            const auto& info = textureBuiltinsFromUniformData[i];
-
-            // This is the unmodified binding point from the WGSL shader.
-            tint::BindingPoint srcBindingPoint{info.group, info.binding};
-            bindings.texture_builtins_from_uniform.ubo_bindingpoint_ordering.emplace_back(
-                srcBindingPoint);
-
-            // The remapped binding point is inserted into the Dawn data structure.
-            const BindGroupLayoutInternalBase* bgl =
-                layout->GetBindGroupLayout(BindGroupIndex{info.group});
-            tint::BindingPoint dstBindingPoint = tint::BindingPoint{
-                info.group,
-                static_cast<uint32_t>(bgl->GetBindingIndex(BindingNumber{info.binding}))};
-
-            BindPointFunction type = BindPointFunction::kTextureNumLevels;
-            switch (info.type) {
-                case tint::inspector::Inspector::TextureQueryType::kTextureNumLevels:
-                    type = BindPointFunction::kTextureNumLevels;
-                    break;
-                case tint::inspector::Inspector::TextureQueryType::kTextureNumSamples:
-                    type = BindPointFunction::kTextureNumSamples;
-                    break;
-            }
-
-            // Note, the `sizeof(uint32_t)` has to match up with the data type created by the
-            // `TextureBuiltinsFromUniform` when it creates the UBO structure.
-            bindingPointToData->emplace(
-                dstBindingPoint, std::pair{type, static_cast<uint32_t>(i * sizeof(uint32_t))});
-        }
-    }
+    bool needsInternalUBO = generateTextureBuiltinFromUniformData(
+        inspector, programmableStage.entryPoint, layout, bindingPointToData, bindings);
 
     std::optional<tint::ast::transform::SubstituteOverride::Config> substituteOverrideConfig;
     if (!programmableStage.metadata->overrides.empty()) {