From e3306f2e63af4e9c1ac2b0781f67f50906574b97 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Wed, 22 Nov 2017 19:57:32 +0100 Subject: [PATCH] Move the compute shader tests into effect_chain_test, as we will have hybrid tests soon. --- Makefile.in | 2 +- compute_shader_test.cpp | 86 ----------------------------------------- effect_chain_test.cpp | 68 ++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 87 deletions(-) delete mode 100644 compute_shader_test.cpp diff --git a/Makefile.in b/Makefile.in index 4ff1705..c25d77d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -88,7 +88,7 @@ UNTESTED_EFFECTS += fft_input EFFECTS = $(TESTED_EFFECTS) $(UNTESTED_EFFECTS) # Unit tests. -TESTS=effect_chain_test compute_shader_test fp16_test $(TESTED_INPUTS:=_test) $(TESTED_EFFECTS:=_test) +TESTS=effect_chain_test fp16_test $(TESTED_INPUTS:=_test) $(TESTED_EFFECTS:=_test) LIB_OBJS=effect_util.o util.o effect.o effect_chain.o init.o resource_pool.o ycbcr.o $(INPUTS:=.o) $(EFFECTS:=.o) diff --git a/compute_shader_test.cpp b/compute_shader_test.cpp deleted file mode 100644 index 50b2694..0000000 --- a/compute_shader_test.cpp +++ /dev/null @@ -1,86 +0,0 @@ -#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.comp"); } -}; - -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); -} - -TEST(ComputeShaderTest, Render8BitTo8Bit) { - uint8_t data[] = { - 14, 200, 80, - 90, 100, 110, - }; - uint8_t out_data[6]; - EffectChainTester tester(nullptr, 3, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, GL_RGBA8); - if (!movit_compute_shaders_supported) { - fprintf(stderr, "Skipping test; no support for compile shaders.\n"); - return; - } - tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 3, 2); - 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 diff --git a/effect_chain_test.cpp b/effect_chain_test.cpp index 1200876..2140354 100644 --- a/effect_chain_test.cpp +++ b/effect_chain_test.cpp @@ -1467,4 +1467,72 @@ TEST(EffectChainTest, ProgramsAreClonedForMultipleThreads) { expect_equal(data, out_data, 3, 2); } +// An effect that does nothing, but as a compute shader. +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.comp"); } +}; + +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); +} + +TEST(ComputeShaderTest, Render8BitTo8Bit) { + uint8_t data[] = { + 14, 200, 80, + 90, 100, 110, + }; + uint8_t out_data[6]; + EffectChainTester tester(nullptr, 3, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, GL_RGBA8); + if (!movit_compute_shaders_supported) { + fprintf(stderr, "Skipping test; no support for compile shaders.\n"); + return; + } + tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 3, 2); + 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 -- 2.39.2