Exemple #1
0
    def test_import_missing_variable(self):
        error_on_import = None
        error_on_instance = None
        error_on_devices = None

        with self.env_backup():
            del os.environ["VULKAN_SDK"]

            try:
                import lava as lv
            except Exception as e:
                error_on_import = e

            try:
                lv.instance()
            except Exception as e:
                error_on_instance = e

            try:
                lv.devices()
            except Exception as e:
                error_on_devices = e

        self.assertIsNone(error_on_import)
        self.assertTrue(isinstance(error_on_instance, ImportError))
        self.assertTrue(isinstance(error_on_devices, ImportError))
        self.assertFalse(lv.initialized())
Exemple #2
0
    def test_import_vulkan_unavailable(self):
        errors_on_module_import = []
        error_on_instance = None
        error_on_devices = None

        # mock vulkan initialization error
        # https://stackoverflow.com/a/2481588
        import_original = builtins.__import__

        def import_mock(name, *args, **kwargs):
            if name == "vulkan":
                # https://github.com/realitix/vulkan/blob/1.1.99.0/generator/vulkan.template.py#L105
                raise OSError(
                    "Cannot find Vulkan SDK version. Please ensure...")
            return import_original(name, *args, **kwargs)

        builtins.__import__ = import_mock

        # import should not fail
        import lava as lv

        # find and try all possible module imports, e.g. import lava.api.shader, ...
        pkg_name = self.PKG_NAME
        pkg_path = lv.__path__[0]
        ext = ".py"
        paths = []

        for root, dirs, files in os.walk(pkg_path):
            for name in files:
                if name.endswith(ext):
                    paths.append([pkg_name] +
                                 root[len(pkg_path):].split(os.sep)[1:] +
                                 [name[:-len(ext)]])

        for path in paths:
            try:
                __import__(".".join(path))
            except Exception as e:
                errors_on_module_import.append(e)

        try:
            lv.instance()
        except Exception as e:
            error_on_instance = e

        try:
            lv.devices()
        except Exception as e:
            error_on_devices = e

        self.assertTrue(
            len(errors_on_module_import) == 0,
            "\n".join([str(e) for e in errors_on_module_import]))
        self.assertTrue(isinstance(error_on_instance, OSError))
        self.assertTrue(isinstance(error_on_devices, OSError))
        self.assertFalse(lv.initialized())

        builtins.__import__ = import_original
Exemple #3
0
    def __init__(self, physical_device, queue_index=None):
        super(Session, self).__init__()

        self.instance = lava.instance(
        )  # validation level might has been changed
        if physical_device not in lava.devices():
            raise RuntimeError("Provided invalid / outdated device object")

        self.queue_index = queue_index or physical_device.get_queue_indices(
            QueueType.COMPUTE)[0]
        self.device = Device(physical_device,
                             [(QueueType.COMPUTE, self.queue_index)],
                             validation_lvl=lava.VALIDATION_LEVEL)

        self.buffers = set()
        self.shaders = set()
        self.stages = set()

        sessions.add(self)
Exemple #4
0
 def setUp(self):
     super(BufferTest, self).setUp()
     self.session = lv.Session(lv.devices()[0])
Exemple #5
0
 def setUpClass(cls):
     # lv.VALIDATION_LEVEL = lv.VALIDATION_LEVEL_DEBUG
     cls.SESSION = lv.Session(lv.devices()[0])
     cls.MEMORY = {}