vrend: check info formats in blits

Closes #141
Closes #142

v2 : drop colon in error description (Emil)

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
macos/master
Gert Wollny 5 years ago
parent 95e4af9f4d
commit 24f67de7a9
  1. 1
      src/virgl_hw.h
  2. 11
      src/vrend_renderer.c

@ -426,6 +426,7 @@ enum virgl_ctx_errors {
VIRGL_ERROR_CTX_ILLEGAL_CMD_BUFFER, VIRGL_ERROR_CTX_ILLEGAL_CMD_BUFFER,
VIRGL_ERROR_CTX_GLES_HAVE_TES_BUT_MISS_TCS, VIRGL_ERROR_CTX_GLES_HAVE_TES_BUT_MISS_TCS,
VIRGL_ERROR_GL_ANY_SAMPLES_PASSED, VIRGL_ERROR_GL_ANY_SAMPLES_PASSED,
VIRGL_ERROR_CTX_ILLEGAL_FORMAT,
}; };
#define VIRGL_RESOURCE_Y_0_TOP (1 << 0) #define VIRGL_RESOURCE_Y_0_TOP (1 << 0)

@ -758,6 +758,7 @@ static const char *vrend_ctx_error_strings[] = {
[VIRGL_ERROR_CTX_ILLEGAL_CMD_BUFFER] = "Illegal command buffer", [VIRGL_ERROR_CTX_ILLEGAL_CMD_BUFFER] = "Illegal command buffer",
[VIRGL_ERROR_CTX_GLES_HAVE_TES_BUT_MISS_TCS] = "On GLES context and shader program has tesselation evaluation shader but no tesselation control shader", [VIRGL_ERROR_CTX_GLES_HAVE_TES_BUT_MISS_TCS] = "On GLES context and shader program has tesselation evaluation shader but no tesselation control shader",
[VIRGL_ERROR_GL_ANY_SAMPLES_PASSED] = "Query for ANY_SAMPLES_PASSED not supported", [VIRGL_ERROR_GL_ANY_SAMPLES_PASSED] = "Query for ANY_SAMPLES_PASSED not supported",
[VIRGL_ERROR_CTX_ILLEGAL_FORMAT] = "Illegal format ID",
}; };
static void __report_context_error(const char *fname, struct vrend_context *ctx, static void __report_context_error(const char *fname, struct vrend_context *ctx,
@ -8492,6 +8493,16 @@ void vrend_renderer_blit(struct vrend_context *ctx,
if (ctx->in_error) if (ctx->in_error)
return; return;
if (!info->src.format || (enum virgl_formats)info->src.format >= VIRGL_FORMAT_MAX) {
report_context_error(ctx, VIRGL_ERROR_CTX_ILLEGAL_FORMAT, info->src.format);
return;
}
if (!info->dst.format || (enum virgl_formats)info->dst.format >= VIRGL_FORMAT_MAX) {
report_context_error(ctx, VIRGL_ERROR_CTX_ILLEGAL_FORMAT, info->dst.format);
return;
}
if (info->render_condition_enable == false) if (info->render_condition_enable == false)
vrend_pause_render_condition(ctx, true); vrend_pause_render_condition(ctx, true);

Loading…
Cancel
Save