Add renderer texture copy command

This commit is contained in:
2026-06-02 16:35:38 +02:00
parent 483bbb4a9c
commit 75dd5cfdc9
9 changed files with 286 additions and 46 deletions

View File

@@ -397,6 +397,49 @@ pp::foundation::Status RecordingCommandContext::upload_texture(
return pp::foundation::Status::success();
}
pp::foundation::Status RecordingCommandContext::copy_texture(
ITexture2D& source,
ReadbackRegion source_region,
ITexture2D& destination,
ReadbackRegion destination_region) noexcept
{
if (in_render_pass_) {
return pp::foundation::Status::invalid_argument("texture copy must be outside a render pass");
}
const auto source_desc = source.desc();
const auto destination_desc = destination.desc();
const auto desc_status = validate_texture_copy_descs(
source_desc,
source_region,
destination_desc,
destination_region);
if (!desc_status.ok()) {
return desc_status;
}
const auto source_bytes = readback_byte_size(source_desc, source_region);
if (!source_bytes.ok()) {
return source_bytes.status();
}
const auto destination_bytes = readback_byte_size(destination_desc, destination_region);
if (!destination_bytes.ok()) {
return destination_bytes.status();
}
push_command(commands_, RecordedRenderCommand {
.kind = RecordedRenderCommandKind::copy_texture,
.source_desc = source_desc,
.destination_desc = destination_desc,
.source_region = source_region,
.destination_region = destination_region,
.copy_source_bytes = source_bytes.value(),
.copy_destination_bytes = destination_bytes.value(),
});
return pp::foundation::Status::success();
}
pp::foundation::Status RecordingCommandContext::capture_frame(
IRenderTarget& target,
IReadbackBuffer& destination) noexcept
@@ -626,6 +669,8 @@ const char* recorded_render_command_kind_name(RecordedRenderCommandKind kind) no
return "draw";
case RecordedRenderCommandKind::upload_texture:
return "upload_texture";
case RecordedRenderCommandKind::copy_texture:
return "copy_texture";
case RecordedRenderCommandKind::read_texture:
return "read_texture";
case RecordedRenderCommandKind::capture_frame: