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
This commit is contained in:
parent
73ec70bf13
commit
a266f78741
|
@ -69,6 +69,29 @@
|
||||||
<value name="TRIANGLE_FAN_TF" value="22"/>
|
<value name="TRIANGLE_FAN_TF" value="22"/>
|
||||||
</enum>
|
</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="0" name="Halt"/>
|
||||||
<packet code="1" name="NOP"/>
|
<packet code="1" name="NOP"/>
|
||||||
<packet code="4" name="Flush"/>
|
<packet code="4" name="Flush"/>
|
||||||
|
@ -836,8 +859,7 @@
|
||||||
|
|
||||||
<field name="Texture base pointer" size="30" start="2" type="address"/>
|
<field name="Texture base pointer" size="30" start="2" type="address"/>
|
||||||
|
|
||||||
<field name="Minification Filter" size="3" start="1" type="uint"/>
|
<field name="Filter" size="4" start="0" type="TMU Filter"/>
|
||||||
<field name="Magnification Filter" size="1" start="0" type="uint"/>
|
|
||||||
</struct>
|
</struct>
|
||||||
|
|
||||||
<enum name="Texture Data Formats">
|
<enum name="Texture Data Formats">
|
||||||
|
|
|
@ -149,20 +149,22 @@ emit_one_texture(struct vc5_context *vc5, struct vc5_texture_stateobj *stage_tex
|
||||||
mag_img_filter = PIPE_TEX_FILTER_NEAREST;
|
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) {
|
switch (min_mip_filter) {
|
||||||
case PIPE_TEX_MIPFILTER_NONE:
|
case PIPE_TEX_MIPFILTER_NONE:
|
||||||
unpacked.minification_filter = 0 + min_nearest;
|
unpacked.filter += min_nearest ? 2 : 0;
|
||||||
break;
|
break;
|
||||||
case PIPE_TEX_MIPFILTER_NEAREST:
|
case PIPE_TEX_MIPFILTER_NEAREST:
|
||||||
unpacked.minification_filter = 2 + !min_nearest;
|
unpacked.filter += min_nearest ? 4 : 8;
|
||||||
break;
|
break;
|
||||||
case PIPE_TEX_MIPFILTER_LINEAR:
|
case PIPE_TEX_MIPFILTER_LINEAR:
|
||||||
unpacked.minification_filter = 4 + !min_nearest;
|
unpacked.filter += min_nearest ? 4 : 8;
|
||||||
|
unpacked.filter += 2;
|
||||||
break;
|
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)];
|
uint8_t packed[cl_packet_length(TEXTURE_SHADER_STATE)];
|
||||||
cl_packet_pack(TEXTURE_SHADER_STATE)(&job->indirect, packed, &unpacked);
|
cl_packet_pack(TEXTURE_SHADER_STATE)(&job->indirect, packed, &unpacked);
|
||||||
|
|
Loading…
Reference in New Issue