Mesa (gallium-gpu4-texture-opcodes): Revert "gallium: Prepare interfaces to do TXF in softpipe and TGSI interpreter."
MichaŠKról
michal at kemper.freedesktop.org
Thu Jan 28 13:12:26 UTC 2010
Module: Mesa
Branch: gallium-gpu4-texture-opcodes
Commit: dd3f800aea0c4a8739112aff581cdcc2d8c775c1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd3f800aea0c4a8739112aff581cdcc2d8c775c1
Author: Michal Krol <michal at vmware.com>
Date: Tue Jan 26 11:55:59 2010 +0100
Revert "gallium: Prepare interfaces to do TXF in softpipe and TGSI interpreter."
This reverts commit de1fb34223b82caf3805ebca9e1bb2fbc13c99fa.
---
src/gallium/auxiliary/draw/draw_gs.c | 4 +-
src/gallium/auxiliary/draw/draw_vs_exec.c | 4 +-
src/gallium/auxiliary/tgsi/tgsi_exec.c | 219 +++++-----------------------
src/gallium/auxiliary/tgsi/tgsi_exec.h | 25 +---
src/gallium/drivers/softpipe/sp_fs_exec.c | 17 +--
src/gallium/drivers/softpipe/sp_fs_sse.c | 8 +-
src/gallium/drivers/softpipe/sp_quad_fs.c | 8 +-
src/gallium/drivers/softpipe/sp_state.h | 7 +-
8 files changed, 65 insertions(+), 227 deletions(-)
diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c
index 8dde007..5db2e75 100644
--- a/src/gallium/auxiliary/draw/draw_gs.c
+++ b/src/gallium/auxiliary/draw/draw_gs.c
@@ -333,8 +333,6 @@ void draw_geometry_shader_prepare(struct draw_geometry_shader *shader,
tgsi_exec_machine_bind_shader(shader->machine,
shader->state.tokens,
draw->gs.num_samplers,
- draw->gs.samplers,
- 0,
- NULL);
+ draw->gs.samplers);
}
}
diff --git a/src/gallium/auxiliary/draw/draw_vs_exec.c b/src/gallium/auxiliary/draw/draw_vs_exec.c
index 46305dc..41cc802 100644
--- a/src/gallium/auxiliary/draw/draw_vs_exec.c
+++ b/src/gallium/auxiliary/draw/draw_vs_exec.c
@@ -70,9 +70,7 @@ vs_exec_prepare( struct draw_vertex_shader *shader,
tgsi_exec_machine_bind_shader(evs->machine,
shader->state.tokens,
draw->vs.num_samplers,
- draw->vs.samplers,
- 0,
- NULL);
+ draw->vs.samplers);
}
}
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index 4ce4bec..c3d79c9 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -540,13 +540,12 @@ tgsi_check_soa_dependencies(const struct tgsi_full_instruction *inst)
* allocating temporary storage, setting up constants, etc.
* After this, we can call tgsi_exec_machine_run() many times.
*/
-void
-tgsi_exec_machine_bind_shader(struct tgsi_exec_machine *mach,
- const struct tgsi_token *tokens,
- uint numSamplers,
- struct tgsi_sampler **samplers,
- uint numResources,
- struct tgsi_resource **resources)
+void
+tgsi_exec_machine_bind_shader(
+ struct tgsi_exec_machine *mach,
+ const struct tgsi_token *tokens,
+ uint numSamplers,
+ struct tgsi_sampler **samplers)
{
uint k;
struct tgsi_parse_context parse;
@@ -565,7 +564,6 @@ tgsi_exec_machine_bind_shader(struct tgsi_exec_machine *mach,
mach->Tokens = tokens;
mach->Samplers = samplers;
- mach->Resources = resources;
k = tgsi_parse_init (&parse, mach->Tokens);
if (k != TGSI_PARSE_OK) {
@@ -1505,107 +1503,7 @@ emit_primitive(struct tgsi_exec_machine *mach)
* Fetch a four texture samples using STR texture coordinates.
*/
static void
-fetch_texel(struct tgsi_resource *resource,
- const union tgsi_exec_channel *i,
- const union tgsi_exec_channel *j,
- const union tgsi_exec_channel *k,
- const union tgsi_exec_channel *lod,
- union tgsi_exec_channel *r,
- union tgsi_exec_channel *g,
- union tgsi_exec_channel *b,
- union tgsi_exec_channel *a)
-{
- uint q;
- float rgba[NUM_CHANNELS][QUAD_SIZE];
-
- resource->fetch3D(resource, i->i, j->i, k->i, lod->i, rgba);
-
- for (q = 0; q < QUAD_SIZE; q++) {
- r->f[q] = rgba[0][q];
- g->f[q] = rgba[1][q];
- b->f[q] = rgba[2][q];
- a->f[q] = rgba[3][q];
- }
-}
-
-static void
-exec_txf(struct tgsi_exec_machine *mach,
- const struct tgsi_full_instruction *inst)
-{
- const uint unit = inst->Src[0].Register.Index;
- union tgsi_exec_channel r[4];
- uint chan;
-
- switch (mach->ResourceDecls[unit].Texture) {
- case TGSI_TEXTURE_1D:
- case TGSI_TEXTURE_SHADOW1D:
- fetch_source(mach, &r[0], &inst->Src[1], CHAN_X, TGSI_EXEC_DATA_INT);
- fetch_source(mach, &r[3], &inst->Src[1], CHAN_W, TGSI_EXEC_DATA_INT);
-
- fetch_texel(mach->Resources[unit],
- &r[0],
- &ZeroVec,
- &ZeroVec,
- &r[3],
- &r[0],
- &r[1],
- &r[2],
- &r[3]);
- break;
-
- case TGSI_TEXTURE_2D:
- case TGSI_TEXTURE_RECT:
- case TGSI_TEXTURE_SHADOW2D:
- case TGSI_TEXTURE_SHADOWRECT:
- fetch_source(mach, &r[0], &inst->Src[1], CHAN_X, TGSI_EXEC_DATA_INT);
- fetch_source(mach, &r[1], &inst->Src[1], CHAN_Y, TGSI_EXEC_DATA_INT);
- fetch_source(mach, &r[3], &inst->Src[1], CHAN_W, TGSI_EXEC_DATA_INT);
-
- fetch_texel(mach->Resources[unit],
- &r[0],
- &r[1],
- &ZeroVec,
- &r[3],
- &r[0],
- &r[1],
- &r[2],
- &r[3]);
- break;
-
- case TGSI_TEXTURE_3D:
- case TGSI_TEXTURE_CUBE:
- fetch_source(mach, &r[0], &inst->Src[1], CHAN_X, TGSI_EXEC_DATA_INT);
- fetch_source(mach, &r[1], &inst->Src[1], CHAN_Y, TGSI_EXEC_DATA_INT);
- fetch_source(mach, &r[2], &inst->Src[1], CHAN_Z, TGSI_EXEC_DATA_INT);
- fetch_source(mach, &r[3], &inst->Src[1], CHAN_W, TGSI_EXEC_DATA_INT);
-
- fetch_texel(mach->Resources[unit],
- &r[0],
- &r[1],
- &r[2],
- &r[3],
- &r[0],
- &r[1],
- &r[2],
- &r[3]);
- break;
-
- default:
- assert(0);
- }
-
- for (chan = 0; chan < NUM_CHANNELS; chan++) {
- if (inst->Dst[0].Register.WriteMask & (1 << chan)) {
- store_dest(mach, &r[chan], &inst->Dst[0], inst, chan, TGSI_EXEC_DATA_UINT);
- }
- }
-}
-
-/*
- * Sample four texture samples using STR texture coordinates.
- */
-static void
-sample_texel(struct tgsi_sampler *sampler,
+fetch_texel( struct tgsi_sampler *sampler,
const union tgsi_exec_channel *s,
const union tgsi_exec_channel *t,
const union tgsi_exec_channel *p,
@@ -1614,14 +1512,14 @@ sample_texel(struct tgsi_sampler *sampler,
union tgsi_exec_channel *r,
union tgsi_exec_channel *g,
union tgsi_exec_channel *b,
- union tgsi_exec_channel *a)
+ union tgsi_exec_channel *a )
{
uint j;
float rgba[NUM_CHANNELS][QUAD_SIZE];
sampler->get_samples(sampler, s->f, t->f, p->f, c0->f, control, rgba);
- for (j = 0; j < QUAD_SIZE; j++) {
+ for (j = 0; j < 4; j++) {
r->f[j] = rgba[0][j];
g->f[j] = rgba[1][j];
b->f[j] = rgba[2][j];
@@ -1661,7 +1559,7 @@ exec_tex(struct tgsi_exec_machine *mach,
control = tgsi_sampler_lod_bias;
}
- switch (mach->ResourceDecls[image_unit].Texture) {
+ switch (mach->Resources[image_unit].Texture) {
case TGSI_TEXTURE_1D:
case TGSI_TEXTURE_SHADOW1D:
fetch_source(mach, &r[0], &inst->Src[1], CHAN_X, TGSI_EXEC_DATA_FLOAT);
@@ -1670,16 +1568,10 @@ exec_tex(struct tgsi_exec_machine *mach,
micro_div(&r[0], &r[0], &r[3]);
}
- sample_texel(mach->Samplers[sampler_unit],
- &r[0],
- &ZeroVec,
- &ZeroVec,
- lod,
- control,
- &r[0],
- &r[1],
- &r[2],
- &r[3]);
+ fetch_texel(mach->Samplers[sampler_unit],
+ &r[0], &ZeroVec, &ZeroVec, lod, /* S, T, P, LOD */
+ control,
+ &r[0], &r[1], &r[2], &r[3]); /* R, G, B, A */
break;
case TGSI_TEXTURE_2D:
@@ -1696,16 +1588,10 @@ exec_tex(struct tgsi_exec_machine *mach,
micro_div(&r[2], &r[2], &r[3]);
}
- sample_texel(mach->Samplers[sampler_unit],
- &r[0],
- &r[1],
- &r[2],
- lod,
- control,
- &r[0],
- &r[1],
- &r[2],
- &r[3]);
+ fetch_texel(mach->Samplers[sampler_unit],
+ &r[0], &r[1], &r[2], lod, /* S, T, P, LOD */
+ control,
+ &r[0], &r[1], &r[2], &r[3]); /* outputs */
break;
case TGSI_TEXTURE_3D:
@@ -1720,16 +1606,10 @@ exec_tex(struct tgsi_exec_machine *mach,
micro_div(&r[2], &r[2], &r[3]);
}
- sample_texel(mach->Samplers[sampler_unit],
- &r[0],
- &r[1],
- &r[2],
- lod,
- control,
- &r[0],
- &r[1],
- &r[2],
- &r[3]);
+ fetch_texel(mach->Samplers[sampler_unit],
+ &r[0], &r[1], &r[2], lod,
+ control,
+ &r[0], &r[1], &r[2], &r[3]);
break;
default:
@@ -1738,7 +1618,7 @@ exec_tex(struct tgsi_exec_machine *mach,
for (chan = 0; chan < NUM_CHANNELS; chan++) {
if (inst->Dst[0].Register.WriteMask & (1 << chan)) {
- store_dest(mach, &r[chan], &inst->Dst[0], inst, chan, TGSI_EXEC_DATA_UINT);
+ store_dest(mach, &r[chan], &inst->Dst[0], inst, chan, TGSI_EXEC_DATA_FLOAT);
}
}
}
@@ -1756,21 +1636,15 @@ exec_txd(struct tgsi_exec_machine *mach,
* XXX: This is fake TXD -- the derivatives are not taken into account, yet.
*/
- switch (mach->ResourceDecls[image_unit].Texture) {
+ switch (mach->Resources[image_unit].Texture) {
case TGSI_TEXTURE_1D:
case TGSI_TEXTURE_SHADOW1D:
fetch_source(mach, &r[0], &inst->Src[1], CHAN_X, TGSI_EXEC_DATA_FLOAT);
- sample_texel(mach->Samplers[sampler_unit],
- &r[0],
- &ZeroVec,
- &ZeroVec,
- &ZeroVec,
- tgsi_sampler_lod_bias,
- &r[0],
- &r[1],
- &r[2],
- &r[3]);
+ fetch_texel(mach->Samplers[sampler_unit],
+ &r[0], &ZeroVec, &ZeroVec, &ZeroVec, /* S, T, P, BIAS */
+ tgsi_sampler_lod_bias,
+ &r[0], &r[1], &r[2], &r[3]); /* R, G, B, A */
break;
case TGSI_TEXTURE_2D:
@@ -1781,16 +1655,10 @@ exec_txd(struct tgsi_exec_machine *mach,
fetch_source(mach, &r[1], &inst->Src[1], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
fetch_source(mach, &r[2], &inst->Src[1], CHAN_Z, TGSI_EXEC_DATA_FLOAT);
- sample_texel(mach->Samplers[sampler_unit],
- &r[0],
- &r[1],
- &r[2],
- &ZeroVec,
- tgsi_sampler_lod_bias,
- &r[0],
- &r[1],
- &r[2],
- &r[3]);
+ fetch_texel(mach->Samplers[sampler_unit],
+ &r[0], &r[1], &r[2], &ZeroVec, /* inputs */
+ tgsi_sampler_lod_bias,
+ &r[0], &r[1], &r[2], &r[3]); /* outputs */
break;
case TGSI_TEXTURE_3D:
@@ -1799,16 +1667,10 @@ exec_txd(struct tgsi_exec_machine *mach,
fetch_source(mach, &r[1], &inst->Src[1], CHAN_Y, TGSI_EXEC_DATA_FLOAT);
fetch_source(mach, &r[2], &inst->Src[1], CHAN_Z, TGSI_EXEC_DATA_FLOAT);
- sample_texel(mach->Samplers[sampler_unit],
- &r[0],
- &r[1],
- &r[2],
- &ZeroVec,
- tgsi_sampler_lod_bias,
- &r[0],
- &r[1],
- &r[2],
- &r[3]);
+ fetch_texel(mach->Samplers[sampler_unit],
+ &r[0], &r[1], &r[2], &ZeroVec,
+ tgsi_sampler_lod_bias,
+ &r[0], &r[1], &r[2], &r[3]);
break;
default:
@@ -1817,7 +1679,7 @@ exec_txd(struct tgsi_exec_machine *mach,
for (chan = 0; chan < NUM_CHANNELS; chan++) {
if (inst->Dst[0].Register.WriteMask & (1 << chan)) {
- store_dest(mach, &r[chan], &inst->Dst[0], inst, chan, TGSI_EXEC_DATA_UINT);
+ store_dest(mach, &r[chan], &inst->Dst[0], inst, chan, TGSI_EXEC_DATA_FLOAT);
}
}
}
@@ -1895,7 +1757,7 @@ exec_declaration(struct tgsi_exec_machine *mach,
const struct tgsi_full_declaration *decl)
{
if (decl->Declaration.File == TGSI_FILE_RESOURCE) {
- mach->ResourceDecls[decl->Range.First] = decl->Resource;
+ mach->Resources[decl->Range.First] = decl->Resource;
return;
}
@@ -3387,10 +3249,7 @@ exec_instruction(
break;
case TGSI_OPCODE_TXF:
- /* texture fetch */
- /* src[0] = resource */
- /* src[1] = texcoord */
- exec_txf(mach, inst);
+ assert (0);
break;
case TGSI_OPCODE_TXQ:
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.h b/src/gallium/auxiliary/tgsi/tgsi_exec.h
index d5d558a..61189fe 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.h
@@ -94,15 +94,6 @@ struct tgsi_sampler
float rgba[NUM_CHANNELS][QUAD_SIZE]);
};
-struct tgsi_resource {
- void (* fetch3D)(struct tgsi_resource *resource,
- const int i[QUAD_SIZE],
- const int j[QUAD_SIZE],
- const int k[QUAD_SIZE],
- const int lod[QUAD_SIZE],
- float rgba[NUM_CHANNELS][QUAD_SIZE]);
-};
-
/**
* For branching/calling subroutines.
*/
@@ -340,8 +331,7 @@ struct tgsi_exec_machine
struct tgsi_exec_labels Labels;
- struct tgsi_declaration_resource ResourceDecls[PIPE_MAX_SHADER_RESOURCES];
- struct tgsi_resource **Resources;
+ struct tgsi_declaration_resource Resources[PIPE_MAX_SHADER_RESOURCES];
};
struct tgsi_exec_machine *
@@ -351,13 +341,12 @@ void
tgsi_exec_machine_destroy(struct tgsi_exec_machine *mach);
-void
-tgsi_exec_machine_bind_shader(struct tgsi_exec_machine *mach,
- const struct tgsi_token *tokens,
- uint numSamplers,
- struct tgsi_sampler **samplers,
- uint numResources,
- struct tgsi_resource **resources);
+void
+tgsi_exec_machine_bind_shader(
+ struct tgsi_exec_machine *mach,
+ const struct tgsi_token *tokens,
+ uint numSamplers,
+ struct tgsi_sampler **samplers);
uint
tgsi_exec_machine_run(
diff --git a/src/gallium/drivers/softpipe/sp_fs_exec.c b/src/gallium/drivers/softpipe/sp_fs_exec.c
index a12a249..27fa126 100644
--- a/src/gallium/drivers/softpipe/sp_fs_exec.c
+++ b/src/gallium/drivers/softpipe/sp_fs_exec.c
@@ -60,22 +60,19 @@ sp_exec_fragment_shader(const struct sp_fragment_shader *base)
static void
-exec_prepare(const struct sp_fragment_shader *base,
- struct tgsi_exec_machine *machine,
- struct tgsi_sampler **samplers,
- struct tgsi_resource **resources)
+exec_prepare( const struct sp_fragment_shader *base,
+ struct tgsi_exec_machine *machine,
+ struct tgsi_sampler **samplers )
{
/*
* Bind tokens/shader to the interpreter's machine state.
* Avoid redundant binding.
*/
if (machine->Tokens != base->shader.tokens) {
- tgsi_exec_machine_bind_shader(machine,
- base->shader.tokens,
- PIPE_MAX_SAMPLERS,
- samplers,
- PIPE_MAX_SHADER_RESOURCES,
- resources);
+ tgsi_exec_machine_bind_shader( machine,
+ base->shader.tokens,
+ PIPE_MAX_SAMPLERS,
+ samplers );
}
}
diff --git a/src/gallium/drivers/softpipe/sp_fs_sse.c b/src/gallium/drivers/softpipe/sp_fs_sse.c
index 882eb11..f912950 100644
--- a/src/gallium/drivers/softpipe/sp_fs_sse.c
+++ b/src/gallium/drivers/softpipe/sp_fs_sse.c
@@ -68,13 +68,11 @@ sp_sse_fragment_shader(const struct sp_fragment_shader *base)
static void
-fs_sse_prepare(const struct sp_fragment_shader *base,
- struct tgsi_exec_machine *machine,
- struct tgsi_sampler **samplers,
- struct tgsi_resource **resources)
+fs_sse_prepare( const struct sp_fragment_shader *base,
+ struct tgsi_exec_machine *machine,
+ struct tgsi_sampler **samplers )
{
machine->Samplers = samplers;
- machine->Resources = resources;
}
diff --git a/src/gallium/drivers/softpipe/sp_quad_fs.c b/src/gallium/drivers/softpipe/sp_quad_fs.c
index 7a32b5f..1e7533d 100644
--- a/src/gallium/drivers/softpipe/sp_quad_fs.c
+++ b/src/gallium/drivers/softpipe/sp_quad_fs.c
@@ -142,10 +142,10 @@ shade_begin(struct quad_stage *qs)
struct quad_shade_stage *qss = quad_shade_stage(qs);
struct softpipe_context *softpipe = qs->softpipe;
- softpipe->fs->prepare(softpipe->fs,
- qss->machine,
- (struct tgsi_sampler **)softpipe->tgsi.frag_samplers_list,
- NULL);
+ softpipe->fs->prepare( softpipe->fs,
+ qss->machine,
+ (struct tgsi_sampler **)
+ softpipe->tgsi.frag_samplers_list );
qs->next->begin(qs->next);
}
diff --git a/src/gallium/drivers/softpipe/sp_state.h b/src/gallium/drivers/softpipe/sp_state.h
index b994640..9b18dac 100644
--- a/src/gallium/drivers/softpipe/sp_state.h
+++ b/src/gallium/drivers/softpipe/sp_state.h
@@ -68,10 +68,9 @@ struct sp_fragment_shader {
struct tgsi_shader_info info;
- void (*prepare)(const struct sp_fragment_shader *shader,
- struct tgsi_exec_machine *machine,
- struct tgsi_sampler **samplers,
- struct tgsi_resource **resources);
+ void (*prepare)( const struct sp_fragment_shader *shader,
+ struct tgsi_exec_machine *machine,
+ struct tgsi_sampler **samplers);
/* Run the shader - this interface will get cleaned up in the
* future:
More information about the mesa-commit
mailing list