mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-22 20:30:42 +02:00
gallium/tgsi/draw/softpipe: remodel shader const/buffer bindings.
This remodels things around a buffer object. Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23487>
This commit is contained in:
parent
370cd08a5e
commit
d1cdf0d91a
16 changed files with 74 additions and 93 deletions
|
|
@ -463,20 +463,20 @@ draw_set_mapped_constant_buffer(struct draw_context *draw,
|
|||
|
||||
switch (shader_type) {
|
||||
case PIPE_SHADER_VERTEX:
|
||||
draw->pt.user.vs_constants[slot] = buffer;
|
||||
draw->pt.user.vs_constants_size[slot] = size;
|
||||
draw->pt.user.vs_constants[slot].ptr = buffer;
|
||||
draw->pt.user.vs_constants[slot].size = size;
|
||||
break;
|
||||
case PIPE_SHADER_GEOMETRY:
|
||||
draw->pt.user.gs_constants[slot] = buffer;
|
||||
draw->pt.user.gs_constants_size[slot] = size;
|
||||
draw->pt.user.gs_constants[slot].ptr = buffer;
|
||||
draw->pt.user.gs_constants[slot].size = size;
|
||||
break;
|
||||
case PIPE_SHADER_TESS_CTRL:
|
||||
draw->pt.user.tcs_constants[slot] = buffer;
|
||||
draw->pt.user.tcs_constants_size[slot] = size;
|
||||
draw->pt.user.tcs_constants[slot].ptr = buffer;
|
||||
draw->pt.user.tcs_constants[slot].size = size;
|
||||
break;
|
||||
case PIPE_SHADER_TESS_EVAL:
|
||||
draw->pt.user.tes_constants[slot] = buffer;
|
||||
draw->pt.user.tes_constants_size[slot] = size;
|
||||
draw->pt.user.tes_constants[slot].ptr = buffer;
|
||||
draw->pt.user.tes_constants[slot].size = size;
|
||||
break;
|
||||
default:
|
||||
assert(0 && "invalid shader type in draw_set_mapped_constant_buffer");
|
||||
|
|
@ -500,20 +500,20 @@ draw_set_mapped_shader_buffer(struct draw_context *draw,
|
|||
|
||||
switch (shader_type) {
|
||||
case PIPE_SHADER_VERTEX:
|
||||
draw->pt.user.vs_ssbos[slot] = buffer;
|
||||
draw->pt.user.vs_ssbos_size[slot] = size;
|
||||
draw->pt.user.vs_ssbos[slot].ptr = buffer;
|
||||
draw->pt.user.vs_ssbos[slot].size = size;
|
||||
break;
|
||||
case PIPE_SHADER_GEOMETRY:
|
||||
draw->pt.user.gs_ssbos[slot] = buffer;
|
||||
draw->pt.user.gs_ssbos_size[slot] = size;
|
||||
draw->pt.user.gs_ssbos[slot].ptr = buffer;
|
||||
draw->pt.user.gs_ssbos[slot].size = size;
|
||||
break;
|
||||
case PIPE_SHADER_TESS_CTRL:
|
||||
draw->pt.user.tcs_ssbos[slot] = buffer;
|
||||
draw->pt.user.tcs_ssbos_size[slot] = size;
|
||||
draw->pt.user.tcs_ssbos[slot].ptr = buffer;
|
||||
draw->pt.user.tcs_ssbos[slot].size = size;
|
||||
break;
|
||||
case PIPE_SHADER_TESS_EVAL:
|
||||
draw->pt.user.tes_ssbos[slot] = buffer;
|
||||
draw->pt.user.tes_ssbos_size[slot] = size;
|
||||
draw->pt.user.tes_ssbos[slot].ptr = buffer;
|
||||
draw->pt.user.tes_ssbos[slot].size = size;
|
||||
break;
|
||||
default:
|
||||
assert(0 && "invalid shader type in draw_set_mapped_shader_buffer");
|
||||
|
|
|
|||
|
|
@ -196,12 +196,11 @@ tgsi_fetch_gs_input(struct draw_geometry_shader *shader,
|
|||
|
||||
static void
|
||||
tgsi_gs_prepare(struct draw_geometry_shader *shader,
|
||||
const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const unsigned constants_size[PIPE_MAX_CONSTANT_BUFFERS])
|
||||
const struct draw_buffer_info *constants)
|
||||
{
|
||||
struct tgsi_exec_machine *machine = shader->machine;
|
||||
tgsi_exec_set_constant_buffers(machine, PIPE_MAX_CONSTANT_BUFFERS,
|
||||
constants, constants_size);
|
||||
(const struct tgsi_exec_consts_info *)constants);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -380,8 +379,7 @@ llvm_fetch_gs_outputs(struct draw_geometry_shader *shader,
|
|||
|
||||
static void
|
||||
llvm_gs_prepare(struct draw_geometry_shader *shader,
|
||||
const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const unsigned constants_size[PIPE_MAX_CONSTANT_BUFFERS])
|
||||
const struct draw_buffer_info *constants)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -566,8 +564,7 @@ gs_tri_adj(struct draw_geometry_shader *shader,
|
|||
*/
|
||||
void
|
||||
draw_geometry_shader_run(struct draw_geometry_shader *shader,
|
||||
const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const unsigned constants_size[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const struct draw_buffer_info *constants,
|
||||
const struct draw_vertex_info *input_verts,
|
||||
const struct draw_prim_info *input_prim,
|
||||
const struct tgsi_shader_info *input_info,
|
||||
|
|
@ -670,7 +667,7 @@ draw_geometry_shader_run(struct draw_geometry_shader *shader,
|
|||
}
|
||||
#endif
|
||||
|
||||
shader->prepare(shader, constants, constants_size);
|
||||
shader->prepare(shader, constants);
|
||||
|
||||
if (input_prim->linear)
|
||||
gs_run(shader, input_prim, input_verts,
|
||||
|
|
|
|||
|
|
@ -121,8 +121,7 @@ struct draw_geometry_shader {
|
|||
float (**p_output)[4]);
|
||||
|
||||
void (*prepare)(struct draw_geometry_shader *shader,
|
||||
const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const unsigned constants_size[PIPE_MAX_CONSTANT_BUFFERS]);
|
||||
const struct draw_buffer_info *constants);
|
||||
void (*run)(struct draw_geometry_shader *shader,
|
||||
unsigned input_primitives, unsigned *out_prims);
|
||||
};
|
||||
|
|
@ -139,8 +138,7 @@ draw_geometry_shader_new_instance(struct draw_geometry_shader *gs);
|
|||
*/
|
||||
void
|
||||
draw_geometry_shader_run(struct draw_geometry_shader *shader,
|
||||
const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const unsigned constants_size[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const struct draw_buffer_info *constants,
|
||||
const struct draw_vertex_info *input_verts,
|
||||
const struct draw_prim_info *input_prim,
|
||||
const struct tgsi_shader_info *input_info,
|
||||
|
|
|
|||
|
|
@ -117,6 +117,11 @@ struct draw_vertex_buffer {
|
|||
/* maximum number of shader variants we can cache */
|
||||
#define DRAW_MAX_SHADER_VARIANTS 512
|
||||
|
||||
struct draw_buffer_info {
|
||||
const void *ptr;
|
||||
unsigned size;
|
||||
};
|
||||
|
||||
/**
|
||||
* Private context for the drawing module.
|
||||
*/
|
||||
|
|
@ -217,24 +222,15 @@ struct draw_context
|
|||
struct draw_vertex_buffer vbuffer[PIPE_MAX_ATTRIBS];
|
||||
|
||||
/** constant buffers for each shader stage */
|
||||
const void *vs_constants[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
unsigned vs_constants_size[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
const void *gs_constants[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
unsigned gs_constants_size[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
const void *tcs_constants[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
unsigned tcs_constants_size[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
const void *tes_constants[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
unsigned tes_constants_size[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
struct draw_buffer_info vs_constants[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
struct draw_buffer_info gs_constants[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
struct draw_buffer_info tcs_constants[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
struct draw_buffer_info tes_constants[PIPE_MAX_CONSTANT_BUFFERS];
|
||||
|
||||
/** shader buffers for each shader stage */
|
||||
const void *vs_ssbos[PIPE_MAX_SHADER_BUFFERS];
|
||||
unsigned vs_ssbos_size[PIPE_MAX_SHADER_BUFFERS];
|
||||
const void *gs_ssbos[PIPE_MAX_SHADER_BUFFERS];
|
||||
unsigned gs_ssbos_size[PIPE_MAX_SHADER_BUFFERS];
|
||||
const void *tcs_ssbos[PIPE_MAX_SHADER_BUFFERS];
|
||||
unsigned tcs_ssbos_size[PIPE_MAX_SHADER_BUFFERS];
|
||||
const void *tes_ssbos[PIPE_MAX_SHADER_BUFFERS];
|
||||
unsigned tes_ssbos_size[PIPE_MAX_SHADER_BUFFERS];
|
||||
struct draw_buffer_info vs_ssbos[PIPE_MAX_SHADER_BUFFERS];
|
||||
struct draw_buffer_info gs_ssbos[PIPE_MAX_SHADER_BUFFERS];
|
||||
struct draw_buffer_info tcs_ssbos[PIPE_MAX_SHADER_BUFFERS];
|
||||
struct draw_buffer_info tes_ssbos[PIPE_MAX_SHADER_BUFFERS];
|
||||
|
||||
/* pointer to planes */
|
||||
float (*planes)[DRAW_TOTAL_CLIP_PLANES][4];
|
||||
|
|
|
|||
|
|
@ -195,8 +195,7 @@ emit(struct pt_emit *emit,
|
|||
|
||||
static void
|
||||
draw_vertex_shader_run(struct draw_vertex_shader *vshader,
|
||||
const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
unsigned const_size[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const struct draw_buffer_info *constants,
|
||||
const struct draw_fetch_info *fetch_info,
|
||||
const struct draw_vertex_info *input_verts,
|
||||
struct draw_vertex_info *output_verts)
|
||||
|
|
@ -213,7 +212,6 @@ draw_vertex_shader_run(struct draw_vertex_shader *vshader,
|
|||
(const float (*)[4])input_verts->verts->data,
|
||||
( float (*)[4])output_verts->verts->data,
|
||||
constants,
|
||||
const_size,
|
||||
input_verts->count,
|
||||
input_verts->vertex_size,
|
||||
input_verts->vertex_size,
|
||||
|
|
@ -273,7 +271,6 @@ fetch_pipeline_generic(struct draw_pt_middle_end *middle,
|
|||
if (fpme->opt & PT_SHADE) {
|
||||
draw_vertex_shader_run(vshader,
|
||||
draw->pt.user.vs_constants,
|
||||
draw->pt.user.vs_constants_size,
|
||||
fetch_info,
|
||||
vert_info,
|
||||
&vs_vert_info);
|
||||
|
|
@ -289,7 +286,6 @@ fetch_pipeline_generic(struct draw_pt_middle_end *middle,
|
|||
if ((fpme->opt & PT_SHADE) && gshader) {
|
||||
draw_geometry_shader_run(gshader,
|
||||
draw->pt.user.gs_constants,
|
||||
draw->pt.user.gs_constants_size,
|
||||
vert_info,
|
||||
prim_info,
|
||||
&vshader->info,
|
||||
|
|
|
|||
|
|
@ -406,9 +406,9 @@ llvm_middle_end_prepare(struct draw_pt_middle_end *middle,
|
|||
|
||||
|
||||
static unsigned
|
||||
get_num_consts_robust(struct draw_context *draw, unsigned *sizes, unsigned idx)
|
||||
get_num_consts_robust(struct draw_context *draw, struct draw_buffer_info *bufs, unsigned idx)
|
||||
{
|
||||
uint64_t const_bytes = sizes[idx];
|
||||
uint64_t const_bytes = bufs[idx].size;
|
||||
|
||||
if (const_bytes < sizeof(float))
|
||||
return 0;
|
||||
|
|
@ -416,7 +416,6 @@ get_num_consts_robust(struct draw_context *draw, unsigned *sizes, unsigned idx)
|
|||
return DIV_ROUND_UP(const_bytes, draw->constant_buffer_stride);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Bind/update constant buffer pointers, clip planes and viewport dims.
|
||||
* These are "light weight" parameters which aren't baked into the
|
||||
|
|
@ -438,16 +437,16 @@ llvm_middle_end_bind_parameters(struct draw_pt_middle_end *middle)
|
|||
* shader expects 16-byte allocations, the fix is likely to move
|
||||
* to LOAD intrinsic in the future and remove the vec4 constraint.
|
||||
*/
|
||||
int num_consts = get_num_consts_robust(draw, draw->pt.user.vs_constants_size, i);
|
||||
llvm->vs_jit_resources.constants[i].f = draw->pt.user.vs_constants[i];
|
||||
int num_consts = get_num_consts_robust(draw, draw->pt.user.vs_constants, i);
|
||||
llvm->vs_jit_resources.constants[i].f = draw->pt.user.vs_constants[i].ptr;
|
||||
llvm->vs_jit_resources.constants[i].num_elements = num_consts;
|
||||
if (num_consts == 0) {
|
||||
llvm->vs_jit_resources.constants[i].f = fake_const_buf;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < ARRAY_SIZE(llvm->vs_jit_resources.ssbos); ++i) {
|
||||
int num_ssbos = draw->pt.user.vs_ssbos_size[i];
|
||||
llvm->vs_jit_resources.ssbos[i].u = draw->pt.user.vs_ssbos[i];
|
||||
int num_ssbos = draw->pt.user.vs_ssbos[i].size;
|
||||
llvm->vs_jit_resources.ssbos[i].u = draw->pt.user.vs_ssbos[i].ptr;
|
||||
llvm->vs_jit_resources.ssbos[i].num_elements = num_ssbos;
|
||||
if (num_ssbos == 0) {
|
||||
llvm->vs_jit_resources.ssbos[i].u = (const uint32_t *)fake_const_buf;
|
||||
|
|
@ -455,16 +454,16 @@ llvm_middle_end_bind_parameters(struct draw_pt_middle_end *middle)
|
|||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(llvm->gs_jit_resources.constants); ++i) {
|
||||
int num_consts = get_num_consts_robust(draw, draw->pt.user.gs_constants_size, i);
|
||||
llvm->gs_jit_resources.constants[i].f = draw->pt.user.gs_constants[i];
|
||||
int num_consts = get_num_consts_robust(draw, draw->pt.user.gs_constants, i);
|
||||
llvm->gs_jit_resources.constants[i].f = draw->pt.user.gs_constants[i].ptr;
|
||||
llvm->gs_jit_resources.constants[i].num_elements = num_consts;
|
||||
if (num_consts == 0) {
|
||||
llvm->gs_jit_resources.constants[i].f = fake_const_buf;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < ARRAY_SIZE(llvm->gs_jit_resources.ssbos); ++i) {
|
||||
int num_ssbos = draw->pt.user.gs_ssbos_size[i];
|
||||
llvm->gs_jit_resources.ssbos[i].u = draw->pt.user.gs_ssbos[i];
|
||||
int num_ssbos = draw->pt.user.gs_ssbos[i].size;
|
||||
llvm->gs_jit_resources.ssbos[i].u = draw->pt.user.gs_ssbos[i].ptr;
|
||||
llvm->gs_jit_resources.ssbos[i].num_elements = num_ssbos;
|
||||
if (num_ssbos == 0) {
|
||||
llvm->gs_jit_resources.ssbos[i].u = (const uint32_t *)fake_const_buf;
|
||||
|
|
@ -472,16 +471,16 @@ llvm_middle_end_bind_parameters(struct draw_pt_middle_end *middle)
|
|||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(llvm->tcs_jit_resources.constants); ++i) {
|
||||
int num_consts = get_num_consts_robust(draw, draw->pt.user.tcs_constants_size, i);
|
||||
llvm->tcs_jit_resources.constants[i].f = draw->pt.user.tcs_constants[i];
|
||||
int num_consts = get_num_consts_robust(draw, draw->pt.user.tcs_constants, i);
|
||||
llvm->tcs_jit_resources.constants[i].f = draw->pt.user.tcs_constants[i].ptr;
|
||||
llvm->tcs_jit_resources.constants[i].num_elements = num_consts;
|
||||
if (num_consts == 0) {
|
||||
llvm->tcs_jit_resources.constants[i].f = fake_const_buf;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < ARRAY_SIZE(llvm->tcs_jit_resources.ssbos); ++i) {
|
||||
int num_ssbos = draw->pt.user.tcs_ssbos_size[i];
|
||||
llvm->tcs_jit_resources.ssbos[i].u = draw->pt.user.tcs_ssbos[i];
|
||||
int num_ssbos = draw->pt.user.tcs_ssbos[i].size;
|
||||
llvm->tcs_jit_resources.ssbos[i].u = draw->pt.user.tcs_ssbos[i].ptr;
|
||||
llvm->tcs_jit_resources.ssbos[i].num_elements = num_ssbos;
|
||||
if (num_ssbos == 0) {
|
||||
llvm->tcs_jit_resources.ssbos[i].u = (const uint32_t *)fake_const_buf;
|
||||
|
|
@ -489,16 +488,16 @@ llvm_middle_end_bind_parameters(struct draw_pt_middle_end *middle)
|
|||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(llvm->tes_jit_resources.constants); ++i) {
|
||||
int num_consts = get_num_consts_robust(draw, draw->pt.user.tes_constants_size, i);
|
||||
llvm->tes_jit_resources.constants[i].f = draw->pt.user.tes_constants[i];
|
||||
int num_consts = get_num_consts_robust(draw, draw->pt.user.tes_constants, i);
|
||||
llvm->tes_jit_resources.constants[i].f = draw->pt.user.tes_constants[i].ptr;
|
||||
llvm->tes_jit_resources.constants[i].num_elements = num_consts;
|
||||
if (num_consts == 0) {
|
||||
llvm->tes_jit_resources.constants[i].f = fake_const_buf;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < ARRAY_SIZE(llvm->tes_jit_resources.ssbos); ++i) {
|
||||
int num_ssbos = draw->pt.user.tes_ssbos_size[i];
|
||||
llvm->tes_jit_resources.ssbos[i].u = draw->pt.user.tes_ssbos[i];
|
||||
int num_ssbos = draw->pt.user.tes_ssbos[i].size;
|
||||
llvm->tes_jit_resources.ssbos[i].u = draw->pt.user.tes_ssbos[i].ptr;
|
||||
llvm->tes_jit_resources.ssbos[i].num_elements = num_ssbos;
|
||||
if (num_ssbos == 0) {
|
||||
llvm->tes_jit_resources.ssbos[i].u = (const uint32_t *)fake_const_buf;
|
||||
|
|
@ -681,7 +680,6 @@ llvm_pipeline_generic(struct draw_pt_middle_end *middle,
|
|||
struct draw_vertex_shader *vshader = draw->vs.vertex_shader;
|
||||
draw_geometry_shader_run(gshader,
|
||||
draw->pt.user.gs_constants,
|
||||
draw->pt.user.gs_constants_size,
|
||||
vert_info,
|
||||
prim_info,
|
||||
tes_shader ? &tes_shader->info : &vshader->info,
|
||||
|
|
|
|||
|
|
@ -131,8 +131,7 @@ struct draw_vertex_shader {
|
|||
void (*run_linear)(struct draw_vertex_shader *shader,
|
||||
const float (*input)[4],
|
||||
float (*output)[4],
|
||||
const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const unsigned const_size[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const struct draw_buffer_info *constants,
|
||||
unsigned count,
|
||||
unsigned input_stride,
|
||||
unsigned output_stride,
|
||||
|
|
|
|||
|
|
@ -92,8 +92,7 @@ static void
|
|||
vs_exec_run_linear(struct draw_vertex_shader *shader,
|
||||
const float (*input)[4],
|
||||
float (*output)[4],
|
||||
const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const unsigned const_size[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const struct draw_buffer_info *constants,
|
||||
unsigned count,
|
||||
unsigned input_stride,
|
||||
unsigned output_stride,
|
||||
|
|
@ -107,7 +106,7 @@ vs_exec_run_linear(struct draw_vertex_shader *shader,
|
|||
|
||||
assert(!shader->draw->llvm);
|
||||
tgsi_exec_set_constant_buffers(machine, PIPE_MAX_CONSTANT_BUFFERS,
|
||||
constants, const_size);
|
||||
(const struct tgsi_exec_consts_info *)constants);
|
||||
|
||||
if (shader->info.uses_instanceid) {
|
||||
unsigned i = machine->SysSemanticToIndex[TGSI_SEMANTIC_INSTANCEID];
|
||||
|
|
|
|||
|
|
@ -53,8 +53,7 @@ static void
|
|||
vs_llvm_run_linear(struct draw_vertex_shader *shader,
|
||||
const float (*input)[4],
|
||||
float (*output)[4],
|
||||
const void *constants[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const unsigned constants_size[PIPE_MAX_CONSTANT_BUFFERS],
|
||||
const struct draw_buffer_info *constants,
|
||||
unsigned count,
|
||||
unsigned input_stride,
|
||||
unsigned output_stride,
|
||||
|
|
|
|||
|
|
@ -176,7 +176,6 @@ vsvg_run_elts(struct draw_vs_variant *variant,
|
|||
temp_buffer,
|
||||
temp_buffer,
|
||||
vsvg->base.vs->draw->pt.user.vs_constants,
|
||||
vsvg->base.vs->draw->pt.user.vs_constants_size,
|
||||
count,
|
||||
temp_vertex_stride,
|
||||
temp_vertex_stride, NULL);
|
||||
|
|
@ -240,7 +239,6 @@ vsvg_run_linear(struct draw_vs_variant *variant,
|
|||
temp_buffer,
|
||||
temp_buffer,
|
||||
vsvg->base.vs->draw->pt.user.vs_constants,
|
||||
vsvg->base.vs->draw->pt.user.vs_constants_size,
|
||||
count,
|
||||
temp_vertex_stride,
|
||||
temp_vertex_stride, NULL);
|
||||
|
|
|
|||
|
|
@ -1005,14 +1005,13 @@ print_temp(const struct tgsi_exec_machine *mach, uint index)
|
|||
void
|
||||
tgsi_exec_set_constant_buffers(struct tgsi_exec_machine *mach,
|
||||
unsigned num_bufs,
|
||||
const void **bufs,
|
||||
const unsigned *buf_sizes)
|
||||
const struct tgsi_exec_consts_info *bufs)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < num_bufs; i++) {
|
||||
mach->Consts[i] = bufs[i];
|
||||
mach->ConstsSize[i] = buf_sizes[i];
|
||||
mach->Consts[i] = bufs[i].ptr;
|
||||
mach->ConstsSize[i] = bufs[i].size;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -255,6 +255,11 @@ struct tgsi_call_record
|
|||
uint ReturnAddr;
|
||||
};
|
||||
|
||||
/* should match draw_buffer_info */
|
||||
struct tgsi_exec_consts_info {
|
||||
const void *ptr;
|
||||
unsigned size;
|
||||
};
|
||||
|
||||
/* Switch-case block state. */
|
||||
struct tgsi_switch_record {
|
||||
|
|
@ -425,8 +430,7 @@ tgsi_exec_machine_run(
|
|||
extern void
|
||||
tgsi_exec_set_constant_buffers(struct tgsi_exec_machine *mach,
|
||||
unsigned num_bufs,
|
||||
const void **bufs,
|
||||
const unsigned *buf_sizes);
|
||||
const struct tgsi_exec_consts_info *bufs);
|
||||
|
||||
|
||||
static inline int
|
||||
|
|
|
|||
|
|
@ -212,8 +212,7 @@ softpipe_launch_grid(struct pipe_context *context,
|
|||
(struct tgsi_image *)softpipe->tgsi.image[PIPE_SHADER_COMPUTE],
|
||||
(struct tgsi_buffer *)softpipe->tgsi.buffer[PIPE_SHADER_COMPUTE]);
|
||||
tgsi_exec_set_constant_buffers(machines[idx], PIPE_MAX_CONSTANT_BUFFERS,
|
||||
softpipe->mapped_constants[PIPE_SHADER_COMPUTE],
|
||||
softpipe->const_buffer_size[PIPE_SHADER_COMPUTE]);
|
||||
softpipe->mapped_constants[PIPE_SHADER_COMPUTE]);
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "sp_quad_pipe.h"
|
||||
#include "sp_setup.h"
|
||||
|
||||
#include "tgsi/tgsi_exec.h"
|
||||
|
||||
struct softpipe_vbuf_render;
|
||||
struct draw_context;
|
||||
|
|
@ -108,8 +109,7 @@ struct softpipe_context {
|
|||
ubyte *mapped_vbuffer[PIPE_MAX_ATTRIBS];
|
||||
|
||||
/** Mapped constant buffers */
|
||||
const void *mapped_constants[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS];
|
||||
unsigned const_buffer_size[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS];
|
||||
struct tgsi_exec_consts_info mapped_constants[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS];
|
||||
|
||||
/** Vertex format */
|
||||
struct sp_setup_info setup_info;
|
||||
|
|
|
|||
|
|
@ -110,8 +110,7 @@ shade_quads(struct quad_stage *qs,
|
|||
unsigned i, nr_quads = 0;
|
||||
|
||||
tgsi_exec_set_constant_buffers(machine, PIPE_MAX_CONSTANT_BUFFERS,
|
||||
softpipe->mapped_constants[PIPE_SHADER_FRAGMENT],
|
||||
softpipe->const_buffer_size[PIPE_SHADER_FRAGMENT]);
|
||||
softpipe->mapped_constants[PIPE_SHADER_FRAGMENT]);
|
||||
|
||||
machine->InterpCoefs = quads[0]->coef;
|
||||
|
||||
|
|
|
|||
|
|
@ -393,8 +393,8 @@ softpipe_set_constant_buffer(struct pipe_context *pipe,
|
|||
draw_set_mapped_constant_buffer(softpipe->draw, shader, index, data, size);
|
||||
}
|
||||
|
||||
softpipe->mapped_constants[shader][index] = data;
|
||||
softpipe->const_buffer_size[shader][index] = size;
|
||||
softpipe->mapped_constants[shader][index].ptr = data;
|
||||
softpipe->mapped_constants[shader][index].size = size;
|
||||
|
||||
softpipe->dirty |= SP_NEW_CONSTANTS;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue