summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/src/renderer_d3d12.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/src/renderer_d3d12.cpp')
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.cpp37
1 files changed, 22 insertions, 15 deletions
diff --git a/3rdparty/bgfx/src/renderer_d3d12.cpp b/3rdparty/bgfx/src/renderer_d3d12.cpp
index 6dec7b34249..ebb072f785c 100644
--- a/3rdparty/bgfx/src/renderer_d3d12.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d12.cpp
@@ -1508,17 +1508,26 @@ namespace bgfx { namespace d3d12
HRESULT hr = S_OK;
uint32_t syncInterval = !!(m_resolution.reset & BGFX_RESET_VSYNC);
- uint32_t flags = 0 == syncInterval ? DXGI_PRESENT_RESTART : 0;
+ uint32_t presentFlags = 0;
+ if (syncInterval)
+ {
+ presentFlags |= DXGI_PRESENT_RESTART;
+ }
+ else if (m_dxgi.tearingSupported() )
+ {
+ presentFlags |= DXGI_PRESENT_ALLOW_TEARING;
+ }
+
for (uint32_t ii = 1, num = m_numWindows; ii < num && SUCCEEDED(hr); ++ii)
{
FrameBufferD3D12& frameBuffer = m_frameBuffers[m_windows[ii].idx];
- hr = frameBuffer.present(syncInterval, flags);
+ hr = frameBuffer.present(syncInterval, presentFlags);
}
if (SUCCEEDED(hr)
&& NULL != m_swapChain)
{
- hr = m_swapChain->Present(syncInterval, flags);
+ hr = m_swapChain->Present(syncInterval, presentFlags);
}
int64_t now = bx::getHPCounter();
@@ -3173,14 +3182,6 @@ namespace bgfx { namespace d3d12
data = (const char*)m_uniforms[handle.idx];
}
-#define CASE_IMPLEMENT_UNIFORM(_uniform, _dxsuffix, _type) \
- case UniformType::_uniform: \
- case UniformType::_uniform|kUniformFragmentBit: \
- { \
- setShaderUniform(uint8_t(type), loc, data, num); \
- } \
- break;
-
switch ( (uint32_t)type)
{
case UniformType::Mat3:
@@ -3207,9 +3208,16 @@ namespace bgfx { namespace d3d12
}
break;
- CASE_IMPLEMENT_UNIFORM(Sampler, I, int);
- CASE_IMPLEMENT_UNIFORM(Vec4, F, float);
- CASE_IMPLEMENT_UNIFORM(Mat4, F, float);
+ case UniformType::Sampler:
+ case UniformType::Sampler | kUniformFragmentBit:
+ case UniformType::Vec4:
+ case UniformType::Vec4 | kUniformFragmentBit:
+ case UniformType::Mat4:
+ case UniformType::Mat4 | kUniformFragmentBit:
+ {
+ setShaderUniform(uint8_t(type), loc, data, num);
+ }
+ break;
case UniformType::End:
break;
@@ -3218,7 +3226,6 @@ namespace bgfx { namespace d3d12
BX_TRACE("%4d: INVALID 0x%08x, t %d, l %d, n %d, c %d", _uniformBuffer.getPos(), opcode, type, loc, num, copy);
break;
}
-#undef CASE_IMPLEMENT_UNIFORM
}
}