aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/virgl/virgl_encode.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/virgl/virgl_encode.c')
-rw-r--r--src/gallium/drivers/virgl/virgl_encode.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/gallium/drivers/virgl/virgl_encode.c b/src/gallium/drivers/virgl/virgl_encode.c
index c255a1c12e4..292cc2bb0d6 100644
--- a/src/gallium/drivers/virgl/virgl_encode.c
+++ b/src/gallium/drivers/virgl/virgl_encode.c
@@ -579,6 +579,38 @@ int virgl_encode_clear(struct virgl_context *ctx,
return 0;
}
+int virgl_encode_clear_texture(struct virgl_context *ctx,
+ struct virgl_resource *res,
+ unsigned int level,
+ const struct pipe_box *box,
+ const void *data)
+{
+ const struct util_format_description *desc = util_format_description(res->u.b.format);
+ unsigned block_bits = desc->block.bits;
+ uint32_t arr[4] = {0};
+ /* The spec describe <data> as a pointer to an array of between one
+ * and four components of texel data that will be used as the source
+ * for the constant fill value.
+ * Here, we are just copying the memory into <arr>. We do not try to
+ * re-create the data array. The host part will take care of interpreting
+ * the memory and applying the correct format to the clear call.
+ */
+ memcpy(&arr, data, block_bits / 8);
+
+ virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CLEAR_TEXTURE, 0, VIRGL_CLEAR_TEXTURE_SIZE));
+ virgl_encoder_write_res(ctx, res);
+ virgl_encoder_write_dword(ctx->cbuf, level);
+ virgl_encoder_write_dword(ctx->cbuf, box->x);
+ virgl_encoder_write_dword(ctx->cbuf, box->y);
+ virgl_encoder_write_dword(ctx->cbuf, box->z);
+ virgl_encoder_write_dword(ctx->cbuf, box->width);
+ virgl_encoder_write_dword(ctx->cbuf, box->height);
+ virgl_encoder_write_dword(ctx->cbuf, box->depth);
+ for (unsigned i = 0; i < 4; i++)
+ virgl_encoder_write_dword(ctx->cbuf, arr[i]);
+ return 0;
+}
+
int virgl_encoder_set_framebuffer_state(struct virgl_context *ctx,
const struct pipe_framebuffer_state *state)
{