{
        struct si_shader_context *ctx = si_shader_context_from_abi(abi);
        if (ctx->type == PIPE_SHADER_TESS_CTRL)
-               return unpack_param(ctx, ctx->param_tcs_out_lds_layout, 26, 6);
+               return unpack_param(ctx, ctx->param_tcs_out_lds_layout, 13, 6);
        else if (ctx->type == PIPE_SHADER_TESS_EVAL)
                return get_num_tcs_out_vertices(ctx);
        else
 
        /* Layout of TCS outputs / TES inputs:
         *   [0:12] = stride between output patches in DW, num_outputs * num_vertices * 4
         *            max = 32*32*4 + 32*4
-        *   [26:31] = gl_PatchVerticesIn, max = 32
+        *   [13:18] = gl_PatchVerticesIn, max = 32
         */
        int param_tcs_out_lds_layout;
        int param_tcs_offchip_addr_base64k;
 
 
        tcs_in_layout = S_VS_STATE_LS_OUT_PATCH_SIZE(input_patch_size / 4) |
                        S_VS_STATE_LS_OUT_VERTEX_SIZE(input_vertex_size / 4);
-       tcs_out_layout = output_patch_size / 4;
+       tcs_out_layout = (output_patch_size / 4) |
+                        (num_tcs_input_cp << 13);
        tcs_out_offsets = (output_patch0_offset / 16) |
                          ((perpatch_output_offset / 16) << 16);
        offchip_layout = *num_patches |
                                      GFX9_SGPR_TCS_OFFCHIP_LAYOUT * 4, 3);
                radeon_emit(cs, offchip_layout);
                radeon_emit(cs, tcs_out_offsets);
-               radeon_emit(cs, tcs_out_layout | (num_tcs_input_cp << 26));
+               radeon_emit(cs, tcs_out_layout);
        } else {
                unsigned ls_rsrc2 = ls_current->config.rsrc2;
 
                        R_00B430_SPI_SHADER_USER_DATA_HS_0 + GFX6_SGPR_TCS_OFFCHIP_LAYOUT * 4, 4);
                radeon_emit(cs, offchip_layout);
                radeon_emit(cs, tcs_out_offsets);
-               radeon_emit(cs, tcs_out_layout | (num_tcs_input_cp << 26));
+               radeon_emit(cs, tcs_out_layout);
                radeon_emit(cs, tcs_in_layout);
        }