[Mesa-dev] [PATCH] isl: render target cube maps should be handled as 2D images, not cubes
Jason Ekstrand
jason at jlekstrand.net
Fri Jan 6 18:24:55 UTC 2017
On Jan 6, 2017 10:18, "Jason Ekstrand" <jason at 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 <jason at jlekstrand.net>
On Jan 6, 2017 05:42, "Iago Toral Quiroga" <itoral at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170106/725e8a8a/attachment.html>
More information about the mesa-dev
mailing list