From: Marek Olšák <marek.ol...@amd.com>

---
 tests/opengl.py                         |   7 ++
 tests/spec/gl-3.1/mixed-int-float-fbo.c | 100 +++++++++++++++++++-----
 2 files changed, 88 insertions(+), 19 deletions(-)

diff --git a/tests/opengl.py b/tests/opengl.py
index 40c37a055..666b35200 100644
--- a/tests/opengl.py
+++ b/tests/opengl.py
@@ -3026,20 +3026,27 @@ with profile.test_list.group_manager(
     g(['getteximage-formats', 'init-by-rendering'])
     g(['getteximage-formats', 'init-by-clear-and-render'])
     g(['ext_framebuffer_multisample-fast-clear', 'single-sample'],
       'fbo-fast-clear')
     g(['ext_framebuffer_object-border-texture-finish'])
     add_fbo_stencil_tests(g, 'GL_STENCIL_INDEX1')
     add_fbo_stencil_tests(g, 'GL_STENCIL_INDEX4')
     add_fbo_stencil_tests(g, 'GL_STENCIL_INDEX8')
     add_fbo_stencil_tests(g, 'GL_STENCIL_INDEX16')
 
+
+with profile.test_list.group_manager(
+        PiglitGLTest,
+        grouptools.join('spec', 'ext_gpu_shader4')) as g:
+    g(['gl-3.1-mixed-int-float-fbo', 'ext_gpu_shader4'], 'bindfragdatalocation 
mixed-int-float-fbo')
+    g(['gl-3.1-mixed-int-float-fbo', 'ext_gpu_shader4', 'int_second'], 
'bindfragdatalocation mixed-int-float-fbo int_second')
+
 with profile.test_list.group_manager(
         PiglitGLTest, grouptools.join('spec', 'ext_image_dma_buf_import')) as \
         g:
     g(['ext_image_dma_buf_import-invalid_hints'], run_concurrent=False)
     g(['ext_image_dma_buf_import-invalid_attributes'], run_concurrent=False)
     g(['ext_image_dma_buf_import-missing_attributes'], run_concurrent=False)
     g(['ext_image_dma_buf_import-ownership_transfer'], run_concurrent=False)
     g(['ext_image_dma_buf_import-unsupported_format'], run_concurrent=False)
     g(['ext_image_dma_buf_import-intel_external_sampler_only'],
       run_concurrent=False)
diff --git a/tests/spec/gl-3.1/mixed-int-float-fbo.c 
b/tests/spec/gl-3.1/mixed-int-float-fbo.c
index d2d7aeb65..8dfeccb41 100644
--- a/tests/spec/gl-3.1/mixed-int-float-fbo.c
+++ b/tests/spec/gl-3.1/mixed-int-float-fbo.c
@@ -26,22 +26,36 @@
  * Test mixed integer/float FBO.
  *
  * If the argument 'int_second' is given the 0th color attachment will
  * be a unorm texture and the 1st color attachment will be an integer texture.
  * Otherwise, the 0th color attachment will be integer and the 1st color
  * attachment will be unorm.
  */
 
 #include "piglit-util-gl.h"
 
+static bool ext_gpu_shader4 = false;
+
 PIGLIT_GL_TEST_CONFIG_BEGIN
-       config.supports_gl_core_version = 31;
+       for (int i = 1; i < argc; i++) {
+               if (!strcmp(argv[i], "ext_gpu_shader4")) {
+                       ext_gpu_shader4 = true;
+                       puts("Testing GL_EXT_gpu_shader4.");
+                       break;
+               }
+       }
+
+       if (ext_gpu_shader4)
+               config.supports_gl_compat_version = 10;
+       else
+               config.supports_gl_core_version = 31;
+
        config.window_visual = PIGLIT_GL_VISUAL_RGBA;
        config.khr_no_error_support = PIGLIT_NO_ERRORS;
 PIGLIT_GL_TEST_CONFIG_END
 
 static const char *vs_text =
        "#version 150\n"
        "in vec4 vertex;\n"
        "void main() \n"
        "{ \n"
        "   gl_Position = vertex; \n"
@@ -50,35 +64,71 @@ static const char *vs_text =
 static const char *fs_text =
        "#version 150\n"
        "out ivec4 outputInt;\n"
        "out vec4 outputFloat;\n"
        "void main() \n"
        "{ \n"
        "   outputInt = ivec4(1, 2, 3, 4); \n"
        "   outputFloat = vec4(0.25, 0.5, 0.75, 1.0); \n"
        "} \n";
 
+static const char *vs_text_gpu_shader4 =
+       "#version 110\n"
+       "attribute vec4 vertex;\n"
+       "void main() \n"
+       "{ \n"
+       "   gl_Position = vertex; \n"
+       "} \n";
+
+static const char *fs_text_gpu_shader4 =
+       "#version 110\n"
+       "#extension GL_EXT_gpu_shader4 : enable\n"
+       "varying out ivec4 outputInt;\n"
+       "varying out vec4 outputFloat;\n"
+       "void main() \n"
+       "{ \n"
+       "   outputInt = ivec4(1, 2, 3, 4); \n"
+       "   outputFloat = vec4(0.25, 0.5, 0.75, 1.0); \n"
+       "} \n";
+
 const int width = 128, height = 128;
 bool int_output_first = true;
 
 
 static GLuint
 create_program(void)
 {
-       GLuint program = piglit_build_simple_program(vs_text, fs_text);
-       if (int_output_first) {
-               glBindFragDataLocation(program, 0, "outputInt");
-               glBindFragDataLocation(program, 1, "outputFloat");
-       }
-       else {
-               glBindFragDataLocation(program, 0, "outputFloat");
-               glBindFragDataLocation(program, 1, "outputInt");
+       GLuint program;
+
+       if (ext_gpu_shader4) {
+               program = piglit_build_simple_program(vs_text_gpu_shader4,
+                                                     fs_text_gpu_shader4);
+
+               if (int_output_first) {
+                       glBindFragDataLocationEXT(program, 0, "outputInt");
+                       glBindFragDataLocationEXT(program, 1, "outputFloat");
+               }
+               else {
+                       glBindFragDataLocationEXT(program, 0, "outputFloat");
+                       glBindFragDataLocationEXT(program, 1, "outputInt");
+               }
+       } else {
+               program = piglit_build_simple_program(vs_text, fs_text);
+
+               if (int_output_first) {
+                       glBindFragDataLocation(program, 0, "outputInt");
+                       glBindFragDataLocation(program, 1, "outputFloat");
+               }
+               else {
+                       glBindFragDataLocation(program, 0, "outputFloat");
+                       glBindFragDataLocation(program, 1, "outputInt");
+               }
        }
 
        glLinkProgram(program);
        if (!piglit_link_check_status(program))
                piglit_report_result(PIGLIT_FAIL);
 
        piglit_check_gl_error(GL_NO_ERROR);
 
        return program;
 }
@@ -139,30 +189,35 @@ create_fbo(void)
                piglit_report_result(PIGLIT_SKIP);
        }
 
        return fbo;
 }
 
 
 enum piglit_result
 piglit_display(void)
 {
-       const int int_clear[4] = { 99, 99, 99, 99 };
-       const float float_clear[4] = { 0.33, 0.33, 0.33, 0.33 };
-
-       if (int_output_first) {
-               glClearBufferiv(GL_COLOR, 0, int_clear);
-               glClearBufferfv(GL_COLOR, 1, float_clear);
-       }
-       else {
-               glClearBufferfv(GL_COLOR, 0, float_clear);
-               glClearBufferiv(GL_COLOR, 1, int_clear);
+       if (ext_gpu_shader4) {
+               glClearColor(0, 0, 0, 0);
+               glClear(GL_COLOR_BUFFER_BIT);
+       } else {
+               const int int_clear[4] = { 99, 99, 99, 99 };
+               const float float_clear[4] = { 0.33, 0.33, 0.33, 0.33 };
+
+               if (int_output_first) {
+                       glClearBufferiv(GL_COLOR, 0, int_clear);
+                       glClearBufferfv(GL_COLOR, 1, float_clear);
+               }
+               else {
+                       glClearBufferfv(GL_COLOR, 0, float_clear);
+                       glClearBufferiv(GL_COLOR, 1, int_clear);
+               }
        }
 
        piglit_draw_rect(-1, -1, 2, 2);
 
        bool pass = true;
 
        /* check the int target */
        if (int_output_first) {
                glReadBuffer(GL_COLOR_ATTACHMENT0);
        }
@@ -205,20 +260,27 @@ piglit_display(void)
 
        pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
 
        return pass ? PIGLIT_PASS : PIGLIT_FAIL;
 }
 
 
 void
 piglit_init(int argc, char **argv)
 {
+       if (ext_gpu_shader4) {
+               piglit_require_gl_version(20);
+               piglit_require_extension("GL_ARB_framebuffer_object");
+               piglit_require_extension("GL_EXT_gpu_shader4");
+               piglit_require_extension("GL_EXT_texture_integer");
+       }
+
        if (argc > 1 && strcmp(argv[1], "int_second") == 0) {
                int_output_first = false;
        }
 
        GLuint fbo = create_fbo();
        GLuint program = create_program();
 
        glBindFramebuffer(GL_FRAMEBUFFER, fbo);
        glUseProgram(program);
 }
-- 
2.17.1

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to