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