Ejemplo n.º 1
0
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);
    }
}
Ejemplo n.º 2
0
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;
        }
    }
}
Ejemplo n.º 3
0
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);
}