X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=compute_shader_test.cpp;fp=compute_shader_test.cpp;h=7179f82c9cff96612bfc943d17e9ff42c9f78220;hb=65c6584f77bff0af0c8e38d1ac90298bcd55e9ac;hp=0000000000000000000000000000000000000000;hpb=706365ccee2ad69c5bc3608e12ca8e9ada7ce954;p=movit diff --git a/compute_shader_test.cpp b/compute_shader_test.cpp new file mode 100644 index 0000000..7179f82 --- /dev/null +++ b/compute_shader_test.cpp @@ -0,0 +1,68 @@ +#include + +#include +#include + +#include "effect.h" +#include "flat_input.h" +#include "gtest/gtest.h" +#include "init.h" +#include "resource_pool.h" +#include "test_util.h" +#include "util.h" + +using namespace std; + +namespace movit { + +// An effect that does nothing. +class IdentityComputeEffect : public Effect { +public: + IdentityComputeEffect() {} + virtual string effect_type_id() const { return "IdentityComputeEffect"; } + virtual bool is_compute_shader() const { return true; } + string output_fragment_shader() { return read_file("identity.compute"); } +}; + +TEST(ComputeShaderTest, Identity) { + float data[] = { + 0.0f, 0.25f, 0.3f, + 0.75f, 1.0f, 1.0f, + }; + float out_data[6]; + EffectChainTester tester(data, 3, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + if (!movit_compute_shaders_supported) { + fprintf(stderr, "Skipping test; no support for compile shaders.\n"); + return; + } + tester.get_chain()->add_effect(new IdentityComputeEffect()); + tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR); + + expect_equal(data, out_data, 3, 2); +} + +// Like IdentityComputeEffect, but due to the alpha handling, this will be +// the very last effect in the chain, which means we can't output it directly +// to the screen. +class IdentityAlphaComputeEffect : public IdentityComputeEffect { + AlphaHandling alpha_handling() const { return DONT_CARE_ALPHA_TYPE; } +}; + +TEST(ComputeShaderTest, LastEffectInChain) { + float data[] = { + 0.0f, 0.25f, 0.3f, + 0.75f, 1.0f, 1.0f, + }; + float out_data[6]; + EffectChainTester tester(data, 3, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + if (!movit_compute_shaders_supported) { + fprintf(stderr, "Skipping test; no support for compile shaders.\n"); + return; + } + tester.get_chain()->add_effect(new IdentityAlphaComputeEffect()); + tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR); + + expect_equal(data, out_data, 3, 2); +} + +} // namespace movit