mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 09:50:08 +01:00
nir,spirv: Add support for SPV_ARM_core_builtins
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36019>
This commit is contained in:
parent
a68a825aad
commit
000bd3046d
7 changed files with 65 additions and 1 deletions
|
|
@ -2546,6 +2546,16 @@ nir_intrinsic_from_system_value(gl_system_value val)
|
|||
return nir_intrinsic_load_warp_id_nv;
|
||||
case SYSTEM_VALUE_SM_ID_NV:
|
||||
return nir_intrinsic_load_sm_id_nv;
|
||||
case SYSTEM_VALUE_CORE_ID:
|
||||
return nir_intrinsic_load_core_id;
|
||||
case SYSTEM_VALUE_CORE_COUNT_ARM:
|
||||
return nir_intrinsic_load_core_count_arm;
|
||||
case SYSTEM_VALUE_CORE_MAX_ID_ARM:
|
||||
return nir_intrinsic_load_core_max_id_arm;
|
||||
case SYSTEM_VALUE_WARP_ID_ARM:
|
||||
return nir_intrinsic_load_warp_id_arm;
|
||||
case SYSTEM_VALUE_WARP_MAX_ID_ARM:
|
||||
return nir_intrinsic_load_warp_max_id_arm;
|
||||
default:
|
||||
return nir_num_intrinsics;
|
||||
}
|
||||
|
|
@ -2724,6 +2734,16 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
|
|||
return SYSTEM_VALUE_WARP_ID_NV;
|
||||
case nir_intrinsic_load_sm_id_nv:
|
||||
return SYSTEM_VALUE_SM_ID_NV;
|
||||
case nir_intrinsic_load_core_id:
|
||||
return SYSTEM_VALUE_CORE_ID;
|
||||
case nir_intrinsic_load_core_count_arm:
|
||||
return SYSTEM_VALUE_CORE_COUNT_ARM;
|
||||
case nir_intrinsic_load_core_max_id_arm:
|
||||
return SYSTEM_VALUE_CORE_MAX_ID_ARM;
|
||||
case nir_intrinsic_load_warp_id_arm:
|
||||
return SYSTEM_VALUE_WARP_ID_ARM;
|
||||
case nir_intrinsic_load_warp_max_id_arm:
|
||||
return SYSTEM_VALUE_WARP_MAX_ID_ARM;
|
||||
default:
|
||||
UNREACHABLE("intrinsic doesn't produce a system value");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -198,10 +198,12 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
|
|||
case nir_intrinsic_first_invocation:
|
||||
case nir_intrinsic_last_invocation:
|
||||
case nir_intrinsic_load_subgroup_id:
|
||||
case nir_intrinsic_load_core_id:
|
||||
case nir_intrinsic_shared_append_amd:
|
||||
case nir_intrinsic_shared_consume_amd:
|
||||
case nir_intrinsic_load_sm_id_nv:
|
||||
case nir_intrinsic_load_warp_id_nv:
|
||||
case nir_intrinsic_load_warp_id_arm:
|
||||
/* VS/TES/GS invocations of the same primitive can be in different
|
||||
* subgroups, so subgroup ops are always divergent between vertices of
|
||||
* the same primitive.
|
||||
|
|
@ -344,7 +346,6 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
|
|||
case nir_intrinsic_load_tcs_mem_attrib_stride:
|
||||
case nir_intrinsic_load_printf_buffer_address:
|
||||
case nir_intrinsic_load_printf_buffer_size:
|
||||
case nir_intrinsic_load_core_id:
|
||||
case nir_intrinsic_load_samples_log2_agx:
|
||||
case nir_intrinsic_load_active_subgroup_count_agx:
|
||||
case nir_intrinsic_load_root_agx:
|
||||
|
|
@ -358,6 +359,9 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
|
|||
case nir_intrinsic_load_ray_base_mem_addr_intel:
|
||||
case nir_intrinsic_load_ray_hw_stack_size_intel:
|
||||
case nir_intrinsic_load_per_primitive_remap_intel:
|
||||
case nir_intrinsic_load_core_count_arm:
|
||||
case nir_intrinsic_load_core_max_id_arm:
|
||||
case nir_intrinsic_load_warp_max_id_arm:
|
||||
is_divergent = false;
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -1648,6 +1648,12 @@ system_value("multisampled_pan", 1, bit_sizes=[32])
|
|||
# noperspective, this is 32 bits and starts from VARYING_SLOT_VAR0.
|
||||
system_value("noperspective_varyings_pan", 1, bit_sizes=[32])
|
||||
|
||||
# System values for SPV_ARM_core_builtins
|
||||
system_value("core_count_arm", 1, bit_sizes=[32])
|
||||
system_value("core_max_id_arm", 1, bit_sizes=[32])
|
||||
system_value("warp_id_arm", 1, bit_sizes=[32])
|
||||
system_value("warp_max_id_arm", 1, bit_sizes=[32])
|
||||
|
||||
# R600 specific instrincs
|
||||
#
|
||||
# location where the tesselation data is stored in LDS
|
||||
|
|
|
|||
|
|
@ -401,6 +401,11 @@ gl_system_value_name(gl_system_value sysval)
|
|||
ENUM(SYSTEM_VALUE_SM_COUNT_NV),
|
||||
ENUM(SYSTEM_VALUE_WARP_ID_NV),
|
||||
ENUM(SYSTEM_VALUE_SM_ID_NV),
|
||||
ENUM(SYSTEM_VALUE_CORE_ID),
|
||||
ENUM(SYSTEM_VALUE_CORE_COUNT_ARM),
|
||||
ENUM(SYSTEM_VALUE_CORE_MAX_ID_ARM),
|
||||
ENUM(SYSTEM_VALUE_WARP_ID_ARM),
|
||||
ENUM(SYSTEM_VALUE_WARP_MAX_ID_ARM),
|
||||
};
|
||||
STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX);
|
||||
return NAME(sysval);
|
||||
|
|
|
|||
|
|
@ -932,6 +932,13 @@ typedef enum
|
|||
SYSTEM_VALUE_WARP_ID_NV,
|
||||
SYSTEM_VALUE_SM_ID_NV,
|
||||
|
||||
/* SPV_ARM_core_builtins */
|
||||
SYSTEM_VALUE_CORE_ID,
|
||||
SYSTEM_VALUE_CORE_COUNT_ARM,
|
||||
SYSTEM_VALUE_CORE_MAX_ID_ARM,
|
||||
SYSTEM_VALUE_WARP_ID_ARM,
|
||||
SYSTEM_VALUE_WARP_MAX_ID_ARM,
|
||||
|
||||
SYSTEM_VALUE_MAX /**< Number of values */
|
||||
} gl_system_value;
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ static const struct spirv_capabilities implemented_capabilities = {
|
|||
.ComputeDerivativeGroupQuadsKHR = true,
|
||||
.CooperativeMatrixKHR = true,
|
||||
.CooperativeMatrixConversionsNV = true,
|
||||
.CoreBuiltinsARM = true,
|
||||
.CullDistance = true,
|
||||
.DemoteToHelperInvocation = true,
|
||||
.DenormFlushToZero = true,
|
||||
|
|
|
|||
|
|
@ -1316,6 +1316,27 @@ vtn_get_builtin_location(struct vtn_builder *b,
|
|||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
|
||||
case SpvBuiltInCoreIDARM:
|
||||
*location = SYSTEM_VALUE_CORE_ID,
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
case SpvBuiltInCoreCountARM:
|
||||
*location = SYSTEM_VALUE_CORE_COUNT_ARM,
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
case SpvBuiltInCoreMaxIDARM:
|
||||
*location = SYSTEM_VALUE_CORE_MAX_ID_ARM,
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
case SpvBuiltInWarpIDARM:
|
||||
*location = SYSTEM_VALUE_WARP_ID_ARM,
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
case SpvBuiltInWarpMaxIDARM:
|
||||
*location = SYSTEM_VALUE_WARP_MAX_ID_ARM,
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
|
||||
default:
|
||||
vtn_fail("Unsupported builtin: %s (%u)",
|
||||
spirv_builtin_to_string(builtin), builtin);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue