st/mesa: assume that user constant buffers are always supported
Reviewed-by: Roland Scheidegger <sroland@vmware.com> Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
@@ -101,22 +101,9 @@ void st_upload_constants(struct st_context *st, struct gl_program *prog)
|
|||||||
|
|
||||||
_mesa_shader_write_subroutine_indices(st->ctx, stage);
|
_mesa_shader_write_subroutine_indices(st->ctx, stage);
|
||||||
|
|
||||||
/* We always need to get a new buffer, to keep the drivers simple and
|
|
||||||
* avoid gratuitous rendering synchronization.
|
|
||||||
* Let's use a user buffer to avoid an unnecessary copy.
|
|
||||||
*/
|
|
||||||
if (!st->has_user_constbuf) {
|
|
||||||
cb.buffer = NULL;
|
|
||||||
cb.user_buffer = NULL;
|
|
||||||
u_upload_data(st->pipe->const_uploader, 0, paramBytes,
|
|
||||||
st->ctx->Const.UniformBufferOffsetAlignment,
|
|
||||||
params->ParameterValues, &cb.buffer_offset, &cb.buffer);
|
|
||||||
u_upload_unmap(st->pipe->const_uploader);
|
|
||||||
} else {
|
|
||||||
cb.buffer = NULL;
|
cb.buffer = NULL;
|
||||||
cb.user_buffer = params->ParameterValues;
|
cb.user_buffer = params->ParameterValues;
|
||||||
cb.buffer_offset = 0;
|
cb.buffer_offset = 0;
|
||||||
}
|
|
||||||
cb.buffer_size = paramBytes;
|
cb.buffer_size = paramBytes;
|
||||||
|
|
||||||
if (ST_DEBUG & DEBUG_CONSTANTS) {
|
if (ST_DEBUG & DEBUG_CONSTANTS) {
|
||||||
|
@@ -372,8 +372,6 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
|
|||||||
|
|
||||||
st->dirty = ST_ALL_STATES_MASK;
|
st->dirty = ST_ALL_STATES_MASK;
|
||||||
|
|
||||||
st->has_user_constbuf =
|
|
||||||
screen->get_param(screen, PIPE_CAP_USER_CONSTANT_BUFFERS);
|
|
||||||
st->can_bind_const_buffer_as_vertex =
|
st->can_bind_const_buffer_as_vertex =
|
||||||
screen->get_param(screen, PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX);
|
screen->get_param(screen, PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX);
|
||||||
|
|
||||||
|
@@ -110,7 +110,6 @@ struct st_context
|
|||||||
boolean has_shareable_shaders;
|
boolean has_shareable_shaders;
|
||||||
boolean has_half_float_packing;
|
boolean has_half_float_packing;
|
||||||
boolean has_multi_draw_indirect;
|
boolean has_multi_draw_indirect;
|
||||||
boolean has_user_constbuf;
|
|
||||||
boolean can_bind_const_buffer_as_vertex;
|
boolean can_bind_const_buffer_as_vertex;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -259,21 +259,9 @@ st_pbo_draw(struct st_context *st, const struct st_pbo_addresses *addr,
|
|||||||
{
|
{
|
||||||
struct pipe_constant_buffer cb;
|
struct pipe_constant_buffer cb;
|
||||||
|
|
||||||
if (!st->has_user_constbuf) {
|
|
||||||
cb.buffer = NULL;
|
|
||||||
cb.user_buffer = NULL;
|
|
||||||
u_upload_data(st->pipe->const_uploader, 0, sizeof(addr->constants),
|
|
||||||
st->ctx->Const.UniformBufferOffsetAlignment,
|
|
||||||
&addr->constants, &cb.buffer_offset, &cb.buffer);
|
|
||||||
if (!cb.buffer)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
u_upload_unmap(st->pipe->const_uploader);
|
|
||||||
} else {
|
|
||||||
cb.buffer = NULL;
|
cb.buffer = NULL;
|
||||||
cb.user_buffer = &addr->constants;
|
cb.user_buffer = &addr->constants;
|
||||||
cb.buffer_offset = 0;
|
cb.buffer_offset = 0;
|
||||||
}
|
|
||||||
cb.buffer_size = sizeof(addr->constants);
|
cb.buffer_size = sizeof(addr->constants);
|
||||||
|
|
||||||
cso_set_constant_buffer(cso, PIPE_SHADER_FRAGMENT, 0, &cb);
|
cso_set_constant_buffer(cso, PIPE_SHADER_FRAGMENT, 0, &cb);
|
||||||
|
Reference in New Issue
Block a user