| 33 | } |
| 34 | |
| 35 | static void update_func(GraphicContext* ctx, const uint64_t* params, void* obj, const uint64_t* vaddr, const uint64_t* size, int vaddr_num) |
| 36 | { |
| 37 | KYTY_PROFILER_BLOCK("VideoOutBufferObject::update_func"); |
| 38 | |
| 39 | EXIT_IF(obj == nullptr); |
| 40 | EXIT_IF(ctx == nullptr); |
| 41 | EXIT_IF(params == nullptr); |
| 42 | EXIT_IF(vaddr == nullptr || size == nullptr || vaddr_num != 1); |
| 43 | |
| 44 | auto* vk_obj = static_cast<VideoOutVulkanImage*>(obj); |
| 45 | |
| 46 | bool tiled = (params[VideoOutBufferObject::PARAM_TILED] != 0); |
| 47 | bool neo = (params[VideoOutBufferObject::PARAM_NEO] != 0); |
| 48 | auto pitch = params[VideoOutBufferObject::PARAM_PITCH]; |
| 49 | auto width = params[VideoOutBufferObject::PARAM_WIDTH]; |
| 50 | auto height = params[VideoOutBufferObject::PARAM_HEIGHT]; |
| 51 | |
| 52 | vk_obj->layout = VK_IMAGE_LAYOUT_UNDEFINED; |
| 53 | |
| 54 | if (tiled && buffer_is_tiled(*vaddr, *size)) |
| 55 | { |
| 56 | EXIT_NOT_IMPLEMENTED(width != pitch); |
| 57 | auto* temp_buf = new uint8_t[*size]; |
| 58 | TileConvertTiledToLinear(temp_buf, reinterpret_cast<void*>(*vaddr), TileMode::VideoOutTiled, width, height, neo); |
| 59 | UtilFillImage(ctx, vk_obj, temp_buf, *size, pitch, static_cast<uint64_t>(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)); |
| 60 | delete[] temp_buf; |
| 61 | } else |
| 62 | { |
| 63 | UtilFillImage(ctx, vk_obj, reinterpret_cast<void*>(*vaddr), *size, pitch, |
| 64 | static_cast<uint64_t>(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)); |
| 65 | } |
| 66 | } |
| 67 | |
| 68 | static void* create_func(GraphicContext* ctx, const uint64_t* params, const uint64_t* vaddr, const uint64_t* size, int vaddr_num, |
| 69 | VulkanMemory* mem) |
no test coverage detected