dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component16,Fail
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component24,Fail
dEQP-GLES3.functional.fbo.msaa.4_samples.depth_component32f,Fail
-dEQP-GLES3.functional.fbo.msaa.4_samples.rg32f,Fail
-dEQP-GLES3.functional.fbo.msaa.4_samples.rgba16f,Fail
-dEQP-GLES3.functional.fbo.msaa.4_samples.rgba32f,Fail
dEQP-GLES3.functional.fbo.msaa.4_samples.stencil_index8,Fail
dEQP-GLES2.functional.shaders.indexing.tmp_array.float_const_write_dynamic_loop_read_fragment,Crash
dEQP-GLES2.functional.shaders.indexing.tmp_array.float_const_write_dynamic_loop_read_vertex,Crash
unsigned logicop_enable : 1;
unsigned logicop_func:4;
+ /* Number of samples */
+ unsigned nr_samples : 5;
+
struct pipe_rt_blend_state equation;
};
struct panfrost_blend_shader *
panfrost_get_blend_shader(struct panfrost_context *ctx,
struct panfrost_blend_state *blend,
- enum pipe_format fmt,
+ enum pipe_format fmt, unsigned nr_samples,
unsigned rt,
const float *constants);
struct panfrost_blend_shader *
panfrost_get_blend_shader(struct panfrost_context *ctx,
struct panfrost_blend_state *blend,
- enum pipe_format fmt,
+ enum pipe_format fmt, unsigned nr_samples,
unsigned rt,
const float *constants)
{
struct panfrost_blend_shader_key key = {
.rt = rt,
.format = fmt,
+ .nr_samples = MAX2(nr_samples, 1),
.has_constants = constants != NULL,
.logicop_enable = blend->base.logicop_enable,
};
}
}
+ unsigned nr_samples = fb->cbufs[rti]->nr_samples ? :
+ fb->cbufs[rti]->texture->nr_samples;
+
/* Otherwise, we need to grab a shader */
struct panfrost_blend_shader *shader =
- panfrost_get_blend_shader(ctx, blend, fmt, rti,
+ panfrost_get_blend_shader(ctx, blend, fmt, nr_samples, rti,
rt->constant_mask ?
ctx->blend_color.color : NULL);
.gpu_id = dev->gpu_id,
.is_blend = true,
.blend.rt = shader->key.rt,
+ .blend.nr_samples = shader->key.nr_samples,
.rt_formats = {shader->key.format},
};
if (loc >= FRAG_RESULT_DATA0 && !panfrost_can_fixed_blend(rsrc->base.format)) {
struct panfrost_blend_shader *b =
panfrost_get_blend_shader(batch->ctx, batch->ctx->blit_blend,
- rsrc->base.format, loc - FRAG_RESULT_DATA0,
+ rsrc->base.format,
+ rsrc->base.nr_samples,
+ loc - FRAG_RESULT_DATA0,
NULL);
struct panfrost_bo *bo = panfrost_batch_create_bo(batch, b->size,