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

Function create2_func

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

Source from the content-addressed store, hash-verified

279}
280
281static void* create2_func(GraphicContext* ctx, CommandBuffer* buffer, const uint64_t* params, GpuMemoryScenario scenario,
282 const Vector<GpuMemoryObject>& objects, VulkanMemory* mem)
283{
284 KYTY_PROFILER_BLOCK("RenderTextureObject::CreateFromObjects");
285
286 EXIT_IF(objects.IsEmpty());
287 EXIT_IF(mem == nullptr);
288 EXIT_IF(ctx == nullptr);
289
290 auto pixel_format = params[RenderTextureObject::PARAM_FORMAT];
291 auto width = params[RenderTextureObject::PARAM_WIDTH];
292 auto height = params[RenderTextureObject::PARAM_HEIGHT];
293
294 VkFormat vk_format = VK_FORMAT_UNDEFINED;
295
296 switch (pixel_format)
297 {
298 case static_cast<uint64_t>(RenderTextureFormat::R8Unorm): vk_format = VK_FORMAT_R8_UNORM; break;
299 case static_cast<uint64_t>(RenderTextureFormat::R8G8B8A8Unorm): vk_format = VK_FORMAT_R8G8B8A8_UNORM; break;
300 case static_cast<uint64_t>(RenderTextureFormat::R8G8B8A8Srgb): vk_format = VK_FORMAT_R8G8B8A8_SRGB; break;
301 case static_cast<uint64_t>(RenderTextureFormat::B8G8R8A8Unorm): vk_format = VK_FORMAT_B8G8R8A8_UNORM; break;
302 case static_cast<uint64_t>(RenderTextureFormat::B8G8R8A8Srgb): vk_format = VK_FORMAT_B8G8R8A8_SRGB; break;
303 default: EXIT("unknown format: %" PRIu64 "\n", pixel_format);
304 }
305
306 EXIT_NOT_IMPLEMENTED(width == 0);
307 EXIT_NOT_IMPLEMENTED(height == 0);
308
309 auto* vk_obj = new RenderTextureVulkanImage;
310
311 vk_obj->extent.width = width;
312 vk_obj->extent.height = height;
313 vk_obj->format = vk_format;
314 vk_obj->image = nullptr;
315
316 for (auto& view: vk_obj->image_view)
317 {
318 view = nullptr;
319 }
320
321 VkImageCreateInfo image_info {};
322 image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
323 image_info.pNext = nullptr;
324 image_info.flags = 0;
325 image_info.imageType = VK_IMAGE_TYPE_2D;
326 image_info.extent.width = vk_obj->extent.width;
327 image_info.extent.height = vk_obj->extent.height;
328 image_info.extent.depth = 1;
329 image_info.mipLevels = 1;
330 image_info.arrayLayers = 1;
331 image_info.format = vk_obj->format;
332 image_info.tiling = VK_IMAGE_TILING_OPTIMAL;
333 image_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
334 image_info.usage = static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) |
335 static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_TRANSFER_SRC_BIT) |
336 static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_TRANSFER_DST_BIT) |
337 static_cast<VkImageUsageFlags>(VK_IMAGE_USAGE_SAMPLED_BIT);
338 image_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;

Callers

nothing calls this directly

Calls 5

VulkanAllocateFunction · 0.85
VulkanBindImageMemoryFunction · 0.85
printfFunction · 0.85
update2_funcFunction · 0.70
IsEmptyMethod · 0.45

Tested by

no test coverage detected