radeon_cs.c revision 74937cda177363ff4ede9e2b4ea2bec04cda892e
1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <stdio.h> 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "radeon_cs.h" 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "radeon_cs_int.h" 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct radeon_cs *radeon_cs_create(struct radeon_cs_manager *csm, uint32_t ndw) 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = csm->funcs->cs_create(csm, ndw); 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (struct radeon_cs *)csi; 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_write_reloc(struct radeon_cs *cs, 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_bo *bo, 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov uint32_t read_domain, 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov uint32_t write_domain, 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov uint32_t flags) 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return csi->csm->funcs->cs_write_reloc(csi, 21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bo, 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov read_domain, 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov write_domain, 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags); 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_begin(struct radeon_cs *cs, 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov uint32_t ndw, 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char *file, 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char *func, 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int line) 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return csi->csm->funcs->cs_begin(csi, ndw, file, func, line); 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_end(struct radeon_cs *cs, 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char *file, 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char *func, 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int line) 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return csi->csm->funcs->cs_end(csi, file, func, line); 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_emit(struct radeon_cs *cs) 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return csi->csm->funcs->cs_emit(csi); 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_destroy(struct radeon_cs *cs) 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return csi->csm->funcs->cs_destroy(csi); 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_erase(struct radeon_cs *cs) 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return csi->csm->funcs->cs_erase(csi); 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_need_flush(struct radeon_cs *cs) 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return csi->csm->funcs->cs_need_flush(csi); 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid radeon_cs_print(struct radeon_cs *cs, FILE *file) 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov csi->csm->funcs->cs_print(csi, file); 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit) 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (domain == RADEON_GEM_DOMAIN_VRAM) 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov csi->csm->vram_limit = limit; 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov csi->csm->gart_limit = limit; 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid radeon_cs_space_set_flush(struct radeon_cs *cs, void (*fn)(void *), void *data) 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct radeon_cs_int *csi = (struct radeon_cs_int *)cs; 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov csi->space_flush_fn = fn; 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov csi->space_flush_data = data; 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov