radv: add support for CmdCopyBuffer2KHR()
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6813>
This commit is contained in:

committed by
Marge Bot

parent
eccc73ff78
commit
22a08da737
@@ -448,6 +448,31 @@ void radv_CmdFillBuffer(
|
|||||||
fillSize, data);
|
fillSize, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
copy_buffer(struct radv_cmd_buffer *cmd_buffer,
|
||||||
|
struct radv_buffer *src_buffer,
|
||||||
|
struct radv_buffer *dst_buffer,
|
||||||
|
const VkBufferCopy2KHR *region)
|
||||||
|
{
|
||||||
|
bool old_predicating;
|
||||||
|
|
||||||
|
/* VK_EXT_conditional_rendering says that copy commands should not be
|
||||||
|
* affected by conditional rendering.
|
||||||
|
*/
|
||||||
|
old_predicating = cmd_buffer->state.predicating;
|
||||||
|
cmd_buffer->state.predicating = false;
|
||||||
|
|
||||||
|
radv_copy_buffer(cmd_buffer,
|
||||||
|
src_buffer->bo,
|
||||||
|
dst_buffer->bo,
|
||||||
|
src_buffer->offset + region->srcOffset,
|
||||||
|
dst_buffer->offset + region->dstOffset,
|
||||||
|
region->size);
|
||||||
|
|
||||||
|
/* Restore conditional rendering. */
|
||||||
|
cmd_buffer->state.predicating = old_predicating;
|
||||||
|
}
|
||||||
|
|
||||||
void radv_CmdCopyBuffer(
|
void radv_CmdCopyBuffer(
|
||||||
VkCommandBuffer commandBuffer,
|
VkCommandBuffer commandBuffer,
|
||||||
VkBuffer srcBuffer,
|
VkBuffer srcBuffer,
|
||||||
@@ -457,26 +482,32 @@ void radv_CmdCopyBuffer(
|
|||||||
{
|
{
|
||||||
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||||
RADV_FROM_HANDLE(radv_buffer, src_buffer, srcBuffer);
|
RADV_FROM_HANDLE(radv_buffer, src_buffer, srcBuffer);
|
||||||
RADV_FROM_HANDLE(radv_buffer, dest_buffer, destBuffer);
|
RADV_FROM_HANDLE(radv_buffer, dst_buffer, destBuffer);
|
||||||
bool old_predicating;
|
|
||||||
|
|
||||||
/* VK_EXT_conditional_rendering says that copy commands should not be
|
|
||||||
* affected by conditional rendering.
|
|
||||||
*/
|
|
||||||
old_predicating = cmd_buffer->state.predicating;
|
|
||||||
cmd_buffer->state.predicating = false;
|
|
||||||
|
|
||||||
for (unsigned r = 0; r < regionCount; r++) {
|
for (unsigned r = 0; r < regionCount; r++) {
|
||||||
uint64_t src_offset = src_buffer->offset + pRegions[r].srcOffset;
|
VkBufferCopy2KHR copy = {
|
||||||
uint64_t dest_offset = dest_buffer->offset + pRegions[r].dstOffset;
|
.sType = VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR,
|
||||||
uint64_t copy_size = pRegions[r].size;
|
.srcOffset = pRegions[r].srcOffset,
|
||||||
|
.dstOffset = pRegions[r].dstOffset,
|
||||||
|
.size = pRegions[r].size,
|
||||||
|
};
|
||||||
|
|
||||||
radv_copy_buffer(cmd_buffer, src_buffer->bo, dest_buffer->bo,
|
copy_buffer(cmd_buffer, src_buffer, dst_buffer, ©);
|
||||||
src_offset, dest_offset, copy_size);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Restore conditional rendering. */
|
void radv_CmdCopyBuffer2KHR(
|
||||||
cmd_buffer->state.predicating = old_predicating;
|
VkCommandBuffer commandBuffer,
|
||||||
|
const VkCopyBufferInfo2KHR* pCopyBufferInfo)
|
||||||
|
{
|
||||||
|
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||||
|
RADV_FROM_HANDLE(radv_buffer, src_buffer, pCopyBufferInfo->srcBuffer);
|
||||||
|
RADV_FROM_HANDLE(radv_buffer, dst_buffer, pCopyBufferInfo->dstBuffer);
|
||||||
|
|
||||||
|
for (unsigned r = 0; r < pCopyBufferInfo->regionCount; r++) {
|
||||||
|
copy_buffer(cmd_buffer, src_buffer, dst_buffer,
|
||||||
|
&pCopyBufferInfo->pRegions[r]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void radv_CmdUpdateBuffer(
|
void radv_CmdUpdateBuffer(
|
||||||
|
Reference in New Issue
Block a user