static void gen6_draw_wm_multisample(struct ilo_render *r, const struct ilo_state_vector *vec, struct ilo_render_draw_session *session) { /* 3DSTATE_MULTISAMPLE and 3DSTATE_SAMPLE_MASK */ if (DIRTY(SAMPLE_MASK) || DIRTY(FB)) { const uint32_t *packed_sample_pos; packed_sample_pos = (vec->fb.num_samples > 1) ? &r->packed_sample_position_4x : &r->packed_sample_position_1x; if (ilo_dev_gen(r->dev) == ILO_GEN(6)) { gen6_wa_pre_non_pipelined(r); gen6_wa_pre_3dstate_multisample(r); } gen6_3DSTATE_MULTISAMPLE(r->builder, vec->fb.num_samples, packed_sample_pos, vec->rasterizer->state.half_pixel_center); gen6_3DSTATE_SAMPLE_MASK(r->builder, (vec->fb.num_samples > 1) ? vec->sample_mask : 0x1); } }
static void gen8_draw_wm_multisample(struct ilo_render *r, const struct ilo_state_vector *vec, struct ilo_render_draw_session *session) { /* 3DSTATE_MULTISAMPLE */ if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_MULTISAMPLE) gen8_3DSTATE_MULTISAMPLE(r->builder, &vec->rasterizer->rs); /* 3DSTATE_SAMPLE_MASK */ if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_SAMPLE_MASK) gen6_3DSTATE_SAMPLE_MASK(r->builder, &vec->rasterizer->rs); }
static void gen7_rectlist_wm_multisample(struct ilo_render *r, const struct ilo_blitter *blitter) { const uint8_t sample_count = (blitter->fb.num_samples > 4) ? 8 : (blitter->fb.num_samples > 1) ? 4 : 1; gen7_wa_pre_3dstate_multisample(r); gen6_3DSTATE_MULTISAMPLE(r->builder, &blitter->fb.rs, &r->sample_pattern, sample_count); gen6_3DSTATE_SAMPLE_MASK(r->builder, &blitter->fb.rs); }
static void gen6_rectlist_wm_multisample(struct ilo_render *r, const struct ilo_blitter *blitter) { const uint32_t *packed_sample_pos = (blitter->fb.num_samples > 1) ? &r->packed_sample_position_4x : &r->packed_sample_position_1x; gen6_wa_pre_3dstate_multisample(r); gen6_3DSTATE_MULTISAMPLE(r->builder, blitter->fb.num_samples, packed_sample_pos, true); gen6_3DSTATE_SAMPLE_MASK(r->builder, (1 << blitter->fb.num_samples) - 1); }
static void gen7_draw_wm_multisample(struct ilo_render *r, const struct ilo_state_vector *vec, struct ilo_render_draw_session *session) { /* 3DSTATE_MULTISAMPLE */ if (DIRTY(FB) || (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_MULTISAMPLE)) { const uint8_t sample_count = (vec->fb.num_samples > 4) ? 8 : (vec->fb.num_samples > 1) ? 4 : 1; gen7_wa_pre_3dstate_multisample(r); gen6_3DSTATE_MULTISAMPLE(r->builder, &vec->rasterizer->rs, &r->sample_pattern, sample_count); } /* 3DSTATE_SAMPLE_MASK */ if (session->rs_delta.dirty & ILO_STATE_RASTER_3DSTATE_SAMPLE_MASK) gen6_3DSTATE_SAMPLE_MASK(r->builder, &vec->rasterizer->rs); }