}
}
void FrameworkEnvironment::add_implicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept {
- add_layer_impl(layer_manifest, json_name, implicit_layer_folder, ManifestCategory::implicit_layer);
+ add_layer_impl(TestLayerDetails{layer_manifest, json_name}, implicit_layer_folder, ManifestCategory::implicit_layer);
}
void FrameworkEnvironment::add_explicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept {
- add_layer_impl(layer_manifest, json_name, explicit_layer_folder, ManifestCategory::explicit_layer);
+ add_layer_impl(TestLayerDetails{layer_manifest, json_name}, explicit_layer_folder, ManifestCategory::explicit_layer);
+}
+void FrameworkEnvironment::add_implicit_layer(TestLayerDetails layer_details) noexcept {
+ add_layer_impl(layer_details, implicit_layer_folder, ManifestCategory::implicit_layer);
+}
+void FrameworkEnvironment::add_explicit_layer(TestLayerDetails layer_details) noexcept {
+ add_layer_impl(layer_details, explicit_layer_folder, ManifestCategory::explicit_layer);
}
-void FrameworkEnvironment::add_layer_impl(ManifestLayer& layer_manifest, const std::string& json_name,
- fs::FolderManager& folder_manager, ManifestCategory category) {
- // We have a special case for any of the wrap objects layers so get the string to the path
- std::string wrap_layer = fs::fixup_backslashes_in_path(fs::path(TEST_LAYER_WRAP_OBJECTS)).str();
-
- // Strip off ending
-#if defined(WIN32)
- std::string library_extension = ".dll";
-#elif defined(__APPLE__)
- std::string library_extension = ".dylib";
-#else
- std::string library_extension = ".so";
-#endif
- size_t index = 0;
- index = wrap_layer.find(library_extension, index);
- assert(index != std::string::npos);
- wrap_layer.replace(index, library_extension.size(), "");
-
- for (auto& layer : layer_manifest.layers) {
+void FrameworkEnvironment::add_layer_impl(TestLayerDetails layer_details, fs::FolderManager& folder_manager,
+ ManifestCategory category) {
+ for (auto& layer : layer_details.layer_manifest.layers) {
size_t cur_layer_index = layers.size();
if (!layer.lib_path.str().empty()) {
std::string new_layer_name = layer.name + "_" + std::to_string(cur_layer_index) + "_" + layer.lib_path.filename().str();
// Don't load the layer binary if using any of the wrap objects layers, since it doesn't export the same interface
// functions
- if (fs::fixup_backslashes_in_path(layer.lib_path).str().rfind(wrap_layer) != 0) {
+ std::cout << "stem: " << layer.lib_path.stem().str() << "\n";
+ if (layer.lib_path.stem().str().find(fs::path(TEST_LAYER_WRAP_OBJECTS).stem().str()) == std::string::npos) {
layers.push_back(TestLayerHandle(new_layer_location));
layers.back().reset_layer();
}
layer.lib_path = new_layer_location;
}
}
-
- auto layer_loc = folder_manager.write_manifest(json_name, layer_manifest.get_manifest_str());
- platform_shim->add_manifest(category, layer_loc);
+ if (layer_details.add_to_regular_search_paths) {
+ auto layer_loc = folder_manager.write_manifest(layer_details.json_name, layer_details.layer_manifest.get_manifest_str());
+ platform_shim->add_manifest(category, layer_loc);
+ }
}
TestICD& FrameworkEnvironment::get_test_icd(int index) noexcept { return icds[index].get_test_icd(); }
BUILDER_VALUE(TestICDDetails, bool, is_fake, false);
};
+struct TestLayerDetails {
+ TestLayerDetails(ManifestLayer layer_manifest, const std::string& json_name) noexcept
+ : layer_manifest(layer_manifest), json_name(json_name) {}
+ BUILDER_VALUE(TestLayerDetails, ManifestLayer, layer_manifest, {});
+ BUILDER_VALUE(TestLayerDetails, std::string, json_name, "test_layer");
+ BUILDER_VALUE(TestLayerDetails, bool, add_to_regular_search_paths, true);
+ BUILDER_VALUE(TestLayerDetails, bool, is_fake, false);
+};
+
struct FrameworkEnvironment {
FrameworkEnvironment(DebugMode debug_mode = DebugMode::none) noexcept;
void add_icd(TestICDDetails icd_details) noexcept;
void add_implicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept;
+ void add_implicit_layer(TestLayerDetails layer_details) noexcept;
void add_explicit_layer(ManifestLayer layer_manifest, const std::string& json_name) noexcept;
+ void add_explicit_layer(TestLayerDetails layer_details) noexcept;
TestICD& get_test_icd(int index = 0) noexcept;
TestICD& reset_icd(int index = 0) noexcept;
std::string env_var_vk_icd_filenames;
private:
- void add_layer_impl(ManifestLayer& layer_manifest, const std::string& json_name, fs::FolderManager& folder_manager,
- ManifestCategory category);
+ void add_layer_impl(TestLayerDetails layer_details, fs::FolderManager& folder_manager, ManifestCategory category);
};
out += std::string(",\n\t\t\"") + object_name + "\": [";
for (size_t i = 0; i < strings.size(); i++) {
if (i > 0) out += ",\t\t\t";
- out += "\"" + strings.at(i) + "\"";
+ out += "\"" + fs::fixup_backslashes_in_path(strings.at(i)) + "\"";
}
out += "]";
}
std::string& str() { return contents; }
size_t size() const { return contents.size(); };
+ // equality
+ bool operator==(path const& other) const noexcept { return contents == other.contents; }
+ bool operator!=(path const& other) const noexcept { return !(*this == other); }
+
private:
std::string contents;
};
env->reset_icd().add_instance_extension(first_ext);
const uint32_t real_device_count = 2;
- for (size_t i = 0; i < real_device_count; i++) {
+ for (uint32_t i = 0; i < real_device_count; i++) {
driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i), i + 1);
driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0});
}
env->reset_icd().add_instance_extension(first_ext);
const uint32_t real_device_count = 3;
- for (size_t i = 0; i < real_device_count; i++) {
+ for (uint32_t i = 0; i < real_device_count; i++) {
driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i), i + 1);
driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0});
}
env->reset_icd().add_instance_extension(first_ext);
const uint32_t real_device_count = 2;
- for (size_t i = 0; i < real_device_count; i++) {
+ for (uint32_t i = 0; i < real_device_count; i++) {
driver.physical_devices.emplace_back(std::string("physical_device_") + std::to_string(i), i + 1);
driver.physical_devices.back().extensions.push_back({VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, 0});
}