[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

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

[vertex program]

[fragment program]

ortho 0 1 0 1

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':

        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)

        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:])

        parse = re.match('^texcoord\[([0-9]+)\] ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+)', line)
        if parse is not None:
            script += 'texcoord {} ({}, {}, {}, {})\n'.format(*parse.groups())

        raise Exception("unknown line: " + line)

    print(template.format(comments=comments, vptext=vptext, fptext=fptext, script=script))

if __name__ == '__main__':
-------------- 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