199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz/*
299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Copyright (c) 2015-2016 The Khronos Group Inc.
399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Copyright (c) 2015-2016 Valve Corporation
499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Copyright (c) 2015-2016 LunarG, Inc.
599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz *
643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Licensed under the Apache License, Version 2.0 (the "License");
743b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * you may not use this file except in compliance with the License.
843b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * You may obtain a copy of the License at
999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz *
1043b53e83705f02245da6ae61e31273866a35b833Jon Ashburn *     http://www.apache.org/licenses/LICENSE-2.0
1199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz *
1243b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Unless required by applicable law or agreed to in writing, software
1343b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * distributed under the License is distributed on an "AS IS" BASIS,
1443b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1543b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * See the License for the specific language governing permissions and
1643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * limitations under the License.
1799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz *
1899e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Chia-I Wu <olvaffe@gmail.com>
1999e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Chris Forbes <chrisf@ijw.co.nz>
2099e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Courtney Goeltzenleuchter <courtney@LunarG.com>
2199e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Mark Lobodzinski <mark@lunarg.com>
2299e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Mike Stroyan <mike@LunarG.com>
2399e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Tobin Ehlis <tobine@google.com>
2499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz * Author: Tony Barbour <tony@LunarG.com>
2599e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz */
2699e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz
2734888cfbdcd1769789e922ed81f6f997073120baTony Barbour#ifndef TEST_ENVIRONMENT_H
2834888cfbdcd1769789e922ed81f6f997073120baTony Barbour#define TEST_ENVIRONMENT_H
295b66aa51f060c804e1804cf45909ed6489552c62Chia-I Wu
309cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#include "vktestbinding.h"
3134888cfbdcd1769789e922ed81f6f997073120baTony Barbour
329cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchternamespace vk_testing {
3334888cfbdcd1769789e922ed81f6f997073120baTony Barbourclass Environment : public ::testing::Environment {
3499e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz  public:
3534888cfbdcd1769789e922ed81f6f997073120baTony Barbour    Environment();
3634888cfbdcd1769789e922ed81f6f997073120baTony Barbour
3734888cfbdcd1769789e922ed81f6f997073120baTony Barbour    bool parse_args(int argc, char **argv);
3834888cfbdcd1769789e922ed81f6f997073120baTony Barbour
3934888cfbdcd1769789e922ed81f6f997073120baTony Barbour    virtual void SetUp();
4034888cfbdcd1769789e922ed81f6f997073120baTony Barbour    virtual void TearDown();
4134888cfbdcd1769789e922ed81f6f997073120baTony Barbour
4234888cfbdcd1769789e922ed81f6f997073120baTony Barbour    const std::vector<Device *> &devices() { return devs_; }
4334888cfbdcd1769789e922ed81f6f997073120baTony Barbour    Device &default_device() { return *(devs_[default_dev_]); }
44cedc15f3b62cfe757c583fe2106fe957a9ee30f9Jon Ashburn    VkInstance get_instance() { return inst; }
458205d901f17b1c76d89c956be235cf4e7a20a546Tony Barbour    VkPhysicalDevice gpus[16];
4634888cfbdcd1769789e922ed81f6f997073120baTony Barbour
4799e9d1d74ff89ad3a0563b4ce8fc55de8734d0ecKarl Schultz  private:
48382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter    VkApplicationInfo app_;
490abdb66fa4e8e68904545af6df15cbe2116b6c43Courtney Goeltzenleuchter    uint32_t default_dev_;
50382489d723fd0d3935da0dc7e1021c56c7b721d3Courtney Goeltzenleuchter    VkInstance inst;
5134888cfbdcd1769789e922ed81f6f997073120baTony Barbour
5234888cfbdcd1769789e922ed81f6f997073120baTony Barbour    std::vector<Device *> devs_;
5334888cfbdcd1769789e922ed81f6f997073120baTony Barbour};
5434888cfbdcd1769789e922ed81f6f997073120baTony Barbour}
5534888cfbdcd1769789e922ed81f6f997073120baTony Barbour#endif // TEST_ENVIRONMENT_H
56