summaryrefslogtreecommitdiffstatsci
path: root/tests/common/vkengine.h
blob: a5b542fa2391d894b85319abf0f954bee7eedcdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
 * Copyright (c) 2018-2022 Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
 * Software, and to permit persons to whom the Software is furnished to do so, subject
 * to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
#ifndef VKENGINE_H
#define VKENGINE_H

#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <stdbool.h>

#include <GLFW/glfw3.h>
#undef APIENTRY

#include <vulkan/vulkan.h>

#include "vkh.h"

#define FENCE_TIMEOUT 100000000

typedef struct _vk_engine_t* VkEngine;

typedef struct _vk_engine_t {
    VkhApp                           app;
    VkPhysicalDeviceMemoryProperties memory_properties;
    VkPhysicalDeviceProperties       gpu_props;
    VkhDevice                        dev;
    GLFWwindow*                      window;
    VkhPresenter                     renderer;
} vk_engine_t;

vk_engine_t* vkengine_create(VkPhysicalDeviceType preferedGPU, VkPresentModeKHR presentMode, uint32_t width,
                             uint32_t height);
void         vkengine_dump_available_layers();
bool       vkengine_try_get_phyinfo(VkhPhyInfo* phys, uint32_t phyCount, VkPhysicalDeviceType gpuType, VkhPhyInfo* phy);
void       vkengine_destroy(VkEngine e);
bool       vkengine_should_close(VkEngine e);
void       vkengine_close(VkEngine e);
void       vkengine_dump_Infos(VkEngine e);
void       vkengine_set_title(VkEngine e, const char* title);
VkInstance vkengine_get_instance(VkEngine e);
VkDevice   vkengine_get_device(VkEngine e);
VkPhysicalDevice vkengine_get_physical_device(VkEngine e);
VkQueue          vkengine_get_queue(VkEngine e);
uint32_t         vkengine_get_queue_fam_idx(VkEngine e);

void vkengine_get_queues_properties(vk_engine_t* e, VkQueueFamilyProperties** qFamProps, uint32_t* count);

void vkengine_set_key_callback(VkEngine e, GLFWkeyfun key_callback);
void vkengine_set_mouse_but_callback(VkEngine e, GLFWmousebuttonfun onMouseBut);
void vkengine_set_cursor_pos_callback(VkEngine e, GLFWcursorposfun onMouseMove);
void vkengine_set_scroll_callback(VkEngine e, GLFWscrollfun onScroll);
void vkengine_set_char_callback(VkEngine e, GLFWcharfun onChar);

void vkengine_wait_idle(VkEngine e);
#endif