spirv,nir: add support for SpvBuiltInFullyCoveredEXT
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21497>
This commit is contained in:

committed by
Marge Bot

parent
cf2bc83c60
commit
bb7e0c4280
@@ -2501,6 +2501,8 @@ nir_intrinsic_from_system_value(gl_system_value val)
|
|||||||
return nir_intrinsic_load_mesh_view_count;
|
return nir_intrinsic_load_mesh_view_count;
|
||||||
case SYSTEM_VALUE_FRAG_SHADING_RATE:
|
case SYSTEM_VALUE_FRAG_SHADING_RATE:
|
||||||
return nir_intrinsic_load_frag_shading_rate;
|
return nir_intrinsic_load_frag_shading_rate;
|
||||||
|
case SYSTEM_VALUE_FULLY_COVERED:
|
||||||
|
return nir_intrinsic_load_fully_covered;
|
||||||
default:
|
default:
|
||||||
unreachable("system value does not directly correspond to intrinsic");
|
unreachable("system value does not directly correspond to intrinsic");
|
||||||
}
|
}
|
||||||
@@ -2648,6 +2650,8 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin)
|
|||||||
return SYSTEM_VALUE_FRAG_SHADING_RATE;
|
return SYSTEM_VALUE_FRAG_SHADING_RATE;
|
||||||
case nir_intrinsic_load_mesh_view_count:
|
case nir_intrinsic_load_mesh_view_count:
|
||||||
return SYSTEM_VALUE_MESH_VIEW_COUNT;
|
return SYSTEM_VALUE_MESH_VIEW_COUNT;
|
||||||
|
case nir_intrinsic_load_fully_covered:
|
||||||
|
return SYSTEM_VALUE_FULLY_COVERED;
|
||||||
default:
|
default:
|
||||||
unreachable("intrinsic doesn't produce a system value");
|
unreachable("intrinsic doesn't produce a system value");
|
||||||
}
|
}
|
||||||
|
@@ -471,6 +471,7 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr)
|
|||||||
case nir_intrinsic_load_point_coord:
|
case nir_intrinsic_load_point_coord:
|
||||||
case nir_intrinsic_load_line_coord:
|
case nir_intrinsic_load_line_coord:
|
||||||
case nir_intrinsic_load_frag_coord:
|
case nir_intrinsic_load_frag_coord:
|
||||||
|
case nir_intrinsic_load_fully_covered:
|
||||||
case nir_intrinsic_load_sample_pos:
|
case nir_intrinsic_load_sample_pos:
|
||||||
case nir_intrinsic_load_sample_pos_or_center:
|
case nir_intrinsic_load_sample_pos_or_center:
|
||||||
case nir_intrinsic_load_vertex_id_zero_base:
|
case nir_intrinsic_load_vertex_id_zero_base:
|
||||||
|
@@ -709,6 +709,7 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
|
|||||||
case nir_intrinsic_load_invocation_id:
|
case nir_intrinsic_load_invocation_id:
|
||||||
case nir_intrinsic_load_frag_coord:
|
case nir_intrinsic_load_frag_coord:
|
||||||
case nir_intrinsic_load_frag_shading_rate:
|
case nir_intrinsic_load_frag_shading_rate:
|
||||||
|
case nir_intrinsic_load_fully_covered:
|
||||||
case nir_intrinsic_load_point_coord:
|
case nir_intrinsic_load_point_coord:
|
||||||
case nir_intrinsic_load_line_coord:
|
case nir_intrinsic_load_line_coord:
|
||||||
case nir_intrinsic_load_front_face:
|
case nir_intrinsic_load_front_face:
|
||||||
|
@@ -1109,6 +1109,9 @@ intrinsic("store_stack", [0],
|
|||||||
intrinsic("load_frag_shading_rate", dest_comp=1, bit_sizes=[32],
|
intrinsic("load_frag_shading_rate", dest_comp=1, bit_sizes=[32],
|
||||||
flags=[CAN_ELIMINATE, CAN_REORDER])
|
flags=[CAN_ELIMINATE, CAN_REORDER])
|
||||||
|
|
||||||
|
# Whether the rasterized fragment is fully covered by the generating primitive.
|
||||||
|
system_value("fully_covered", dest_comp=1, bit_sizes=[1])
|
||||||
|
|
||||||
# OpenCL printf instruction
|
# OpenCL printf instruction
|
||||||
# First source is a deref to the format string
|
# First source is a deref to the format string
|
||||||
# Second source is a deref to a struct containing the args
|
# Second source is a deref to a struct containing the args
|
||||||
|
@@ -338,6 +338,7 @@ gl_system_value_name(gl_system_value sysval)
|
|||||||
ENUM(SYSTEM_VALUE_TCS_HEADER_IR3),
|
ENUM(SYSTEM_VALUE_TCS_HEADER_IR3),
|
||||||
ENUM(SYSTEM_VALUE_REL_PATCH_ID_IR3),
|
ENUM(SYSTEM_VALUE_REL_PATCH_ID_IR3),
|
||||||
ENUM(SYSTEM_VALUE_FRAG_SHADING_RATE),
|
ENUM(SYSTEM_VALUE_FRAG_SHADING_RATE),
|
||||||
|
ENUM(SYSTEM_VALUE_FULLY_COVERED),
|
||||||
};
|
};
|
||||||
STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX);
|
STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX);
|
||||||
return NAME(sysval);
|
return NAME(sysval);
|
||||||
|
@@ -869,6 +869,12 @@ typedef enum
|
|||||||
*/
|
*/
|
||||||
SYSTEM_VALUE_FRAG_SHADING_RATE,
|
SYSTEM_VALUE_FRAG_SHADING_RATE,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Rasterized fragment is fully covered by the generating primitive
|
||||||
|
* (SPV_EXT_fragment_fully_covered).
|
||||||
|
*/
|
||||||
|
SYSTEM_VALUE_FULLY_COVERED,
|
||||||
|
|
||||||
SYSTEM_VALUE_MAX /**< Number of values */
|
SYSTEM_VALUE_MAX /**< Number of values */
|
||||||
} gl_system_value;
|
} gl_system_value;
|
||||||
|
|
||||||
|
@@ -1174,6 +1174,11 @@ vtn_get_builtin_location(struct vtn_builder *b,
|
|||||||
case SpvBuiltInCullPrimitiveEXT:
|
case SpvBuiltInCullPrimitiveEXT:
|
||||||
*location = VARYING_SLOT_CULL_PRIMITIVE;
|
*location = VARYING_SLOT_CULL_PRIMITIVE;
|
||||||
break;
|
break;
|
||||||
|
case SpvBuiltInFullyCoveredEXT:
|
||||||
|
*location = SYSTEM_VALUE_FULLY_COVERED;
|
||||||
|
set_mode_system_value(b, mode);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
vtn_fail("Unsupported builtin: %s (%u)",
|
vtn_fail("Unsupported builtin: %s (%u)",
|
||||||
spirv_builtin_to_string(builtin), builtin);
|
spirv_builtin_to_string(builtin), builtin);
|
||||||
|
Reference in New Issue
Block a user