[client] render: reduce software surface queue overhead

This commit is contained in:
Geoffrey McRae
2026-08-12 03:40:06 +10:00
parent f9a60bd2d1
commit f68bf8f0d5
4 changed files with 233 additions and 183 deletions

View File

@@ -18,7 +18,6 @@
* Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "common/ll.h"
#include "interface/renderer.h"
#include <stdatomic.h>
@@ -38,100 +37,6 @@ typedef void (*RenderQueueSourceAppliedFn)(void * opaque,
typedef bool (*RenderQueueSourcePrepareFn)(void * opaque,
RenderQueueSource source, uint64_t generation, uint64_t serial);
typedef struct
{
RenderQueueSource source;
uint64_t generation;
uint64_t transitionSerial;
enum
{
SW_SURFACE_OP_CONFIGURE_TRANSITION,
SW_SURFACE_OP_DRAW_FILL,
SW_SURFACE_OP_DRAW_BITMAP,
SURFACE_OP_FORMAT,
CURSOR_OP_STATE,
CURSOR_OP_IMAGE,
CURSOR_OP_COLOR_TRANSFORM,
CURSOR_OP_WHITE_LEVEL,
SOURCE_OP_TRANSITION,
}
op;
union
{
struct
{
int width, height;
}
swSurfaceConfigureTransition;
struct
{
int x, y;
int width, height;
uint32_t color;
}
swSurfaceDrawFill;
struct
{
int x , y;
int width, height;
int stride;
uint8_t * data;
bool topDown;
}
swSurfaceDrawBitmap;
struct
{
LG_RendererFormat format;
bool rendererSupportsNativeHDR;
}
surfaceFormat;
struct
{
bool visible;
int x;
int y;
int hx;
int hy;
}
cursorState;
struct
{
LG_RendererCursor type;
int width;
int height;
int pitch;
uint8_t * data;
}
cursorImage;
struct
{
LGColorTransform * data;
}
cursorColorTransform;
struct
{
uint32_t value;
}
cursorWhiteLevel;
struct
{
bool swSurface;
}
sourceTransition;
};
}
RenderCommand;
void renderQueue_init(void);
void renderQueue_free(void);
void renderQueue_clear(void);