summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/src/renderer_d3d12.h
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/src/renderer_d3d12.h')
-rw-r--r--3rdparty/bgfx/src/renderer_d3d12.h80
1 files changed, 50 insertions, 30 deletions
diff --git a/3rdparty/bgfx/src/renderer_d3d12.h b/3rdparty/bgfx/src/renderer_d3d12.h
index 216159f37d4..f578f1a385b 100644
--- a/3rdparty/bgfx/src/renderer_d3d12.h
+++ b/3rdparty/bgfx/src/renderer_d3d12.h
@@ -1,15 +1,17 @@
/*
- * Copyright 2011-2018 Branimir Karadzic. All rights reserved.
- * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
+ * Copyright 2011-2022 Branimir Karadzic. All rights reserved.
+ * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE
*/
#ifndef BGFX_RENDERER_D3D12_H_HEADER_GUARD
#define BGFX_RENDERER_D3D12_H_HEADER_GUARD
-#define USE_D3D12_DYNAMIC_LIB BX_PLATFORM_WINDOWS
+#define USE_D3D12_DYNAMIC_LIB (BX_PLATFORM_WINDOWS || BX_PLATFORM_LINUX)
#include <sal.h>
-#if BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT
+#include <unknwn.h>
+
+#if BX_PLATFORM_LINUX || BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT
# include <d3d12.h>
#else
# if !BGFX_CONFIG_DEBUG
@@ -20,8 +22,14 @@
#if defined(__MINGW32__) // BK - temp workaround for MinGW until I nuke d3dx12 usage.
extern "C++" {
+# if defined(__cpp_constexpr) && __cpp_constexpr >= 200704L \
+ && defined(__cpp_inline_variables) && __cpp_inline_variables >= 201606L
+ __extension__ template<typename Ty>
+ constexpr const GUID& __mingw_uuidof();
+# else
__extension__ template<typename Ty>
const GUID& __mingw_uuidof();
+# endif // __cpp_*
template<>
const GUID& __mingw_uuidof<ID3D12Device>()
@@ -32,19 +40,6 @@ extern "C++" {
}
#endif // defined(__MINGW32__)
-BX_PRAGMA_DIAGNOSTIC_PUSH();
-BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wmissing-field-initializers");
-#if BX_PLATFORM_XBOXONE
-# include <d3dx12_x.h>
-#else
-# include <d3dx12.h>
-#endif // BX_PLATFORM_XBOXONE
-BX_PRAGMA_DIAGNOSTIC_POP();
-
-#ifndef D3D12_TEXTURE_DATA_PITCH_ALIGNMENT
-# define D3D12_TEXTURE_DATA_PITCH_ALIGNMENT 1024
-#endif // D3D12_TEXTURE_DATA_PITCH_ALIGNMENT
-
#include "renderer.h"
#include "renderer_d3d.h"
#include "shader_dxbc.h"
@@ -52,7 +47,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
#include "nvapi.h"
#include "dxgi.h"
-#if BGFX_CONFIG_DEBUG_PIX
+#if BGFX_CONFIG_DEBUG_ANNOTATION && !BX_PLATFORM_LINUX
# if BX_PLATFORM_WINDOWS || BX_PLATFORM_WINRT
typedef struct PIXEventsThreadInfo* (WINAPI* PFN_PIX_GET_THREAD_INFO)();
typedef uint64_t (WINAPI* PFN_PIX_EVENTS_REPLACE_BLOCK)(bool _getEarliestTime);
@@ -80,7 +75,25 @@ extern "C" uint64_t WINAPI bgfx_PIXEventsReplaceBlock(bool _g
# define PIX3_BEGINEVENT(_commandList, _color, _name) BX_UNUSED(_commandList, _color, _name)
# define PIX3_SETMARKER(_commandList, _color, _name) BX_UNUSED(_commandList, _color, _name)
# define PIX3_ENDEVENT(_commandList) BX_UNUSED(_commandList)
-#endif // BGFX_CONFIG_DEBUG_PIX
+#endif // BGFX_CONFIG_DEBUG_ANNOTATION
+
+#define BGFX_D3D12_PROFILER_BEGIN(_view, _abgr) \
+ BX_MACRO_BLOCK_BEGIN \
+ PIX3_BEGINEVENT(m_commandList, _abgr, s_viewName[_view]); \
+ BGFX_PROFILER_BEGIN(s_viewName[view], _abgr); \
+ BX_MACRO_BLOCK_END
+
+#define BGFX_D3D12_PROFILER_BEGIN_LITERAL(_name, _abgr) \
+ BX_MACRO_BLOCK_BEGIN \
+ PIX3_BEGINEVENT(m_commandList, _abgr, "" _name); \
+ BGFX_PROFILER_BEGIN_LITERAL("" _name, _abgr); \
+ BX_MACRO_BLOCK_END
+
+#define BGFX_D3D12_PROFILER_END() \
+ BX_MACRO_BLOCK_BEGIN \
+ BGFX_PROFILER_END(); \
+ PIX3_ENDEVENT(m_commandList); \
+ BX_MACRO_BLOCK_END
namespace bgfx { namespace d3d12
{
@@ -206,9 +219,9 @@ namespace bgfx { namespace d3d12
struct VertexBufferD3D12 : public BufferD3D12
{
- void create(uint32_t _size, void* _data, VertexDeclHandle _declHandle, uint16_t _flags);
+ void create(uint32_t _size, void* _data, VertexLayoutHandle _layoutHandle, uint16_t _flags);
- VertexDeclHandle m_decl;
+ VertexLayoutHandle m_layoutHandle;
};
struct ShaderD3D12
@@ -264,14 +277,14 @@ namespace bgfx { namespace d3d12
void create(const ShaderD3D12* _vsh, const ShaderD3D12* _fsh)
{
- BX_CHECK(NULL != _vsh->m_code, "Vertex shader doesn't exist.");
+ BX_ASSERT(NULL != _vsh->m_code, "Vertex shader doesn't exist.");
m_vsh = _vsh;
bx::memCopy(&m_predefined[0], _vsh->m_predefined, _vsh->m_numPredefined*sizeof(PredefinedUniform));
m_numPredefined = _vsh->m_numPredefined;
if (NULL != _fsh)
{
- BX_CHECK(NULL != _fsh->m_code, "Fragment shader doesn't exist.");
+ BX_ASSERT(NULL != _fsh->m_code, "Fragment shader doesn't exist.");
m_fsh = _fsh;
bx::memCopy(&m_predefined[m_numPredefined], _fsh->m_predefined, _fsh->m_numPredefined*sizeof(PredefinedUniform));
m_numPredefined += _fsh->m_numPredefined;
@@ -303,6 +316,7 @@ namespace bgfx { namespace d3d12
TextureD3D12()
: m_ptr(NULL)
+ , m_singleMsaa(NULL)
, m_directAccessPtr(NULL)
, m_state(D3D12_RESOURCE_STATE_COMMON)
, m_numMips(0)
@@ -313,19 +327,22 @@ namespace bgfx { namespace d3d12
void* create(const Memory* _mem, uint64_t _flags, uint8_t _skip);
void destroy();
+ void overrideInternal(uintptr_t _ptr);
void update(ID3D12GraphicsCommandList* _commandList, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem);
- void resolve(uint8_t _resolve) const;
+ void resolve(ID3D12GraphicsCommandList* _commandList, uint8_t _resolve, uint32_t _layer, uint32_t _numLayers, uint32_t _mip);
D3D12_RESOURCE_STATES setState(ID3D12GraphicsCommandList* _commandList, D3D12_RESOURCE_STATES _state);
D3D12_SHADER_RESOURCE_VIEW_DESC m_srvd;
D3D12_UNORDERED_ACCESS_VIEW_DESC m_uavd;
ID3D12Resource* m_ptr;
+ ID3D12Resource* m_singleMsaa;
void* m_directAccessPtr;
D3D12_RESOURCE_STATES m_state;
uint64_t m_flags;
uint32_t m_width;
uint32_t m_height;
uint32_t m_depth;
+ uint32_t m_numLayers;
uint16_t m_samplerIdx;
uint8_t m_type;
uint8_t m_requestedFormat;
@@ -390,7 +407,7 @@ namespace bgfx { namespace d3d12
void finish(uint64_t _waitFence = UINT64_MAX, bool _finishAll = false);
bool tryFinish(uint64_t _waitFence);
void release(ID3D12Resource* _ptr);
- bool consume(uint32_t _ms = INFINITE);
+ bool consume(uint32_t _ms = UINT32_MAX);
struct CommandList
{
@@ -500,29 +517,32 @@ namespace bgfx { namespace d3d12
void init();
void shutdown();
- uint32_t begin(uint32_t _resultIdx);
+ uint32_t begin(uint32_t _resultIdx, uint32_t _frameNum);
void end(uint32_t _idx);
bool update();
struct Query
{
uint32_t m_resultIdx;
- bool m_ready;
+ uint32_t m_frameNum;
uint64_t m_fence;
+ bool m_ready;
};
struct Result
{
void reset()
{
- m_begin = 0;
- m_end = 0;
- m_pending = 0;
+ m_begin = 0;
+ m_end = 0;
+ m_pending = 0;
+ m_frameNum = 0;
}
uint64_t m_begin;
uint64_t m_end;
uint32_t m_pending;
+ uint32_t m_frameNum;
};
uint64_t m_frequency;