* Use the staging texture for uploads if the underlying BO
* is busy.
*/
- if (!rtex->surface.is_linear)
+ /* TODO: Linear CPU mipmap addressing is broken on GFX9: */
+ if (!rtex->surface.is_linear ||
+ (rctx->chip_class == GFX9 && level))
use_staging_texture = true;
else if (usage & PIPE_TRANSFER_READ)
use_staging_texture =
if (rctx->render_cond)
return;
+ /* TODO: fix CMASK and DCC fast clear */
+ if (rctx->chip_class >= GFX9)
+ return;
+
for (i = 0; i < fb->nr_cbufs; i++) {
struct r600_texture *tex;
unsigned clear_bit = PIPE_CLEAR_COLOR0 << i;
* The sample index should be adjusted as follows:
* sample_index = (fmask >> (sample_index * 4)) & 0xF;
*/
- if (target == TGSI_TEXTURE_2D_MSAA ||
- target == TGSI_TEXTURE_2D_ARRAY_MSAA) {
+ if (ctx->screen->b.chip_class <= VI && /* TODO: fix FMASK on GFX9 */
+ (target == TGSI_TEXTURE_2D_MSAA ||
+ target == TGSI_TEXTURE_2D_ARRAY_MSAA)) {
struct lp_build_context *uint_bld = &bld_base->uint_bld;
struct lp_build_emit_data txf_emit_data = *emit_data;
LLVMValueRef txf_address[4];
*
* LLVM 3.8 crashes with this.
*/
- if (HAVE_LLVM >= 0x0309 && array_size > 16) {
+ if ((HAVE_LLVM >= 0x0309 && array_size > 16) ||
+ /* TODO: VGPR indexing is buggy on GFX9. */
+ ctx->screen->b.chip_class == GFX9) {
array_alloca = LLVMBuildAlloca(builder,
LLVMArrayType(bld_base->base.vec_type,
array_size), "array");
S_028C74_NUM_FRAGMENTS(log_samples);
if (rtex->fmask.size) {
- color_info |= S_028C70_COMPRESSION(1);
+ /* TODO: fix FMASK on GFX9: */
+ color_info |= S_028C70_COMPRESSION(sctx->b.chip_class <= VI);
unsigned fmask_bankh = util_logbase2(rtex->fmask.bank_height);
if (sctx->b.chip_class == SI) {