[Piglit] [PATCH 00/40] Replace vpfp-generic with shader_runner.
Kenneth Graunke
kenneth at whitecape.org
Thu Jun 18 22:24:18 PDT 2015
On Saturday, June 06, 2015 07:11:26 PM Kenneth Graunke wrote:
> Hi all,
>
> This patch series ports all vpfp-generic tests to shader_runner,
> and then deletes vpfp-generic.
>
> A bit of history:
> - vpfp-generic was introduced by Nicolai Hähnle in 2009, as a generic
> ARB_vertex|fragment_program test runner.
> - shader_runner was introduced by Ian Romanick in 2010, as a generic
> GLSL shader runner.
> - shader_runner gained ARB program support in 2011 (courtesy of Eric Anholt).
>
> At this point, vpfp-generic is fairly redundant - shader_runner can do
> everything we need, and is much more widespread (12000+ tests). I've
> been meaning to delete it for a few years, but never got around to it.
>
> One difference is that the new tests don't glClear() before drawing. Since
> they draw the entire window, it's pretty unnecessary, and just makes the
> tests harder to debug. Many shader_runner tests don't bother clearing.
I've gone ahead and added the clears back in, based on everyone's
feedback.
The original tests actually inspected the expected color - if a
component was > 0.5, it used 0.0 as the clear color; otherwise it used
0.0. That ensured that the clear color was always different than the
expected value. Which seems useful, and perhaps hard to replicate in
a completely generic mechanism in shader_runner.
The new shader_runner tests should be functionally equivalent to the
old ones. I've gone ahead and pushed them since I don't think anybody
actually wants to review these boring changes.
Here is the updated python script that handles clears, too:
#! /usr/bin/python3
import re
import sys
template = '''{comments}[require]
GL >= 1.3
ARB_vertex_program
ARB_fragment_program
[vertex program]
{vptext}
[fragment program]
{fptext}
[test]
ortho 0 1 0 1
{script}'''
def convert(infile):
with open(infile, 'r') as f:
vpfp = f.read()
vpfp = re.sub('^;', '#', vpfp, flags=re.MULTILINE)
doublebang = vpfp.find('!!')
comments = vpfp[0:doublebang]
vpfp = vpfp[doublebang:]
parse = re.match('(^!!ARBvp1.0$.*^END$)\s*(^!!ARBfp1.0$.*^END$)\s*!!test\n(.*)', vpfp, re.MULTILINE | re.DOTALL)
vptext, fptext, vpfp_test = parse.groups()
script = ''
for line in vpfp_test.splitlines():
line = ' '.join(line.split()) # collapse whitespace
if line == '' or line == '!!test':
continue
parse = re.match('^expected ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+)', line)
if parse is not None:
params = parse.groups()
clear_color = ["0.0" if float(x) > 0.5 else "1.0" for x in params]
script += 'clear color {} {} {} {}\nclear\n'.format(*clear_color)
script += 'draw rect 0 0 1 1\nprobe all rgba {} {} {} {}\n'.format(*params)
continue
parse = re.match('^(fragment|vertex).(local|environment)\[([0-9]+)\] ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+)', line)
if parse is not None:
params = parse.groups()
script += 'parameter {}_{}p {} ({}, {}, {}, {})\n'.format(params[1].replace('environment', 'env'), params[0][0], *params[2:])
continue
parse = re.match('^texcoord\[([0-9]+)\] ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+)', line)
if parse is not None:
script += 'texcoord {} ({}, {}, {}, {})\n'.format(*parse.groups())
continue
raise Exception("unknown line: " + line)
print(template.format(comments=comments, vptext=vptext, fptext=fptext, script=script))
if __name__ == '__main__':
convert(sys.argv[1])
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20150618/317c1723/attachment.sig>
More information about the Piglit
mailing list