commit 209df22
Michael Forney
·
2014-01-31 12:14:47 +0000 UTC
parent d324af4
nouveau: Combine nvc0_2d_{src,dst} into nvc0_2d_use_buffer
1 files changed,
+17,
-31
+17,
-31
1@@ -391,47 +391,31 @@ bool renderer_set_target(struct wld_renderer * base,
2 return true;
3 }
4
5-static inline void nvc0_2d_dst(struct nouveau_renderer * renderer,
6- struct nouveau_buffer * buffer, uint32_t format)
7+static inline void nvc0_2d_use_buffer(struct nouveau_renderer * renderer,
8+ struct nouveau_buffer * buffer,
9+ uint16_t format_method, uint16_t format)
10 {
11+ uint32_t access = format == NV50_2D_SRC_FORMAT ? NOUVEAU_BO_RD
12+ : NOUVEAU_BO_WR;
13
14- if (buffer->bo->config.nvc0.memtype)
15- {
16- nvc0_2d(renderer->pushbuf, NV50_2D_DST_FORMAT, 5,
17- format, 0, buffer->bo->config.nvc0.tile_mode, 1, 0);
18- }
19- else
20- {
21- nvc0_2d(renderer->pushbuf, NV50_2D_DST_FORMAT, 2, format, 1);
22- nvc0_2d(renderer->pushbuf, NV50_2D_DST_PITCH, 1, buffer->base.pitch);
23- }
24+ nvc0_2d_inline(renderer->pushbuf, format_method, format);
25
26- nvc0_2d(renderer->pushbuf, NV50_2D_DST_WIDTH, 4,
27- buffer->base.width, buffer->base.height,
28- buffer->bo->offset >> 32, buffer->bo->offset);
29- nouveau_bufctx_refn(renderer->bufctx, 0, buffer->bo,
30- NOUVEAU_BO_VRAM | NOUVEAU_BO_WR);
31-}
32-
33-static inline void nvc0_2d_src(struct nouveau_renderer * renderer,
34- struct nouveau_buffer * buffer, uint32_t format)
35-{
36 if (buffer->bo->config.nvc0.memtype)
37 {
38- nvc0_2d(renderer->pushbuf, NV50_2D_SRC_FORMAT, 5,
39- format, 0, buffer->bo->config.nvc0.tile_mode, 1, 0);
40+ nvc0_2d(renderer->pushbuf, format_method + 0x04, 2,
41+ 0, buffer->bo->config.nvc0.tile_mode);
42 }
43 else
44 {
45- nvc0_2d(renderer->pushbuf, NV50_2D_SRC_FORMAT, 2, format, 1);
46- nvc0_2d(renderer->pushbuf, NV50_2D_SRC_PITCH, 1, buffer->base.pitch);
47+ nvc0_2d_inline(renderer->pushbuf, format_method + 0x04, 1);
48+ nvc0_2d(renderer->pushbuf, format_method + 0x14, 1, buffer->base.pitch);
49 }
50
51- nvc0_2d(renderer->pushbuf, NV50_2D_SRC_WIDTH, 4,
52+ nvc0_2d(renderer->pushbuf, format_method + 0x18, 4,
53 buffer->base.width, buffer->base.height,
54 buffer->bo->offset >> 32, buffer->bo->offset);
55 nouveau_bufctx_refn(renderer->bufctx, 0, buffer->bo,
56- NOUVEAU_BO_VRAM | NOUVEAU_BO_RD);
57+ NOUVEAU_BO_VRAM | access);
58 }
59
60 void renderer_fill_rectangle(struct wld_renderer * base, uint32_t color,
61@@ -447,7 +431,8 @@ void renderer_fill_rectangle(struct wld_renderer * base, uint32_t color,
62 format = nvc0_format(renderer->target->base.format);
63
64 nouveau_bufctx_reset(renderer->bufctx, 0);
65- nvc0_2d_dst(renderer, renderer->target, format);
66+ nvc0_2d_use_buffer(renderer, renderer->target,
67+ NV50_2D_DST_FORMAT, format);
68 nvc0_2d(renderer->pushbuf, NV50_2D_OPERATION, 1, NV50_2D_OPERATION_SRCCOPY);
69 nvc0_2d(renderer->pushbuf, NV50_2D_DRAW_SHAPE, 3,
70 NV50_2D_DRAW_SHAPE_RECTANGLES, format, color);
71@@ -481,8 +466,9 @@ void renderer_copy_rectangle(struct wld_renderer * base,
72 dst_format = nvc0_format(renderer->target->base.format);
73
74 nouveau_bufctx_reset(renderer->bufctx, 0);
75- nvc0_2d_src(renderer, buffer, src_format);
76- nvc0_2d_dst(renderer, renderer->target, dst_format);
77+ nvc0_2d_use_buffer(renderer, buffer, NV50_2D_SRC_FORMAT, src_format);
78+ nvc0_2d_use_buffer(renderer, renderer->target,
79+ NV50_2D_DST_FORMAT, dst_format);
80 nvc0_2d(renderer->pushbuf, NV50_2D_OPERATION, 1, NV50_2D_OPERATION_SRCCOPY);
81 nouveau_pushbuf_bufctx(renderer->pushbuf, renderer->bufctx);
82