Mesa (master): etnaviv: tell the truth if alpha-test is supported

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Apr 8 19:32:09 UTC 2021


Module: Mesa
Branch: master
Commit: 663272c4dabcee276eecca972eecefcb62a1f13a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=663272c4dabcee276eecca972eecefcb62a1f13a

Author: Christian Gmeiner <christian.gmeiner at gmail.com>
Date:   Fri Mar 12 09:18:51 2021 +0100

etnaviv: tell the truth if alpha-test is supported

GPUs with the feature bit PE_NO_ALPHA_TEST set have no fixed-function
alpha test unit and we want to let st lower it with a shader variant.

For GC7000K this fixes all fbo-alphatest-formats piglits like:
 spec at ext_framebuffer_object@fbo-alphatest-formats
 spec at ext_packed_float@fbo-alphatest-formats
 spec at ext_texture_srgb@fbo-alphatest-formats

This only works with the NIR compiler backend.

Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
Tested-by: Lukas F. Hartmann <lukas at mntmn.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9871>

---

 src/etnaviv/drm/etnaviv_drmif.h              |  1 +
 src/etnaviv/drm/etnaviv_gpu.c                |  3 +++
 src/gallium/drivers/etnaviv/etnaviv_screen.c | 12 ++++++++++++
 src/gallium/drivers/etnaviv/etnaviv_screen.h |  1 +
 4 files changed, 17 insertions(+)

diff --git a/src/etnaviv/drm/etnaviv_drmif.h b/src/etnaviv/drm/etnaviv_drmif.h
index 867d22d09f9..00cf651816e 100644
--- a/src/etnaviv/drm/etnaviv_drmif.h
+++ b/src/etnaviv/drm/etnaviv_drmif.h
@@ -58,6 +58,7 @@ enum etna_param_id {
 	ETNA_GPU_FEATURES_5                = 0x8,
 	ETNA_GPU_FEATURES_6                = 0x9,
 	ETNA_GPU_FEATURES_7                = 0xa,
+	ETNA_GPU_FEATURES_8                = 0xb,
 
 	ETNA_GPU_STREAM_COUNT              = 0x10,
 	ETNA_GPU_REGISTER_MAX              = 0x11,
diff --git a/src/etnaviv/drm/etnaviv_gpu.c b/src/etnaviv/drm/etnaviv_gpu.c
index 81d6f821677..48a22b0ea5c 100644
--- a/src/etnaviv/drm/etnaviv_gpu.c
+++ b/src/etnaviv/drm/etnaviv_gpu.c
@@ -115,6 +115,9 @@ int etna_gpu_get_param(struct etna_gpu *gpu, enum etna_param_id param,
 	case ETNA_GPU_FEATURES_7:
 		*value = get_param(dev, core, ETNAVIV_PARAM_GPU_FEATURES_7);
 		return 0;
+	case ETNA_GPU_FEATURES_8:
+		*value = get_param(dev, core, ETNAVIV_PARAM_GPU_FEATURES_8);
+		return 0;
 	case ETNA_GPU_STREAM_COUNT:
 		*value = get_param(dev, core, ETNA_GPU_STREAM_COUNT);
 		return 0;
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c
index 66951839017..1bd648805da 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
@@ -180,6 +180,12 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
       return VIV_FEATURE(screen, chipMinorFeatures1, HALTI0);
 
+   case PIPE_CAP_ALPHA_TEST:
+      if (DBG_ENABLED(ETNA_DBG_NIR))
+         return !VIV_FEATURE(screen, chipMinorFeatures7, PE_NO_ALPHA_TEST);
+      else
+         return 1;
+
    /* Unsupported features. */
    case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
    case PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY:
@@ -1033,6 +1039,12 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu,
    }
    screen->features[7] = val;
 
+   if (etna_gpu_get_param(screen->gpu, ETNA_GPU_FEATURES_8, &val)) {
+      DBG("could not get ETNA_GPU_FEATURES_8");
+      goto fail;
+   }
+   screen->features[8] = val;
+
    if (!etna_get_specs(screen))
       goto fail;
 
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.h b/src/gallium/drivers/etnaviv/etnaviv_screen.h
index 62c714009d6..eeac8b743ed 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.h
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.h
@@ -52,6 +52,7 @@ enum viv_features_word {
    viv_chipMinorFeatures4 = 5,
    viv_chipMinorFeatures5 = 6,
    viv_chipMinorFeatures6 = 7,
+   viv_chipMinorFeatures7 = 8,
    VIV_FEATURES_WORD_COUNT /* Must be last */
 };
 



More information about the mesa-commit mailing list