Subversion Repositories Kolibri OS

Rev

Rev 2360 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2360 Rev 2361
Line 88... Line 88...
88
	const char *name;
88
	const char *name;
89
	const void *data;
89
	const void *data;
90
	unsigned int size;
90
	unsigned int size;
91
	Bool has_mask;
91
	Bool has_mask;
92
} wm_kernels[] = {
92
} wm_kernels[] = {
93
	KERNEL(NOMASK, ps_kernel_nomask_affine, FALSE),
93
//   KERNEL(NOMASK, ps_kernel_nomask_affine, FALSE),
-
 
94
//    KERNEL(MASK, ps_kernel_masknoca_affine, TRUE),
-
 
95
    KERNEL(NOMASK, ps_kernel_masknoca_affine, TRUE),
94
    KERNEL(MASK, ps_kernel_masknoca_affine, TRUE),
96
    KERNEL(MASK, ps_kernel_masknoca_affine, TRUE),
95
};
97
};
96
#undef KERNEL
98
#undef KERNEL
Line 97... Line 99...
97
 
99
 
Line 169... Line 171...
169
			       bool has_component_alpha,
171
			       bool has_component_alpha,
170
			       uint32_t dst_format)
172
			       uint32_t dst_format)
171
{
173
{
172
	uint32_t src, dst;
174
	uint32_t src, dst;
Line -... Line 175...
-
 
175
 
-
 
176
//    src = GEN6_BLENDFACTOR_ONE; //gen6_blend_op[op].src_blend;
-
 
177
//    dst = GEN6_BLENDFACTOR_ZERO; //gen6_blend_op[op].dst_blend;
173
 
178
 
174
    src = GEN6_BLENDFACTOR_ONE; //gen6_blend_op[op].src_blend;
179
    src = GEN6_BLENDFACTOR_ONE; //gen6_blend_op[op].src_blend;
Line 175... Line 180...
175
    dst = GEN6_BLENDFACTOR_ZERO; //gen6_blend_op[op].dst_blend;
180
    dst = GEN6_BLENDFACTOR_INV_SRC_ALPHA; //gen6_blend_op[op].dst_blend;
176
 
181
 
177
#if 0
182
#if 0
178
	/* If there's no dst alpha channel, adjust the blend op so that
183
	/* If there's no dst alpha channel, adjust the blend op so that
Line 1300... Line 1305...
1300
 
1305
 
1301
	if (sna->render_state.gen6.needs_invariant)
1306
	if (sna->render_state.gen6.needs_invariant)
1302
		gen6_emit_invariant(sna);
1307
		gen6_emit_invariant(sna);
Line -... Line 1308...
-
 
1308
}
-
 
1309
 
-
 
1310
static void gen6_emit_composite_state(struct sna *sna,
-
 
1311
                      const struct sna_composite_op *op)
-
 
1312
{
-
 
1313
    uint32_t *binding_table;
-
 
1314
    uint16_t offset;
-
 
1315
    bool dirty;
-
 
1316
 
-
 
1317
    gen6_get_batch(sna);
-
 
1318
    dirty = FALSE;
-
 
1319
 
-
 
1320
    binding_table = gen6_composite_get_binding_table(sna, &offset);
-
 
1321
 
-
 
1322
    binding_table[0] =
-
 
1323
        gen6_bind_bo(sna,
-
 
1324
                op->dst.bo, op->dst.width, op->dst.height,
-
 
1325
                op->dst.format,
-
 
1326
                TRUE);
-
 
1327
    binding_table[1] =
-
 
1328
        gen6_bind_bo(sna,
-
 
1329
                 op->src.bo, op->src.width, op->src.height,
-
 
1330
                 op->src.card_format,
-
 
1331
                 FALSE);
-
 
1332
    if (op->mask.bo) {
-
 
1333
        binding_table[2] =
-
 
1334
            gen6_bind_bo(sna,
-
 
1335
                     op->mask.bo,
-
 
1336
                     op->mask.width,
-
 
1337
                     op->mask.height,
-
 
1338
                     op->mask.card_format,
-
 
1339
                     FALSE);
-
 
1340
    }
-
 
1341
 
-
 
1342
    if (sna->kgem.surface == offset &&
-
 
1343
        *(uint64_t *)(sna->kgem.batch + sna->render_state.gen6.surface_table) == *(uint64_t*)binding_table &&
-
 
1344
        (op->mask.bo == NULL ||
-
 
1345
         sna->kgem.batch[sna->render_state.gen6.surface_table+2] == binding_table[2])) {
-
 
1346
        sna->kgem.surface += sizeof(struct gen6_surface_state_padded) / sizeof(uint32_t);
-
 
1347
        offset = sna->render_state.gen6.surface_table;
-
 
1348
    }
-
 
1349
 
-
 
1350
    gen6_emit_state(sna, op, offset | dirty);
-
 
1351
}
Line 1303... Line 1352...
1303
}
1352
 
1304
 
1353
 
1305
 
1354
 
1306
static void
1355
static void
Line 1584... Line 1633...
1584
	return TRUE;
1633
	return TRUE;
1585
}
1634
}
Line 1586... Line 1635...
1586
 
1635
 
Line -... Line 1636...
-
 
1636
#endif
-
 
1637
 
-
 
1638
 
-
 
1639
fastcall static void
-
 
1640
gen6_emit_composite_primitive_identity_source_mask(struct sna *sna,
-
 
1641
                           const struct sna_composite_op *op,
-
 
1642
                           const struct sna_composite_rectangles *r)
-
 
1643
{
-
 
1644
    union {
-
 
1645
        struct sna_coordinate p;
-
 
1646
        float f;
-
 
1647
    } dst;
-
 
1648
    float src_x, src_y;
-
 
1649
    float msk_x, msk_y;
-
 
1650
    float w, h;
-
 
1651
    float *v;
-
 
1652
 
-
 
1653
    src_x = r->src.x + op->src.offset[0];
-
 
1654
    src_y = r->src.y + op->src.offset[1];
-
 
1655
    msk_x = r->mask.x + op->mask.offset[0];
-
 
1656
    msk_y = r->mask.y + op->mask.offset[1];
-
 
1657
    w = r->width;
-
 
1658
    h = r->height;
-
 
1659
 
-
 
1660
    v = sna->render.vertices + sna->render.vertex_used;
-
 
1661
    sna->render.vertex_used += 15;
-
 
1662
 
-
 
1663
    dst.p.x = r->dst.x + r->width;
-
 
1664
    dst.p.y = r->dst.y + r->height;
-
 
1665
    v[0] = dst.f;
-
 
1666
    v[1] = (src_x + w) * op->src.scale[0];
-
 
1667
    v[2] = (src_y + h) * op->src.scale[1];
-
 
1668
    v[3] = (msk_x + w) * op->mask.scale[0];
-
 
1669
    v[4] = (msk_y + h) * op->mask.scale[1];
-
 
1670
 
-
 
1671
    dst.p.x = r->dst.x;
-
 
1672
    v[5] = dst.f;
-
 
1673
    v[6] = src_x * op->src.scale[0];
-
 
1674
    v[7] = v[2];
-
 
1675
    v[8] = msk_x * op->mask.scale[0];
-
 
1676
    v[9] = v[4];
-
 
1677
 
-
 
1678
    dst.p.y = r->dst.y;
-
 
1679
    v[10] = dst.f;
-
 
1680
    v[11] = v[6];
-
 
1681
    v[12] = src_y * op->src.scale[1];
-
 
1682
    v[13] = v[8];
-
 
1683
    v[14] = msk_y * op->mask.scale[1];
-
 
1684
}
-
 
1685
 
-
 
1686
fastcall static void
-
 
1687
gen6_render_composite_box(struct sna *sna,
-
 
1688
              const struct sna_composite_op *op,
-
 
1689
              const BoxRec *box)
-
 
1690
{
-
 
1691
    struct sna_composite_rectangles r;
-
 
1692
 
-
 
1693
    if (unlikely(!gen6_get_rectangles(sna, op, 1))) {
-
 
1694
//        _kgem_submit(&sna->kgem);
-
 
1695
//        gen6_emit_composite_state(sna, op);
-
 
1696
//        gen6_get_rectangles(sna, op, 1);
-
 
1697
    }
-
 
1698
 
-
 
1699
    DBG(("  %s: (%d, %d), (%d, %d)\n",
-
 
1700
         __FUNCTION__,
-
 
1701
         box->x1, box->y1, box->x2, box->y2));
-
 
1702
 
-
 
1703
    r.dst.x = box->x1;
-
 
1704
    r.dst.y = box->y1;
-
 
1705
    r.width  = box->x2 - box->x1;
-
 
1706
    r.height = box->y2 - box->y1;
-
 
1707
    r.src = r.mask = r.dst;
-
 
1708
 
-
 
1709
    op->prim_emit(sna, op, &r);
-
 
1710
}
1587
#endif
1711
 
1588
 
1712
 
1589
static void gen6_render_composite_done(struct sna *sna,
1713
static void gen6_render_composite_done(struct sna *sna,
1590
				       const struct sna_composite_op *op)
1714
                       const struct sna_composite_op *op)
Line 1603... Line 1727...
1603
 
1727
 
1604
//   sna_render_composite_redirect_done(sna, op);
1728
//   sna_render_composite_redirect_done(sna, op);
Line -... Line 1729...
-
 
1729
}
-
 
1730
 
-
 
1731
 
-
 
1732
static Bool
-
 
1733
gen6_render_composite(struct sna *sna,
-
 
1734
              uint8_t op,
-
 
1735
              bitmap_t *src,
-
 
1736
              struct kgem_bo *src_bo,
-
 
1737
              bitmap_t *mask,
-
 
1738
              struct kgem_bo *mask_bo,
-
 
1739
              bitmap_t *dst,
-
 
1740
              struct kgem_bo *dst_bo,
-
 
1741
              int16_t src_x, int16_t src_y,
-
 
1742
              int16_t msk_x, int16_t msk_y,
-
 
1743
              int16_t dst_x, int16_t dst_y,
-
 
1744
              int16_t width, int16_t height,
-
 
1745
              struct sna_composite_op *tmp)
-
 
1746
{
-
 
1747
//    if (op >= ARRAY_SIZE(gen6_blend_op))
-
 
1748
//        return FALSE;
-
 
1749
 
-
 
1750
//    ENTER();
-
 
1751
 
-
 
1752
    DBG(("%s: %dx%d, current mode=%d\n", __FUNCTION__,
-
 
1753
         width, height, sna->kgem.ring));
-
 
1754
 
-
 
1755
    tmp->op = PictOpSrc;
-
 
1756
 
-
 
1757
    tmp->dst.bo     = dst_bo;
-
 
1758
    tmp->dst.width  = dst->width;
-
 
1759
    tmp->dst.height = dst->height;
-
 
1760
    tmp->dst.format = GEN6_SURFACEFORMAT_B8G8R8A8_UNORM;
-
 
1761
 
-
 
1762
 
-
 
1763
    tmp->src.bo = src_bo;
-
 
1764
    tmp->src.card_format = GEN6_SURFACEFORMAT_B8G8R8A8_UNORM;
-
 
1765
    tmp->src.width  = src->width;
-
 
1766
    tmp->src.height = src->height;
-
 
1767
 
-
 
1768
    tmp->src.scale[0] = 1.f/width;            //src->width;
-
 
1769
    tmp->src.scale[1] = 1.f/height;            //src->height;
-
 
1770
    tmp->src.filter = SAMPLER_FILTER_BILINEAR;
-
 
1771
    tmp->src.repeat = SAMPLER_EXTEND_NONE;
-
 
1772
    tmp->src.offset[0] = -dst_x;
-
 
1773
    tmp->src.offset[1] = -dst_y;
-
 
1774
    tmp->src.is_affine = TRUE;
-
 
1775
 
-
 
1776
 
-
 
1777
    tmp->mask.bo = mask_bo;
-
 
1778
    tmp->mask.card_format = GEN6_SURFACEFORMAT_A8_UNORM;
-
 
1779
    tmp->mask.width  = mask->width;
-
 
1780
    tmp->mask.height = mask->height;
-
 
1781
 
-
 
1782
    tmp->mask.scale[0] = 1.f/mask->width;
-
 
1783
    tmp->mask.scale[1] = 1.f/mask->height;
-
 
1784
    tmp->mask.filter = SAMPLER_FILTER_NEAREST;
-
 
1785
    tmp->mask.repeat = SAMPLER_EXTEND_NONE;
-
 
1786
    tmp->mask.offset[0] = -dst_x;
-
 
1787
    tmp->mask.offset[1] = -dst_y;
-
 
1788
    tmp->mask.is_affine = TRUE;
-
 
1789
 
-
 
1790
    tmp->is_affine = TRUE;
-
 
1791
    tmp->has_component_alpha = FALSE;
-
 
1792
    tmp->need_magic_ca_pass = FALSE;
-
 
1793
 
-
 
1794
    tmp->prim_emit = gen6_emit_composite_primitive_identity_source_mask;
-
 
1795
 
-
 
1796
    tmp->floats_per_vertex = 5 + 2 * !tmp->is_affine;
-
 
1797
 
-
 
1798
    tmp->floats_per_rect = 3 * tmp->floats_per_vertex;
-
 
1799
 
-
 
1800
    tmp->u.gen6.wm_kernel = GEN6_WM_KERNEL_MASK;
-
 
1801
    tmp->u.gen6.nr_surfaces = 2 + 1;
-
 
1802
    tmp->u.gen6.nr_inputs = 1 + 1;
-
 
1803
    tmp->u.gen6.ve_id = gen6_choose_composite_vertex_buffer(tmp);
-
 
1804
 
-
 
1805
    tmp->need_magic_ca_pass = TRUE;
-
 
1806
 
-
 
1807
//    tmp->blt   = gen6_render_composite_blt;
-
 
1808
    tmp->box   = gen6_render_composite_box;
-
 
1809
//    tmp->boxes = gen6_render_composite_boxes;
-
 
1810
    tmp->done  = gen6_render_composite_done;
-
 
1811
 
-
 
1812
    gen6_emit_composite_state(sna, tmp);
-
 
1813
    gen6_align_vertex(sna, tmp);
-
 
1814
 
-
 
1815
//    LEAVE();
-
 
1816
 
Line 1605... Line 1817...
1605
}
1817
    return TRUE;
1606
 
1818
}
1607
 
1819
 
1608
 
1820
 
Line 1928... Line 2140...
1928
        return FALSE;
2140
        return FALSE;
Line 1929... Line 2141...
1929
 
2141
 
1930
//    sna->kgem.context_switch = gen6_render_context_switch;
2142
//    sna->kgem.context_switch = gen6_render_context_switch;
Line 1931... Line 2143...
1931
      sna->kgem.retire = gen6_render_retire;
2143
      sna->kgem.retire = gen6_render_retire;
1932
 
2144
 
Line 1933... Line 2145...
1933
//    sna->render.composite = gen6_render_composite;
2145
    sna->render.composite = gen6_render_composite;
1934
//    sna->render.video = gen6_render_video;
2146
//    sna->render.video = gen6_render_video;