mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
vulkan,anv: Move VK_KHR_copy_commands2 wrappers to common code
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8676>
This commit is contained in:
parent
ac6be0ef22
commit
06f877f6e6
4 changed files with 287 additions and 207 deletions
|
|
@ -415,42 +415,6 @@ copy_image(struct anv_cmd_buffer *cmd_buffer,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void anv_CmdCopyImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageCopy* pRegions)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
ANV_FROM_HANDLE(anv_image, src_image, srcImage);
|
||||
ANV_FROM_HANDLE(anv_image, dst_image, dstImage);
|
||||
|
||||
struct blorp_batch batch;
|
||||
blorp_batch_init(&cmd_buffer->device->blorp, &batch, cmd_buffer, 0);
|
||||
|
||||
for (unsigned r = 0; r < regionCount; r++) {
|
||||
VkImageCopy2KHR copy = {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR,
|
||||
.srcSubresource = pRegions[r].srcSubresource,
|
||||
.srcOffset = pRegions[r].srcOffset,
|
||||
.dstSubresource = pRegions[r].dstSubresource,
|
||||
.dstOffset = pRegions[r].dstOffset,
|
||||
.extent = pRegions[r].extent,
|
||||
};
|
||||
|
||||
copy_image(cmd_buffer, &batch,
|
||||
src_image, srcImageLayout,
|
||||
dst_image, dstImageLayout,
|
||||
©);
|
||||
}
|
||||
|
||||
blorp_batch_finish(&batch);
|
||||
}
|
||||
|
||||
void anv_CmdCopyImage2KHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkCopyImageInfo2KHR* pCopyImageInfo)
|
||||
|
|
@ -623,39 +587,6 @@ copy_buffer_to_image(struct anv_cmd_buffer *cmd_buffer,
|
|||
}
|
||||
}
|
||||
|
||||
void anv_CmdCopyBufferToImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer srcBuffer,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkBufferImageCopy* pRegions)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
ANV_FROM_HANDLE(anv_buffer, src_buffer, srcBuffer);
|
||||
ANV_FROM_HANDLE(anv_image, dst_image, dstImage);
|
||||
|
||||
struct blorp_batch batch;
|
||||
blorp_batch_init(&cmd_buffer->device->blorp, &batch, cmd_buffer, 0);
|
||||
|
||||
for (unsigned r = 0; r < regionCount; r++) {
|
||||
VkBufferImageCopy2KHR copy = {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR,
|
||||
.bufferOffset = pRegions[r].bufferOffset,
|
||||
.bufferRowLength = pRegions[r].bufferRowLength,
|
||||
.bufferImageHeight = pRegions[r].bufferImageHeight,
|
||||
.imageSubresource = pRegions[r].imageSubresource,
|
||||
.imageOffset = pRegions[r].imageOffset,
|
||||
.imageExtent = pRegions[r].imageExtent,
|
||||
};
|
||||
|
||||
copy_buffer_to_image(cmd_buffer, &batch, src_buffer, dst_image,
|
||||
dstImageLayout, ©, true);
|
||||
}
|
||||
|
||||
blorp_batch_finish(&batch);
|
||||
}
|
||||
|
||||
void anv_CmdCopyBufferToImage2KHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo)
|
||||
|
|
@ -676,41 +607,6 @@ void anv_CmdCopyBufferToImage2KHR(
|
|||
blorp_batch_finish(&batch);
|
||||
}
|
||||
|
||||
void anv_CmdCopyImageToBuffer(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkBuffer dstBuffer,
|
||||
uint32_t regionCount,
|
||||
const VkBufferImageCopy* pRegions)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
ANV_FROM_HANDLE(anv_image, src_image, srcImage);
|
||||
ANV_FROM_HANDLE(anv_buffer, dst_buffer, dstBuffer);
|
||||
|
||||
struct blorp_batch batch;
|
||||
blorp_batch_init(&cmd_buffer->device->blorp, &batch, cmd_buffer, 0);
|
||||
|
||||
for (unsigned r = 0; r < regionCount; r++) {
|
||||
VkBufferImageCopy2KHR copy = {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR,
|
||||
.bufferOffset = pRegions[r].bufferOffset,
|
||||
.bufferRowLength = pRegions[r].bufferRowLength,
|
||||
.bufferImageHeight = pRegions[r].bufferImageHeight,
|
||||
.imageSubresource = pRegions[r].imageSubresource,
|
||||
.imageOffset = pRegions[r].imageOffset,
|
||||
.imageExtent = pRegions[r].imageExtent,
|
||||
};
|
||||
|
||||
copy_buffer_to_image(cmd_buffer, &batch, dst_buffer, src_image,
|
||||
srcImageLayout, ©, false);
|
||||
}
|
||||
|
||||
blorp_batch_finish(&batch);
|
||||
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_RENDER_TARGET_BUFFER_WRITES;
|
||||
}
|
||||
|
||||
void anv_CmdCopyImageToBuffer2KHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo)
|
||||
|
|
@ -871,47 +767,6 @@ blit_image(struct anv_cmd_buffer *cmd_buffer,
|
|||
}
|
||||
}
|
||||
|
||||
void anv_CmdBlitImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageBlit* pRegions,
|
||||
VkFilter filter)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
ANV_FROM_HANDLE(anv_image, src_image, srcImage);
|
||||
ANV_FROM_HANDLE(anv_image, dst_image, dstImage);
|
||||
|
||||
struct blorp_batch batch;
|
||||
blorp_batch_init(&cmd_buffer->device->blorp, &batch, cmd_buffer, 0);
|
||||
|
||||
for (unsigned r = 0; r < regionCount; r++) {
|
||||
VkImageBlit2KHR blit = {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
|
||||
.srcSubresource = pRegions[r].srcSubresource,
|
||||
.srcOffsets = {
|
||||
pRegions[r].srcOffsets[0],
|
||||
pRegions[r].srcOffsets[1],
|
||||
},
|
||||
.dstSubresource = pRegions[r].dstSubresource,
|
||||
.dstOffsets = {
|
||||
pRegions[r].dstOffsets[0],
|
||||
pRegions[r].dstOffsets[1],
|
||||
},
|
||||
};
|
||||
|
||||
blit_image(cmd_buffer, &batch,
|
||||
src_image, srcImageLayout,
|
||||
dst_image, dstImageLayout,
|
||||
&blit, filter);
|
||||
}
|
||||
|
||||
blorp_batch_finish(&batch);
|
||||
}
|
||||
|
||||
void anv_CmdBlitImage2KHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkBlitImageInfo2KHR* pBlitImageInfo)
|
||||
|
|
@ -977,36 +832,6 @@ copy_buffer(struct anv_device *device,
|
|||
blorp_buffer_copy(batch, src, dst, region->size);
|
||||
}
|
||||
|
||||
void anv_CmdCopyBuffer(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer srcBuffer,
|
||||
VkBuffer dstBuffer,
|
||||
uint32_t regionCount,
|
||||
const VkBufferCopy* pRegions)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
ANV_FROM_HANDLE(anv_buffer, src_buffer, srcBuffer);
|
||||
ANV_FROM_HANDLE(anv_buffer, dst_buffer, dstBuffer);
|
||||
|
||||
struct blorp_batch batch;
|
||||
blorp_batch_init(&cmd_buffer->device->blorp, &batch, cmd_buffer, 0);
|
||||
|
||||
for (unsigned r = 0; r < regionCount; r++) {
|
||||
VkBufferCopy2KHR copy = {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR,
|
||||
.srcOffset = pRegions[r].srcOffset,
|
||||
.dstOffset = pRegions[r].dstOffset,
|
||||
.size = pRegions[r].size,
|
||||
};
|
||||
|
||||
copy_buffer(cmd_buffer->device, &batch, src_buffer, dst_buffer, ©);
|
||||
}
|
||||
|
||||
blorp_batch_finish(&batch);
|
||||
|
||||
cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_RENDER_TARGET_BUFFER_WRITES;
|
||||
}
|
||||
|
||||
void anv_CmdCopyBuffer2KHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkCopyBufferInfo2KHR* pCopyBufferInfo)
|
||||
|
|
@ -1663,38 +1488,6 @@ resolve_image(struct anv_cmd_buffer *cmd_buffer,
|
|||
}
|
||||
}
|
||||
|
||||
void anv_CmdResolveImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageResolve* pRegions)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
ANV_FROM_HANDLE(anv_image, src_image, srcImage);
|
||||
ANV_FROM_HANDLE(anv_image, dst_image, dstImage);
|
||||
|
||||
assert(!src_image->format->can_ycbcr);
|
||||
|
||||
for (uint32_t r = 0; r < regionCount; r++) {
|
||||
VkImageResolve2KHR resolve = {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR,
|
||||
.srcSubresource = pRegions[r].srcSubresource,
|
||||
.srcOffset = pRegions[r].srcOffset,
|
||||
.dstSubresource = pRegions[r].dstSubresource,
|
||||
.dstOffset = pRegions[r].dstOffset,
|
||||
.extent = pRegions[r].extent,
|
||||
};
|
||||
|
||||
resolve_image(cmd_buffer,
|
||||
src_image, srcImageLayout,
|
||||
dst_image, dstImageLayout,
|
||||
&resolve);
|
||||
}
|
||||
}
|
||||
|
||||
void anv_CmdResolveImage2KHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkResolveImageInfo2KHR* pResolveImageInfo)
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ VULKAN_WSI_DISPLAY_FILES := \
|
|||
|
||||
VULKAN_UTIL_FILES := \
|
||||
util/vk_alloc.h \
|
||||
util/vk_cmd_copy.c \
|
||||
util/vk_debug_report.c \
|
||||
util/vk_debug_report.h \
|
||||
util/vk_deferred_operation.c \
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ vk_extensions_gen = files('vk_extensions_gen.py')
|
|||
|
||||
files_vulkan_util = files(
|
||||
'vk_alloc.h',
|
||||
'vk_cmd_copy.c',
|
||||
'vk_debug_report.c',
|
||||
'vk_debug_report.h',
|
||||
'vk_deferred_operation.c',
|
||||
|
|
|
|||
285
src/vulkan/util/vk_cmd_copy.c
Normal file
285
src/vulkan/util/vk_cmd_copy.c
Normal file
|
|
@ -0,0 +1,285 @@
|
|||
/*
|
||||
* Copyright © 2021 Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "vk_common_entrypoints.h"
|
||||
#include "vk_device.h"
|
||||
|
||||
#define STACK_ARRAY_SIZE 8
|
||||
|
||||
#define STACK_ARRAY(type, name, size) \
|
||||
type _stack_##name[STACK_ARRAY_SIZE], *const name = \
|
||||
(size) <= STACK_ARRAY_SIZE ? _stack_##name : malloc((size) * sizeof(type))
|
||||
|
||||
#define STACK_ARRAY_FINISH(name) \
|
||||
if (name != _stack_##name) free(name)
|
||||
|
||||
void
|
||||
vk_common_CmdCopyBuffer(VkCommandBuffer commandBuffer,
|
||||
VkBuffer srcBuffer,
|
||||
VkBuffer dstBuffer,
|
||||
uint32_t regionCount,
|
||||
const VkBufferCopy *pRegions)
|
||||
{
|
||||
/* We don't have a vk_command_buffer object but we can assume, since we're
|
||||
* using common dispatch, that it's a vk_object of some sort.
|
||||
*/
|
||||
struct vk_object_base *disp = (struct vk_object_base *)commandBuffer;
|
||||
|
||||
STACK_ARRAY(VkBufferCopy2KHR, region2s, regionCount);
|
||||
|
||||
for (uint32_t r = 0; r < regionCount; r++) {
|
||||
region2s[r] = (VkBufferCopy2KHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR,
|
||||
.srcOffset = pRegions[r].srcOffset,
|
||||
.dstOffset = pRegions[r].dstOffset,
|
||||
.size = pRegions[r].size,
|
||||
};
|
||||
}
|
||||
|
||||
VkCopyBufferInfo2KHR info = {
|
||||
.sType = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR,
|
||||
.srcBuffer = srcBuffer,
|
||||
.dstBuffer = dstBuffer,
|
||||
.regionCount = regionCount,
|
||||
.pRegions = region2s,
|
||||
};
|
||||
|
||||
disp->device->dispatch_table.CmdCopyBuffer2KHR(commandBuffer, &info);
|
||||
|
||||
STACK_ARRAY_FINISH(region2s);
|
||||
}
|
||||
|
||||
void
|
||||
vk_common_CmdCopyImage(VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageCopy *pRegions)
|
||||
{
|
||||
/* We don't have a vk_command_buffer object but we can assume, since we're
|
||||
* using common dispatch, that it's a vk_object of some sort.
|
||||
*/
|
||||
struct vk_object_base *disp = (struct vk_object_base *)commandBuffer;
|
||||
|
||||
STACK_ARRAY(VkImageCopy2KHR, region2s, regionCount);
|
||||
|
||||
for (uint32_t r = 0; r < regionCount; r++) {
|
||||
region2s[r] = (VkImageCopy2KHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR,
|
||||
.srcSubresource = pRegions[r].srcSubresource,
|
||||
.srcOffset = pRegions[r].srcOffset,
|
||||
.dstSubresource = pRegions[r].dstSubresource,
|
||||
.dstOffset = pRegions[r].dstOffset,
|
||||
.extent = pRegions[r].extent,
|
||||
};
|
||||
}
|
||||
|
||||
VkCopyImageInfo2KHR info = {
|
||||
.sType = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR,
|
||||
.srcImage = srcImage,
|
||||
.srcImageLayout = srcImageLayout,
|
||||
.dstImage = dstImage,
|
||||
.dstImageLayout = dstImageLayout,
|
||||
.regionCount = regionCount,
|
||||
.pRegions = region2s,
|
||||
};
|
||||
|
||||
disp->device->dispatch_table.CmdCopyImage2KHR(commandBuffer, &info);
|
||||
|
||||
STACK_ARRAY_FINISH(region2s);
|
||||
}
|
||||
|
||||
void
|
||||
vk_common_CmdCopyBufferToImage(VkCommandBuffer commandBuffer,
|
||||
VkBuffer srcBuffer,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkBufferImageCopy *pRegions)
|
||||
{
|
||||
/* We don't have a vk_command_buffer object but we can assume, since we're
|
||||
* using common dispatch, that it's a vk_object of some sort.
|
||||
*/
|
||||
struct vk_object_base *disp = (struct vk_object_base *)commandBuffer;
|
||||
|
||||
STACK_ARRAY(VkBufferImageCopy2KHR, region2s, regionCount);
|
||||
|
||||
for (uint32_t r = 0; r < regionCount; r++) {
|
||||
region2s[r] = (VkBufferImageCopy2KHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR,
|
||||
.bufferOffset = pRegions[r].bufferOffset,
|
||||
.bufferRowLength = pRegions[r].bufferRowLength,
|
||||
.bufferImageHeight = pRegions[r].bufferImageHeight,
|
||||
.imageSubresource = pRegions[r].imageSubresource,
|
||||
.imageOffset = pRegions[r].imageOffset,
|
||||
.imageExtent = pRegions[r].imageExtent,
|
||||
};
|
||||
}
|
||||
|
||||
VkCopyBufferToImageInfo2KHR info = {
|
||||
.sType = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR,
|
||||
.srcBuffer = srcBuffer,
|
||||
.dstImage = dstImage,
|
||||
.dstImageLayout = dstImageLayout,
|
||||
.regionCount = regionCount,
|
||||
.pRegions = region2s,
|
||||
};
|
||||
|
||||
disp->device->dispatch_table.CmdCopyBufferToImage2KHR(commandBuffer, &info);
|
||||
|
||||
STACK_ARRAY_FINISH(region2s);
|
||||
}
|
||||
|
||||
void
|
||||
vk_common_CmdCopyImageToBuffer(VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkBuffer dstBuffer,
|
||||
uint32_t regionCount,
|
||||
const VkBufferImageCopy *pRegions)
|
||||
{
|
||||
/* We don't have a vk_command_buffer object but we can assume, since we're
|
||||
* using common dispatch, that it's a vk_object of some sort.
|
||||
*/
|
||||
struct vk_object_base *disp = (struct vk_object_base *)commandBuffer;
|
||||
|
||||
STACK_ARRAY(VkBufferImageCopy2KHR, region2s, regionCount);
|
||||
|
||||
for (uint32_t r = 0; r < regionCount; r++) {
|
||||
region2s[r] = (VkBufferImageCopy2KHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR,
|
||||
.bufferOffset = pRegions[r].bufferOffset,
|
||||
.bufferRowLength = pRegions[r].bufferRowLength,
|
||||
.bufferImageHeight = pRegions[r].bufferImageHeight,
|
||||
.imageSubresource = pRegions[r].imageSubresource,
|
||||
.imageOffset = pRegions[r].imageOffset,
|
||||
.imageExtent = pRegions[r].imageExtent,
|
||||
};
|
||||
}
|
||||
|
||||
VkCopyImageToBufferInfo2KHR info = {
|
||||
.sType = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR,
|
||||
.srcImage = srcImage,
|
||||
.srcImageLayout = srcImageLayout,
|
||||
.dstBuffer = dstBuffer,
|
||||
.regionCount = regionCount,
|
||||
.pRegions = region2s,
|
||||
};
|
||||
|
||||
disp->device->dispatch_table.CmdCopyImageToBuffer2KHR(commandBuffer, &info);
|
||||
|
||||
STACK_ARRAY_FINISH(region2s);
|
||||
}
|
||||
|
||||
void
|
||||
vk_common_CmdBlitImage(VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageBlit *pRegions,
|
||||
VkFilter filter)
|
||||
{
|
||||
/* We don't have a vk_command_buffer object but we can assume, since we're
|
||||
* using common dispatch, that it's a vk_object of some sort.
|
||||
*/
|
||||
struct vk_object_base *disp = (struct vk_object_base *)commandBuffer;
|
||||
|
||||
STACK_ARRAY(VkImageBlit2KHR, region2s, regionCount);
|
||||
|
||||
for (uint32_t r = 0; r < regionCount; r++) {
|
||||
region2s[r] = (VkImageBlit2KHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
|
||||
.srcSubresource = pRegions[r].srcSubresource,
|
||||
.srcOffsets = {
|
||||
pRegions[r].srcOffsets[0],
|
||||
pRegions[r].srcOffsets[1],
|
||||
},
|
||||
.dstSubresource = pRegions[r].dstSubresource,
|
||||
.dstOffsets = {
|
||||
pRegions[r].dstOffsets[0],
|
||||
pRegions[r].dstOffsets[1],
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
VkBlitImageInfo2KHR info = {
|
||||
.sType = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR,
|
||||
.srcImage = srcImage,
|
||||
.srcImageLayout = srcImageLayout,
|
||||
.dstImage = dstImage,
|
||||
.dstImageLayout = dstImageLayout,
|
||||
.regionCount = regionCount,
|
||||
.pRegions = region2s,
|
||||
.filter = filter,
|
||||
};
|
||||
|
||||
disp->device->dispatch_table.CmdBlitImage2KHR(commandBuffer, &info);
|
||||
|
||||
STACK_ARRAY_FINISH(region2s);
|
||||
}
|
||||
|
||||
void
|
||||
vk_common_CmdResolveImage(VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageResolve *pRegions)
|
||||
{
|
||||
/* We don't have a vk_command_buffer object but we can assume, since we're
|
||||
* using common dispatch, that it's a vk_object of some sort.
|
||||
*/
|
||||
struct vk_object_base *disp = (struct vk_object_base *)commandBuffer;
|
||||
|
||||
STACK_ARRAY(VkImageResolve2KHR, region2s, regionCount);
|
||||
|
||||
for (uint32_t r = 0; r < regionCount; r++) {
|
||||
region2s[r] = (VkImageResolve2KHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR,
|
||||
.srcSubresource = pRegions[r].srcSubresource,
|
||||
.srcOffset = pRegions[r].srcOffset,
|
||||
.dstSubresource = pRegions[r].dstSubresource,
|
||||
.dstOffset = pRegions[r].dstOffset,
|
||||
.extent = pRegions[r].extent,
|
||||
};
|
||||
}
|
||||
|
||||
VkResolveImageInfo2KHR info = {
|
||||
.sType = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR,
|
||||
.srcImage = srcImage,
|
||||
.srcImageLayout = srcImageLayout,
|
||||
.dstImage = dstImage,
|
||||
.dstImageLayout = dstImageLayout,
|
||||
.regionCount = regionCount,
|
||||
.pRegions = region2s,
|
||||
};
|
||||
|
||||
disp->device->dispatch_table.CmdResolveImage2KHR(commandBuffer, &info);
|
||||
|
||||
STACK_ARRAY_FINISH(region2s);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue