Restructure the project
Move asset_compiler into its own (static) library. This removes the dependency on it from the runtime and makes it possible to have a standalone asset_compiler tool (useful for modding support). Split meson.build into sub-files to improve readability. Give each target its own pch directory. This is more inline with what the meson manual recommends. Export dependencies to make it possible to use the engine as a meson subproject. This is currently untested.
This commit is contained in:
parent
a7339ffd53
commit
027ef8a46f
181
meson.build
181
meson.build
@ -46,8 +46,6 @@ if buildtype == 'debug' or buildtype == 'debugoptimized'
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Gather dependencies
|
# Gather dependencies
|
||||||
common_incdirs = [include_directories(['contrib', 'src'])]
|
|
||||||
|
|
||||||
thread_dep = dependency('threads')
|
thread_dep = dependency('threads')
|
||||||
m_dep = compiler.find_library('m', required : false)
|
m_dep = compiler.find_library('m', required : false)
|
||||||
vk_dep = dependency('vulkan', required : false)
|
vk_dep = dependency('vulkan', required : false)
|
||||||
@ -61,172 +59,35 @@ endif
|
|||||||
# Copy file utility
|
# Copy file utility
|
||||||
copy_util = find_program('scripts/copy_util.py')
|
copy_util = find_program('scripts/copy_util.py')
|
||||||
|
|
||||||
runtime_incdirs = common_incdirs
|
engine_incdir = include_directories('src')
|
||||||
runtime_linkargs = []
|
|
||||||
runtime_additional_sources = []
|
|
||||||
runtime_cargs = []
|
|
||||||
runtime_deps = [thread_dep, m_dep, windowing_dep]
|
|
||||||
|
|
||||||
if get_option('build_asset_compiler')
|
contrib_dir = meson.project_source_root() / 'contrib'
|
||||||
runtime_cargs += ['-DRT_BUILD_ASSET_COMPILER']
|
|
||||||
|
|
||||||
# DXC for vulkan & directx shaders
|
|
||||||
if get_option('enable_dxc_shader_compiler')
|
|
||||||
# We package dxc binaries under contrib/dxc
|
|
||||||
dxc_include = include_directories('contrib' / 'dxc' / 'inc')
|
|
||||||
dxc_libdir = 'NONE'
|
|
||||||
if host_machine.system() == 'windows'
|
|
||||||
dxc_libdir = meson.project_source_root() / 'contrib' / 'dxc' / 'lib' / 'x64'
|
|
||||||
custom_target('copy dxcompiler.dll',
|
|
||||||
input : 'contrib' / 'dxc' / 'bin' / 'x64' / 'dxcompiler.dll',
|
|
||||||
output : 'dxcompiler.dll',
|
|
||||||
command : [copy_util, '@INPUT@', '@OUTPUT@'],
|
|
||||||
install : false,
|
|
||||||
build_by_default : true)
|
|
||||||
endif
|
|
||||||
dxc_dep = declare_dependency(link_args : ['-L'+dxc_libdir, '-ldxcompiler'], include_directories : dxc_include)
|
|
||||||
runtime_deps += dxc_dep
|
|
||||||
runtime_additional_sources += [
|
|
||||||
'src/runtime/dxc_shader_compiler.cpp'
|
|
||||||
]
|
|
||||||
runtime_cargs += ['-DRT_BUILD_DXC_SHADER_COMPILER']
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Asset compiler sources
|
|
||||||
runtime_additional_sources += [
|
|
||||||
'src/runtime/asset_compiler.h',
|
|
||||||
'src/runtime/description_parser.h',
|
|
||||||
'src/runtime/shader_compiler.h',
|
|
||||||
|
|
||||||
'src/runtime/asset_compiler.c',
|
|
||||||
'src/runtime/description_parser.c',
|
|
||||||
'src/runtime/framegraph_processor.c',
|
|
||||||
'src/runtime/pipeline_processor.c',
|
|
||||||
'src/runtime/shader_compiler.c',
|
|
||||||
]
|
|
||||||
endif
|
|
||||||
|
|
||||||
runtime_lib = library('rt',
|
|
||||||
# Project Sources
|
|
||||||
'src/runtime/aio.h',
|
|
||||||
'src/runtime/app.h',
|
|
||||||
'src/runtime/buffer_manager.h',
|
|
||||||
'src/runtime/compression.h',
|
|
||||||
'src/runtime/config.h',
|
|
||||||
'src/runtime/ds.h',
|
|
||||||
'src/runtime/dynamic_libs.h',
|
|
||||||
'src/runtime/file_tab.h',
|
|
||||||
'src/runtime/fsutils.h',
|
|
||||||
'src/runtime/gfx.h',
|
|
||||||
'src/runtime/handles.h',
|
|
||||||
'src/runtime/hashing.h',
|
|
||||||
'src/runtime/jobs.h',
|
|
||||||
'src/runtime/mem_arena.h',
|
|
||||||
'src/runtime/renderer_api.h',
|
|
||||||
'src/runtime/resources.h',
|
|
||||||
'src/runtime/runtime.h',
|
|
||||||
'src/runtime/threading.h',
|
|
||||||
|
|
||||||
'src/runtime/aio.c',
|
|
||||||
'src/runtime/app.c',
|
|
||||||
'src/runtime/assert.c',
|
|
||||||
'src/runtime/buffer_manager.c',
|
|
||||||
'src/runtime/compression.c',
|
|
||||||
'src/runtime/config.c',
|
|
||||||
'src/runtime/ds_minheap.c',
|
|
||||||
'src/runtime/dynamic_libs.c',
|
|
||||||
'src/runtime/error_report.c',
|
|
||||||
'src/runtime/file_tab.c',
|
|
||||||
'src/runtime/fsutils.c',
|
|
||||||
'src/runtime/gfx_framegraph.c',
|
|
||||||
'src/runtime/gfx_main.c',
|
|
||||||
'src/runtime/hashing.c',
|
|
||||||
'src/runtime/init.c',
|
|
||||||
'src/runtime/jobs.c',
|
|
||||||
'src/runtime/mem_arena.c',
|
|
||||||
'src/runtime/resource_manager.c',
|
|
||||||
'src/runtime/sprint.c',
|
|
||||||
'src/runtime/text.c',
|
|
||||||
'src/runtime/threading_cond.c',
|
|
||||||
'src/runtime/threading_mutex.c',
|
|
||||||
'src/runtime/threading_rwlock.c',
|
|
||||||
'src/runtime/threading_thread.c',
|
|
||||||
|
|
||||||
# Contrib Sources
|
|
||||||
'contrib/xxhash/xxhash.c',
|
|
||||||
'contrib/lz4/lz4.c',
|
|
||||||
sources : runtime_additional_sources,
|
|
||||||
dependencies : runtime_deps,
|
|
||||||
include_directories : runtime_incdirs,
|
|
||||||
link_args : runtime_linkargs,
|
|
||||||
c_args : runtime_cargs,
|
|
||||||
c_pch : 'pch/rt_pch.h',
|
|
||||||
cpp_args : runtime_cargs,
|
|
||||||
cpp_pch : 'pch/rt_pch.h')
|
|
||||||
|
|
||||||
|
|
||||||
# Renderer libraries
|
|
||||||
static_renderer_lib = 'NONE'
|
|
||||||
|
|
||||||
if vk_dep.found()
|
|
||||||
platform_defs = []
|
|
||||||
if get_option('use_xlib')
|
|
||||||
platform_defs = ['-DVK_USE_PLATFORM_XLIB_KHR']
|
|
||||||
elif host_machine.system() == 'windows'
|
|
||||||
platform_defs = ['-DVK_USE_PLATFORM_WIN32_KHR']
|
|
||||||
endif
|
|
||||||
|
|
||||||
vk_inc_dep = vk_dep.partial_dependency(compile_args : true, includes : true)
|
|
||||||
vk_renderer_lib = library('rtvk',
|
|
||||||
# Project Sources
|
|
||||||
'src/renderer/vk/gpu.h',
|
|
||||||
'src/renderer/vk/pipelines.h',
|
|
||||||
'src/renderer/vk/render_targets.h',
|
|
||||||
'src/renderer/vk/swapchain.h',
|
|
||||||
|
|
||||||
'src/renderer/vk/helper.c',
|
|
||||||
'src/renderer/vk/init.c',
|
|
||||||
'src/renderer/vk/pipelines.c',
|
|
||||||
'src/renderer/vk/render_targets.c',
|
|
||||||
'src/renderer/vk/swapchain.c',
|
|
||||||
|
|
||||||
# Contrib Sources
|
|
||||||
'contrib/volk/volk.h',
|
|
||||||
'contrib/volk/volk.c',
|
|
||||||
'contrib/vma/vk_mem_alloc.h',
|
|
||||||
'src/renderer/vk/vma_impl.cpp',
|
|
||||||
dependencies : [m_dep, vk_inc_dep, windowing_dep],
|
|
||||||
include_directories : common_incdirs,
|
|
||||||
link_with : [runtime_lib],
|
|
||||||
c_pch : 'pch/vk_pch.h',
|
|
||||||
c_args : platform_defs,
|
|
||||||
cpp_pch : 'pch/vk_pch.h',
|
|
||||||
cpp_args : platform_defs)
|
|
||||||
|
|
||||||
static_renderer_lib = vk_renderer_lib
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
subdir('src')
|
||||||
|
|
||||||
# Handle linking against both runtime and renderer if we build static libs
|
# Handle linking against both runtime and renderer if we build static libs
|
||||||
engine_link_libs = []
|
engine_link_libs = []
|
||||||
if get_option('default_library') == 'static'
|
if get_option('default_library') == 'static'
|
||||||
engine_link_libs = [runtime_lib, static_renderer_lib]
|
if get_option('static_renderer') == 'vk'
|
||||||
|
engine_link_libs = [runtime_lib, vk_renderer_lib]
|
||||||
|
else
|
||||||
|
error('Invalid static_renderer option ', get_option('static_renderer'))
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
engine_link_libs = [runtime_lib]
|
engine_link_libs = [runtime_lib]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Game
|
# Unit/Integration test driver
|
||||||
executable('voyage',
|
subdir('tests')
|
||||||
'src/game/entry.c',
|
|
||||||
'src/game/main.c',
|
|
||||||
include_directories : common_incdirs,
|
|
||||||
link_with : engine_link_libs,
|
|
||||||
win_subsystem : 'windows')
|
|
||||||
|
|
||||||
# Unit Tests
|
# Declare dependencies, to enable using the engine as a subproject
|
||||||
rttest_exe = executable('rttest',
|
engine_dep = declare_dependency(link_with : engine_link_libs,
|
||||||
'src/tests/rttest.c',
|
include_directories : engine_incdir)
|
||||||
link_with : engine_link_libs,
|
|
||||||
include_directories : common_incdirs,
|
assetc_dep = declare_dependency(link_with : asset_compiler,
|
||||||
win_subsystem : 'console')
|
include_directories : engine_incdir)
|
||||||
test('runtime test', rttest_exe)
|
|
||||||
|
# "inline" game
|
||||||
|
if get_option('game_as_subdir')
|
||||||
|
subdir('src/game')
|
||||||
|
endif
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
|
option('static_renderer', type : 'string', value : 'vk', description : 'Name of the renderer used for static builds')
|
||||||
option('use_xlib', type : 'boolean', value : false, description : 'Use Xlib for window creation under linux')
|
option('use_xlib', type : 'boolean', value : false, description : 'Use Xlib for window creation under linux')
|
||||||
option('error_report_debugbreak', type : 'boolean', value : true, description : 'Debugbreak in ReportError')
|
option('error_report_debugbreak', type : 'boolean', value : true, description : 'Debugbreak in ReportError')
|
||||||
option('build_asset_compiler', type : 'boolean', value : true, description : 'Enables or disables the asset compiler inside runtime.')
|
|
||||||
option('enable_dxc_shader_compiler', type : 'boolean', value : true, description : 'Enables building the dxc-based shader compiler.')
|
option('enable_dxc_shader_compiler', type : 'boolean', value : true, description : 'Enables building the dxc-based shader compiler.')
|
||||||
|
option('game_as_subdir', type : 'boolean', value : false, description : 'If true, adds the directory "src/game" to the build.')
|
||||||
|
@ -1,22 +1,21 @@
|
|||||||
#include "asset_compiler.h"
|
#include "asset_compiler.h"
|
||||||
#include "buffer_manager.h"
|
#include "processor.h"
|
||||||
#include "config.h"
|
|
||||||
#include "file_tab.h"
|
#include "runtime/aio.h"
|
||||||
#include "fsutils.h"
|
#include "runtime/buffer_manager.h"
|
||||||
#include "mem_arena.h"
|
#include "runtime/config.h"
|
||||||
#include "resources.h"
|
#include "runtime/file_tab.h"
|
||||||
#include "runtime.h"
|
#include "runtime/fsutils.h"
|
||||||
#include "threading.h"
|
#include "runtime/mem_arena.h"
|
||||||
|
#include "runtime/resources.h"
|
||||||
|
#include "runtime/runtime.h"
|
||||||
|
#include "runtime/threading.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifndef RT_BUILD_ASSET_COMPILER
|
|
||||||
#error This should only be built when RT_BUILD_ASSET_COMPILER is defined.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint64_t last_processed;
|
uint64_t last_processed;
|
||||||
rt_resource_id resources[RT_MAX_RESOURCES_PER_ASSET];
|
rt_resource_id resources[RT_MAX_RESOURCES_PER_ASSET];
|
||||||
@ -75,7 +74,15 @@ static rt_asset_processor _processors[] = {
|
|||||||
static void ProcessorThreadEntry(void *);
|
static void ProcessorThreadEntry(void *);
|
||||||
static void CompilerThreadEntry(void *);
|
static void CompilerThreadEntry(void *);
|
||||||
|
|
||||||
rt_result InitAssetCompiler(void) {
|
|
||||||
|
RT_DLLEXPORT void rtRegisterAssetCompilerCVars(void) {
|
||||||
|
rtRegisterCVAR(&rt_AssetDirectory);
|
||||||
|
rtRegisterCVAR(&rt_AssetDBSize);
|
||||||
|
rtRegisterCVAR(&rt_AssetProcessingThreads);
|
||||||
|
rtRegisterCVAR(&rt_AssetProcessorArenaSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
RT_DLLEXPORT rt_result rtInitAssetCompiler(void) {
|
||||||
|
|
||||||
unsigned int db_size = (unsigned int)rt_AssetDBSize.i;
|
unsigned int db_size = (unsigned int)rt_AssetDBSize.i;
|
||||||
void *mem = malloc((sizeof(rt_file_id) + sizeof(rt_asset_data)) * db_size);
|
void *mem = malloc((sizeof(rt_file_id) + sizeof(rt_asset_data)) * db_size);
|
||||||
@ -125,7 +132,7 @@ rt_result InitAssetCompiler(void) {
|
|||||||
return RT_SUCCESS;
|
return RT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShutdownAssetCompiler(void) {
|
RT_DLLEXPORT void rtShutdownAssetCompiler(void) {
|
||||||
_keep_running = false;
|
_keep_running = false;
|
||||||
rtJoinThread(_compiler_thread);
|
rtJoinThread(_compiler_thread);
|
||||||
for (int i = 0; i < rt_AssetProcessingThreads.i; ++i)
|
for (int i = 0; i < rt_AssetProcessingThreads.i; ++i)
|
||||||
@ -384,8 +391,6 @@ static void ProcessorThreadEntry(void *param) {
|
|||||||
|
|
||||||
/* Utilities for asset processors*/
|
/* Utilities for asset processors*/
|
||||||
|
|
||||||
#include "aio.h"
|
|
||||||
|
|
||||||
rt_loaded_asset LoadAsset(rt_file_id file) {
|
rt_loaded_asset LoadAsset(rt_file_id file) {
|
||||||
const char *path = rtGetFilePath(file);
|
const char *path = rtGetFilePath(file);
|
||||||
size_t file_size = rtGetFileSize(path);
|
size_t file_size = rtGetFileSize(path);
|
22
src/asset_compiler/asset_compiler.h
Normal file
22
src/asset_compiler/asset_compiler.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef RT_ASSET_PROCESSOR_H
|
||||||
|
#define RT_ASSET_PROCESSOR_H
|
||||||
|
|
||||||
|
/* Public header for the asset processor */
|
||||||
|
|
||||||
|
#include "runtime/runtime.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
RT_DLLEXPORT void rtRegisterAssetCompilerCVars(void);
|
||||||
|
|
||||||
|
RT_DLLEXPORT rt_result rtInitAssetCompiler(void);
|
||||||
|
|
||||||
|
RT_DLLEXPORT void rtShutdownAssetCompiler(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -1,6 +1,7 @@
|
|||||||
#include "description_parser.h"
|
#include "description_parser.h"
|
||||||
#include "runtime.h"
|
|
||||||
#include "mem_arena.h"
|
#include "runtime/runtime.h"
|
||||||
|
#include "runtime/mem_arena.h"
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
@ -4,7 +4,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <dxcapi.h>
|
#include <dxcapi.h>
|
||||||
|
|
||||||
#include "asset_compiler.h"
|
#include "processor.h"
|
||||||
#include "shader_compiler.h"
|
#include "shader_compiler.h"
|
||||||
|
|
||||||
extern "C" rt_shader_bytecode CompileVulkanShader(rt_shader_stage stage,
|
extern "C" rt_shader_bytecode CompileVulkanShader(rt_shader_stage stage,
|
@ -1,7 +1,8 @@
|
|||||||
#include "asset_compiler.h"
|
#include "processor.h"
|
||||||
#include "buffer_manager.h"
|
|
||||||
#include "description_parser.h"
|
#include "description_parser.h"
|
||||||
#include "gfx.h"
|
|
||||||
|
#include "runtime/buffer_manager.h"
|
||||||
|
#include "runtime/gfx.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
44
src/asset_compiler/meson.build
Normal file
44
src/asset_compiler/meson.build
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Asset Compiler
|
||||||
|
ac_deps = []
|
||||||
|
ac_sources = []
|
||||||
|
ac_cargs = []
|
||||||
|
|
||||||
|
# DXC for vulkan & directx shaders
|
||||||
|
if get_option('enable_dxc_shader_compiler')
|
||||||
|
# We package dxc binaries under contrib/dxc
|
||||||
|
dxc_include = include_directories(meson.project_source_root() / 'contrib' / 'dxc' / 'inc')
|
||||||
|
dxc_libdir = 'NONE'
|
||||||
|
if host_machine.system() == 'windows'
|
||||||
|
dxc_libdir = meson.project_source_root() / 'contrib' / 'dxc' / 'lib' / 'x64'
|
||||||
|
custom_target('copy dxcompiler.dll',
|
||||||
|
input : meson.project_source_root() / 'contrib' / 'dxc' / 'bin' / 'x64' / 'dxcompiler.dll',
|
||||||
|
output : 'dxcompiler.dll',
|
||||||
|
command : [copy_util, '@INPUT@', '@OUTPUT@'],
|
||||||
|
install : false,
|
||||||
|
build_by_default : true)
|
||||||
|
endif
|
||||||
|
dxc_dep = declare_dependency(link_args : ['-L'+dxc_libdir, '-ldxcompiler'], include_directories : dxc_include)
|
||||||
|
ac_deps += dxc_dep
|
||||||
|
ac_sources += [
|
||||||
|
'dxc_shader_compiler.cpp'
|
||||||
|
]
|
||||||
|
ac_cargs += '-DRT_BUILD_DXC_SHADER_COMPILER'
|
||||||
|
endif
|
||||||
|
|
||||||
|
asset_compiler = static_library('asset_compiler',
|
||||||
|
'asset_compiler.h',
|
||||||
|
'description_parser.h',
|
||||||
|
'processor.h',
|
||||||
|
'shader_compiler.h',
|
||||||
|
|
||||||
|
'asset_compiler.c',
|
||||||
|
'description_parser.c',
|
||||||
|
'framegraph_processor.c',
|
||||||
|
'pipeline_processor.c',
|
||||||
|
'shader_compiler.c',
|
||||||
|
sources : ac_sources,
|
||||||
|
include_directories : engine_incdir,
|
||||||
|
link_with : runtime_lib,
|
||||||
|
c_args : ac_cargs,
|
||||||
|
cpp_args : ac_cargs,
|
||||||
|
dependencies : ac_deps)
|
@ -1,12 +1,13 @@
|
|||||||
#include "asset_compiler.h"
|
#include "processor.h"
|
||||||
#include "buffer_manager.h"
|
|
||||||
#include "config.h"
|
|
||||||
#include "description_parser.h"
|
#include "description_parser.h"
|
||||||
#include "gfx.h"
|
|
||||||
#include "mem_arena.h"
|
|
||||||
#include "runtime.h"
|
|
||||||
#include "shader_compiler.h"
|
#include "shader_compiler.h"
|
||||||
|
|
||||||
|
#include "runtime/buffer_manager.h"
|
||||||
|
#include "runtime/config.h"
|
||||||
|
#include "runtime/gfx.h"
|
||||||
|
#include "runtime/mem_arena.h"
|
||||||
|
#include "runtime/runtime.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
@ -1,13 +1,9 @@
|
|||||||
#ifndef RT_ASSET_COMPILER_H
|
#ifndef RT_PROCESSOR_H
|
||||||
#define RT_ASSET_COMPILER_H
|
#define RT_PROCESSOR_H
|
||||||
|
|
||||||
#ifndef RT_BUILD_ASSET_COMPILER
|
#include "runtime/file_tab.h"
|
||||||
#error This file should only be included if RT_BUILD_ASSET_COMPILER is defined.
|
#include "runtime/mem_arena.h"
|
||||||
#endif
|
#include "runtime/resources.h"
|
||||||
|
|
||||||
#include "file_tab.h"
|
|
||||||
#include "resources.h"
|
|
||||||
#include "mem_arena.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
@ -1,10 +1,9 @@
|
|||||||
#ifndef RT_SHADER_COMPILER_H
|
#ifndef RT_SHADER_COMPILER_H
|
||||||
#define RT_SHADER_COMPILER_H
|
#define RT_SHADER_COMPILER_H
|
||||||
|
|
||||||
#include "mem_arena.h"
|
#include "runtime/runtime.h"
|
||||||
#include "runtime.h"
|
#include "runtime/mem_arena.h"
|
||||||
|
#include "runtime/renderer_api.h"
|
||||||
#include "renderer_api.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
@ -2,12 +2,20 @@
|
|||||||
#include "runtime/resources.h"
|
#include "runtime/resources.h"
|
||||||
#include "runtime/mem_arena.h"
|
#include "runtime/mem_arena.h"
|
||||||
|
|
||||||
|
#include "asset_compiler/asset_compiler.h"
|
||||||
|
|
||||||
static rt_framegraph *_framegraph;
|
static rt_framegraph *_framegraph;
|
||||||
|
|
||||||
|
void RegisterCVars(void) {
|
||||||
|
rtRegisterAssetCompilerCVars();
|
||||||
|
}
|
||||||
|
|
||||||
/* Called after the runtime has finished its initialization and before entering the main-loop*/
|
/* Called after the runtime has finished its initialization and before entering the main-loop*/
|
||||||
void Init(void) {
|
void Init(void) {
|
||||||
rtLog("GAME", "Init");
|
rtLog("GAME", "Init");
|
||||||
|
|
||||||
|
rtInitAssetCompiler();
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
rt_render_target_id rt_ids[4] = {rtCalculateRenderTargetID("rt0", sizeof("rt0")),
|
rt_render_target_id rt_ids[4] = {rtCalculateRenderTargetID("rt0", sizeof("rt0")),
|
||||||
rtCalculateRenderTargetID("rt1", sizeof("rt1")),
|
rtCalculateRenderTargetID("rt1", sizeof("rt1")),
|
||||||
@ -61,6 +69,8 @@ void Init(void) {
|
|||||||
|
|
||||||
rt_resource_id id = rtGetResourceID("assets/test.framegraph");
|
rt_resource_id id = rtGetResourceID("assets/test.framegraph");
|
||||||
rt_temp_arena temp = rtGetTemporaryArena(NULL, 0);
|
rt_temp_arena temp = rtGetTemporaryArena(NULL, 0);
|
||||||
|
while (rtGetResourceSize(id) == 0)
|
||||||
|
;
|
||||||
rt_resource *resource =
|
rt_resource *resource =
|
||||||
rtArenaPush(temp.arena, rtGetResourceSize(id));
|
rtArenaPush(temp.arena, rtGetResourceSize(id));
|
||||||
|
|
||||||
@ -72,5 +82,6 @@ void Init(void) {
|
|||||||
/* Called after exiting the main-loop and before the runtime starts its shutdown */
|
/* Called after exiting the main-loop and before the runtime starts its shutdown */
|
||||||
void Shutdown(void) {
|
void Shutdown(void) {
|
||||||
rtLog("GAME", "Shutdown");
|
rtLog("GAME", "Shutdown");
|
||||||
|
rtShutdownAssetCompiler();
|
||||||
rtDestroyFramegraph(_framegraph);
|
rtDestroyFramegraph(_framegraph);
|
||||||
}
|
}
|
10
src/game/meson.build
Normal file
10
src/game/meson.build
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
vy_link_libs = engine_link_libs
|
||||||
|
vy_link_libs += asset_compiler
|
||||||
|
|
||||||
|
executable('voyage',
|
||||||
|
'entry.c',
|
||||||
|
'main.c',
|
||||||
|
link_with : vy_link_libs,
|
||||||
|
include_directories : engine_incdir,
|
||||||
|
c_pch : 'pch/game_pch.h',
|
||||||
|
win_subsystem : 'windows')
|
2
src/game/pch/game_pch.h
Normal file
2
src/game/pch/game_pch.h
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
// Runtime dir
|
||||||
|
#include "runtime/runtime.h"
|
5
src/meson.build
Normal file
5
src/meson.build
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
subdir('runtime')
|
||||||
|
subdir('asset_compiler')
|
||||||
|
|
||||||
|
# Renderer libs
|
||||||
|
subdir('renderer/vk')
|
36
src/renderer/vk/meson.build
Normal file
36
src/renderer/vk/meson.build
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
if vk_dep.found()
|
||||||
|
platform_defs = []
|
||||||
|
if get_option('use_xlib')
|
||||||
|
platform_defs = ['-DVK_USE_PLATFORM_XLIB_KHR']
|
||||||
|
elif host_machine.system() == 'windows'
|
||||||
|
platform_defs = ['-DVK_USE_PLATFORM_WIN32_KHR']
|
||||||
|
endif
|
||||||
|
|
||||||
|
vk_inc_dep = vk_dep.partial_dependency(compile_args : true, includes : true)
|
||||||
|
vk_renderer_lib = library('rtvk',
|
||||||
|
# Project Sources
|
||||||
|
'gpu.h',
|
||||||
|
'pipelines.h',
|
||||||
|
'render_targets.h',
|
||||||
|
'swapchain.h',
|
||||||
|
|
||||||
|
'helper.c',
|
||||||
|
'init.c',
|
||||||
|
'pipelines.c',
|
||||||
|
'render_targets.c',
|
||||||
|
'swapchain.c',
|
||||||
|
|
||||||
|
# Contrib Sources
|
||||||
|
contrib_dir / 'volk/volk.h',
|
||||||
|
contrib_dir / 'volk/volk.c',
|
||||||
|
contrib_dir / 'vma/vk_mem_alloc.h',
|
||||||
|
'vma_impl.cpp',
|
||||||
|
dependencies : [m_dep, vk_inc_dep, windowing_dep],
|
||||||
|
include_directories : [engine_incdir, include_directories(contrib_dir)],
|
||||||
|
link_with : [runtime_lib],
|
||||||
|
c_pch : 'pch/vk_pch.h',
|
||||||
|
c_args : platform_defs,
|
||||||
|
cpp_pch : 'pch/vk_pch.h',
|
||||||
|
cpp_args : platform_defs)
|
||||||
|
endif
|
||||||
|
|
@ -32,6 +32,9 @@ rtWin32Entry(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int n
|
|||||||
|
|
||||||
rtRegisterRendererCVars();
|
rtRegisterRendererCVars();
|
||||||
|
|
||||||
|
if (app_callbacks.RegisterCVars)
|
||||||
|
app_callbacks.RegisterCVars();
|
||||||
|
|
||||||
WNDCLASSEXW wndclass = {
|
WNDCLASSEXW wndclass = {
|
||||||
.cbSize = sizeof(wndclass),
|
.cbSize = sizeof(wndclass),
|
||||||
.hInstance = hInstance,
|
.hInstance = hInstance,
|
||||||
@ -165,7 +168,9 @@ RT_DLLEXPORT int rtXlibEntry(int argc, char **argv, rt_app_callbacks app_callbac
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
rtRegisterRendererCVars();
|
rtRegisterRendererCVars();
|
||||||
|
|
||||||
|
if (app_callbacks.RegisterCVars())
|
||||||
|
app_callbacks.RegisterCVars();
|
||||||
|
|
||||||
Display *dpy = XOpenDisplay(NULL);
|
Display *dpy = XOpenDisplay(NULL);
|
||||||
if (!dpy) {
|
if (!dpy) {
|
||||||
|
@ -9,10 +9,14 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef void rt_app_register_cvars_fn(void);
|
||||||
typedef void rt_app_init_fn(void);
|
typedef void rt_app_init_fn(void);
|
||||||
typedef void rt_app_shutdown_fn(void);
|
typedef void rt_app_shutdown_fn(void);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
/* Called before initialization. */
|
||||||
|
rt_app_register_cvars_fn *RegisterCVars;
|
||||||
|
|
||||||
/* Called after the runtime has finished initialization and
|
/* Called after the runtime has finished initialization and
|
||||||
* before entering the main-loop */
|
* before entering the main-loop */
|
||||||
rt_app_init_fn *Init;
|
rt_app_init_fn *Init;
|
||||||
|
@ -12,6 +12,8 @@ static unsigned int _next = 0;
|
|||||||
static rt_mutex *_mutex = NULL;
|
static rt_mutex *_mutex = NULL;
|
||||||
|
|
||||||
void rtRegisterCVAR(rt_cvar *cvar) {
|
void rtRegisterCVAR(rt_cvar *cvar) {
|
||||||
|
/* TODO(Kevin): Check if we have a loaded value for that cvar.
|
||||||
|
* If yes, override the provided default value. */
|
||||||
if (!_mutex)
|
if (!_mutex)
|
||||||
_mutex = rtCreateMutex();
|
_mutex = rtCreateMutex();
|
||||||
rtLockMutex(_mutex);
|
rtLockMutex(_mutex);
|
||||||
|
@ -18,10 +18,6 @@ extern rt_cvar rt_ResourceNamespaceSize;
|
|||||||
extern rt_cvar rt_DisableResourceNamespaceLoad;
|
extern rt_cvar rt_DisableResourceNamespaceLoad;
|
||||||
extern rt_cvar rt_MaxFramegraphs;
|
extern rt_cvar rt_MaxFramegraphs;
|
||||||
|
|
||||||
#ifdef RT_BUILD_ASSET_COMPILER
|
|
||||||
extern rt_cvar rt_AssetDirectory;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void RegisterRuntimeCVars(void) {
|
void RegisterRuntimeCVars(void) {
|
||||||
rtRegisterCVAR(&rt_Renderer);
|
rtRegisterCVAR(&rt_Renderer);
|
||||||
rtRegisterCVAR(&rt_Fullscreen);
|
rtRegisterCVAR(&rt_Fullscreen);
|
||||||
@ -36,9 +32,6 @@ void RegisterRuntimeCVars(void) {
|
|||||||
rtRegisterCVAR(&rt_ResourceNamespaceSize);
|
rtRegisterCVAR(&rt_ResourceNamespaceSize);
|
||||||
rtRegisterCVAR(&rt_DisableResourceNamespaceLoad);
|
rtRegisterCVAR(&rt_DisableResourceNamespaceLoad);
|
||||||
rtRegisterCVAR(&rt_MaxFramegraphs);
|
rtRegisterCVAR(&rt_MaxFramegraphs);
|
||||||
#ifdef RT_BUILD_ASSET_COMPILER
|
|
||||||
rtRegisterCVAR(&rt_AssetDirectory);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void SetMainThreadId(void);
|
extern void SetMainThreadId(void);
|
||||||
@ -52,11 +45,6 @@ extern void ShutdownAIO(void);
|
|||||||
extern rt_result InitResourceManager(void);
|
extern rt_result InitResourceManager(void);
|
||||||
extern void ShutdownResourceManager(void);
|
extern void ShutdownResourceManager(void);
|
||||||
|
|
||||||
#ifdef RT_BUILD_ASSET_COMPILER
|
|
||||||
extern rt_result InitAssetCompiler(void);
|
|
||||||
extern void ShutdownAssetCompiler(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
RT_DLLEXPORT rt_result rtInitRuntime(void) {
|
RT_DLLEXPORT rt_result rtInitRuntime(void) {
|
||||||
SetMainThreadId();
|
SetMainThreadId();
|
||||||
RegisterRuntimeCVars();
|
RegisterRuntimeCVars();
|
||||||
@ -82,20 +70,10 @@ RT_DLLEXPORT rt_result rtInitRuntime(void) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef RT_BUILD_ASSET_COMPILER
|
|
||||||
if ((res = InitAssetCompiler()) != RT_SUCCESS) {
|
|
||||||
rtReportError("AC", "Init failed.");
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return RT_SUCCESS;
|
return RT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
RT_DLLEXPORT void rtShutdownRuntime(void) {
|
RT_DLLEXPORT void rtShutdownRuntime(void) {
|
||||||
#ifdef RT_BUILD_ASSET_COMPILER
|
|
||||||
ShutdownAssetCompiler();
|
|
||||||
#endif
|
|
||||||
ShutdownResourceManager();
|
ShutdownResourceManager();
|
||||||
ShutdownAIO();
|
ShutdownAIO();
|
||||||
ShutdownFileTab();
|
ShutdownFileTab();
|
||||||
|
55
src/runtime/meson.build
Normal file
55
src/runtime/meson.build
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# Runtime
|
||||||
|
runtime_deps = [thread_dep, m_dep, windowing_dep]
|
||||||
|
runtime_incdirs = include_directories(meson.project_source_root() / 'contrib')
|
||||||
|
runtime_lib = library('rt',
|
||||||
|
# Project Sources
|
||||||
|
'aio.h',
|
||||||
|
'app.h',
|
||||||
|
'buffer_manager.h',
|
||||||
|
'compression.h',
|
||||||
|
'config.h',
|
||||||
|
'ds.h',
|
||||||
|
'dynamic_libs.h',
|
||||||
|
'file_tab.h',
|
||||||
|
'fsutils.h',
|
||||||
|
'gfx.h',
|
||||||
|
'handles.h',
|
||||||
|
'hashing.h',
|
||||||
|
'jobs.h',
|
||||||
|
'mem_arena.h',
|
||||||
|
'renderer_api.h',
|
||||||
|
'resources.h',
|
||||||
|
'runtime.h',
|
||||||
|
'threading.h',
|
||||||
|
|
||||||
|
'aio.c',
|
||||||
|
'app.c',
|
||||||
|
'assert.c',
|
||||||
|
'buffer_manager.c',
|
||||||
|
'compression.c',
|
||||||
|
'config.c',
|
||||||
|
'ds_minheap.c',
|
||||||
|
'dynamic_libs.c',
|
||||||
|
'error_report.c',
|
||||||
|
'file_tab.c',
|
||||||
|
'fsutils.c',
|
||||||
|
'gfx_framegraph.c',
|
||||||
|
'gfx_main.c',
|
||||||
|
'hashing.c',
|
||||||
|
'init.c',
|
||||||
|
'jobs.c',
|
||||||
|
'mem_arena.c',
|
||||||
|
'resource_manager.c',
|
||||||
|
'sprint.c',
|
||||||
|
'text.c',
|
||||||
|
'threading_cond.c',
|
||||||
|
'threading_mutex.c',
|
||||||
|
'threading_rwlock.c',
|
||||||
|
'threading_thread.c',
|
||||||
|
|
||||||
|
# Contrib Sources
|
||||||
|
contrib_dir / 'xxhash/xxhash.c',
|
||||||
|
contrib_dir / 'lz4/lz4.c',
|
||||||
|
dependencies : runtime_deps,
|
||||||
|
include_directories : [engine_incdir, runtime_incdirs],
|
||||||
|
c_pch : 'pch/rt_pch.h')
|
6
tests/meson.build
Normal file
6
tests/meson.build
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
rttest_exe = executable('rttest',
|
||||||
|
'rttest.c',
|
||||||
|
link_with : engine_link_libs,
|
||||||
|
include_directories : engine_incdir,
|
||||||
|
win_subsystem : 'console')
|
||||||
|
test('runtime test', rttest_exe)
|
Loading…
Reference in New Issue
Block a user