panvk: Add a render state to panvk_cmd_graphics_state
We will store information extracted from VkRenderingInfo there instead of abusing the fb state, which is now part of the render state. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29443>
This commit is contained in:
@@ -138,11 +138,14 @@ struct panvk_cmd_graphics_state {
|
||||
VkFormat fmts[MAX_RTS];
|
||||
uint8_t samples[MAX_RTS];
|
||||
} color_attachments;
|
||||
struct pan_fb_info info;
|
||||
bool crc_valid[MAX_RTS];
|
||||
uint32_t bo_count;
|
||||
struct pan_kmod_bo *bos[MAX_RTS + 2];
|
||||
} fb;
|
||||
|
||||
struct {
|
||||
struct pan_fb_info info;
|
||||
bool crc_valid[MAX_RTS];
|
||||
uint32_t bo_count;
|
||||
struct pan_kmod_bo *bos[MAX_RTS + 2];
|
||||
} fb;
|
||||
} render;
|
||||
|
||||
mali_ptr vpd;
|
||||
};
|
||||
|
@@ -128,7 +128,7 @@ panvk_debug_adjust_bo_flags(const struct panvk_device *device,
|
||||
static void
|
||||
panvk_cmd_prepare_fragment_job(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
const struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
const struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
struct panvk_batch *batch = cmdbuf->cur_batch;
|
||||
struct panfrost_ptr job_ptr =
|
||||
pan_pool_alloc_desc(&cmdbuf->desc_pool.base, FRAGMENT_JOB);
|
||||
@@ -146,7 +146,7 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf)
|
||||
if (!batch)
|
||||
return;
|
||||
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
|
||||
assert(batch);
|
||||
|
||||
@@ -183,7 +183,7 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf)
|
||||
if (batch->jc.first_tiler) {
|
||||
ASSERTED unsigned num_preload_jobs =
|
||||
GENX(pan_preload_fb)(&dev->meta.blitter.cache, &cmdbuf->desc_pool.base,
|
||||
&batch->jc, &cmdbuf->state.gfx.fb.info,
|
||||
&batch->jc, &cmdbuf->state.gfx.render.fb.info,
|
||||
batch->tls.gpu, batch->tiler.ctx_desc.gpu, NULL);
|
||||
|
||||
assert(num_preload_jobs == 0);
|
||||
@@ -219,7 +219,7 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf)
|
||||
pan_sample_pattern(fbinfo->nr_samples));
|
||||
|
||||
batch->fb.desc.gpu |=
|
||||
GENX(pan_emit_fbd)(&cmdbuf->state.gfx.fb.info, &batch->tlsinfo,
|
||||
GENX(pan_emit_fbd)(&cmdbuf->state.gfx.render.fb.info, &batch->tlsinfo,
|
||||
&batch->tiler.ctx, batch->fb.desc.cpu);
|
||||
|
||||
panvk_cmd_prepare_fragment_job(cmdbuf);
|
||||
@@ -236,19 +236,19 @@ panvk_per_arch(cmd_alloc_fb_desc)(struct panvk_cmd_buffer *cmdbuf)
|
||||
if (batch->fb.desc.gpu)
|
||||
return;
|
||||
|
||||
const struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
const struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
bool has_zs_ext = fbinfo->zs.view.zs || fbinfo->zs.view.s;
|
||||
|
||||
batch->fb.bo_count = cmdbuf->state.gfx.fb.bo_count;
|
||||
memcpy(batch->fb.bos, cmdbuf->state.gfx.fb.bos,
|
||||
batch->fb.bo_count = cmdbuf->state.gfx.render.fb.bo_count;
|
||||
memcpy(batch->fb.bos, cmdbuf->state.gfx.render.fb.bos,
|
||||
batch->fb.bo_count * sizeof(batch->fb.bos[0]));
|
||||
batch->fb.desc = pan_pool_alloc_desc_aggregate(
|
||||
&cmdbuf->desc_pool.base, PAN_DESC(FRAMEBUFFER),
|
||||
PAN_DESC_ARRAY(has_zs_ext ? 1 : 0, ZS_CRC_EXTENSION),
|
||||
PAN_DESC_ARRAY(MAX2(fbinfo->rt_count, 1), RENDER_TARGET));
|
||||
|
||||
memset(&cmdbuf->state.gfx.fb.info.bifrost.pre_post.dcds, 0,
|
||||
sizeof(cmdbuf->state.gfx.fb.info.bifrost.pre_post.dcds));
|
||||
memset(&cmdbuf->state.gfx.render.fb.info.bifrost.pre_post.dcds, 0,
|
||||
sizeof(cmdbuf->state.gfx.render.fb.info.bifrost.pre_post.dcds));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -537,14 +537,14 @@ panvk_cmd_prepare_samplers(struct panvk_cmd_buffer *cmdbuf,
|
||||
static bool
|
||||
has_depth_att(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
return (cmdbuf->state.gfx.fb.bound_attachments &
|
||||
return (cmdbuf->state.gfx.render.bound_attachments &
|
||||
MESA_VK_RP_ATTACHMENT_DEPTH_BIT) != 0;
|
||||
}
|
||||
|
||||
static bool
|
||||
has_stencil_att(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
return (cmdbuf->state.gfx.fb.bound_attachments &
|
||||
return (cmdbuf->state.gfx.render.bound_attachments &
|
||||
MESA_VK_RP_ATTACHMENT_STENCIL_BIT) != 0;
|
||||
}
|
||||
|
||||
@@ -716,8 +716,8 @@ panvk_draw_prepare_fs_rsd(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct mali_blend_packed *bds = ptr.cpu + pan_size(RENDERER_STATE);
|
||||
|
||||
panvk_per_arch(blend_emit_descs)(
|
||||
dev, cb, cmdbuf->state.gfx.fb.color_attachments.fmts,
|
||||
cmdbuf->state.gfx.fb.color_attachments.samples, fs_info,
|
||||
dev, cb, cmdbuf->state.gfx.render.color_attachments.fmts,
|
||||
cmdbuf->state.gfx.render.color_attachments.samples, fs_info,
|
||||
pipeline->fs.code, bds, &blend_reads_dest,
|
||||
&blend_shader_loads_blend_const);
|
||||
|
||||
@@ -735,7 +735,7 @@ panvk_draw_prepare_fs_rsd(struct panvk_cmd_buffer *cmdbuf,
|
||||
}
|
||||
|
||||
uint8_t rt_written = fs_info->outputs_written >> FRAG_RESULT_DATA0;
|
||||
uint8_t rt_mask = cmdbuf->state.gfx.fb.bound_attachments &
|
||||
uint8_t rt_mask = cmdbuf->state.gfx.render.bound_attachments &
|
||||
MESA_VK_RP_ATTACHMENT_ANY_COLOR_BITS;
|
||||
cfg.properties.allow_forward_pixel_to_kill =
|
||||
fs_info->fs.can_fpk && !(rt_mask & ~rt_written) &&
|
||||
@@ -822,7 +822,7 @@ void
|
||||
panvk_per_arch(cmd_prepare_tiler_context)(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
struct panvk_batch *batch = cmdbuf->cur_batch;
|
||||
|
||||
if (batch->tiler.ctx_desc.cpu)
|
||||
@@ -1456,24 +1456,24 @@ panvk_draw_prepare_tiler_job(struct panvk_cmd_buffer *cmdbuf,
|
||||
static void
|
||||
panvk_cmd_preload_fb_after_batch_split(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
for (unsigned i = 0; i < cmdbuf->state.gfx.fb.info.rt_count; i++) {
|
||||
if (cmdbuf->state.gfx.fb.info.rts[i].view) {
|
||||
cmdbuf->state.gfx.fb.info.rts[i].clear = false;
|
||||
cmdbuf->state.gfx.fb.info.rts[i].preload = true;
|
||||
for (unsigned i = 0; i < cmdbuf->state.gfx.render.fb.info.rt_count; i++) {
|
||||
if (cmdbuf->state.gfx.render.fb.info.rts[i].view) {
|
||||
cmdbuf->state.gfx.render.fb.info.rts[i].clear = false;
|
||||
cmdbuf->state.gfx.render.fb.info.rts[i].preload = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (cmdbuf->state.gfx.fb.info.zs.view.zs) {
|
||||
cmdbuf->state.gfx.fb.info.zs.clear.z = false;
|
||||
cmdbuf->state.gfx.fb.info.zs.preload.z = true;
|
||||
if (cmdbuf->state.gfx.render.fb.info.zs.view.zs) {
|
||||
cmdbuf->state.gfx.render.fb.info.zs.clear.z = false;
|
||||
cmdbuf->state.gfx.render.fb.info.zs.preload.z = true;
|
||||
}
|
||||
|
||||
if (cmdbuf->state.gfx.fb.info.zs.view.s ||
|
||||
(cmdbuf->state.gfx.fb.info.zs.view.zs &&
|
||||
if (cmdbuf->state.gfx.render.fb.info.zs.view.s ||
|
||||
(cmdbuf->state.gfx.render.fb.info.zs.view.zs &&
|
||||
util_format_is_depth_and_stencil(
|
||||
cmdbuf->state.gfx.fb.info.zs.view.zs->format))) {
|
||||
cmdbuf->state.gfx.fb.info.zs.clear.s = false;
|
||||
cmdbuf->state.gfx.fb.info.zs.preload.s = true;
|
||||
cmdbuf->state.gfx.render.fb.info.zs.view.zs->format))) {
|
||||
cmdbuf->state.gfx.render.fb.info.zs.clear.s = false;
|
||||
cmdbuf->state.gfx.render.fb.info.zs.preload.s = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2016,22 +2016,23 @@ panvk_per_arch(CmdDispatch)(VkCommandBuffer commandBuffer, uint32_t x,
|
||||
}
|
||||
|
||||
static void
|
||||
panvk_cmd_begin_rendering_init_fbinfo(struct panvk_cmd_buffer *cmdbuf,
|
||||
const VkRenderingInfo *pRenderingInfo)
|
||||
panvk_cmd_begin_rendering_init_state(struct panvk_cmd_buffer *cmdbuf,
|
||||
const VkRenderingInfo *pRenderingInfo)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
uint32_t att_width = 0, att_height = 0;
|
||||
|
||||
cmdbuf->state.gfx.fb.bo_count = 0;
|
||||
memset(cmdbuf->state.gfx.fb.bos, 0, sizeof(cmdbuf->state.gfx.fb.bos));
|
||||
memset(cmdbuf->state.gfx.fb.crc_valid, 0,
|
||||
sizeof(cmdbuf->state.gfx.fb.crc_valid));
|
||||
memset(&cmdbuf->state.gfx.fb.color_attachments, 0,
|
||||
sizeof(cmdbuf->state.gfx.fb.color_attachments));
|
||||
cmdbuf->state.gfx.fb.bound_attachments = 0;
|
||||
cmdbuf->state.gfx.render.fb.bo_count = 0;
|
||||
memset(cmdbuf->state.gfx.render.fb.bos, 0,
|
||||
sizeof(cmdbuf->state.gfx.render.fb.bos));
|
||||
memset(cmdbuf->state.gfx.render.fb.crc_valid, 0,
|
||||
sizeof(cmdbuf->state.gfx.render.fb.crc_valid));
|
||||
memset(&cmdbuf->state.gfx.render.color_attachments, 0,
|
||||
sizeof(cmdbuf->state.gfx.render.color_attachments));
|
||||
cmdbuf->state.gfx.render.bound_attachments = 0;
|
||||
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
@@ -2054,18 +2055,19 @@ panvk_cmd_begin_rendering_init_fbinfo(struct panvk_cmd_buffer *cmdbuf,
|
||||
const VkExtent3D iview_size =
|
||||
vk_image_mip_level_extent(&img->vk, iview->vk.base_mip_level);
|
||||
|
||||
cmdbuf->state.gfx.fb.bound_attachments |=
|
||||
cmdbuf->state.gfx.render.bound_attachments |=
|
||||
MESA_VK_RP_ATTACHMENT_COLOR_BIT(i);
|
||||
cmdbuf->state.gfx.fb.color_attachments.fmts[i] = iview->vk.format;
|
||||
cmdbuf->state.gfx.fb.color_attachments.samples[i] = img->vk.samples;
|
||||
cmdbuf->state.gfx.render.color_attachments.fmts[i] = iview->vk.format;
|
||||
cmdbuf->state.gfx.render.color_attachments.samples[i] = img->vk.samples;
|
||||
att_width = MAX2(iview_size.width, att_width);
|
||||
att_height = MAX2(iview_size.height, att_height);
|
||||
|
||||
assert(att->resolveMode == VK_RESOLVE_MODE_NONE);
|
||||
|
||||
cmdbuf->state.gfx.fb.bos[cmdbuf->state.gfx.fb.bo_count++] = img->bo;
|
||||
cmdbuf->state.gfx.render.fb.bos[cmdbuf->state.gfx.render.fb.bo_count++] =
|
||||
img->bo;
|
||||
fbinfo->rts[i].view = &iview->pview;
|
||||
fbinfo->rts[i].crc_valid = &cmdbuf->state.gfx.fb.crc_valid[i];
|
||||
fbinfo->rts[i].crc_valid = &cmdbuf->state.gfx.render.fb.crc_valid[i];
|
||||
fbinfo->nr_samples =
|
||||
MAX2(fbinfo->nr_samples, pan_image_view_get_nr_samples(&iview->pview));
|
||||
|
||||
@@ -2091,13 +2093,15 @@ panvk_cmd_begin_rendering_init_fbinfo(struct panvk_cmd_buffer *cmdbuf,
|
||||
const VkExtent3D iview_size =
|
||||
vk_image_mip_level_extent(&img->vk, iview->vk.base_mip_level);
|
||||
|
||||
cmdbuf->state.gfx.fb.bound_attachments |= MESA_VK_RP_ATTACHMENT_DEPTH_BIT;
|
||||
cmdbuf->state.gfx.render.bound_attachments |=
|
||||
MESA_VK_RP_ATTACHMENT_DEPTH_BIT;
|
||||
att_width = MAX2(iview_size.width, att_width);
|
||||
att_height = MAX2(iview_size.height, att_height);
|
||||
|
||||
assert(att->resolveMode == VK_RESOLVE_MODE_NONE);
|
||||
|
||||
cmdbuf->state.gfx.fb.bos[cmdbuf->state.gfx.fb.bo_count++] = img->bo;
|
||||
cmdbuf->state.gfx.render.fb.bos[cmdbuf->state.gfx.render.fb.bo_count++] =
|
||||
img->bo;
|
||||
fbinfo->zs.view.zs = &iview->pview;
|
||||
|
||||
if (att->loadOp == VK_ATTACHMENT_LOAD_OP_CLEAR) {
|
||||
@@ -2117,14 +2121,15 @@ panvk_cmd_begin_rendering_init_fbinfo(struct panvk_cmd_buffer *cmdbuf,
|
||||
const VkExtent3D iview_size =
|
||||
vk_image_mip_level_extent(&img->vk, iview->vk.base_mip_level);
|
||||
|
||||
cmdbuf->state.gfx.fb.bound_attachments |=
|
||||
cmdbuf->state.gfx.render.bound_attachments |=
|
||||
MESA_VK_RP_ATTACHMENT_STENCIL_BIT;
|
||||
att_width = MAX2(iview_size.width, att_width);
|
||||
att_height = MAX2(iview_size.height, att_height);
|
||||
|
||||
assert(att->resolveMode == VK_RESOLVE_MODE_NONE);
|
||||
|
||||
cmdbuf->state.gfx.fb.bos[cmdbuf->state.gfx.fb.bo_count++] = img->bo;
|
||||
cmdbuf->state.gfx.render.fb.bos[cmdbuf->state.gfx.render.fb.bo_count++] =
|
||||
img->bo;
|
||||
fbinfo->zs.view.s =
|
||||
&iview->pview != fbinfo->zs.view.zs ? &iview->pview : NULL;
|
||||
|
||||
@@ -2141,7 +2146,7 @@ panvk_cmd_begin_rendering_init_fbinfo(struct panvk_cmd_buffer *cmdbuf,
|
||||
fbinfo->height = pRenderingInfo->renderArea.offset.y +
|
||||
pRenderingInfo->renderArea.extent.height;
|
||||
|
||||
if (cmdbuf->state.gfx.fb.bound_attachments) {
|
||||
if (cmdbuf->state.gfx.render.bound_attachments) {
|
||||
/* We need the rendering area to be aligned on a 32x32 section for tile
|
||||
* buffer preloading to work correctly.
|
||||
*/
|
||||
@@ -2164,7 +2169,7 @@ panvk_per_arch(CmdBeginRendering)(VkCommandBuffer commandBuffer,
|
||||
{
|
||||
VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
|
||||
|
||||
panvk_cmd_begin_rendering_init_fbinfo(cmdbuf, pRenderingInfo);
|
||||
panvk_cmd_begin_rendering_init_state(cmdbuf, pRenderingInfo);
|
||||
panvk_per_arch(cmd_open_batch)(cmdbuf);
|
||||
}
|
||||
|
||||
|
@@ -41,7 +41,7 @@ panvk_meta_blit(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
struct pan_blit_context ctx;
|
||||
struct pan_image_view views[2] = {
|
||||
{
|
||||
@@ -100,8 +100,8 @@ panvk_meta_blit(struct panvk_cmd_buffer *cmdbuf,
|
||||
fbinfo->rt_count = 1;
|
||||
fbinfo->rts[0].view = &views[0];
|
||||
fbinfo->rts[0].preload = true;
|
||||
cmdbuf->state.gfx.fb.crc_valid[0] = false;
|
||||
fbinfo->rts[0].crc_valid = &cmdbuf->state.gfx.fb.crc_valid[0];
|
||||
cmdbuf->state.gfx.render.fb.crc_valid[0] = false;
|
||||
fbinfo->rts[0].crc_valid = &cmdbuf->state.gfx.render.fb.crc_valid[0];
|
||||
}
|
||||
|
||||
if (blitinfo->dst.planes[1].format != PIPE_FORMAT_NONE) {
|
||||
|
@@ -263,7 +263,8 @@ panvk_meta_clear_attachment(struct panvk_cmd_buffer *cmdbuf, unsigned rt,
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_meta *meta = &dev->meta;
|
||||
struct panvk_batch *batch = cmdbuf->cur_batch;
|
||||
enum pipe_format pfmt = cmdbuf->state.gfx.fb.info.rts[rt].view->format;
|
||||
enum pipe_format pfmt =
|
||||
cmdbuf->state.gfx.render.fb.info.rts[rt].view->format;
|
||||
unsigned minx = MAX2(clear_rect->rect.offset.x, 0);
|
||||
unsigned miny = MAX2(clear_rect->rect.offset.y, 0);
|
||||
unsigned maxx =
|
||||
@@ -325,7 +326,7 @@ panvk_meta_clear_color_img(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
struct pan_image_view view = {
|
||||
.format = img->pimage.layout.format,
|
||||
.dim = MALI_TEXTURE_DIMENSION_2D,
|
||||
@@ -335,14 +336,14 @@ panvk_meta_clear_color_img(struct panvk_cmd_buffer *cmdbuf,
|
||||
PIPE_SWIZZLE_W},
|
||||
};
|
||||
|
||||
cmdbuf->state.gfx.fb.crc_valid[0] = false;
|
||||
cmdbuf->state.gfx.render.fb.crc_valid[0] = false;
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.nr_samples = img->pimage.layout.nr_samples,
|
||||
.rt_count = 1,
|
||||
.rts[0].view = &view,
|
||||
.rts[0].clear = true,
|
||||
.rts[0].crc_valid = &cmdbuf->state.gfx.fb.crc_valid[0],
|
||||
.rts[0].crc_valid = &cmdbuf->state.gfx.render.fb.crc_valid[0],
|
||||
};
|
||||
|
||||
uint32_t clearval[4];
|
||||
@@ -398,7 +399,7 @@ panvk_meta_clear_zs_img(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
struct pan_image_view view = {
|
||||
.format = img->pimage.layout.format,
|
||||
.dim = MALI_TEXTURE_DIMENSION_2D,
|
||||
@@ -408,7 +409,7 @@ panvk_meta_clear_zs_img(struct panvk_cmd_buffer *cmdbuf,
|
||||
PIPE_SWIZZLE_W},
|
||||
};
|
||||
|
||||
cmdbuf->state.gfx.fb.crc_valid[0] = false;
|
||||
cmdbuf->state.gfx.render.fb.crc_valid[0] = false;
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.nr_samples = img->pimage.layout.nr_samples,
|
||||
|
@@ -563,7 +563,7 @@ panvk_meta_copy_img2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
struct panvk_meta_copy_img2img_format_info key = {
|
||||
.srcfmt = panvk_meta_copy_img_format(src->pimage.layout.format),
|
||||
.dstfmt = panvk_meta_copy_img_format(dst->pimage.layout.format),
|
||||
@@ -629,7 +629,7 @@ panvk_meta_copy_img2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
u_minify(dst->pimage.layout.width, region->dstSubresource.mipLevel);
|
||||
unsigned height =
|
||||
u_minify(dst->pimage.layout.height, region->dstSubresource.mipLevel);
|
||||
cmdbuf->state.gfx.fb.crc_valid[0] = false;
|
||||
cmdbuf->state.gfx.render.fb.crc_valid[0] = false;
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.width = width,
|
||||
@@ -642,7 +642,7 @@ panvk_meta_copy_img2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
.rt_count = 1,
|
||||
.rts[0].view = &dstview,
|
||||
.rts[0].preload = true,
|
||||
.rts[0].crc_valid = &cmdbuf->state.gfx.fb.crc_valid[0],
|
||||
.rts[0].crc_valid = &cmdbuf->state.gfx.render.fb.crc_valid[0],
|
||||
};
|
||||
|
||||
mali_ptr texture =
|
||||
@@ -1011,7 +1011,7 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.fb.info;
|
||||
struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info;
|
||||
unsigned minx = MAX2(region->imageOffset.x, 0);
|
||||
unsigned miny = MAX2(region->imageOffset.y, 0);
|
||||
unsigned maxx =
|
||||
@@ -1062,7 +1062,7 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
};
|
||||
|
||||
/* TODO: don't force preloads of dst resources if unneeded */
|
||||
cmdbuf->state.gfx.fb.crc_valid[0] = false;
|
||||
cmdbuf->state.gfx.render.fb.crc_valid[0] = false;
|
||||
*fbinfo = (struct pan_fb_info){
|
||||
.tile_buf_budget = panfrost_query_optimal_tib_size(phys_dev->model),
|
||||
.width =
|
||||
@@ -1077,7 +1077,7 @@ panvk_meta_copy_buf2img(struct panvk_cmd_buffer *cmdbuf,
|
||||
.rt_count = 1,
|
||||
.rts[0].view = &view,
|
||||
.rts[0].preload = true,
|
||||
.rts[0].crc_valid = &cmdbuf->state.gfx.fb.crc_valid[0],
|
||||
.rts[0].crc_valid = &cmdbuf->state.gfx.render.fb.crc_valid[0],
|
||||
};
|
||||
|
||||
panvk_per_arch(cmd_close_batch)(cmdbuf);
|
||||
|
Reference in New Issue
Block a user