Added ability to specify api thread wait timeout. Fixed HLSL compiler.

This commit is contained in:
Branimir Karadžić 2016-10-13 15:01:27 -07:00
parent f67b9d9892
commit 599992c8f1
7 changed files with 54 additions and 35 deletions

View File

@ -2,5 +2,3 @@
*.so
*.pdb
imgui*
shaders/pssl/*
shaders/spirv/*

View File

@ -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

View File

@ -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;

View File

@ -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()

View File

@ -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); \

View File

@ -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

View File

@ -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);
}
}