projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gallium: change set_constant_buffer to be UBO-friendly
[mesa.git]
/
src
/
gallium
/
drivers
/
r300
/
r300_state.c
diff --git
a/src/gallium/drivers/r300/r300_state.c
b/src/gallium/drivers/r300/r300_state.c
index a623ff898a72ff926602f319dc0b39c403a4213c..058e6f881f0fafbb0e832d756e76b07e568b549f 100644
(file)
--- a/
src/gallium/drivers/r300/r300_state.c
+++ b/
src/gallium/drivers/r300/r300_state.c
@@
-1048,6
+1048,10
@@
static void* r300_create_rs_state(struct pipe_context* pipe,
/* Override some states for Draw. */
rs->rs_draw.sprite_coord_enable = 0; /* We can do this in HW. */
/* Override some states for Draw. */
rs->rs_draw.sprite_coord_enable = 0; /* We can do this in HW. */
+ rs->rs_draw.offset_point = 0;
+ rs->rs_draw.offset_line = 0;
+ rs->rs_draw.offset_tri = 0;
+ rs->rs_draw.offset_clamp = 0;
#ifdef PIPE_ARCH_LITTLE_ENDIAN
vap_control_status = R300_VC_NO_SWAP;
#ifdef PIPE_ARCH_LITTLE_ENDIAN
vap_control_status = R300_VC_NO_SWAP;
@@
-1589,28
+1593,20
@@
static void r300_set_vertex_buffers(struct pipe_context* pipe,
const struct pipe_vertex_buffer* buffers)
{
struct r300_context* r300 = r300_context(pipe);
const struct pipe_vertex_buffer* buffers)
{
struct r300_context* r300 = r300_context(pipe);
- unsigned i;
- struct pipe_vertex_buffer dummy_vb = {0};
/* There must be at least one vertex buffer set, otherwise it locks up. */
if (!count) {
/* There must be at least one vertex buffer set, otherwise it locks up. */
if (!count) {
- dummy_vb.buffer = r300->dummy_vb;
- buffers = &dummy_vb;
+ buffers = &r300->dummy_vb;
count = 1;
}
count = 1;
}
- u_vbuf_set_vertex_buffers(r300->vbuf_mgr, count, buffers);
+ util_copy_vertex_buffers(r300->vertex_buffer,
+ &r300->nr_vertex_buffers,
+ buffers, count);
if (r300->screen->caps.has_tcl) {
if (r300->screen->caps.has_tcl) {
- /* HW TCL. */
- for (i = 0; i < count; i++) {
- if (buffers[i].buffer &&
- !r300_resource(buffers[i].buffer)->b.user_ptr) {
- }
- }
r300->vertex_arrays_dirty = TRUE;
} else {
r300->vertex_arrays_dirty = TRUE;
} else {
- /* SW TCL. */
draw_set_vertex_buffers(r300->draw, count, buffers);
}
}
draw_set_vertex_buffers(r300->draw, count, buffers);
}
}
@@
-1620,7
+1616,12
@@
static void r300_set_index_buffer(struct pipe_context* pipe,
{
struct r300_context* r300 = r300_context(pipe);
{
struct r300_context* r300 = r300_context(pipe);
- u_vbuf_set_index_buffer(r300->vbuf_mgr, ib);
+ if (ib) {
+ pipe_resource_reference(&r300->index_buffer.buffer, ib->buffer);
+ memcpy(&r300->index_buffer, ib, sizeof(*ib));
+ } else {
+ pipe_resource_reference(&r300->index_buffer.buffer, NULL);
+ }
if (!r300->screen->caps.has_tcl) {
draw_set_index_buffer(r300->draw, ib);
if (!r300->screen->caps.has_tcl) {
draw_set_index_buffer(r300->draw, ib);
@@
-1675,7
+1676,6
@@
static void* r300_create_vertex_elements_state(struct pipe_context* pipe,
unsigned count,
const struct pipe_vertex_element* attribs)
{
unsigned count,
const struct pipe_vertex_element* attribs)
{
- struct r300_context *r300 = r300_context(pipe);
struct r300_vertex_element_state *velems;
unsigned i;
struct pipe_vertex_element dummy_attrib = {0};
struct r300_vertex_element_state *velems;
unsigned i;
struct pipe_vertex_element dummy_attrib = {0};
@@
-1696,9
+1696,7
@@
static void* r300_create_vertex_elements_state(struct pipe_context* pipe,
return NULL;
velems->count = count;
return NULL;
velems->count = count;
- velems->vmgr_elements =
- u_vbuf_create_vertex_elements(r300->vbuf_mgr, count, attribs,
- velems->velem);
+ memcpy(velems->velem, attribs, sizeof(struct pipe_vertex_element) * count);
if (r300_screen(pipe->screen)->caps.has_tcl) {
/* Setup PSC.
if (r300_screen(pipe->screen)->caps.has_tcl) {
/* Setup PSC.
@@
-1727,8
+1725,6
@@
static void r300_bind_vertex_elements_state(struct pipe_context *pipe,
r300->velems = velems;
r300->velems = velems;
- u_vbuf_bind_vertex_elements(r300->vbuf_mgr, state, velems->vmgr_elements);
-
if (r300->draw) {
draw_set_vertex_elements(r300->draw, velems->count, velems->velem);
return;
if (r300->draw) {
draw_set_vertex_elements(r300->draw, velems->count, velems->velem);
return;
@@
-1741,10
+1737,6
@@
static void r300_bind_vertex_elements_state(struct pipe_context *pipe,
static void r300_delete_vertex_elements_state(struct pipe_context *pipe, void *state)
{
static void r300_delete_vertex_elements_state(struct pipe_context *pipe, void *state)
{
- struct r300_context *r300 = r300_context(pipe);
- struct r300_vertex_element_state *velems = state;
-
- u_vbuf_destroy_vertex_elements(r300->vbuf_mgr, velems->vmgr_elements);
FREE(state);
}
FREE(state);
}
@@
-1788,9
+1780,8
@@
static void r300_bind_vs_state(struct pipe_context* pipe, void* shader)
if (r300->screen->caps.has_tcl) {
unsigned fc_op_dwords = r300->screen->caps.is_r500 ? 3 : 2;
r300_mark_atom_dirty(r300, &r300->vs_state);
if (r300->screen->caps.has_tcl) {
unsigned fc_op_dwords = r300->screen->caps.is_r500 ? 3 : 2;
r300_mark_atom_dirty(r300, &r300->vs_state);
- r300->vs_state.size =
- vs->code.length + 9 +
- (vs->code.num_fc_ops ? vs->code.num_fc_ops * fc_op_dwords + 4 : 0);
+ r300->vs_state.size = vs->code.length + 9 +
+ (R300_VS_MAX_FC_OPS * fc_op_dwords + 4);
r300_mark_atom_dirty(r300, &r300->vs_constants);
r300->vs_constants.size =
r300_mark_atom_dirty(r300, &r300->vs_constants);
r300->vs_constants.size =
@@
-1828,9
+1819,10
@@
static void r300_delete_vs_state(struct pipe_context* pipe, void* shader)
static void r300_set_constant_buffer(struct pipe_context *pipe,
uint shader, uint index,
static void r300_set_constant_buffer(struct pipe_context *pipe,
uint shader, uint index,
- struct pipe_
resource *buf
)
+ struct pipe_
constant_buffer *cb
)
{
struct r300_context* r300 = r300_context(pipe);
{
struct r300_context* r300 = r300_context(pipe);
+ struct pipe_resource *buf = cb ? cb->buffer : NULL;
struct r300_constant_buffer *cbuf;
struct r300_resource *rbuf = r300_resource(buf);
uint32_t *mapped;
struct r300_constant_buffer *cbuf;
struct r300_resource *rbuf = r300_resource(buf);
uint32_t *mapped;
@@
-1849,8
+1841,8
@@
static void r300_set_constant_buffer(struct pipe_context *pipe,
if (buf == NULL || buf->width0 == 0)
return;
if (buf == NULL || buf->width0 == 0)
return;
- if (rbuf->b.user_ptr)
- mapped = (uint32_t*)rbuf->b.user_ptr;
+ if (rbuf->b.
b.
user_ptr)
+ mapped = (uint32_t*)rbuf->b.
b.
user_ptr;
else if (rbuf->constant_buffer)
mapped = (uint32_t*)rbuf->constant_buffer;
else
else if (rbuf->constant_buffer)
mapped = (uint32_t*)rbuf->constant_buffer;
else