From 86ea2bbcf26bc2c4c38a20d0cf985f76cb9c5110 Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Wed, 15 May 2024 23:19:05 +0100 Subject: [PATCH] backend: refine the backend interface Add some const qualifiers to backend arguments that shouldn't be modified. Signed-off-by: Yuxuan Shui --- src/backend/backend.c | 2 +- src/backend/backend.h | 10 +++++----- src/backend/dummy/dummy.c | 4 ++-- src/backend/gl/blur.c | 6 +++--- src/backend/gl/gl_common.c | 9 +++++---- src/backend/gl/gl_common.h | 4 ++-- src/backend/xrender/xrender.c | 4 ++-- src/renderer/renderer.c | 4 ++-- 8 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/backend/backend.c b/src/backend/backend.c index a2bc3cea..3580faa1 100644 --- a/src/backend/backend.c +++ b/src/backend/backend.c @@ -57,7 +57,7 @@ void handle_device_reset(session_t *ps) { /// @param target the image to render into /// @param root_image the image containing the desktop background bool backend_execute(struct backend_base *backend, image_handle target, unsigned ncmds, - struct backend_command cmds[ncmds]) { + const struct backend_command cmds[ncmds]) { bool succeeded = true; for (auto cmd = &cmds[0]; succeeded && cmd != &cmds[ncmds]; cmd++) { switch (cmd->op) { diff --git a/src/backend/backend.h b/src/backend/backend.h index 07b2b468..10bcd143 100644 --- a/src/backend/backend.h +++ b/src/backend/backend.h @@ -95,7 +95,7 @@ struct backend_blur_args { void *blur_context; /// The source mask for the blur operation, may be NULL. Only parts of the source /// image covered by the mask should participate in the blur operation. - struct backend_mask_image *source_mask; + const struct backend_mask_image *source_mask; /// Region of the target image that will be covered by the blur operation, in the /// source image's coordinate. const region_t *target_mask; @@ -111,7 +111,7 @@ struct backend_blit_args { /// Mask for the source image. may be NULL. Only contents covered by the mask /// should participate in the blit operation. This applies to the source image /// before it's scaled. - struct backend_mask_image *source_mask; + const struct backend_mask_image *source_mask; /// Mask for the target image. Only regions of the target image covered by this /// mask should be modified. This is the target's coordinate system. const region_t *target_mask; @@ -267,7 +267,7 @@ struct backend_operations { /// @param args arguments for blit /// @return whether the operation is successful bool (*blit)(struct backend_base *backend_data, ivec2 origin, image_handle target, - struct backend_blit_args *args) attr_nonnull(1, 3, 4); + const struct backend_blit_args *args) attr_nonnull(1, 3, 4); /// Blur a given region of a source image and store the result in the /// target image. @@ -286,7 +286,7 @@ struct backend_operations { /// @param args argument for blur /// @return whether the operation is successful bool (*blur)(struct backend_base *backend_data, ivec2 origin, image_handle target, - struct backend_blur_args *args) attr_nonnull(1, 3, 4); + const struct backend_blur_args *args) attr_nonnull(1, 3, 4); /// Direct copy of pixels from a source image on to the target image. /// This is a simpler version of `blit`, without any effects. Note unlike `blit`, @@ -451,7 +451,7 @@ struct backend_operations { extern struct backend_operations *backend_list[]; bool backend_execute(struct backend_base *backend, image_handle target, unsigned ncmds, - struct backend_command cmds[ncmds]); + const struct backend_command cmds[ncmds]); void log_backend_command_(enum log_level level, const char *func, const struct backend_command *cmd); #define log_backend_command(level, cmd) \ diff --git a/src/backend/dummy/dummy.c b/src/backend/dummy/dummy.c index 8b6a3fea..84d7edcd 100644 --- a/src/backend/dummy/dummy.c +++ b/src/backend/dummy/dummy.c @@ -72,7 +72,7 @@ static void dummy_check_image(struct backend_base *base, image_handle image) { } bool dummy_blit(struct backend_base *base, ivec2 origin attr_unused, image_handle target, - struct backend_blit_args *args) { + const struct backend_blit_args *args) { dummy_check_image(base, target); dummy_check_image(base, args->source_image); if (args->source_mask) { @@ -88,7 +88,7 @@ bool dummy_blit(struct backend_base *base, ivec2 origin attr_unused, image_handl } bool dummy_blur(struct backend_base *base, ivec2 origin attr_unused, image_handle target, - struct backend_blur_args *args) { + const struct backend_blur_args *args) { dummy_check_image(base, target); dummy_check_image(base, args->source_image); if (args->source_mask) { diff --git a/src/backend/gl/blur.c b/src/backend/gl/blur.c index 24157577..b61eaa45 100644 --- a/src/backend/gl/blur.c +++ b/src/backend/gl/blur.c @@ -45,7 +45,7 @@ struct gl_blur_context { * Blur contents in a particular region. */ static bool gl_kernel_blur(double opacity, struct gl_blur_context *bctx, - struct backend_mask_image *mask, const GLuint vao[2], + const struct backend_mask_image *mask, const GLuint vao[2], const int vao_nelems[2], struct gl_texture *source, GLuint blur_sampler, GLuint target_fbo, GLuint default_mask) { int curr = 0; @@ -147,7 +147,7 @@ static bool gl_kernel_blur(double opacity, struct gl_blur_context *bctx, /// [0]: for sampling from blurred result into the target fbo. /// [1]: for sampling from the source texture into blurred textures. bool gl_dual_kawase_blur(double opacity, struct gl_blur_context *bctx, - struct backend_mask_image *mask, const GLuint vao[2], + const struct backend_mask_image *mask, const GLuint vao[2], const int vao_nelems[2], struct gl_texture *source, GLuint blur_sampler, GLuint target_fbo, GLuint default_mask) { int iterations = bctx->blur_texture_count; @@ -313,7 +313,7 @@ gl_blur_context_preallocate_textures(struct gl_blur_context *bctx, ivec2 source_ } bool gl_blur(struct backend_base *base, ivec2 origin, image_handle target_, - struct backend_blur_args *args) { + const struct backend_blur_args *args) { auto gd = (struct gl_data *)base; auto target = (struct gl_texture *)target_; auto source = (struct gl_texture *)args->source_image; diff --git a/src/backend/gl/gl_common.c b/src/backend/gl/gl_common.c index b850c9ce..7d543561 100644 --- a/src/backend/gl/gl_common.c +++ b/src/backend/gl/gl_common.c @@ -522,9 +522,10 @@ static inline void gl_y_flip_texture(int nrects, GLint *coord, GLint texture_hei /// Lower `struct backend_blit_args` into a list of GL coordinates, vertex indices, a /// shader, and uniforms. -static int gl_lower_blit_args(struct gl_data *gd, ivec2 origin, struct backend_blit_args *args, - GLint **coord, GLuint **indices, struct gl_shader **shader, - struct gl_uniform_value *uniforms) { +static int +gl_lower_blit_args(struct gl_data *gd, ivec2 origin, const struct backend_blit_args *args, + GLint **coord, GLuint **indices, struct gl_shader **shader, + struct gl_uniform_value *uniforms) { auto img = (struct gl_texture *)args->source_image; int nrects; const rect_t *rects; @@ -602,7 +603,7 @@ static int gl_lower_blit_args(struct gl_data *gd, ivec2 origin, struct backend_b } bool gl_blit(backend_t *base, ivec2 origin, image_handle target_, - struct backend_blit_args *args) { + const struct backend_blit_args *args) { auto gd = (struct gl_data *)base; auto source = (struct gl_texture *)args->source_image; auto target = (struct gl_texture *)target_; diff --git a/src/backend/gl/gl_common.h b/src/backend/gl/gl_common.h index a7d5db19..3a679c75 100644 --- a/src/backend/gl/gl_common.h +++ b/src/backend/gl/gl_common.h @@ -145,7 +145,7 @@ uint64_t gl_get_shader_attributes(backend_t *backend_data, void *shader); bool gl_last_render_time(backend_t *backend_data, struct timespec *time); bool gl_blit(backend_t *base, ivec2 origin, image_handle target, - struct backend_blit_args *args); + const struct backend_blit_args *args); image_handle gl_new_image(backend_t *backend_data attr_unused, enum backend_image_format format, ivec2 size); bool gl_clear(backend_t *backend_data, image_handle target, struct color color); @@ -164,7 +164,7 @@ xcb_pixmap_t gl_release_image(backend_t *base, image_handle image); image_handle gl_clone(backend_t *base, image_handle image, const region_t *reg_visible); bool gl_blur(struct backend_base *gd, ivec2 origin, image_handle target, - struct backend_blur_args *args); + const struct backend_blur_args *args); bool gl_copy_area(backend_t *backend_data, ivec2 origin, image_handle target, image_handle source, const region_t *region); bool gl_copy_area_quantize(backend_t *backend_data, ivec2 origin, image_handle target_handle, diff --git a/src/backend/xrender/xrender.c b/src/backend/xrender/xrender.c index 41f5af7b..11decd2e 100644 --- a/src/backend/xrender/xrender.c +++ b/src/backend/xrender/xrender.c @@ -267,7 +267,7 @@ xrender_process_mask(struct xrender_data *xd, const struct backend_mask_image *m } static bool xrender_blit(struct backend_base *base, ivec2 origin, - image_handle target_handle, struct backend_blit_args *args) { + image_handle target_handle, const struct backend_blit_args *args) { auto xd = (struct xrender_data *)base; auto inner = (struct xrender_image_data_inner *)args->source_image; auto target = (struct xrender_image_data_inner *)target_handle; @@ -475,7 +475,7 @@ xrender_copy_area(struct backend_base *base, ivec2 origin, image_handle target_h } static bool xrender_blur(struct backend_base *base, ivec2 origin, - image_handle target_handle, struct backend_blur_args *args) { + image_handle target_handle, const struct backend_blur_args *args) { auto bctx = (struct xrender_blur_context *)args->blur_context; auto source_mask = args->source_image ? (struct xrender_image_data_inner *)args->source_mask->image diff --git a/src/renderer/renderer.c b/src/renderer/renderer.c index ce6e7f27..7923d20f 100644 --- a/src/renderer/renderer.c +++ b/src/renderer/renderer.c @@ -430,7 +430,7 @@ static bool renderer_prepare_commands(struct renderer *r, struct backend_base *b !renderer_bind_mask(r, backend, w)) { return false; } - cmd->blit.source_mask->image = w->mask_image; + cmd->source_mask.image = w->mask_image; } break; case BACKEND_COMMAND_BLUR: @@ -441,7 +441,7 @@ static bool renderer_prepare_commands(struct renderer *r, struct backend_base *b !renderer_bind_mask(r, backend, w)) { return false; } - cmd->blur.source_mask->image = w->mask_image; + cmd->source_mask.image = w->mask_image; } break; default: