mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 19:30:11 +01:00
pvr: add support for VK_KHR_shader_draw_parameters, drawIndirectFirstInstance
Signed-off-by: Simon Perretta <simon.perretta@imgtec.com> Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37512>
This commit is contained in:
parent
0134e86375
commit
27b329eea3
5 changed files with 37 additions and 2 deletions
|
|
@ -455,7 +455,7 @@ Vulkan 1.1 -- all DONE: anv, hk, lvp, nvk, panvk/v10+, radv, tu, vn
|
|||
VK_KHR_multiview DONE (anv, dzn, hasvk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn)
|
||||
VK_KHR_relaxed_block_layout DONE (anv, dzn, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
|
||||
VK_KHR_sampler_ycbcr_conversion DONE (anv, hasvk, lvp, nvk, panvk/v10+, radv, tu, v3dv, vn)
|
||||
VK_KHR_shader_draw_parameters DONE (anv, dzn, hasvk, lvp, nvk, panvk, radv, tu, vn)
|
||||
VK_KHR_shader_draw_parameters DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, vn)
|
||||
VK_KHR_storage_buffer_storage_class DONE (anv, dzn, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
|
||||
VK_KHR_variable_pointers DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
|
||||
|
||||
|
|
|
|||
|
|
@ -1766,6 +1766,7 @@ bool pco_nir_lower_barriers(nir_shader *shader, pco_data *data);
|
|||
bool pco_nir_lower_clip_cull_vars(nir_shader *shader);
|
||||
bool pco_nir_lower_demote_samples(nir_shader *shader);
|
||||
bool pco_nir_lower_fs_intrinsics(nir_shader *shader);
|
||||
bool pco_nir_lower_vs_intrinsics(nir_shader *shader);
|
||||
bool pco_nir_lower_images(nir_shader *shader, pco_data *data);
|
||||
bool pco_nir_lower_interpolation(nir_shader *shader, pco_fs_data *fs);
|
||||
bool pco_nir_lower_io(nir_shader *shader);
|
||||
|
|
|
|||
|
|
@ -912,6 +912,7 @@ void pco_lower_nir(pco_ctx *ctx, nir_shader *nir, pco_data *data)
|
|||
NIR_PASS(_, nir, pco_nir_point_size);
|
||||
|
||||
NIR_PASS(_, nir, pco_nir_pvi, &data->vs);
|
||||
NIR_PASS(_, nir, pco_nir_lower_vs_intrinsics);
|
||||
}
|
||||
|
||||
if (data->common.uses.usclib) {
|
||||
|
|
|
|||
|
|
@ -1121,6 +1121,35 @@ bool pco_nir_lower_fs_intrinsics(nir_shader *shader)
|
|||
return nir_shader_lower_instructions(shader, is_fs_intr, lower_fs_intr, NULL);
|
||||
}
|
||||
|
||||
static bool
|
||||
lower_vs_intr(nir_builder *b, nir_intrinsic_instr *intr, UNUSED void *cb_data)
|
||||
{
|
||||
b->cursor = nir_before_instr(&intr->instr);
|
||||
|
||||
switch (intr->intrinsic) {
|
||||
/* First vs base vertex is handled in the PDS, so they're equivalent. */
|
||||
case nir_intrinsic_load_first_vertex:
|
||||
nir_def_replace(&intr->def, nir_load_base_vertex(b));
|
||||
nir_instr_free(&intr->instr);
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool pco_nir_lower_vs_intrinsics(nir_shader *shader)
|
||||
{
|
||||
assert(shader->info.stage == MESA_SHADER_VERTEX);
|
||||
|
||||
return nir_shader_intrinsics_pass(shader,
|
||||
lower_vs_intr,
|
||||
nir_metadata_control_flow,
|
||||
NULL);
|
||||
}
|
||||
|
||||
bool pco_nir_lower_clip_cull_vars(nir_shader *shader)
|
||||
{
|
||||
if (shader->info.internal)
|
||||
|
|
|
|||
|
|
@ -194,6 +194,7 @@ static void pvr_physical_device_get_supported_extensions(
|
|||
.KHR_present_id2 = PVR_USE_WSI_PLATFORM,
|
||||
.KHR_present_wait2 = PVR_USE_WSI_PLATFORM,
|
||||
.KHR_separate_depth_stencil_layouts = true,
|
||||
.KHR_shader_draw_parameters = true,
|
||||
.KHR_shader_expect_assume = false,
|
||||
.KHR_shader_float_controls = true,
|
||||
.KHR_shader_subgroup_extended_types = true,
|
||||
|
|
@ -241,7 +242,7 @@ static void pvr_physical_device_get_supported_features(
|
|||
.dualSrcBlend = false,
|
||||
.logicOp = true,
|
||||
.multiDrawIndirect = false,
|
||||
.drawIndirectFirstInstance = false,
|
||||
.drawIndirectFirstInstance = true,
|
||||
.depthClamp = false,
|
||||
.depthBiasClamp = false,
|
||||
.fillModeNonSolid = false,
|
||||
|
|
@ -301,6 +302,9 @@ static void pvr_physical_device_get_supported_features(
|
|||
.multiviewGeometryShader = false,
|
||||
.multiviewTessellationShader = false,
|
||||
|
||||
/* Vulkan 1.1 / VK_KHR_shader_draw_parameters */
|
||||
.shaderDrawParameters = true,
|
||||
|
||||
/* Vulkan 1.2 / VK_KHR_timeline_semaphore */
|
||||
.timelineSemaphore = true,
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue