Merge branch 'main' of https://libneat.hopto.org/git/kevin/rtengine
Some checks failed
Ubuntu Cross to Win64 / Cross Compile with ming64 (1.4.0, ubuntu-latest) (push) Failing after 1m18s
Some checks failed
Ubuntu Cross to Win64 / Cross Compile with ming64 (1.4.0, ubuntu-latest) (push) Failing after 1m18s
This commit is contained in:
commit
14138b4933
@ -26,21 +26,17 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout Code
|
- name: Checkout Code
|
||||||
uses: https://gitea.com/ScMi1/checkout@v1
|
uses: https://gitea.com/ScMi1/checkout@v1
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: '3.x'
|
|
||||||
- name: Install PIP Dependencies
|
|
||||||
run: python -m pip install meson==${{ matrix.meson_version }} ninja
|
|
||||||
- name: Install APT Dependencies
|
- name: Install APT Dependencies
|
||||||
run: |
|
run: |
|
||||||
apt update -y
|
apt update -y
|
||||||
apt install -y cmake clang build-essential libwayland-dev libxkbcommon-dev xorg-dev mingw-w64 wine-stable
|
apt install -y python3-pip cmake clang build-essential libwayland-dev libxkbcommon-dev xorg-dev mingw-w64 mingw-w64-common wine-stable
|
||||||
|
- name: Install PIP Dependencies
|
||||||
|
run: python -m pip install meson==${{ matrix.meson_version }} ninja
|
||||||
- name: Configure Project
|
- name: Configure Project
|
||||||
run: |
|
run: |
|
||||||
chmod +x ./scripts/download_dxc_cross.sh
|
chmod +x ./scripts/download_dxc_cross.sh
|
||||||
./scripts/download_dxc_cross.sh
|
./scripts/download_dxc_cross.sh
|
||||||
meson setup --cross-file scripts/x86_64-w64-mingw32.txt build
|
meson setup --cross-file scripts/x86_64-w64-mingw32.txt -Db_sanitize=none build
|
||||||
- name: Compile
|
- name: Compile
|
||||||
run: meson compile -C build
|
run: meson compile -C build
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
|
27
meson.build
27
meson.build
@ -3,7 +3,7 @@ project('rtengine', ['c', 'cpp'],
|
|||||||
'b_sanitize=none',
|
'b_sanitize=none',
|
||||||
'c_std=c17',
|
'c_std=c17',
|
||||||
'cpp_std=c++20',
|
'cpp_std=c++20',
|
||||||
'warning_level=3',
|
'warning_level=2',
|
||||||
'werror=true',
|
'werror=true',
|
||||||
'b_vscrt=static_from_buildtype',
|
'b_vscrt=static_from_buildtype',
|
||||||
'default_library=static',
|
'default_library=static',
|
||||||
@ -51,6 +51,18 @@ if host_machine.system() == 'linux'
|
|||||||
add_project_arguments(['-D_GNU_SOURCE'], language : ['c', 'cpp'])
|
add_project_arguments(['-D_GNU_SOURCE'], language : ['c', 'cpp'])
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
# Handle Linux to Windows cross compilation.
|
||||||
|
# By default, mingw does not find its own windows headers...
|
||||||
|
if build_machine.system() == 'linux' and host_machine.system() == 'windows'
|
||||||
|
message('Adding /usr/share/mingw-w64/include to the project include path.')
|
||||||
|
add_project_arguments(['-isystem/usr/share/mingw-w64/include',
|
||||||
|
'-DRT_CROSS_LINUX_WINDOWS',
|
||||||
|
'-D_WIN32_WINNT=0x600'],
|
||||||
|
language: ['c', 'cpp'],
|
||||||
|
native: false)
|
||||||
|
endif
|
||||||
|
|
||||||
fs = import('fs')
|
fs = import('fs')
|
||||||
|
|
||||||
# Gather dependencies
|
# Gather dependencies
|
||||||
@ -99,7 +111,7 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Unit/Integration test driver
|
# Unit/Integration test driver
|
||||||
# subdir('tests')
|
subdir('tests')
|
||||||
|
|
||||||
# Declare dependencies, to enable using the engine as a subproject
|
# Declare dependencies, to enable using the engine as a subproject
|
||||||
engine_dep = declare_dependency(link_with : engine_link_libs,
|
engine_dep = declare_dependency(link_with : engine_link_libs,
|
||||||
@ -120,3 +132,14 @@ if get_option('game_as_subdir')
|
|||||||
depends : engine_libs)
|
depends : engine_libs)
|
||||||
endforeach
|
endforeach
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# For Cross builds, we need libgcc from mingw
|
||||||
|
if build_machine.system() == 'linux' and host_machine.system() == 'windows'
|
||||||
|
custom_target('copy libgcc',
|
||||||
|
input : '/usr/lib/gcc/x86_64-w64-mingw32/10-win32/libgcc_s_seh-1.dll',
|
||||||
|
output : 'libgcc_s_seh-1.dll',
|
||||||
|
command : [copy_util, '@INPUT@', '@OUTPUT@'],
|
||||||
|
build_by_default : true)
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,4 +4,5 @@ option('error_report_debugbreak', type : 'boolean', value : true, description :
|
|||||||
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('enable_dx11_shader_compiler', type : 'boolean', value : true, description : 'Enables building the dx11-bases shader compiler.')
|
option('enable_dx11_shader_compiler', type : 'boolean', value : true, description : 'Enables building the dx11-bases shader compiler.')
|
||||||
option('game_as_subdir', type : 'boolean', value : false, description : 'If true, adds the directory "src/game" to the build.')
|
option('game_as_subdir', type : 'boolean', value : false, description : 'If true, adds the directory "src/game" to the build.')
|
||||||
option('build_dx11', type : 'boolean', value : true, description : 'Enables/disables the build of the dx11 renderer.')
|
option('build_dx11', type : 'boolean', value : true, description : 'Enables/disables the build of the dx11 renderer.')
|
||||||
|
option('build_experiments', type : 'boolean', value : false, description : 'Enables/disables building the experiments in src/experimental.')
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
file="linux_dxc_2023_08_14.x86_64.tar.gz"
|
file="linux_dxc_2023_08_14.x86_64.tar.gz"
|
||||||
|
|
||||||
if [! -d contrib]; then
|
if [ ! -d contrib ]; then
|
||||||
echo "Could not find 'contrib'. Make sure to run this script from the projects root directory."
|
echo "Could not find 'contrib'. Make sure to run this script from the projects root directory."
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
|
2
scripts/download_dxc_cross.sh
Normal file → Executable file
2
scripts/download_dxc_cross.sh
Normal file → Executable file
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
file="dxc_2023_08_14.zip"
|
file="dxc_2023_08_14.zip"
|
||||||
|
|
||||||
if [! -d contrib]; then
|
if [ ! -d contrib ]; then
|
||||||
echo "Could not find 'contrib'. Make sure to run this script from the projects root directory."
|
echo "Could not find 'contrib'. Make sure to run this script from the projects root directory."
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
|
32
scripts/download_shaderc.sh
Executable file
32
scripts/download_shaderc.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
#
|
||||||
|
# Downloads shaderc from github into contrib/
|
||||||
|
#
|
||||||
|
# Last changed: 24/11/23 (DD/MM/YY)
|
||||||
|
#
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
||||||
|
SHADERC_VER=v2023.7
|
||||||
|
SHADERC_REPO=https://github.com/google/shaderc.git
|
||||||
|
|
||||||
|
# Check if we are beeing run from scripts/ or from root
|
||||||
|
if [ ! -f meson.build ]; then
|
||||||
|
cd ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
git clone --quiet $SHADERC_REPO contrib/shaderc
|
||||||
|
pushd contrib/shaderc
|
||||||
|
git checkout --quiet $SHADERC_VER
|
||||||
|
python3 ./utils/git-sync-deps
|
||||||
|
rmdir -rf .git
|
||||||
|
|
||||||
|
mkdir build-linux
|
||||||
|
pushd build-linux
|
||||||
|
cmake ..
|
||||||
|
cmake --build . --config Release
|
||||||
|
popd
|
||||||
|
|
||||||
|
popd
|
@ -15,7 +15,7 @@ RT_CVAR_I(rt_WindowHeight, "Window height. Default: 768", 768);
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
static LRESULT CALLBACK win32WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
static LRESULT CALLBACK win32WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
||||||
switch (uMsg) {
|
switch (uMsg) {
|
||||||
@ -100,7 +100,7 @@ RT_DLLEXPORT int rtWin32Entry(HINSTANCE hInstance,
|
|||||||
{
|
{
|
||||||
RECT r;
|
RECT r;
|
||||||
GetClientRect(wnd, &r);
|
GetClientRect(wnd, &r);
|
||||||
window_width = r.right;
|
window_width = r.right;
|
||||||
window_height = r.bottom;
|
window_height = r.bottom;
|
||||||
}
|
}
|
||||||
rt_renderer_init_info renderer_info = {.hWnd = wnd,
|
rt_renderer_init_info renderer_info = {.hWnd = wnd,
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// Required by dxcapi.h, does not work with WIN32_LEAN_AND_MEAN
|
// Required by dxcapi.h, does not work with WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
#if defined(__GNUC__) || defined(__clang__)
|
#if defined(__GNUC__) || defined(__clang__)
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wconversion"
|
#pragma GCC diagnostic ignored "-Wconversion"
|
||||||
|
#pragma GCC diagnostic ignored "-Wattributes"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef RT_CROSS_LINUX_WINDOWS
|
||||||
|
#include <runtime/cross_sal.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <dxcapi.h>
|
#include <dxcapi.h>
|
||||||
#if defined(__GNUC__) || defined(__clang__)
|
#if defined(__GNUC__) || defined(__clang__)
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
@ -5,4 +5,6 @@ subdir('app_framework')
|
|||||||
subdir('renderer/common')
|
subdir('renderer/common')
|
||||||
subdir('renderer/dx11')
|
subdir('renderer/dx11')
|
||||||
|
|
||||||
subdir('experimental')
|
if get_option('build_experiments')
|
||||||
|
subdir('experimental')
|
||||||
|
endif
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
void Win32ErrorToString(DWORD last_error, char *out, int bufsize);
|
void Win32ErrorToString(DWORD last_error, char *out, int bufsize);
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
#include "runtime.h"
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "runtime.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -29,7 +29,6 @@ RT_DLLEXPORT int rtAssertHandler(const char *expr, const char *msg, const char *
|
|||||||
line);
|
line);
|
||||||
outmessage[511] = '\0';
|
outmessage[511] = '\0';
|
||||||
|
|
||||||
|
|
||||||
DWORD action = MessageBoxA(NULL, outmessage, "Assertion Failed", MB_YESNOCANCEL | MB_ICONERROR);
|
DWORD action = MessageBoxA(NULL, outmessage, "Assertion Failed", MB_YESNOCANCEL | MB_ICONERROR);
|
||||||
if (action == IDYES) {
|
if (action == IDYES) {
|
||||||
return ASSERT_HANDLER_DBGBREAK;
|
return ASSERT_HANDLER_DBGBREAK;
|
||||||
@ -42,4 +41,4 @@ RT_DLLEXPORT int rtAssertHandler(const char *expr, const char *msg, const char *
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return ASSERT_HANDLER_CONTINUE;
|
return ASSERT_HANDLER_CONTINUE;
|
||||||
}
|
}
|
||||||
|
17
src/runtime/cross_sal.h
Normal file
17
src/runtime/cross_sal.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#ifndef RT_CROSS_SAL_H
|
||||||
|
#define RT_CROSS_SAL_H
|
||||||
|
|
||||||
|
/* mingw-w64 seems to miss some SAL annotations that are used by dxc etc.
|
||||||
|
* This header adds these.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef RT_CROSS_LINUX_WINDOWS
|
||||||
|
#pragma warning Are you sure that you want to include this file ?
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _Maybenull_
|
||||||
|
#define _In_opt_count_(n)
|
||||||
|
#define _In_bytecount_(n)
|
||||||
|
#define _In_count_(n)
|
||||||
|
|
||||||
|
#endif
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
RT_DLLEXPORT rt_dynlib rtOpenCallerLib(void) {
|
RT_DLLEXPORT rt_dynlib rtOpenCallerLib(void) {
|
||||||
return (rt_dynlib)GetModuleHandleW(NULL);
|
return (rt_dynlib)GetModuleHandleW(NULL);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#define DbgBreak DebugBreak()
|
#define DbgBreak DebugBreak()
|
||||||
#elif defined(__GNUC__)
|
#elif defined(__GNUC__)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
struct rt_scandir_handle_s {
|
struct rt_scandir_handle_s {
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
|
@ -15,6 +15,7 @@ runtime_lib = library('rt',
|
|||||||
'buffer_manager.h',
|
'buffer_manager.h',
|
||||||
'compression.h',
|
'compression.h',
|
||||||
'config.h',
|
'config.h',
|
||||||
|
'cross_sal.h',
|
||||||
'ds.h',
|
'ds.h',
|
||||||
'dynamic_libs.h',
|
'dynamic_libs.h',
|
||||||
'file_tab.h',
|
'file_tab.h',
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#define NOMINMAX
|
#define NOMINMAX
|
||||||
#include <Windows.h>
|
|
||||||
#include <unknwn.h>
|
#include <unknwn.h>
|
||||||
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* C standard library*/
|
/* C standard library*/
|
||||||
|
#include <limits.h>
|
||||||
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
/* Runtime */
|
/* Runtime */
|
||||||
#include "runtime/runtime.h"
|
#include "runtime/runtime.h"
|
||||||
|
@ -10,17 +10,28 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLE_STB_SPRINTF
|
#if ENABLE_STB_SPRINTF
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(push, 0)
|
#pragma warning(push, 0)
|
||||||
|
#elif defined(__GNUC__) || defined(__clang__)
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
||||||
|
#endif
|
||||||
#define STB_SPRINTF_IMPLEMENTATION
|
#define STB_SPRINTF_IMPLEMENTATION
|
||||||
#define STB_SPRINTF_STATIC
|
#define STB_SPRINTF_STATIC
|
||||||
|
|
||||||
#include <stb_sprintf.h>
|
#include <stb_sprintf.h>
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
|
#elif defined(__GNUC__) || defined(__clang__)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RT_DLLEXPORT int rtSPrint(char *dest, size_t n, const char *fmt, ...)
|
RT_DLLEXPORT int rtSPrint(char *dest, size_t n, const char *fmt, ...) {
|
||||||
{
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
#if ENABLE_STB_SPRINTF
|
#if ENABLE_STB_SPRINTF
|
||||||
@ -34,8 +45,7 @@ RT_DLLEXPORT int rtSPrint(char *dest, size_t n, const char *fmt, ...)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
RT_DLLEXPORT int rtVSPrint(char *dest, size_t n, const char *fmt, va_list ap)
|
RT_DLLEXPORT int rtVSPrint(char *dest, size_t n, const char *fmt, va_list ap) {
|
||||||
{
|
|
||||||
#if ENABLE_STB_SPRINTF
|
#if ENABLE_STB_SPRINTF
|
||||||
return stbsp_vsnprintf(dest, (int)n, fmt, ap);
|
return stbsp_vsnprintf(dest, (int)n, fmt, ap);
|
||||||
#else
|
#else
|
||||||
@ -44,4 +54,4 @@ RT_DLLEXPORT int rtVSPrint(char *dest, size_t n, const char *fmt, va_list ap)
|
|||||||
dest[n - 1] = '\0';
|
dest[n - 1] = '\0';
|
||||||
return r;
|
return r;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
|
|
||||||
#include <uchar.h>
|
#include <uchar.h>
|
||||||
|
@ -68,7 +68,8 @@ RT_DLLEXPORT void rtWaitOnConditionVar(rt_condition_var *var) {
|
|||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
struct rt_condition_var_s {
|
struct rt_condition_var_s {
|
||||||
CRITICAL_SECTION critical_section;
|
CRITICAL_SECTION critical_section;
|
||||||
CONDITION_VARIABLE cond;
|
CONDITION_VARIABLE cond;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
struct rt_mutex_s {
|
struct rt_mutex_s {
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
@ -92,7 +92,7 @@ RT_DLLEXPORT bool rtUnlockMutex(rt_mutex *mutex) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mutex->owner = 0;
|
mutex->owner = 0;
|
||||||
bool result = ReleaseMutex(mutex->handle) != 0;
|
bool result = ReleaseMutex(mutex->handle) != 0;
|
||||||
if (!result)
|
if (!result)
|
||||||
mutex->owner = caller;
|
mutex->owner = caller;
|
||||||
return result;
|
return result;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
struct rt_thread_s {
|
struct rt_thread_s {
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
@ -83,9 +83,11 @@ RT_DLLEXPORT rt_thread *rtSpawnThread(rt_thread_entry_fn *entry, void *param, co
|
|||||||
thrd = NULL;
|
thrd = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef RT_CROSS_LINUX_WINDOWS
|
||||||
WCHAR wname[64];
|
WCHAR wname[64];
|
||||||
if (thrd && name && rtUTF8ToWStr(name, wname, sizeof(wname)) == RT_SUCCESS)
|
if (thrd && name && rtUTF8ToWStr(name, wname, sizeof(wname)) == RT_SUCCESS)
|
||||||
SetThreadDescription(thrd->handle, wname);
|
SetThreadDescription(thrd->handle, wname);
|
||||||
|
#endif
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
rtReportError("core", "Ran out of thread objects");
|
rtReportError("core", "Ran out of thread objects");
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
static uint64_t _QPC_freq = 0u;
|
static uint64_t _QPC_freq = 0u;
|
||||||
|
|
||||||
@ -11,11 +11,12 @@ rt_result InitTiming(void) {
|
|||||||
if (!QueryPerformanceFrequency(&qpc_freq)) {
|
if (!QueryPerformanceFrequency(&qpc_freq)) {
|
||||||
return RT_UNKNOWN_ERROR;
|
return RT_UNKNOWN_ERROR;
|
||||||
}
|
}
|
||||||
_QPC_freq = (uint64_t)qpc_freq.QuadPart;
|
_QPC_freq = (uint64_t)qpc_freq.QuadPart;
|
||||||
double resolution = 1e6 * 1.0 / (double)_QPC_freq;
|
double resolution = 1e6 * 1.0 / (double)_QPC_freq;
|
||||||
rtLog("TIMING",
|
rtLog("TIMING",
|
||||||
"QPC Frequency: %llu ticks per second Resolution: %.2lf us",
|
"QPC Frequency: %llu ticks per second Resolution: %.2lf us",
|
||||||
_QPC_freq, resolution);
|
_QPC_freq,
|
||||||
|
resolution);
|
||||||
|
|
||||||
return RT_SUCCESS;
|
return RT_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -23,7 +24,7 @@ rt_result InitTiming(void) {
|
|||||||
RT_DLLEXPORT rt_timestamp rtTimeNow(void) {
|
RT_DLLEXPORT rt_timestamp rtTimeNow(void) {
|
||||||
LARGE_INTEGER qpc;
|
LARGE_INTEGER qpc;
|
||||||
QueryPerformanceCounter(&qpc);
|
QueryPerformanceCounter(&qpc);
|
||||||
return (rt_timestamp){.ticks = qpc.QuadPart, .ticks_per_second = _QPC_freq };
|
return (rt_timestamp){.ticks = qpc.QuadPart, .ticks_per_second = _QPC_freq};
|
||||||
}
|
}
|
||||||
|
|
||||||
RT_DLLEXPORT rt_time_delta rtTimeBetween(rt_timestamp a, rt_timestamp b) {
|
RT_DLLEXPORT rt_time_delta rtTimeBetween(rt_timestamp a, rt_timestamp b) {
|
||||||
@ -33,4 +34,4 @@ RT_DLLEXPORT rt_time_delta rtTimeBetween(rt_timestamp a, rt_timestamp b) {
|
|||||||
return b_secs - a_secs;
|
return b_secs - a_secs;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
test_link_libs = [runtime_lib]
|
test_link_libs = [runtime_lib]
|
||||||
if get_option('default_library') == 'static'
|
|
||||||
test_link_libs += null_renderer_lib
|
|
||||||
endif
|
|
||||||
|
|
||||||
rttest_exe = executable('rttest',
|
rttest_exe = executable('rttest',
|
||||||
'rttest.c',
|
'rttest.c',
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "runtime/config.h"
|
#include "runtime/config.h"
|
||||||
@ -5,12 +6,6 @@
|
|||||||
#include "runtime/mem_arena.h"
|
#include "runtime/mem_arena.h"
|
||||||
#include "runtime/runtime.h"
|
#include "runtime/runtime.h"
|
||||||
|
|
||||||
#include "gfx/gfx.h"
|
|
||||||
#include "gfx/render_list.h"
|
|
||||||
#include "gfx/renderer_api.h"
|
|
||||||
|
|
||||||
extern rt_cvar rt_Renderer;
|
|
||||||
|
|
||||||
/* Check basic relative pointer behaviour */
|
/* Check basic relative pointer behaviour */
|
||||||
static rt_result RelPtrTest(void) {
|
static rt_result RelPtrTest(void) {
|
||||||
char buf[sizeof(rt_relptr) + sizeof(unsigned int)];
|
char buf[sizeof(rt_relptr) + sizeof(unsigned int)];
|
||||||
@ -46,6 +41,7 @@ static rt_result NegRelPtrTest(void) {
|
|||||||
return RT_SUCCESS;
|
return RT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
static rt_result SetupRenderListFixture(void) {
|
static rt_result SetupRenderListFixture(void) {
|
||||||
rt_result res = rtInitRuntime();
|
rt_result res = rtInitRuntime();
|
||||||
if (res != RT_SUCCESS)
|
if (res != RT_SUCCESS)
|
||||||
@ -120,6 +116,7 @@ static rt_result PushLongRenderList(void) {
|
|||||||
}
|
}
|
||||||
return RT_SUCCESS;
|
return RT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static rt_result HashTableBasics(void) {
|
static rt_result HashTableBasics(void) {
|
||||||
{
|
{
|
||||||
@ -140,14 +137,14 @@ static rt_result HashTableBasics(void) {
|
|||||||
if (!arena_res.ok)
|
if (!arena_res.ok)
|
||||||
return RT_OUT_OF_MEMORY;
|
return RT_OUT_OF_MEMORY;
|
||||||
rt_arena arena = arena_res.arena;
|
rt_arena arena = arena_res.arena;
|
||||||
void *mem = rtArenaPush(&arena, RT_HASH_TABLE_MEMORY_REQUIRED(64));
|
void *mem = rtArenaPush(&arena, RT_HASH_TABLE_MEMORY_REQUIRED(64));
|
||||||
if (!mem)
|
if (!mem)
|
||||||
return RT_OUT_OF_MEMORY;
|
return RT_OUT_OF_MEMORY;
|
||||||
rt_hashtable ht = rtCreateHashtable(64, mem, rtHashtableGrowMemoryFromArena, &arena);
|
rt_hashtable ht = rtCreateHashtable(64, mem, rtHashtableGrowMemoryFromArena, &arena);
|
||||||
for (uint64_t i = 0; i < 64; ++i) {
|
for (uint64_t i = 0; i < 64; ++i) {
|
||||||
if (rtHashtableInsert(&ht, 256+i, i) != RT_SUCCESS)
|
if (rtHashtableInsert(&ht, 256 + i, i) != RT_SUCCESS)
|
||||||
return RT_UNKNOWN_ERROR;
|
return RT_UNKNOWN_ERROR;
|
||||||
uint64_t found = rtHashtableLookup(&ht, 256+i, UINT64_MAX);
|
uint64_t found = rtHashtableLookup(&ht, 256 + i, UINT64_MAX);
|
||||||
if (found != i)
|
if (found != i)
|
||||||
return RT_INVALID_VALUE;
|
return RT_INVALID_VALUE;
|
||||||
}
|
}
|
||||||
@ -188,8 +185,8 @@ typedef struct {
|
|||||||
/* X-Macro to create named fixtures */
|
/* X-Macro to create named fixtures */
|
||||||
|
|
||||||
/* Add more fixtures here*/
|
/* Add more fixtures here*/
|
||||||
#define TEST_FIXTURE_LIST \
|
#define TEST_FIXTURE_LIST
|
||||||
TEST_FIXTURE(render_list_fixture, SetupRenderListFixture, TeardownRenderListFixture)
|
// TEST_FIXTURE(render_list_fixture, SetupRenderListFixture, TeardownRenderListFixture)
|
||||||
|
|
||||||
#define TEST_FIXTURE(n, setup_fn, teardown_fn) \
|
#define TEST_FIXTURE(n, setup_fn, teardown_fn) \
|
||||||
rt_test_fixture n = {.name = #n, \
|
rt_test_fixture n = {.name = #n, \
|
||||||
@ -205,8 +202,8 @@ static rt_test_fixture *_test_fixtures[] = {TEST_FIXTURE_LIST};
|
|||||||
|
|
||||||
static rt_test_case _test_cases[] = {TEST_CASE(RelPtrTest),
|
static rt_test_case _test_cases[] = {TEST_CASE(RelPtrTest),
|
||||||
TEST_CASE(NegRelPtrTest),
|
TEST_CASE(NegRelPtrTest),
|
||||||
TEST_CASE_FIXTURE(PushRenderList, render_list_fixture),
|
/*TEST_CASE_FIXTURE(PushRenderList, render_list_fixture),
|
||||||
TEST_CASE_FIXTURE(PushLongRenderList, render_list_fixture),
|
TEST_CASE_FIXTURE(PushLongRenderList, render_list_fixture),*/
|
||||||
TEST_CASE(HashTableBasics)};
|
TEST_CASE(HashTableBasics)};
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -241,8 +238,10 @@ int main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Teardown fixtures */
|
/* Teardown fixtures.
|
||||||
for (size_t i = 0; i < RT_ARRAY_COUNT(_test_fixtures); ++i) {
|
* The +1 is necessary to avoid comparing i=0 < 0, which causes a compile
|
||||||
|
* error */
|
||||||
|
for (size_t i = 0; (i + 1) < (RT_ARRAY_COUNT(_test_fixtures) + 1); ++i) {
|
||||||
if (_test_fixtures[i]->is_initialized) {
|
if (_test_fixtures[i]->is_initialized) {
|
||||||
printf("[TEARDOWN %s] ... ", _test_fixtures[i]->name);
|
printf("[TEARDOWN %s] ... ", _test_fixtures[i]->name);
|
||||||
_test_fixtures[i]->teardown();
|
_test_fixtures[i]->teardown();
|
||||||
|
Loading…
Reference in New Issue
Block a user