Lines Matching defs:ici

198 check_ici(struct zink_screen *screen, VkImageCreateInfo *ici, uint64_t modifier)
216 info.pNext = ici->pNext;
217 info.format = ici->format;
218 info.type = ici->imageType;
219 info.tiling = ici->tiling;
220 info.usage = ici->usage;
221 info.flags = ici->flags;
235 if (vk_format_aspects(ici->format) & VK_IMAGE_ASPECT_PLANE_1_BIT)
239 ret = VKSCR(GetPhysicalDeviceImageFormatProperties)(screen->pdev, ici->format, ici->imageType,
240 ici->tiling, ici->usage, ici->flags, &image_props);
243 if (ici->extent.depth > image_props.maxExtent.depth ||
244 ici->extent.height > image_props.maxExtent.height ||
245 ici->extent.width > image_props.maxExtent.width)
247 if (ici->mipLevels > image_props.maxMipLevels)
249 if (ici->arrayLayers > image_props.maxArrayLayers)
332 double_check_ici(struct zink_screen *screen, VkImageCreateInfo *ici, VkImageUsageFlags usage, uint64_t *mod)
337 const void *pNext = ici->pNext;
338 ici->usage = usage;
339 if (check_ici(screen, ici, *mod))
342 ici->pNext = NULL;
343 ici->flags &= ~VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
344 if (check_ici(screen, ici, *mod))
346 ici->pNext = pNext;
347 ici->flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
353 get_image_usage(struct zink_screen *screen, VkImageCreateInfo *ici, const struct pipe_resource *templ, unsigned bind, unsigned modifiers_count, const uint64_t *modifiers, uint64_t *mod)
355 VkImageTiling tiling = ici->tiling;
373 if (double_check_ici(screen, ici, usage, mod))
383 if (double_check_ici(screen, ici, usage, mod))
391 if (ici->flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT)
395 ici->flags |= VK_IMAGE_CREATE_EXTENDED_USAGE_BIT;
399 if (double_check_ici(screen, ici, usage, mod))
407 create_ici(struct zink_screen *screen, VkImageCreateInfo *ici, const struct pipe_resource *templ, bool dmabuf, unsigned bind, unsigned modifiers_count, const uint64_t *modifiers, bool *success)
409 ici->sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
412 ici->flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT;
414 ici->flags = modifiers_count || dmabuf || bind & (PIPE_BIND_SCANOUT | PIPE_BIND_DEPTH_STENCIL) ? 0 : VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
415 if (ici->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
417 ici->pNext = NULL;
418 else if (ici->pNext)
420 ici->flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
421 ici->usage = 0;
422 ici->queueFamilyIndexCount = 0;
425 ici->flags |= VK_IMAGE_CREATE_SPARSE_BINDING_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT;
435 ici->imageType = need_2D ? VK_IMAGE_TYPE_2D : VK_IMAGE_TYPE_1D;
443 ici->imageType = VK_IMAGE_TYPE_2D;
447 ici->imageType = VK_IMAGE_TYPE_3D;
448 ici->flags |= VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT;
450 ici->flags |= VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT;
463 ici->flags |= VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT;
465 ici->format = zink_get_format(screen, templ->format);
466 ici->extent.width = templ->width0;
467 ici->extent.height = templ->height0;
468 ici->extent.depth = templ->depth0;
469 ici->mipLevels = templ->last_level + 1;
470 ici->arrayLayers = MAX2(templ->array_size, 1);
471 ici->samples = templ->nr_samples ? templ->nr_samples : VK_SAMPLE_COUNT_1_BIT;
472 ici->tiling = screen->info.have_EXT_image_drm_format_modifier && modifiers_count ?
475 ici->sharingMode = VK_SHARING_MODE_EXCLUSIVE;
476 ici->initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
483 bool want_cube = ici->samples == 1 &&
486 (templ->target == PIPE_TEXTURE_2D_ARRAY && ici->extent.width == ici->extent.height && ici->arrayLayers >= 6));
489 ici->arrayLayers *= 6;
494 ici->tiling = VK_IMAGE_TILING_LINEAR;
495 if (ici->tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT)
502 while (!ici->usage) {
504 switch (ici->tiling) {
506 ici->tiling = VK_IMAGE_TILING_OPTIMAL;
510 ici->tiling = VK_IMAGE_TILING_LINEAR;
517 ici->tiling = VK_IMAGE_TILING_OPTIMAL;
522 if (tried[ici->tiling]) {
523 if (ici->flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT) {
527 ici->flags |= VK_IMAGE_CREATE_EXTENDED_USAGE_BIT;
534 ici->usage = get_image_usage(screen, ici, templ, bind, modifiers_count, modifiers, &mod);
536 if (ici->tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT)
537 tried[ici->tiling] = true;
540 ici->flags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
541 if (get_image_usage(screen, ici, templ, bind, modifiers_count, modifiers, &mod) != ici->usage)
542 ici->flags &= ~VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
658 VkImageCreateInfo ici;
680 ici.pNext = &format_list;
682 ici.pNext = NULL;
684 uint64_t mod = create_ici(screen, &ici, templ, external == VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,
700 obj->render_target = (ici.usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) != 0;
704 emici.pNext = ici.pNext;
706 ici.pNext = &emici;
708 assert(ici.tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT || mod != DRM_FORMAT_MOD_INVALID);
709 if (whandle && ici.tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT) {
712 idfmeci.pNext = ici.pNext;
728 ici.pNext = &idfmeci;
729 } else if (ici.tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT) {
731 idfmlci.pNext = ici.pNext;
734 ici.pNext = &idfmlci;
735 } else if (ici.tiling == VK_IMAGE_TILING_OPTIMAL) {
741 *optimal_tiling = ici.tiling == VK_IMAGE_TILING_OPTIMAL;
743 if (ici.usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
762 switch (ici.tiling) {
792 ici.flags |= VK_IMAGE_CREATE_DISJOINT_BIT;
822 VkResult result = VKSCR(CreateImage)(screen->dev, &ici, NULL, &obj->image);
829 result = VKSCR(CreateImage)(screen->dev, &ici, NULL, &obj->image);
840 if (ici.tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT) {
892 if (templ->usage == PIPE_USAGE_STAGING && ici.tiling == VK_IMAGE_TILING_LINEAR)
897 obj->vkflags = ici.flags;
898 obj->vkusage = ici.usage;