Added ability to specify api thread wait timeout. Fixed HLSL compiler.
This commit is contained in:
parent
f67b9d9892
commit
599992c8f1
2
examples/runtime/.gitignore
vendored
2
examples/runtime/.gitignore
vendored
@ -2,5 +2,3 @@
|
||||
*.so
|
||||
*.pdb
|
||||
imgui*
|
||||
shaders/pssl/*
|
||||
shaders/spirv/*
|
||||
|
@ -114,16 +114,24 @@ project "shaderc"
|
||||
path.join(GLSL_OPTIMIZER, "src/glsl/builtin_stubs.cpp"),
|
||||
}
|
||||
|
||||
overridefiles(BGFX_DIR, path.join(BGFX_DIR, "../bgfx-ext"), {
|
||||
path.join(BGFX_DIR, "tools/shaderc/shaderc_pssl.cpp"),
|
||||
})
|
||||
|
||||
if filesexist(BGFX_DIR, path.join(BGFX_DIR, "../bgfx-ext"), {
|
||||
path.join(BGFX_DIR, "scripts/shaderc.lua"), }) then
|
||||
|
||||
removefiles {
|
||||
path.join(BGFX_DIR, "tools/shaderc/shaderc_spirv.cpp"),
|
||||
}
|
||||
if filesexist(BGFX_DIR, path.join(BGFX_DIR, "../bgfx-ext"), {
|
||||
path.join(BGFX_DIR, "tools/shaderc/shaderc_pssl.cpp"), }) then
|
||||
|
||||
removefiles {
|
||||
path.join(BGFX_DIR, "tools/shaderc/shaderc_pssl.cpp"),
|
||||
}
|
||||
end
|
||||
|
||||
if filesexist(BGFX_DIR, path.join(BGFX_DIR, "../bgfx-ext"), {
|
||||
path.join(BGFX_DIR, "tools/shaderc/shaderc_spirv.cpp"), }) then
|
||||
|
||||
removefiles {
|
||||
path.join(BGFX_DIR, "tools/shaderc/shaderc_spirv.cpp"),
|
||||
}
|
||||
end
|
||||
|
||||
dofile(path.join(BGFX_DIR, "../bgfx-ext/scripts/shaderc.lua") )
|
||||
end
|
||||
|
29
src/bgfx.cpp
29
src/bgfx.cpp
@ -980,7 +980,7 @@ namespace bgfx
|
||||
if (s_ctx->renderFrame() )
|
||||
{
|
||||
Context* ctx = s_ctx;
|
||||
ctx->gameSemWait();
|
||||
ctx->apiSemWait();
|
||||
s_ctx = NULL;
|
||||
ctx->renderSemPost();
|
||||
return RenderFrame::Exiting;
|
||||
@ -1568,22 +1568,23 @@ namespace bgfx
|
||||
m_renderCtx->flip(m_render->m_hmd);
|
||||
}
|
||||
|
||||
gameSemWait();
|
||||
|
||||
rendererExecCommands(m_render->m_cmdPre);
|
||||
if (m_rendererInitialized)
|
||||
if (apiSemWait(BGFX_CONFIG_API_SEMAPHORE_TIMEOUT) )
|
||||
{
|
||||
BGFX_PROFILER_SCOPE(bgfx, render_submit, 0xff2040ff);
|
||||
m_renderCtx->submit(m_render, m_clearQuad, m_textVideoMemBlitter);
|
||||
}
|
||||
rendererExecCommands(m_render->m_cmdPost);
|
||||
rendererExecCommands(m_render->m_cmdPre);
|
||||
if (m_rendererInitialized)
|
||||
{
|
||||
BGFX_PROFILER_SCOPE(bgfx, render_submit, 0xff2040ff);
|
||||
m_renderCtx->submit(m_render, m_clearQuad, m_textVideoMemBlitter);
|
||||
}
|
||||
rendererExecCommands(m_render->m_cmdPost);
|
||||
|
||||
renderSemPost();
|
||||
renderSemPost();
|
||||
|
||||
if (m_rendererInitialized
|
||||
&& m_flipAfterRender)
|
||||
{
|
||||
m_renderCtx->flip(m_render->m_hmd);
|
||||
if (m_rendererInitialized
|
||||
&& m_flipAfterRender)
|
||||
{
|
||||
m_renderCtx->flip(m_render->m_hmd);
|
||||
}
|
||||
}
|
||||
|
||||
return m_exit;
|
||||
|
26
src/bgfx_p.h
26
src/bgfx_p.h
@ -3976,21 +3976,28 @@ namespace bgfx
|
||||
{
|
||||
if (!m_singleThreaded)
|
||||
{
|
||||
m_gameSem.post();
|
||||
m_apiSem.post();
|
||||
}
|
||||
}
|
||||
|
||||
void gameSemWait()
|
||||
bool apiSemWait(int32_t _msecs = -1)
|
||||
{
|
||||
if (!m_singleThreaded)
|
||||
if (m_singleThreaded)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
BGFX_PROFILER_SCOPE(bgfx, main_thread_wait, 0xff2040ff);
|
||||
int64_t start = bx::getHPCounter();
|
||||
bool ok = m_apiSem.wait(_msecs);
|
||||
if (ok)
|
||||
{
|
||||
BGFX_PROFILER_SCOPE(bgfx, main_thread_wait, 0xff2040ff);
|
||||
int64_t start = bx::getHPCounter();
|
||||
bool ok = m_gameSem.wait();
|
||||
BX_CHECK(ok, "Semaphore wait failed."); BX_UNUSED(ok);
|
||||
m_render->m_waitSubmit = bx::getHPCounter()-start;
|
||||
m_submit->m_perfStats.waitSubmit = m_submit->m_waitSubmit;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void renderSemPost()
|
||||
@ -4015,15 +4022,16 @@ namespace bgfx
|
||||
}
|
||||
|
||||
bx::Semaphore m_renderSem;
|
||||
bx::Semaphore m_gameSem;
|
||||
bx::Semaphore m_apiSem;
|
||||
bx::Thread m_thread;
|
||||
#else
|
||||
void gameSemPost()
|
||||
{
|
||||
}
|
||||
|
||||
void gameSemWait()
|
||||
bool apiSemWait()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void renderSemPost()
|
||||
|
@ -285,7 +285,7 @@ vec4 bgfxTexelFetch(BgfxSampler3D _sampler, ivec3 _coord, int _lod)
|
||||
|
||||
# define SAMPLER3D(_name, _reg) \
|
||||
uniform SamplerState _name ## Sampler : REGISTER(s, _reg); \
|
||||
uniform Texture3D _name ## Texture : REGISTER(t[_reg]); \
|
||||
uniform Texture3D _name ## Texture : REGISTER(t, _reg); \
|
||||
static BgfxSampler3D _name = { _name ## Sampler, _name ## Texture }
|
||||
# define ISAMPLER3D(_name, _reg) \
|
||||
uniform Texture3D<ivec4> _name ## Texture : REGISTER(t, _reg); \
|
||||
|
@ -343,4 +343,8 @@
|
||||
# define BGFX_CONFIG_RENDERDOC_CAPTURE_KEYS { eRENDERDOC_Key_F11 }
|
||||
#endif // BGFX_CONFIG_RENDERDOC_CAPTURE_KEYS
|
||||
|
||||
#ifndef BGFX_CONFIG_API_SEMAPHORE_TIMEOUT
|
||||
# define BGFX_CONFIG_API_SEMAPHORE_TIMEOUT (-1)
|
||||
#endif // BGFX_CONFIG_API_SEMAPHORE_TIMEOUT
|
||||
|
||||
#endif // BGFX_CONFIG_H_HEADER_GUARD
|
||||
|
@ -659,7 +659,7 @@ namespace bgfx { namespace hlsl
|
||||
UniformNameList unusedUniforms;
|
||||
if (!getReflectionDataD3D11(code, profile[0] == 'v', uniforms, numAttrs, attrs, size, unusedUniforms) )
|
||||
{
|
||||
fprintf(stderr, "Unable to get D3D11 reflection data.\n");
|
||||
fprintf(stderr, "Error: Unable to get D3D11 reflection data.\n");
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -699,7 +699,7 @@ namespace bgfx { namespace hlsl
|
||||
}
|
||||
|
||||
// recompile with the unused uniforms converted to statics
|
||||
return compileHLSLShader(_cmdLine, _version, output.c_str(), _writer);
|
||||
return compile(_cmdLine, _version, output.c_str(), _writer, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user