{
if(mCommandBufferImpl)
{
- mCommandBufferImpl->Begin(static_cast<vk::CommandBufferUsageFlags>(info.usage), nullptr);
+ vk::CommandBufferInheritanceInfo inheritanceInfo{};
+ if(info.renderPass)
+ {
+ auto renderTarget = ConstGraphicsCast<Vulkan::RenderTarget, Graphics::RenderTarget>(info.renderTarget);
+ inheritanceInfo.renderPass = renderTarget->GetRenderPass(info.renderPass)->GetVkHandle();
+ inheritanceInfo.subpass = 0;
+ inheritanceInfo.queryFlags = static_cast<vk::QueryControlFlags>(0);
+ inheritanceInfo.pipelineStatistics = static_cast<vk::QueryPipelineStatisticFlags>(0);
+ }
+ mCommandBufferImpl->Begin(static_cast<vk::CommandBufferUsageFlags>(info.usage), &inheritanceInfo);
}
}
dynInfo.setDynamicStates(mDynamicStates);
gfxPipelineInfo.setPDynamicState(&dynInfo);
- auto& allocator = mController.GetGraphicsDevice().GetAllocator();
- auto rtImpl = static_cast<Vulkan::RenderTarget*>(mCreateInfo.renderTarget);
- auto framebuffer = rtImpl->GetFramebuffer();
- auto surface = rtImpl->GetSurface();
+ auto& allocator = mController.GetGraphicsDevice().GetAllocator();
+
+ auto rtImpl = static_cast<Vulkan::RenderTarget*>(mCreateInfo.renderTarget);
+
+ auto framebuffer = rtImpl->GetFramebuffer();
+ auto surface = rtImpl->GetSurface();
FramebufferImpl* fbImpl = nullptr;
if(surface)
*/
// CLASS HEADER
-#include "vulkan-render-target.h"
+#include <dali/internal/graphics/vulkan-impl/vulkan-render-target.h>
// INTERNAL INCLUDES
#include <dali/integration-api/adaptor-framework/render-surface-interface.h>
-#include "vulkan-framebuffer.h"
-#include "vulkan-graphics-controller.h"
+#include <dali/internal/graphics/vulkan-impl/vulkan-framebuffer-impl.h>
+#include <dali/internal/graphics/vulkan-impl/vulkan-framebuffer.h>
+#include <dali/internal/graphics/vulkan-impl/vulkan-graphics-controller.h>
+#include <dali/internal/graphics/vulkan-impl/vulkan-render-pass.h>
+#include <dali/internal/graphics/vulkan/vulkan-device.h>
+#include <dali/internal/window-system/common/window-render-surface.h>
namespace Dali::Graphics::Vulkan
{
return mCreateInfo.surface;
}
+Vulkan::RenderPassImpl* RenderTarget::GetRenderPass(const Graphics::RenderPass* gfxRenderPass) const
+{
+ auto renderPass = const_cast<Vulkan::RenderPass*>(static_cast<const Vulkan::RenderPass*>(gfxRenderPass));
+
+ auto framebuffer = GetFramebuffer();
+ auto surface = GetSurface();
+
+ FramebufferImpl* fbImpl = nullptr;
+ if(surface)
+ {
+ auto& gfxDevice = mController.GetGraphicsDevice();
+ auto surfaceId = static_cast<Internal::Adaptor::WindowRenderSurface*>(surface)->GetSurfaceId();
+ auto swapchain = gfxDevice.GetSwapchainForSurfaceId(surfaceId);
+ fbImpl = swapchain->GetCurrentFramebuffer();
+ }
+ else if(framebuffer)
+ {
+ fbImpl = framebuffer->GetImpl();
+ }
+
+ return fbImpl->GetRenderPass(renderPass);
+}
+
} // namespace Dali::Graphics::Vulkan
{
class Framebuffer;
class Surface;
+class RenderPassImpl;
using RenderTargetResource = Resource<Graphics::RenderTarget, Graphics::RenderTargetCreateInfo>;
*/
[[nodiscard]] Integration::RenderSurfaceInterface* GetSurface() const;
+ /**
+ * Find a matching render pass for this render target
+ * @param[in] renderPass A render pass to search for
+ * @return a matching render pass implementation from the current framebuffer
+ */
+ [[nodiscard]] Vulkan::RenderPassImpl* GetRenderPass(const Graphics::RenderPass* renderPass) const;
// Get Swapchain?
private: