Mesa (master): virgl: Return an error if we use fp64 on top of GLES
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sat Mar 9 11:04:26 UTC 2019
Module: Mesa
Branch: master
Commit: d7b31969767c0911b490022dc6bb67827e664644
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d7b31969767c0911b490022dc6bb67827e664644
Author: Elie Tournier <tournier.elie at gmail.com>
Date: Fri Feb 15 16:21:42 2019 +0000
virgl: Return an error if we use fp64 on top of GLES
Signed-off-by: Elie Tournier <elie.tournier at collabora.com>
Reviewed-by: <Gurchetan Singh gurchetansingh at chromium.org>
---
src/gallium/drivers/virgl/virgl_tgsi.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/gallium/drivers/virgl/virgl_tgsi.c b/src/gallium/drivers/virgl/virgl_tgsi.c
index d1f785d4d21..7a06a572794 100644
--- a/src/gallium/drivers/virgl/virgl_tgsi.c
+++ b/src/gallium/drivers/virgl/virgl_tgsi.c
@@ -25,13 +25,17 @@
so add a transform stage to remove things we don't want to send unless
the receiver supports it.
*/
+
#include "tgsi/tgsi_transform.h"
+#include "tgsi/tgsi_info.h"
#include "virgl_context.h"
#include "virgl_screen.h"
+
struct virgl_transform_context {
struct tgsi_transform_context base;
bool cull_enabled;
bool has_precise;
+ bool fake_fp64;
};
static void
@@ -78,6 +82,13 @@ virgl_tgsi_transform_instruction(struct tgsi_transform_context *ctx,
struct tgsi_full_instruction *inst)
{
struct virgl_transform_context *vtctx = (struct virgl_transform_context *)ctx;
+ if (vtctx->fake_fp64 &&
+ (tgsi_opcode_infer_src_type(inst->Instruction.Opcode, 0) == TGSI_TYPE_DOUBLE ||
+ tgsi_opcode_infer_dst_type(inst->Instruction.Opcode, 0) == TGSI_TYPE_DOUBLE)) {
+ fprintf(stderr, "ARB_gpu_shader_fp64 is exposed but not supported.");
+ return;
+ }
+
if (!vtctx->has_precise && inst->Instruction.Precise)
inst->Instruction.Precise = 0;
@@ -107,6 +118,8 @@ struct tgsi_token *virgl_tgsi_transform(struct virgl_context *vctx, const struct
transform.base.transform_instruction = virgl_tgsi_transform_instruction;
transform.cull_enabled = vscreen->caps.caps.v1.bset.has_cull;
transform.has_precise = vscreen->caps.caps.v2.capability_bits & VIRGL_CAP_TGSI_PRECISE;
+ transform.fake_fp64 =
+ vscreen->caps.caps.v2.capability_bits & VIRGL_CAP_FAKE_FP64;
tgsi_transform_shader(tokens_in, new_tokens, newLen, &transform.base);
return new_tokens;
More information about the mesa-commit
mailing list