In the middle of multithreading parsers.

This commit is contained in:
zy4n
2025-03-30 22:38:06 +02:00
parent d18b40a7fc
commit 144126ee7a
80 changed files with 2904 additions and 1450 deletions

View File

@@ -13,9 +13,9 @@ struct prioritized_metadata_comparator
bool operator()(const type& a, const type& b) const noexcept
{
if (a.geometry != b.geometry)
if (a.geometry_type != b.geometry_type)
{
return a.geometry > b.geometry;
return a.geometry_type > b.geometry_type;
}
if (a.stage != b.stage)
@@ -48,24 +48,24 @@ std::optional<std::pair<zgl::shader_metadata, zgl::shader_handle>> zgl::shader_m
) {
auto shader_it = std::ranges::lower_bound(
m_shader_lookup,
std::pair{ requirements.geometry, requirements.stage },
std::pair{ requirements.geometry_type, requirements.stage },
std::greater{},
[](const shader_lookup_entry_type& entry)
[](const entry_type& entry)
{
const auto& meta = entry.first;
return std::pair{ meta.geometry, meta.stage };
return std::pair{ meta.geometry_type, meta.stage };
}
);
while (
shader_it != m_shader_lookup.end() and
shader_it->first.geometry == requirements.geometry and
shader_it->first.geometry_type == requirements.geometry_type and
shader_it->first.stage == requirements.stage
) {
const auto& [ meta, data ] = *shader_it;
const auto unwanted_static_features = meta.static_enabled & ~requirements.features;
const auto required_dynamic_features = requirements.features & ~meta.static_enabled;
const auto unwanted_static_features = meta.static_enabled & ~requirements.components;
const auto required_dynamic_features = requirements.components & ~meta.static_enabled;
const auto missing_dynamic_features = required_dynamic_features & ~meta.dynamic_enable;
if (unwanted_static_features == 0 and missing_dynamic_features == 0)
@@ -84,9 +84,9 @@ void zgl::shader_manager::process(const store_type& shader_sources)
m_preprocessor.process(shader_sources);
}
void zgl::shader_manager::get_handles(
void zgl::shader_manager::fetch(
const assets::shader_source_store& shader_sources,
std::span<const shading::shader_set_requirements> requirements,
std::span<const shading::shader_program_requirements> requirements,
std::span<shader_set_metadata> metadata,
std::span<shader_handle_set> shader_sets
) {
@@ -99,14 +99,14 @@ void zgl::shader_manager::get_handles(
shader_set_meta = {};
auto shader_req = shading::shader_requirements{
.geometry = req.geometry,
.geometry_type = req.geometry_type,
.stage = {},
.features = req.features
.components = req.components
};
for (auto [ stage_index, handle ] : std::ranges::views::enumerate(shader_set.stages))
{
shader_req.stage = static_cast<shading::stage::types>(stage_index);
shader_req.stage = static_cast<assets::shader_components::stage>(stage_index);
if (auto shader_match = find_shader(shader_req))
{
@@ -127,7 +127,7 @@ void zgl::shader_manager::get_handles(
m_preprocessed_shader_source_metadata_buffer.resize(m_source_requirement_buffer.size());
m_source_strings_buffer.clear();
m_preprocessor.get_shader_sources(
m_preprocessor.fetch(
shader_sources,
m_source_requirement_buffer,
m_preprocessed_shader_source_metadata_buffer,
@@ -161,7 +161,7 @@ void zgl::shader_manager::get_handles(
)) {
handle = shader.handle;
auto shader_meta = shader_metadata{
.geometry = source_req_it->geometry,
.geometry_type = source_req_it->geometry_type,
.stage = source_req_it->stage,
.static_enabled = source_meta_it->static_enabled,
.dynamic_enable = source_meta_it->dynamic_enable
@@ -194,14 +194,14 @@ void zgl::shader_manager::get_handles(
std::ranges::sort(
new_shaders,
prioritized_metadata_comparator{},
&shader_lookup_entry_type::first
&entry_type::first
);
std::ranges::inplace_merge(
m_shader_lookup,
m_shader_lookup.begin() + prev_shader_count,
prioritized_metadata_comparator{},
&shader_lookup_entry_type::first
&entry_type::first
);
}