[common] Update framebuffer metadata + references

This commit is contained in:
matthewjmc 2022-05-16 16:32:45 +07:00 committed by Geoffrey McRae
parent 78d2b76313
commit 53c843d9dd
5 changed files with 14 additions and 21 deletions

View File

@ -742,7 +742,7 @@ int main_frameThread(void * unused)
if (dma->fd == -1) if (dma->fd == -1)
{ {
const uintptr_t pos = (uintptr_t)msg.mem - (uintptr_t)g_state.shm.mem; const uintptr_t pos = (uintptr_t)msg.mem - (uintptr_t)g_state.shm.mem;
const uintptr_t offset = (uintptr_t)frame->offset + FrameBufferStructSize; const uintptr_t offset = (uintptr_t)frame->offset + sizeof(FrameBuffer);
dma->dataSize = dataSize; dma->dataSize = dataSize;
dma->fd = ivshmemGetDMABuf(&g_state.shm, pos + offset, dataSize); dma->fd = ivshmemGetDMABuf(&g_state.shm, pos + offset, dataSize);

View File

@ -24,16 +24,21 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stdatomic.h>
typedef struct stFrameBuffer FrameBuffer; #define FB_CHUNK_SIZE 1048576 // 1MB
#define FB_SPIN_LIMIT 10000 // 10ms
#define FB_WP_TYPE atomic_uint_least32_t
#define FB_WP_SIZE sizeof(FB_WP_TYPE)
typedef struct stFrameBuffer
{
FB_WP_TYPE wp;
uint8_t data[0];
} FrameBuffer;
typedef bool (*FrameBufferReadFn)(void * opaque, const void * src, size_t size); typedef bool (*FrameBufferReadFn)(void * opaque, const void * src, size_t size);
/**
* The size of the FrameBuffer struct
*/
extern const size_t FrameBufferStructSize;
/** /**
* Wait for the framebuffer to fill to the specified size * Wait for the framebuffer to fill to the specified size
*/ */

View File

@ -27,22 +27,10 @@
#endif #endif
#include <string.h> #include <string.h>
#include <stdatomic.h>
#include <emmintrin.h> #include <emmintrin.h>
#include <smmintrin.h> #include <smmintrin.h>
#include <unistd.h> #include <unistd.h>
#define FB_CHUNK_SIZE 1048576 // 1MB
#define FB_SPIN_LIMIT 10000 // 10ms
struct stFrameBuffer
{
atomic_uint_least32_t wp;
uint8_t data[0];
};
const size_t FrameBufferStructSize = sizeof(FrameBuffer);
bool framebuffer_wait(const FrameBuffer * frame, size_t size) bool framebuffer_wait(const FrameBuffer * frame, size_t size)
{ {
while(atomic_load_explicit(&frame->wp, memory_order_acquire) < size) while(atomic_load_explicit(&frame->wp, memory_order_acquire) < size)

View File

@ -275,7 +275,7 @@ static bool sendFrame(void)
fi->frameHeight = frame.frameHeight; fi->frameHeight = frame.frameHeight;
fi->stride = frame.stride; fi->stride = frame.stride;
fi->pitch = frame.pitch; fi->pitch = frame.pitch;
fi->offset = app.pageSize - FrameBufferStructSize; fi->offset = app.pageSize - sizeof(FrameBuffer);
fi->flags = fi->flags =
(os_blockScreensaver() ? (os_blockScreensaver() ?
FRAME_FLAG_BLOCK_SCREENSAVER : 0) | FRAME_FLAG_BLOCK_SCREENSAVER : 0) |

View File

@ -458,7 +458,7 @@ static int dmabufGetFd(LGPlugin * this, LGMPMessage * msg, KVMFRFrame * frame, s
if (dma->fd == -1) if (dma->fd == -1)
{ {
const uintptr_t pos = (uintptr_t) msg->mem - (uintptr_t) this->shmDev.mem; const uintptr_t pos = (uintptr_t) msg->mem - (uintptr_t) this->shmDev.mem;
const uintptr_t offset = (uintptr_t) frame->offset + FrameBufferStructSize; const uintptr_t offset = (uintptr_t) frame->offset + sizeof(FrameBuffer);
dma->dataSize = dataSize; dma->dataSize = dataSize;
dma->fd = ivshmemGetDMABuf(&this->shmDev, pos + offset, dataSize); dma->fd = ivshmemGetDMABuf(&this->shmDev, pos + offset, dataSize);