Merge pull request #106996 from Ivorforce/no-oa-hashmap
Core: Remove `OAHashMap`, in favour of `AHashMap`
This commit is contained in:
@ -570,10 +570,10 @@ bool ShaderGLES3::_load_from_cache(Version *p_version) {
|
||||
int cache_variant_count = static_cast<int>(f->get_32());
|
||||
ERR_FAIL_COND_V_MSG(cache_variant_count != variant_count, false, "shader cache variant count mismatch, expected " + itos(variant_count) + " got " + itos(cache_variant_count)); //should not happen but check
|
||||
|
||||
LocalVector<OAHashMap<uint64_t, Version::Specialization>> variants;
|
||||
LocalVector<AHashMap<uint64_t, Version::Specialization>> variants;
|
||||
for (int i = 0; i < cache_variant_count; i++) {
|
||||
uint32_t cache_specialization_count = f->get_32();
|
||||
OAHashMap<uint64_t, Version::Specialization> variant;
|
||||
AHashMap<uint64_t, Version::Specialization> variant;
|
||||
for (uint32_t j = 0; j < cache_specialization_count; j++) {
|
||||
uint64_t specialization_key = f->get_64();
|
||||
uint32_t variant_size = f->get_32();
|
||||
@ -648,18 +648,14 @@ void ShaderGLES3::_save_to_cache(Version *p_version) {
|
||||
f->store_32(variant_count);
|
||||
|
||||
for (int i = 0; i < variant_count; i++) {
|
||||
int cache_specialization_count = p_version->variants[i].get_num_elements();
|
||||
int cache_specialization_count = p_version->variants[i].size();
|
||||
f->store_32(cache_specialization_count);
|
||||
|
||||
for (OAHashMap<uint64_t, ShaderGLES3::Version::Specialization>::Iterator it = p_version->variants[i].iter(); it.valid; it = p_version->variants[i].next_iter(it)) {
|
||||
const uint64_t specialization_key = *it.key;
|
||||
for (KeyValue<uint64_t, ShaderGLES3::Version::Specialization> &kv : p_version->variants[i]) {
|
||||
const uint64_t specialization_key = kv.key;
|
||||
f->store_64(specialization_key);
|
||||
|
||||
const Version::Specialization *specialization = it.value;
|
||||
if (specialization == nullptr) {
|
||||
f->store_32(0);
|
||||
continue;
|
||||
}
|
||||
const Version::Specialization *specialization = &kv.value;
|
||||
GLint program_size = 0;
|
||||
glGetProgramiv(specialization->id, GL_PROGRAM_BINARY_LENGTH, &program_size);
|
||||
if (program_size == 0) {
|
||||
@ -689,11 +685,11 @@ void ShaderGLES3::_clear_version(Version *p_version) {
|
||||
}
|
||||
|
||||
for (int i = 0; i < variant_count; i++) {
|
||||
for (OAHashMap<uint64_t, Version::Specialization>::Iterator it = p_version->variants[i].iter(); it.valid; it = p_version->variants[i].next_iter(it)) {
|
||||
if (it.value->id != 0) {
|
||||
glDeleteShader(it.value->vert_id);
|
||||
glDeleteShader(it.value->frag_id);
|
||||
glDeleteProgram(it.value->id);
|
||||
for (KeyValue<uint64_t, Version::Specialization> &kv : p_version->variants[i]) {
|
||||
if (kv.value.id != 0) {
|
||||
glDeleteShader(kv.value.vert_id);
|
||||
glDeleteShader(kv.value.frag_id);
|
||||
glDeleteProgram(kv.value.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -709,7 +705,7 @@ void ShaderGLES3::_initialize_version(Version *p_version) {
|
||||
}
|
||||
p_version->variants.reserve(variant_count);
|
||||
for (int i = 0; i < variant_count; i++) {
|
||||
OAHashMap<uint64_t, Version::Specialization> variant;
|
||||
AHashMap<uint64_t, Version::Specialization> variant;
|
||||
p_version->variants.push_back(variant);
|
||||
Version::Specialization spec;
|
||||
_compile_specialization(spec, i, p_version, specialization_default_mask);
|
||||
|
||||
@ -102,7 +102,7 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
LocalVector<OAHashMap<uint64_t, Specialization>> variants;
|
||||
LocalVector<AHashMap<uint64_t, Specialization>> variants;
|
||||
};
|
||||
|
||||
Mutex variant_set_mutex;
|
||||
@ -192,25 +192,25 @@ protected:
|
||||
_initialize_version(version); //may lack initialization
|
||||
}
|
||||
|
||||
Version::Specialization *spec = version->variants[p_variant].lookup_ptr(p_specialization);
|
||||
Version::Specialization *spec = version->variants[p_variant].getptr(p_specialization);
|
||||
if (!spec) {
|
||||
if (false) {
|
||||
// Queue load this specialization and use defaults in the meantime (TODO)
|
||||
|
||||
spec = version->variants[p_variant].lookup_ptr(specialization_default_mask);
|
||||
spec = version->variants[p_variant].getptr(specialization_default_mask);
|
||||
} else {
|
||||
// Compile on the spot
|
||||
Version::Specialization s;
|
||||
_compile_specialization(s, p_variant, version, p_specialization);
|
||||
version->variants[p_variant].insert(p_specialization, s);
|
||||
spec = version->variants[p_variant].lookup_ptr(p_specialization);
|
||||
spec = version->variants[p_variant].getptr(p_specialization);
|
||||
if (shader_cache_dir_valid) {
|
||||
_save_to_cache(version);
|
||||
}
|
||||
}
|
||||
} else if (spec->build_queued) {
|
||||
// Still queued, wait
|
||||
spec = version->variants[p_variant].lookup_ptr(specialization_default_mask);
|
||||
spec = version->variants[p_variant].getptr(specialization_default_mask);
|
||||
}
|
||||
|
||||
if (!spec || !spec->ok) {
|
||||
@ -228,7 +228,7 @@ protected:
|
||||
Version *version = version_owner.get_or_null(p_version);
|
||||
ERR_FAIL_NULL_V(version, -1);
|
||||
ERR_FAIL_INDEX_V(p_variant, int(version->variants.size()), -1);
|
||||
Version::Specialization *spec = version->variants[p_variant].lookup_ptr(p_specialization);
|
||||
Version::Specialization *spec = version->variants[p_variant].getptr(p_specialization);
|
||||
ERR_FAIL_NULL_V(spec, -1);
|
||||
ERR_FAIL_INDEX_V(p_which, int(spec->uniform_location.size()), -1);
|
||||
return spec->uniform_location[p_which];
|
||||
|
||||
Reference in New Issue
Block a user