2 #include "nouveau_fifo.h"
3 #include "nouveau_object.h"
4 #include "nouveau_reg.h"
7 GLboolean
nouveauCreateContextObject(nouveauContextPtr nmesa
, int handle
, int class, uint32_t flags
, uint32_t dma_in
, uint32_t dma_out
, uint32_t dma_notifier
)
9 drm_nouveau_object_init_t cto
;
17 cto
.dma_notifier
= dma_notifier
;
18 ret
= drmCommandWrite(nmesa
->driFd
, DRM_NOUVEAU_OBJECT_INIT
, &cto
, sizeof(cto
));
23 GLboolean
nouveauCreateDmaObject(nouveauContextPtr nmesa
,
30 drm_nouveau_dma_object_init_t dma
;
38 ret
= drmCommandWriteRead(nmesa
->driFd
, DRM_NOUVEAU_DMA_OBJECT_INIT
,
43 void nouveauObjectOnSubchannel(nouveauContextPtr nmesa
, int subchannel
, int handle
)
45 BEGIN_RING_SIZE(subchannel
, 0, 1);
49 void nouveauObjectInit(nouveauContextPtr nmesa
)
51 #ifdef NOUVEAU_RING_DEBUG
55 /* We need to know vram size.. */
56 nouveauCreateDmaObject( nmesa
, NvDmaFB
,
58 0 /*NV_DMA_TARGET_FB*/, 0 /*NV_DMA_ACCESS_RW*/);
60 nouveauCreateContextObject(nmesa
, Nv3D
, nmesa
->screen
->card
->class_3d
,
62 nouveauCreateContextObject(nmesa
, NvCtxSurf2D
, NV10_CONTEXT_SURFACES_2D
,
64 nouveauCreateContextObject(nmesa
, NvImageBlit
, NV10_IMAGE_BLIT
,
65 NV_DMA_CONTEXT_FLAGS_PATCH_SRCCOPY
, 0, 0, 0);
67 #ifdef ALLOW_MULTI_SUBCHANNEL
68 nouveauObjectOnSubchannel(nmesa
, NvSubCtxSurf2D
, NvCtxSurf2D
);
69 BEGIN_RING_SIZE(NvSubCtxSurf2D
, NV10_CONTEXT_SURFACES_2D_SET_DMA_IN_MEMORY0
, 2);
73 nouveauObjectOnSubchannel(nmesa
, NvSubImageBlit
, NvImageBlit
);
74 BEGIN_RING_SIZE(NvSubImageBlit
, NV10_IMAGE_BLIT_SET_CONTEXT_SURFACES_2D
, 1);
75 OUT_RING(NvCtxSurf2D
);
76 BEGIN_RING_SIZE(NvSubImageBlit
, NV10_IMAGE_BLIT_SET_OPERATION
, 1);
77 OUT_RING(3); /* SRCCOPY */
80 nouveauObjectOnSubchannel(nmesa
, NvSub3D
, Nv3D
);