summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHuan Song <huans@google.com>2021-01-22 14:48:56 -0800
committerLingfeng Yang <lfy@google.com>2021-02-17 09:41:08 -0800
commitae05926336285b90979d06b9a683162b374b95cb (patch)
tree50766b5c378f802efda9a508a7eb40eba352adf7
parentdd700f636aa5cf27a3186b577bcc5e739623529b (diff)
downloadvulkan-cereal-ae05926336285b90979d06b9a683162b374b95cb.tar.gz
Use VirtioGpu flush to post, host side
Bug: 178423317 Change-Id: I9591511d21434112e30a212931546898c9f09217
-rw-r--r--protocols/renderControl/renderControl.attrib10
-rw-r--r--protocols/renderControl/renderControl.in3
-rw-r--r--stream-servers/FrameBuffer.cpp8
-rw-r--r--stream-servers/FrameBuffer.h2
-rw-r--r--stream-servers/PostWorker.cpp3
-rw-r--r--stream-servers/RenderControl.cpp22
-rw-r--r--stream-servers/renderControl_dec/renderControl_dec.cpp35
-rw-r--r--stream-servers/renderControl_dec/renderControl_opcodes.h4
-rw-r--r--stream-servers/renderControl_dec/renderControl_server_context.cpp2
-rw-r--r--stream-servers/renderControl_dec/renderControl_server_context.h2
-rw-r--r--stream-servers/renderControl_dec/renderControl_server_proc.h2
11 files changed, 83 insertions, 10 deletions
diff --git a/protocols/renderControl/renderControl.attrib b/protocols/renderControl/renderControl.attrib
index 25377007..d8c3ac1a 100644
--- a/protocols/renderControl/renderControl.attrib
+++ b/protocols/renderControl/renderControl.attrib
@@ -101,3 +101,13 @@ rcComposeAsync
rcDestroySyncKHRAsync
flag flushOnEncode
+
+rcComposeWithoutPost
+ dir buffer in
+ len buffer bufferSize
+ flag flushOnEncode
+
+rcComposeAsyncWithoutPost
+ dir buffer in
+ len buffer bufferSize
+ flag flushOnEncode
diff --git a/protocols/renderControl/renderControl.in b/protocols/renderControl/renderControl.in
index c1fd83e4..47c41c66 100644
--- a/protocols/renderControl/renderControl.in
+++ b/protocols/renderControl/renderControl.in
@@ -58,3 +58,6 @@ GL_ENTRY(void, rcSetTracingForPuid, uint64_t puid, uint32_t enable, uint64_t gue
GL_ENTRY(void, rcMakeCurrentAsync, uint32_t context, uint32_t drawSurf, uint32_t readSurf)
GL_ENTRY(void, rcComposeAsync, uint32_t bufferSize, void *buffer);
GL_ENTRY(void, rcDestroySyncKHRAsync, uint64_t sync);
+GL_ENTRY(GLint, rcComposeWithoutPost, uint32_t bufferSize, void *buffer);
+GL_ENTRY(void, rcComposeAsyncWithoutPost, uint32_t bufferSize, void *buffer);
+
diff --git a/stream-servers/FrameBuffer.cpp b/stream-servers/FrameBuffer.cpp
index d410cd52..c1836b2b 100644
--- a/stream-servers/FrameBuffer.cpp
+++ b/stream-servers/FrameBuffer.cpp
@@ -2747,7 +2747,7 @@ bool FrameBuffer::decColorBufferRefCountLocked(HandleType p_colorbuffer) {
return false;
}
-bool FrameBuffer::compose(uint32_t bufferSize, void* buffer) {
+bool FrameBuffer::compose(uint32_t bufferSize, void* buffer, bool needPost) {
ComposeDevice* p = (ComposeDevice*)buffer;
AutoLock mutex(m_lock);
@@ -2759,7 +2759,9 @@ bool FrameBuffer::compose(uint32_t bufferSize, void* buffer) {
memcpy(composeCmd.composeBuffer.data(), buffer, bufferSize);
composeCmd.cmd = PostCmd::Compose;
sendPostWorkerCmd(composeCmd);
- post(p->targetHandle, false);
+ if(needPost) {
+ post(p->targetHandle, false);
+ }
return true;
}
@@ -2777,7 +2779,7 @@ bool FrameBuffer::compose(uint32_t bufferSize, void* buffer) {
memcpy(composeCmd.composeBuffer.data(), buffer, bufferSize);
composeCmd.cmd = PostCmd::Compose;
sendPostWorkerCmd(composeCmd);
- if (p2->displayId == 0) {
+ if (p2->displayId == 0 && needPost) {
post(p2->targetHandle, false);
}
return true;
diff --git a/stream-servers/FrameBuffer.h b/stream-servers/FrameBuffer.h
index 6fc45a10..71ce1ec0 100644
--- a/stream-servers/FrameBuffer.h
+++ b/stream-servers/FrameBuffer.h
@@ -483,7 +483,7 @@ class FrameBuffer {
void setShuttingDown() { m_shuttingDown = true; }
bool isShuttingDown() const { return m_shuttingDown; }
- bool compose(uint32_t bufferSize, void* buffer);
+ bool compose(uint32_t bufferSize, void* buffer, bool post = true);
~FrameBuffer();
diff --git a/stream-servers/PostWorker.cpp b/stream-servers/PostWorker.cpp
index fcd146a3..8f3f374f 100644
--- a/stream-servers/PostWorker.cpp
+++ b/stream-servers/PostWorker.cpp
@@ -68,7 +68,6 @@ void PostWorker::postImpl(ColorBuffer* cb) {
if (!m_mainThreadPostingOnly && !m_initialized) {
m_initialized = mBindSubwin();
}
-
float dpr = mFb->getDpr();
int windowWidth = mFb->windowWidth();
int windowHeight = mFb->windowHeight();
@@ -197,7 +196,6 @@ void PostWorker::composeImpl(ComposeDevice* p) {
if (!m_mainThreadPostingOnly && !m_initialized) {
m_initialized = mBindSubwin();
}
-
ComposeLayer* l = (ComposeLayer*)p->layer;
GLint vport[4] = { 0, };
s_gles2.glGetIntegerv(GL_VIEWPORT, vport);
@@ -248,7 +246,6 @@ void PostWorker::composev2Impl(ComposeDevice_v2* p) {
if (!m_mainThreadPostingOnly && !m_initialized) {
m_initialized = mBindSubwin();
}
-
ComposeLayer* l = (ComposeLayer*)p->layer;
GLint vport[4] = { 0, };
s_gles2.glGetIntegerv(GL_VIEWPORT, vport);
diff --git a/stream-servers/RenderControl.cpp b/stream-servers/RenderControl.cpp
index 1641da8b..6ba28d43 100644
--- a/stream-servers/RenderControl.cpp
+++ b/stream-servers/RenderControl.cpp
@@ -1211,7 +1211,15 @@ static int rcCompose(uint32_t bufferSize, void* buffer) {
if (!fb) {
return -1;
}
- return fb->compose(bufferSize, buffer);
+ return fb->compose(bufferSize, buffer, true);
+}
+
+static int rcComposeWithoutPost(uint32_t bufferSize, void* buffer) {
+ FrameBuffer *fb = FrameBuffer::getFB();
+ if (!fb) {
+ return -1;
+ }
+ return fb->compose(bufferSize, buffer, false);
}
static int rcCreateDisplay(uint32_t* displayId) {
@@ -1427,7 +1435,15 @@ static void rcComposeAsync(uint32_t bufferSize, void* buffer) {
if (!fb) {
return;
}
- fb->compose(bufferSize, buffer);
+ fb->compose(bufferSize, buffer, true);
+}
+
+static void rcComposeAsyncWithoutPost(uint32_t bufferSize, void* buffer) {
+ FrameBuffer *fb = FrameBuffer::getFB();
+ if (!fb) {
+ return;
+ }
+ fb->compose(bufferSize, buffer, false);
}
static void rcDestroySyncKHRAsync(uint64_t handle) {
@@ -1498,4 +1514,6 @@ void initRenderControlContext(renderControl_decoder_context_t *dec)
dec->rcMakeCurrentAsync = rcMakeCurrentAsync;
dec->rcComposeAsync = rcComposeAsync;
dec->rcDestroySyncKHRAsync = rcDestroySyncKHRAsync;
+ dec->rcComposeWithoutPost = rcComposeWithoutPost;
+ dec->rcComposeAsyncWithoutPost = rcComposeAsyncWithoutPost;
}
diff --git a/stream-servers/renderControl_dec/renderControl_dec.cpp b/stream-servers/renderControl_dec/renderControl_dec.cpp
index 5c9af254..9f859ce3 100644
--- a/stream-servers/renderControl_dec/renderControl_dec.cpp
+++ b/stream-servers/renderControl_dec/renderControl_dec.cpp
@@ -1187,6 +1187,41 @@ size_t renderControl_decoder_context_t::decode(void *buf, size_t len, IOStream *
android::base::endTrace();
break;
}
+ case OP_rcComposeWithoutPost: {
+ android::base::beginTrace("rcComposeWithoutPost decode");
+ uint32_t var_bufferSize = Unpack<uint32_t,uint32_t>(ptr + 8);
+ uint32_t size_buffer __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
+ InputBuffer inptr_buffer(ptr + 8 + 4 + 4, size_buffer);
+ if (useChecksum) {
+ ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_buffer, ptr + 8 + 4 + 4 + size_buffer, checksumSize,
+ "renderControl_decoder_context_t::decode, OP_rcComposeWithoutPost: GL checksumCalculator failure\n");
+ }
+ size_t totalTmpSize = sizeof(GLint);
+ totalTmpSize += checksumSize;
+ unsigned char *tmpBuf = stream->alloc(totalTmpSize);
+ *(GLint *)(&tmpBuf[0]) = this->rcComposeWithoutPost(var_bufferSize, (void*)(inptr_buffer.get()));
+ if (useChecksum) {
+ ChecksumCalculatorThreadInfo::writeChecksum(checksumCalc, &tmpBuf[0], totalTmpSize - checksumSize, &tmpBuf[totalTmpSize - checksumSize], checksumSize);
+ }
+ stream->flush();
+ SET_LASTCALL("rcComposeWithoutPost");
+ android::base::endTrace();
+ break;
+ }
+ case OP_rcComposeAsyncWithoutPost: {
+ android::base::beginTrace("rcComposeAsyncWithoutPost decode");
+ uint32_t var_bufferSize = Unpack<uint32_t,uint32_t>(ptr + 8);
+ uint32_t size_buffer __attribute__((unused)) = Unpack<uint32_t,uint32_t>(ptr + 8 + 4);
+ InputBuffer inptr_buffer(ptr + 8 + 4 + 4, size_buffer);
+ if (useChecksum) {
+ ChecksumCalculatorThreadInfo::validOrDie(checksumCalc, ptr, 8 + 4 + 4 + size_buffer, ptr + 8 + 4 + 4 + size_buffer, checksumSize,
+ "renderControl_decoder_context_t::decode, OP_rcComposeAsyncWithoutPost: GL checksumCalculator failure\n");
+ }
+ this->rcComposeAsyncWithoutPost(var_bufferSize, (void*)(inptr_buffer.get()));
+ SET_LASTCALL("rcComposeAsyncWithoutPost");
+ android::base::endTrace();
+ break;
+ }
default:
return ptr - (unsigned char*)buf;
} //switch
diff --git a/stream-servers/renderControl_dec/renderControl_opcodes.h b/stream-servers/renderControl_dec/renderControl_opcodes.h
index 2fb8e711..a3a6e27c 100644
--- a/stream-servers/renderControl_dec/renderControl_opcodes.h
+++ b/stream-servers/renderControl_dec/renderControl_opcodes.h
@@ -63,7 +63,9 @@
#define OP_rcMakeCurrentAsync 10057
#define OP_rcComposeAsync 10058
#define OP_rcDestroySyncKHRAsync 10059
-#define OP_last 10060
+#define OP_rcComposeWithoutPost 10060
+#define OP_rcComposeAsyncWithoutPost 10061
+#define OP_last 10062
#endif
diff --git a/stream-servers/renderControl_dec/renderControl_server_context.cpp b/stream-servers/renderControl_dec/renderControl_server_context.cpp
index 1d335814..60ca587a 100644
--- a/stream-servers/renderControl_dec/renderControl_server_context.cpp
+++ b/stream-servers/renderControl_dec/renderControl_server_context.cpp
@@ -70,6 +70,8 @@ int renderControl_server_context_t::initDispatchByName(void *(*getProc)(const ch
rcMakeCurrentAsync = (rcMakeCurrentAsync_server_proc_t) getProc("rcMakeCurrentAsync", userData);
rcComposeAsync = (rcComposeAsync_server_proc_t) getProc("rcComposeAsync", userData);
rcDestroySyncKHRAsync = (rcDestroySyncKHRAsync_server_proc_t) getProc("rcDestroySyncKHRAsync", userData);
+ rcComposeWithoutPost = (rcComposeWithoutPost_server_proc_t) getProc("rcComposeWithoutPost", userData);
+ rcComposeAsyncWithoutPost = (rcComposeAsyncWithoutPost_server_proc_t) getProc("rcComposeAsyncWithoutPost", userData);
return 0;
}
diff --git a/stream-servers/renderControl_dec/renderControl_server_context.h b/stream-servers/renderControl_dec/renderControl_server_context.h
index bee01916..fdd46d03 100644
--- a/stream-servers/renderControl_dec/renderControl_server_context.h
+++ b/stream-servers/renderControl_dec/renderControl_server_context.h
@@ -70,6 +70,8 @@ struct renderControl_server_context_t {
rcMakeCurrentAsync_server_proc_t rcMakeCurrentAsync;
rcComposeAsync_server_proc_t rcComposeAsync;
rcDestroySyncKHRAsync_server_proc_t rcDestroySyncKHRAsync;
+ rcComposeWithoutPost_server_proc_t rcComposeWithoutPost;
+ rcComposeAsyncWithoutPost_server_proc_t rcComposeAsyncWithoutPost;
virtual ~renderControl_server_context_t() {}
int initDispatchByName( void *(*getProc)(const char *name, void *userData), void *userData);
};
diff --git a/stream-servers/renderControl_dec/renderControl_server_proc.h b/stream-servers/renderControl_dec/renderControl_server_proc.h
index 519e81d7..50f25aeb 100644
--- a/stream-servers/renderControl_dec/renderControl_server_proc.h
+++ b/stream-servers/renderControl_dec/renderControl_server_proc.h
@@ -72,6 +72,8 @@ typedef void (renderControl_APIENTRY *rcSetTracingForPuid_server_proc_t) (uint64
typedef void (renderControl_APIENTRY *rcMakeCurrentAsync_server_proc_t) (uint32_t, uint32_t, uint32_t);
typedef void (renderControl_APIENTRY *rcComposeAsync_server_proc_t) (uint32_t, void*);
typedef void (renderControl_APIENTRY *rcDestroySyncKHRAsync_server_proc_t) (uint64_t);
+typedef GLint (renderControl_APIENTRY *rcComposeWithoutPost_server_proc_t) (uint32_t, void*);
+typedef void (renderControl_APIENTRY *rcComposeAsyncWithoutPost_server_proc_t) (uint32_t, void*);
#endif