diff options
Diffstat (limited to '3rdparty/bgfx/src/renderer_vk.cpp')
-rw-r--r-- | 3rdparty/bgfx/src/renderer_vk.cpp | 74 |
1 files changed, 38 insertions, 36 deletions
diff --git a/3rdparty/bgfx/src/renderer_vk.cpp b/3rdparty/bgfx/src/renderer_vk.cpp index d4268ef776b..6bff243f8b5 100644 --- a/3rdparty/bgfx/src/renderer_vk.cpp +++ b/3rdparty/bgfx/src/renderer_vk.cpp @@ -2828,8 +2828,8 @@ VK_IMPORT_DEVICE newFrameBuffer.acquire(m_commandBuffer); int64_t now = bx::getHPCounter(); - - if (NULL == newFrameBuffer.m_nwh) + + if (NULL != newFrameBuffer.m_nwh) { m_presentElapsed += now - start; } @@ -4057,14 +4057,6 @@ VK_IMPORT_DEVICE 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: @@ -4095,9 +4087,15 @@ VK_IMPORT_DEVICE case UniformType::Sampler|kUniformFragmentBit: // do nothing, but VkDescriptorSetImageInfo would be set before drawing break; -// CASE_IMPLEMENT_UNIFORM(Sampler, I, int); - CASE_IMPLEMENT_UNIFORM(Vec4, F, float); - CASE_IMPLEMENT_UNIFORM(Mat4, F, float); + + 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; @@ -4106,7 +4104,6 @@ VK_IMPORT_DEVICE 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 } } @@ -6121,11 +6118,25 @@ VK_DESTROY region.bufferImageHeight = 0; region.imageSubresource.aspectMask = m_aspectMask; region.imageSubresource.mipLevel = _mip; - region.imageSubresource.baseArrayLayer = _side; + region.imageSubresource.baseArrayLayer = 0; region.imageSubresource.layerCount = 1; - region.imageOffset = { _rect.m_x, _rect.m_y, _z }; + region.imageOffset = { _rect.m_x, _rect.m_y, 0 }; region.imageExtent = { _rect.m_width, _rect.m_height, _depth }; + if (VK_IMAGE_VIEW_TYPE_3D == m_type) + { + region.imageOffset.z = _z; + } + else if (VK_IMAGE_VIEW_TYPE_CUBE == m_type + || VK_IMAGE_VIEW_TYPE_CUBE_ARRAY == m_type) + { + region.imageSubresource.baseArrayLayer = _z * 6 + _side; + } + else + { + region.imageSubresource.baseArrayLayer = _z; + } + copyBufferToTexture(_commandBuffer, stagingBuffer, 1, ®ion); s_renderVK->release(stagingBuffer); @@ -6142,6 +6153,7 @@ VK_DESTROY const bool needResolve = VK_NULL_HANDLE != m_singleMsaaImage; const bool needMipGen = true + && !needResolve && 0 != (m_flags & BGFX_TEXTURE_RT_MASK) && 0 == (m_flags & BGFX_TEXTURE_RT_WRITE_ONLY) && (_mip + 1) < m_numMips @@ -6185,24 +6197,13 @@ VK_DESTROY ); } - if (needResolve && needMipGen) - { - setMemoryBarrier( - _commandBuffer - , VK_PIPELINE_STAGE_TRANSFER_BIT - , VK_PIPELINE_STAGE_TRANSFER_BIT - ); - } - if (needMipGen) { - setImageMemoryBarrier(_commandBuffer, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, needResolve); + setImageMemoryBarrier(_commandBuffer, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); int32_t mipWidth = bx::max<int32_t>(int32_t(m_width) >> _mip, 1); int32_t mipHeight = bx::max<int32_t>(int32_t(m_height) >> _mip, 1); - const VkImage image = needResolve ? m_singleMsaaImage : m_textureImage; - const VkFilter filter = bimg::isDepth(bimg::TextureFormat::Enum(m_textureFormat) ) ? VK_FILTER_NEAREST : VK_FILTER_LINEAR @@ -6235,7 +6236,7 @@ VK_DESTROY vk::setImageMemoryBarrier( _commandBuffer - , image + , m_textureImage , m_aspectMask , VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL , VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL @@ -6247,9 +6248,9 @@ VK_DESTROY vkCmdBlitImage( _commandBuffer - , image + , m_textureImage , VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL - , image + , m_textureImage , VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL , 1 , &blit @@ -6259,7 +6260,7 @@ VK_DESTROY vk::setImageMemoryBarrier( _commandBuffer - , image + , m_textureImage , m_aspectMask , VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL , VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL @@ -6794,16 +6795,16 @@ VK_DESTROY const uint32_t minSwapBufferCount = bx::max<uint32_t>(surfaceCapabilities.minImageCount, 2); const uint32_t maxSwapBufferCount = surfaceCapabilities.maxImageCount == 0 - ? BGFX_CONFIG_MAX_BACK_BUFFERS - : bx::min<uint32_t>(surfaceCapabilities.maxImageCount, BGFX_CONFIG_MAX_BACK_BUFFERS) + ? kMaxBackBuffers + : bx::min<uint32_t>(surfaceCapabilities.maxImageCount, kMaxBackBuffers) ; if (minSwapBufferCount > maxSwapBufferCount) { - BX_TRACE("Create swapchain error: Incompatible swapchain image count (min: %d, max: %d, BGFX_CONFIG_MAX_BACK_BUFFERS: %d)." + BX_TRACE("Create swapchain error: Incompatible swapchain image count (min: %d, max: %d, MaxBackBuffers: %d)." , minSwapBufferCount , maxSwapBufferCount - , BGFX_CONFIG_MAX_BACK_BUFFERS + , kMaxBackBuffers ); return VK_ERROR_INITIALIZATION_FAILED; } @@ -7309,6 +7310,7 @@ VK_DESTROY BX_FALLTHROUGH; case VK_ERROR_OUT_OF_DATE_KHR: + case VK_SUBOPTIMAL_KHR: m_needToRefreshSwapchain = true; return false; |