mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
i915g: Improve constant handling
This commit is contained in:
parent
c40ec20c27
commit
9a9630dcf0
1 changed files with 15 additions and 5 deletions
|
|
@ -535,21 +535,31 @@ static void i915_set_constant_buffer(struct pipe_context *pipe,
|
|||
|
||||
/* if we have a new buffer compare it with the old one */
|
||||
if (buf) {
|
||||
struct i915_buffer *ir = i915_buffer(buf);
|
||||
struct i915_buffer *ibuf = i915_buffer(buf);
|
||||
struct pipe_resource *old_buf = i915->constants[shader];
|
||||
struct i915_buffer *old = old_buf ? i915_buffer(old_buf) : NULL;
|
||||
unsigned old_num = i915->current.num_user_constants[shader];
|
||||
|
||||
new_num = ir->b.b.width0 / 4 * sizeof(float);
|
||||
new_num = ibuf->b.b.width0 / 4 * sizeof(float);
|
||||
|
||||
if (old && new_num != i915->current.num_user_constants[shader])
|
||||
diff = memcmp(old->data, ir->data, ir->b.b.width0);
|
||||
if (old_num == new_num) {
|
||||
if (old_num == 0)
|
||||
diff = FALSE;
|
||||
#if 0
|
||||
/* XXX no point in running this code since st/mesa only uses user buffers */
|
||||
/* Can't compare the buffer data since they are userbuffers */
|
||||
else if (old && old->free_on_destroy)
|
||||
diff = memcmp(old->data, ibuf->data, ibuf->b.b.width0);
|
||||
#else
|
||||
(void)old;
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
diff = i915->current.num_user_constants[shader] != 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* flush before updateing the state.
|
||||
* XXX: looks like its okay to skip the flush for vertex cbufs
|
||||
*/
|
||||
if (diff && shader == PIPE_SHADER_FRAGMENT)
|
||||
draw_flush(i915->draw);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue