mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 06:40:11 +01:00
panvk: Add v13 support
Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34032>
This commit is contained in:
parent
c7b94b098c
commit
7a8d0b78e9
5 changed files with 48 additions and 7 deletions
|
|
@ -647,7 +647,6 @@ prepare_tiler_primitive_size(struct panvk_cmd_buffer *cmdbuf)
|
|||
{
|
||||
struct cs_builder *b =
|
||||
panvk_get_cs_builder(cmdbuf, PANVK_SUBQUEUE_VERTEX_TILER);
|
||||
const struct panvk_shader *vs = cmdbuf->state.gfx.vs.shader;
|
||||
const struct vk_input_assembly_state *ia =
|
||||
&cmdbuf->vk.dynamic_graphics_state.ia;
|
||||
float primitive_size;
|
||||
|
|
@ -665,13 +664,16 @@ prepare_tiler_primitive_size(struct panvk_cmd_buffer *cmdbuf)
|
|||
* points."
|
||||
*
|
||||
* If no point size is written, ensure that the size is always 1.0f.
|
||||
* On v13+, the point size default to 1.0f.
|
||||
*/
|
||||
#if PAN_ARCH < 13
|
||||
case VK_PRIMITIVE_TOPOLOGY_POINT_LIST:
|
||||
if (vs->info.vs.writes_point_size)
|
||||
if (cmdbuf->state.gfx.vs.shader->info.vs.writes_point_size)
|
||||
return;
|
||||
|
||||
primitive_size = 1.0f;
|
||||
break;
|
||||
#endif
|
||||
case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:
|
||||
case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:
|
||||
primitive_size = cmdbuf->vk.dynamic_graphics_state.rs.line.width;
|
||||
|
|
@ -680,8 +682,13 @@ prepare_tiler_primitive_size(struct panvk_cmd_buffer *cmdbuf)
|
|||
return;
|
||||
}
|
||||
|
||||
#if PAN_ARCH >= 13
|
||||
cs_move32_to(b, cs_sr_reg32(b, IDVS, LINE_WIDTH),
|
||||
fui(primitive_size));
|
||||
#else
|
||||
cs_move32_to(b, cs_sr_reg32(b, IDVS, PRIMITIVE_SIZE),
|
||||
fui(primitive_size));
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
|
|
@ -1802,9 +1809,12 @@ set_tiler_idvs_flags(struct cs_builder *b, struct panvk_cmd_buffer *cmdbuf,
|
|||
pan_pack(&tiler_idvs_flags, PRIMITIVE_FLAGS, cfg) {
|
||||
cfg.draw_mode = translate_prim_topology(ia->primitive_topology);
|
||||
|
||||
#if PAN_ARCH < 13
|
||||
cfg.point_size_array_format = writes_point_size
|
||||
? MALI_POINT_SIZE_ARRAY_FORMAT_FP16
|
||||
: MALI_POINT_SIZE_ARRAY_FORMAT_NONE;
|
||||
#endif
|
||||
|
||||
cfg.layer_index_enable = writes_layer;
|
||||
|
||||
cfg.position_fifo_format = extended_fifo
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@ panvk_entrypoints = custom_target(
|
|||
'--out-h', '@OUTPUT0@', '--out-c', '@OUTPUT1@', '--prefix', 'panvk',
|
||||
'--device-prefix', 'panvk_v6', '--device-prefix', 'panvk_v7',
|
||||
'--device-prefix', 'panvk_v9', '--device-prefix', 'panvk_v10',
|
||||
'--device-prefix', 'panvk_v12', '--beta', with_vulkan_beta.to_string()
|
||||
'--device-prefix', 'panvk_v12', '--device-prefix', 'panvk_v13',
|
||||
'--beta', with_vulkan_beta.to_string()
|
||||
],
|
||||
depend_files : vk_entrypoints_gen_depend_files,
|
||||
)
|
||||
|
|
@ -62,7 +63,7 @@ valhall_archs = [9, 10]
|
|||
valhall_inc_dir = ['valhall']
|
||||
valhall_files = []
|
||||
|
||||
avalon_archs = [12]
|
||||
avalon_archs = [12, 13]
|
||||
avalon_inc_dir = ['avalon']
|
||||
avalon_files = []
|
||||
|
||||
|
|
@ -80,7 +81,7 @@ jm_files = [
|
|||
'jm/panvk_vX_queue.c',
|
||||
]
|
||||
|
||||
csf_archs = [10, 12]
|
||||
csf_archs = [10, 12, 13]
|
||||
csf_inc_dir = ['csf']
|
||||
csf_files = [
|
||||
'csf/panvk_vX_cmd_buffer.c',
|
||||
|
|
@ -118,7 +119,7 @@ common_per_arch_files = [
|
|||
'panvk_vX_shader.c',
|
||||
]
|
||||
|
||||
foreach arch : [6, 7, 10, 12]
|
||||
foreach arch : [6, 7, 10, 12, 13]
|
||||
per_arch_files = common_per_arch_files
|
||||
inc_panvk_per_arch = []
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,9 @@ panvk_catch_indirect_alloc_failure(VkResult error)
|
|||
case 12: \
|
||||
panvk_arch_name(name, v12)(__VA_ARGS__); \
|
||||
break; \
|
||||
case 13: \
|
||||
panvk_arch_name(name, v13)(__VA_ARGS__); \
|
||||
break; \
|
||||
default: \
|
||||
unreachable("Unsupported architecture"); \
|
||||
} \
|
||||
|
|
@ -78,6 +81,9 @@ panvk_catch_indirect_alloc_failure(VkResult error)
|
|||
case 12: \
|
||||
ret = panvk_arch_name(name, v12)(__VA_ARGS__); \
|
||||
break; \
|
||||
case 13: \
|
||||
ret = panvk_arch_name(name, v13)(__VA_ARGS__); \
|
||||
break; \
|
||||
default: \
|
||||
unreachable("Unsupported architecture"); \
|
||||
} \
|
||||
|
|
@ -94,6 +100,8 @@ panvk_catch_indirect_alloc_failure(VkResult error)
|
|||
#define panvk_per_arch(name) panvk_arch_name(name, v10)
|
||||
#elif PAN_ARCH == 12
|
||||
#define panvk_per_arch(name) panvk_arch_name(name, v12)
|
||||
#elif PAN_ARCH == 13
|
||||
#define panvk_per_arch(name) panvk_arch_name(name, v13)
|
||||
#else
|
||||
#error "Unsupported arch"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -609,6 +609,18 @@ get_device_properties(const struct panvk_instance *instance,
|
|||
/* Ensure that the max threads count per workgroup is valid for Bifrost */
|
||||
assert(arch > 8 || device->kmod.props.max_threads_per_wg <= 1024);
|
||||
|
||||
float pointSizeRangeMin;
|
||||
float pointSizeRangeMax;
|
||||
|
||||
/* On v13+, point size handling changed entirely */
|
||||
if (arch >= 13) {
|
||||
pointSizeRangeMin = 1.0;
|
||||
pointSizeRangeMax = 1024.0;
|
||||
} else {
|
||||
pointSizeRangeMin = 0.125;
|
||||
pointSizeRangeMax = 4095.9375;
|
||||
}
|
||||
|
||||
*properties = (struct vk_properties){
|
||||
.apiVersion = get_api_version(arch),
|
||||
.driverVersion = vk_get_driver_version(),
|
||||
|
|
@ -822,7 +834,7 @@ get_device_properties(const struct panvk_instance *instance,
|
|||
.maxCullDistances = 0,
|
||||
.maxCombinedClipAndCullDistances = 0,
|
||||
.discreteQueuePriorities = 2,
|
||||
.pointSizeRange = {0.125, 4095.9375},
|
||||
.pointSizeRange = {pointSizeRangeMin, pointSizeRangeMax},
|
||||
.lineWidthRange = {0.0, 7.9921875},
|
||||
.pointSizeGranularity = (1.0 / 16.0),
|
||||
.lineWidthGranularity = (1.0 / 128.0),
|
||||
|
|
@ -1092,6 +1104,7 @@ panvk_physical_device_init(struct panvk_physical_device *device,
|
|||
|
||||
case 10:
|
||||
case 12:
|
||||
case 13:
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
@ -1267,6 +1280,7 @@ DEVICE_PER_ARCH_FUNCS(6);
|
|||
DEVICE_PER_ARCH_FUNCS(7);
|
||||
DEVICE_PER_ARCH_FUNCS(10);
|
||||
DEVICE_PER_ARCH_FUNCS(12);
|
||||
DEVICE_PER_ARCH_FUNCS(13);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
panvk_CreateDevice(VkPhysicalDevice physicalDevice,
|
||||
|
|
|
|||
|
|
@ -675,9 +675,17 @@ cmd_emit_dcd(struct panvk_cmd_buffer *cmdbuf, struct pan_fb_info *fbinfo,
|
|||
* Thing's haven't been benchmarked to determine what's
|
||||
* preferable (saving bandwidth vs having ZS preloaded
|
||||
* earlier), so let's leave it like that for now.
|
||||
*
|
||||
* On v13+, we don't have EARLY_ZS_ALWAYS instead we use
|
||||
* PREPASS_ALWAYS.
|
||||
*/
|
||||
#if PAN_ARCH >= 13
|
||||
fbinfo->bifrost.pre_post.modes[dcd_idx] =
|
||||
MALI_PRE_POST_FRAME_SHADER_MODE_PREPASS_ALWAYS;
|
||||
#else
|
||||
fbinfo->bifrost.pre_post.modes[dcd_idx] =
|
||||
MALI_PRE_POST_FRAME_SHADER_MODE_EARLY_ZS_ALWAYS;
|
||||
#endif
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue