mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-16 01:50:32 +01:00
panvk: Move cmd_fb_preload to cmd_frame_shaders
Also rename some stuff internally to stop using the word "preload". Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com> Acked-by: Boris Brezillon <boris.brezillon@collabora.com> Acked-by: Eric R. Smith <eric.smith@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39759>
This commit is contained in:
parent
aacbfc9da2
commit
ae2fc52cfd
6 changed files with 62 additions and 63 deletions
|
|
@ -20,7 +20,7 @@
|
|||
#include "panvk_cmd_buffer.h"
|
||||
#include "panvk_cmd_desc_state.h"
|
||||
#include "panvk_cmd_draw.h"
|
||||
#include "panvk_cmd_fb_preload.h"
|
||||
#include "panvk_cmd_frame_shaders.h"
|
||||
#include "panvk_cmd_meta.h"
|
||||
#include "panvk_cmd_precomp.h"
|
||||
#include "panvk_cmd_ts.h"
|
||||
|
|
@ -1307,7 +1307,7 @@ get_fb_descs(struct panvk_cmd_buffer *cmdbuf)
|
|||
.tiler_ctx = &tiler_ctx,
|
||||
};
|
||||
|
||||
VkResult result = panvk_per_arch(cmd_fb_preload)(
|
||||
VkResult result = panvk_per_arch(cmd_get_frame_shaders)(
|
||||
cmdbuf, fbd_info.fb, fbd_info.load, &fbd_info.frame_shaders);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
|
@ -1347,7 +1347,7 @@ get_fb_descs(struct panvk_cmd_buffer *cmdbuf)
|
|||
fbd_info.store = ir_pass == PANVK_IR_LAST_PASS ?
|
||||
&render->fb.store : &render->fb.spill.store;
|
||||
|
||||
VkResult result = panvk_per_arch(cmd_fb_preload)(
|
||||
VkResult result = panvk_per_arch(cmd_get_frame_shaders)(
|
||||
cmdbuf, fbd_info.fb, fbd_info.load, &fbd_info.frame_shaders);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
#include "panvk_cmd_buffer.h"
|
||||
#include "panvk_cmd_desc_state.h"
|
||||
#include "panvk_cmd_draw.h"
|
||||
#include "panvk_cmd_fb_preload.h"
|
||||
#include "panvk_cmd_frame_shaders.h"
|
||||
#include "panvk_cmd_pool.h"
|
||||
#include "panvk_cmd_push_constant.h"
|
||||
#include "panvk_device.h"
|
||||
|
|
@ -154,9 +154,8 @@ panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf)
|
|||
};
|
||||
|
||||
struct pan_fb_frame_shaders fs;
|
||||
VkResult result = panvk_per_arch(cmd_fb_preload)(cmdbuf,
|
||||
&render->fb.layout,
|
||||
fbd_info.load, &fs);
|
||||
VkResult result = panvk_per_arch(cmd_get_frame_shaders)(
|
||||
cmdbuf, &render->fb.layout, fbd_info.load, &fs);
|
||||
if (result != VK_SUCCESS)
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -105,10 +105,10 @@ common_per_arch_files = [
|
|||
panvk_tracepoints[0],
|
||||
'panvk_vX_blend.c',
|
||||
'panvk_vX_buffer_view.c',
|
||||
'panvk_vX_cmd_fb_preload.c',
|
||||
'panvk_vX_cmd_desc_state.c',
|
||||
'panvk_vX_cmd_dispatch.c',
|
||||
'panvk_vX_cmd_draw.c',
|
||||
'panvk_vX_cmd_frame_shaders.c',
|
||||
'panvk_vX_cmd_meta.c',
|
||||
'panvk_vX_cmd_push_constant.c',
|
||||
'panvk_vX_descriptor_set.c',
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
/*
|
||||
* Copyright © 2021 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef PANVK_FB_PRELOAD_H
|
||||
#define PANVK_FB_PRELOAD_H
|
||||
|
||||
#include "panvk_cmd_buffer.h"
|
||||
#include "pan_desc.h"
|
||||
#include "pan_fb.h"
|
||||
|
||||
VkResult panvk_per_arch(cmd_fb_preload)(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct pan_fb_layout *fb,
|
||||
const struct pan_fb_load *load,
|
||||
struct pan_fb_frame_shaders *fs_out);
|
||||
|
||||
#endif
|
||||
19
src/panfrost/vulkan/panvk_cmd_frame_shaders.h
Normal file
19
src/panfrost/vulkan/panvk_cmd_frame_shaders.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* Copyright © 2021 Collabora Ltd.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef PANVK_FB_PRELOAD_H
|
||||
#define PANVK_FB_PRELOAD_H
|
||||
|
||||
#include "panvk_cmd_buffer.h"
|
||||
#include "pan_desc.h"
|
||||
#include "pan_fb.h"
|
||||
|
||||
VkResult
|
||||
panvk_per_arch(cmd_get_frame_shaders)(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct pan_fb_layout *fb,
|
||||
const struct pan_fb_load *load,
|
||||
struct pan_fb_frame_shaders *fs_out);
|
||||
|
||||
#endif
|
||||
|
|
@ -3,8 +3,9 @@
|
|||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "panvk_cmd_frame_shaders.h"
|
||||
|
||||
#include "panvk_cmd_alloc.h"
|
||||
#include "panvk_cmd_fb_preload.h"
|
||||
#include "panvk_image_view.h"
|
||||
#include "panvk_meta.h"
|
||||
#include "panvk_shader.h"
|
||||
|
|
@ -17,24 +18,24 @@
|
|||
|
||||
PRAGMA_DIAGNOSTIC_PUSH
|
||||
PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
|
||||
struct panvk_fb_preload_shader_key {
|
||||
struct panvk_frame_shader_key {
|
||||
enum panvk_meta_object_key_type type;
|
||||
struct pan_fb_shader_key key;
|
||||
};
|
||||
PRAGMA_DIAGNOSTIC_POP
|
||||
|
||||
struct panvk_fb_preload_sysvals {
|
||||
struct panvk_fb_sysvals {
|
||||
struct pan_fb_bbox render_area_px;
|
||||
float clear_depth;
|
||||
uint8_t clear_stencil;
|
||||
uint8_t _pad;
|
||||
uint16_t layer_id;
|
||||
} __attribute__((aligned(FAU_WORD_SIZE)));
|
||||
static_assert(sizeof(struct panvk_fb_preload_sysvals) % FAU_WORD_SIZE == 0,
|
||||
"panvk_fb_preload_sysvals is FAU_WORD-aligned.");
|
||||
static_assert(sizeof(struct panvk_fb_sysvals) % FAU_WORD_SIZE == 0,
|
||||
"panvk_fb_sysvals is FAU_WORD-aligned.");
|
||||
|
||||
static uint32_t
|
||||
key_locations_written(const struct panvk_fb_preload_shader_key *key)
|
||||
key_locations_written(const struct panvk_frame_shader_key *key)
|
||||
{
|
||||
uint32_t locations = 0;
|
||||
for (unsigned rt = 0; rt < PAN_MAX_RTS; rt++) {
|
||||
|
|
@ -63,7 +64,7 @@ tex_index_for_loc(gl_frag_result loc, uint32_t locations_written)
|
|||
|
||||
static bool
|
||||
compact_tex_indices(nir_builder *b, nir_tex_instr *tex,
|
||||
const struct panvk_fb_preload_shader_key *key)
|
||||
const struct panvk_frame_shader_key *key)
|
||||
{
|
||||
const uint32_t tex_idx =
|
||||
tex_index_for_loc(tex->texture_index, key_locations_written(key));
|
||||
|
|
@ -89,7 +90,7 @@ load_sysval(nir_builder *b, unsigned num_components,
|
|||
{
|
||||
assert((offset * 8) % bit_size == 0);
|
||||
ASSERTED unsigned size = (num_components * bit_size) / 8;
|
||||
assert(offset + size <= sizeof(struct panvk_fb_preload_sysvals));
|
||||
assert(offset + size <= sizeof(struct panvk_fb_sysvals));
|
||||
|
||||
return nir_load_push_constant(b, num_components, bit_size,
|
||||
nir_imm_int(b, offset));
|
||||
|
|
@ -97,7 +98,7 @@ load_sysval(nir_builder *b, unsigned num_components,
|
|||
|
||||
static bool
|
||||
lower_sysval(nir_builder *b, nir_intrinsic_instr *intr,
|
||||
const struct panvk_fb_preload_shader_key *key)
|
||||
const struct panvk_frame_shader_key *key)
|
||||
{
|
||||
b->cursor = nir_before_instr(&intr->instr);
|
||||
|
||||
|
|
@ -105,17 +106,17 @@ lower_sysval(nir_builder *b, nir_intrinsic_instr *intr,
|
|||
nir_def *val;
|
||||
switch (intr->intrinsic) {
|
||||
case nir_intrinsic_load_fb_render_area_pan:
|
||||
offset = offsetof(struct panvk_fb_preload_sysvals, render_area_px);
|
||||
offset = offsetof(struct panvk_fb_sysvals, render_area_px);
|
||||
val = load_sysval(b, 4, 16, offset);
|
||||
break;
|
||||
case nir_intrinsic_load_clear_value_pan:
|
||||
switch (nir_intrinsic_io_semantics(intr).location) {
|
||||
case FRAG_RESULT_DEPTH:
|
||||
offset = offsetof(struct panvk_fb_preload_sysvals, clear_depth);
|
||||
offset = offsetof(struct panvk_fb_sysvals, clear_depth);
|
||||
val = load_sysval(b, 1, 32, offset);
|
||||
break;
|
||||
case FRAG_RESULT_STENCIL:
|
||||
offset = offsetof(struct panvk_fb_preload_sysvals, clear_stencil);
|
||||
offset = offsetof(struct panvk_fb_sysvals, clear_stencil);
|
||||
val = nir_u2u32(b, load_sysval(b, 1, 8, offset));
|
||||
break;
|
||||
default:
|
||||
|
|
@ -127,7 +128,7 @@ lower_sysval(nir_builder *b, nir_intrinsic_instr *intr,
|
|||
if (PAN_ARCH >= 9)
|
||||
return false;
|
||||
|
||||
offset = offsetof(struct panvk_fb_preload_sysvals, layer_id);
|
||||
offset = offsetof(struct panvk_fb_sysvals, layer_id);
|
||||
val = nir_u2u32(b, load_sysval(b, 1, 16, offset));
|
||||
break;
|
||||
default:
|
||||
|
|
@ -153,9 +154,9 @@ lower_instr(nir_builder *b, nir_instr *instr, void *cb_data)
|
|||
}
|
||||
|
||||
static VkResult
|
||||
get_preload_shader(struct panvk_device *dev,
|
||||
const struct panvk_fb_preload_shader_key *key,
|
||||
struct panvk_internal_shader **shader_out)
|
||||
get_frame_shader(struct panvk_device *dev,
|
||||
const struct panvk_frame_shader_key *key,
|
||||
struct panvk_internal_shader **shader_out)
|
||||
{
|
||||
struct panvk_physical_device *phys_dev =
|
||||
to_panvk_physical_device(dev->vk.physical);
|
||||
|
|
@ -302,7 +303,7 @@ get_load_image_view(const struct pan_fb_load *load, gl_frag_result location)
|
|||
static void
|
||||
fill_textures(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct pan_fb_load *load,
|
||||
const struct panvk_fb_preload_shader_key *key,
|
||||
const struct panvk_frame_shader_key *key,
|
||||
struct mali_texture_packed *textures)
|
||||
{
|
||||
uint32_t locations = key_locations_written(key);
|
||||
|
|
@ -346,7 +347,7 @@ fill_textures(struct panvk_cmd_buffer *cmdbuf,
|
|||
|
||||
static void
|
||||
fill_bds(const struct pan_fb_layout *fb,
|
||||
const struct panvk_fb_preload_shader_key *key,
|
||||
const struct panvk_frame_shader_key *key,
|
||||
struct mali_blend_packed *bds)
|
||||
{
|
||||
for (unsigned i = 0; i < fb->rt_count; i++) {
|
||||
|
|
@ -383,7 +384,7 @@ fill_bds(const struct pan_fb_layout *fb,
|
|||
|
||||
static bool
|
||||
always_load(const struct pan_fb_load *load,
|
||||
const struct panvk_fb_preload_shader_key *key)
|
||||
const struct panvk_frame_shader_key *key)
|
||||
{
|
||||
for (unsigned rt = 0; rt < PAN_MAX_RTS; rt++) {
|
||||
if (pan_fb_shader_key_target_written(&key->key.rts[rt]) &&
|
||||
|
|
@ -400,14 +401,14 @@ static VkResult
|
|||
cmd_emit_dcd(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct pan_fb_layout *fb,
|
||||
const struct pan_fb_load *load,
|
||||
const struct panvk_fb_preload_shader_key *key,
|
||||
const struct panvk_frame_shader_key *key,
|
||||
struct pan_fb_frame_shaders *fs,
|
||||
struct mali_draw_packed **dcds)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_internal_shader *shader = NULL;
|
||||
|
||||
VkResult result = get_preload_shader(dev, key, &shader);
|
||||
VkResult result = get_frame_shader(dev, key, &shader);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
|
|
@ -544,9 +545,9 @@ cmd_emit_dcd(struct panvk_cmd_buffer *cmdbuf,
|
|||
|
||||
uint32_t layer_count = cmdbuf->state.gfx.render.layer_count;
|
||||
struct pan_ptr faus = panvk_cmd_alloc_dev_mem(
|
||||
cmdbuf, desc, layer_count * sizeof(struct panvk_fb_preload_sysvals), 16);
|
||||
cmdbuf, desc, layer_count * sizeof(struct panvk_fb_sysvals), 16);
|
||||
for (uint32_t l = 0; l < layer_count; l++) {
|
||||
const struct panvk_fb_preload_sysvals sysvals = {
|
||||
const struct panvk_fb_sysvals sysvals = {
|
||||
.render_area_px = fb->render_area_px,
|
||||
.clear_depth = load->z.clear.depth,
|
||||
.clear_stencil = load->s.clear.stencil,
|
||||
|
|
@ -602,14 +603,14 @@ static VkResult
|
|||
cmd_emit_dcd(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct pan_fb_layout *fb,
|
||||
const struct pan_fb_load *load,
|
||||
struct panvk_fb_preload_shader_key *key,
|
||||
struct panvk_frame_shader_key *key,
|
||||
struct pan_fb_frame_shaders *fs,
|
||||
struct mali_draw_packed **dcds)
|
||||
{
|
||||
struct panvk_device *dev = to_panvk_device(cmdbuf->vk.base.device);
|
||||
struct panvk_internal_shader *shader = NULL;
|
||||
|
||||
VkResult result = get_preload_shader(dev, key, &shader);
|
||||
VkResult result = get_frame_shader(dev, key, &shader);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
|
|
@ -702,8 +703,8 @@ cmd_emit_dcd(struct panvk_cmd_buffer *cmdbuf,
|
|||
return result;
|
||||
|
||||
struct pan_ptr faus = panvk_cmd_alloc_dev_mem(
|
||||
cmdbuf, desc, sizeof(struct panvk_fb_preload_sysvals), 16);
|
||||
const struct panvk_fb_preload_sysvals sysvals = {
|
||||
cmdbuf, desc, sizeof(struct panvk_fb_sysvals), 16);
|
||||
const struct panvk_fb_sysvals sysvals = {
|
||||
.render_area_px = fb->render_area_px,
|
||||
.clear_depth = load->z.clear.depth,
|
||||
.clear_stencil = load->s.clear.stencil,
|
||||
|
|
@ -742,16 +743,14 @@ cmd_emit_dcd(struct panvk_cmd_buffer *cmdbuf,
|
|||
cfg.fragment_resources = res_table.gpu | res_table_size;
|
||||
cfg.fragment_shader = panvk_priv_mem_dev_addr(shader->spd);
|
||||
cfg.fragment_fau.pointer = faus.gpu;
|
||||
cfg.fragment_fau.count =
|
||||
sizeof(struct panvk_fb_preload_sysvals) / FAU_WORD_SIZE;
|
||||
cfg.fragment_fau.count = sizeof(struct panvk_fb_sysvals) / FAU_WORD_SIZE;
|
||||
cfg.thread_storage = cmdbuf->state.gfx.tsd;
|
||||
#else
|
||||
cfg.maximum_z = 1.0;
|
||||
cfg.shader.resources = res_table.gpu | res_table_size;
|
||||
cfg.shader.shader = panvk_priv_mem_dev_addr(shader->spd);
|
||||
cfg.shader.thread_storage = cmdbuf->state.gfx.tsd;
|
||||
cfg.shader.fau_count =
|
||||
sizeof(struct panvk_fb_preload_sysvals) / FAU_WORD_SIZE;
|
||||
cfg.shader.fau_count = sizeof(struct panvk_fb_sysvals) / FAU_WORD_SIZE;
|
||||
cfg.shader.fau = faus.gpu;
|
||||
#endif
|
||||
cfg.flags_2.write_mask = rt_written;
|
||||
|
|
@ -793,7 +792,7 @@ cmd_preload_zs_attachments(struct panvk_cmd_buffer *cmdbuf,
|
|||
struct pan_fb_frame_shaders *fs,
|
||||
struct mali_draw_packed **dcds)
|
||||
{
|
||||
struct panvk_fb_preload_shader_key key = {
|
||||
struct panvk_frame_shader_key key = {
|
||||
.type = PANVK_META_OBJECT_KEY_FB_ZS_PRELOAD_SHADER,
|
||||
};
|
||||
if (!GENX(pan_fb_load_shader_key_fill)(&key.key, fb, load, true))
|
||||
|
|
@ -809,7 +808,7 @@ cmd_preload_color_attachments(struct panvk_cmd_buffer *cmdbuf,
|
|||
struct pan_fb_frame_shaders *fs,
|
||||
struct mali_draw_packed **dcds)
|
||||
{
|
||||
struct panvk_fb_preload_shader_key key = {
|
||||
struct panvk_frame_shader_key key = {
|
||||
.type = PANVK_META_OBJECT_KEY_FB_COLOR_PRELOAD_SHADER,
|
||||
};
|
||||
if (!GENX(pan_fb_load_shader_key_fill)(&key.key, fb, load, false))
|
||||
|
|
@ -819,10 +818,10 @@ cmd_preload_color_attachments(struct panvk_cmd_buffer *cmdbuf,
|
|||
}
|
||||
|
||||
VkResult
|
||||
panvk_per_arch(cmd_fb_preload)(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct pan_fb_layout *fb,
|
||||
const struct pan_fb_load *load,
|
||||
struct pan_fb_frame_shaders *fs_out)
|
||||
panvk_per_arch(cmd_get_frame_shaders)(struct panvk_cmd_buffer *cmdbuf,
|
||||
const struct pan_fb_layout *fb,
|
||||
const struct pan_fb_load *load,
|
||||
struct pan_fb_frame_shaders *fs_out)
|
||||
{
|
||||
*fs_out = (struct pan_fb_frame_shaders) { .dcd_pointer = 0 };
|
||||
struct mali_draw_packed *dcds = NULL;
|
||||
Loading…
Add table
Reference in a new issue