1 #ifndef R300_SCREEN_BUFFER_H
2 #define R300_SCREEN_BUFFER_H
4 #include "pipe/p_compiler.h"
5 #include "pipe/p_state.h"
6 #include "util/u_transfer.h"
7 #include "r300_screen.h"
9 #include "r300_winsys.h"
10 #include "r300_context.h"
12 #define R300_BUFFER_MAGIC 0xabcd1234
14 struct r300_buffer_range
{
18 #define R300_BUFFER_MAX_RANGES 32
26 struct r300_winsys_buffer
*buf
;
29 struct r300_buffer_range ranges
[R300_BUFFER_MAX_RANGES
];
35 static INLINE
struct r300_buffer
*
36 r300_buffer(struct pipe_resource
*buffer
)
39 assert(((struct r300_buffer
*)buffer
)->magic
== R300_BUFFER_MAGIC
);
40 return (struct r300_buffer
*)buffer
;
46 r300_buffer_is_user_buffer(struct pipe_resource
*buffer
)
48 return r300_buffer(buffer
)->user_buffer
? true : false;
51 static INLINE boolean
r300_add_buffer(struct r300_winsys_screen
*rws
,
52 struct pipe_resource
*buffer
,
55 struct r300_buffer
*buf
= r300_buffer(buffer
);
60 return rws
->add_buffer(rws
, buf
->buf
, rd
, wr
);
64 static INLINE boolean
r300_add_texture(struct r300_winsys_screen
*rws
,
65 struct r300_texture
*tex
,
68 return rws
->add_buffer(rws
, tex
->buffer
, rd
, wr
);
72 static INLINE
void r300_buffer_write_reloc(struct r300_winsys_screen
*rws
,
73 struct r300_buffer
*buf
,
74 uint32_t rd
, uint32_t wd
, uint32_t flags
)
79 rws
->write_cs_reloc(rws
, buf
->buf
, rd
, wd
, flags
);
82 static INLINE
void r300_texture_write_reloc(struct r300_winsys_screen
*rws
,
83 struct r300_texture
*texture
,
84 uint32_t rd
, uint32_t wd
, uint32_t flags
)
86 rws
->write_cs_reloc(rws
, texture
->buffer
, rd
, wd
, flags
);
89 int r300_upload_user_buffers(struct r300_context
*r300
);
91 int r300_upload_index_buffer(struct r300_context
*r300
,
92 struct pipe_resource
**index_buffer
,
98 struct pipe_resource
*r300_buffer_create(struct pipe_screen
*screen
,
99 const struct pipe_resource
*template);
101 struct pipe_resource
*r300_user_buffer_create(struct pipe_screen
*screen
,