Fix another set of test breakages on NVIDIA.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 22 Nov 2017 23:59:46 +0000 (00:59 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 22 Nov 2017 23:59:46 +0000 (00:59 +0100)
This was broken by c6ee050546b6940ae19a74f92bdcc8d2b1f56d22,
which stopped modifying destination textures' minification modes.

effect_chain.h
test_util.cpp

index 992fb58..716a970 100644 (file)
@@ -400,7 +400,10 @@ public:
        // All destination textures must be exactly of size <width> x <height>,
        // and must either come from the same ResourcePool the effect uses, or outlive
        // the EffectChain (otherwise, we could be allocating FBOs that end up being
-       // stale). width and height can not be zero.
+       // stale). Textures must also have valid state; in particular, they must either
+       // be mipmap complete or have a non-mipmapped minification mode.
+       //
+       // width and height can not be zero.
        struct DestinationTexture {
                GLuint texnum;
                GLenum format;
index ec8b146..d2ed9f8 100644 (file)
@@ -248,10 +248,19 @@ void EffectChainTester::internal_run(T *out_data, T *out_data2, T *out_data3, T
                num_outputs = 1;
        }
 
+       glActiveTexture(GL_TEXTURE0);
+       check_error();
+
        vector<EffectChain::DestinationTexture> textures;
        for (unsigned i = 0; i < num_outputs; ++i) {
                GLuint texnum = chain.get_resource_pool()->create_2d_texture(framebuffer_format, width, height);
                textures.push_back(EffectChain::DestinationTexture{texnum, framebuffer_format});
+
+               // The output texture needs to have valid state to be written to by a compute shader.
+               glBindTexture(GL_TEXTURE_2D, texnum);
+               check_error();
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+               check_error();
        }
 
        chain.render_to_texture(textures, width, height);