[Piglit] [PATCH 4/7] EXT_shader_framebuffer_fetch: Pass output type and precision to decl_frag_data macro.
Francisco Jerez
currojerez at riseup.net
Wed Feb 14 21:28:59 UTC 2018
This allows using the decl_frag_data macro in more places which were
currently using an open-coded inout declaration, in the interest of
simplifying the conversion to EXT_shader_framebuffer_fetch_non_coherent
which requires the specification of a layout qualifier in all
framebuffer fetch output declarations.
---
.../gen_shader_framebuffer_fetch_tests.py | 73 +++++++++++-----------
1 file changed, 38 insertions(+), 35 deletions(-)
diff --git a/generated_tests/gen_shader_framebuffer_fetch_tests.py b/generated_tests/gen_shader_framebuffer_fetch_tests.py
index f7e148b39..201d2cec9 100644
--- a/generated_tests/gen_shader_framebuffer_fetch_tests.py
+++ b/generated_tests/gen_shader_framebuffer_fetch_tests.py
@@ -138,10 +138,11 @@ common_defs = [{'extension': 'EXT_shader_framebuffer_fetch',
# 'frag_data' and 'last_frag_data' macros defined
# below to make sure the generated test is valid
# irrespective of the GLSL version.
- 'decl_frag_data': lambda api_version, n = 0:
- '' if api_version < 3.0 else
- 'inout highp vec4 fcolor;' if n == 0 else
- 'inout highp vec4 fcolor[{0}];'.format(n),
+ 'decl_frag_data': lambda api_version, n = 0, t = 'vec4', p = 'mediump':
+ '' if api_version < 3.0 and t == 'vec4' and p == 'mediump' else
+ p + ' ' + t + ' gl_LastFragData[gl_MaxDrawBuffers];' if api_version < 3.0 else
+ 'inout ' + p + ' ' + t + ' fcolor;' if n == 0 else
+ 'inout ' + p + ' ' + t + ' fcolor[{0}];'.format(n),
'frag_data': lambda api_version, i = -1:
'gl_FragData[{0}]'.format(max(0, i)) if api_version < 3.0 else
@@ -360,11 +361,7 @@ def main():
#extension GL_${extension} : enable
${'in' if api_version >= 3.0 else 'varying'} highp vec4 vcolor;
- ${decl_frag_data(api_version)}
-
- %if api_version < 3.0 and precision:
- ${precision} vec4 gl_LastFragData[gl_MaxDrawBuffers];
- %endif
+ ${decl_frag_data(api_version, p=precision)}
void main()
{
@@ -404,21 +401,19 @@ def main():
""", product(common_defs,
[{'name': 'nonuniform-'}],
[{'name': 'ss-gles2', 'api_version': 2.0,
- 'samples': 0, 'precision': ''},
+ 'samples': 0, 'precision': 'mediump'},
{'name': 'ss-gles2-redecl-highp', 'api_version': 2.0,
'samples': 0, 'precision': 'highp'},
- {'name': 'ss-gles2-redecl-mediump', 'api_version': 2.0,
- 'samples': 0, 'precision': 'mediump'},
{'name': 'ss-gles2-redecl-lowp', 'api_version': 2.0,
'samples': 0, 'precision': 'lowp'},
{'name': 'ss-gles3', 'api_version': 3.0,
- 'samples': 0, 'precision': ''},
+ 'samples': 0, 'precision': 'mediump'},
{'name': 'ms2-gles3', 'api_version': 3.0,
- 'samples': 2, 'precision': ''},
+ 'samples': 2, 'precision': 'mediump'},
{'name': 'ms8-gles3', 'api_version': 3.0,
- 'samples': 8, 'precision': ''},
+ 'samples': 8, 'precision': 'mediump'},
{'name': 'ms16-gles3', 'api_version': 3.0,
- 'samples': 16, 'precision': ''}]))
+ 'samples': 16, 'precision': 'mediump'}]))
#
# Test basic framebuffer fetch functionality in combination with
@@ -437,11 +432,12 @@ def main():
#extension GL_${extension} : enable
uniform sampler2D s;
- inout highp vec4 fcolor;
+ ${decl_frag_data(api_version)}
void main()
{
- fcolor += texelFetch(s, ivec2(gl_FragCoord), 0) / 4.0;
+ ${frag_data(api_version)} = ${last_frag_data(api_version)} +
+ texelFetch(s, ivec2(gl_FragCoord), 0) / 4.0;
}
[test]
@@ -501,16 +497,19 @@ def main():
#extension GL_${extension} : enable
in highp vec4 vcolor;
- inout highp vec4 fcolor;
+ ${decl_frag_data(api_version)}
void main()
{
// The condition makes sure that the discard branch is
// taken for the top and right quadrants during the second
// overdraw.
- if (fcolor.x <= 0.45 && fcolor.y < 0.45)
- fcolor += vec4(vcolor.x >= 0.5 ? 0.5 : 0.1,
- vcolor.y >= 0.5 ? 0.5 : 0.1, 0.0, 0.0);
+ if (${last_frag_data(api_version)}.x <= 0.45 &&
+ ${last_frag_data(api_version)}.y < 0.45)
+ ${frag_data(api_version)} = ${last_frag_data(api_version)} +
+ vec4(vcolor.x >= 0.5 ? 0.5 : 0.1,
+ vcolor.y >= 0.5 ? 0.5 : 0.1,
+ 0.0, 0.0);
else
discard;
}
@@ -572,18 +571,21 @@ def main():
#define SCALE 100
in highp vec4 vcolor;
- inout highp ivec4 fcolor;
+ ${decl_frag_data(api_version, t='ivec4')}
void main()
{
- if (fcolor.x <= SCALE / 2 && fcolor.y <= SCALE / 2)
- fcolor += ivec4(vcolor * float(SCALE));
+ if (${last_frag_data(api_version)}.x <= SCALE / 2 &&
+ ${last_frag_data(api_version)}.y <= SCALE / 2)
+ ${frag_data(api_version)} = ${last_frag_data(api_version)} +
+ ivec4(vcolor * float(SCALE));
else
- fcolor += ivec4((vcolor.x >= 0.5 ? SCALE : 0)
- - int(vcolor.x * float(SCALE)),
- (vcolor.y >= 0.5 ? SCALE : 0)
- - int(vcolor.y * float(SCALE)),
- 0, 0);
+ ${frag_data(api_version)} = ${last_frag_data(api_version)} +
+ ivec4((vcolor.x >= 0.5 ? SCALE : 0)
+ - int(vcolor.x * float(SCALE)),
+ (vcolor.y >= 0.5 ? SCALE : 0)
+ - int(vcolor.y * float(SCALE)),
+ 0, 0);
}
[test]
@@ -695,16 +697,16 @@ def main():
#extension GL_${extension} : enable
in highp vec4 vcolor;
- inout highp vec4 fcolor;
+ ${decl_frag_data(api_version)}
void main()
{
// The conditional assignment will be executed for the top
// and right quadrants.
if (vcolor.x >= 0.5 || vcolor.y >= 0.5)
- fcolor += vec4(0.5, 0, 0, 0);
+ ${frag_data(api_version)} += vec4(0.5, 0, 0, 0);
- fcolor += vec4(0.0, 0.5, 0, 0);
+ ${frag_data(api_version)} += vec4(0.0, 0.5, 0, 0);
}
[test]
@@ -741,12 +743,13 @@ def main():
#version 300 es
#extension GL_${extension} : enable
- inout highp vec4 fcolor;
+ ${decl_frag_data(api_version)}
uniform highp vec4 ucolor;
void main()
{
- fcolor += ucolor;
+ ${frag_data(api_version)} = ${last_frag_data(api_version)} +
+ ucolor;
}
[test]
--
2.16.1
More information about the Piglit
mailing list