#define _INVALID(f) \
[ MESA_FORMAT_ ## f ] = { 0xffffffff, 0 }
#define VALID_FORMAT(f) ( ((f) <= MESA_FORMAT_YCBCR_REV) \
- && (tx_table[f].format != 0xffffffff) )
+ && tx_table[f].flag )
+
+#define _ASSIGN(entry, format) \
+ [ MESA_FORMAT_ ## entry ] = { format, 0, 1}
static const struct {
GLuint format, filter;
};
static const struct {
- GLuint format, filter;
+ GLuint format, filter, flag;
} tx_table[] = {
-#ifdef MESA_BIG_ENDIAN
-/*
- * NOTE: As we can't do swapping (RBBM_GUI_CNTL doesn't seems to work
- * on r300) we declare the texture format in swapped form. We
- * should better find a way to ask the hardware to do the swapping.
- * Jerome Glisse
- */
- {R300_EASY_TX_FORMAT(Y, Z, W, X, W8Z8Y8X8), 0},
- {R300_EASY_TX_FORMAT(Z, Y, X, W, W8Z8Y8X8), 0},
- {0xffffff02, 0},
- {0xffffff03, 0},
- {0xffffff04, 0},
- {0xffffff05, 0},
- {0xffffff06, 0},
- {0xffffff07, 0},
- {0xffffff08, 0},
- {0xffffff09, 0},
- {0xffffff10, 0},
- {0xffffff11, 0},
- {R300_EASY_TX_FORMAT(Y, Y, Y, X, Y8X8), 0},
- {0xffffff13, 0},
- {0xffffff14, 0},
- {0xffffff15, 0},
- {0xffffff16, 0},
- {0xffffff17, 0},
- };
-#else
- {R300_EASY_TX_FORMAT(Y, Z, W, X, W8Z8Y8X8), 0},
- {0xffffff01, 0},
- {0xffffff02, 0},
- {0xffffff03, 0},
- {0xffffff04, 0},
- {0xffffff05, 0},
- {R300_EASY_TX_FORMAT(X, Y, Z, ONE, Z5Y6X5), 0},
- {0xffffff07, 0},
- {R300_EASY_TX_FORMAT(Y, Z, W, X, W4Z4Y4X4), 0},
- {0xffffff09, 0},
- {0xffffff10, 0},
- {0xffffff11, 0},
- {R300_EASY_TX_FORMAT(Y, Y, Y, X, Y8X8), 0},
- {0xffffff13, 0},
- {0xffffff14, 0},
- {0xffffff15, 0},
- {0xffffff16, 0},
- {0xffffff17, 0},
+ /*
+ * Note that the _REV formats are the same as the non-REV formats.
+ * This is because the REV and non-REV formats are identical as a
+ * byte string, but differ when accessed as 16-bit or 32-bit words
+ * depending on the endianness of the host. Since the textures are
+ * transferred to the R300 as a byte string (i.e. without any
+ * byte-swapping), the R300 sees the REV and non-REV formats
+ * identically. -- paulus
+ */
+ _ASSIGN(RGBA8888, R300_EASY_TX_FORMAT(Y, Z, W, X, W8Z8Y8X8)),
+ _ASSIGN(RGBA8888_REV, R300_EASY_TX_FORMAT(Y, Z, W, X, W8Z8Y8X8)),
+ _ASSIGN(ARGB8888, R300_EASY_TX_FORMAT(X, Y, Z, W, W8Z8Y8X8)),
+ _ASSIGN(ARGB8888_REV, R300_EASY_TX_FORMAT(X, Y, Z, W, W8Z8Y8X8)),
+ _ASSIGN(RGB888, 0xffffffff),
+ _ASSIGN(RGB565, R300_EASY_TX_FORMAT(X, Y, Z, ONE, Z5Y6X5)),
+ _ASSIGN(RGB565_REV, R300_EASY_TX_FORMAT(X, Y, Z, ONE, Z5Y6X5)),
+ _ASSIGN(ARGB4444, R300_EASY_TX_FORMAT(X, Y, Z, W, W4Z4Y4X4)),
+ _ASSIGN(ARGB4444_REV, R300_EASY_TX_FORMAT(X, Y, Z, W, W4Z4Y4X4)),
+ _ASSIGN(ARGB1555, R300_EASY_TX_FORMAT(Z, Y, X, W, W1Z5Y5X5)),
+ _ASSIGN(ARGB1555_REV, R300_EASY_TX_FORMAT(Z, Y, X, W, W1Z5Y5X5)),
+ _ASSIGN(AL88, R300_EASY_TX_FORMAT(Y, Y, Y, X, Y8X8)),
+ _ASSIGN(AL88_REV, R300_EASY_TX_FORMAT(Y, Y, Y, X, Y8X8)),
+ _ASSIGN(RGB332, R300_EASY_TX_FORMAT(X, Y, Z, ONE, Z3Y3X2)),
+ _ASSIGN(A8, R300_EASY_TX_FORMAT(ZERO, ZERO, ZERO, X, X8)),
+ _ASSIGN(L8, R300_EASY_TX_FORMAT(X, X, X, ONE, X8)),
+ _ASSIGN(I8, R300_EASY_TX_FORMAT(X, X, X, X, X8)),
+ _ASSIGN(CI8, R300_EASY_TX_FORMAT(X, X, X, X, X8)),
+ _ASSIGN(YCBCR, R300_EASY_TX_FORMAT(X, Y, Z, ONE, G8R8_G8B8)|R300_TX_FORMAT_YUV_MODE ),
+ _ASSIGN(YCBCR_REV, R300_EASY_TX_FORMAT(X, Y, Z, ONE, G8R8_G8B8)|R300_TX_FORMAT_YUV_MODE),
};
-#endif
#undef _COLOR
#undef _ALPHA
#undef _INVALID
-
+#undef _ASSIGN
/**
/* Need to load the 2d images associated with this unit.
*/
+ #if 0
if (t->format & R200_TXFORMAT_NON_POWER2) {
t->format &= ~R200_TXFORMAT_NON_POWER2;
t->base.dirty_images[0] = ~0;
}
+ #endif
ASSERT(tObj->Target == GL_TEXTURE_2D || tObj->Target == GL_TEXTURE_1D);
struct gl_texture_object *tObj = texUnit->_Current;
r300TexObjPtr t = (r300TexObjPtr) tObj->DriverData;
+ #if 0
if (!(t->format & R200_TXFORMAT_NON_POWER2)) {
t->format |= R200_TXFORMAT_NON_POWER2;
t->base.dirty_images[0] = ~0;
}
+ #endif
ASSERT(tObj->Target == GL_TEXTURE_RECTANGLE_NV);