}
void
+ac_nir_store_var_components(nir_builder *b, nir_variable *var, nir_ssa_def *value,
+ unsigned component, unsigned writemask)
+{
+ /* component store */
+ if (value->num_components != 4) {
+ nir_ssa_def *undef = nir_ssa_undef(b, 1, value->bit_size);
+
+ /* add undef component before and after value to form a vec4 */
+ nir_ssa_def *comp[4];
+ for (int i = 0; i < 4; i++) {
+ comp[i] = (i >= component && i < component + value->num_components) ?
+ nir_channel(b, value, i - component) : undef;
+ }
+
+ value = nir_vec(b, comp, 4);
+ writemask <<= component;
+ } else {
+ /* if num_component==4, there should be no component offset */
+ assert(component == 0);
+ }
+
+ nir_store_var(b, var, value, writemask);
+}
+
+void
ac_nir_export_primitive(nir_builder *b, nir_ssa_def *prim)
{
unsigned write_mask = BITFIELD_MASK(prim->num_components);
}
static void
-store_var_components(nir_builder *b, nir_variable *var, nir_ssa_def *value,
- unsigned component, unsigned writemask)
-{
- /* component store */
- if (value->num_components != 4) {
- nir_ssa_def *undef = nir_ssa_undef(b, 1, value->bit_size);
-
- /* add undef component before and after value to form a vec4 */
- nir_ssa_def *comp[4];
- for (int i = 0; i < 4; i++) {
- comp[i] = (i >= component && i < component + value->num_components) ?
- nir_channel(b, value, i - component) : undef;
- }
-
- value = nir_vec(b, comp, 4);
- writemask <<= component;
- } else {
- /* if num_component==4, there should be no component offset */
- assert(component == 0);
- }
-
- nir_store_var(b, var, value, writemask);
-}
-
-static void
add_clipdist_bit(nir_builder *b, nir_ssa_def *dist, unsigned index, nir_variable *mask)
{
nir_ssa_def *is_neg = nir_flt(b, dist, nir_imm_float(b, 0));
nir_io_semantics io_sem = nir_intrinsic_io_semantics(intrin);
switch (io_sem.location) {
case VARYING_SLOT_POS:
- store_var_components(b, s->position_value_var, store_val, component, writemask);
+ ac_nir_store_var_components(b, s->position_value_var, store_val, component, writemask);
break;
case VARYING_SLOT_CLIP_DIST0:
case VARYING_SLOT_CLIP_DIST1: {
break;
}
case VARYING_SLOT_CLIP_VERTEX:
- store_var_components(b, s->clip_vertex_var, store_val, component, writemask);
+ ac_nir_store_var_components(b, s->clip_vertex_var, store_val, component, writemask);
break;
default:
break;