Merge pull request #57655 from reduz/remove-get-rid-by-index
Remove RID_Owner.get_rid_by_index
This commit is contained in:
commit
69d7d1ec52
2 changed files with 31 additions and 47 deletions
|
@ -292,35 +292,6 @@ public:
|
||||||
_FORCE_INLINE_ uint32_t get_rid_count() const {
|
_FORCE_INLINE_ uint32_t get_rid_count() const {
|
||||||
return alloc_count;
|
return alloc_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ T *get_ptr_by_index(uint32_t p_index) {
|
|
||||||
ERR_FAIL_UNSIGNED_INDEX_V(p_index, alloc_count, nullptr);
|
|
||||||
if (THREAD_SAFE) {
|
|
||||||
spin_lock.lock();
|
|
||||||
}
|
|
||||||
uint64_t idx = free_list_chunks[p_index / elements_in_chunk][p_index % elements_in_chunk];
|
|
||||||
T *ptr = &chunks[idx / elements_in_chunk][idx % elements_in_chunk];
|
|
||||||
if (THREAD_SAFE) {
|
|
||||||
spin_lock.unlock();
|
|
||||||
}
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
_FORCE_INLINE_ RID get_rid_by_index(uint32_t p_index) {
|
|
||||||
ERR_FAIL_INDEX_V(p_index, alloc_count, RID());
|
|
||||||
if (THREAD_SAFE) {
|
|
||||||
spin_lock.lock();
|
|
||||||
}
|
|
||||||
uint64_t idx = free_list_chunks[p_index / elements_in_chunk][p_index % elements_in_chunk];
|
|
||||||
uint64_t validator = validator_chunks[idx / elements_in_chunk][idx % elements_in_chunk];
|
|
||||||
|
|
||||||
RID rid = _make_from_id((validator << 32) | idx);
|
|
||||||
if (THREAD_SAFE) {
|
|
||||||
spin_lock.unlock();
|
|
||||||
}
|
|
||||||
return rid;
|
|
||||||
}
|
|
||||||
|
|
||||||
void get_owned_list(List<RID> *p_owned) {
|
void get_owned_list(List<RID> *p_owned) {
|
||||||
if (THREAD_SAFE) {
|
if (THREAD_SAFE) {
|
||||||
spin_lock.lock();
|
spin_lock.lock();
|
||||||
|
@ -336,6 +307,24 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//used for fast iteration in the elements or RIDs
|
||||||
|
void fill_owned_buffer(RID *p_rid_buffer) {
|
||||||
|
if (THREAD_SAFE) {
|
||||||
|
spin_lock.lock();
|
||||||
|
}
|
||||||
|
uint32_t idx = 0;
|
||||||
|
for (size_t i = 0; i < max_alloc; i++) {
|
||||||
|
uint64_t validator = validator_chunks[i / elements_in_chunk][i % elements_in_chunk];
|
||||||
|
if (validator != 0xFFFFFFFF) {
|
||||||
|
p_rid_buffer[idx] = _make_from_id((validator << 32) | i);
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (THREAD_SAFE) {
|
||||||
|
spin_lock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void set_description(const char *p_descrption) {
|
void set_description(const char *p_descrption) {
|
||||||
description = p_descrption;
|
description = p_descrption;
|
||||||
}
|
}
|
||||||
|
@ -425,18 +414,14 @@ public:
|
||||||
return alloc.get_rid_count();
|
return alloc.get_rid_count();
|
||||||
}
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ RID get_rid_by_index(uint32_t p_index) {
|
|
||||||
return alloc.get_rid_by_index(p_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
_FORCE_INLINE_ T *get_ptr_by_index(uint32_t p_index) {
|
|
||||||
return *alloc.get_ptr_by_index(p_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
_FORCE_INLINE_ void get_owned_list(List<RID> *p_owned) {
|
_FORCE_INLINE_ void get_owned_list(List<RID> *p_owned) {
|
||||||
return alloc.get_owned_list(p_owned);
|
return alloc.get_owned_list(p_owned);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fill_owned_buffer(RID *p_rid_buffer) {
|
||||||
|
alloc.fill_owned_buffer(p_rid_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
void set_description(const char *p_descrption) {
|
void set_description(const char *p_descrption) {
|
||||||
alloc.set_description(p_descrption);
|
alloc.set_description(p_descrption);
|
||||||
}
|
}
|
||||||
|
@ -485,17 +470,12 @@ public:
|
||||||
return alloc.get_rid_count();
|
return alloc.get_rid_count();
|
||||||
}
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ RID get_rid_by_index(uint32_t p_index) {
|
|
||||||
return alloc.get_rid_by_index(p_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
_FORCE_INLINE_ T *get_ptr_by_index(uint32_t p_index) {
|
|
||||||
return alloc.get_ptr_by_index(p_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
_FORCE_INLINE_ void get_owned_list(List<RID> *p_owned) {
|
_FORCE_INLINE_ void get_owned_list(List<RID> *p_owned) {
|
||||||
return alloc.get_owned_list(p_owned);
|
return alloc.get_owned_list(p_owned);
|
||||||
}
|
}
|
||||||
|
void fill_owned_buffer(RID *p_rid_buffer) {
|
||||||
|
alloc.fill_owned_buffer(p_rid_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
void set_description(const char *p_descrption) {
|
void set_description(const char *p_descrption) {
|
||||||
alloc.set_description(p_descrption);
|
alloc.set_description(p_descrption);
|
||||||
|
|
|
@ -3871,8 +3871,12 @@ void RendererSceneCull::update_dirty_instances() {
|
||||||
|
|
||||||
void RendererSceneCull::update() {
|
void RendererSceneCull::update() {
|
||||||
//optimize bvhs
|
//optimize bvhs
|
||||||
for (uint32_t i = 0; i < scenario_owner.get_rid_count(); i++) {
|
|
||||||
Scenario *s = scenario_owner.get_ptr_by_index(i);
|
uint32_t rid_count = scenario_owner.get_rid_count();
|
||||||
|
RID *rids = (RID *)alloca(sizeof(RID) * rid_count);
|
||||||
|
scenario_owner.fill_owned_buffer(rids);
|
||||||
|
for (uint32_t i = 0; i < rid_count; i++) {
|
||||||
|
Scenario *s = scenario_owner.get_or_null(rids[i]);
|
||||||
s->indexers[Scenario::INDEXER_GEOMETRY].optimize_incremental(indexer_update_iterations);
|
s->indexers[Scenario::INDEXER_GEOMETRY].optimize_incremental(indexer_update_iterations);
|
||||||
s->indexers[Scenario::INDEXER_VOLUMES].optimize_incremental(indexer_update_iterations);
|
s->indexers[Scenario::INDEXER_VOLUMES].optimize_incremental(indexer_update_iterations);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue