| # Copyright 2018 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import glob |
| import subprocess |
| |
| out_file = open("resources.gni", "w") |
| |
| out_file.write( |
| """\ |
| ### NOTE: This file auto-generated from gen.py |
| |
| cts_resources = [ |
| { |
| source = rebase_path("../external/vulkancts/mustpass/master/vk-default.txt") |
| dest = "data/vk-default.txt" |
| }, |
| { |
| source = rebase_path("../external/vulkancts/mustpass/master/vk-default.txt") |
| dest = "data/external/vulkancts/mustpass/master/vk-default.txt" |
| }, |
| { |
| source = rebase_path("../external/vulkancts/mustpass/master/vk-fraction-mandatory-tests.txt") |
| dest = "data/external/vulkancts/mustpass/master/vk-fraction-mandatory-tests.txt" |
| }, |
| { |
| source = rebase_path("fuchsia-ci-waivers.xml") |
| dest = "data/fuchsia-ci-waivers.xml" |
| }, |
| """) |
| |
| files = subprocess.check_output( |
| ["find", "../external/vulkancts/data/vulkan", "-type", "f"]) |
| file_lines = files.decode("utf-8").splitlines() |
| |
| for file in sorted(file_lines): |
| file_split = file.split("/") |
| file_split = file_split[4:] |
| out_file.write(" {\n") |
| out_file.write(' source = rebase_path("%s")\n' % file) |
| out_file.write(' dest = "data/%s"\n' % "/".join(file_split)) |
| out_file.write(" },\n") |
| |
| out_file.write("]\n") |
| out_file.close() |
| |
| cts_version = "master" |
| dirs_to_delete = ["data", "meta"] |
| for dir_delete in dirs_to_delete: |
| assert (os.path.isdir(os.path.join("split-cts", dir_delete))) |
| |
| for f in glob.glob("split-cts/meta/*.cmx"): |
| os.remove(f) |
| |
| for f in glob.glob("split-cts/data/*.txt"): |
| os.remove(f) |
| |
| out_file = open("split-cts/BUILD.gn", "w") |
| |
| out_file.write( |
| """# Copyright 2019 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # File generated by ../gen.py - do not modify. |
| |
| import("//build/components/fuchsia_test_package.gni") |
| import("//src/graphics/lib/magma/gnbuild/magma.gni") |
| import("../resources.gni") |
| |
| # Add a label of "vulkan-cts" for each environment given in the list |
| # of general hardware environments for magma tests. The label ensures |
| # that the Vulkan CTS will not be run in the general test pipeline; |
| # the label will be keyed on so that the suite may be run in a special |
| # builder. |
| labeled_magma_hardware_envs = [] |
| foreach(env, magma_hardware_envs) { |
| labeled_env = { |
| } # Clear from previous iteration. |
| labeled_env = { |
| forward_variables_from(env, "*") |
| if (defined(tags)) { |
| tags += [ "vulkan-cts" ] |
| } else { |
| tags = [ "vulkan-cts" ] |
| } |
| } |
| labeled_magma_hardware_envs += [ labeled_env ] |
| } |
| """) |
| |
| cts_file_list = open( |
| "../external/vulkancts/mustpass/%s/vk-default.txt" % cts_version, |
| "r").read().split("\n") |
| |
| chunk_size = 1000 |
| cts_chunks = [] |
| while cts_file_list: |
| first_section = cts_file_list[:chunk_size] |
| cts_file_list = cts_file_list[chunk_size:] |
| cts_chunks.append(first_section) |
| |
| component_list = [] |
| component_name_list = [] |
| for chunk_num in range(len(cts_chunks)): |
| component_name = "vulkan-cts-%03d" % chunk_num |
| out_file.write( |
| """ |
| resource("%s-data") { |
| sources = [ "data/vulkan-%03d.txt" ] |
| outputs = [ "data/vk-list-%03d.txt" ] |
| } |
| fuchsia_component("%s") { |
| testonly = true |
| manifest = "meta/%s.cmx" |
| deps = [ |
| ":%s-data", |
| "..:cts-deps", |
| ] |
| } |
| """ % ( |
| component_name, chunk_num, chunk_num, component_name, |
| component_name, component_name)) |
| component_name_list.append('":' + component_name + '"') |
| |
| for current_index in range(len(cts_chunks)): |
| with open("split-cts/data/vulkan-%03d.txt" % current_index, "w") as f: |
| f.write("\n".join(cts_chunks[current_index])) |
| with open("split-cts/meta/vulkan-cts-%03d.cmx" % current_index, "w") as f: |
| f.write( |
| """{ |
| "facets": { |
| "fuchsia.test": { |
| "system-services": [ |
| "fuchsia.sysmem.Allocator", |
| "fuchsia.vulkan.loader.Loader" |
| ] |
| } |
| }, |
| "program": { |
| "args": [ |
| "--deqp-caselist-file=/pkg/data/vk-list-%03d.txt", |
| "--deqp-archive-dir=/pkg/data", |
| "--deqp-log-images=disable", |
| "--deqp-log-shader-sources=disable", |
| "--deqp-log-filename=/data/TestResults.qpa", |
| "--deqp-log-flush=disable", |
| "--deqp-shadercache-filename=/data/shadercache.bin", |
| "--deqp-waiver-file=/pkg/data/fuchsia-ci-waivers.xml" |
| ], |
| "binary": "test/vulkan-cts" |
| }, |
| "sandbox": { |
| "dev": [ |
| "class/framebuffer" |
| ], |
| "features": [ |
| "isolated-persistent-storage", |
| "vulkan" |
| ], |
| "services": [ |
| "fuchsia.logger.LogSink", |
| "fuchsia.sysmem.Allocator", |
| "fuchsia.tracing.provider.Registry", |
| "fuchsia.vulkan.loader.Loader" |
| ] |
| } |
| } |
| """ % (current_index)) |
| |
| combined_component_list = "".join( |
| " " + x + ",\n" for x in component_name_list) |
| out_file.write( |
| """ |
| fuchsia_test_package("vulkan-cts-split") { |
| test_components = [ |
| %s ] |
| test_specs = { |
| environments = labeled_magma_hardware_envs |
| } |
| } |
| |
| group("split-cts") { |
| testonly = true |
| deps = [ ":vulkan-cts-split" ] |
| } |
| """ % (combined_component_list)) |
| |
| out_file.close() |
| |
| upstream_split_dir = "upstream-split-cts" |
| dirs_to_delete = ["meta"] |
| for dir_delete in dirs_to_delete: |
| assert (os.path.isdir(os.path.join(upstream_split_dir, dir_delete))) |
| for f in glob.glob(os.path.join(upstream_split_dir, dir_delete) + "/*.cmx"): |
| os.remove(f) |
| |
| # According to the Vulkan CTS README, the fraction count can be at most 8 for |
| # conformance submissions. |
| FRACTION_COUNT = 8 |
| for i in range(FRACTION_COUNT): |
| with open("%s/meta/vulkan-cts-upstream-split-%d.cmx" % |
| (upstream_split_dir, i), "w") as out_file: |
| # Only pass arguments allowed by the conformance submission process. |
| out_file.write( |
| """{ |
| "facets": { |
| "fuchsia.test": { |
| "system-services": [ |
| "fuchsia.sysmem.Allocator", |
| "fuchsia.vulkan.loader.Loader" |
| ] |
| } |
| }, |
| "program": { |
| "args": [ |
| "--deqp-caselist-file=/pkg/data/external/vulkancts/mustpass/master/vk-default.txt", |
| "--deqp-log-images=disable", |
| "--deqp-log-shader-sources=disable", |
| "--deqp-log-filename=/data/TestResults.qpa", |
| "--deqp-archive-dir=/pkg/data", |
| "--deqp-log-flush=disable", |
| "--deqp-fraction=%d,%d", |
| "--deqp-fraction-mandatory-caselist-file=/pkg/data/external/vulkancts/mustpass/master/vk-fraction-mandatory-tests.txt", |
| "--deqp-shadercache-filename=/tmp/shadercache.bin" |
| ], |
| "binary": "test/vulkan-cts" |
| }, |
| "sandbox": { |
| "dev": [ |
| "class/framebuffer" |
| ], |
| "features": [ |
| "isolated-cache-storage", |
| "isolated-persistent-storage", |
| "isolated-temp" |
| ], |
| "services": [ |
| "fuchsia.logger.LogSink", |
| "fuchsia.sysmem.Allocator", |
| "fuchsia.tracing.provider.Registry", |
| "fuchsia.vulkan.loader.Loader" |
| ] |
| } |
| } |
| """ % (i, FRACTION_COUNT)) |