1/* 2 * Copyright © 2022 Imagination Technologies Ltd. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a copy 5 * of this software and associated documentation files (the "Software"), to deal 6 * in the Software without restriction, including without limitation the rights 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 * copies of the Software, and to permit persons to whom the Software is 9 * furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 * SOFTWARE. 22 */ 23 24#include <assert.h> 25#include <stdint.h> 26#include <vulkan/vulkan.h> 27 28#include "pvr_csb.h" 29#include "pvr_private.h" 30#include "util/list.h" 31#include "vk_alloc.h" 32#include "vk_command_buffer.h" 33#include "vk_command_pool.h" 34#include "vk_log.h" 35 36/* TODO: Investigate where this limit comes from. */ 37#define PVR_MAX_TRANSFER_SIZE_IN_TEXELS 2048U 38 39void pvr_CmdBlitImage2KHR(VkCommandBuffer commandBuffer, 40 const VkBlitImageInfo2 *pBlitImageInfo) 41{ 42 assert(!"Unimplemented"); 43} 44 45void pvr_CmdCopyImageToBuffer2KHR( 46 VkCommandBuffer commandBuffer, 47 const VkCopyImageToBufferInfo2 *pCopyImageToBufferInfo) 48{ 49 assert(!"Unimplemented"); 50} 51 52void pvr_CmdCopyImage2KHR(VkCommandBuffer commandBuffer, 53 const VkCopyImageInfo2 *pCopyImageInfo) 54{ 55 assert(!"Unimplemented"); 56} 57 58void pvr_CmdUpdateBuffer(VkCommandBuffer commandBuffer, 59 VkBuffer dstBuffer, 60 VkDeviceSize dstOffset, 61 VkDeviceSize dataSize, 62 const void *pData) 63{ 64 assert(!"Unimplemented"); 65} 66 67void pvr_CmdFillBuffer(VkCommandBuffer commandBuffer, 68 VkBuffer dstBuffer, 69 VkDeviceSize dstOffset, 70 VkDeviceSize fillSize, 71 uint32_t data) 72{ 73 assert(!"Unimplemented"); 74} 75 76void pvr_CmdCopyBufferToImage2KHR( 77 VkCommandBuffer commandBuffer, 78 const VkCopyBufferToImageInfo2 *pCopyBufferToImageInfo) 79{ 80 assert(!"Unimplemented"); 81} 82 83void pvr_CmdClearColorImage(VkCommandBuffer commandBuffer, 84 VkImage _image, 85 VkImageLayout imageLayout, 86 const VkClearColorValue *pColor, 87 uint32_t rangeCount, 88 const VkImageSubresourceRange *pRanges) 89{ 90 assert(!"Unimplemented"); 91} 92 93void pvr_CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, 94 VkImage image_h, 95 VkImageLayout imageLayout, 96 const VkClearDepthStencilValue *pDepthStencil, 97 uint32_t rangeCount, 98 const VkImageSubresourceRange *pRanges) 99{ 100 assert(!"Unimplemented"); 101} 102 103void pvr_CmdCopyBuffer2KHR(VkCommandBuffer commandBuffer, 104 const VkCopyBufferInfo2 *pCopyBufferInfo) 105{ 106 PVR_FROM_HANDLE(pvr_cmd_buffer, cmd_buffer, commandBuffer); 107 PVR_FROM_HANDLE(pvr_buffer, src, pCopyBufferInfo->srcBuffer); 108 PVR_FROM_HANDLE(pvr_buffer, dst, pCopyBufferInfo->dstBuffer); 109 const size_t regions_size = 110 pCopyBufferInfo->regionCount * sizeof(*pCopyBufferInfo->pRegions); 111 struct pvr_transfer_cmd *transfer_cmd; 112 113 PVR_CHECK_COMMAND_BUFFER_BUILDING_STATE(cmd_buffer); 114 115 transfer_cmd = vk_alloc(&cmd_buffer->vk.pool->alloc, 116 sizeof(*transfer_cmd) + regions_size, 117 8U, 118 VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); 119 if (!transfer_cmd) { 120 cmd_buffer->state.status = 121 vk_error(cmd_buffer, VK_ERROR_OUT_OF_HOST_MEMORY); 122 123 return; 124 } 125 126 transfer_cmd->src = src; 127 transfer_cmd->dst = dst; 128 transfer_cmd->region_count = pCopyBufferInfo->regionCount; 129 memcpy(transfer_cmd->regions, pCopyBufferInfo->pRegions, regions_size); 130 131 pvr_cmd_buffer_add_transfer_cmd(cmd_buffer, transfer_cmd); 132} 133 134void pvr_CmdClearAttachments(VkCommandBuffer commandBuffer, 135 uint32_t attachmentCount, 136 const VkClearAttachment *pAttachments, 137 uint32_t rectCount, 138 const VkClearRect *pRects) 139{ 140 assert(!"Unimplemented"); 141} 142 143void pvr_CmdResolveImage2KHR(VkCommandBuffer commandBuffer, 144 const VkResolveImageInfo2 *pResolveImageInfo) 145{ 146 assert(!"Unimplemented"); 147} 148