Adding basic short-term vb reuse, removing index counting.

Regression for some games (that don't size their fetches), massive
improvement for others.
This commit is contained in:
Ben Vanik
2015-03-22 11:35:23 -07:00
parent 159ebb4295
commit 11b0c076bd
6 changed files with 124 additions and 112 deletions

View File

@@ -36,69 +36,39 @@ size_t page_size() {
// http://gnuradio.org/redmine/projects/gnuradio/repository/revisions/f2bc76cc65ffba51a141950f98e75364e49df874/entry/volk/kernels/volk/volk_32u_byteswap.h
// http://gnuradio.org/redmine/projects/gnuradio/repository/revisions/2c4c371885c31222362f70a1cd714415d1398021/entry/volk/kernels/volk/volk_64u_byteswap.h
void copy_and_swap_16_aligned(uint16_t* dest, const uint16_t* src, size_t count,
uint16_t* out_max_value) {
return copy_and_swap_16_unaligned(dest, src, count, out_max_value);
void copy_and_swap_16_aligned(uint16_t* dest, const uint16_t* src,
size_t count) {
return copy_and_swap_16_unaligned(dest, src, count);
}
void copy_and_swap_16_unaligned(uint16_t* dest, const uint16_t* src,
size_t count, uint16_t* out_max_value) {
if (out_max_value) {
uint16_t max_value = 0;
for (size_t i = 0; i < count; ++i) {
uint16_t value = byte_swap(src[i]);
max_value = std::max(max_value, value);
dest[i] = value;
}
*out_max_value = max_value;
} else {
for (size_t i = 0; i < count; ++i) {
dest[i] = byte_swap(src[i]);
}
size_t count) {
for (size_t i = 0; i < count; ++i) {
dest[i] = byte_swap(src[i]);
}
}
void copy_and_swap_32_aligned(uint32_t* dest, const uint32_t* src, size_t count,
uint32_t* out_max_value) {
return copy_and_swap_32_unaligned(dest, src, count, out_max_value);
void copy_and_swap_32_aligned(uint32_t* dest, const uint32_t* src,
size_t count) {
return copy_and_swap_32_unaligned(dest, src, count);
}
void copy_and_swap_32_unaligned(uint32_t* dest, const uint32_t* src,
size_t count, uint32_t* out_max_value) {
if (out_max_value) {
uint32_t max_value = 0;
for (size_t i = 0; i < count; ++i) {
uint32_t value = byte_swap(src[i]);
max_value = std::max(max_value, value);
dest[i] = value;
}
*out_max_value = max_value;
} else {
for (size_t i = 0; i < count; ++i) {
dest[i] = byte_swap(src[i]);
}
size_t count) {
for (size_t i = 0; i < count; ++i) {
dest[i] = byte_swap(src[i]);
}
}
void copy_and_swap_64_aligned(uint64_t* dest, const uint64_t* src, size_t count,
uint64_t* out_max_value) {
return copy_and_swap_64_unaligned(dest, src, count, out_max_value);
void copy_and_swap_64_aligned(uint64_t* dest, const uint64_t* src,
size_t count) {
return copy_and_swap_64_unaligned(dest, src, count);
}
void copy_and_swap_64_unaligned(uint64_t* dest, const uint64_t* src,
size_t count, uint64_t* out_max_value) {
if (out_max_value) {
uint64_t max_value = 0;
for (size_t i = 0; i < count; ++i) {
uint64_t value = byte_swap(src[i]);
max_value = std::max(max_value, value);
dest[i] = value;
}
*out_max_value = max_value;
} else {
for (size_t i = 0; i < count; ++i) {
dest[i] = byte_swap(src[i]);
}
size_t count) {
for (size_t i = 0; i < count; ++i) {
dest[i] = byte_swap(src[i]);
}
}

View File

@@ -29,21 +29,18 @@ size_t hash_combine(size_t seed, const T& v, const Ts&... vs) {
size_t page_size();
void copy_and_swap_16_aligned(uint16_t* dest, const uint16_t* src, size_t count,
uint16_t* out_max_value = nullptr);
void copy_and_swap_16_aligned(uint16_t* dest, const uint16_t* src,
size_t count);
void copy_and_swap_16_unaligned(uint16_t* dest, const uint16_t* src,
size_t count,
uint16_t* out_max_value = nullptr);
void copy_and_swap_32_aligned(uint32_t* dest, const uint32_t* src, size_t count,
uint32_t* out_max_value = nullptr);
size_t count);
void copy_and_swap_32_aligned(uint32_t* dest, const uint32_t* src,
size_t count);
void copy_and_swap_32_unaligned(uint32_t* dest, const uint32_t* src,
size_t count,
uint32_t* out_max_value = nullptr);
void copy_and_swap_64_aligned(uint64_t* dest, const uint64_t* src, size_t count,
uint64_t* out_max_value = nullptr);
size_t count);
void copy_and_swap_64_aligned(uint64_t* dest, const uint64_t* src,
size_t count);
void copy_and_swap_64_unaligned(uint64_t* dest, const uint64_t* src,
size_t count,
uint64_t* out_max_value = nullptr);
size_t count);
template <typename T>
void copy_and_swap(T* dest, const T* src, size_t count) {