libnx/nx/include/switch/nvidia/gpu/cmd_list.h
2018-04-01 16:48:52 +02:00

38 lines
1.2 KiB
C

typedef struct NvGpu NvGpu;
typedef struct {
NvBuffer buffer;
size_t num_cmds;
size_t max_cmds;
NvGpu* parent;
} NvCmdList;
Result nvCmdListCreate(NvCmdList* c, NvGpu* parent, size_t max_cmds);
void nvCmdListClose(NvCmdList* c);
iova_t nvCmdListGetGpuAddr(NvCmdList* c);
u64 nvCmdListGetListSize(NvCmdList* c);
u32* nvCmdListInsert(NvCmdList* c, size_t num_cmds);
#define NvCmd(cmd_list, ...) do { \
u32 _[] = { __VA_ARGS__ }; \
memcpy(nvCmdListInsert(cmd_list, sizeof(_)/4), _, sizeof(_)); \
} while (0)
#define NvImm(subc, reg, val) \
(0x80000000 | (reg) | ((subc) << 13) | ((val) << 16))
#define NvRep(subc, reg, ...) \
(0x60000000 | ((reg) | ((subc) << 13) | ((sizeof((u32[]) { __VA_ARGS__ }) / 4) << 16))), __VA_ARGS__
#define NvIncr(subc, reg, ...) \
(0x20000000 | ((reg) | ((subc) << 13) | ((sizeof((u32[]) { __VA_ARGS__ }) / 4) << 16))), __VA_ARGS__
#define NvIncrOnce(subc, reg, ...) \
(0xA0000000 | ((reg) | ((subc) << 13) | ((sizeof((u32[]) { __VA_ARGS__ }) / 4) << 16))), __VA_ARGS__
static inline u32 f2i(float f) {
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
return *(u32*) &f;
}