summaryrefslogtreecommitdiff
path: root/src/VBox/GuestHost/OpenGL/packer
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2014-03-26 19:21:20 +0000
committer <>2014-05-08 15:03:54 +0000
commitfb123f93f9f5ce42c8e5785d2f8e0edaf951740e (patch)
treec2103d76aec5f1f10892cd1d3a38e24f665ae5db /src/VBox/GuestHost/OpenGL/packer
parent58ed4748338f9466599adfc8a9171280ed99e23f (diff)
downloadVirtualBox-master.tar.gz
Imported from /home/lorry/working-area/delta_VirtualBox/VirtualBox-4.3.10.tar.bz2.HEADVirtualBox-4.3.10master
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/packer')
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/opcodes.py33
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/pack_buffer.c25
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/pack_extensions.c2
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c2
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/pack_misc.c84
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/pack_pixels.c3
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/pack_shaders.c24
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c6
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/packer.h4
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/packer.py4
-rw-r--r--src/VBox/GuestHost/OpenGL/packer/packer_special4
11 files changed, 168 insertions, 23 deletions
diff --git a/src/VBox/GuestHost/OpenGL/packer/opcodes.py b/src/VBox/GuestHost/OpenGL/packer/opcodes.py
index e198150b..f359d218 100644
--- a/src/VBox/GuestHost/OpenGL/packer/opcodes.py
+++ b/src/VBox/GuestHost/OpenGL/packer/opcodes.py
@@ -50,21 +50,50 @@ print "} CROpcode;\n"
# count up number of extended opcode commands
num_extends = 0
+num_auto_codes = 0
for func in keys:
if "extpack" in apiutil.ChromiumProps(func):
num_extends += 1
+ if apiutil.ChromiumRelOpCode(func) < 0:
+ num_auto_codes += 1
+
+# sanity check for compatibility breakage
+# we currently have 304
+if num_auto_codes != 304:
+ print >> sys.stderr, "number of auto-generated op-codes should be 304, but is " + str(num_auto_codes)
+ print >> sys.stderr, "which breaks backwards compatibility"
+ print >> sys.stderr, "if this is really what you want to do, please adjust this script"
+ print >> sys.stderr, "to handle a new auto-generated opcodes count"
+ print "#error -- num_auto_codes should be 304, but is " + str(num_auto_codes)
+ sys.exit(-1)
print "/* Functions with a return value or output parameters */"
print "typedef enum {"
+opcode_index = 0
enum_index = 0
+chrelopcodes = {}
for func in keys:
if "extpack" in apiutil.ChromiumProps(func):
opcodeName = apiutil.ExtendedOpcodeName(func)
+ chrelopcode = apiutil.ChromiumRelOpCode(func)
+ opcode = -1
+ if chrelopcode >= 0:
+ if not chrelopcode in chrelopcodes.keys():
+ chrelopcodes[chrelopcode] = chrelopcode
+ else:
+ print >> sys.stderr, "non-unique chrelopcode: " + str(chrelopcode)
+ print "#error -- non-unique chrelopcode: " + str(num_auto_codes)
+ sys.exit(-1)
+ opcode = num_auto_codes + chrelopcode
+ else:
+ opcode = opcode_index
+ opcode_index = opcode_index + 1
+
if enum_index != num_extends-1:
- print "\t%s = %d," % (opcodeName, enum_index )
+ print "\t%s = %d," % (opcodeName, opcode )
else:
- print "\t%s = %d" % (opcodeName, enum_index )
+ print "\t%s = %d" % (opcodeName, opcode )
enum_index = enum_index + 1
print "} CRExtendOpcode;\n"
print "#endif /* CR_OPCODES_H */"
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_buffer.c b/src/VBox/GuestHost/OpenGL/packer/pack_buffer.c
index 48d1250a..d4ddaf5f 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_buffer.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_buffer.c
@@ -149,7 +149,11 @@ void crPackResetPointers( CRPackContext *pc )
const GLboolean canBarf = pc->buffer.canBarf;
CRPackBuffer *buf = pc->currentBuffer;
CRASSERT(buf);
- crPackInitBuffer( buf, buf->pack, buf->size, buf->mtu );
+ crPackInitBuffer( buf, buf->pack, buf->size, buf->mtu
+#ifdef IN_RING0
+ , 0
+#endif
+ );
pc->buffer.geometry_only = geom_only; /* restore the flag */
pc->buffer.holds_BeginEnd = holds_BeginEnd;
pc->buffer.in_BeginEnd = in_BeginEnd;
@@ -221,9 +225,15 @@ crPackMaxData( int buffer_size )
* has 'mtu' bytes in it, we have to send it. The MTU might
* be somewhat smaller than the buffer size.
*/
-void crPackInitBuffer( CRPackBuffer *buf, void *pack, int size, int mtu )
+void crPackInitBuffer( CRPackBuffer *buf, void *pack, int size, int mtu
+#ifdef IN_RING0
+ , unsigned int num_opcodes
+#endif
+ )
{
+#ifndef IN_RING0
unsigned int num_opcodes;
+#endif
CRASSERT(mtu <= size);
@@ -231,7 +241,16 @@ void crPackInitBuffer( CRPackBuffer *buf, void *pack, int size, int mtu )
buf->mtu = mtu;
buf->pack = pack;
- num_opcodes = crPackMaxOpcodes( buf->size );
+#ifdef IN_RING0
+ if(num_opcodes)
+ {
+ num_opcodes = (num_opcodes + 0x3) & (~0x3);
+ }
+ else
+#endif
+ {
+ num_opcodes = crPackMaxOpcodes( buf->size );
+ }
buf->data_start =
(unsigned char *) buf->pack + num_opcodes + sizeof(CRMessageOpcodes);
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c b/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c
index 14b86a91..a8ae7fc4 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c
@@ -6,8 +6,6 @@
#include "packer.h"
-#include <GL/glext.h>
-
int __packTexParameterNumParams( GLenum param )
{
switch( param )
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c b/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c
index ab904d37..bc1ab543 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c
@@ -5,7 +5,7 @@
*/
/*
- * Copyright (C) 2009 Oracle Corporation
+ * Copyright (C) 2009-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_misc.c b/src/VBox/GuestHost/OpenGL/packer/pack_misc.c
index 40da1223..ebc0e5bd 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_misc.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_misc.c
@@ -7,7 +7,7 @@
#include "packer.h"
#include "cr_error.h"
-void PACK_APIENTRY crPackChromiumParametervCR(GLenum target, GLenum type, GLsizei count, const GLvoid *values)
+void PACK_APIENTRY crPackChromiumParametervCR(CR_PACKER_CONTEXT_ARGDECL GLenum target, GLenum type, GLsizei count, const GLvoid *values)
{
CR_GET_PACKER_CONTEXT(pc);
unsigned int header_length = 2 * sizeof(int) + sizeof(target) + sizeof(type) + sizeof(count);
@@ -29,9 +29,11 @@ void PACK_APIENTRY crPackChromiumParametervCR(GLenum target, GLenum type, GLsize
case GL_UNSIGNED_INT:
params_length = sizeof(GLint) * count;
break;
+#ifndef IN_RING0
case GL_FLOAT:
params_length = sizeof(GLfloat) * count;
break;
+#endif
#if 0
case GL_DOUBLE:
params_length = sizeof(GLdouble) * count;
@@ -74,11 +76,13 @@ void PACK_APIENTRY crPackChromiumParametervCR(GLenum target, GLenum type, GLsize
WRITE_DATA( pos, GLint, ((GLint *) values)[i]);
}
break;
+#ifndef IN_RING0
case GL_FLOAT:
for (i = 0; i < count; i++, pos += sizeof(GLfloat)) {
WRITE_DATA( pos, GLfloat, ((GLfloat *) values)[i]);
}
break;
+#endif
#if 0
case GL_DOUBLE:
for (i = 0; i < count; i++) {
@@ -95,7 +99,8 @@ void PACK_APIENTRY crPackChromiumParametervCR(GLenum target, GLenum type, GLsize
CR_UNLOCK_PACKER_CONTEXT(pc);
}
-void PACK_APIENTRY crPackDeleteQueriesARB(GLsizei n, const GLuint * ids)
+#ifndef IN_RING0
+void PACK_APIENTRY crPackDeleteQueriesARB(CR_PACKER_CONTEXT_ARGDECL GLsizei n, const GLuint * ids)
{
unsigned char *data_ptr;
int packet_length = sizeof(GLenum)+sizeof(n)+n*sizeof(*ids);
@@ -107,3 +112,78 @@ void PACK_APIENTRY crPackDeleteQueriesARB(GLsizei n, const GLuint * ids)
crHugePacket(CR_EXTEND_OPCODE, data_ptr);
crPackFree(data_ptr);
}
+#endif
+
+void PACK_APIENTRY crPackVBoxTexPresent( CR_PACKER_CONTEXT_ARGDECL GLuint texture, GLuint cfg, GLint xPos, GLint yPos, GLint cRects, const GLint * pRects )
+{
+ GLint i, size, cnt;
+
+ CR_GET_PACKER_CONTEXT(pc);
+ unsigned char *data_ptr;
+ (void) pc;
+ size = 28 + cRects * 4 * sizeof(GLint);
+ CR_GET_BUFFERED_POINTER( pc, size );
+ WRITE_DATA( 0, GLint, size );
+ WRITE_DATA( 4, GLenum, CR_VBOXTEXPRESENT_EXTEND_OPCODE );
+ WRITE_DATA( 8, GLuint, texture );
+ WRITE_DATA( 12, GLuint, cfg );
+ WRITE_DATA( 16, GLint, xPos );
+ WRITE_DATA( 20, GLint, yPos );
+ WRITE_DATA( 24, GLint, cRects );
+
+ cnt = 28;
+ for (i=0; i<cRects; ++i)
+ {
+ WRITE_DATA(cnt, GLint, (GLint) pRects[4*i+0]);
+ WRITE_DATA(cnt+4, GLint, (GLint) pRects[4*i+1]);
+ WRITE_DATA(cnt+8, GLint, (GLint) pRects[4*i+2]);
+ WRITE_DATA(cnt+12, GLint, (GLint) pRects[4*i+3]);
+ cnt += 16;
+ }
+ WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+ CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackWindowPosition( CR_PACKER_CONTEXT_ARGDECL GLint window, GLint x, GLint y )
+{
+ CR_GET_PACKER_CONTEXT(pc);
+ unsigned char *data_ptr;
+ (void) pc;
+ CR_GET_BUFFERED_POINTER( pc, 20 );
+ WRITE_DATA( 0, GLint, 20 );
+ WRITE_DATA( 4, GLenum, CR_WINDOWPOSITION_EXTEND_OPCODE );
+ WRITE_DATA( 8, GLint, window );
+ WRITE_DATA( 12, GLint, x );
+ WRITE_DATA( 16, GLint, y );
+ WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+ CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackWindowShow( CR_PACKER_CONTEXT_ARGDECL GLint window, GLint flag )
+{
+ CR_GET_PACKER_CONTEXT(pc);
+ unsigned char *data_ptr;
+ (void) pc;
+ CR_GET_BUFFERED_POINTER( pc, 16 );
+ WRITE_DATA( 0, GLint, 16 );
+ WRITE_DATA( 4, GLenum, CR_WINDOWSHOW_EXTEND_OPCODE );
+ WRITE_DATA( 8, GLint, window );
+ WRITE_DATA( 12, GLint, flag );
+ WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+ CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackWindowSize( CR_PACKER_CONTEXT_ARGDECL GLint window, GLint w, GLint h )
+{
+ CR_GET_PACKER_CONTEXT(pc);
+ unsigned char *data_ptr;
+ (void) pc;
+ CR_GET_BUFFERED_POINTER( pc, 20 );
+ WRITE_DATA( 0, GLint, 20 );
+ WRITE_DATA( 4, GLenum, CR_WINDOWSIZE_EXTEND_OPCODE );
+ WRITE_DATA( 8, GLint, window );
+ WRITE_DATA( 12, GLint, w );
+ WRITE_DATA( 16, GLint, h );
+ WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+ CR_UNLOCK_PACKER_CONTEXT(pc);
+}
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_pixels.c b/src/VBox/GuestHost/OpenGL/packer/pack_pixels.c
index 19f2a1d5..2508643a 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_pixels.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_pixels.c
@@ -143,7 +143,8 @@ void PACK_APIENTRY crPackBitmap(GLsizei width, GLsizei height,
WRITE_DATA( 24, GLuint, noimagedata );
WRITE_DATA( 28, GLint, (GLint) (uintptr_t) bitmap);
- crBitmapCopy(width, height, (GLubyte *)(data_ptr + 32), bitmap, unpack);
+ if (!noimagedata)
+ crBitmapCopy(width, height, (GLubyte *)(data_ptr + 32), bitmap, unpack);
crHugePacket( CR_BITMAP_OPCODE, data_ptr );
crPackFree( data_ptr );
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c b/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c
index 36fc6bea..b788bd4d 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c
@@ -5,7 +5,7 @@
*/
/*
- * Copyright (C) 2009 Oracle Corporation
+ * Copyright (C) 2009-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -52,7 +52,7 @@ void PACK_APIENTRY crPackShaderSource(GLuint shader, GLsizei count, const char *
for (i=0; i<count; ++i)
{
- pLocalLength[i] = (length && (length[i]>=0)) ? length[i] : crStrlen(string[i])+1;
+ pLocalLength[i] = ((length && (length[i]>=0)) ? length[i] : crStrlen(string[i]))+1;
packet_length += pLocalLength[i];
}
@@ -80,7 +80,17 @@ void PACK_APIENTRY crPackShaderSource(GLuint shader, GLsizei count, const char *
{
if (string[i])
{
- crMemcpy(data_ptr, string[i], pLocalLength[i]);
+ if (length && (length[i]>=0))
+ {
+ /* include \0 in the string to make intel drivers happy */
+ crMemcpy(data_ptr, string[i], pLocalLength[i] - 1);
+ data_ptr[pLocalLength[i] - 1] = '\0';
+ }
+ else
+ {
+ /* the \0 s already in the string */
+ crMemcpy(data_ptr, string[i], pLocalLength[i]);
+ }
}
else
{
@@ -458,7 +468,7 @@ void PACK_APIENTRY crPackGetAttachedShaders(GLuint program, GLsizei maxCount, GL
CR_UNLOCK_PACKER_CONTEXT(pc);
}
-void PACK_APIENTRY crPackGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj, int * writeback)
+void PACK_APIENTRY crPackGetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj, int * writeback)
{
CR_GET_PACKER_CONTEXT(pc);
unsigned char *data_ptr;
@@ -466,7 +476,7 @@ void PACK_APIENTRY crPackGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei
CR_GET_BUFFERED_POINTER(pc, 32);
WRITE_DATA(0, GLint, 32);
WRITE_DATA(4, GLenum, CR_GETATTACHEDOBJECTSARB_EXTEND_OPCODE);
- WRITE_DATA(8, GLhandleARB, containerObj);
+ WRITE_DATA(8, VBoxGLhandleARB, containerObj);
WRITE_DATA(12, GLsizei, maxCount);
WRITE_NETWORK_POINTER(16, (void *) count);
WRITE_NETWORK_POINTER(24, (void *) writeback);
@@ -474,7 +484,7 @@ void PACK_APIENTRY crPackGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei
CR_UNLOCK_PACKER_CONTEXT(pc);
}
-void PACK_APIENTRY crPackGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog, int * writeback)
+void PACK_APIENTRY crPackGetInfoLogARB(VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog, int * writeback)
{
CR_GET_PACKER_CONTEXT(pc);
unsigned char *data_ptr;
@@ -482,7 +492,7 @@ void PACK_APIENTRY crPackGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsiz
CR_GET_BUFFERED_POINTER(pc, 32);
WRITE_DATA(0, GLint, 32);
WRITE_DATA(4, GLenum, CR_GETINFOLOGARB_EXTEND_OPCODE);
- WRITE_DATA(8, GLhandleARB, obj);
+ WRITE_DATA(8, VBoxGLhandleARB, obj);
WRITE_DATA(12, GLsizei, maxLength);
WRITE_NETWORK_POINTER(16, (void *) length);
WRITE_NETWORK_POINTER(24, (void *) writeback);
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c b/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c
index d76fc29c..e0155fc7 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 2008 Oracle Corporation
+ * Copyright (C) 2008-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -22,7 +22,7 @@
#include <windows.h>
#endif
-void PACK_APIENTRY crPackWindowVisibleRegion( GLint window, GLint cRects, GLint * pRects )
+void PACK_APIENTRY crPackWindowVisibleRegion( CR_PACKER_CONTEXT_ARGDECL GLint window, GLint cRects, const GLint * pRects )
{
GLint i, size, cnt;
@@ -49,7 +49,7 @@ void PACK_APIENTRY crPackWindowVisibleRegion( GLint window, GLint cRects, GLint
CR_UNLOCK_PACKER_CONTEXT(pc);
}
-void PACK_APIENTRY crPackWindowVisibleRegionSWAP( GLint window, GLint cRects, GLint * pRects )
+void PACK_APIENTRY crPackWindowVisibleRegionSWAP( CR_PACKER_CONTEXT_ARGDECL GLint window, GLint cRects, const GLint * pRects )
{
crError( "crPackWindowVisibleRegionSWAP unimplemented and shouldn't be called" );
}
diff --git a/src/VBox/GuestHost/OpenGL/packer/packer.h b/src/VBox/GuestHost/OpenGL/packer/packer.h
index 965799a0..f70a5bb4 100644
--- a/src/VBox/GuestHost/OpenGL/packer/packer.h
+++ b/src/VBox/GuestHost/OpenGL/packer/packer.h
@@ -18,6 +18,10 @@
#include "packer_extensions.h"
#include "cr_mem.h"
+#ifndef IN_RING0
extern void __PackError( int line, const char *file, GLenum error, const char *info );
+#else
+# define __PackError( line, file, error, info) do { AssertReleaseFailed(); } while (0)
+#endif
#endif /* CR_PACKER_H */
diff --git a/src/VBox/GuestHost/OpenGL/packer/packer.py b/src/VBox/GuestHost/OpenGL/packer/packer.py
index a2708438..386b6bec 100644
--- a/src/VBox/GuestHost/OpenGL/packer/packer.py
+++ b/src/VBox/GuestHost/OpenGL/packer/packer.py
@@ -113,9 +113,9 @@ def UpdateCurrentPointer( func_name ):
def PrintFunc( func_name, params, is_swapped, can_have_pointers ):
"""Emit a packer function."""
if is_swapped:
- print 'void PACK_APIENTRY crPack%sSWAP( %s )' % (func_name, apiutil.MakeDeclarationString(params))
+ print 'void PACK_APIENTRY crPack%sSWAP( %s )' % (func_name, apiutil.MakeDeclarationStringWithContext('CR_PACKER_CONTEXT', params))
else:
- print 'void PACK_APIENTRY crPack%s( %s )' % (func_name, apiutil.MakeDeclarationString(params))
+ print 'void PACK_APIENTRY crPack%s( %s )' % (func_name, apiutil.MakeDeclarationStringWithContext('CR_PACKER_CONTEXT', params))
print '{'
print '\tCR_GET_PACKER_CONTEXT(pc);'
diff --git a/src/VBox/GuestHost/OpenGL/packer/packer_special b/src/VBox/GuestHost/OpenGL/packer/packer_special
index 848a05c5..b37cf2f3 100644
--- a/src/VBox/GuestHost/OpenGL/packer/packer_special
+++ b/src/VBox/GuestHost/OpenGL/packer/packer_special
@@ -176,3 +176,7 @@ UniformMatrix2x4fv
UniformMatrix4x2fv
UniformMatrix3x4fv
UniformMatrix4x3fv
+VBoxTexPresent
+WindowPosition
+WindowShow
+WindowSize