diff --git a/src/panfrost/vulkan/panvk_pipeline.c b/src/panfrost/vulkan/panvk_pipeline.c index 3e848fbdcb1..2adf321dca2 100644 --- a/src/panfrost/vulkan/panvk_pipeline.c +++ b/src/panfrost/vulkan/panvk_pipeline.c @@ -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); } diff --git a/src/panfrost/vulkan/panvk_private.h b/src/panfrost/vulkan/panvk_private.h index b84c461a2db..e79debb8929 100644 --- a/src/panfrost/vulkan/panvk_private.h +++ b/src/panfrost/vulkan/panvk_private.h @@ -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]; diff --git a/src/panfrost/vulkan/panvk_vX_pipeline.c b/src/panfrost/vulkan/panvk_vX_pipeline.c index b07584db835..99e7fbb1020 100644 --- a/src/panfrost/vulkan/panvk_vX_pipeline.c +++ b/src/panfrost/vulkan/panvk_vX_pipeline.c @@ -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;