wlr_texture: Update wlr_texture_update_from_buffer to use wlr_raster

In the future, these implementations can use compatible texture sources
to do fast blit instead.
This commit is contained in:
Alexander Orzechowski 2022-06-20 12:34:10 -04:00
parent 1e2af8665b
commit beaede2df0
5 changed files with 23 additions and 23 deletions

View file

@ -44,9 +44,10 @@ static bool check_stride(const struct wlr_pixel_format_info *fmt,
return true;
}
static bool gles2_texture_update_from_buffer(struct wlr_texture *wlr_texture,
struct wlr_buffer *buffer, pixman_region32_t *damage) {
static bool gles2_texture_update_from_raster(struct wlr_texture *wlr_texture,
struct wlr_raster *raster, pixman_region32_t *damage) {
struct wlr_gles2_texture *texture = gles2_get_texture(wlr_texture);
struct wlr_buffer *buffer = raster->buffer;
if (texture->target != GL_TEXTURE_2D || texture->image != EGL_NO_IMAGE_KHR) {
return false;
@ -178,7 +179,7 @@ static void gles2_texture_unref(struct wlr_texture *wlr_texture) {
}
static const struct wlr_texture_impl texture_impl = {
.update_from_buffer = gles2_texture_update_from_buffer,
.update_from_raster = gles2_texture_update_from_raster,
.destroy = gles2_texture_unref,
};

View file

@ -136,9 +136,10 @@ static bool write_pixels(struct wlr_texture *wlr_texture,
return true;
}
static bool vulkan_texture_update_from_buffer(struct wlr_texture *wlr_texture,
struct wlr_buffer *buffer, pixman_region32_t *damage) {
static bool vulkan_texture_update_from_raster(struct wlr_texture *wlr_texture,
struct wlr_raster *raster, pixman_region32_t *damage) {
struct wlr_vk_texture *texture = vulkan_get_texture(wlr_texture);
struct wlr_buffer *buffer = raster->buffer;
void *data;
uint32_t format;
@ -224,7 +225,7 @@ static void vulkan_texture_unref(struct wlr_texture *wlr_texture) {
}
static const struct wlr_texture_impl texture_impl = {
.update_from_buffer = vulkan_texture_update_from_buffer,
.update_from_raster = vulkan_texture_update_from_raster,
.destroy = vulkan_texture_unref,
};

View file

@ -32,19 +32,18 @@ void wlr_texture_destroy(struct wlr_texture *texture) {
}
}
bool wlr_texture_update_from_buffer(struct wlr_texture *texture,
struct wlr_buffer *buffer, pixman_region32_t *damage) {
if (!texture->impl->update_from_buffer) {
bool wlr_texture_update_from_raster(struct wlr_texture *texture,
struct wlr_raster *raster, pixman_region32_t *damage) {
if (!texture->impl->update_from_raster) {
return false;
}
if (texture->width != (uint32_t)buffer->width ||
texture->height != (uint32_t)buffer->height) {
if (texture->width != raster->width || texture->height != raster->height) {
return false;
}
const pixman_box32_t *extents = pixman_region32_extents(damage);
if (extents->x1 < 0 || extents->y1 < 0 || extents->x2 > buffer->width ||
extents->y2 > buffer->height) {
if (extents->x1 < 0 || extents->y1 < 0 || extents->x2 > (int32_t)raster->width ||
extents->y2 > (int32_t)raster->height) {
return false;
}
return texture->impl->update_from_buffer(texture, buffer, damage);
return texture->impl->update_from_raster(texture, raster, damage);
}