我试图让多项式方程求解器在GLSL中工作,但是当我包含这一小段代码时,它失败了:
//bs_a: start of monotonic section
//bs_b: end
//factor: 1.0 if bs_a < bs_b and -1.0 else
for (int iter = 0; iter < bisectionIterations; iter++) {
bs_m = mix(bs_a, bs_b, 0.5);
if (poly_calculatevalue(in_p, bs_m) * factor < 0.0)
bs_a = mix(bs_a, bs_b, 0.5);
else bs_b = bs_m;
}
我也尝试过这样重写:
for (int iter = 0; iter < bisectionIterations; iter++) {
bs_m = mix(bs_a, bs_b, 0.5);
tmp = step(0.0, poly_calculatevalue(in_p, bs_m) * factor);
bs_a = (1-tmp) * bs_m + tmp * bs_a;
bs_b = tmp * bs_m + (1-tmp) * bs_b;
}
此代码在Nvidia Gtx580上的GLSL 430中的计算机中执行。调用glUseProgram时,我只得到一个runtimme错误(GL_INVALID_OPERATION)以及使用此程序的所有后续函数(SetUniform,DispatchCompute等)
编辑:该代码实际上可以在我的笔记本电脑上使用AMD E-300 APU。 nvidia卡有什么问题?
答案 0 :(得分:0)
这段代码实际上工作正常,错误从其他地方传播。在另一个循环中有一些微妙的数组越界错误,但AMD驱动程序似乎忽略了这些边缘情况。