Coverage Report

Created: 2025-11-11 06:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/shaderc/glslc/src/file_includer.h
Line
Count
Source
1
// Copyright 2015 The Shaderc Authors. All rights reserved.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#ifndef GLSLC_FILE_INCLUDER_H_
16
#define GLSLC_FILE_INCLUDER_H_
17
18
#include <mutex>
19
#include <string>
20
#include <unordered_map>
21
#include <unordered_set>
22
#include <utility>
23
#include <vector>
24
#include <unordered_set>
25
26
#include "libshaderc_util/file_finder.h"
27
#include "shaderc/shaderc.hpp"
28
29
namespace glslc {
30
31
// An includer for files implementing shaderc's includer interface. It responds
32
// to the file including query from the compiler with the full path and content
33
// of the file to be included. In the case that the file is not found or cannot
34
// be opened, the full path field of in the response will point to an empty
35
// string, and error message will be passed to the content field.
36
// This class provides the basic thread-safety guarantee.
37
class FileIncluder : public shaderc::CompileOptions::IncluderInterface {
38
 public:
39
  explicit FileIncluder(const shaderc_util::FileFinder* file_finder)
40
20.5k
      : file_finder_(*file_finder) {}
41
42
  ~FileIncluder() override;
43
44
  // Resolves a requested source file of a given type from a requesting
45
  // source into a shaderc_include_result whose contents will remain valid
46
  // until it's released.
47
  shaderc_include_result* GetInclude(const char* requested_source,
48
                                     shaderc_include_type type,
49
                                     const char* requesting_source,
50
                                     size_t include_depth) override;
51
  // Releases an include result.
52
  void ReleaseInclude(shaderc_include_result* include_result) override;
53
54
  // Returns a reference to the member storing the set of included files.
55
20.5k
  const std::unordered_set<std::string>& file_path_trace() const {
56
20.5k
    return included_files_;
57
20.5k
  }
58
59
 private:
60
  // Used by GetInclude() to get the full filepath.
61
  const shaderc_util::FileFinder& file_finder_;
62
  // The full path and content of a source file.
63
  struct FileInfo {
64
    const std::string full_path;
65
    std::vector<char> contents;
66
  };
67
68
  // The set of full paths of included files.
69
  std::unordered_set<std::string> included_files_;
70
};
71
72
}  // namespace glslc
73
74
#endif  // GLSLC_FILE_INCLUDER_H_