mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 04:50:11 +01:00
pvr: factor out pvr_rt_dataset to separate module
Acked-by: Frank Binns <frank.binns@imgtec.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38922>
This commit is contained in:
parent
9b3ab2c8cf
commit
5c70230c49
8 changed files with 167 additions and 122 deletions
|
|
@ -54,6 +54,7 @@ pvr_files = files(
|
|||
'pvr_query_compute.c',
|
||||
'pvr_queue.c',
|
||||
'pvr_robustness.c',
|
||||
'pvr_rt_dataset.c',
|
||||
'pvr_sampler.c',
|
||||
'pvr_spm.c',
|
||||
'pvr_tex_state.c',
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@
|
|||
#include "pvr_physical_device.h"
|
||||
#include "pvr_pipeline.h"
|
||||
#include "pvr_query.h"
|
||||
#include "pvr_rt_dataset.h"
|
||||
#include "pvr_tex_state.h"
|
||||
#include "pvr_types.h"
|
||||
#include "pvr_usc.h"
|
||||
|
|
|
|||
|
|
@ -637,20 +637,6 @@ void pvr_compute_update_kernel_private(
|
|||
VkResult pvr_add_query_program(struct pvr_cmd_buffer *cmd_buffer,
|
||||
const struct pvr_query_info *query_info);
|
||||
|
||||
static inline void
|
||||
pvr_render_targets_datasets_destroy(struct pvr_render_target *render_target)
|
||||
{
|
||||
u_foreach_bit (valid_idx, render_target->valid_mask) {
|
||||
struct pvr_rt_dataset *rt_dataset = render_target->rt_dataset[valid_idx];
|
||||
|
||||
if (rt_dataset && render_target->valid_mask & BITFIELD_BIT(valid_idx))
|
||||
pvr_render_target_dataset_destroy(rt_dataset);
|
||||
|
||||
render_target->rt_dataset[valid_idx] = NULL;
|
||||
render_target->valid_mask &= ~BITFIELD_BIT(valid_idx);
|
||||
}
|
||||
}
|
||||
|
||||
void pvr_reset_graphics_dirty_state(struct pvr_cmd_buffer *const cmd_buffer,
|
||||
bool start_geom);
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@
|
|||
#include "pvr_border.h"
|
||||
#include "pvr_buffer.h"
|
||||
#include "pvr_clear.h"
|
||||
#include "pvr_cmd_buffer.h"
|
||||
#include "pvr_csb.h"
|
||||
#include "pvr_csb_enum_helpers.h"
|
||||
#include "pvr_debug.h"
|
||||
|
|
@ -67,6 +66,7 @@
|
|||
#include "pvr_query.h"
|
||||
#include "pvr_queue.h"
|
||||
#include "pvr_robustness.h"
|
||||
#include "pvr_rt_dataset.h"
|
||||
#include "pvr_tex_state.h"
|
||||
#include "pvr_types.h"
|
||||
#include "pvr_usc.h"
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@
|
|||
#include "pvr_physical_device.h"
|
||||
#include "pvr_query.h"
|
||||
#include "pvr_rogue_fw.h"
|
||||
#include "pvr_rt_dataset.h"
|
||||
#include "pvr_types.h"
|
||||
#include "pvr_winsys.h"
|
||||
#include "util/compiler.h"
|
||||
|
|
@ -81,46 +82,6 @@ static_assert(ROGUE_NUM_CR_PDS_BGRND_WORDS == 3,
|
|||
|
||||
#define ROGUE_NUM_PT_ENTRIES_PER_PAGE 0x200U
|
||||
|
||||
struct pvr_rt_dataset {
|
||||
struct pvr_device *device;
|
||||
|
||||
/* RT dataset information */
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
uint32_t samples;
|
||||
uint32_t layers;
|
||||
|
||||
struct pvr_free_list *global_free_list;
|
||||
struct pvr_free_list *local_free_list;
|
||||
|
||||
struct pvr_bo *vheap_rtc_bo;
|
||||
pvr_dev_addr_t vheap_dev_addr;
|
||||
pvr_dev_addr_t rtc_dev_addr;
|
||||
|
||||
struct pvr_bo *tpc_bo;
|
||||
uint64_t tpc_stride;
|
||||
uint64_t tpc_size;
|
||||
|
||||
struct pvr_winsys_rt_dataset *ws_rt_dataset;
|
||||
|
||||
/* RT data information */
|
||||
struct pvr_bo *mta_bo;
|
||||
struct pvr_bo *mlist_bo;
|
||||
|
||||
struct pvr_bo *rgn_headers_bo;
|
||||
uint64_t rgn_headers_stride;
|
||||
|
||||
bool need_frag;
|
||||
|
||||
uint8_t rt_data_idx;
|
||||
|
||||
struct {
|
||||
pvr_dev_addr_t mta_dev_addr;
|
||||
pvr_dev_addr_t mlist_dev_addr;
|
||||
pvr_dev_addr_t rgn_headers_dev_addr;
|
||||
} rt_datas[ROGUE_NUM_RTDATAS];
|
||||
};
|
||||
|
||||
static inline void pvr_get_samples_in_xy(uint32_t samples,
|
||||
uint32_t *const x_out,
|
||||
uint32_t *const y_out)
|
||||
|
|
@ -286,14 +247,6 @@ static VkResult pvr_rt_vheap_rtc_data_init(struct pvr_device *device,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static void pvr_rt_vheap_rtc_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
rt_dataset->rtc_dev_addr = PVR_DEV_ADDR_INVALID;
|
||||
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->vheap_rtc_bo);
|
||||
rt_dataset->vheap_rtc_bo = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
pvr_rt_get_tail_ptr_stride_size(const struct pvr_device *device,
|
||||
const struct pvr_rt_mtile_info *mtile_info,
|
||||
|
|
@ -361,12 +314,6 @@ static VkResult pvr_rt_tpc_data_init(struct pvr_device *device,
|
|||
&rt_dataset->tpc_bo);
|
||||
}
|
||||
|
||||
static void pvr_rt_tpc_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->tpc_bo);
|
||||
rt_dataset->tpc_bo = NULL;
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
pvr_rt_get_mlist_size(const struct pvr_free_list *global_free_list,
|
||||
const struct pvr_free_list *local_free_list)
|
||||
|
|
@ -480,18 +427,6 @@ static VkResult pvr_rt_mta_data_init(struct pvr_device *device,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static void pvr_rt_mta_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
if (rt_dataset->mta_bo == NULL)
|
||||
return;
|
||||
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(rt_dataset->rt_datas); i++)
|
||||
rt_dataset->rt_datas[i].mta_dev_addr = PVR_DEV_ADDR_INVALID;
|
||||
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->mta_bo);
|
||||
rt_dataset->mta_bo = NULL;
|
||||
}
|
||||
|
||||
static VkResult
|
||||
pvr_rt_mlist_data_init(struct pvr_device *device,
|
||||
struct pvr_rt_dataset *rt_dataset,
|
||||
|
|
@ -527,15 +462,6 @@ pvr_rt_mlist_data_init(struct pvr_device *device,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static void pvr_rt_mlist_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(rt_dataset->rt_datas); i++)
|
||||
rt_dataset->rt_datas[i].mlist_dev_addr = PVR_DEV_ADDR_INVALID;
|
||||
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->mlist_bo);
|
||||
rt_dataset->mlist_bo = NULL;
|
||||
}
|
||||
|
||||
static VkResult
|
||||
pvr_rt_rgn_headers_data_init(struct pvr_device *device,
|
||||
struct pvr_rt_dataset *rt_dataset,
|
||||
|
|
@ -572,15 +498,6 @@ pvr_rt_rgn_headers_data_init(struct pvr_device *device,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static void pvr_rt_rgn_headers_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(rt_dataset->rt_datas); i++)
|
||||
rt_dataset->rt_datas[i].rgn_headers_dev_addr = PVR_DEV_ADDR_INVALID;
|
||||
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->rgn_headers_bo);
|
||||
rt_dataset->rgn_headers_bo = NULL;
|
||||
}
|
||||
|
||||
static VkResult pvr_rt_datas_init(struct pvr_device *device,
|
||||
struct pvr_rt_dataset *rt_dataset,
|
||||
const struct pvr_free_list *global_free_list,
|
||||
|
|
@ -617,13 +534,6 @@ err_pvr_rt_mta_data_fini:
|
|||
return result;
|
||||
}
|
||||
|
||||
static void pvr_rt_datas_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
pvr_rt_rgn_headers_data_fini(rt_dataset);
|
||||
pvr_rt_mlist_data_fini(rt_dataset);
|
||||
pvr_rt_mta_data_fini(rt_dataset);
|
||||
}
|
||||
|
||||
static void pvr_rt_dataset_ws_create_info_init(
|
||||
struct pvr_rt_dataset *rt_dataset,
|
||||
const struct pvr_rt_mtile_info *mtile_info,
|
||||
|
|
@ -807,21 +717,6 @@ err_vk_free_rt_dataset:
|
|||
return result;
|
||||
}
|
||||
|
||||
void pvr_render_target_dataset_destroy(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
struct pvr_device *device = rt_dataset->device;
|
||||
|
||||
device->ws->ops->render_target_dataset_destroy(rt_dataset->ws_rt_dataset);
|
||||
|
||||
pvr_rt_datas_fini(rt_dataset);
|
||||
pvr_rt_tpc_data_fini(rt_dataset);
|
||||
pvr_rt_vheap_rtc_data_fini(rt_dataset);
|
||||
|
||||
pvr_free_list_destroy(rt_dataset->local_free_list);
|
||||
|
||||
vk_free(&device->vk.alloc, rt_dataset);
|
||||
}
|
||||
|
||||
static void pvr_geom_state_stream_init(struct pvr_render_ctx *ctx,
|
||||
struct pvr_render_job *job,
|
||||
struct pvr_winsys_geometry_state *state)
|
||||
|
|
|
|||
|
|
@ -178,7 +178,6 @@ pvr_render_target_dataset_create(struct pvr_device *device,
|
|||
uint32_t samples,
|
||||
uint32_t layers,
|
||||
struct pvr_rt_dataset **const rt_dataset_out);
|
||||
void pvr_render_target_dataset_destroy(struct pvr_rt_dataset *dataset);
|
||||
|
||||
VkResult pvr_render_job_submit(struct pvr_render_ctx *ctx,
|
||||
struct pvr_render_job *job,
|
||||
|
|
|
|||
76
src/imagination/vulkan/pvr_rt_dataset.c
Normal file
76
src/imagination/vulkan/pvr_rt_dataset.c
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* Copyright © 2023 Imagination Technologies Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "pvr_rt_dataset.h"
|
||||
|
||||
#include "pvr_device.h"
|
||||
#include "pvr_free_list.h"
|
||||
|
||||
static void pvr_rt_rgn_headers_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(rt_dataset->rt_datas); i++)
|
||||
rt_dataset->rt_datas[i].rgn_headers_dev_addr = PVR_DEV_ADDR_INVALID;
|
||||
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->rgn_headers_bo);
|
||||
rt_dataset->rgn_headers_bo = NULL;
|
||||
}
|
||||
|
||||
void pvr_rt_mlist_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(rt_dataset->rt_datas); i++)
|
||||
rt_dataset->rt_datas[i].mlist_dev_addr = PVR_DEV_ADDR_INVALID;
|
||||
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->mlist_bo);
|
||||
rt_dataset->mlist_bo = NULL;
|
||||
}
|
||||
|
||||
void pvr_rt_mta_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
if (rt_dataset->mta_bo == NULL)
|
||||
return;
|
||||
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(rt_dataset->rt_datas); i++)
|
||||
rt_dataset->rt_datas[i].mta_dev_addr = PVR_DEV_ADDR_INVALID;
|
||||
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->mta_bo);
|
||||
rt_dataset->mta_bo = NULL;
|
||||
}
|
||||
|
||||
void pvr_rt_datas_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
pvr_rt_rgn_headers_data_fini(rt_dataset);
|
||||
pvr_rt_mlist_data_fini(rt_dataset);
|
||||
pvr_rt_mta_data_fini(rt_dataset);
|
||||
}
|
||||
|
||||
void pvr_rt_tpc_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->tpc_bo);
|
||||
rt_dataset->tpc_bo = NULL;
|
||||
}
|
||||
|
||||
void pvr_rt_vheap_rtc_data_fini(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
rt_dataset->rtc_dev_addr = PVR_DEV_ADDR_INVALID;
|
||||
|
||||
pvr_bo_free(rt_dataset->device, rt_dataset->vheap_rtc_bo);
|
||||
rt_dataset->vheap_rtc_bo = NULL;
|
||||
}
|
||||
|
||||
void pvr_render_target_dataset_destroy(struct pvr_rt_dataset *rt_dataset)
|
||||
{
|
||||
struct pvr_device *device = rt_dataset->device;
|
||||
|
||||
device->ws->ops->render_target_dataset_destroy(rt_dataset->ws_rt_dataset);
|
||||
|
||||
pvr_rt_datas_fini(rt_dataset);
|
||||
pvr_rt_tpc_data_fini(rt_dataset);
|
||||
pvr_rt_vheap_rtc_data_fini(rt_dataset);
|
||||
|
||||
pvr_free_list_destroy(rt_dataset->local_free_list);
|
||||
|
||||
vk_free(&device->vk.alloc, rt_dataset);
|
||||
}
|
||||
87
src/imagination/vulkan/pvr_rt_dataset.h
Normal file
87
src/imagination/vulkan/pvr_rt_dataset.h
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Copyright © 2023 Imagination Technologies Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef PVR_RT_DATASET_H
|
||||
#define PVR_RT_DATASET_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "util/bitscan.h"
|
||||
|
||||
#include "pvr_framebuffer.h"
|
||||
#include "pvr_rogue_fw.h"
|
||||
#include "pvr_types.h"
|
||||
|
||||
struct pvr_bo;
|
||||
struct pvr_device;
|
||||
struct pvr_free_list;
|
||||
struct pvr_winsys_rt_dataset;
|
||||
|
||||
struct pvr_rt_dataset {
|
||||
struct pvr_device *device;
|
||||
|
||||
/* RT dataset information */
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
uint32_t samples;
|
||||
uint32_t layers;
|
||||
|
||||
struct pvr_free_list *global_free_list;
|
||||
struct pvr_free_list *local_free_list;
|
||||
|
||||
struct pvr_bo *vheap_rtc_bo;
|
||||
pvr_dev_addr_t vheap_dev_addr;
|
||||
pvr_dev_addr_t rtc_dev_addr;
|
||||
|
||||
struct pvr_bo *tpc_bo;
|
||||
uint64_t tpc_stride;
|
||||
uint64_t tpc_size;
|
||||
|
||||
struct pvr_winsys_rt_dataset *ws_rt_dataset;
|
||||
|
||||
/* RT data information */
|
||||
struct pvr_bo *mta_bo;
|
||||
struct pvr_bo *mlist_bo;
|
||||
|
||||
struct pvr_bo *rgn_headers_bo;
|
||||
uint64_t rgn_headers_stride;
|
||||
|
||||
bool need_frag;
|
||||
|
||||
uint8_t rt_data_idx;
|
||||
|
||||
struct {
|
||||
pvr_dev_addr_t mta_dev_addr;
|
||||
pvr_dev_addr_t mlist_dev_addr;
|
||||
pvr_dev_addr_t rgn_headers_dev_addr;
|
||||
} rt_datas[ROGUE_NUM_RTDATAS];
|
||||
};
|
||||
|
||||
void pvr_rt_datas_fini(struct pvr_rt_dataset *rt_dataset);
|
||||
void pvr_rt_mlist_data_fini(struct pvr_rt_dataset *rt_dataset);
|
||||
void pvr_rt_mta_data_fini(struct pvr_rt_dataset *rt_dataset);
|
||||
|
||||
void pvr_rt_tpc_data_fini(struct pvr_rt_dataset *rt_dataset);
|
||||
void pvr_rt_vheap_rtc_data_fini(struct pvr_rt_dataset *rt_dataset);
|
||||
|
||||
void pvr_render_target_dataset_destroy(struct pvr_rt_dataset *rt_dataset);
|
||||
|
||||
static inline void
|
||||
pvr_render_targets_datasets_destroy(struct pvr_render_target *render_target)
|
||||
{
|
||||
u_foreach_bit (valid_idx, render_target->valid_mask) {
|
||||
struct pvr_rt_dataset *rt_dataset = render_target->rt_dataset[valid_idx];
|
||||
|
||||
if (rt_dataset && render_target->valid_mask & BITFIELD_BIT(valid_idx))
|
||||
pvr_render_target_dataset_destroy(rt_dataset);
|
||||
|
||||
render_target->rt_dataset[valid_idx] = NULL;
|
||||
render_target->valid_mask &= ~BITFIELD_BIT(valid_idx);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* PVR_RT_DATASET_H */
|
||||
Loading…
Add table
Reference in a new issue