tests/cogl: Migrate pipeline shader state test

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2555>
This commit is contained in:
Jonas Ådahl
2022-08-04 22:24:31 +02:00
committed by Marge Bot
parent 94744061de
commit e7f535a21d
5 changed files with 7 additions and 7 deletions

View File

@@ -1,6 +1,5 @@
cogl_test_conformance_sources = [
'test-conform-main.c',
'test-pipeline-shader-state.c',
'test-texture-rg.c',
'test-fence.c',
]

View File

@@ -70,8 +70,6 @@ main (int argc, char **argv)
UNPORTED_TEST (test_vertex_buffer_interleved);
UNPORTED_TEST (test_vertex_buffer_mutability);
ADD_TEST (test_pipeline_shader_state, 0, 0);
UNPORTED_TEST (test_viewport);
ADD_TEST (test_fence, TEST_REQUIREMENT_FENCE, 0);

View File

@@ -5,7 +5,6 @@ void test_path (void);
void test_path_clip (void);
void test_depth_test (void);
void test_backface_culling (void);
void test_pipeline_shader_state (void);
void test_gles2_context (void);
void test_gles2_context_fbo (void);
void test_gles2_context_copy_tex_image (void);

View File

@@ -1,94 +0,0 @@
#include <cogl/cogl.h>
#include <string.h>
#include "test-declarations.h"
#include "test-utils.h"
void
test_pipeline_shader_state (void)
{
CoglOffscreen *offscreen;
CoglFramebuffer *fb;
CoglPipeline *base_pipeline;
CoglPipeline *draw_pipeline;
CoglTexture2D *tex;
CoglSnippet *snippet;
float width = cogl_framebuffer_get_width (test_fb);
float height = cogl_framebuffer_get_height (test_fb);
cogl_framebuffer_orthographic (test_fb,
0, 0, width, height,
-1,
100);
tex = cogl_texture_2d_new_with_size (test_ctx, 128, 128);
offscreen = cogl_offscreen_new_with_texture (tex);
fb = COGL_FRAMEBUFFER (offscreen);
cogl_framebuffer_clear4f (fb, COGL_BUFFER_BIT_COLOR, 0, 0, 0, 1);
g_object_unref (offscreen);
cogl_framebuffer_clear4f (test_fb, COGL_BUFFER_BIT_COLOR, 1, 1, 0, 1);
/* Setup a template pipeline... */
base_pipeline = cogl_pipeline_new (test_ctx);
cogl_pipeline_set_layer_texture (base_pipeline, 1, tex);
cogl_pipeline_set_color4f (base_pipeline, 1, 0, 0, 1);
/* Derive a pipeline from the template, making a change that affects
* fragment processing but making sure not to affect vertex
* processing... */
draw_pipeline = cogl_pipeline_copy (base_pipeline);
snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_FRAGMENT,
NULL, /* declarations */
"cogl_color_out = vec4 (0.0, 1.0, 0.1, 1.1);");
cogl_pipeline_add_snippet (draw_pipeline, snippet);
cogl_object_unref (snippet);
cogl_framebuffer_draw_rectangle (test_fb, draw_pipeline,
0, 0, width, height);
cogl_object_unref (draw_pipeline);
cogl_framebuffer_finish (test_fb);
/* At this point we should have provoked cogl to cache some vertex
* shader state for the draw_pipeline with the base_pipeline because
* none of the changes made to the draw_pipeline affected vertex
* processing. (NB: cogl will cache shader state with the oldest
* ancestor that the state is still valid for to maximize the chance
* that it can be used with other derived pipelines)
*
* Now we make a change to the base_pipeline to make sure that this
* cached vertex shader gets invalidated.
*/
cogl_pipeline_set_layer_texture (base_pipeline, 0, tex);
/* Now we derive another pipeline from base_pipeline to verify that
* it doesn't end up re-using the old cached state
*/
draw_pipeline = cogl_pipeline_copy (base_pipeline);
snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_FRAGMENT,
NULL, /* declarations */
"cogl_color_out = vec4 (0.0, 0.0, 1.1, 1.1);");
cogl_pipeline_add_snippet (draw_pipeline, snippet);
cogl_object_unref (snippet);
cogl_framebuffer_draw_rectangle (test_fb, draw_pipeline,
0, 0, width, height);
cogl_object_unref (draw_pipeline);
test_utils_check_region (test_fb, 0, 0, width, height,
0x0000ffff);
}