cso: add constant buffer save/restore feature for postprocessing

Postprocessing is an internal meta op and should restore the states
it changes.
This commit is contained in:
Marek Olšák
2013-03-18 22:36:21 +01:00
parent 35c522dce4
commit d1b91e309b
5 changed files with 83 additions and 5 deletions

View File

@@ -39,6 +39,7 @@
#include "pipe/p_defines.h"
#include "util/u_inlines.h"
#include "util/u_upload_mgr.h"
#include "cso_cache/cso_context.h"
#include "st_debug.h"
#include "st_context.h"
@@ -96,16 +97,17 @@ void st_upload_constants( struct st_context *st,
_mesa_print_parameter_list(params);
}
st->pipe->set_constant_buffer(st->pipe, shader_type, 0, &cb);
cso_set_constant_buffer(st->cso_context, shader_type, 0, &cb);
pipe_resource_reference(&cb.buffer, NULL);
st->state.constants[shader_type].ptr = params->ParameterValues;
st->state.constants[shader_type].size = paramBytes;
}
else if (st->state.constants[shader_type].ptr) {
/* Unbind. */
st->state.constants[shader_type].ptr = NULL;
st->state.constants[shader_type].size = 0;
st->pipe->set_constant_buffer(st->pipe, shader_type, 0, NULL);
cso_set_constant_buffer(st->cso_context, shader_type, 0, NULL);
}
}
@@ -196,7 +198,7 @@ static void st_bind_ubos(struct st_context *st,
cb.buffer_size = st_obj->buffer->width0 - binding->Offset;
st->pipe->set_constant_buffer(st->pipe, shader_type, 1 + i, &cb);
cso_set_constant_buffer(st->cso_context, shader_type, 1 + i, &cb);
pipe_resource_reference(&cb.buffer, NULL);
}
}