VirtualBox

Changeset 52451 in vbox for trunk/src/VBox/GuestHost


Ignore:
Timestamp:
Aug 21, 2014 7:20:27 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95662
Message:

crOpenGL: command blocks flushing

Location:
trunk
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/VBox

  • trunk/src/VBox/GuestHost/OpenGL/include/cr_pack.h

    r52260 r52451  
    191191extern DECLEXPORT(void) crPackExpandMultiDrawElementsEXTSWAP( GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount, CRClientState *c, const GLfloat *pZva );
    192192
    193 extern DECLEXPORT(void) crPackCmdBlocksEnable();
    194 
     193extern DECLEXPORT(void) crPackCapsSet(uint32_t u32Caps);
    195194
    196195/**
     
    311310  } while (0)
    312311
     312#define CR_CMDBLOCK_CHECK_FLUSH( pc )                               \
     313  do {                                                              \
     314    if (!(cr_packer_cmd_blocks_enabled & CR_VBOX_CAP_CMDBLOCKS_FLUSH)) break; \
     315    if(!CRPACKBLOCKSTATE_IS_OP_STARTED((pc)->u32CmdBlockState, CRPACKBLOCKSTATE_OP_NEWLIST)) break; \
     316    THREADASSERT( pc );                                             \
     317    CRASSERT( (pc)->currentBuffer );                                \
     318    if ( !crPackCanHoldOpcode( pc, 1, 4 ) ) {                       \
     319      (pc)->Flush( (pc)->flush_arg );                               \
     320      Assert(crPackCanHoldOpcode( pc, 1, 4 ) );                     \
     321    }                                                               \
     322    CR_CMDBLOCK_OP( pc, CR_CMDBLOCKFLUSH_OPCODE );                  \
     323    (pc)->Flush( (pc)->flush_arg );                                 \
     324  } while (0)
     325
    313326/**
    314327 * Alloc space for a message of 'len' bytes (plus 1 opcode).
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h

    r51330 r52451  
    5151/* GetAttribsLocations support */
    5252#define CR_VBOX_CAP_GETATTRIBSLOCATIONS  0x00000008
    53 
    54 #define CR_VBOX_CAPS_ALL                 0x0000000f
     53/* flush command blocks for execution  */
     54#define CR_VBOX_CAP_CMDBLOCKS_FLUSH      0x00000010
     55
     56#define CR_VBOX_CAPS_ALL                 0x0000001f
    5557
    5658
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_unpack.h

    r50975 r52451  
    3434    CR_UNPACK_BUFFER_TYPE_GENERIC = 0,
    3535    CR_UNPACK_BUFFER_TYPE_CMDBLOCK_BEGIN,
     36    CR_UNPACK_BUFFER_TYPE_CMDBLOCK_FLUSH,
    3637    CR_UNPACK_BUFFER_TYPE_CMDBLOCK_END
    3738} CR_UNPACK_BUFFER_TYPE;
  • trunk/src/VBox/GuestHost/OpenGL/packer/opcodes.py

    r50973 r52451  
    3939enum_index = enum_index + 1
    4040print "\tCR_CMDBLOCKEND_OPCODE=%d," % enum_index
     41enum_index = enum_index + 1
     42print "\tCR_CMDBLOCKFLUSH_OPCODE=%d," % enum_index
    4143print "\tCR_NOP_OPCODE=255"
    4244if enum_index > 254:
  • trunk/src/VBox/GuestHost/OpenGL/packer/pack_beginend.c

    r52260 r52451  
    8585    CR_UNLOCK_PACKER_CONTEXT(pc);
    8686}
    87 
  • trunk/src/VBox/GuestHost/OpenGL/packer/pack_bufferobject.c

    r33475 r52451  
    100100        WRITE_NETWORK_POINTER( 28, (void *) writeback );
    101101        WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
     102        CR_CMDBLOCK_CHECK_FLUSH(pc);
    102103    CR_UNLOCK_PACKER_CONTEXT(pc);
    103104}
  • trunk/src/VBox/GuestHost/OpenGL/packer/pack_context.c

    r33475 r52451  
    4646        WRITE_NETWORK_POINTER( DISPLAY_NAME_LEN + 24, (void *) writeback );
    4747        WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
     48        CR_CMDBLOCK_CHECK_FLUSH(pc);
    4849    CR_UNLOCK_PACKER_CONTEXT(pc);
    4950}
     
    7879        WRITE_NETWORK_POINTER( DISPLAY_NAME_LEN + 24, (void *) writeback );
    7980        WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
     81        CR_CMDBLOCK_CHECK_FLUSH(pc);
    8082    CR_UNLOCK_PACKER_CONTEXT(pc);
    8183}
     
    107109        WRITE_NETWORK_POINTER( DISPLAY_NAME_LEN + 20, (void *) writeback );
    108110        WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
     111        CR_CMDBLOCK_CHECK_FLUSH(pc);
    109112    CR_UNLOCK_PACKER_CONTEXT(pc);
    110113}
     
    135138        WRITE_NETWORK_POINTER( DISPLAY_NAME_LEN + 20, (void *) writeback );
    136139        WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
     140        CR_CMDBLOCK_CHECK_FLUSH(pc);
    137141    CR_UNLOCK_PACKER_CONTEXT(pc);
    138142}
  • trunk/src/VBox/GuestHost/OpenGL/packer/pack_init.c

    r50984 r52451  
    1818#endif
    1919
    20 int cr_packer_cmd_blocks_enabled = 0;
     20uint32_t cr_packer_cmd_blocks_enabled = 0;
    2121
    2222CRPackContext *crPackNewContext( int swapping )
     
    6969}
    7070
    71 void crPackCmdBlocksEnable()
     71void crPackCapsSet(uint32_t u32Caps)
    7272{
    73     cr_packer_cmd_blocks_enabled = 1;
     73    cr_packer_cmd_blocks_enabled = (u32Caps & (CR_VBOX_CAP_CMDBLOCKS_FLUSH | CR_VBOX_CAP_CMDBLOCKS));
    7474}
  • trunk/src/VBox/GuestHost/OpenGL/packer/pack_pixels.c

    r50666 r52451  
    104104    WRITE_NETWORK_POINTER( 48, (char *) pixels );
    105105    WRITE_OPCODE( pc, CR_READPIXELS_OPCODE );
     106    CR_CMDBLOCK_CHECK_FLUSH(pc);
    106107    CR_UNLOCK_PACKER_CONTEXT(pc);
    107108}
     
    220221    WRITE_NETWORK_POINTER( 32, (void *) writeback );
    221222    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
     223    CR_CMDBLOCK_CHECK_FLUSH(pc);
    222224    CR_UNLOCK_PACKER_CONTEXT(pc);
    223225}
  • trunk/src/VBox/GuestHost/OpenGL/packer/pack_program.c

    r51313 r52451  
    282282    WRITE_NETWORK_POINTER(20 + n * sizeof(*programs), (void *) writeback);
    283283    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     284    CR_CMDBLOCK_CHECK_FLUSH(pc);
    284285    CR_UNLOCK_PACKER_CONTEXT(pc);
    285286}
     
    300301    WRITE_NETWORK_POINTER( 16 + len + 8, (void *) writeback );
    301302    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
     303    CR_CMDBLOCK_CHECK_FLUSH(pc);
    302304    CR_UNLOCK_PACKER_CONTEXT(pc);
    303305}
     
    317319    WRITE_NETWORK_POINTER( 16 + len + 8, (void *) writeback );
    318320    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
     321    CR_CMDBLOCK_CHECK_FLUSH(pc);
    319322    CR_UNLOCK_PACKER_CONTEXT(pc);
    320323}
  • trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c

    r51200 r52451  
    429429    WRITE_NETWORK_POINTER(28, (void *) writeback);
    430430    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     431    CR_CMDBLOCK_CHECK_FLUSH(pc);
    431432    CR_UNLOCK_PACKER_CONTEXT(pc);
    432433}
     
    449450    WRITE_NETWORK_POINTER(28, (void *) writeback);
    450451    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     452    CR_CMDBLOCK_CHECK_FLUSH(pc);
    451453    CR_UNLOCK_PACKER_CONTEXT(pc);
    452454}
     
    466468    WRITE_NETWORK_POINTER(24, (void *) writeback);
    467469    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     470    CR_CMDBLOCK_CHECK_FLUSH(pc);
    468471    CR_UNLOCK_PACKER_CONTEXT(pc);
    469472}
     
    482485        WRITE_NETWORK_POINTER(24, (void *) writeback);
    483486        WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     487        CR_CMDBLOCK_CHECK_FLUSH(pc);
    484488    CR_UNLOCK_PACKER_CONTEXT(pc);
    485489}
     
    498502        WRITE_NETWORK_POINTER(24, (void *) writeback);
    499503        WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     504        CR_CMDBLOCK_CHECK_FLUSH(pc);
    500505    CR_UNLOCK_PACKER_CONTEXT(pc);
    501506}
     
    515520    WRITE_NETWORK_POINTER(24, (void *) writeback);
    516521    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     522    CR_CMDBLOCK_CHECK_FLUSH(pc);
    517523    CR_UNLOCK_PACKER_CONTEXT(pc);
    518524}
     
    532538    WRITE_NETWORK_POINTER(24, (void *) writeback);
    533539    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     540    CR_CMDBLOCK_CHECK_FLUSH(pc);
    534541    CR_UNLOCK_PACKER_CONTEXT(pc);
    535542}
     
    549556    WRITE_NETWORK_POINTER(24, (void *) writeback);
    550557    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     558    CR_CMDBLOCK_CHECK_FLUSH(pc);
    551559    CR_UNLOCK_PACKER_CONTEXT(pc);
    552560}
     
    565573    WRITE_NETWORK_POINTER(24, (void *) writeback);
    566574    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     575    CR_CMDBLOCK_CHECK_FLUSH(pc);
    567576    CR_UNLOCK_PACKER_CONTEXT(pc);
    568577}
     
    581590    WRITE_NETWORK_POINTER(24, (void *) writeback);
    582591    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     592    CR_CMDBLOCK_CHECK_FLUSH(pc);
    583593    CR_UNLOCK_PACKER_CONTEXT(pc);
    584594}
     
    600610    WRITE_NETWORK_POINTER(8, (void *) writeback);
    601611    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     612    CR_CMDBLOCK_CHECK_FLUSH(pc);
    602613    CR_UNLOCK_PACKER_CONTEXT(pc);
    603614}
     
    619630    WRITE_NETWORK_POINTER(8, (void *) writeback);
    620631    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     632    CR_CMDBLOCK_CHECK_FLUSH(pc);
    621633    CR_UNLOCK_PACKER_CONTEXT(pc);
    622634}
  • trunk/src/VBox/GuestHost/OpenGL/packer/pack_swap_texture.c

    r33475 r52451  
    685685    WRITE_NETWORK_POINTER( sizeof( int ) + 24 + n*sizeof( *textures ), (void *) writeback );
    686686    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
     687    CR_CMDBLOCK_CHECK_FLUSH(pc);
    687688    CR_UNLOCK_PACKER_CONTEXT(pc);
    688689}
  • trunk/src/VBox/GuestHost/OpenGL/packer/pack_texture.c

    r35919 r52451  
    719719    WRITE_NETWORK_POINTER(20 + n * sizeof(*textures), (void *) writeback);
    720720    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
     721    CR_CMDBLOCK_CHECK_FLUSH(pc);
    721722    CR_UNLOCK_PACKER_CONTEXT(pc);
    722723}
  • trunk/src/VBox/GuestHost/OpenGL/packer/packer.py

    r52329 r52451  
    211211        print "\tWRITE_OPCODE( pc, %s );" % apiutil.OpcodeName( func_name )
    212212
     213    if "get" in apiutil.Properties(func_name):
     214        print '\tCR_CMDBLOCK_CHECK_FLUSH(pc);'
     215
    213216    print '\tCR_UNLOCK_PACKER_CONTEXT(pc);'
    214217    print '}\n'
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette