mirror of
https://github.com/MobileGL-Dev/MobileGlues.git
synced 2025-09-24 03:31:43 -04:00
[Optimization] (multidraw: compute): not quite right bisect
This commit is contained in:
parent
3e70122664
commit
a0bcd91257
@ -268,22 +268,26 @@ void main() {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Find out draw call #
|
// Find out draw call #
|
||||||
int low = 0;
|
// int low = 0;
|
||||||
int high = draws.length();
|
// int high = draws.length();
|
||||||
for (low = 0; low < high; ++low) {
|
// for (low = 0; low < high; ++low) {
|
||||||
if (prefixSums[low] > outIdx) {
|
// if (prefixSums[low] > outIdx) {
|
||||||
break;
|
// break;
|
||||||
}
|
|
||||||
}
|
|
||||||
// while (low < high) {
|
|
||||||
// int mid = low + (high - low) / 2;
|
|
||||||
// if (prefixSums[mid] > outIdx) {
|
|
||||||
// high = mid;
|
|
||||||
// } else {
|
|
||||||
// low = mid + 1;
|
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
int low = 0;
|
||||||
|
int high = draws.length();
|
||||||
|
while (low < high) {
|
||||||
|
int mid = low + (high - low) / 2;
|
||||||
|
if (prefixSums[mid] <= outIdx) {
|
||||||
|
low = mid + 1; // next [mid + 1, high)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
high = mid; // next [low, mid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// figure out which index to take
|
// figure out which index to take
|
||||||
DrawCommand cmd = draws[low];
|
DrawCommand cmd = draws[low];
|
||||||
uint localIdx = outIdx - ((low == 0) ? 0u : (prefixSums[low - 1]));
|
uint localIdx = outIdx - ((low == 0) ? 0u : (prefixSums[low - 1]));
|
||||||
@ -414,7 +418,7 @@ GLAPI GLAPIENTRY void mg_glMultiDrawElementsBaseVertex_compute(
|
|||||||
GLES.glGetIntegerv(GL_CURRENT_PROGRAM, &prev_program);
|
GLES.glGetIntegerv(GL_CURRENT_PROGRAM, &prev_program);
|
||||||
CHECK_GL_ERROR_NO_INIT
|
CHECK_GL_ERROR_NO_INIT
|
||||||
GLint prev_vb = 0;
|
GLint prev_vb = 0;
|
||||||
GLES.glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &prev_vb);
|
GLES.glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &prev_vb);
|
||||||
CHECK_GL_ERROR_NO_INIT
|
CHECK_GL_ERROR_NO_INIT
|
||||||
|
|
||||||
// Dispatch compute
|
// Dispatch compute
|
||||||
@ -434,7 +438,7 @@ GLAPI GLAPIENTRY void mg_glMultiDrawElementsBaseVertex_compute(
|
|||||||
LOG_D("draw")
|
LOG_D("draw")
|
||||||
GLES.glUseProgram(prev_program);
|
GLES.glUseProgram(prev_program);
|
||||||
CHECK_GL_ERROR_NO_INIT
|
CHECK_GL_ERROR_NO_INIT
|
||||||
GLES.glBindBuffer(GL_VERTEX_ARRAY, prev_vb);
|
GLES.glBindBuffer(GL_ARRAY_BUFFER, prev_vb);
|
||||||
CHECK_GL_ERROR_NO_INIT
|
CHECK_GL_ERROR_NO_INIT
|
||||||
GLES.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_outputibo);
|
GLES.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_outputibo);
|
||||||
CHECK_GL_ERROR_NO_INIT
|
CHECK_GL_ERROR_NO_INIT
|
||||||
|
@ -21,22 +21,26 @@ void main() {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Find out draw call #
|
// Find out draw call #
|
||||||
int low = 0;
|
// int low = 0;
|
||||||
int high = draws.length();
|
// int high = draws.length();
|
||||||
for (low = 0; low < high; ++low) {
|
// for (low = 0; low < high; ++low) {
|
||||||
if (prefixSums[low] > outIdx) {
|
// if (prefixSums[low] > outIdx) {
|
||||||
break;
|
// break;
|
||||||
}
|
|
||||||
}
|
|
||||||
// while (low < high) {
|
|
||||||
// int mid = low + (high - low) / 2;
|
|
||||||
// if (prefixSums[mid] > outIdx) {
|
|
||||||
// high = mid;
|
|
||||||
// } else {
|
|
||||||
// low = mid + 1;
|
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
int low = 0;
|
||||||
|
int high = draws.length();
|
||||||
|
while (low < high) {
|
||||||
|
int mid = low + (high - low) / 2;
|
||||||
|
if (prefixSums[mid] <= outIdx) {
|
||||||
|
low = mid + 1; // next [mid + 1, high)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
high = mid; // next [low, mid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// figure out which index to take
|
// figure out which index to take
|
||||||
DrawCommand cmd = draws[low];
|
DrawCommand cmd = draws[low];
|
||||||
uint localIdx = outIdx - ((low == 0) ? 0u : (prefixSums[low - 1]));
|
uint localIdx = outIdx - ((low == 0) ? 0u : (prefixSums[low - 1]));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user