Parcourir la source

draw: add support for passing images to vs/gs shaders.

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
Dave Airlie il y a 9 ans
Parent
révision
0d1f679ded

+ 18
- 0
src/gallium/auxiliary/draw/draw_context.c Voir le fichier

@@ -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;
}
}





+ 6
- 0
src/gallium/auxiliary/draw/draw_context.h Voir le fichier

@@ -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,

+ 1
- 1
src/gallium/auxiliary/draw/draw_gs.c Voir le fichier

@@ -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);
}
}


+ 3
- 0
src/gallium/auxiliary/draw/draw_private.h Voir le fichier

@@ -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;

+ 1
- 1
src/gallium/auxiliary/draw/draw_vs_exec.c Voir le fichier

@@ -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);
}
}


Chargement…
Annuler
Enregistrer