r200: Fix texture format regression on big endian systems.
See https://bugs.freedesktop.org/show_bug.cgi?id=13324 . Also use tx_table_be for VALID_FORMAT, in case r200SetTexImages ever gets called for MESA_FORMAT_RGB888.
This commit is contained in:
@@ -71,7 +71,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
#define _INVALID(f) \
|
#define _INVALID(f) \
|
||||||
[ MESA_FORMAT_ ## f ] = { 0xffffffff, 0 }
|
[ MESA_FORMAT_ ## f ] = { 0xffffffff, 0 }
|
||||||
#define VALID_FORMAT(f) ( ((f) <= MESA_FORMAT_RGBA_DXT5) \
|
#define VALID_FORMAT(f) ( ((f) <= MESA_FORMAT_RGBA_DXT5) \
|
||||||
&& (tx_table_le[f].format != 0xffffffff) )
|
&& (tx_table_be[f].format != 0xffffffff) )
|
||||||
|
|
||||||
struct tx_table {
|
struct tx_table {
|
||||||
GLuint format, filter;
|
GLuint format, filter;
|
||||||
@@ -164,12 +164,15 @@ static void r200SetTexImages( r200ContextPtr rmesa,
|
|||||||
*/
|
*/
|
||||||
if ( !t->image_override ) {
|
if ( !t->image_override ) {
|
||||||
if ( VALID_FORMAT( baseImage->TexFormat->MesaFormat ) ) {
|
if ( VALID_FORMAT( baseImage->TexFormat->MesaFormat ) ) {
|
||||||
|
const struct tx_table *table = _mesa_little_endian() ? tx_table_le :
|
||||||
|
tx_table_be;
|
||||||
|
|
||||||
t->pp_txformat &= ~(R200_TXFORMAT_FORMAT_MASK |
|
t->pp_txformat &= ~(R200_TXFORMAT_FORMAT_MASK |
|
||||||
R200_TXFORMAT_ALPHA_IN_MAP);
|
R200_TXFORMAT_ALPHA_IN_MAP);
|
||||||
t->pp_txfilter &= ~R200_YUV_TO_RGB;
|
t->pp_txfilter &= ~R200_YUV_TO_RGB;
|
||||||
|
|
||||||
t->pp_txformat |= tx_table_le[ baseImage->TexFormat->MesaFormat ].format;
|
t->pp_txformat |= table[ baseImage->TexFormat->MesaFormat ].format;
|
||||||
t->pp_txfilter |= tx_table_le[ baseImage->TexFormat->MesaFormat ].filter;
|
t->pp_txfilter |= table[ baseImage->TexFormat->MesaFormat ].filter;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
_mesa_problem(NULL, "unexpected texture format in %s", __FUNCTION__);
|
_mesa_problem(NULL, "unexpected texture format in %s", __FUNCTION__);
|
||||||
|
Reference in New Issue
Block a user