void intel_att_view_init(struct intel_dev *dev, const VkImageViewCreateInfo *info, struct intel_att_view *att_view) { struct intel_img *img = intel_img(info->image); VkImageViewType view_type; att_view->img = img; att_view->mipLevel = info->subresourceRange.baseMipLevel; att_view->baseArrayLayer = info->subresourceRange.baseArrayLayer; att_view->array_size = info->subresourceRange.layerCount; view_type = img_type_to_view_type(img->type, info->subresourceRange.baseArrayLayer, info->subresourceRange.layerCount); att_view_init_for_input(att_view, dev->gpu, img, view_type, info->format, info->subresourceRange.baseMipLevel, info->subresourceRange.baseArrayLayer, info->subresourceRange.layerCount); if (img->usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) { att_view_init_for_ds(att_view, dev->gpu, img, view_type, img->layout.format, info->subresourceRange.baseMipLevel, info->subresourceRange.baseArrayLayer, info->subresourceRange.layerCount); } else { att_view_init_for_rt(att_view, dev->gpu, img, view_type, info->format, info->subresourceRange.baseMipLevel, info->subresourceRange.baseArrayLayer, info->subresourceRange.layerCount); } }
void intel_img_view_init(struct intel_dev *dev, const VkImageViewCreateInfo *info, struct intel_img_view *view) { VkComponentMapping state_swizzles; uint32_t mip_levels, array_size; struct intel_img *img = intel_img(info->image); mip_levels = info->subresourceRange.levelCount; if (mip_levels > img->mip_levels - info->subresourceRange.baseMipLevel) mip_levels = img->mip_levels - info->subresourceRange.baseMipLevel; array_size = info->subresourceRange.layerCount; if (array_size > img->array_size - info->subresourceRange.baseArrayLayer) array_size = img->array_size - info->subresourceRange.baseArrayLayer; view->obj.destroy = img_view_destroy; view->img = img; if (!(img->usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) { if (intel_gpu_gen(dev->gpu) >= INTEL_GEN(7.5)) { state_swizzles = info->components; view->shader_swizzles.r = VK_COMPONENT_SWIZZLE_R; view->shader_swizzles.g = VK_COMPONENT_SWIZZLE_G; view->shader_swizzles.b = VK_COMPONENT_SWIZZLE_B; view->shader_swizzles.a = VK_COMPONENT_SWIZZLE_A; } else { state_swizzles.r = VK_COMPONENT_SWIZZLE_R; state_swizzles.g = VK_COMPONENT_SWIZZLE_G; state_swizzles.b = VK_COMPONENT_SWIZZLE_B; state_swizzles.a = VK_COMPONENT_SWIZZLE_A; view->shader_swizzles = info->components; } /* shader_swizzles is ignored by the compiler */ if (view->shader_swizzles.r != VK_COMPONENT_SWIZZLE_R || view->shader_swizzles.g != VK_COMPONENT_SWIZZLE_G || view->shader_swizzles.b != VK_COMPONENT_SWIZZLE_B || view->shader_swizzles.a != VK_COMPONENT_SWIZZLE_A) { intel_dev_log(dev, VK_DEBUG_REPORT_WARNING_BIT_EXT, (struct intel_base*)view, 0, 0, "image data swizzling is ignored"); } if (intel_gpu_gen(dev->gpu) >= INTEL_GEN(7)) { surface_state_tex_gen7(dev->gpu, img, info->viewType, info->format, info->subresourceRange.baseMipLevel, mip_levels, info->subresourceRange.baseArrayLayer, array_size, state_swizzles, false, view->cmd); view->cmd_len = 8; } else { surface_state_tex_gen6(dev->gpu, img, info->viewType, info->format, info->subresourceRange.baseMipLevel, mip_levels, info->subresourceRange.baseArrayLayer, array_size, false, view->cmd); view->cmd_len = 6; } } }
VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout( VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) { const struct intel_img *img = intel_img(image); unsigned x, y; intel_layout_get_slice_pos(&img->layout, pSubresource->mipLevel, pSubresource->arrayLayer, &x, &y); intel_layout_pos_to_mem(&img->layout, x, y, &x, &y); pLayout->offset = intel_layout_mem_to_linear(&img->layout, x, y); pLayout->size = intel_layout_get_slice_size(&img->layout, pSubresource->mipLevel); pLayout->rowPitch = img->layout.bo_stride; pLayout->depthPitch = intel_layout_get_slice_stride(&img->layout, pSubresource->mipLevel); pLayout->arrayPitch = intel_layout_get_slice_stride(&img->layout, pSubresource->arrayLayer); }