On Jan 6, 2017 10:18, "Jason Ekstrand" <ja...@jlekstrand.net> wrote:
Thanks for catching this. I wonder how I managed to switch the GL driver over to using ISL for emitting surface states without regressing anything... Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net> On Jan 6, 2017 05:42, "Iago Toral Quiroga" <ito...@igalia.com> wrote: > This fixes layered rendering Vulkan CTS tests with cube (arrays). We > also do this in the GL driver, see this code from gen8_depth_state.c > for example: > > case GL_TEXTURE_CUBE_MAP_ARRAY: > case GL_TEXTURE_CUBE_MAP: > /* The PRM claims that we should use BRW_SURFACE_CUBE for this > * situation, but experiments show that gl_Layer doesn't work when we do > * this. So we use BRW_SURFACE_2D, since for rendering purposes this is > * equivalent. > */ > surftype = BRW_SURFACE_2D; > depth *= 6; > break; > > So I guess we simply forgot to port this workaround to Vulkan. > > Fixes: > dEQP-VK.geometry.layered.cube* > --- > > With this (and the previous patch I sent to fix the SBE state packet to not > skip the VUE header when we need the layer information) all the layered > rendering tests in Vulkan CTS seem to pass. > > src/intel/isl/isl_surface_state.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/src/intel/isl/isl_surface_state.c > b/src/intel/isl/isl_surface_state.c > index 3bb0abd..0960a90 100644 > --- a/src/intel/isl/isl_surface_state.c > +++ b/src/intel/isl/isl_surface_state.c > @@ -113,8 +113,9 @@ get_surftype(enum isl_surf_dim dim, > isl_surf_usage_flags_t usage) > assert(!(usage & ISL_SURF_USAGE_CUBE_BIT)); > return SURFTYPE_1D; > case ISL_SURF_DIM_2D: > - if (usage & ISL_SURF_USAGE_STORAGE_BIT) { > - /* Storage images are always plain 2-D, not cube */ > + if ((usage & ISL_SURF_USAGE_STORAGE_BIT) || > + (usage & ISL_SURF_USAGE_RENDER_TARGET_BIT)) { > + /* Storage / Render images are always plain 2-D, not cube */ > return SURFTYPE_2D; > } else if (usage & ISL_SURF_USAGE_CUBE_BIT) { > On second thought... I wonder if the right thing to do here wouldnt be to just change the other condition a bit to if ((usage & ISL_SURF_USAGE_CUBE_BIT) && (usage & ISL_SURF_USAGE_TEXTURE_BIT)) { /* We need SURFTYPE_CUBE to make cube sampling work */ return SURFTYPE_CUBE; } else { /* Everything else (render and storage) treat cubes a plain 2D array textures */ return SURFTYPE_2D; } It seems like textures, and not render targets, are the special case here. return SURFTYPE_CUBE; > -- > 2.7.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev