r600g: add support for kernel bo
[mesa.git] / src / gallium / winsys / r600 / drm / radeon_priv.h
index b91421f43898b22e4a5065a6b9df0b7cf42e5323..bbcf8ec4a4b93c775ebe8e45cd37eab376dcf7f5 100644 (file)
 #include <errno.h>
 #include "radeon.h"
 
+#include "pipe/p_compiler.h"
+#include "util/u_inlines.h"
+#include "pipe/p_defines.h"
+
 struct radeon;
 struct radeon_ctx;
 
+
 /*
  * radeon functions
  */
@@ -37,17 +42,40 @@ struct radeon_register {
        char                            name[64];
 };
 
-struct radeon_type {
-       unsigned                        npm4;
-       unsigned                        id;
-       unsigned                        range_start;
-       unsigned                        range_end;
-       unsigned                        stride;
-       unsigned                        immediate;
-       char                            name[64];
+struct radeon_bo {
+       struct pipe_reference           reference;
+       unsigned                        handle;
+       unsigned                        size;
+       unsigned                        alignment;
+       unsigned                        map_count;
+       void                            *data;
+};
+
+struct radeon_sub_type {
+       int                             shader_type;
+       const struct radeon_register    *regs;
        unsigned                        nstates;
+};
+
+struct radeon_stype_info {
+       unsigned                        stype;
+       unsigned                        num;
+       unsigned                        stride;
        radeon_state_pm4_t              pm4;
-       const struct radeon_register    *regs;
+       struct radeon_sub_type          reginfo[R600_SHADER_MAX];
+       unsigned                        base_id;
+       unsigned                        npm4;
+};
+
+struct radeon_ctx {
+       struct radeon                   *radeon;
+       u32                             *pm4;
+       int                             cdwords;
+       int                             ndwords;
+       unsigned                        nreloc;
+       struct radeon_cs_reloc          *reloc;
+       unsigned                        nbo;
+       struct radeon_ws_bo             **bo;
 };
 
 struct radeon {
@@ -55,9 +83,17 @@ struct radeon {
        int                             refcount;
        unsigned                        device;
        unsigned                        family;
-       unsigned                        nstate;
-       unsigned                        ntype;
-       const struct radeon_type        *type;
+       unsigned                        nstype;
+       struct radeon_stype_info        *stype;
+       unsigned max_states;
+       boolean use_mem_constant; /* true for evergreen */
+       struct pb_manager *mman; /* malloc manager */
+       struct pb_manager *kman; /* kernel bo manager */
+};
+
+struct radeon_ws_bo {
+       struct pipe_reference reference;
+       struct pb_buffer *pb;
 };
 
 extern struct radeon *radeon_new(int fd, unsigned device);
@@ -65,45 +101,6 @@ extern struct radeon *radeon_incref(struct radeon *radeon);
 extern struct radeon *radeon_decref(struct radeon *radeon);
 extern unsigned radeon_family_from_device(unsigned device);
 extern int radeon_is_family_compatible(unsigned family1, unsigned family2);
-extern int radeon_reg_id(struct radeon *radeon, unsigned offset, unsigned *typeid, unsigned *stateid, unsigned *id);
-extern unsigned radeon_type_from_id(struct radeon *radeon, unsigned id);
-
-/*
- * radeon context functions
- */
-#pragma pack(1)
-struct radeon_cs_reloc {
-       uint32_t        handle;
-       uint32_t        read_domain;
-       uint32_t        write_domain;
-       uint32_t        flags;
-};
-#pragma pack()
-
-struct radeon_ctx {
-       int                             refcount;
-       struct radeon                   *radeon;
-       u32                             *pm4;
-       u32                             cpm4;
-       u32                             draw_cpm4;
-       unsigned                        id;
-       unsigned                        next_id;
-       unsigned                        nreloc;
-       struct radeon_cs_reloc          *reloc;
-       unsigned                        nbo;
-       struct radeon_bo                **bo;
-       unsigned                        ndraw;
-       struct radeon_draw              *cdraw;
-       struct radeon_draw              **draw;
-       unsigned                        nstate;
-       struct radeon_state             **state;
-};
-
-int radeon_ctx_set_bo_new(struct radeon_ctx *ctx, struct radeon_bo *bo);
-struct radeon_bo *radeon_ctx_get_bo(struct radeon_ctx *ctx, unsigned reloc);
-void radeon_ctx_get_placement(struct radeon_ctx *ctx, unsigned reloc, u32 *placement);
-int radeon_ctx_set_draw_new(struct radeon_ctx *ctx, struct radeon_draw *draw);
-int radeon_ctx_draw(struct radeon_ctx *ctx);
 
 /*
  * r600/r700 context functions
@@ -127,4 +124,25 @@ extern int radeon_state_reloc(struct radeon_state *state, unsigned id, unsigned
  */
 extern int radeon_draw_pm4(struct radeon_draw *draw);
 
+/* ws bo winsys only */
+unsigned radeon_ws_bo_get_handle(struct radeon_ws_bo *bo);
+unsigned radeon_ws_bo_get_size(struct radeon_ws_bo *bo);
+
+/* bo */
+struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
+                           unsigned size, unsigned alignment, void *ptr);
+int radeon_bo_map(struct radeon *radeon, struct radeon_bo *bo);
+void radeon_bo_unmap(struct radeon *radeon, struct radeon_bo *bo);
+void radeon_bo_reference(struct radeon *radeon, struct radeon_bo **dst,
+                        struct radeon_bo *src);
+int radeon_bo_wait(struct radeon *radeon, struct radeon_bo *bo);
+int radeon_bo_busy(struct radeon *radeon, struct radeon_bo *bo, uint32_t *domain);
+
+/* pipebuffer kernel bo manager */
+struct pb_manager *radeon_bo_pbmgr_create(struct radeon *radeon);
+struct radeon_bo *radeon_bo_pb_get_bo(struct pb_buffer *_buf);
+void radeon_bo_pbmgr_flush_maps(struct pb_manager *_mgr);
+struct pb_buffer *radeon_bo_pb_create_buffer_from_handle(struct pb_manager *_mgr,
+                                                        uint32_t handle);
+
 #endif