Output Runtime Effect files from import_conformance_tests.
Previously the results were dumped to stdout. Change-Id: I20a634744f287f97e660912549f429ebea479162 Bug: skia:12484 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/454636 Auto-Submit: John Stiles <johnstiles@google.com> Commit-Queue: Ethan Nicholas <ethannicholas@google.com> Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
This commit is contained in:
parent
30d55d11fc
commit
9c0b844173
@ -7,9 +7,18 @@
|
|||||||
#
|
#
|
||||||
# GLSL ES2 conformance test files can be found at
|
# GLSL ES2 conformance test files can be found at
|
||||||
# https://github.com/KhronosGroup/VK-GL-CTS/tree/master/data/gles2/shaders
|
# https://github.com/KhronosGroup/VK-GL-CTS/tree/master/data/gles2/shaders
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# cat ${TEST_FILES}/*.test | ./import_conformance_tests.py
|
||||||
|
#
|
||||||
|
# This will generate two directories, "pass" and "fail", containing finished runtime shaders.
|
||||||
|
#
|
||||||
|
# Not all ES2 test files are meaningful in SkSL. These input files are not supported:
|
||||||
|
# - linkage.test: Runtime Effects only handle fragment processing
|
||||||
|
# - invalid_texture_functions.test: no GL texture functions in Runtime Effects
|
||||||
|
# - preprocessor.test: no preprocessor in SkSL
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import pprint
|
|
||||||
import pyparsing as pp
|
import pyparsing as pp
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -73,6 +82,14 @@ group.ignore('#' + pp.restOfLine)
|
|||||||
|
|
||||||
testCases = grammar.parse_string(sys.stdin.read(), parse_all=True)
|
testCases = grammar.parse_string(sys.stdin.read(), parse_all=True)
|
||||||
|
|
||||||
|
# Write output files in subdirectories next to this script.
|
||||||
|
testDirectory = os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__)))
|
||||||
|
passDirectory = testDirectory + "/pass"
|
||||||
|
failDirectory = testDirectory + "/fail"
|
||||||
|
os.makedirs(passDirectory, exist_ok=True)
|
||||||
|
os.makedirs(failDirectory, exist_ok=True)
|
||||||
|
written = {}
|
||||||
|
|
||||||
for c in testCases:
|
for c in testCases:
|
||||||
# Parse the case header
|
# Parse the case header
|
||||||
assert c[0] == 'case'
|
assert c[0] == 'case'
|
||||||
@ -129,8 +146,7 @@ for c in testCases:
|
|||||||
skipTest = 'Missing main'
|
skipTest = 'Missing main'
|
||||||
|
|
||||||
if skipTest != '':
|
if skipTest != '':
|
||||||
print("/////////// skipped %s (%s) ///////////" % (testName, skipTest))
|
print("skipped %s (%s)" % (testName, skipTest))
|
||||||
print("")
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Apply fixups to the test code.
|
# Apply fixups to the test code.
|
||||||
@ -140,10 +156,10 @@ for c in testCases:
|
|||||||
testCode = testCode.replace("precision lowp ", "// precision lowp ");
|
testCode = testCode.replace("precision lowp ", "// precision lowp ");
|
||||||
|
|
||||||
# SkSL doesn't support the `#version` declaration.
|
# SkSL doesn't support the `#version` declaration.
|
||||||
testCode = testCode.replace("#version", "// #version");
|
testCode = testCode.replace("#version", "// #version");
|
||||||
|
|
||||||
# Rename the `main` function to `execute_test`.
|
# Rename the `main` function to `execute_test`.
|
||||||
testCode = testCode.replace("void main", "bool execute_test");
|
testCode = testCode.replace("void main", "bool execute_test");
|
||||||
|
|
||||||
# Replace ${POSITION_FRAG_COLOR} with a scratch variable.
|
# Replace ${POSITION_FRAG_COLOR} with a scratch variable.
|
||||||
if "${POSITION_FRAG_COLOR}" in testCode:
|
if "${POSITION_FRAG_COLOR}" in testCode:
|
||||||
@ -155,15 +171,14 @@ for c in testCases:
|
|||||||
testCode = "vec4 PositionFragColor;\n" + testCode
|
testCode = "vec4 PositionFragColor;\n" + testCode
|
||||||
|
|
||||||
# Create a runnable SkSL test by returning green or red based on the test result.
|
# Create a runnable SkSL test by returning green or red based on the test result.
|
||||||
testSuffix = ''
|
testCode += "\n"
|
||||||
if expectPass:
|
testCode += "half4 main(float2 coords) {\n"
|
||||||
testCode += "\n"
|
testCode += " return execute_test() ? half4(0,1,0,1) : half4(1,0,0,1);\n"
|
||||||
testCode += "half4 main(float2 coords) {\n"
|
testCode += "}\n"
|
||||||
testCode += " return execute_test() ? half4(0,1,0,1) : half4(1,0,0,1);\n"
|
|
||||||
testCode += "}\n"
|
|
||||||
|
|
||||||
else:
|
testDirectory = passDirectory
|
||||||
testSuffix = '_ERROR'
|
if not expectPass:
|
||||||
|
testDirectory = failDirectory
|
||||||
|
|
||||||
# Find the total number of input/output fields.
|
# Find the total number of input/output fields.
|
||||||
numVariables = 0
|
numVariables = 0
|
||||||
@ -174,7 +189,6 @@ for c in testCases:
|
|||||||
assert "${DECLARATIONS}" in testCode
|
assert "${DECLARATIONS}" in testCode
|
||||||
assert "${OUTPUT}" in testCode
|
assert "${OUTPUT}" in testCode
|
||||||
for varIndex in range(0, numVariables):
|
for varIndex in range(0, numVariables):
|
||||||
print("/////////// %s_%d%s.sksl ///////////" % (testName, varIndex, testSuffix))
|
|
||||||
testSpecialization = testCode
|
testSpecialization = testCode
|
||||||
|
|
||||||
# Assemble input variable declarations for ${DECLARATIONS}.
|
# Assemble input variable declarations for ${DECLARATIONS}.
|
||||||
@ -199,14 +213,22 @@ for c in testCases:
|
|||||||
testSpecialization = testSpecialization.replace("${DECLARATIONS}", declarations)
|
testSpecialization = testSpecialization.replace("${DECLARATIONS}", declarations)
|
||||||
testSpecialization = testSpecialization.replace("${SETUP}", '')
|
testSpecialization = testSpecialization.replace("${SETUP}", '')
|
||||||
testSpecialization = testSpecialization.replace("${OUTPUT}", outputChecks)
|
testSpecialization = testSpecialization.replace("${OUTPUT}", outputChecks)
|
||||||
print(testSpecialization)
|
|
||||||
|
# Generate an SkSL test file.
|
||||||
|
path = "%s/%s_%d.rts" % (testDirectory, testName, varIndex)
|
||||||
|
assert path not in written
|
||||||
|
written[path] = True
|
||||||
|
f = open(path, "w")
|
||||||
|
f.write(testSpecialization)
|
||||||
|
|
||||||
else: # not (numVariables > 0)
|
else: # not (numVariables > 0)
|
||||||
print ("/////////// %s%s.sksl ///////////" % (testName, testSuffix))
|
|
||||||
|
|
||||||
testCode = testCode.replace("${DECLARATIONS}", '')
|
testCode = testCode.replace("${DECLARATIONS}", '')
|
||||||
testCode = testCode.replace("${SETUP}", '')
|
testCode = testCode.replace("${SETUP}", '')
|
||||||
testCode = testCode.replace("${OUTPUT}", 'return true;')
|
testCode = testCode.replace("${OUTPUT}", 'return true;')
|
||||||
|
|
||||||
# Generate an SkSL test file.
|
# Generate an SkSL test file.
|
||||||
print (testCode)
|
path = "%s/%s.rts" % (testDirectory, testName)
|
||||||
|
assert path not in written
|
||||||
|
written[path] = True
|
||||||
|
f = open(path, "w")
|
||||||
|
f.write(testCode)
|
||||||
|
Loading…
Reference in New Issue
Block a user