Skip to content
This repository has been archived by the owner on Oct 1, 2023. It is now read-only.

Commit

Permalink
Added selection for valid multisample quality level to avoid crashes …
Browse files Browse the repository at this point in the history
…at startup.
  • Loading branch information
guitarfreak committed May 2, 2022
1 parent 0e71179 commit d8a2489
Show file tree
Hide file tree
Showing 17 changed files with 225 additions and 536 deletions.
3 changes: 3 additions & 0 deletions code/animation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ void AnimationPlayer::setAnim(char* name) {
}

void AnimationPlayer::update(float dt) {
if(!animation->frameCount)
return;

this->dt = dt;
time += dt;

Expand Down
4 changes: 3 additions & 1 deletion code/app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ ProfilerTimer* theTimer;
#include "miscMath.cpp"
#include "hotload.cpp"
#include "threadQueue.cpp"
#include "threadQueueMisc.cpp"
#include "platformWin32.cpp"
#include "platformMisc.cpp"
#include "input.cpp"
Expand Down Expand Up @@ -210,6 +211,7 @@ extern "C" APPMAINFUNCTION(appMain) {

setMemory();
clearTMemory();
clearMemoryArray(theMemory->tMemoryThreadSafe);

// @Init.
if(init) {
Expand All @@ -226,7 +228,7 @@ extern "C" APPMAINFUNCTION(appMain) {
audioInit(&ad->audioState, ws->frameRate);
st.add("audioInit");

graphicsInit(gs, ws, sd, &st);
graphicsInit(gs, ws, sd, &st, &ad->gSettings);
// st.add("graphicsInit");

watchFoldersInit(sd, gs);
Expand Down
40 changes: 35 additions & 5 deletions code/appInit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ void initMemory(AppMemory* appMemory) {

MemoryArray* tMemory = &appMemory->memoryArrays[appMemory->memoryArrayCount++];
initMemoryArray(tMemory, megaBytes(30), 0);

MemoryArray* tMemoryThreadSafe = &appMemory->memoryArrays[appMemory->memoryArrayCount++];
initMemoryArray(tMemoryThreadSafe, megaBytes(1), 0);
}

void setupMemoryAndGlobals(AppMemory* appMemory, ThreadQueue* threadQueue, MemoryBlock* gMemory, AppData** appData, DebugState** debugState, bool init) {
Expand All @@ -36,6 +39,7 @@ void setupMemoryAndGlobals(AppMemory* appMemory, ThreadQueue* threadQueue, Memor
{
gMemory->pMemory = &appMemory->extendibleMemoryArrays[0];
gMemory->tMemory = &appMemory->memoryArrays[0];
gMemory->tMemoryThreadSafe = &appMemory->memoryArrays[2];
gMemory->dMemory = &appMemory->extendibleBucketMemories[0];

gMemory->pMemoryDebug = &appMemory->extendibleMemoryArrays[1];
Expand Down Expand Up @@ -98,6 +102,7 @@ void systemInit(AppData* ad, DebugState* ds, SystemData* sd, WindowSettings* ws,

ad->gSettings.fieldOfView = 60;
ad->gSettings.msaaSamples = 4;
ad->gSettings.msaaQuality = 1;
ad->gSettings.resolutionScale = 1;
ad->gSettings.nearPlane = 0.1f;
ad->gSettings.farPlane = 50;
Expand All @@ -107,7 +112,7 @@ void systemInit(AppData* ad, DebugState* ds, SystemData* sd, WindowSettings* ws,
}

void addFrameBuffers();
void graphicsInit(GraphicsState* gs, WindowSettings* ws, SystemData *sd, SectionTimer* st) {
void graphicsInit(GraphicsState* gs, WindowSettings* ws, SystemData *sd, SectionTimer* st, GraphicsSettings* gSettings) {

*gs = {};

Expand Down Expand Up @@ -419,6 +424,27 @@ void graphicsInit(GraphicsState* gs, WindowSettings* ws, SystemData *sd, Section
gs->frameBuffers = getPArray(FrameBuffer, gs->frameBufferCountMax);

addFrameBuffers();

{
gSettings->msaaSamples = 0;
gSettings->msaaQuality = 0;

// Hopefully checking one format is enough?
auto format = DXGI_FORMAT_R16G16B16A16_FLOAT;
// int possibleSampleCounts[] = {0, 1, 2, 4, 8, 16};
int possibleSampleCounts[] = {0, 1, 2, 4, 8};
// int possibleSampleCounts[] = {0, 1, 2, 4};
for(int i = arrayCount(possibleSampleCounts)-1; i >= 0; i--) {
int sampleCount = possibleSampleCounts[i];
uint numQualityLevels;
HRESULT result = theGState->d3dDevice->CheckMultisampleQualityLevels(format, sampleCount, &numQualityLevels);
if(result == S_OK && numQualityLevels) {
gSettings->msaaSamples = sampleCount;
gSettings->msaaQuality = numQualityLevels - 1;
break;
}
}
}
}

st->add("framebuffers");
Expand Down Expand Up @@ -518,7 +544,8 @@ void appInit(AppData* ad, SystemData* sd, WindowSettings* ws) {

bool freeCam;
#if SHIPPING_MODE
freeCam = false;
// freeCam = false;
freeCam = true;
#else
freeCam = true;
#endif
Expand All @@ -532,8 +559,10 @@ void appInit(AppData* ad, SystemData* sd, WindowSettings* ws) {

#if SHIPPING_MODE
ad->mouseEvents.captureMouse = false;
ad->mouseEvents.debugMouse = false;
ad->mouseEvents.debugMouseFixed = true;
// ad->mouseEvents.debugMouse = false;
// ad->mouseEvents.debugMouseFixed = true;
ad->mouseEvents.debugMouse = true;
ad->mouseEvents.debugMouseFixed = false;
#else
ad->mouseEvents.captureMouse = false;
ad->mouseEvents.debugMouse = true;
Expand Down Expand Up @@ -583,7 +612,8 @@ void appInit(AppData* ad, SystemData* sd, WindowSettings* ws) {
if(!fileExists(Game_Settings_File)) {
GameSettings settings = {};

settings.fullscreen = true;
// settings.fullscreen = true;
settings.fullscreen = false;
settings.vsync = true;
settings.frameRateCap = ad->maxFrameRate;
settings.resolutionScale = 1.0f;
Expand Down
3 changes: 2 additions & 1 deletion code/appMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ void gameLoop(AppData* ad, DebugState* ds, WindowSettings* ws, bool showUI, bool
float dt = ds->dt;

Entity* e = ad->camera;
if(ad->mouseEvents.fpsMode) entityMouseLook(e, input, ad->mouseSensitivity);
if(ad->mouseEvents.fpsMode)
entityMouseLook(e, input, ad->mouseSensitivity);

e->acc = vec3(0,0,0);
float speed = !input->keysDown[KEYCODE_T] ? 25 : 250;
Expand Down
5 changes: 5 additions & 0 deletions code/appMemory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ struct MemoryBlock {

ExtendibleMemoryArray* pMemory;
MemoryArray* tMemory;
MemoryArray* tMemoryThreadSafe;
ExtendibleBucketMemory* dMemory;

ExtendibleMemoryArray* pMemoryDebug;
Expand Down Expand Up @@ -57,6 +58,10 @@ inline void* getTMemory(int size) {
return getMemoryArray(size, theMemory->currentTMemory);
}

inline void* getTMemoryInterlocked(int size) {
return getMemoryArrayInterlocked(size, theMemory->tMemoryThreadSafe);
}

// Empty function for containers.
inline void freeTMemory(void* data) {}

Expand Down
49 changes: 27 additions & 22 deletions code/appRendering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ void addFrameBuffers() {
DXGI_FORMAT dFormat = DXGI_FORMAT_D24_UNORM_S8_UINT;
DXGI_FORMAT fFormat = DXGI_FORMAT_R16G16B16A16_FLOAT;

DXGI_FORMAT typelessFormat = DXGI_FORMAT_R24G8_TYPELESS;

dxAddFrameBuffer("Sky", fFormat, true, true, false);
dxAddFrameBuffer("3dMsaa", fFormat, true, false, false);
dxAddFrameBuffer("3dNoMsaa", fFormat, true, true, false);
Expand All @@ -15,10 +17,10 @@ void addFrameBuffers() {
dxAddFrameBuffer("DebugMsaa", format, true, false, false);
dxAddFrameBuffer("DebugNoMsaa", format, false, true, false);
// dxAddFrameBuffer("ds3d", dFormat, false, false, true );
dxAddFrameBuffer("ds3d", DXGI_FORMAT_R24G8_TYPELESS, false, true, true );
dxAddFrameBuffer("ds3d", typelessFormat, false, true, true );
dxGetFrameBuffer("ds3d")->makeDepthView = true;

dxAddFrameBuffer("ds3dTemp", DXGI_FORMAT_R24G8_TYPELESS, false, true, true );
dxAddFrameBuffer("ds3dTemp", typelessFormat, false, true, true );
dxGetFrameBuffer("ds3dTemp")->makeDepthView = true;

dxAddFrameBuffer("ds", dFormat, false, false, true );
Expand All @@ -38,26 +40,28 @@ void addFrameBuffers() {
dxAddFrameBuffer("Test", format, false, true, false);
}

void resizeFrameBuffers(Vec2i res3d, Vec2i res2d, int msaaSamples) {
int m = msaaSamples;
dxSetFrameBuffer("Sky", res3d, 1);
dxSetFrameBuffer("3dMsaa", res3d, m);
dxSetFrameBuffer("3dNoMsaa", res3d, 1);
dxSetFrameBuffer("2dMsaa", res2d, m);
dxSetFrameBuffer("2dNoMsaa", res2d, 1);
dxSetFrameBuffer("2dTemp", res2d, 1);
dxSetFrameBuffer("ds3d", res3d, m);
dxSetFrameBuffer("ds3dTemp", res3d, m);
dxSetFrameBuffer("ds", res2d, m);
void resizeFrameBuffers(Vec2i res3d, Vec2i res2d, int msaaSamples, int msaaQuality) {
int m = msaaSamples;
int mq = msaaQuality;

dxSetFrameBuffer("Sky", res3d, 1, 0);
dxSetFrameBuffer("3dMsaa", res3d, m, mq);
dxSetFrameBuffer("3dNoMsaa", res3d, 1, 0);
dxSetFrameBuffer("2dMsaa", res2d, m, mq);
dxSetFrameBuffer("2dNoMsaa", res2d, 1, 0);
dxSetFrameBuffer("2dTemp", res2d, 1, 0);
dxSetFrameBuffer("ds3d", res3d, m, mq);
dxSetFrameBuffer("ds3dTemp", res3d, m, mq);
dxSetFrameBuffer("ds", res2d, m, mq);

dxSetFrameBuffer("Shadow", vec2i(theGState->shadowMapSize), 1);
dxSetFrameBuffer("Shadow", vec2i(theGState->shadowMapSize), 1, 0);

for(int i = 0; i < 5; i++) {
dxSetFrameBuffer(fString("Bloom_%i", i), res3d/(pow(2.0f,i)), 1);
dxSetFrameBuffer(fString("Bloom2_%i", i), res3d/(pow(2.0f,i)), 1);
dxSetFrameBuffer(fString("Bloom_%i", i), res3d/(pow(2.0f,i)), 1, 0);
dxSetFrameBuffer(fString("Bloom2_%i", i), res3d/(pow(2.0f,i)), 1, 0);
}

dxSetFrameBuffer("BloomHelper", res3d, 1);
dxSetFrameBuffer("BloomHelper", res3d, 1, 0);
}

void clearFrameBuffers() {
Expand Down Expand Up @@ -119,10 +123,10 @@ void updateFrameBuffersAndScreenRes(GraphicsSettings* gSettings, float aspectRat
backBufferResource->Release();
}

resizeFrameBuffers(res3d, res2d, gSettings->msaaSamples);
resizeFrameBuffers(res3d, res2d, gSettings->msaaSamples, gSettings->msaaQuality);
if(init) {
dxSetFrameBuffer("DebugMsaa", res2d, gSettings->msaaSamples);
dxSetFrameBuffer("DebugNoMsaa", res2d, 1);
dxSetFrameBuffer("DebugMsaa", res2d, gSettings->msaaSamples, gSettings->msaaQuality);
dxSetFrameBuffer("DebugNoMsaa", res2d, 1, 0);
}
}

Expand All @@ -131,8 +135,9 @@ void updateDebugFrameBuffer(bool* update) {

Vec2i res2d = theGState->screenRes;
int m = theGState->gSettings->msaaSamples;
dxSetFrameBuffer("DebugMsaa", res2d, m);
dxSetFrameBuffer("DebugNoMsaa", res2d, 1);
int mq = theGState->gSettings->msaaQuality;
dxSetFrameBuffer("DebugMsaa", res2d, m, mq);
dxSetFrameBuffer("DebugNoMsaa", res2d, 1, 0);
}

void setupGraphics(GraphicsState* gs, GraphicsSettings gSettings, Camera activeCam, bool init, bool reload) {
Expand Down
8 changes: 4 additions & 4 deletions code/buildWin.bat
Original file line number Diff line number Diff line change
Expand Up @@ -52,19 +52,19 @@ rem -DEFAULTLIB:Shell32.lib
set LINKER_LIBS= -DEFAULTLIB:user32.lib -DEFAULTLIB:Gdi32.lib -DEFAULTLIB:Shlwapi.lib -DEFAULTLIB:Winmm.lib -DEFAULTLIB:Ole32.lib -DEFAULTLIB:D3D11.lib -DEFAULTLIB:d3dcompiler.lib

set INC=%INC% -I"%VS_PATH%\VC\include"
set INC=%INC% -I"%WIN_SDK_PATH%\Include\10.0.17134.0\um"
set INC=%INC% -I"%WIN_SDK_PATH%\Include\10.0.17134.0\shared"
set INC=%INC% -I"%WIN_SDK_PATH%\Include\10.0.19041.0\um"
set INC=%INC% -I"%WIN_SDK_PATH%\Include\10.0.19041.0\shared"

if "%~1"=="-x86" goto compilerSelectionX86
set PATH=%VS_PATH%\VC\bin\amd64;%PATH%
set LINC=%LINC% -LIBPATH:"%VS_PATH%\VC\lib\amd64"
set LINC=%LINC% -LIBPATH:"%WIN_SDK_PATH%\Lib\10.0.17134.0\um\x64"
set LINC=%LINC% -LIBPATH:"%WIN_SDK_PATH%\Lib\10.0.19041.0\um\x64"
goto compilerSelectionEnd

:compilerSelectionX86
set PATH=%VS_PATH%\VC\bin;%PATH%
set LINC=%LINC% -LIBPATH:"%VS_PATH%\VC\lib"
set LINC=%LINC% -LIBPATH:"%WIN_SDK_PATH%\Lib\10.0.17134.0\um\x86"
set LINC=%LINC% -LIBPATH:"%WIN_SDK_PATH%\Lib\10.0.19041.0\um\x86"
:compilerSelectionEnd

set INC_EXTRA=%INC_EXTRA% -I"..\libs\freetype 2.9\include"
Expand Down
3 changes: 2 additions & 1 deletion code/generated/metadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,7 @@ MemberInfo FrameBuffer_MemberInfos[] = {
MemberInfo GraphicsSettings_MemberInfos[] = {
{ TYPE_Vec2i, "cur3dBufferRes", offsetof(GraphicsSettings, cur3dBufferRes), 0, {}, {-1}, 0, 0, 0, 0, {}, -1, -1 },
{ TYPE_int, "msaaSamples", offsetof(GraphicsSettings, msaaSamples), 0, {}, {-1}, 0, 0, 0, 0, {}, -1, -1 },
{ TYPE_int, "msaaQuality", offsetof(GraphicsSettings, msaaQuality), 0, {}, {-1}, 0, 0, 0, 0, {}, -1, -1 },
{ TYPE_float, "resolutionScale", offsetof(GraphicsSettings, resolutionScale), 0, {}, {-1}, 0, 0, 0, 0, {}, -1, -1 },
{ TYPE_float, "aspectRatio", offsetof(GraphicsSettings, aspectRatio), 0, {}, {-1}, 0, 0, 0, 0, {}, -1, -1 },
{ TYPE_int, "fieldOfView", offsetof(GraphicsSettings, fieldOfView), 0, {}, {-1}, 0, 0, 0, 0, {}, -1, -1 },
Expand Down Expand Up @@ -720,7 +721,7 @@ StructInfo structInfos[] = {
{ "SystemData", sizeof(SystemData), 7, SystemData_MemberInfos, -1, 0, },
{ "Texture", sizeof(Texture), 9, Texture_MemberInfos, -1, 0, },
{ "FrameBuffer", sizeof(FrameBuffer), 7, FrameBuffer_MemberInfos, -1, 0, },
{ "GraphicsSettings", sizeof(GraphicsSettings), 7, GraphicsSettings_MemberInfos, -1, 0, },
{ "GraphicsSettings", sizeof(GraphicsSettings), 8, GraphicsSettings_MemberInfos, -1, 0, },
{ "GraphicsMatrices", sizeof(GraphicsMatrices), 6, GraphicsMatrices_MemberInfos, -1, 0, },
{ "WalkManifoldSettings", sizeof(WalkManifoldSettings), 16, WalkManifoldSettings_MemberInfos, -1, 0, },
{ "SkySettings", sizeof(SkySettings), 15, SkySettings_MemberInfos, -1, 0, },
Expand Down
Loading

0 comments on commit d8a2489

Please sign in to comment.