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

Function create_func

source/emulator/src/Graphics/Objects/RenderTexture.cpp:151–279  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149}
150
151static void* create_func(GraphicContext* ctx, const uint64_t* params, const uint64_t* vaddr, const uint64_t* size, int vaddr_num,
152 VulkanMemory* mem)
153{
154 KYTY_PROFILER_BLOCK("RenderTextureObject::Create");
155
156 EXIT_IF(vaddr_num != 1 || size == nullptr || vaddr == nullptr);
157 EXIT_IF(mem == nullptr);
158 EXIT_IF(ctx == nullptr);
159
160 auto pixel_format = params[RenderTextureObject::PARAM_FORMAT];
161 auto width = params[RenderTextureObject::PARAM_WIDTH];
162 auto height = params[RenderTextureObject::PARAM_HEIGHT];
163
164 VkFormat vk_format = VK_FORMAT_UNDEFINED;
165
166 switch (pixel_format)
167 {
168 case static_cast<uint64_t>(RenderTextureFormat::R8Unorm): vk_format = VK_FORMAT_R8_UNORM; break;
169 case static_cast<uint64_t>(RenderTextureFormat::R8G8B8A8Unorm): vk_format = VK_FORMAT_R8G8B8A8_UNORM; break;
170 case static_cast<uint64_t>(RenderTextureFormat::R8G8B8A8Srgb): vk_format = VK_FORMAT_R8G8B8A8_SRGB; break;
171 case static_cast<uint64_t>(RenderTextureFormat::B8G8R8A8Unorm): vk_format = VK_FORMAT_B8G8R8A8_UNORM; break;
172 case static_cast<uint64_t>(RenderTextureFormat::B8G8R8A8Srgb): vk_format = VK_FORMAT_B8G8R8A8_SRGB; break;
173 default: EXIT("unknown format: %" PRIu64 "\n", pixel_format);
174 }
175
176 EXIT_NOT_IMPLEMENTED(width == 0);
177 EXIT_NOT_IMPLEMENTED(height == 0);
178
179 auto* vk_obj = new RenderTextureVulkanImage;
180
181 vk_obj->extent.width = width;
182 vk_obj->extent.height = height;
183 vk_obj->format = vk_format;
184 vk_obj->image = nullptr;
185
186 for (auto& view: vk_obj->image_view)
187 {
188 view = nullptr;
189 }
190
191 VkImageCreateInfo image_info {};
192 image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
193 image_info.pNext = nullptr;
194 image_info.flags = 0;
195 image_info.imageType = VK_IMAGE_TYPE_2D;
196 image_info.extent.width = vk_obj->extent.width;
197 image_info.extent.height = vk_obj->extent.height;
198 image_info.extent.depth = 1;
199 image_info.mipLevels = 1;
200 image_info.arrayLayers = 1;
201 image_info.format = vk_obj->format;
202 image_info.tiling = VK_IMAGE_TILING_OPTIMAL;
203 image_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
204 image_info.usage = static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) |
205 static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_TRANSFER_SRC_BIT) |
206 static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_TRANSFER_DST_BIT) |
207 static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_SAMPLED_BIT);
208 image_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;

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