GLSL循环分配 - > “无效操作”

时间:2015-06-18 11:46:33

标签: opengl glsl

我试图让多项式方程求解器在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卡有什么问题?

1 个答案:

答案 0 :(得分:0)

这段代码实际上工作正常,错误从其他地方传播。在另一个循环中有一些微妙的数组越界错误,但AMD驱动程序似乎忽略了这些边缘情况。