This just adds support for passing through images to the tgsi execution stage. Reviewed-by: Brian Paul <brianp@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com>tags/12.0-branchpoint
@@ -731,6 +731,24 @@ draw_texture_sampler(struct draw_context *draw, | |||
} | |||
} | |||
/** | |||
* Provide TGSI image objects for vertex/geometry shaders that use | |||
* texture fetches. This state only needs to be set once per context. | |||
* This might only be used by software drivers for the time being. | |||
*/ | |||
void | |||
draw_image(struct draw_context *draw, | |||
uint shader, | |||
struct tgsi_image *image) | |||
{ | |||
if (shader == PIPE_SHADER_VERTEX) { | |||
draw->vs.tgsi.image = image; | |||
} else { | |||
debug_assert(shader == PIPE_SHADER_GEOMETRY); | |||
draw->gs.tgsi.image = image; | |||
} | |||
} | |||
@@ -48,6 +48,7 @@ struct draw_vertex_shader; | |||
struct draw_geometry_shader; | |||
struct draw_fragment_shader; | |||
struct tgsi_sampler; | |||
struct tgsi_image; | |||
/* | |||
* structure to contain driver internal information | |||
@@ -154,6 +155,11 @@ draw_texture_sampler(struct draw_context *draw, | |||
uint shader_type, | |||
struct tgsi_sampler *sampler); | |||
void | |||
draw_image(struct draw_context *draw, | |||
uint shader_type, | |||
struct tgsi_image *image); | |||
void | |||
draw_set_sampler_views(struct draw_context *draw, | |||
unsigned shader_stage, |
@@ -681,7 +681,7 @@ 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, NULL); | |||
draw->gs.tgsi.sampler, draw->gs.tgsi.image); | |||
} | |||
} | |||
@@ -66,6 +66,7 @@ struct draw_stage; | |||
struct vbuf_render; | |||
struct tgsi_exec_machine; | |||
struct tgsi_sampler; | |||
struct tgsi_image; | |||
struct draw_pt_front_end; | |||
struct draw_assembler; | |||
struct draw_llvm; | |||
@@ -267,6 +268,7 @@ struct draw_context | |||
struct tgsi_exec_machine *machine; | |||
struct tgsi_sampler *sampler; | |||
struct tgsi_image *image; | |||
} tgsi; | |||
struct translate *fetch; | |||
@@ -286,6 +288,7 @@ struct draw_context | |||
struct tgsi_exec_machine *machine; | |||
struct tgsi_sampler *sampler; | |||
struct tgsi_image *image; | |||
} tgsi; | |||
} gs; |
@@ -70,7 +70,7 @@ 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, NULL); | |||
draw->vs.tgsi.sampler, draw->vs.tgsi.image); | |||
} | |||
} | |||