panvk: Transition panvk_pipeline to panvk_priv_bo

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Constantine Shablya <constantine.shablya@collabora.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26698>
This commit is contained in:
Boris Brezillon
2023-12-11 15:15:02 +01:00
committed by Marge Bot
parent 57ea8e4a46
commit d09f388824
3 changed files with 18 additions and 25 deletions

View File

@@ -29,8 +29,6 @@
#include "panvk_cs.h"
#include "panvk_private.h"
#include "pan_bo.h"
#include "nir/nir.h"
#include "nir/nir_builder.h"
#include "spirv/nir_spirv.h"
@@ -47,7 +45,7 @@ panvk_DestroyPipeline(VkDevice _device, VkPipeline _pipeline,
VK_FROM_HANDLE(panvk_device, device, _device);
VK_FROM_HANDLE(panvk_pipeline, pipeline, _pipeline);
panfrost_bo_unreference(pipeline->binary_bo);
panfrost_bo_unreference(pipeline->state_bo);
panvk_priv_bo_destroy(pipeline->binary_bo, NULL);
panvk_priv_bo_destroy(pipeline->state_bo, NULL);
vk_object_free(&device->vk, pAllocator, pipeline);
}

View File

@@ -855,8 +855,8 @@ struct panvk_pipeline {
uint32_t dynamic_state_mask;
struct panfrost_bo *binary_bo;
struct panfrost_bo *state_bo;
struct panvk_priv_bo *binary_bo;
struct panvk_priv_bo *state_bo;
mali_ptr vpd;
mali_ptr rsds[MESA_SHADER_STAGES];

View File

@@ -29,8 +29,6 @@
#include "panvk_cs.h"
#include "panvk_private.h"
#include "pan_bo.h"
#include "nir/nir.h"
#include "nir/nir_builder.h"
#include "spirv/nir_spirv.h"
@@ -160,19 +158,18 @@ panvk_pipeline_builder_upload_shaders(struct panvk_pipeline_builder *builder,
if (builder->shader_total_size == 0)
return VK_SUCCESS;
struct panfrost_bo *bin_bo =
panfrost_bo_create(&builder->device->pdev,
builder->shader_total_size, PAN_BO_EXECUTE, "Shader");
struct panvk_priv_bo *bin_bo = panvk_priv_bo_create(
builder->device, builder->shader_total_size, PAN_KMOD_BO_FLAG_EXECUTABLE,
NULL, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
pipeline->binary_bo = bin_bo;
panfrost_bo_mmap(bin_bo);
for (uint32_t i = 0; i < MESA_SHADER_STAGES; i++) {
const struct panvk_shader *shader = builder->shaders[i];
if (!shader)
continue;
memcpy(pipeline->binary_bo->ptr.cpu + builder->stages[i].shader_offset,
memcpy(pipeline->binary_bo->addr.host + builder->stages[i].shader_offset,
util_dynarray_element(&shader->binary, uint8_t, 0),
util_dynarray_num_elements(&shader->binary, uint8_t));
}
@@ -184,7 +181,6 @@ static void
panvk_pipeline_builder_alloc_static_state_bo(
struct panvk_pipeline_builder *builder, struct panvk_pipeline *pipeline)
{
struct panfrost_device *pdev = &builder->device->pdev;
unsigned bo_size = 0;
for (uint32_t i = 0; i < MESA_SHADER_STAGES; i++) {
@@ -211,9 +207,8 @@ panvk_pipeline_builder_alloc_static_state_bo(
}
if (bo_size) {
pipeline->state_bo =
panfrost_bo_create(pdev, bo_size, 0, "Pipeline descriptors");
panfrost_bo_mmap(pipeline->state_bo);
pipeline->state_bo = panvk_priv_bo_create(
builder->device, bo_size, 0, NULL, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
}
}
@@ -259,14 +254,14 @@ panvk_pipeline_builder_init_shaders(struct panvk_pipeline_builder *builder,
/* Handle empty shaders gracefully */
if (util_dynarray_num_elements(&builder->shaders[i]->binary, uint8_t)) {
shader_ptr =
pipeline->binary_bo->ptr.gpu + builder->stages[i].shader_offset;
pipeline->binary_bo->addr.dev + builder->stages[i].shader_offset;
}
if (i != MESA_SHADER_FRAGMENT) {
void *rsd =
pipeline->state_bo->ptr.cpu + builder->stages[i].rsd_offset;
pipeline->state_bo->addr.host + builder->stages[i].rsd_offset;
mali_ptr gpu_rsd =
pipeline->state_bo->ptr.gpu + builder->stages[i].rsd_offset;
pipeline->state_bo->addr.dev + builder->stages[i].rsd_offset;
panvk_per_arch(emit_non_fs_rsd)(builder->device, &shader->info,
shader_ptr, rsd);
@@ -280,9 +275,9 @@ panvk_pipeline_builder_init_shaders(struct panvk_pipeline_builder *builder,
}
if (builder->create_info.gfx && !pipeline->fs.dynamic_rsd) {
void *rsd = pipeline->state_bo->ptr.cpu +
void *rsd = pipeline->state_bo->addr.host +
builder->stages[MESA_SHADER_FRAGMENT].rsd_offset;
mali_ptr gpu_rsd = pipeline->state_bo->ptr.gpu +
mali_ptr gpu_rsd = pipeline->state_bo->addr.dev +
builder->stages[MESA_SHADER_FRAGMENT].rsd_offset;
void *bd = rsd + pan_size(RENDERER_STATE);
@@ -320,11 +315,11 @@ panvk_pipeline_builder_parse_viewport(struct panvk_pipeline_builder *builder,
if (!builder->rasterizer_discard &&
panvk_pipeline_static_state(pipeline, VK_DYNAMIC_STATE_VIEWPORT) &&
panvk_pipeline_static_state(pipeline, VK_DYNAMIC_STATE_SCISSOR)) {
void *vpd = pipeline->state_bo->ptr.cpu + builder->vpd_offset;
void *vpd = pipeline->state_bo->addr.host + builder->vpd_offset;
panvk_per_arch(emit_viewport)(
builder->create_info.gfx->pViewportState->pViewports,
builder->create_info.gfx->pViewportState->pScissors, vpd);
pipeline->vpd = pipeline->state_bo->ptr.gpu + builder->vpd_offset;
pipeline->vpd = pipeline->state_bo->addr.dev + builder->vpd_offset;
}
if (panvk_pipeline_static_state(pipeline, VK_DYNAMIC_STATE_VIEWPORT))
pipeline->viewport =
@@ -666,7 +661,7 @@ panvk_pipeline_builder_init_fs_state(struct panvk_pipeline_builder *builder,
pipeline->fs.dynamic_rsd =
pipeline->dynamic_state_mask & PANVK_DYNAMIC_FS_RSD_MASK;
pipeline->fs.address = pipeline->binary_bo->ptr.gpu +
pipeline->fs.address = pipeline->binary_bo->addr.dev +
builder->stages[MESA_SHADER_FRAGMENT].shader_offset;
pipeline->fs.info = builder->shaders[MESA_SHADER_FRAGMENT]->info;
pipeline->fs.rt_mask = builder->active_color_attachments;