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.cpp52
1 files changed, 31 insertions, 21 deletions
diff --git a/3rdparty/bgfx/src/renderer_d3d12.cpp b/3rdparty/bgfx/src/renderer_d3d12.cpp
index f66e735e38f..d7a449ea82d 100644
--- a/3rdparty/bgfx/src/renderer_d3d12.cpp
+++ b/3rdparty/bgfx/src/renderer_d3d12.cpp
@@ -987,12 +987,6 @@ namespace bgfx { namespace d3d12
, (void**)&m_rootSignature
) );
- UniformHandle handle = BGFX_INVALID_HANDLE;
- for (uint32_t ii = 0; ii < PredefinedUniform::Count; ++ii)
- {
- m_uniformReg.add(handle, getPredefinedUniformName(PredefinedUniform::Enum(ii) ), &m_predefinedUniforms[ii]);
- }
-
g_caps.supported |= ( 0
| BGFX_CAPS_TEXTURE_3D
| BGFX_CAPS_TEXTURE_COMPARE_ALL
@@ -1011,8 +1005,8 @@ namespace bgfx { namespace d3d12
| BGFX_CAPS_TEXTURE_2D_ARRAY
| BGFX_CAPS_TEXTURE_CUBE_ARRAY
);
- g_caps.maxTextureSize = 16384;
- g_caps.maxFBAttachments = uint8_t(bx::uint32_min(16, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) );
+ g_caps.limits.maxTextureSize = 16384;
+ g_caps.limits.maxFBAttachments = uint8_t(bx::uint32_min(16, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS) );
for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii)
{
@@ -1407,7 +1401,7 @@ namespace bgfx { namespace d3d12
{
}
- void readTexture(TextureHandle _handle, void* _data) BX_OVERRIDE
+ void readTexture(TextureHandle _handle, void* _data, uint8_t _mip ) BX_OVERRIDE
{
const TextureD3D12& texture = m_textures[_handle.idx];
@@ -1418,7 +1412,7 @@ namespace bgfx { namespace d3d12
uint64_t total;
uint64_t srcPitch;
m_device->GetCopyableFootprints(&desc
- , 0
+ , _mip
, 1
, 0
, &layout
@@ -1444,16 +1438,18 @@ namespace bgfx { namespace d3d12
finish();
m_commandList = m_cmd.alloc();
+ uint32_t srcWidth = bx::uint32_max(1, texture.m_width >>_mip);
+ uint32_t srcHeight = bx::uint32_max(1, texture.m_height>>_mip);
uint8_t* src;
readback->Map(0, NULL, (void**)&src);
const uint8_t bpp = getBitsPerPixel(TextureFormat::Enum(texture.m_textureFormat) );
uint8_t* dst = (uint8_t*)_data;
- uint32_t dstPitch = texture.m_width*bpp/8;
+ uint32_t dstPitch = srcWidth*bpp/8;
uint32_t pitch = bx::uint32_min(uint32_t(srcPitch), dstPitch);
- for (uint32_t yy = 0, height = texture.m_height; yy < height; ++yy)
+ for (uint32_t yy = 0, height = srcHeight; yy < height; ++yy)
{
memcpy(dst, src, pitch);
@@ -1555,6 +1551,7 @@ namespace bgfx { namespace d3d12
{
BX_FREE(g_allocator, m_uniforms[_handle.idx]);
m_uniforms[_handle.idx] = NULL;
+ m_uniformReg.remove(_handle);
}
void saveScreenShot(const char* _filePath) BX_OVERRIDE
@@ -3017,6 +3014,7 @@ data.NumQualityLevels = 0;
D3D12_UNORDERED_ACCESS_VIEW_DESC tmpUavd;
D3D12_UNORDERED_ACCESS_VIEW_DESC* uavd = &_texture.m_uavd;
+
if (0 != _mip)
{
memcpy(&tmpUavd, uavd, sizeof(tmpUavd) );
@@ -3029,6 +3027,10 @@ data.NumQualityLevels = 0;
uavd->Texture2D.MipSlice = _mip;
uavd->Texture2D.PlaneSlice = 0;
break;
+ case D3D12_UAV_DIMENSION_TEXTURE2DARRAY:
+ uavd->Texture2DArray.MipSlice = _mip;
+ uavd->Texture2DArray.PlaneSlice = 0;
+ break;
case D3D12_UAV_DIMENSION_TEXTURE3D:
uavd->Texture3D.MipSlice = _mip;
@@ -3436,10 +3438,10 @@ data.NumQualityLevels = 0;
{
Enum type = Enum(!!isValid(_draw.m_indexBuffer) );
- VertexBufferD3D12& vb = s_renderD3D12->m_vertexBuffers[_draw.m_vertexBuffer.idx];
+ VertexBufferD3D12& vb = s_renderD3D12->m_vertexBuffers[_draw.m_stream[0].m_handle.idx];
vb.setState(_commandList, D3D12_RESOURCE_STATE_GENERIC_READ);
- uint16_t declIdx = !isValid(vb.m_decl) ? _draw.m_vertexDecl.idx : vb.m_decl.idx;
+ uint16_t declIdx = !isValid(vb.m_decl) ? _draw.m_stream[0].m_decl.idx : vb.m_decl.idx;
const VertexDecl& vertexDecl = s_renderD3D12->m_vertexDecls[declIdx];
uint32_t numIndices = 0;
@@ -3469,7 +3471,7 @@ data.NumQualityLevels = 0;
}
cmd.draw.InstanceCount = _draw.m_numInstances;
cmd.draw.VertexCountPerInstance = numVertices;
- cmd.draw.StartVertexLocation = _draw.m_startVertex;
+ cmd.draw.StartVertexLocation = _draw.m_stream[0].m_startVertex;
cmd.draw.StartInstanceLocation = 0;
}
else
@@ -3511,7 +3513,7 @@ data.NumQualityLevels = 0;
cmd.drawIndexed.IndexCountPerInstance = numIndices;
cmd.drawIndexed.InstanceCount = _draw.m_numInstances;
cmd.drawIndexed.StartIndexLocation = _draw.m_startIndex;
- cmd.drawIndexed.BaseVertexLocation = _draw.m_startVertex;
+ cmd.drawIndexed.BaseVertexLocation = _draw.m_stream[0].m_startVertex;
cmd.drawIndexed.StartInstanceLocation = 0;
}
@@ -3879,7 +3881,7 @@ data.NumQualityLevels = 0;
else if (0 == (BGFX_UNIFORM_SAMPLERBIT & type) )
{
const UniformInfo* info = s_renderD3D12->m_uniformReg.find(name);
- BX_CHECK(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name);
+ BX_WARN(NULL != info, "User defined uniform '%s' is not found, it won't be set.", name);
if (NULL != info)
{
@@ -4244,6 +4246,14 @@ data.NumQualityLevels = 0;
m_uavd.Texture2D.MipSlice = 0;
m_uavd.Texture2D.PlaneSlice = 0;
}
+
+ if( m_type==TextureCube )
+ {
+ m_uavd.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY;
+ m_uavd.Texture2DArray.MipSlice = 0;
+ m_uavd.Texture2DArray.ArraySize = 6;
+ }
+
break;
case Texture3D:
@@ -4766,7 +4776,7 @@ data.NumQualityLevels = 0;
_render->m_hmdInitialized = false;
const bool hmdEnabled = false;
- ViewState viewState(_render, hmdEnabled);
+ static ViewState viewState;
viewState.reset(_render, hmdEnabled);
// bool wireframe = !!(_render->m_debug&BGFX_DEBUG_WIREFRAME);
@@ -5205,7 +5215,7 @@ data.NumQualityLevels = 0;
rendererUpdateUniforms(this, _render->m_uniformBuffer, draw.m_constBegin, draw.m_constEnd);
- if (isValid(draw.m_vertexBuffer) )
+ if (isValid(draw.m_stream[0].m_handle) )
{
const uint64_t state = draw.m_stateFlags;
bool hasFactor = 0
@@ -5215,8 +5225,8 @@ data.NumQualityLevels = 0;
|| f3 == (state & f3)
;
- const VertexBufferD3D12& vb = m_vertexBuffers[draw.m_vertexBuffer.idx];
- uint16_t declIdx = !isValid(vb.m_decl) ? draw.m_vertexDecl.idx : vb.m_decl.idx;
+ const VertexBufferD3D12& vb = m_vertexBuffers[draw.m_stream[0].m_handle.idx];
+ uint16_t declIdx = !isValid(vb.m_decl) ? draw.m_stream[0].m_decl.idx : vb.m_decl.idx;
ID3D12PipelineState* pso =
getPipelineState(state