MCPcopy Create free account
hub / github.com/InoriRus/Kyty / create_func

Function create_func

source/emulator/src/Graphics/Objects/VideoOutBuffer.cpp:68–173  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

66}
67
68static void* create_func(GraphicContext* ctx, const uint64_t* params, const uint64_t* vaddr, const uint64_t* size, int vaddr_num,
69 VulkanMemory* mem)
70{
71 KYTY_PROFILER_BLOCK("VideoOutBufferObject::Create");
72
73 EXIT_IF(vaddr_num != 1 || size == nullptr || vaddr == nullptr);
74 EXIT_IF(mem == nullptr);
75 EXIT_IF(ctx == nullptr);
76
77 auto pixel_format = params[VideoOutBufferObject::PARAM_FORMAT];
78 auto width = params[VideoOutBufferObject::PARAM_WIDTH];
79 auto height = params[VideoOutBufferObject::PARAM_HEIGHT];
80
81 // EXIT_NOT_IMPLEMENTED(pixel_format != 0x80000000);
82 EXIT_NOT_IMPLEMENTED(width == 0);
83 EXIT_NOT_IMPLEMENTED(height == 0);
84
85 auto* vk_obj = new VideoOutVulkanImage;
86
87 VkFormat vk_format = VK_FORMAT_UNDEFINED;
88
89 switch (pixel_format)
90 {
91 case static_cast<uint64_t>(VideoOutBufferFormat::R8G8B8A8Srgb): vk_format = VK_FORMAT_R8G8B8A8_SRGB; break;
92 case static_cast<uint64_t>(VideoOutBufferFormat::B8G8R8A8Srgb): vk_format = VK_FORMAT_B8G8R8A8_SRGB; break;
93 default: EXIT("unknown format: %" PRIu64 "\n", pixel_format);
94 }
95
96 vk_obj->extent.width = width;
97 vk_obj->extent.height = height;
98 vk_obj->format = vk_format;
99 vk_obj->image = nullptr;
100 vk_obj->layout = VK_IMAGE_LAYOUT_UNDEFINED;
101
102 for (auto& view: vk_obj->image_view)
103 {
104 view = nullptr;
105 }
106
107 VkImageCreateInfo image_info {};
108 image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
109 image_info.pNext = nullptr;
110 image_info.flags = 0;
111 image_info.imageType = VK_IMAGE_TYPE_2D;
112 image_info.extent.width = vk_obj->extent.width;
113 image_info.extent.height = vk_obj->extent.height;
114 image_info.extent.depth = 1;
115 image_info.mipLevels = 1;
116 image_info.arrayLayers = 1;
117 image_info.format = vk_obj->format;
118 image_info.tiling = VK_IMAGE_TILING_OPTIMAL;
119 image_info.initialLayout = vk_obj->layout;
120 image_info.usage = static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT) |
121 VK_IMAGE_USAGE_TRANSFER_DST_BIT;
122 image_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
123 image_info.samples = VK_SAMPLE_COUNT_1_BIT;
124
125 vkCreateImage(ctx->device, &image_info, nullptr, &vk_obj->image);

Callers

nothing calls this directly

Calls 4

VulkanAllocateFunction · 0.85
VulkanBindImageMemoryFunction · 0.85
printfFunction · 0.85
update_funcFunction · 0.70

Tested by

no test coverage detected