Skip to content

v0.0.195

Choose a tag to compare

@github-actions github-actions released this 28 Sep 18:10
· 64 commits to main since this release

rePIU v0.0.195

이전 릴리스 v0.0.194 이후의 변경입니다(Tasks 756–760). 소스 디렉터리의 규칙을 정리한 릴리스로, 게임의
동작은 바뀌지 않습니다.
OS에 의존하는 코드는 플랫폼 계층으로, 엔진의 CPU 아키텍처 차이는 실행 모델로
모았습니다. 검증하다 찾은 결함 둘(WSL에서 Linux i386 빌드가 창을 열지 못함, Win32 core probe가 중간에 abort함)을
함께 고쳤습니다.

구조

v0.0.194 v0.0.195
플랫폼 계층 밖의 플랫폼·아키텍처 분기(src, include) 162 102
그 가운데 엔진·런타임·헤더 93 33
엔진에서 아키텍처를 묻는 #if 60여 개 모델·진단 파일의 #error 확인 9개

규칙 (Tasks 757–759)

  • 엔진·런타임·HLE·도구 디렉터리에는 플랫폼·아키텍처 하위 디렉터리를 두지 않습니다.
  • OS에 의존하는 코드는 src/platform/<OS>/[<아키텍처>/]에 두고, 플랫폼 계층은 엔진의 타입을 쓰지 않습니다.
    플랫폼 계층 안에서는 아키텍처에 따라 x86/, x64/로 나눕니다.
  • 엔진의 아키텍처 차이는 실행 모델입니다. direct는 게스트의 바이트를 그대로 실행하고(Win32, Linux i386),
    cache는 번역한 long mode 코드 캐시를 실행하며(Linux x64), none은 게스트를 실행하지 않습니다(웹 빌드).
    공용 코드는 include/repiu/runtime/execution_model.h로 묻고, 모델에 따라 다른 구현은 공용 파일 옆에
    <이름>_direct.cpp, <이름>_cache.cpp로 둡니다.
  • 한 호스트에서만 만든 진단과 probe 전체를 감싼 가드는 디렉터리로 나누지 않습니다.

옮긴 것

  • Linux 플랫폼 계층을 공용·x86/·x64/로 나누고, Linux x64 공개 헤더를
    include/repiu/platform/linux/x64/로 옮겼습니다(Task 757).
  • 플랫폼 계층의 host_thread, host_time, host_error_stream, build_identity와 컴파일러 shim 헤더를 OS별로
    나눴습니다(Task 758 단계 1).
  • MSVC 인라인 어셈블리 thunk 다섯 개와 스택 전환을 엔진에서 src/platform/win32/로 옮겼습니다.
  • 충돌 보고, 폴트 보고의 호스트 고유 정보, WSL 드라이버 선택, 심볼 이름, 추적 덤프, 텔레메트리의 호스트 읽기,
    스레드 강제 종료를 플랫폼 계층의 함수로 떼어 냈습니다.
  • 실행 트램펄린의 x86-64 전용 742줄(반환 resolver, 캐시 진입, 반환 추적)을
    execution_trampoline_cache.cpp로, x86 전용 진입을 execution_trampoline_direct.cpp로 옮겼습니다.

고친 것

WSL에서 Linux i386 빌드가 창을 열지 못하던 것 (Task 760) — v0.0.194의 D3D12 드라이버 선택이 드라이버
파일을 아키텍처와 무관한 목록에서 찾아, i386 프로세스가 x86-64용 드라이버를 보고 GALLIUM_DRIVER=d3d12를
설정했습니다. 이제 프로세스의 아키텍처에 맞는 드라이버가 있을 때만 고릅니다.

Win32 core probe가 중간에 끝나던 것 (Task 758) — dos_console_device probe가 CON: 경로에서
filesystem_error를 던져 core probe가 종료 코드 3으로 끝나고 그 뒤의 probe가 돌지 않았습니다.

그 밖

  • GitHub Pages 프로젝트 사이트(한국어·영어)를 더했습니다(Task 756).

확인한 것

구성 확인
Linux x64 Release·Debug, Linux i386 빌드. core probe 결과 줄이 디렉터리 정리 전과 같음
Win32 x86 Debug 빌드. core probe, aot probe 18개 모드, glide issue probe의 결과가 디렉터리 정리 전과 같음
실행(짧게) Linux x64 pumpit8·pumpitpc·pumpit1, Linux i386 pumpit1, Win32 pumpit8: 폴트 없음

알려진 것

  • 웹 빌드는 확인하지 못했습니다. 이 릴리스를 만든 머신에 빌드 도구가 없습니다.
  • 엔진에 Win32 코드가 남아 있습니다. 실행 트램펄린의 Win32 스레드 프로시저(SEH), 예외 진입, 종료 복구의
    vectored handler입니다. 옮기려면 Win32가 폴트를 받는 방식을 바꿔야 하므로 별도 작업으로 두었습니다.
  • 도구와 probe의 플랫폼 분기 69개는 그대로입니다. 약 30개는 probe 전체가 Win32에서만 도는 가드입니다.
  • 호출하는 곳이 없는 함수 둘(PushX87Float, CaptureSuspendedThreadSnapshot)을 남겨 두었습니다.
  • v0.0.194의 "알려진 것"(WSL에서 음악이 느려지는 현상 등)은 그대로입니다.

rePIU v0.0.195

Changes since the previous release, v0.0.194 (Tasks 756–760). A release that puts the source
directories' rule in order; the games behave as they did.
Code that depends on the OS is gathered in the
platform layer, and the engine's difference by CPU architecture in an execution model. Two defects found
while verifying are fixed with it (the Linux i386 build could not open its window on WSL, and the Win32
core probe aborted part way).

Structure

v0.0.194 v0.0.195
Platform and architecture branches outside the platform layer (src, include) 162 102
Of those, in the engine, the runtime and headers 93 33
#if asking about the architecture in the engine over 60 9 #error checks of model and diagnostic files

The rule (Tasks 757–759)

  • The engine, runtime, HLE and tool directories have no platform or architecture subdirectories.
  • Code that depends on the OS is in src/platform/<OS>/[<arch>/], and the platform layer uses none of the
    engine's types. Inside the platform layer, code splits by architecture into x86/ and x64/.
  • The engine's difference by architecture is the execution model. direct runs the guest's bytes as
    they are (Win32, Linux i386), cache runs the translated long-mode code cache (Linux x64), and none
    runs no guest (the web build). Shared code asks through include/repiu/runtime/execution_model.h, and
    implementations that differ by model sit next to their shared file as <name>_direct.cpp and
    <name>_cache.cpp.
  • A diagnostic built on one host, and a guard around a whole probe, are not turned into directories.

What moved

  • The Linux platform layer is split into shared, x86/ and x64/, and the Linux x64 public headers are
    under include/repiu/platform/linux/x64/ (Task 757).
  • The platform layer's host_thread, host_time, host_error_stream and build_identity, and the
    compiler shim headers, are split by OS (Task 758, phase 1).
  • The five MSVC inline-assembly thunks and the stack switch moved from the engine to
    src/platform/win32/.
  • The crash report, the host's own detail of a fault report, the choice of WSL's driver, symbol names,
    the trace dump, the telemetry's host reads and stopping a thread became functions of the platform layer.
  • The execution trampoline's 742 lines for x86-64 (the return resolver, the entry into the cache, the
    return traces) moved to execution_trampoline_cache.cpp, and its x86 entries to
    execution_trampoline_direct.cpp.

Fixed

The Linux i386 build could not open its window on WSL (Task 760) — v0.0.194's choice of the D3D12
driver looked for the driver file in a list that did not tell architectures apart, so an i386 process
saw the x86-64 driver and set GALLIUM_DRIVER=d3d12. The choice is now made only when the driver of the
process's own architecture exists.

The Win32 core probe ended part way (Task 758) — the dos_console_device probe threw a
filesystem_error on the CON: path, the core probe ended with exit code 3, and no probe after it ran.

Also

  • A GitHub Pages project site, in Korean and English (Task 756).

Checked

Configuration Check
Linux x64 Release and Debug, Linux i386 built; core probe result lines the same as before the directory work
Win32 x86 Debug built; results of the core probe, 18 aot probe modes and the glide issue probe the same as before the directory work
Runs (short) pumpit8, pumpitpc and pumpit1 on Linux x64, pumpit1 on Linux i386, pumpit8 on Win32: no faults

Known

  • The web build was not checked. The machine this release was made on has no tools for it.
  • Win32 code remains in the engine: the Win32 thread procedure (SEH) of the execution trampoline, the
    exception entry and the shutdown recovery's vectored handlers. Moving them means changing how Win32
    receives faults, so it is left as a task of its own.
  • The 69 platform branches of the tools and probes are as they were; about 30 are guards around a probe
    that runs on Win32 only.
  • Two functions nothing calls (PushX87Float, CaptureSuspendedThreadSnapshot) were kept.
  • v0.0.194's known items (the music slowing on WSL among them) stand.