diff options
author | Marek Olšák <maraeo@gmail.com> | 2013-01-06 05:30:01 +0100 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2013-01-15 17:22:50 +0100 |
commit | 5a2bd765802ddbc05880cde8c3f158701c89569e (patch) | |
tree | 292953bf2f971e246667d398f86a25552036d09a | |
parent | 0152c6e339099c3e46795d89efe3108d08fff4f3 (diff) |
MSAA tests: port all GLSL shaders to GLSL 1.20
v2: changed +1 to +4 per Paul Berry's review.
Reviewed-by: Paul Berry <stereotype441@gmail.com>
5 files changed, 132 insertions, 90 deletions
diff --git a/tests/spec/ext_framebuffer_multisample/common.cpp b/tests/spec/ext_framebuffer_multisample/common.cpp index fe6b40bd..5c03d88a 100644 --- a/tests/spec/ext_framebuffer_multisample/common.cpp +++ b/tests/spec/ext_framebuffer_multisample/common.cpp @@ -195,12 +195,13 @@ Fbo::try_setup(const FboConfig &new_config) GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_rb); } else { - glBindTexture(GL_TEXTURE_2D, color_tex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + piglit_require_extension("GL_ARB_texture_rectangle"); + glBindTexture(GL_TEXTURE_RECTANGLE, color_tex); + glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, + glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, + glTexImage2D(GL_TEXTURE_RECTANGLE, 0 /* level */, config.color_internalformat, config.width, @@ -211,7 +212,7 @@ Fbo::try_setup(const FboConfig &new_config) NULL /* data */); glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, - GL_TEXTURE_2D, + GL_TEXTURE_RECTANGLE, color_tex, 0 /* level */); } @@ -274,10 +275,10 @@ void DownsampleProg::compile(int supersample_factor) { static const char *vert = - "#version 130\n" - "in vec2 pos;\n" - "in vec2 texCoord;\n" - "out vec2 texCoordVarying;\n" + "#version 120\n" + "attribute vec2 pos;\n" + "attribute vec2 texCoord;\n" + "varying vec2 texCoordVarying;\n" "void main()\n" "{\n" " gl_Position = vec4(pos, 0.0, 1.0);\n" @@ -285,18 +286,18 @@ DownsampleProg::compile(int supersample_factor) "}\n"; static const char *frag = - "#version 130\n" - "uniform sampler2D samp;\n" + "#version 120\n" + "uniform sampler2DRect samp;\n" "uniform int supersample_factor;\n" - "in vec2 texCoordVarying;\n" + "varying vec2 texCoordVarying;\n" "void main()\n" "{\n" " vec4 sum = vec4(0.0);\n" - " ivec2 pixel = ivec2(texCoordVarying);\n" + " vec2 pixel = floor(texCoordVarying);\n" " for (int i = 0; i < supersample_factor; ++i) {\n" " for (int j = 0; j < supersample_factor; ++j) {\n" - " sum += texelFetch(\n" - " samp, pixel * supersample_factor + ivec2(i, j), 0);\n" + " sum += texture2DRect(\n" + " samp, pixel * float(supersample_factor) + vec2(i, j));\n" " }\n" " }\n" " gl_FragColor = sum / (supersample_factor * supersample_factor);\n" @@ -354,7 +355,7 @@ DownsampleProg::run(const Fbo *src_fbo, int dest_width, int dest_height, float h = dest_height; glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, src_fbo->color_tex); + glBindTexture(GL_TEXTURE_RECTANGLE, src_fbo->color_tex); glUseProgram(prog); glBindVertexArray(vao); @@ -384,15 +385,15 @@ void ManifestStencil::compile() { static const char *vert = - "#version 130\n" - "in vec2 pos;\n" + "#version 120\n" + "attribute vec2 pos;\n" "void main()\n" "{\n" " gl_Position = vec4(pos, 0.0, 1.0);\n" "}\n"; static const char *frag = - "#version 130\n" + "#version 120\n" "uniform vec4 color;\n" "void main()\n" "{\n" @@ -483,8 +484,8 @@ void ManifestDepth::compile() { static const char *vert = - "#version 130\n" - "in vec2 pos;\n" + "#version 120\n" + "attribute vec2 pos;\n" "uniform float depth;\n" "void main()\n" "{\n" @@ -492,7 +493,7 @@ ManifestDepth::compile() "}\n"; static const char *frag = - "#version 130\n" + "#version 120\n" "uniform vec4 color;\n" "void main()\n" "{\n" @@ -618,8 +619,8 @@ void Triangles::compile() float final_scale = 0.95; static const char *vert = - "#version 130\n" - "in vec2 pos_within_tri;\n" + "#version 120\n" + "attribute vec2 pos_within_tri;\n" "uniform float tri_scale;\n" "uniform float rotation_delta;\n" "uniform int tris_across;\n" @@ -633,7 +634,7 @@ void Triangles::compile() " float rotation = rotation_delta * tri_num;\n" " pos = mat2(cos(rotation), sin(rotation),\n" " -sin(rotation), cos(rotation)) * pos;\n" - " int i = tri_num % tris_across;\n" + " int i = int(mod(float(tri_num), float(tris_across)));\n" " int j = tris_across - 1 - tri_num / tris_across;\n" " pos += (vec2(i, j) * 2.0 + 1.0) / tris_across - 1.0;\n" " pos *= final_scale;\n" @@ -641,7 +642,7 @@ void Triangles::compile() "}\n"; static const char *frag = - "#version 130\n" + "#version 120\n" "void main()\n" "{\n" " gl_FragColor = vec4(1.0);\n" @@ -731,13 +732,13 @@ InterpolationTestPattern::compile() float final_scale = 0.95; static const char *vert = - "#version 130\n" - "in vec2 pos_within_tri;\n" - "in vec3 in_barycentric_coords;\n" - "out vec3 barycentric_coords;\n" - "centroid out vec3 barycentric_coords_centroid;\n" - "out vec2 pixel_pos;\n" - "centroid out vec2 pixel_pos_centroid;\n" + "#version 120\n" + "attribute vec2 pos_within_tri;\n" + "attribute vec3 in_barycentric_coords;\n" + "varying vec3 barycentric_coords;\n" + "centroid varying vec3 barycentric_coords_centroid;\n" + "varying vec2 pixel_pos;\n" + "centroid varying vec2 pixel_pos_centroid;\n" "uniform float tri_scale;\n" "uniform float rotation_delta;\n" "uniform int tris_across;\n" @@ -752,7 +753,7 @@ InterpolationTestPattern::compile() " float rotation = rotation_delta * tri_num;\n" " pos = mat2(cos(rotation), sin(rotation),\n" " -sin(rotation), cos(rotation)) * pos;\n" - " int i = tri_num % tris_across;\n" + " int i = int(mod(float(tri_num), float(tris_across)));\n" " int j = tris_across - 1 - tri_num / tris_across;\n" " pos += (vec2(i, j) * 2.0 + 1.0) / tris_across - 1.0;\n" " pos *= final_scale;\n" @@ -852,8 +853,8 @@ void Lines::compile() float final_scale = 0.95; static const char *vert = - "#version 130\n" - "in vec2 pos_line;\n" + "#version 120\n" + "attribute vec2 pos_line;\n" "uniform float line_scale;\n" "uniform float rotation_delta;\n" "uniform int lines_across;\n" @@ -867,7 +868,7 @@ void Lines::compile() " float rotation = rotation_delta * line_num;\n" " pos = mat2(cos(rotation), sin(rotation),\n" " -sin(rotation), cos(rotation)) * pos;\n" - " int i = line_num % lines_across;\n" + " int i = int(mod(float(line_num), float(lines_across)));\n" " int j = lines_across - 1 - line_num / lines_across;\n" " pos += (vec2(i, j) * 2.0 + 1.0) / lines_across - 1.0;\n" " pos *= final_scale;\n" @@ -875,7 +876,7 @@ void Lines::compile() "}\n"; static const char *frag = - "#version 130\n" + "#version 120\n" "void main()\n" "{\n" " gl_FragColor = vec4(1.0);\n" @@ -951,8 +952,8 @@ void Points::compile() float final_scale = 0.95; static const char *vert = - "#version 130\n" - "in vec2 pos_point;\n" + "#version 120\n" + "attribute vec2 pos_point;\n" "uniform float point_scale;\n" "uniform int points_across;\n" "uniform float final_scale;\n" @@ -963,7 +964,7 @@ void Points::compile() "void main()\n" "{\n" " vec2 pos = point_scale * pos_point;\n" - " int i = point_num % points_across;\n" + " int i = int(mod(float(point_num), float(points_across)));\n" " int j = points_across - 1 - point_num / points_across;\n" " pos += (vec2(i, j) * 2.0 + 1.0) / points_across - 1.0;\n" " pos *= final_scale;\n" @@ -971,7 +972,7 @@ void Points::compile() "}\n"; static const char *frag = - "#version 130\n" + "#version 120\n" "void main()\n" "{\n" " gl_FragColor = vec4(1.0);\n" @@ -1076,15 +1077,20 @@ void Sunburst::compile() { { 0.0, 1.0 }, { 0, 1, 0 } }, { { 0.3, -0.8 }, { 0, 0, 1 } } }; + bool need_glsl130 = out_type == GL_INT || out_type == GL_UNSIGNED_INT; + + if (need_glsl130) { + piglit_require_gl_version(30); + } /* Total number of triangles drawn */ num_tris = 7; - static const char *vert = - "#version 130\n" - "in vec2 pos_within_tri;\n" - "in vec3 in_barycentric_coords;\n" - "out vec3 barycentric_coords;\n" + static const char *vert_template = + "#version %s\n" + "attribute vec2 pos_within_tri;\n" + "attribute vec3 in_barycentric_coords;\n" + "varying vec3 barycentric_coords;\n" "uniform float rotation;\n" "uniform float vert_depth;\n" "uniform mat4 proj;\n" @@ -1099,17 +1105,23 @@ void Sunburst::compile() "}\n"; static const char *frag_template = - "#version 130\n" + "#version %s\n" "#define OUT_TYPE %s\n" "#define COMPUTE_DEPTH %s\n" "uniform float frag_depth;\n" - "in vec3 barycentric_coords;\n" + "varying vec3 barycentric_coords;\n" "uniform mat3x4 draw_colors;\n" - "out OUT_TYPE frag_out;\n" + "#if __VERSION__ == 130\n" + " out OUT_TYPE frag_out;\n" + "#endif\n" "\n" "void main()\n" "{\n" + "#if __VERSION__ == 130\n" " frag_out = OUT_TYPE(draw_colors * barycentric_coords);\n" + "#else\n" + " gl_FragColor = draw_colors * barycentric_coords;\n" + "#endif\n" "#if COMPUTE_DEPTH\n" " gl_FragDepth = (frag_depth + 1.0) / 2.0;\n" "#endif\n" @@ -1117,20 +1129,30 @@ void Sunburst::compile() /* Compile program */ prog = glCreateProgram(); + unsigned vert_alloc_len = + strlen(vert_template) + 4; + char *vert = (char *) malloc(vert_alloc_len); + sprintf(vert, vert_template, need_glsl130 ? "130" : "120"); GLint vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert); + free(vert); glAttachShader(prog, vs); + const char *out_type_glsl = get_out_type_glsl(); unsigned frag_alloc_len = - strlen(frag_template) + strlen(out_type_glsl) + 1; + strlen(frag_template) + strlen(out_type_glsl) + 4; char *frag = (char *) malloc(frag_alloc_len); - sprintf(frag, frag_template, out_type_glsl, + sprintf(frag, frag_template, need_glsl130 ? "130" : "120", + out_type_glsl, compute_depth ? "1" : "0"); GLint fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag); free(frag); glAttachShader(prog, fs); + glBindAttribLocation(prog, 0, "pos_within_tri"); glBindAttribLocation(prog, 1, "in_barycentric_coords"); - glBindFragDataLocation(prog, 0, "frag_out"); + if (need_glsl130) { + glBindFragDataLocation(prog, 0, "frag_out"); + } glLinkProgram(prog); if (!piglit_link_check_status(prog)) { piglit_report_result(PIGLIT_FAIL); diff --git a/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp b/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp index 3831720d..5382ef4e 100644 --- a/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp +++ b/tests/spec/ext_framebuffer_multisample/draw-buffers-common.cpp @@ -107,9 +107,9 @@ static const GLenum draw_buffers[] = { /* Offset the viewport transformation on depth value passed to the vertex * shader by setting it to (2 * depth - 1.0). */ -static const char *vert = - "#version 130\n" - "in vec2 pos;\n" +static const char *vert_template = + "#version %s\n" + "attribute vec2 pos;\n" "uniform float depth;\n" "void main()\n" "{\n" @@ -122,13 +122,19 @@ static const char *vert = * are enabled or not. */ static const char *frag_template = - "#version 130\n" + "#version %s\n" "#define DUAL_SRC_BLEND %d\n" "#define ALPHA_TO_COVERAGE %d\n" "#define OUT_TYPE %s\n" + "#if __VERSION__ == 130\n" "out OUT_TYPE frag_out_0;\n" "out vec4 frag_out_1;\n" "out vec4 frag_out_2;\n" + "#else\n" + "#define frag_out_0 gl_FragData[0]\n" + "#define frag_out_1 gl_FragData[1]\n" + "#define frag_out_2 gl_FragData[2]\n" + "#endif\n" "uniform OUT_TYPE frag_0_color;\n" "uniform vec4 color;\n" "void main()\n" @@ -155,16 +161,28 @@ get_out_type_glsl(void) void shader_compile(bool sample_alpha_to_coverage, bool dual_src_blend) { + bool need_glsl130 = is_buffer_zero_integer_format || dual_src_blend; + + if (need_glsl130) { + piglit_require_gl_version(30); + } + is_dual_src_blending = dual_src_blend; + /* Compile program */ + unsigned vert_alloc_len = strlen(vert_template) + 4; + char *vert = (char *) malloc(vert_alloc_len); + sprintf(vert, vert_template, need_glsl130 ? "130" : "120"); GLint vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert); + free(vert); /* Generate appropriate fragment shader program */ - const char *out_type_glsl = get_out_type_glsl();; + const char *out_type_glsl = get_out_type_glsl(); unsigned frag_alloc_len = strlen(frag_template) + - strlen(out_type_glsl) + 1; + strlen(out_type_glsl) + 4; char *frag = (char *) malloc(frag_alloc_len); - sprintf(frag, frag_template, is_dual_src_blending, + sprintf(frag, frag_template, need_glsl130 ? "130" : "120", + is_dual_src_blending, sample_alpha_to_coverage, out_type_glsl); GLint fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag); @@ -175,18 +193,20 @@ shader_compile(bool sample_alpha_to_coverage, bool dual_src_blend) } free(frag); - if (is_dual_src_blending) { - glBindFragDataLocationIndexed(prog, 0, 0, "frag_out_0"); - glBindFragDataLocationIndexed(prog, 0, 1, "frag_out_1"); + if (need_glsl130) { + if (is_dual_src_blending) { + glBindFragDataLocationIndexed(prog, 0, 0, "frag_out_0"); + glBindFragDataLocationIndexed(prog, 0, 1, "frag_out_1"); + } + else if (num_draw_buffers > 1) { + glBindFragDataLocation(prog, 0, "frag_out_0"); + glBindFragDataLocation(prog, 1, "frag_out_1"); + glBindFragDataLocation(prog, 2, "frag_out_2"); + } + else + glBindFragDataLocation(prog, 0, "frag_out_0"); } - else if (num_draw_buffers > 1) { - glBindFragDataLocation(prog, 0, "frag_out_0"); - glBindFragDataLocation(prog, 1, "frag_out_1"); - glBindFragDataLocation(prog, 2, "frag_out_2"); - } - else - glBindFragDataLocation(prog, 0, "frag_out_0"); glBindAttribLocation(prog, 0, "pos"); glEnableVertexAttribArray(0); diff --git a/tests/spec/ext_framebuffer_multisample/interpolation.cpp b/tests/spec/ext_framebuffer_multisample/interpolation.cpp index 841e0e1e..c54491b9 100644 --- a/tests/spec/ext_framebuffer_multisample/interpolation.cpp +++ b/tests/spec/ext_framebuffer_multisample/interpolation.cpp @@ -167,8 +167,8 @@ bool disable_msaa_during_test_image = false; * each triangle. */ const char *frag_non_centroid_barycentric = - "#version 130\n" - "in vec3 barycentric_coords;\n" + "#version 120\n" + "varying vec3 barycentric_coords;\n" "\n" "void main()\n" "{\n" @@ -182,8 +182,8 @@ const char *frag_non_centroid_barycentric = * triangle. */ const char *frag_centroid_barycentric = - "#version 130\n" - "centroid in vec3 barycentric_coords_centroid;\n" + "#version 120\n" + "centroid varying vec3 barycentric_coords_centroid;\n" "\n" "void main()\n" "{\n" @@ -197,8 +197,8 @@ const char *frag_centroid_barycentric = * barycentric coordinates is outside the range [0, 1]. */ const char *frag_centroid_range_check = - "#version 130\n" - "centroid in vec3 barycentric_coords_centroid;\n" + "#version 120\n" + "centroid varying vec3 barycentric_coords_centroid;\n" "\n" "void main()\n" "{\n" @@ -218,8 +218,8 @@ const char *frag_centroid_range_check = * are non-centroid interpolated. */ const char *frag_non_centroid_deriv = - "#version 130\n" - "in vec2 pixel_pos;\n" + "#version 120\n" + "varying vec2 pixel_pos;\n" "\n" "void main()\n" "{\n" @@ -237,8 +237,8 @@ const char *frag_non_centroid_deriv = * are non-centroid interpolated. */ const char *frag_centroid_deriv = - "#version 130\n" - "centroid in vec2 pixel_pos_centroid;\n" + "#version 120\n" + "centroid varying vec2 pixel_pos_centroid;\n" "\n" "void main()\n" "{\n" @@ -254,8 +254,8 @@ const char *frag_centroid_deriv = * tolerance. */ const char *frag_centroid_deriv_range_check = - "#version 130\n" - "centroid in vec2 pixel_pos_centroid;\n" + "#version 120\n" + "centroid varying vec2 pixel_pos_centroid;\n" "\n" "void main()\n" "{\n" @@ -272,7 +272,7 @@ const char *frag_centroid_deriv_range_check = * frag_centroid_range_check and frag_centroid_deriv_range_check). */ const char *frag_blue = - "#version 130\n" + "#version 120\n" "\n" "void main()\n" "{\n" @@ -286,7 +286,7 @@ const char *frag_blue = * frag_centroid_deriv). */ const char *frag_rg_0_5 = - "#version 130\n" + "#version 120\n" "\n" "void main()\n" "{\n" diff --git a/tests/spec/ext_framebuffer_multisample/polygon-stipple.cpp b/tests/spec/ext_framebuffer_multisample/polygon-stipple.cpp index 578ac604..3394695f 100644 --- a/tests/spec/ext_framebuffer_multisample/polygon-stipple.cpp +++ b/tests/spec/ext_framebuffer_multisample/polygon-stipple.cpp @@ -97,8 +97,8 @@ static GLubyte stipple_pattern[] = }; static const char *vert = - "#version 130\n" - "in vec2 pos;\n" + "#version 120\n" + "attribute vec2 pos;\n" "uniform float depth;\n" "void main()\n" "{\n" @@ -107,7 +107,7 @@ static const char *vert = "}\n"; static const char *frag = - "#version 130\n" + "#version 120\n" "uniform vec4 color;\n" "void main()\n" "{\n" diff --git a/tests/spec/ext_framebuffer_multisample/sample-coverage.cpp b/tests/spec/ext_framebuffer_multisample/sample-coverage.cpp index 1838f8eb..d0ce4a08 100644 --- a/tests/spec/ext_framebuffer_multisample/sample-coverage.cpp +++ b/tests/spec/ext_framebuffer_multisample/sample-coverage.cpp @@ -91,8 +91,8 @@ static int depth_loc; static const float bg_color[4] = { 0.4, 0.6, 0.0, 0.8 }; static const char *vert = - "#version 130\n" - "in vec2 pos;\n" + "#version 120\n" + "attribute vec2 pos;\n" "uniform float depth;\n" "void main()\n" "{\n" @@ -101,7 +101,7 @@ static const char *vert = "}\n"; static const char *frag = - "#version 130\n" + "#version 120\n" "uniform vec4 color;\n" "void main()\n" "{\n" |