tgsi: add support for 1D/2D texture arrays
This commit is contained in:
@@ -158,7 +158,9 @@ tgsi_texture_names[TGSI_TEXTURE_COUNT] =
|
|||||||
"RECT",
|
"RECT",
|
||||||
"SHADOW1D",
|
"SHADOW1D",
|
||||||
"SHADOW2D",
|
"SHADOW2D",
|
||||||
"SHADOWRECT"
|
"SHADOWRECT",
|
||||||
|
"1DARRAY",
|
||||||
|
"2DARRAY"
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *tgsi_property_names[TGSI_PROPERTY_COUNT] =
|
const char *tgsi_property_names[TGSI_PROPERTY_COUNT] =
|
||||||
|
@@ -1750,6 +1750,36 @@ exec_tex(struct tgsi_exec_machine *mach,
|
|||||||
&r[0], &r[1], &r[2], &r[3]); /* outputs */
|
&r[0], &r[1], &r[2], &r[3]); /* outputs */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TGSI_TEXTURE_1D_ARRAY:
|
||||||
|
FETCH(&r[0], 0, CHAN_X);
|
||||||
|
FETCH(&r[1], 0, CHAN_Y);
|
||||||
|
|
||||||
|
if (modifier == TEX_MODIFIER_PROJECTED) {
|
||||||
|
micro_div(&r[0], &r[0], &r[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch_texel(mach->Samplers[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_2D_ARRAY:
|
||||||
|
FETCH(&r[0], 0, CHAN_X);
|
||||||
|
FETCH(&r[1], 0, CHAN_Y);
|
||||||
|
FETCH(&r[2], 0, CHAN_Z);
|
||||||
|
|
||||||
|
if (modifier == TEX_MODIFIER_PROJECTED) {
|
||||||
|
micro_div(&r[0], &r[0], &r[3]);
|
||||||
|
micro_div(&r[1], &r[1], &r[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch_texel(mach->Samplers[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:
|
case TGSI_TEXTURE_3D:
|
||||||
case TGSI_TEXTURE_CUBE:
|
case TGSI_TEXTURE_CUBE:
|
||||||
FETCH(&r[0], 0, CHAN_X);
|
FETCH(&r[0], 0, CHAN_X);
|
||||||
|
@@ -280,7 +280,12 @@ tgsi_util_get_inst_usage_mask(const struct tgsi_full_instruction *inst,
|
|||||||
case TGSI_TEXTURE_CUBE:
|
case TGSI_TEXTURE_CUBE:
|
||||||
read_mask = TGSI_WRITEMASK_XYZ;
|
read_mask = TGSI_WRITEMASK_XYZ;
|
||||||
break;
|
break;
|
||||||
|
case TGSI_TEXTURE_1D_ARRAY:
|
||||||
|
read_mask = TGSI_WRITEMASK_XY;
|
||||||
|
break;
|
||||||
|
case TGSI_TEXTURE_2D_ARRAY:
|
||||||
|
read_mask = TGSI_WRITEMASK_XYZ;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
read_mask = 0;
|
read_mask = 0;
|
||||||
|
@@ -430,7 +430,9 @@ struct tgsi_instruction_label
|
|||||||
#define TGSI_TEXTURE_SHADOW1D 6
|
#define TGSI_TEXTURE_SHADOW1D 6
|
||||||
#define TGSI_TEXTURE_SHADOW2D 7
|
#define TGSI_TEXTURE_SHADOW2D 7
|
||||||
#define TGSI_TEXTURE_SHADOWRECT 8
|
#define TGSI_TEXTURE_SHADOWRECT 8
|
||||||
#define TGSI_TEXTURE_COUNT 9
|
#define TGSI_TEXTURE_1D_ARRAY 9
|
||||||
|
#define TGSI_TEXTURE_2D_ARRAY 10
|
||||||
|
#define TGSI_TEXTURE_COUNT 11
|
||||||
|
|
||||||
struct tgsi_instruction_texture
|
struct tgsi_instruction_texture
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user