*num_vertices = 3;
/* Extract OUTPRIM field. */
- LLVMValueRef num = si_unpack_param(ctx, ctx->vs_state_bits, 2, 2);
+ LLVMValueRef num = si_unpack_param(ctx, ctx->vs_state_bits, 29, 2);
return LLVMBuildAdd(ctx->ac.builder, num, ctx->ac.i32_1, "");
}
} else {
assert(!(shader->key.ge.opt.ngg_culling & SI_NGG_CULL_FRONT_FACE));
} else {
/* Get the small prim filter precision. */
- small_prim_precision = si_unpack_param(ctx, ctx->vs_state_bits, 7, 4);
+ small_prim_precision = si_unpack_param(ctx, ctx->vs_state_bits, 22, 4);
small_prim_precision =
LLVMBuildOr(builder, small_prim_precision, LLVMConstInt(ctx->ac.i32, 0x70, 0), "");
small_prim_precision =
ac_build_ifcc(&ctx->ac, is_gs_thread, 5400);
/* Extract the PROVOKING_VTX_INDEX field. */
- LLVMValueRef provoking_vtx_in_prim = si_unpack_param(ctx, ctx->vs_state_bits, 4, 2);
+ LLVMValueRef provoking_vtx_in_prim = si_unpack_param(ctx, ctx->vs_state_bits, 27, 2);
/* provoking_vtx_index = vtxindex[provoking_vtx_in_prim]; */
LLVMValueRef indices = ac_build_gather_values(&ctx->ac, vtxindex, 3);
if (ctx->screen->use_ngg_streamout && !info->base.vs.blit_sgprs_amd) {
assert(!unterminated_es_if_block);
- tmp = si_unpack_param(ctx, ctx->vs_state_bits, 6, 1);
+ tmp = si_unpack_param(ctx, ctx->vs_state_bits, 26, 1);
tmp = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, "");
ac_build_ifcc(&ctx->ac, tmp, 5029); /* if (STREAMOUT_QUERY_ENABLED) */
tmp = LLVMBuildICmp(builder, LLVMIntEQ, get_wave_id_in_tg(ctx), ctx->ac.i32_0, "");
/* Write shader query data. */
if (ctx->screen->use_ngg_streamout) {
- tmp = si_unpack_param(ctx, ctx->vs_state_bits, 6, 1);
+ tmp = si_unpack_param(ctx, ctx->vs_state_bits, 26, 1);
tmp = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, "");
ac_build_ifcc(&ctx->ac, tmp, 5109); /* if (STREAMOUT_QUERY_ENABLED) */
unsigned num_query_comps = ctx->so.num_outputs ? 8 : 4;
LLVMValueRef is_odd = LLVMBuildLShr(builder, flags, ctx->ac.i8_1, "");
is_odd = LLVMBuildTrunc(builder, is_odd, ctx->ac.i1, "");
LLVMValueRef flatshade_first = LLVMBuildICmp(
- builder, LLVMIntEQ, si_unpack_param(ctx, ctx->vs_state_bits, 4, 2), ctx->ac.i32_0, "");
+ builder, LLVMIntEQ, si_unpack_param(ctx, ctx->vs_state_bits, 27, 2), ctx->ac.i32_0, "");
ac_build_triangle_strip_indices_to_triangle(&ctx->ac, is_odd, flatshade_first, prim.index);
}
/* These fields are only set in current_gs_state in si_context, and they are accessible
* in the shader via vs_state_bits in legacy GS, the GS copy shader, and any NGG shader.
*/
-#define S_GS_STATE_OUTPRIM(x) (((unsigned)(x)&0x3) << 2)
-#define C_GS_STATE_OUTPRIM 0xFFFFFFF3
-#define S_GS_STATE_PROVOKING_VTX_INDEX(x) (((unsigned)(x)&0x3) << 4)
-#define C_GS_STATE_PROVOKING_VTX_INDEX 0xFFFFFFCF
-#define S_GS_STATE_STREAMOUT_QUERY_ENABLED(x) (((unsigned)(x)&0x1) << 6)
-#define C_GS_STATE_STREAMOUT_QUERY_ENABLED 0xFFFFFFBF
-#define S_GS_STATE_SMALL_PRIM_PRECISION(x) (((unsigned)(x)&0xF) << 7)
-#define C_GS_STATE_SMALL_PRIM_PRECISION 0xFFFFF87F
/* bit gap */
+#define S_GS_STATE_SMALL_PRIM_PRECISION(x) (((unsigned)(x)&0xF) << 22)
+#define C_GS_STATE_SMALL_PRIM_PRECISION 0xFC3FFFFF
+#define S_GS_STATE_STREAMOUT_QUERY_ENABLED(x) (((unsigned)(x)&0x1) << 26)
+#define C_GS_STATE_STREAMOUT_QUERY_ENABLED 0xFBFFFFFF
+#define S_GS_STATE_PROVOKING_VTX_INDEX(x) (((unsigned)(x)&0x3) << 27)
+#define C_GS_STATE_PROVOKING_VTX_INDEX 0xE7FFFFFF
+#define S_GS_STATE_OUTPRIM(x) (((unsigned)(x)&0x3) << 29)
+#define C_GS_STATE_OUTPRIM 0x9FFFFFFF
#define S_GS_STATE_PIPELINE_STATS_EMU(x) (((unsigned)(x)&0x1) << 31)
#define C_GS_STATE_PIPELINE_STATS_EMU 0x7FFFFFFF