2 #include "nouveau_fifo.h"
3 #include "nouveau_object.h"
4 #include "nouveau_reg.h"
7 GLboolean
nouveauCreateContextObject(nouveauContextPtr nmesa
,
8 uint32_t handle
, int class)
10 struct drm_nouveau_grobj_alloc cto
;
13 cto
.channel
= nmesa
->fifo
.drm
.channel
;
16 ret
= drmCommandWrite(nmesa
->driFd
, DRM_NOUVEAU_GROBJ_ALLOC
,
22 void nouveauObjectOnSubchannel(nouveauContextPtr nmesa
, int subchannel
, int handle
)
24 BEGIN_RING_SIZE(subchannel
, 0, 1);
28 void nouveauObjectInit(nouveauContextPtr nmesa
)
30 #ifdef NOUVEAU_RING_DEBUG
34 nouveauCreateContextObject(nmesa
, Nv3D
, nmesa
->screen
->card
->class_3d
);
35 if (nmesa
->screen
->card
->type
>=NV_10
) {
36 nouveauCreateContextObject(nmesa
, NvCtxSurf2D
, NV10_CONTEXT_SURFACES_2D
);
38 nouveauCreateContextObject(nmesa
, NvCtxSurf2D
, NV04_CONTEXT_SURFACES_2D
);
39 nouveauCreateContextObject(nmesa
, NvCtxSurf3D
, NV04_CONTEXT_SURFACES_3D
);
41 if (nmesa
->screen
->card
->type
>=NV_11
) {
42 nouveauCreateContextObject(nmesa
, NvImageBlit
, NV11_IMAGE_BLIT
);
44 nouveauCreateContextObject(nmesa
, NvImageBlit
, NV_IMAGE_BLIT
);
46 if ((nmesa
->screen
->card
->type
>=NV_10
) && (nmesa
->screen
->card
->type
<NV_20
)) {
47 nouveauCreateContextObject(nmesa
, NvGdiRectText
, NV04_GDI_RECTANGLE_TEXT
);
48 nouveauCreateContextObject(nmesa
, NvRasterOp
, NV03_PRIMITIVE_RASTER_OP
);
49 nouveauCreateContextObject(nmesa
, NvPattern
, NV04_IMAGE_PATTERN
);
51 nouveauCreateContextObject(nmesa
, NvMemFormat
, NV_MEMORY_TO_MEMORY_FORMAT
);
53 nouveauObjectOnSubchannel(nmesa
, NvSubCtxSurf2D
, NvCtxSurf2D
);
54 BEGIN_RING_SIZE(NvSubCtxSurf2D
, NV10_CONTEXT_SURFACES_2D_SET_DMA_IN_MEMORY0
, 2);
58 nouveauObjectOnSubchannel(nmesa
, NvSubImageBlit
, NvImageBlit
);
59 BEGIN_RING_SIZE(NvSubImageBlit
, NV_IMAGE_BLIT_SET_SURFACES_2D
, 1);
60 OUT_RING(NvCtxSurf2D
);
61 BEGIN_RING_SIZE(NvSubImageBlit
, NV_IMAGE_BLIT_OPERATION
, 1);
62 OUT_RING(3); /* SRCCOPY */
64 if ((nmesa
->screen
->card
->type
>=NV_10
) && (nmesa
->screen
->card
->type
<NV_20
)) {
65 nouveauObjectOnSubchannel(nmesa
, NvSubPattern
, NvPattern
);
67 BEGIN_RING_SIZE(NvSubPattern
, NV04_IMAGE_PATTERN_COLOR_FORMAT
, 4);
68 OUT_RING(1); /* A16R5G6B5 */
69 OUT_RING(1); /* little endian */
70 OUT_RING(0); /* 8x8 */
71 OUT_RING(1); /* monochrome */
73 nouveauObjectOnSubchannel(nmesa
, NvSubRasterOp
, NvRasterOp
);
75 BEGIN_RING_SIZE(NvSubRasterOp
, NV03_PRIMITIVE_RASTER_OP_DMA_NOTIFY
, 1);
76 OUT_RING(NvSyncNotify
);
78 nouveauObjectOnSubchannel(nmesa
, NvSubGdiRectText
, NvGdiRectText
);
80 BEGIN_RING_SIZE(NvSubGdiRectText
, NV04_GDI_RECTANGLE_TEXT_SET_DMA_NOTIFY
, 1);
81 OUT_RING(NvSyncNotify
);
82 BEGIN_RING_SIZE(NvSubGdiRectText
, NV04_GDI_RECTANGLE_TEXT_PATTERN
, 2);
85 BEGIN_RING_SIZE(NvSubGdiRectText
, NV04_GDI_RECTANGLE_TEXT_SURFACE
, 1);
86 OUT_RING(NvCtxSurf2D
);
87 BEGIN_RING_SIZE(NvSubGdiRectText
, NV04_GDI_RECTANGLE_TEXT_FORMAT
, 2);
88 OUT_RING(1); /* X1R5G5B5 */
89 OUT_RING(1); /* little endian */
92 nouveauObjectOnSubchannel(nmesa
, NvSubMemFormat
, NvMemFormat
);
94 nouveauObjectOnSubchannel(nmesa
, NvSub3D
, Nv3D
);