10 #include "fml/logging.h"
22 CommandBufferVK::CommandBufferVK(
23 std::weak_ptr<const Context>
context,
24 std::shared_ptr<TrackedObjectsVK> tracked_objects)
26 tracked_objects_(
std::move(tracked_objects)) {}
28 CommandBufferVK::~CommandBufferVK() =
default;
30 void CommandBufferVK::SetLabel(std::string_view label)
const {
36 ContextVK::Cast(*context).SetDebugName(GetCommandBuffer(), label);
40 bool CommandBufferVK::IsValid()
const {
44 bool CommandBufferVK::OnSubmitCommands(
bool block_on_schedule,
45 CompletionCallback callback) {
49 void CommandBufferVK::OnWaitUntilCompleted() {}
51 void CommandBufferVK::OnWaitUntilScheduled() {}
53 std::shared_ptr<RenderPass> CommandBufferVK::OnCreateRenderPass(
54 RenderTarget target) {
60 std::shared_ptr<RenderPassVK>(
new RenderPassVK(
context,
64 if (!pass->IsValid()) {
70 std::shared_ptr<BlitPass> CommandBufferVK::OnCreateBlitPass() {
78 auto pass = std::shared_ptr<BlitPassVK>(
new BlitPassVK(
79 shared_from_this(), ContextVK::Cast(*context).GetWorkarounds()));
80 if (!pass->IsValid()) {
86 std::shared_ptr<ComputePass> CommandBufferVK::OnCreateComputePass() {
95 std::shared_ptr<ComputePassVK>(
new ComputePassVK(
context,
98 if (!pass->IsValid()) {
104 bool CommandBufferVK::EndCommandBuffer()
const {
105 InsertDebugMarker(
"QueueSubmit");
108 tracked_objects_->GetGPUProbe().RecordCmdBufferEnd(
command_buffer);
111 if (status != vk::Result::eSuccess) {
112 VALIDATION_LOG <<
"Failed to end command buffer: " << vk::to_string(status);
118 vk::CommandBuffer CommandBufferVK::GetCommandBuffer()
const {
119 if (tracked_objects_) {
120 return tracked_objects_->GetCommandBuffer();
125 bool CommandBufferVK::Track(
const std::shared_ptr<SharedObjectVK>&
object) {
129 tracked_objects_->Track(
object);
133 bool CommandBufferVK::Track(
const std::shared_ptr<const DeviceBuffer>& buffer) {
137 tracked_objects_->Track(buffer);
141 bool CommandBufferVK::Track(
142 const std::shared_ptr<const TextureSourceVK>& texture) {
146 tracked_objects_->Track(texture);
150 bool CommandBufferVK::Track(
const std::shared_ptr<const Texture>& texture) {
157 return Track(TextureVK::Cast(*texture).GetTextureSource());
160 fml::StatusOr<vk::DescriptorSet> CommandBufferVK::AllocateDescriptorSets(
161 const vk::DescriptorSetLayout& layout,
165 return fml::Status(fml::StatusCode::kUnknown,
"command encoder invalid");
168 return tracked_objects_->GetDescriptorPool().AllocateDescriptorSets(
169 layout, pipeline_key,
context);
172 void CommandBufferVK::PushDebugGroup(std::string_view label)
const {
176 vk::DebugUtilsLabelEXT label_info;
177 label_info.pLabelName = label.data();
183 void CommandBufferVK::PopDebugGroup()
const {
192 void CommandBufferVK::InsertDebugMarker(std::string_view label)
const {
196 vk::DebugUtilsLabelEXT label_info;
197 label_info.pLabelName = label.data();
204 return tracked_objects_->GetDescriptorPool();
A per-frame descriptor pool. Descriptors from this pool don't need to be freed individually....
bool HasValidationLayers()
std::shared_ptr< ContextGLES > context
std::shared_ptr< CommandBuffer > command_buffer