The motivation for this is that (as noted by curro)
ARB_shader_image_load_store doesn't support images with an internal
format of GL_RGBA.

See 'Table X.2' in
https://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt

Therefore, in order to use image load/store in shader runner tests, we
must override the default internal format when creating the image.

We retain the default internal format of GL_RGBA and base type of
GL_UNSIGNED_NORMALIZED for the image creation.

Now an internal format can optionally be added as a new parameter when
creating the image. For example:

  texture rgbw 0 (16, 16) GL_RGBA8

Additionally, an optional fifth paramter can be added. This will
specify the base type for the image. For example:

  texture rgbw 0 (16, 16) GL_RGBA8 GL_UNSIGNED_NORMALIZED

Signed-off-by: Jordan Justen <[email protected]>
Cc: Francisco Jerez <[email protected]>
---
 tests/shaders/shader_runner.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
index 2df9e78..fe59b1d 100644
--- a/tests/shaders/shader_runner.c
+++ b/tests/shaders/shader_runner.c
@@ -2308,7 +2308,7 @@ piglit_display(void)
                float c[32];
                double d[4];
                int x, y, z, w, h, l, tex, level;
-               char s[32];
+               char s[32], s2[32];
 
 
                line = eat_whitespace(next_line);
@@ -2570,11 +2570,27 @@ piglit_display(void)
                        glShadeModel(GL_SMOOTH);
                } else if (string_match("shade model flat", line)) {
                        glShadeModel(GL_FLAT);
-               } else if (sscanf(line,
-                                 "texture rgbw %d ( %d , %d )",
-                                 &tex, &w, &h) == 3) {
+               } else if (string_match("texture rgbw ", line)) {
+                       int num_scanned;
+                       GLenum int_fmt = GL_RGBA, base_type = 
GL_UNSIGNED_NORMALIZED;
+                       num_scanned = sscanf(line, "texture rgbw %d ( %d , %d ) 
%31s %31s",
+                                            &tex, &w, &h, s, s2);
+                       if (num_scanned < 3) {
+                               printf("invalid texture rgbw command!\n");
+                               piglit_report_result(PIGLIT_FAIL);
+                       }
+
+                       if (num_scanned >= 5) {
+                               base_type = piglit_get_gl_enum_from_name(s2);
+                       }
+
+                       if (num_scanned >= 4) {
+                               int_fmt = piglit_get_gl_enum_from_name(s);
+                       }
+
                        glActiveTexture(GL_TEXTURE0 + tex);
-                       piglit_rgbw_texture(GL_RGBA, w, h, GL_FALSE, GL_FALSE, 
GL_UNSIGNED_NORMALIZED);
+                       piglit_rgbw_texture(int_fmt, w, h, GL_FALSE, GL_FALSE,
+                                           base_type);
                        if (!piglit_is_core_profile)
                                glEnable(GL_TEXTURE_2D);
                } else if (sscanf(line, "texture miptree %d", &tex) == 1) {
-- 
2.1.4

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to