Lines Matching +full:a630 +full:- +full:test
4 * SPDX-License-Identifier: MIT
17 #include "drm-uapi/drm_fourcc.h"
113 tu_cs_emit(cs, iview->PITCH); in tu_cs_image_ref()
114 tu_cs_emit(cs, iview->layer_size >> 6); in tu_cs_image_ref()
115 tu_cs_emit_qw(cs, iview->base_addr + iview->layer_size * layer); in tu_cs_image_ref()
121 tu_cs_emit(cs, iview->stencil_PITCH); in tu_cs_image_stencil_ref()
122 tu_cs_emit(cs, iview->stencil_layer_size >> 6); in tu_cs_image_stencil_ref()
123 tu_cs_emit_qw(cs, iview->stencil_base_addr + iview->stencil_layer_size * layer); in tu_cs_image_stencil_ref()
129 tu_cs_emit(cs, iview->depth_PITCH); in tu_cs_image_depth_ref()
130 tu_cs_emit(cs, iview->depth_layer_size >> 6); in tu_cs_image_depth_ref()
131 tu_cs_emit_qw(cs, iview->depth_base_addr + iview->depth_layer_size * layer); in tu_cs_image_depth_ref()
137 tu_cs_emit_qw(cs, iview->base_addr + iview->layer_size * layer); in tu_cs_image_ref_2d()
139 tu_cs_emit(cs, iview->PITCH << (src ? 9 : 0)); in tu_cs_image_ref_2d()
145 tu_cs_emit_qw(cs, iview->ubwc_addr + iview->ubwc_layer_size * layer); in tu_cs_image_flag_ref()
146 tu_cs_emit(cs, iview->FLAG_BUFFER_PITCH); in tu_cs_image_flag_ref()
155 TU_FROM_HANDLE(tu_image, image, pCreateInfo->image); in tu_image_view_init()
156 const VkImageSubresourceRange *range = &pCreateInfo->subresourceRange; in tu_image_view_init()
157 VkFormat vk_format = pCreateInfo->format; in tu_image_view_init()
158 VkImageAspectFlagBits aspect_mask = pCreateInfo->subresourceRange.aspectMask; in tu_image_view_init()
161 vk_find_struct_const(pCreateInfo->pNext, SAMPLER_YCBCR_CONVERSION_INFO); in tu_image_view_init()
163 tu_sampler_ycbcr_conversion_from_handle(ycbcr_conversion->conversion) : NULL; in tu_image_view_init()
165 vk_image_view_init(&device->vk, &iview->vk, false, pCreateInfo); in tu_image_view_init()
167 iview->image = image; in tu_image_view_init()
171 layouts[0] = &image->layout[tu6_plane_index(image->vk.format, aspect_mask)]; in tu_image_view_init()
179 if (image->vk.format == VK_FORMAT_G8_B8R8_2PLANE_420_UNORM && in tu_image_view_init()
188 assert(!layouts[0]->ubwc); in tu_image_view_init()
195 layouts[1] = &image->layout[1]; in tu_image_view_init()
196 layouts[2] = &image->layout[2]; in tu_image_view_init()
200 args.iova = image->iova; in tu_image_view_init()
201 args.base_array_layer = range->baseArrayLayer; in tu_image_view_init()
202 args.base_miplevel = range->baseMipLevel; in tu_image_view_init()
203 args.layer_count = vk_image_subresource_layer_count(&image->vk, range); in tu_image_view_init()
204 args.level_count = vk_image_subresource_level_count(&image->vk, range); in tu_image_view_init()
205 args.min_lod_clamp = iview->vk.min_lod; in tu_image_view_init()
207 vk_component_mapping_to_pipe_swizzle(pCreateInfo->components, args.swiz); in tu_image_view_init()
211 vk_component_mapping_to_pipe_swizzle(conversion->components, in tu_image_view_init()
216 switch (pCreateInfo->viewType) { in tu_image_view_init()
239 args.chroma_offsets[0] = (enum fdl_chroma_location) conversion->chroma_offsets[0]; in tu_image_view_init()
240 args.chroma_offsets[1] = (enum fdl_chroma_location) conversion->chroma_offsets[1]; in tu_image_view_init()
243 fdl6_view_init(&iview->view, layouts, &args, has_z24uint_s8uint); in tu_image_view_init()
245 if (image->vk.format == VK_FORMAT_D32_SFLOAT_S8_UINT) { in tu_image_view_init()
246 struct fdl_layout *layout = &image->layout[0]; in tu_image_view_init()
247 iview->depth_base_addr = image->iova + in tu_image_view_init()
248 fdl_surface_offset(layout, range->baseMipLevel, range->baseArrayLayer); in tu_image_view_init()
249 iview->depth_layer_size = fdl_layer_stride(layout, range->baseMipLevel); in tu_image_view_init()
250 iview->depth_PITCH = A6XX_RB_DEPTH_BUFFER_PITCH(fdl_pitch(layout, range->baseMipLevel)).value; in tu_image_view_init()
252 layout = &image->layout[1]; in tu_image_view_init()
253 iview->stencil_base_addr = image->iova + in tu_image_view_init()
254 fdl_surface_offset(layout, range->baseMipLevel, range->baseArrayLayer); in tu_image_view_init()
255 iview->stencil_layer_size = fdl_layer_stride(layout, range->baseMipLevel); in tu_image_view_init()
256 … iview->stencil_PITCH = A6XX_RB_STENCIL_BUFFER_PITCH(fdl_pitch(layout, range->baseMipLevel)).value; in tu_image_view_init()
277 * (S8_UINT because separate stencil doesn't have UBWC-enable bit) in ubwc_possible()
291 if (!info->a6xx.has_8bpp_ubwc && in ubwc_possible()
310 * UBWC-enabled mipmaps in freedreno currently. Just match the closed GL in ubwc_possible()
316 /* Disable UBWC for D24S8 on A630 in some cases in ubwc_possible()
320 * on a630 (the special FMT6_Z24_UINT_S8_UINT format is missing) in ubwc_possible()
322 * It must be sampled as FMT6_8_8_8_8_UINT, which is not UBWC-compatible in ubwc_possible()
325 * when creating the sampler, we also have to use the A630 workaround. in ubwc_possible()
335 if (!info->a6xx.has_z24uint_s8uint && samples > VK_SAMPLE_COUNT_1_BIT) in ubwc_possible()
346 vk_image_init(&device->vk, &image->vk, pCreateInfo); in tu_image_init()
347 image->vk.drm_format_mod = modifier; in tu_image_init()
353 if (pCreateInfo->tiling == VK_IMAGE_TILING_LINEAR || modifier == DRM_FORMAT_MOD_LINEAR) { in tu_image_init()
359 if (!tiling_possible(image->vk.format)) { in tu_image_init()
365 if (pCreateInfo->imageType == VK_IMAGE_TYPE_1D) { in tu_image_init()
371 tu_vk_format_to_pipe_format(image->vk.format); in tu_image_init()
382 * - if the fmt_list contains only formats which are swapped, but compatible in tu_image_init()
385 * - figure out which UBWC compressions are compatible to keep it enabled in tu_image_init()
387 if ((pCreateInfo->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) && in tu_image_init()
388 !vk_format_is_depth_or_stencil(image->vk.format)) { in tu_image_init()
390 vk_find_struct_const(pCreateInfo->pNext, IMAGE_FORMAT_LIST_CREATE_INFO); in tu_image_init()
392 /* Whether a view of the image with a non-R8G8 but R8G8 compatible format in tu_image_init()
399 for (uint32_t i = 0; i < fmt_list->viewFormatCount; i++) { in tu_image_init()
401 tu_vk_format_to_pipe_format(fmt_list->pViewFormats[i]); in tu_image_init()
433 if (!ubwc_possible(image->vk.format, pCreateInfo->imageType, in tu_image_init()
434 pCreateInfo->usage, image->vk.stencil_usage, in tu_image_init()
435 device->physical_device->info, pCreateInfo->samples, in tu_image_init()
436 device->use_z24uint_s8uint)) in tu_image_init()
442 else if (device->physical_device->instance->debug_flags & TU_DEBUG_NOUBWC) in tu_image_init()
445 /* Non-UBWC tiled R8G8 is probably buggy since media formats are always in tu_image_init()
446 * either linear or UBWC. There is no simple test to reproduce the bug. in tu_image_init()
454 for (uint32_t i = 0; i < tu6_plane_count(image->vk.format); i++) { in tu_image_init()
455 struct fdl_layout *layout = &image->layout[i]; in tu_image_init()
456 enum pipe_format format = tu6_plane_format(image->vk.format, i); in tu_image_init()
457 uint32_t width0 = pCreateInfo->extent.width; in tu_image_init()
458 uint32_t height0 = pCreateInfo->extent.height; in tu_image_init()
461 switch (image->vk.format) { in tu_image_init()
481 if (pCreateInfo->mipLevels != 1 || in tu_image_init()
482 pCreateInfo->arrayLayers != 1 || in tu_image_init()
483 pCreateInfo->extent.depth != 1) in tu_image_init()
491 layout->tile_mode = tile_mode; in tu_image_init()
492 layout->ubwc = ubwc_enabled; in tu_image_init()
495 pCreateInfo->samples, in tu_image_init()
497 pCreateInfo->extent.depth, in tu_image_init()
498 pCreateInfo->mipLevels, in tu_image_init()
499 pCreateInfo->arrayLayers, in tu_image_init()
500 pCreateInfo->imageType == VK_IMAGE_TYPE_3D, in tu_image_init()
506 if (device->instance->debug_flags & TU_DEBUG_LAYOUT) in tu_image_init()
513 uint32_t offset = ALIGN_POT(image->total_size, 4096); in tu_image_init()
514 for (int i = 0; i < pCreateInfo->mipLevels; i++) { in tu_image_init()
515 layout->slices[i].offset += offset; in tu_image_init()
516 layout->ubwc_slices[i].offset += offset; in tu_image_init()
518 layout->size += offset; in tu_image_init()
521 image->total_size = MAX2(image->total_size, layout->size); in tu_image_init()
524 const struct util_format_description *desc = util_format_description(image->layout[0].format); in tu_image_init()
525 if (util_format_has_depth(desc) && !(device->instance->debug_flags & TU_DEBUG_NOLRZ)) in tu_image_init()
528 struct fdl_layout *layout = &image->layout[0]; in tu_image_init()
529 unsigned width = layout->width0; in tu_image_init()
530 unsigned height = layout->height0; in tu_image_init()
532 /* LRZ buffer is super-sampled */ in tu_image_init()
533 switch (layout->nr_samples) { in tu_image_init()
547 image->lrz_height = lrz_height; in tu_image_init()
548 image->lrz_pitch = lrz_pitch; in tu_image_init()
549 image->lrz_offset = image->total_size; in tu_image_init()
551 image->total_size += lrz_size; in tu_image_init()
556 /* Fast-clear buffer is 1bit/block */ in tu_image_init()
557 image->lrz_fc_size = DIV_ROUND_UP(nblocksx * nblocksy, 8); in tu_image_init()
559 /* Fast-clear buffer cannot be larger than 512 bytes (HW limitation) */ in tu_image_init()
560 bool has_lrz_fc = image->lrz_fc_size <= 512 && in tu_image_init()
561 device->physical_device->info->a6xx.enable_lrz_fast_clear && in tu_image_init()
562 !unlikely(device->physical_device->instance->debug_flags & TU_DEBUG_NOLRZFC); in tu_image_init()
564 if (has_lrz_fc || device->physical_device->info->a6xx.has_lrz_dir_tracking) { in tu_image_init()
565 image->lrz_fc_offset = image->total_size; in tu_image_init()
566 image->total_size += 512; in tu_image_init()
568 if (device->physical_device->info->a6xx.has_lrz_dir_tracking) { in tu_image_init()
570 image->total_size += 1; in tu_image_init()
572 image->total_size += 5; in tu_image_init()
577 image->lrz_fc_size = 0; in tu_image_init()
580 image->lrz_height = 0; in tu_image_init()
597 vk_object_zalloc(&device->vk, alloc, sizeof(*image), VK_OBJECT_TYPE_IMAGE); in tu_CreateImage()
602 if (pCreateInfo->tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT) { in tu_CreateImage()
604 vk_find_struct_const(pCreateInfo->pNext, in tu_CreateImage()
607 vk_find_struct_const(pCreateInfo->pNext, in tu_CreateImage()
614 for (unsigned i = 0; i < mod_info->drmFormatModifierCount; i++) { in tu_CreateImage()
615 if (mod_info->pDrmFormatModifiers[i] == DRM_FORMAT_MOD_QCOM_COMPRESSED) in tu_CreateImage()
619 modifier = drm_explicit_info->drmFormatModifier; in tu_CreateImage()
622 plane_layouts = drm_explicit_info->pPlaneLayouts; in tu_CreateImage()
626 vk_find_struct_const(pCreateInfo->pNext, WSI_IMAGE_CREATE_INFO_MESA); in tu_CreateImage()
627 if (wsi_info && wsi_info->scanout) in tu_CreateImage()
633 vk_find_struct_const(pCreateInfo->pNext, NATIVE_BUFFER_ANDROID); in tu_CreateImage()
645 vk_object_free(&device->vk, alloc, image); in tu_CreateImage()
671 if (image->owned_memory != VK_NULL_HANDLE) in tu_DestroyImage()
672 tu_FreeMemory(_device, image->owned_memory, pAllocator); in tu_DestroyImage()
675 vk_object_free(&device->vk, pAllocator, image); in tu_DestroyImage()
682 pMemoryRequirements->memoryRequirements = (VkMemoryRequirements) { in tu_get_image_memory_requirements()
684 .alignment = image->layout[0].base_align, in tu_get_image_memory_requirements()
685 .size = image->total_size in tu_get_image_memory_requirements()
688 vk_foreach_struct(ext, pMemoryRequirements->pNext) { in tu_get_image_memory_requirements()
689 switch (ext->sType) { in tu_get_image_memory_requirements()
693 req->requiresDedicatedAllocation = in tu_get_image_memory_requirements()
694 image->vk.external_handle_types != 0; in tu_get_image_memory_requirements()
695 req->prefersDedicatedAllocation = req->requiresDedicatedAllocation; in tu_get_image_memory_requirements()
709 TU_FROM_HANDLE(tu_image, image, pInfo->image); in tu_GetImageMemoryRequirements2()
734 tu_image_init(device, &image, pInfo->pCreateInfo, DRM_FORMAT_MOD_INVALID, in tu_GetDeviceImageMemoryRequirements()
759 &image->layout[tu6_plane_index(image->vk.format, pSubresource->aspectMask)]; in tu_GetImageSubresourceLayout()
760 const struct fdl_slice *slice = layout->slices + pSubresource->mipLevel; in tu_GetImageSubresourceLayout()
762 pLayout->offset = in tu_GetImageSubresourceLayout()
763 fdl_surface_offset(layout, pSubresource->mipLevel, pSubresource->arrayLayer); in tu_GetImageSubresourceLayout()
764 pLayout->rowPitch = fdl_pitch(layout, pSubresource->mipLevel); in tu_GetImageSubresourceLayout()
765 pLayout->arrayPitch = fdl_layer_stride(layout, pSubresource->mipLevel); in tu_GetImageSubresourceLayout()
766 pLayout->depthPitch = slice->size0; in tu_GetImageSubresourceLayout()
767 pLayout->size = pLayout->depthPitch * layout->depth0; in tu_GetImageSubresourceLayout()
769 if (fdl_ubwc_enabled(layout, pSubresource->mipLevel)) { in tu_GetImageSubresourceLayout()
771 pLayout->offset = 0; in tu_GetImageSubresourceLayout()
773 assert(image->vk.mip_levels == 1 && image->vk.array_layers == 1); in tu_GetImageSubresourceLayout()
786 view = vk_object_alloc(&device->vk, pAllocator, sizeof(*view), in tu_CreateImageView()
791 tu_image_view_init(device, view, pCreateInfo, device->use_z24uint_s8uint); in tu_CreateImageView()
809 vk_object_free(&device->vk, pAllocator, iview); in tu_DestroyImageView()
817 TU_FROM_HANDLE(tu_buffer, buffer, pCreateInfo->buffer); in tu_buffer_view_init()
819 view->buffer = buffer; in tu_buffer_view_init()
822 if (pCreateInfo->range == VK_WHOLE_SIZE) in tu_buffer_view_init()
823 range = buffer->size - pCreateInfo->offset; in tu_buffer_view_init()
825 range = pCreateInfo->range; in tu_buffer_view_init()
831 view->descriptor, tu_vk_format_to_pipe_format(pCreateInfo->format), in tu_buffer_view_init()
832 swiz, buffer->iova + pCreateInfo->offset, range); in tu_buffer_view_init()
844 view = vk_object_alloc(&device->vk, pAllocator, sizeof(*view), in tu_CreateBufferView()
867 vk_object_free(&device->vk, pAllocator, view); in tu_DestroyBufferView()