draw: add support for passing buffers to vs/gs shaders.
Like the image code, but for shader buffers this time. Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Roland Scheidegger <sroland@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
081a958bcd
commit
c2aeeca455
|
@ -749,7 +749,23 @@ draw_image(struct draw_context *draw,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Provide TGSI buffer objects for vertex/geometry shaders that use
|
||||
* load/store/atomic ops. This state only needs to be set once per context.
|
||||
* This might only be used by software drivers for the time being.
|
||||
*/
|
||||
void
|
||||
draw_buffer(struct draw_context *draw,
|
||||
uint shader,
|
||||
struct tgsi_buffer *buffer)
|
||||
{
|
||||
if (shader == PIPE_SHADER_VERTEX) {
|
||||
draw->vs.tgsi.buffer = buffer;
|
||||
} else {
|
||||
debug_assert(shader == PIPE_SHADER_GEOMETRY);
|
||||
draw->gs.tgsi.buffer = buffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void draw_set_render( struct draw_context *draw,
|
||||
|
|
|
@ -49,6 +49,7 @@ struct draw_geometry_shader;
|
|||
struct draw_fragment_shader;
|
||||
struct tgsi_sampler;
|
||||
struct tgsi_image;
|
||||
struct tgsi_buffer;
|
||||
|
||||
/*
|
||||
* structure to contain driver internal information
|
||||
|
@ -160,6 +161,11 @@ draw_image(struct draw_context *draw,
|
|||
uint shader_type,
|
||||
struct tgsi_image *image);
|
||||
|
||||
void
|
||||
draw_buffer(struct draw_context *draw,
|
||||
uint shader_type,
|
||||
struct tgsi_buffer *buffer);
|
||||
|
||||
void
|
||||
draw_set_sampler_views(struct draw_context *draw,
|
||||
unsigned shader_stage,
|
||||
|
|
|
@ -681,7 +681,9 @@ void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
|
|||
if (!use_llvm && shader && shader->machine->Tokens != shader->state.tokens) {
|
||||
tgsi_exec_machine_bind_shader(shader->machine,
|
||||
shader->state.tokens,
|
||||
draw->gs.tgsi.sampler, draw->gs.tgsi.image, NULL);
|
||||
draw->gs.tgsi.sampler,
|
||||
draw->gs.tgsi.image,
|
||||
draw->gs.tgsi.buffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -67,6 +67,7 @@ struct vbuf_render;
|
|||
struct tgsi_exec_machine;
|
||||
struct tgsi_sampler;
|
||||
struct tgsi_image;
|
||||
struct tgsi_buffer;
|
||||
struct draw_pt_front_end;
|
||||
struct draw_assembler;
|
||||
struct draw_llvm;
|
||||
|
@ -269,6 +270,7 @@ struct draw_context
|
|||
|
||||
struct tgsi_sampler *sampler;
|
||||
struct tgsi_image *image;
|
||||
struct tgsi_buffer *buffer;
|
||||
} tgsi;
|
||||
|
||||
struct translate *fetch;
|
||||
|
@ -289,6 +291,7 @@ struct draw_context
|
|||
|
||||
struct tgsi_sampler *sampler;
|
||||
struct tgsi_image *image;
|
||||
struct tgsi_buffer *buffer;
|
||||
} tgsi;
|
||||
|
||||
} gs;
|
||||
|
|
|
@ -70,7 +70,9 @@ vs_exec_prepare( struct draw_vertex_shader *shader,
|
|||
if (evs->machine->Tokens != shader->state.tokens) {
|
||||
tgsi_exec_machine_bind_shader(evs->machine,
|
||||
shader->state.tokens,
|
||||
draw->vs.tgsi.sampler, draw->vs.tgsi.image, NULL);
|
||||
draw->vs.tgsi.sampler,
|
||||
draw->vs.tgsi.image,
|
||||
draw->vs.tgsi.buffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue