nir,spirv: Add support for SPV_NV_shader_sm_builtins
Reviewed-by: Karol Herbst <kherbst@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27154>
This commit is contained in:
committed by
Marge Bot
parent
02d7f5e4ff
commit
82fe981e35
@@ -2307,6 +2307,14 @@ nir_intrinsic_from_system_value(gl_system_value val)
|
||||
return nir_intrinsic_load_shader_index;
|
||||
case SYSTEM_VALUE_COALESCED_INPUT_COUNT:
|
||||
return nir_intrinsic_load_coalesced_input_count;
|
||||
case SYSTEM_VALUE_WARPS_PER_SM_NV:
|
||||
return nir_intrinsic_load_warps_per_sm_nv;
|
||||
case SYSTEM_VALUE_SM_COUNT_NV:
|
||||
return nir_intrinsic_load_sm_count_nv;
|
||||
case SYSTEM_VALUE_WARP_ID_NV:
|
||||
return nir_intrinsic_load_warp_id_nv;
|
||||
case SYSTEM_VALUE_SM_ID_NV:
|
||||
return nir_intrinsic_load_sm_id_nv;
|
||||
default:
|
||||
unreachable("system value does not directly correspond to intrinsic");
|
||||
}
|
||||
@@ -2469,6 +2477,14 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
|
||||
return SYSTEM_VALUE_SHADER_INDEX;
|
||||
case nir_intrinsic_load_coalesced_input_count:
|
||||
return SYSTEM_VALUE_COALESCED_INPUT_COUNT;
|
||||
case nir_intrinsic_load_warps_per_sm_nv:
|
||||
return SYSTEM_VALUE_WARPS_PER_SM_NV;
|
||||
case nir_intrinsic_load_sm_count_nv:
|
||||
return SYSTEM_VALUE_SM_COUNT_NV;
|
||||
case nir_intrinsic_load_warp_id_nv:
|
||||
return SYSTEM_VALUE_WARP_ID_NV;
|
||||
case nir_intrinsic_load_sm_id_nv:
|
||||
return SYSTEM_VALUE_SM_ID_NV;
|
||||
default:
|
||||
unreachable("intrinsic doesn't produce a system value");
|
||||
}
|
||||
|
||||
@@ -2066,6 +2066,12 @@ intrinsic("bar_break_nv", dest_comp=1, bit_sizes=[32], src_comp=[1])
|
||||
# src[] = { bar, bar_set }
|
||||
intrinsic("bar_sync_nv", src_comp=[1, 1])
|
||||
|
||||
# NVIDIA-specific system values
|
||||
system_value("warps_per_sm_nv", 1, bit_sizes=[32])
|
||||
system_value("sm_count_nv", 1, bit_sizes=[32])
|
||||
system_value("warp_id_nv", 1, bit_sizes=[32])
|
||||
system_value("sm_id_nv", 1, bit_sizes=[32])
|
||||
|
||||
# In order to deal with flipped render targets, gl_PointCoord may be flipped
|
||||
# in the shader requiring a shader key or extra instructions or it may be
|
||||
# flipped in hardware based on a state bit. This version of gl_PointCoord
|
||||
|
||||
@@ -393,6 +393,10 @@ gl_system_value_name(gl_system_value sysval)
|
||||
ENUM(SYSTEM_VALUE_FRAG_INVOCATION_COUNT),
|
||||
ENUM(SYSTEM_VALUE_SHADER_INDEX),
|
||||
ENUM(SYSTEM_VALUE_COALESCED_INPUT_COUNT),
|
||||
ENUM(SYSTEM_VALUE_WARPS_PER_SM_NV),
|
||||
ENUM(SYSTEM_VALUE_SM_COUNT_NV),
|
||||
ENUM(SYSTEM_VALUE_WARP_ID_NV),
|
||||
ENUM(SYSTEM_VALUE_SM_ID_NV),
|
||||
};
|
||||
STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX);
|
||||
return NAME(sysval);
|
||||
|
||||
@@ -927,6 +927,12 @@ typedef enum
|
||||
SYSTEM_VALUE_SHADER_INDEX,
|
||||
SYSTEM_VALUE_COALESCED_INPUT_COUNT,
|
||||
|
||||
/* SPV_NV_shader_sm_builtins */
|
||||
SYSTEM_VALUE_WARPS_PER_SM_NV,
|
||||
SYSTEM_VALUE_SM_COUNT_NV,
|
||||
SYSTEM_VALUE_WARP_ID_NV,
|
||||
SYSTEM_VALUE_SM_ID_NV,
|
||||
|
||||
SYSTEM_VALUE_MAX /**< Number of values */
|
||||
} gl_system_value;
|
||||
|
||||
|
||||
@@ -103,6 +103,7 @@ struct spirv_supported_capabilities {
|
||||
bool runtime_descriptor_array;
|
||||
bool shader_clock;
|
||||
bool shader_enqueue;
|
||||
bool shader_sm_builtins_nv;
|
||||
bool shader_viewport_index_layer;
|
||||
bool shader_viewport_mask_nv;
|
||||
bool sparse_residency;
|
||||
|
||||
@@ -4922,6 +4922,10 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
|
||||
spv_check_supported(fragment_shader_pixel_interlock, cap);
|
||||
break;
|
||||
|
||||
case SpvCapabilityShaderSMBuiltinsNV:
|
||||
spv_check_supported(shader_sm_builtins_nv, cap);
|
||||
break;
|
||||
|
||||
case SpvCapabilityDemoteToHelperInvocation:
|
||||
spv_check_supported(demote_to_helper_invocation, cap);
|
||||
b->uses_demote_to_helper_invocation = true;
|
||||
|
||||
@@ -1269,6 +1269,26 @@ vtn_get_builtin_location(struct vtn_builder *b,
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
|
||||
case SpvBuiltInWarpsPerSMNV:
|
||||
*location = SYSTEM_VALUE_WARPS_PER_SM_NV;
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
|
||||
case SpvBuiltInSMCountNV:
|
||||
*location = SYSTEM_VALUE_SM_COUNT_NV;
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
|
||||
case SpvBuiltInWarpIDNV:
|
||||
*location = SYSTEM_VALUE_WARP_ID_NV;
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
|
||||
case SpvBuiltInSMIDNV:
|
||||
*location = SYSTEM_VALUE_SM_ID_NV;
|
||||
set_mode_system_value(b, mode);
|
||||
break;
|
||||
|
||||
default:
|
||||
vtn_fail("Unsupported builtin: %s (%u)",
|
||||
spirv_builtin_to_string(builtin), builtin);
|
||||
|
||||
Reference in New Issue
Block a user