[Vulkan] Texture loading
This commit is contained in:
@@ -206,6 +206,31 @@ class DeferredCommandBuffer {
|
||||
regions, sizeof(VkBufferCopy) * region_count);
|
||||
}
|
||||
|
||||
VkBufferImageCopy* CmdCopyBufferToImageEmplace(VkBuffer src_buffer,
|
||||
VkImage dst_image,
|
||||
VkImageLayout dst_image_layout,
|
||||
uint32_t region_count) {
|
||||
const size_t header_size =
|
||||
xe::align(sizeof(ArgsVkCopyBufferToImage), alignof(VkBufferImageCopy));
|
||||
uint8_t* args_ptr = reinterpret_cast<uint8_t*>(
|
||||
WriteCommand(Command::kVkCopyBufferToImage,
|
||||
header_size + sizeof(VkBufferImageCopy) * region_count));
|
||||
auto& args = *reinterpret_cast<ArgsVkCopyBufferToImage*>(args_ptr);
|
||||
args.src_buffer = src_buffer;
|
||||
args.dst_image = dst_image;
|
||||
args.dst_image_layout = dst_image_layout;
|
||||
args.region_count = region_count;
|
||||
return reinterpret_cast<VkBufferImageCopy*>(args_ptr + header_size);
|
||||
}
|
||||
void CmdVkCopyBufferToImage(VkBuffer src_buffer, VkImage dst_image,
|
||||
VkImageLayout dst_image_layout,
|
||||
uint32_t region_count,
|
||||
const VkBufferImageCopy* regions) {
|
||||
std::memcpy(CmdCopyBufferToImageEmplace(src_buffer, dst_image,
|
||||
dst_image_layout, region_count),
|
||||
regions, sizeof(VkBufferImageCopy) * region_count);
|
||||
}
|
||||
|
||||
void CmdVkDispatch(uint32_t group_count_x, uint32_t group_count_y,
|
||||
uint32_t group_count_z) {
|
||||
auto& args = *reinterpret_cast<ArgsVkDispatch*>(
|
||||
@@ -342,6 +367,7 @@ class DeferredCommandBuffer {
|
||||
kVkClearAttachments,
|
||||
kVkClearColorImage,
|
||||
kVkCopyBuffer,
|
||||
kVkCopyBufferToImage,
|
||||
kVkDispatch,
|
||||
kVkDraw,
|
||||
kVkDrawIndexed,
|
||||
@@ -428,6 +454,15 @@ class DeferredCommandBuffer {
|
||||
static_assert(alignof(VkBufferCopy) <= alignof(uintmax_t));
|
||||
};
|
||||
|
||||
struct ArgsVkCopyBufferToImage {
|
||||
VkBuffer src_buffer;
|
||||
VkImage dst_image;
|
||||
VkImageLayout dst_image_layout;
|
||||
uint32_t region_count;
|
||||
// Followed by aligned VkBufferImageCopy[].
|
||||
static_assert(alignof(VkBufferImageCopy) <= alignof(uintmax_t));
|
||||
};
|
||||
|
||||
struct ArgsVkDispatch {
|
||||
uint32_t group_count_x;
|
||||
uint32_t group_count_y;
|
||||
|
||||
Reference in New Issue
Block a user