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:

committed by
Marge Bot

parent
57ea8e4a46
commit
d09f388824
@@ -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);
|
||||
}
|
||||
|
@@ -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];
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user