10 #include "fml/logging.h"
22 CommandBufferVK::CommandBufferVK(
23 std::weak_ptr<const Context> context,
24 std::weak_ptr<const DeviceHolderVK> device_holder,
25 std::shared_ptr<TrackedObjectsVK> tracked_objects,
26 std::shared_ptr<FenceWaiterVK> fence_waiter)
27 : CommandBuffer(
std::move(context)),
28 device_holder_(
std::move(device_holder)),
29 tracked_objects_(
std::move(tracked_objects)),
30 fence_waiter_(
std::move(fence_waiter)) {}
34 void CommandBufferVK::SetLabel(
const std::string& label)
const {
42 bool CommandBufferVK::IsValid()
const {
46 bool CommandBufferVK::OnSubmitCommands(CompletionCallback callback) {
50 void CommandBufferVK::OnWaitUntilScheduled() {}
52 std::shared_ptr<RenderPass> CommandBufferVK::OnCreateRenderPass(
53 RenderTarget target) {
59 std::shared_ptr<RenderPassVK>(
new RenderPassVK(context,
63 if (!pass->IsValid()) {
69 std::shared_ptr<BlitPass> CommandBufferVK::OnCreateBlitPass() {
73 auto pass = std::shared_ptr<BlitPassVK>(
new BlitPassVK(shared_from_this()));
74 if (!pass->IsValid()) {
80 std::shared_ptr<ComputePass> CommandBufferVK::OnCreateComputePass() {
89 std::shared_ptr<ComputePassVK>(
new ComputePassVK(context,
92 if (!pass->IsValid()) {
102 tracked_objects_->GetGPUProbe().RecordCmdBufferEnd(command_buffer);
104 auto status = command_buffer.end();
105 if (status != vk::Result::eSuccess) {
106 VALIDATION_LOG <<
"Failed to end command buffer: " << vk::to_string(status);
113 if (tracked_objects_) {
114 return tracked_objects_->GetCommandBuffer();
123 tracked_objects_->Track(std::move(
object));
131 tracked_objects_->Track(buffer);
136 const std::shared_ptr<const DeviceBuffer>& buffer)
const {
140 return tracked_objects_->IsTracking(buffer);
147 tracked_objects_->Track(std::move(texture));
162 const std::shared_ptr<const Texture>& texture)
const {
166 std::shared_ptr<const TextureSourceVK> source =
168 return tracked_objects_->IsTracking(source);
172 const vk::DescriptorSetLayout& layout,
175 return fml::Status(fml::StatusCode::kUnknown,
"command encoder invalid");
178 return tracked_objects_->GetDescriptorPool().AllocateDescriptorSets(layout,
186 vk::DebugUtilsLabelEXT label_info;
187 label_info.pLabelName = label.data();
189 command_buffer.beginDebugUtilsLabelEXT(label_info);
198 command_buffer.endDebugUtilsLabelEXT();
206 vk::DebugUtilsLabelEXT label_info;
207 label_info.pLabelName = label.data();
209 command_buffer.insertDebugUtilsLabelEXT(label_info);