Remove OAHashMap, in favour of AHashMap.
The two types had (mostly) the same decisions, but `AHashMap` is a faster implementation, and is more consistent with `HashMap`.
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);
|
||||
|
||||
Reference in New Issue
Block a user