mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-10 03:28:18 +02:00
pan/desc: Implement pan_emit_fbd for v14+
Also, modify pan_emit_fbd's signature to take a pointer to pan_fbd_descs. Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41081>
This commit is contained in:
parent
9421888623
commit
af35fc44a7
4 changed files with 141 additions and 48 deletions
|
|
@ -754,11 +754,30 @@ GENX(csf_preload_fb)(struct panfrost_batch *batch, struct pan_fb_info *fb)
|
||||||
(&dev->fb_preload_cache, &batch->pool.base, fb, batch->tls.gpu, NULL);
|
(&dev->fb_preload_cache, &batch->pool.base, fb, batch->tls.gpu, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GET_FBD(_ctx, _pass) \
|
static inline void
|
||||||
(_ctx)->fbds[PAN_INCREMENTAL_RENDERING_##_pass##_PASS]
|
emit_ir_fbd(struct pan_csf_tiler_oom_ctx *ctx, enum pan_rendering_pass pass,
|
||||||
#define EMIT_FBD(_ctx, _pass, _fb, _tls, _tiler_ctx) \
|
const struct pan_fb_info *fb, const struct pan_tls_info *tls,
|
||||||
GET_FBD(_ctx, _pass).gpu |= \
|
const struct pan_tiler_context *tiler_ctx, uint32_t fb_sz)
|
||||||
GENX(pan_emit_fbd)(_fb, 0, _tls, _tiler_ctx, GET_FBD(_ctx, _pass).cpu)
|
{
|
||||||
|
void *desc_addr = ctx->fbds[pass].cpu;
|
||||||
|
struct pan_fbd_descs ir_descs = {0};
|
||||||
|
|
||||||
|
#if PAN_ARCH <= 13
|
||||||
|
ir_descs.fbd = desc_addr;
|
||||||
|
desc_addr += fb_sz;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const int crc_rt = GENX(pan_select_crc_rt)(fb, fb->tile_size);
|
||||||
|
const bool has_zs_ext = (fb->zs.view.zs || fb->zs.view.s || crc_rt >= 0);
|
||||||
|
if (has_zs_ext) {
|
||||||
|
ir_descs.zs_crc = desc_addr;
|
||||||
|
desc_addr += pan_size(ZS_CRC_EXTENSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
ir_descs.rts = desc_addr;
|
||||||
|
|
||||||
|
ctx->fbds[pass].gpu |= GENX(pan_emit_fbd)(fb, 0, tls, tiler_ctx, &ir_descs);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GENX(csf_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb,
|
GENX(csf_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb,
|
||||||
|
|
@ -769,9 +788,25 @@ GENX(csf_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb,
|
||||||
struct panfrost_device *dev = pan_device(batch->ctx->base.screen);
|
struct panfrost_device *dev = pan_device(batch->ctx->base.screen);
|
||||||
|
|
||||||
/* Default framebuffer descriptor */
|
/* Default framebuffer descriptor */
|
||||||
|
const int crc_rt = GENX(pan_select_crc_rt)(fb, fb->tile_size);
|
||||||
|
const bool has_zs_ext = (fb->zs.view.zs || fb->zs.view.s || crc_rt >= 0);
|
||||||
|
|
||||||
|
#if PAN_ARCH >= 14
|
||||||
|
const unsigned fb_sz = ALIGN_POT(sizeof(struct pan_fb_state), 64);
|
||||||
|
#else
|
||||||
|
const unsigned fb_sz = pan_size(FRAMEBUFFER);
|
||||||
|
#endif
|
||||||
|
const struct pan_fbd_descs fb_descs = {
|
||||||
|
#if PAN_ARCH <= 13
|
||||||
|
.fbd = batch->framebuffer.cpu,
|
||||||
|
#endif
|
||||||
|
.zs_crc = has_zs_ext ? batch->framebuffer.cpu + fb_sz : NULL,
|
||||||
|
.rts = has_zs_ext
|
||||||
|
? batch->framebuffer.cpu + fb_sz + pan_size(ZS_CRC_EXTENSION)
|
||||||
|
: batch->framebuffer.cpu + fb_sz,
|
||||||
|
};
|
||||||
batch->framebuffer.gpu |=
|
batch->framebuffer.gpu |=
|
||||||
GENX(pan_emit_fbd)(fb, 0, tls, &batch->tiler_ctx, batch->framebuffer.cpu);
|
GENX(pan_emit_fbd)(fb, 0, tls, &batch->tiler_ctx, &fb_descs);
|
||||||
|
|
||||||
if (batch->draw_count == 0)
|
if (batch->draw_count == 0)
|
||||||
return;
|
return;
|
||||||
|
|
@ -788,7 +823,8 @@ GENX(csf_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb,
|
||||||
alt_fb.zs.discard.z = false;
|
alt_fb.zs.discard.z = false;
|
||||||
alt_fb.zs.discard.s = false;
|
alt_fb.zs.discard.s = false;
|
||||||
|
|
||||||
EMIT_FBD(tiler_oom_ctx, FIRST, &alt_fb, tls, &batch->tiler_ctx);
|
emit_ir_fbd(tiler_oom_ctx, PAN_INCREMENTAL_RENDERING_FIRST_PASS, &alt_fb,
|
||||||
|
tls, &batch->tiler_ctx, fb_sz);
|
||||||
|
|
||||||
/* Subsequent incremental rendering passes: preload old content and don't
|
/* Subsequent incremental rendering passes: preload old content and don't
|
||||||
* discard result */
|
* discard result */
|
||||||
|
|
@ -825,7 +861,8 @@ GENX(csf_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb,
|
||||||
(&dev->fb_preload_cache, &batch->pool.base, &alt_fb, batch->tls.gpu, NULL);
|
(&dev->fb_preload_cache, &batch->pool.base, &alt_fb, batch->tls.gpu, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
EMIT_FBD(tiler_oom_ctx, MIDDLE, &alt_fb, tls, &batch->tiler_ctx);
|
emit_ir_fbd(tiler_oom_ctx, PAN_INCREMENTAL_RENDERING_MIDDLE_PASS, &alt_fb,
|
||||||
|
tls, &batch->tiler_ctx, fb_sz);
|
||||||
|
|
||||||
/* Last incremental rendering pass: preload previous content and deal with
|
/* Last incremental rendering pass: preload previous content and deal with
|
||||||
* results as specified by user */
|
* results as specified by user */
|
||||||
|
|
@ -835,7 +872,8 @@ GENX(csf_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb,
|
||||||
alt_fb.zs.discard.z = fb->zs.discard.z;
|
alt_fb.zs.discard.z = fb->zs.discard.z;
|
||||||
alt_fb.zs.discard.s = fb->zs.discard.s;
|
alt_fb.zs.discard.s = fb->zs.discard.s;
|
||||||
|
|
||||||
EMIT_FBD(tiler_oom_ctx, LAST, &alt_fb, tls, &batch->tiler_ctx);
|
emit_ir_fbd(tiler_oom_ctx, PAN_INCREMENTAL_RENDERING_LAST_PASS, &alt_fb, tls,
|
||||||
|
&batch->tiler_ctx, fb_sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -872,7 +910,7 @@ GENX(csf_emit_fragment_job)(struct panfrost_batch *batch,
|
||||||
cs_wait_slot(b, 0);
|
cs_wait_slot(b, 0);
|
||||||
cs_if(b, MALI_CS_CONDITION_GREATER, counter) {
|
cs_if(b, MALI_CS_CONDITION_GREATER, counter) {
|
||||||
cs_move64_to(b, cs_sr_reg64(b, FRAGMENT, FBD_POINTER),
|
cs_move64_to(b, cs_sr_reg64(b, FRAGMENT, FBD_POINTER),
|
||||||
GET_FBD(oom_ctx, LAST).gpu);
|
oom_ctx->fbds[PAN_INCREMENTAL_RENDERING_LAST_PASS].gpu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -257,8 +257,23 @@ GENX(jm_emit_fbds)(struct panfrost_batch *batch, struct pan_fb_info *fb,
|
||||||
{
|
{
|
||||||
PAN_TRACE_FUNC(PAN_TRACE_GL_JM);
|
PAN_TRACE_FUNC(PAN_TRACE_GL_JM);
|
||||||
|
|
||||||
batch->framebuffer.gpu |= GENX(pan_emit_fbd)(
|
#if PAN_ARCH >= 5
|
||||||
fb, 0, tls, &batch->tiler_ctx, batch->framebuffer.cpu);
|
const int crc_rt = GENX(pan_select_crc_rt)(fb, fb->tile_size);
|
||||||
|
const bool has_zs_ext = (fb->zs.view.zs || fb->zs.view.s || crc_rt >= 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const struct pan_fbd_descs fb_descs = {
|
||||||
|
.fbd = batch->framebuffer.cpu,
|
||||||
|
#if PAN_ARCH >= 5
|
||||||
|
.zs_crc =
|
||||||
|
has_zs_ext ? batch->framebuffer.cpu + pan_size(FRAMEBUFFER) : NULL,
|
||||||
|
.rts = has_zs_ext ? batch->framebuffer.cpu + pan_size(FRAMEBUFFER) +
|
||||||
|
pan_size(ZS_CRC_EXTENSION)
|
||||||
|
: batch->framebuffer.cpu + pan_size(FRAMEBUFFER),
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
batch->framebuffer.gpu |=
|
||||||
|
GENX(pan_emit_fbd)(fb, 0, tls, &batch->tiler_ctx, &fb_descs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2021 Collabora, Ltd.
|
* Copyright (C) 2021 Collabora, Ltd.
|
||||||
|
* Copyright (C) 2026 Arm Ltd.
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -1172,27 +1173,72 @@ check_fb_attachments(const struct pan_fb_info *fb)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
pan_emit_rts(const struct pan_fb_info *fb, unsigned layer_idx, int crc_rt,
|
||||||
|
struct mali_render_target_packed *rts,
|
||||||
|
struct pan_clean_tile clean_tile)
|
||||||
|
{
|
||||||
|
const unsigned rt_count = MAX2(fb->rt_count, 1);
|
||||||
|
unsigned cbuf_offset = 0;
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < rt_count; i++) {
|
||||||
|
pan_emit_rt(fb, layer_idx, i, cbuf_offset, rts, clean_tile);
|
||||||
|
rts++;
|
||||||
|
if (!fb->rts[i].view)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
cbuf_offset += pan_bytes_per_pixel_tib(fb->rts[i].view->format) *
|
||||||
|
fb->tile_size *
|
||||||
|
pan_image_view_get_nr_samples(fb->rts[i].view);
|
||||||
|
|
||||||
|
if (i != crc_rt && fb->rts[i].crc_valid != NULL)
|
||||||
|
*(fb->rts[i].crc_valid) = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if PAN_ARCH >= 14
|
||||||
unsigned
|
unsigned
|
||||||
GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
||||||
const struct pan_tls_info *tls,
|
const struct pan_tls_info *tls,
|
||||||
const struct pan_tiler_context *tiler_ctx, void *out)
|
const struct pan_tiler_context *tiler_ctx,
|
||||||
|
const struct pan_fbd_descs *out)
|
||||||
{
|
{
|
||||||
PAN_TRACE_FUNC(PAN_TRACE_LIB_DESC);
|
PAN_TRACE_FUNC(PAN_TRACE_LIB_DESC);
|
||||||
|
|
||||||
check_fb_attachments(fb);
|
check_fb_attachments(fb);
|
||||||
|
|
||||||
void *fbd = out;
|
const int crc_rt = GENX(pan_select_crc_rt)(fb, fb->tile_size);
|
||||||
void *rtd = out + pan_size(FRAMEBUFFER);
|
const bool has_zs_crc_ext = (fb->zs.view.zs || fb->zs.view.s || crc_rt >= 0);
|
||||||
|
const struct pan_clean_tile clean_tile = pan_get_clean_tile_info(fb);
|
||||||
|
|
||||||
|
if (has_zs_crc_ext) {
|
||||||
|
pan_emit_zs_crc_ext(fb, layer_idx, crc_rt, out->zs_crc, clean_tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
pan_emit_rts(fb, layer_idx, crc_rt, out->rts, clean_tile);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
unsigned
|
||||||
|
GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
||||||
|
const struct pan_tls_info *tls,
|
||||||
|
const struct pan_tiler_context *tiler_ctx,
|
||||||
|
const struct pan_fbd_descs *out)
|
||||||
|
{
|
||||||
|
PAN_TRACE_FUNC(PAN_TRACE_LIB_DESC);
|
||||||
|
|
||||||
|
check_fb_attachments(fb);
|
||||||
|
|
||||||
#if PAN_ARCH <= 5
|
#if PAN_ARCH <= 5
|
||||||
GENX(pan_emit_tls)(tls, pan_section_ptr(fbd, FRAMEBUFFER, LOCAL_STORAGE));
|
GENX(pan_emit_tls)(tls, pan_section_ptr(out->fbd, FRAMEBUFFER, LOCAL_STORAGE));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int crc_rt = GENX(pan_select_crc_rt)(fb, fb->tile_size);
|
int crc_rt = GENX(pan_select_crc_rt)(fb, fb->tile_size);
|
||||||
bool has_zs_crc_ext = (fb->zs.view.zs || fb->zs.view.s || crc_rt >= 0);
|
bool has_zs_crc_ext = (fb->zs.view.zs || fb->zs.view.s || crc_rt >= 0);
|
||||||
struct pan_clean_tile clean_tile = pan_get_clean_tile_info(fb);
|
struct pan_clean_tile clean_tile = pan_get_clean_tile_info(fb);
|
||||||
|
|
||||||
pan_section_pack(fbd, FRAMEBUFFER, PARAMETERS, cfg) {
|
pan_section_pack(out->fbd, FRAMEBUFFER, PARAMETERS, cfg) {
|
||||||
#if PAN_ARCH >= 6
|
#if PAN_ARCH >= 6
|
||||||
cfg.sample_locations = fb->sample_positions;
|
cfg.sample_locations = fb->sample_positions;
|
||||||
cfg.pre_frame_0 = pan_fix_frame_shader_mode(fb->bifrost.pre_post.modes[0],
|
cfg.pre_frame_0 = pan_fix_frame_shader_mode(fb->bifrost.pre_post.modes[0],
|
||||||
|
|
@ -1309,40 +1355,22 @@ GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
||||||
}
|
}
|
||||||
|
|
||||||
#if PAN_ARCH >= 6
|
#if PAN_ARCH >= 6
|
||||||
pan_section_pack(fbd, FRAMEBUFFER, PADDING, padding)
|
pan_section_pack(out->fbd, FRAMEBUFFER, PADDING, padding)
|
||||||
;
|
;
|
||||||
#else
|
#else
|
||||||
pan_emit_midgard_tiler(fb, tiler_ctx,
|
pan_emit_midgard_tiler(fb, tiler_ctx,
|
||||||
pan_section_ptr(fbd, FRAMEBUFFER, TILER));
|
pan_section_ptr(out->fbd, FRAMEBUFFER, TILER));
|
||||||
|
|
||||||
/* All weights set to 0, nothing to do here */
|
/* All weights set to 0, nothing to do here */
|
||||||
pan_section_pack(fbd, FRAMEBUFFER, TILER_WEIGHTS, w)
|
pan_section_pack(out->fbd, FRAMEBUFFER, TILER_WEIGHTS, w)
|
||||||
;
|
;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (has_zs_crc_ext) {
|
if (has_zs_crc_ext) {
|
||||||
struct mali_zs_crc_extension_packed *zs_crc_ext =
|
pan_emit_zs_crc_ext(fb, layer_idx, crc_rt, out->zs_crc, clean_tile);
|
||||||
out + pan_size(FRAMEBUFFER);
|
|
||||||
|
|
||||||
pan_emit_zs_crc_ext(fb, layer_idx, crc_rt, zs_crc_ext, clean_tile);
|
|
||||||
rtd += pan_size(ZS_CRC_EXTENSION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned rt_count = MAX2(fb->rt_count, 1);
|
pan_emit_rts(fb, layer_idx, crc_rt, out->rts, clean_tile);
|
||||||
unsigned cbuf_offset = 0;
|
|
||||||
for (unsigned i = 0; i < rt_count; i++) {
|
|
||||||
pan_emit_rt(fb, layer_idx, i, cbuf_offset, rtd, clean_tile);
|
|
||||||
rtd += pan_size(RENDER_TARGET);
|
|
||||||
if (!fb->rts[i].view)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
cbuf_offset += pan_bytes_per_pixel_tib(fb->rts[i].view->format) *
|
|
||||||
fb->tile_size *
|
|
||||||
pan_image_view_get_nr_samples(fb->rts[i].view);
|
|
||||||
|
|
||||||
if (i != crc_rt && fb->rts[i].crc_valid != NULL)
|
|
||||||
*(fb->rts[i].crc_valid) = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct mali_framebuffer_pointer_packed tag;
|
struct mali_framebuffer_pointer_packed tag;
|
||||||
pan_pack(&tag, FRAMEBUFFER_POINTER, cfg) {
|
pan_pack(&tag, FRAMEBUFFER_POINTER, cfg) {
|
||||||
|
|
@ -1351,6 +1379,7 @@ GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
||||||
}
|
}
|
||||||
return tag.opaque[0];
|
return tag.opaque[0];
|
||||||
}
|
}
|
||||||
|
#endif /* PAN_ARCH >= 14 */
|
||||||
#else /* PAN_ARCH == 4 */
|
#else /* PAN_ARCH == 4 */
|
||||||
static enum mali_color_format
|
static enum mali_color_format
|
||||||
pan_sfbd_raw_format(unsigned bits)
|
pan_sfbd_raw_format(unsigned bits)
|
||||||
|
|
@ -1378,14 +1407,15 @@ GENX(pan_select_tile_size)(struct pan_fb_info *fb)
|
||||||
unsigned
|
unsigned
|
||||||
GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
||||||
const struct pan_tls_info *tls,
|
const struct pan_tls_info *tls,
|
||||||
const struct pan_tiler_context *tiler_ctx, void *fbd)
|
const struct pan_tiler_context *tiler_ctx,
|
||||||
|
const struct pan_fbd_descs *out)
|
||||||
{
|
{
|
||||||
PAN_TRACE_FUNC(PAN_TRACE_LIB_DESC);
|
PAN_TRACE_FUNC(PAN_TRACE_LIB_DESC);
|
||||||
|
|
||||||
assert(fb->rt_count <= 1);
|
assert(fb->rt_count <= 1);
|
||||||
|
|
||||||
GENX(pan_emit_tls)(tls, pan_section_ptr(fbd, FRAMEBUFFER, LOCAL_STORAGE));
|
GENX(pan_emit_tls)(tls, pan_section_ptr(out->fbd, FRAMEBUFFER, LOCAL_STORAGE));
|
||||||
pan_section_pack(fbd, FRAMEBUFFER, PARAMETERS, cfg) {
|
pan_section_pack(out->fbd, FRAMEBUFFER, PARAMETERS, cfg) {
|
||||||
cfg.bound_max_x = fb->width - 1;
|
cfg.bound_max_x = fb->width - 1;
|
||||||
cfg.bound_max_y = fb->height - 1;
|
cfg.bound_max_y = fb->height - 1;
|
||||||
cfg.dithering_enable = true;
|
cfg.dithering_enable = true;
|
||||||
|
|
@ -1499,15 +1529,15 @@ GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
||||||
}
|
}
|
||||||
|
|
||||||
pan_emit_midgard_tiler(fb, tiler_ctx,
|
pan_emit_midgard_tiler(fb, tiler_ctx,
|
||||||
pan_section_ptr(fbd, FRAMEBUFFER, TILER));
|
pan_section_ptr(out->fbd, FRAMEBUFFER, TILER));
|
||||||
|
|
||||||
/* All weights set to 0, nothing to do here */
|
/* All weights set to 0, nothing to do here */
|
||||||
pan_section_pack(fbd, FRAMEBUFFER, TILER_WEIGHTS, w)
|
pan_section_pack(out->fbd, FRAMEBUFFER, TILER_WEIGHTS, w)
|
||||||
;
|
;
|
||||||
|
|
||||||
pan_section_pack(fbd, FRAMEBUFFER, PADDING_1, padding)
|
pan_section_pack(out->fbd, FRAMEBUFFER, PADDING_1, padding)
|
||||||
;
|
;
|
||||||
pan_section_pack(fbd, FRAMEBUFFER, PADDING_2, padding)
|
pan_section_pack(out->fbd, FRAMEBUFFER, PADDING_2, padding)
|
||||||
;
|
;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -338,10 +338,20 @@ void GENX(pan_emit_afrc_color_attachment)(const struct pan_attachment_info *att,
|
||||||
void *payload);
|
void *payload);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct pan_fbd_descs {
|
||||||
|
#if PAN_ARCH <= 13
|
||||||
|
struct mali_framebuffer_packed *fbd;
|
||||||
|
#endif
|
||||||
|
#if PAN_ARCH >= 5
|
||||||
|
struct mali_zs_crc_extension_packed *zs_crc;
|
||||||
|
struct mali_render_target_packed *rts;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
unsigned GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
unsigned GENX(pan_emit_fbd)(const struct pan_fb_info *fb, unsigned layer_idx,
|
||||||
const struct pan_tls_info *tls,
|
const struct pan_tls_info *tls,
|
||||||
const struct pan_tiler_context *tiler_ctx,
|
const struct pan_tiler_context *tiler_ctx,
|
||||||
void *out);
|
const struct pan_fbd_descs *out);
|
||||||
|
|
||||||
#if PAN_ARCH >= 6
|
#if PAN_ARCH >= 6
|
||||||
unsigned GENX(pan_select_tiler_hierarchy_mask)(uint32_t width, uint32_t height,
|
unsigned GENX(pan_select_tiler_hierarchy_mask)(uint32_t width, uint32_t height,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue