Depth format cube textures DONE (panfrost)
GLX_ARB_create_context (GLX 1.4 is required) DONE (panfrost, v3d)
Multisample anti-aliasing DONE (freedreno/a5xx+, freedreno (*), llvmpipe (*), softpipe (*), swr (*), panfrost)
- 8 draw buffers DONE ()
+ 8 draw buffers DONE (panfrost/t760+)
(*) freedreno (a2xx-a4xx), llvmpipe, softpipe, and swr have fake Multisample anti-aliasing support
size_t total_sz =
sizeof(struct mali_framebuffer) +
(has_extra ? sizeof(struct mali_framebuffer_extra) : 0) +
- sizeof(struct mali_render_target) * 4;
+ sizeof(struct mali_render_target) * 8;
struct panfrost_transfer m_f_trans =
panfrost_pool_alloc(&batch->pool, total_sz);
if (has_extra)
UPLOAD(m_f_trans, offset, fbx, total_sz);
- for (unsigned c = 0; c < 4; ++c) {
+ for (unsigned c = 0; c < 8; ++c) {
UPLOAD(m_f_trans, offset, &rts[c], total_sz);
}
struct mali_framebuffer fb = panfrost_emit_mfbd(batch, has_draws);
struct mali_framebuffer_extra fbx = {0};
- struct mali_render_target rts[4] = {0};
+ struct mali_render_target rts[8] = {0};
/* We always upload at least one dummy GL_NONE render target */
case PIPE_CAP_MAX_RENDER_TARGETS:
case PIPE_CAP_FBFETCH:
case PIPE_CAP_FBFETCH_COHERENT:
- return has_mrt ? 4 : 1;
+ return has_mrt ? 8 : 1;
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
return 1;
return 16;
case PIPE_SHADER_CAP_MAX_OUTPUTS:
- return shader == PIPE_SHADER_FRAGMENT ? 4 : 16;
+ return shader == PIPE_SHADER_FRAGMENT ? 8 : 16;
case PIPE_SHADER_CAP_MAX_TEMPS:
return 256; /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
u32 zero3;
u16 width2, height2;
u32 unk1 : 19; // = 0x01000
- u32 rt_count_1 : 2; // off-by-one (use MALI_POSITIVE)
- u32 unk2 : 3; // = 0
+ u32 rt_count_1 : 3; // off-by-one (use MALI_POSITIVE)
+ u32 unk2 : 2; // = 0
u32 rt_count_2 : 3; // no off-by-one
u32 zero4 : 5;
/* 0x30 */