diff options
author | Eric Anholt <[email protected]> | 2017-11-02 12:19:10 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2017-11-07 09:40:25 -0800 |
commit | a266f78741bfdf6802b49df77d4611d6084408e9 (patch) | |
tree | c2dacd7f259b047844e25468ad7865b436ce5b91 | |
parent | 73ec70bf13a939e687ddf9c2a7e08962042a09eb (diff) |
broadcom/vc5: Fix mipmap filtering enums.
The ordering of the values was even less obvious than I thought, with both
the mip filter and the min filter being in different bits depending on
whether the mip filter is none.
Fixes piglit fs-textureLod-miplevels.shader_test
-rw-r--r-- | src/broadcom/cle/v3d_packet_v33.xml | 26 | ||||
-rw-r--r-- | src/gallium/drivers/vc5/vc5_emit.c | 14 |
2 files changed, 32 insertions, 8 deletions
diff --git a/src/broadcom/cle/v3d_packet_v33.xml b/src/broadcom/cle/v3d_packet_v33.xml index c5f7a3d2514..2b0665537e8 100644 --- a/src/broadcom/cle/v3d_packet_v33.xml +++ b/src/broadcom/cle/v3d_packet_v33.xml @@ -69,6 +69,29 @@ <value name="TRIANGLE_FAN_TF" value="22"/> </enum> + <enum name="TMU Filter" prefix="V3D_TMU_FILTER"> + <!-- Names are mip filter, min filter, mag filter --> + <value name="MIN_LIN_MIP_NONE_MAG_LIN" value="0"/> + <value name="MIN_LIN_MIP_NONE_MAG_NEAR" value="1"/> + <value name="MIN_NEAR_MIP_NONE_MAG_LIN" value="2"/> + <value name="MIN_NEAR_MIP_NONE_MAG_NEAR" value="3"/> + + <value name="MIN_NEAR_MIP_NEAR_MAG_LIN" value="4"/> + <value name="MIN_NEAR_MIP_NEAR_MAG_NEAR" value="5"/> + <value name="MIN_NEAR_MIP_LIN_MAG_LIN" value="6"/> + <value name="MIN_NEAR_MIP_LIN_MAG_NEAR" value="7"/> + + <value name="MIN_LIN_MIP_NEAR_MAG_LIN" value="8"/> + <value name="MIN_LIN_MIP_NEAR_MAG_NEAR" value="9"/> + <value name="MIN_LIN_MIP_LIN_MAG_LIN" value="10"/> + <value name="MIN_LIN_MIP_LIN_MAG_NEAR" value="11"/> + + <value name="ANISOTROPIC_2_1" value="12"/> + <value name="ANISOTROPIC_4_1" value="13"/> + <value name="ANISOTROPIC_8_1" value="14"/> + <value name="ANISOTROPIC_16_1" value="15"/> + </enum> + <packet code="0" name="Halt"/> <packet code="1" name="NOP"/> <packet code="4" name="Flush"/> @@ -836,8 +859,7 @@ <field name="Texture base pointer" size="30" start="2" type="address"/> - <field name="Minification Filter" size="3" start="1" type="uint"/> - <field name="Magnification Filter" size="1" start="0" type="uint"/> + <field name="Filter" size="4" start="0" type="TMU Filter"/> </struct> <enum name="Texture Data Formats"> diff --git a/src/gallium/drivers/vc5/vc5_emit.c b/src/gallium/drivers/vc5/vc5_emit.c index 8a606c4990a..ea646e7d510 100644 --- a/src/gallium/drivers/vc5/vc5_emit.c +++ b/src/gallium/drivers/vc5/vc5_emit.c @@ -149,20 +149,22 @@ emit_one_texture(struct vc5_context *vc5, struct vc5_texture_stateobj *stage_tex mag_img_filter = PIPE_TEX_FILTER_NEAREST; } - bool min_nearest = (min_img_filter == PIPE_TEX_FILTER_NEAREST); + bool min_nearest = min_img_filter == PIPE_TEX_FILTER_NEAREST; switch (min_mip_filter) { case PIPE_TEX_MIPFILTER_NONE: - unpacked.minification_filter = 0 + min_nearest; + unpacked.filter += min_nearest ? 2 : 0; break; case PIPE_TEX_MIPFILTER_NEAREST: - unpacked.minification_filter = 2 + !min_nearest; + unpacked.filter += min_nearest ? 4 : 8; break; case PIPE_TEX_MIPFILTER_LINEAR: - unpacked.minification_filter = 4 + !min_nearest; + unpacked.filter += min_nearest ? 4 : 8; + unpacked.filter += 2; break; } - unpacked.magnification_filter = (mag_img_filter == - PIPE_TEX_FILTER_NEAREST); + + if (mag_img_filter == PIPE_TEX_FILTER_NEAREST) + unpacked.filter++; uint8_t packed[cl_packet_length(TEXTURE_SHADER_STATE)]; cl_packet_pack(TEXTURE_SHADER_STATE)(&job->indirect, packed, &unpacked); |