]> git.sesse.net Git - movit/blobdiff - slice_effect_test.cpp
Fix resizing compute shaders when used with postprocessing effects.
[movit] / slice_effect_test.cpp
index 410439abcb606cd9a13be2f4017a797093ea6a7c..163561e7a769b47c1e10342fc1eb973f2e988d4e 100644 (file)
@@ -26,7 +26,7 @@ TEST(SliceEffectTest, Identity) {
        };
        float out_data[output_size * size];
 
-       EffectChainTester tester(NULL, output_size, size, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
+       EffectChainTester tester(nullptr, output_size, size, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
        tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, size, size);
 
        Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect());
@@ -49,7 +49,7 @@ TEST(SliceEffectTest, HorizontalOverlap) {
        };
        float out_data[9 * 2];
 
-       EffectChainTester tester(NULL, 9, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
+       EffectChainTester tester(nullptr, 9, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
        tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 5, 2);
 
        Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect());
@@ -72,7 +72,7 @@ TEST(SliceEffectTest, HorizontalDiscard) {
        };
        float out_data[4 * 2];
 
-       EffectChainTester tester(NULL, 4, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
+       EffectChainTester tester(nullptr, 4, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
        tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 6, 2);
 
        Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect());
@@ -84,30 +84,85 @@ TEST(SliceEffectTest, HorizontalDiscard) {
        expect_equal(expected_data, out_data, 4, 2);
 }
 
-TEST(SliceEffectTest, VerticalOverlapSlicesFromBottom) {
+TEST(SliceEffectTest, HorizontalOverlapWithOffset) {
+       float data[5 * 2] = {
+               /* 0.0f, */ 0.0f,  0.1f, 0.2f,  0.3f, 0.4f,
+               /* 0.4f, */ 0.4f,  0.3f, 0.2f,  0.1f, 0.0f,
+       };
+       float expected_data[9 * 2] = {
+               0.0f, 0.0f, 0.1f,  0.1f, 0.2f, 0.3f,  0.3f, 0.4f, 0.4f,
+               0.4f, 0.4f, 0.3f,  0.3f, 0.2f, 0.1f,  0.1f, 0.0f, 0.0f,
+       };
+       float out_data[9 * 2];
+
+       EffectChainTester tester(nullptr, 9, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
+       tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 5, 2);
+
+       Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect());
+       ASSERT_TRUE(slice_effect->set_int("input_slice_size", 2));
+       ASSERT_TRUE(slice_effect->set_int("output_slice_size", 3));
+       ASSERT_TRUE(slice_effect->set_int("offset", -1));
+       ASSERT_TRUE(slice_effect->set_int("direction", SliceEffect::HORIZONTAL));
+       tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR);
+
+       expect_equal(expected_data, out_data, 9, 2);
+}
+
+TEST(SliceEffectTest, VerticalOverlapSlicesFromTop) {
        float data[2 * 3] = {
                0.0f, 0.1f,
-
                0.4f, 0.3f,
+
                0.6f, 0.2f,
        };
        float expected_data[2 * 6] = {
                0.0f, 0.1f,
-               0.0f, 0.1f,
-               0.0f, 0.1f,
+               0.4f, 0.3f,
+               0.6f, 0.2f,
 
+               0.6f, 0.2f,
+               0.6f, 0.2f,
+               0.6f, 0.2f,
+       };
+       float out_data[2 * 6];
+
+       EffectChainTester tester(nullptr, 2, 6, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
+       tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 2, 3);
+
+       Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect());
+       ASSERT_TRUE(slice_effect->set_int("input_slice_size", 2));
+       ASSERT_TRUE(slice_effect->set_int("output_slice_size", 3));
+       ASSERT_TRUE(slice_effect->set_int("direction", SliceEffect::VERTICAL));
+       tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR);
+
+       expect_equal(expected_data, out_data, 2, 6);
+}
+
+TEST(SliceEffectTest, VerticalOverlapOffsetsFromTop) {
+       float data[2 * 3] = {
                0.0f, 0.1f,
                0.4f, 0.3f,
+
+               0.6f, 0.2f,
+       };
+       float expected_data[2 * 6] = {
+               0.4f, 0.3f,
+               0.6f, 0.2f,
+               0.6f, 0.2f,
+
+               0.6f, 0.2f,
+               0.6f, 0.2f,
                0.6f, 0.2f,
        };
        float out_data[2 * 6];
 
-       EffectChainTester tester(NULL, 2, 6, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
+       EffectChainTester tester(nullptr, 2, 6, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
        tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 2, 3);
 
        Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect());
        ASSERT_TRUE(slice_effect->set_int("input_slice_size", 2));
        ASSERT_TRUE(slice_effect->set_int("output_slice_size", 3));
+       ASSERT_TRUE(slice_effect->set_int("offset", 1));
        ASSERT_TRUE(slice_effect->set_int("direction", SliceEffect::VERTICAL));
        tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR);