mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-11 10:10:14 +01:00
pan/bi: Add texture operator descriptor
Used to encode all the different texture modes. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7081>
This commit is contained in:
parent
d99df25d5d
commit
dcce3feb79
1 changed files with 136 additions and 0 deletions
|
|
@ -402,4 +402,140 @@ static const struct bifrost_reg_ctrl_23 bifrost_reg_ctrl_lut[32] = {
|
|||
[BIFROST_IDLE] = { BIFROST_OP_IDLE, BIFROST_OP_IDLE, true },
|
||||
};
|
||||
|
||||
/* Texture operator descriptors in various states. Usually packed in the
|
||||
* compiler and stored as a constant */
|
||||
|
||||
enum bifrost_index {
|
||||
/* Both texture/sampler index immediate */
|
||||
BIFROST_INDEX_IMMEDIATE_SHARED = 0,
|
||||
|
||||
/* Sampler index immediate, texture index from staging */
|
||||
BIFROST_INDEX_IMMEDIATE_SAMPLER = 1,
|
||||
|
||||
/* Texture index immediate, sampler index from staging */
|
||||
BIFROST_INDEX_IMMEDIATE_TEXTURE = 2,
|
||||
|
||||
/* Both indices from (separate) staging registers */
|
||||
BIFROST_INDEX_REGISTER = 3,
|
||||
};
|
||||
|
||||
enum bifrost_tex_op {
|
||||
/* Given explicit derivatives, compute a gradient descriptor */
|
||||
BIFROST_TEX_OP_GRDESC_DER = 4,
|
||||
|
||||
/* Given implicit derivatives (texture coordinates in a fragment
|
||||
* shader), compute a gradient descriptor */
|
||||
BIFROST_TEX_OP_GRDESC = 5,
|
||||
|
||||
/* Fetch a texel. Takes a staging register with LOD level / face index
|
||||
* packed 16:16 */
|
||||
BIFROST_TEX_OP_FETCH = 6,
|
||||
|
||||
/* Filtered texture */
|
||||
BIFROST_TEX_OP_TEX = 7,
|
||||
};
|
||||
|
||||
enum bifrost_lod_mode {
|
||||
/* Takes two staging registers forming a 64-bit gradient descriptor
|
||||
* (computed by a previous GRDESC or GRDESC_DER operation) */
|
||||
BIFROST_LOD_MODE_GRDESC = 3,
|
||||
|
||||
/* Take a staging register with 8:8 fixed-point in bottom 16-bits
|
||||
* specifying an explicit LOD */
|
||||
BIFROST_LOD_MODE_EXPLICIT = 4,
|
||||
|
||||
/* Takes a staging register with bottom 16-bits as 8:8 fixed-point LOD
|
||||
* bias and top 16-bit as 8:8 fixed-point lower bound (generally left
|
||||
* zero), added and clamped to a computed LOD */
|
||||
BIFROST_LOD_MODE_BIAS = 5,
|
||||
|
||||
/* Set LOD to zero */
|
||||
BIFROST_LOD_MODE_ZERO = 6,
|
||||
|
||||
/* Compute LOD */
|
||||
BIFROST_LOD_MODE_COMPUTE = 7,
|
||||
};
|
||||
|
||||
enum bifrost_texture_format {
|
||||
/* 16-bit floating point, with optional clamping */
|
||||
BIFROST_TEXTURE_FORMAT_F16 = 0,
|
||||
BIFROST_TEXTURE_FORMAT_F16_POS = 1,
|
||||
BIFROST_TEXTURE_FORMAT_F16_PM1 = 2,
|
||||
BIFROST_TEXTURE_FORMAT_F16_1 = 3,
|
||||
|
||||
/* 32-bit floating point, with optional clamping */
|
||||
BIFROST_TEXTURE_FORMAT_F32 = 4,
|
||||
BIFROST_TEXTURE_FORMAT_F32_POS = 5,
|
||||
BIFROST_TEXTURE_FORMAT_F32_PM1 = 6,
|
||||
BIFROST_TEXTURE_FORMAT_F32_1 = 7,
|
||||
};
|
||||
|
||||
enum bifrost_texture_format_full {
|
||||
/* Transclude bifrost_texture_format from above */
|
||||
|
||||
/* Integers, unclamped */
|
||||
BIFROST_TEXTURE_FORMAT_U16 = 12,
|
||||
BIFROST_TEXTURE_FORMAT_S16 = 13,
|
||||
BIFROST_TEXTURE_FORMAT_U32 = 14,
|
||||
BIFROST_TEXTURE_FORMAT_S32 = 15,
|
||||
};
|
||||
|
||||
enum bifrost_texture_fetch {
|
||||
/* Default texelFetch */
|
||||
BIFROST_TEXTURE_FETCH_TEXEL = 1,
|
||||
|
||||
/* Deprecated, fetches 4x U32 of a U8 x 4 texture. Do not use. */
|
||||
BIFROST_TEXTURE_FETCH_GATHER4_RGBA = 3,
|
||||
|
||||
/* Gathers */
|
||||
BIFROST_TEXTURE_FETCH_GATHER4_R = 4,
|
||||
BIFROST_TEXTURE_FETCH_GATHER4_G = 5,
|
||||
BIFROST_TEXTURE_FETCH_GATHER4_B = 6,
|
||||
BIFROST_TEXTURE_FETCH_GATHER4_A = 7
|
||||
};
|
||||
|
||||
struct bifrost_texture_operation {
|
||||
/* If immediate_indices is set:
|
||||
* - immediate sampler index
|
||||
* - index used as texture index
|
||||
* Otherwise:
|
||||
* - bifrost_single_index in lower 2 bits
|
||||
* - 0x3 in upper 2 bits (single-texturing)
|
||||
*/
|
||||
unsigned sampler_index_or_mode : 4;
|
||||
unsigned index : 7;
|
||||
bool immediate_indices : 1;
|
||||
enum bifrost_tex_op op : 3;
|
||||
|
||||
/* If set for TEX/FETCH, loads texel offsets and multisample index from
|
||||
* a staging register containing offset_x:offset_y:offset_z:ms_index
|
||||
* packed 8:8:8:8. Offsets must be in [-31, +31]. If set for
|
||||
* GRDESC(_DER), disable LOD bias. */
|
||||
bool offset_or_bias_disable : 1;
|
||||
|
||||
/* If set for TEX/FETCH, loads fp32 shadow comparison value from a
|
||||
* staging register. Implies fetch_component = gather4_r. If set for
|
||||
* GRDESC(_DER), disables LOD clamping. */
|
||||
bool shadow_or_clamp_disable : 1;
|
||||
|
||||
/* If set, loads an uint32 array index from a staging register. */
|
||||
bool array : 1;
|
||||
|
||||
/* Texture dimension, or 0 for a cubemap */
|
||||
unsigned dimension : 2;
|
||||
|
||||
/* Method to compute LOD value */
|
||||
enum bifrost_lod_mode lod_mode : 3;
|
||||
|
||||
/* Reserved */
|
||||
unsigned zero : 1;
|
||||
|
||||
/* Register format for the result or for a FETCH, the
|
||||
* bifrost_texture_fetch component specification */
|
||||
enum bifrost_texture_format_full format_or_fetch : 4;
|
||||
|
||||
/* Write mask for the result */
|
||||
unsigned mask : 4;
|
||||
} __attribute__((packed));
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue