tgsi: add TXQ support. (v2)
this adds another callback in the sampler struct containing get_dims entry point. This is used to query the driver for the texture resource dimensions for the resource bound to the current sampler. v2: remove unusued variable, fix indent Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -1920,7 +1920,35 @@ exec_txd(struct tgsi_exec_machine *mach,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
exec_txq(struct tgsi_exec_machine *mach,
|
||||
const struct tgsi_full_instruction *inst)
|
||||
{
|
||||
struct tgsi_sampler *sampler;
|
||||
const uint unit = inst->Src[1].Register.Index;
|
||||
int result[4];
|
||||
union tgsi_exec_channel r[4], src;
|
||||
uint chan;
|
||||
int i,j;
|
||||
|
||||
fetch_source(mach, &src, &inst->Src[0], CHAN_X, TGSI_EXEC_DATA_INT);
|
||||
sampler = mach->Samplers[unit];
|
||||
|
||||
sampler->get_dims(sampler, src.i[0], result);
|
||||
|
||||
for (i = 0; i < QUAD_SIZE; i++) {
|
||||
for (j = 0; j < 4; j++) {
|
||||
r[j].i[i] = result[j];
|
||||
}
|
||||
}
|
||||
|
||||
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_INT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
exec_sample(struct tgsi_exec_machine *mach,
|
||||
@@ -3718,7 +3746,7 @@ exec_instruction(
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_TXQ:
|
||||
assert (0);
|
||||
exec_txq(mach, inst);
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_EMIT:
|
||||
|
||||
@@ -90,6 +90,8 @@ struct tgsi_sampler
|
||||
const float c0[QUAD_SIZE],
|
||||
enum tgsi_sampler_control control,
|
||||
float rgba[NUM_CHANNELS][QUAD_SIZE]);
|
||||
void (*get_dims)(struct tgsi_sampler *sampler, int level,
|
||||
int dims[4]);
|
||||
};
|
||||
|
||||
#define TGSI_EXEC_NUM_TEMPS 128
|
||||
|
||||
Reference in New Issue
Block a user