mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-11-13 07:17:28 +00:00
[client/idd] network: preserve exact frame damage
This commit is contained in:
@@ -88,7 +88,8 @@ bool egl_damageInit(EGL_Damage ** damage)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!egl_desktopRectsInit(&(*damage)->mesh, LG_MAX_FRAME_DAMAGE_RECTS))
|
||||
if (!egl_desktopRectsInit(&(*damage)->mesh,
|
||||
LG_MAX_RUNTIME_DAMAGE_RECTS))
|
||||
{
|
||||
DEBUG_ERROR("Failed to initialize the mesh");
|
||||
return false;
|
||||
|
||||
@@ -29,7 +29,7 @@ struct DesktopDamage
|
||||
{
|
||||
LG_RendererFrameToken frameToken;
|
||||
int count;
|
||||
KVMFRFrameDamageRect rects[LG_MAX_FRAME_DAMAGE_RECTS];
|
||||
KVMFRFrameDamageRect rects[LG_MAX_RUNTIME_DAMAGE_RECTS];
|
||||
};
|
||||
|
||||
typedef struct EGL_Damage EGL_Damage;
|
||||
|
||||
@@ -58,10 +58,11 @@
|
||||
#include "postprocess.h"
|
||||
#include "util.h"
|
||||
|
||||
#define MAX_BUFFER_AGE 3
|
||||
#define DESKTOP_DAMAGE_COUNT 4
|
||||
#define DESKTOP_DAMAGE_MARGIN 1
|
||||
#define MAX_ACCUMULATED_DAMAGE ((LG_MAX_FRAME_DAMAGE_RECTS + MAX_OVERLAY_RECTS + 2) * MAX_BUFFER_AGE)
|
||||
#define MAX_BUFFER_AGE 3
|
||||
#define DESKTOP_DAMAGE_COUNT 4
|
||||
#define DESKTOP_DAMAGE_MARGIN 1
|
||||
#define MAX_ACCUMULATED_DAMAGE \
|
||||
((LG_MAX_RUNTIME_DAMAGE_RECTS + MAX_OVERLAY_RECTS + 2) * MAX_BUFFER_AGE)
|
||||
#define IDX_AGO(counter, i, total) (((counter) + (total) - (i)) % (total))
|
||||
|
||||
struct Options
|
||||
@@ -474,7 +475,7 @@ static void egl_addSwSurfaceDamage(
|
||||
damage->frameToken = LG_RENDERER_FRAME_TOKEN_NONE;
|
||||
if (damage->count >= 0)
|
||||
{
|
||||
if (damage->count + 1 >= LG_MAX_FRAME_DAMAGE_RECTS)
|
||||
if (damage->count + 1 > LG_MAX_RUNTIME_DAMAGE_RECTS)
|
||||
damage->count = -1;
|
||||
else
|
||||
damage->rects[damage->count++] = rect;
|
||||
@@ -880,7 +881,7 @@ static bool egl_onFrame(LG_Renderer * renderer,
|
||||
if (unlikely(
|
||||
damage->count == -1 ||
|
||||
damageRectsCount == 0 ||
|
||||
damage->count + damageRectsCount >= LG_MAX_FRAME_DAMAGE_RECTS))
|
||||
damage->count + damageRectsCount > LG_MAX_RUNTIME_DAMAGE_RECTS))
|
||||
{
|
||||
damage->count = -1;
|
||||
}
|
||||
@@ -1443,7 +1444,7 @@ static void egl_requeueDesktopDamage(
|
||||
this->desktopDamage + this->desktopDamageIdx;
|
||||
|
||||
if (damage->count < 0 || pending->count < 0 ||
|
||||
damage->count + pending->count >= LG_MAX_FRAME_DAMAGE_RECTS)
|
||||
damage->count + pending->count > LG_MAX_RUNTIME_DAMAGE_RECTS)
|
||||
pending->count = -1;
|
||||
else
|
||||
{
|
||||
@@ -1698,8 +1699,8 @@ static bool egl_render(LG_Renderer * renderer, LG_RendererRotate rotate,
|
||||
/* The diagnostics being displayed must not contribute to Compose. */
|
||||
timing->composeTime = nanotime() - composeStart;
|
||||
|
||||
struct Rect damage[LG_MAX_FRAME_DAMAGE_RECTS + MAX_OVERLAY_RECTS + 2];
|
||||
int damageIdx = app_renderOverlay(damage, MAX_OVERLAY_RECTS);
|
||||
struct Rect damage[LG_MAX_RUNTIME_DAMAGE_RECTS + MAX_OVERLAY_RECTS + 2];
|
||||
int damageIdx = app_renderOverlay(damage, MAX_OVERLAY_RECTS);
|
||||
if (unlikely(damageIdx != 0))
|
||||
{
|
||||
if (damageIdx == -1)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
struct TexDamage
|
||||
{
|
||||
int count;
|
||||
KVMFRFrameDamageRect rects[LG_MAX_FRAME_DAMAGE_RECTS];
|
||||
KVMFRFrameDamageRect rects[LG_MAX_RUNTIME_DAMAGE_RECTS];
|
||||
};
|
||||
|
||||
typedef struct TexFB
|
||||
@@ -87,10 +87,11 @@ static bool egl_texFBUpdate(EGL_Texture * texture, const EGL_TexUpdate * update)
|
||||
if (!egl_texBufferStreamLock(parent))
|
||||
return false;
|
||||
|
||||
struct TexDamage * damage = this->damage + parent->bufIndex;
|
||||
bool damageAll = !update->rects || update->rectCount == 0 || damage->count < 0 ||
|
||||
damage->count + update->rectCount > LG_MAX_FRAME_DAMAGE_RECTS;
|
||||
bool complete;
|
||||
struct TexDamage * damage = this->damage + parent->bufIndex;
|
||||
bool damageAll =
|
||||
!update->rects || update->rectCount == 0 || damage->count < 0 ||
|
||||
damage->count + update->rectCount > LG_MAX_RUNTIME_DAMAGE_RECTS;
|
||||
bool complete;
|
||||
|
||||
if (damageAll)
|
||||
{
|
||||
@@ -172,7 +173,7 @@ static bool egl_texFBUpdate(EGL_Texture * texture, const EGL_TexUpdate * update)
|
||||
if (i == parent->bufIndex)
|
||||
damage->count = 0;
|
||||
else if (update->rects && update->rectCount > 0 && damage->count >= 0 &&
|
||||
damage->count + update->rectCount <= LG_MAX_FRAME_DAMAGE_RECTS)
|
||||
damage->count + update->rectCount <= LG_MAX_RUNTIME_DAMAGE_RECTS)
|
||||
{
|
||||
memcpy(damage->rects + damage->count, update->rects,
|
||||
update->rectCount * sizeof(KVMFRFrameDamageRect));
|
||||
|
||||
Reference in New Issue
Block a user