Am 25.11.2013 11:41, schrieb Dave Airlie: > From: Dave Airlie <airl...@redhat.com> > > We've talked in the past about just faking multisample support > in the sw drivers as much as we possibly can, this just adds enough > to llvmpipe to do that. > > It produces some valid fails in piglit, like the accuracy tests > and the texelFetch tests fail due to lack of second texel, > > Some fails we might be able to mitigate but not sure what we'd gain, > like alpha-to-one. > > Some of the format tests fail so could do with more investigation. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 7 ++++++- > src/gallium/drivers/llvmpipe/lp_screen.c | 4 ++-- > src/gallium/drivers/llvmpipe/lp_surface.c | 8 -------- > 3 files changed, 8 insertions(+), 11 deletions(-) > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c > b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c > index 6d8dc8c..b732b72 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c > @@ -1920,11 +1920,13 @@ emit_sample(struct lp_build_tgsi_soa_context *bld, > num_derivs = 1; > break; > case TGSI_TEXTURE_2D: > + case TGSI_TEXTURE_2D_MSAA: > case TGSI_TEXTURE_RECT: > num_offsets = 2; > num_derivs = 2; > break; > case TGSI_TEXTURE_2D_ARRAY: > + case TGSI_TEXTURE_2D_ARRAY_MSAA: > layer_coord = 2; > num_offsets = 2; > num_derivs = 2; > @@ -2088,10 +2090,12 @@ emit_fetch_texels( struct lp_build_tgsi_soa_context > *bld, > dims = 1; > break; > case TGSI_TEXTURE_2D: > + case TGSI_TEXTURE_2D_MSAA: > case TGSI_TEXTURE_RECT: > dims = 2; > break; > case TGSI_TEXTURE_2D_ARRAY: > + case TGSI_TEXTURE_2D_ARRAY_MSAA: > layer_coord = 2; > dims = 2; > break; > @@ -2104,7 +2108,8 @@ emit_fetch_texels( struct lp_build_tgsi_soa_context > *bld, > } > > /* always have lod except for buffers ? */ > - if (target != TGSI_TEXTURE_BUFFER) { > + if (target != TGSI_TEXTURE_BUFFER && target != TGSI_TEXTURE_2D_MSAA && > + target != TGSI_TEXTURE_2D_ARRAY_MSAA) { > explicit_lod = lp_build_emit_fetch(&bld->bld_base, inst, 0, 3); > lod_property = lp_build_lod_property(&bld->bld_base, inst, 0); > } > diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c > b/src/gallium/drivers/llvmpipe/lp_screen.c > index f61df98..34d536b 100644 > --- a/src/gallium/drivers/llvmpipe/lp_screen.c > +++ b/src/gallium/drivers/llvmpipe/lp_screen.c > @@ -218,11 +218,11 @@ llvmpipe_get_param(struct pipe_screen *screen, enum > pipe_cap param) > case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: > return 16; > case PIPE_CAP_START_INSTANCE: > - case PIPE_CAP_TEXTURE_MULTISAMPLE: > case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT: > case PIPE_CAP_CUBE_MAP_ARRAY: > return 0; > case PIPE_CAP_TEXTURE_BUFFER_OBJECTS: > + case PIPE_CAP_TEXTURE_MULTISAMPLE: > return 1; > case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE: > return 65536; > @@ -327,7 +327,7 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen, > target == PIPE_TEXTURE_3D || > target == PIPE_TEXTURE_CUBE); > > - if (sample_count > 1) > + if (sample_count > 4) > return FALSE; > > if (bind & PIPE_BIND_RENDER_TARGET) { > diff --git a/src/gallium/drivers/llvmpipe/lp_surface.c > b/src/gallium/drivers/llvmpipe/lp_surface.c > index f033c46..5c059d7 100644 > --- a/src/gallium/drivers/llvmpipe/lp_surface.c > +++ b/src/gallium/drivers/llvmpipe/lp_surface.c > @@ -180,14 +180,6 @@ static void lp_blit(struct pipe_context *pipe, > struct llvmpipe_context *lp = llvmpipe_context(pipe); > struct pipe_blit_info info = *blit_info; > > - if (info.src.resource->nr_samples > 1 && > - info.dst.resource->nr_samples <= 1 && > - !util_format_is_depth_or_stencil(info.src.resource->format) && > - !util_format_is_pure_integer(info.src.resource->format)) { > - debug_printf("llvmpipe: color resolve unimplemented\n"); > - return; > - } > - > if (util_try_blit_via_copy_region(pipe, &info)) { > return; /* done */ > } >
I think some switch statements inside the sampling code would need updates too, I don't think the two new cases are handled appropriately everywhere. Though actually I was thinking more about wrongly advertizing GL 3.0 (or 3.1 or whatever) and still just sample count of 1 rather than faking 4 samples support. Seemed like a neater hack. Roland _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev