Your SlideShare is downloading. ×
PG-4039, RapidFire API, by Dmitry Kozlov
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

PG-4039, RapidFire API, by Dmitry Kozlov

590
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
590
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
31
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. RAPIDFIRE  API  FOR  WORKSTATIONS     BRUNO  STEFANIZZI   CHRISTOPHER  MAYER   DMITRY  KOZLOV  
  • 2. AMD  VDI  SOLUTIONS   Different  soluHons  for  each  workflows   GPU APU High End GPU Low Power Dual GPU card High Density High GPU density •  No Virtualization required •  Virtualization (VMWare, Citrix, Microsoft) •  1-1 •  1-1 or 1-n •  High Performance/Watt/$ ratio More flexibility in workflow Regular workflow •  Real time Graphics High     Performance   Low  Power   Tablet   2   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   Notebook   Desktop   WorkstaHon   Large Data •  •  Compute and Graphics
  • 3. AMD GPU for Server     AMD  FirePro Sky   For  GPU  Compute     For  Virtualiza@on     For  Virtualiza@on   AMD Radeon Sky Engineering  -­‐   CAD/CAE   Media  &   Entertainment   Medical   Educa@on  &   Research   Cloud  Gaming     3   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 4. AMD RapidFire Technology ! Most  remote  graphics  soluHons  are  CPU  based   ! RapidFire  is  dedicated  cloud  hardware  and  soVware  soluHon  with  API  to  simplify   integraHon   –   Deliver  more  HD  games  streams  per  GPU  with  low  latency  -­‐>  6  x  HD  720p30  fps   –   Leverage  AMD  hardware  on  both  server  and  client   –   Runs  on  any  hardware   Low   Latency   HD  Image/Audio   Quality   4   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   Mul@ple  Streams   Virtualiza@on   Enablement  
  • 5. AMD RapidFire Technology !   Design  for  many  use  cases  and  workflows   High   resolu@on   Collabora@ve   applica@on     with  mul@stream   5   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   Virtual  Desktop   Adap@ve  to     Network  environment  
  • 6. AMD RapidFire Technology !   4  independent  components  using  soVware  and  hardware  acceleraHon     Server   !  HW  H264  Encoding   Network   !  AdapHve  protocol   Client   !  HW  H264  Decoding   User  Interface   !  Touch   !  GPU  Encoding   !  CPU  Decoding   !  CPU  Encoding   !  Custom  GPU  Decoding   !  Mouse   !  Plugins  Encoding   !  MulH-­‐plaeorm  (Win/ Linux/IOS/Android)   !  MulH-­‐plaeorm   !  MulH-­‐stream   !  MulH-­‐API  (DX9/11/ OpenGL/   OpenCL)   !  EncrypHon   !  Desktop  and  window   direct  encoding   6   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   !  MulH-­‐API  (DX9/11/ OpenGL/   OpenCL)   !  Keyboard  
  • 7. RAPIDFIRE  TECHNOLOGY   DATA  FLOW  OVERVIEW   Client   Server   SERVER   SOFTWARE   NETWORK     NETWORK   FirePro  Sky  GPU     3D  ENGINE   ENCODE   FRAME  BUFFER   7   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   !  RF  API  module   !  external  module    DECODE   UI   FRAME  BUFFER  
  • 8. RAPIDFIRE  TECHNOLOGY   SERVER  SIDE  DATA  FLOW   FirePro  Sky  GPU   3D  ENGINE   EXECUTION   RESOURCES   FRAME  BUFFER   ENCODE   8   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   !  Network  component   transfers  UI  events  from   the  client  to  the  server   Server   SERVER   SOFTWARE   NETWORK  
  • 9. RAPIDFIRE  TECHNOLOGY   SERVER  SIDE  DATA  FLOW   FirePro  Sky  GPU   3D  ENGINE   EXECUTION   RESOURCES   FRAME  BUFFER   ENCODE   9   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   !  Network  component   transfers  UI  events  from   the  client  to  the  server   Server   SERVER   SOFTWARE   !  Server  renders  the  desktop   NETWORK  
  • 10. RAPIDFIRE  TECHNOLOGY   SERVER  SIDE  DATA  FLOW   FirePro  Sky  GPU   3D  ENGINE   EXECUTION   RESOURCES   FRAME  BUFFER   ENCODE   10   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   !  Network  component   transfers  UI  events  from   the  client  to  the  server   Server   SERVER   SOFTWARE   !  Server  renders  the  desktop   NETWORK  
  • 11. RAPIDFIRE  TECHNOLOGY   SERVER  SIDE  DATA  FLOW   FirePro  Sky  GPU   3D  ENGINE   EXECUTION   RESOURCES   FRAME  BUFFER   ENCODE   11   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   !  Network  component   transfers  UI  events  from   the  client  to  the  server   Server   SERVER   SOFTWARE   !  Server  renders  the  desktop   NETWORK   !  VCE  is  performing   asynchronous  desktop   capture  and  encoding  into   H264  video  stream  and  the   data  is  fetched  to  system   memory  by  the  app  
  • 12. RAPIDFIRE  TECHNOLOGY   SERVER  SIDE  DATA  FLOW   FirePro  Sky  GPU   3D  ENGINE   EXECUTION   RESOURCES   FRAME  BUFFER   ENCODE   12   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   !  Network  component   transfers  UI  events  from   the  client  to  the  server   Server   SERVER   SOFTWARE   !  Server  renders  the  desktop   NETWORK   !  VCE  is  performing   asynchronous  desktop   capture  and  encoding  into   H264  video  stream  and  the   data  is  fetched  to  system   memory  by  the  app   !  Video  stream  gets  send  to   the  client  
  • 13. RAPIDFIRE  TECHNOLOGY   CLIENT  SIDE  DATA  FLOW   !  Client  receives  H264   stream  from  the  server   using  RTSP  protocol   Client   NETWORK   CLIENT   SOFTWARE   DECODE  AUDIO   Input   devices   DECODE   UI   Audio  device   Radeon  GPU   13   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   FRAME  BUFFER  
  • 14. RAPIDFIRE  TECHNOLOGY   CLIENT  SIDE  DATA  FLOW   !   Client  receives  H264   stream  from  the  server   using  RTSP  protocol   Client   NETWORK   CLIENT   SOFTWARE   DECODE   Input   devices   H264  DECODE   UI   Audio  device   Radeon  GPU   14   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   FRAME  BUFFER   !  The  client  sends  the  stream   to  Radeon  GPU  which   performs  H264  hardware   decoding  to  the  frame   buffer  
  • 15. RAPIDFIRE  TECHNOLOGY   CLIENT  SIDE  DATA  FLOW   !  Client  receives  H264   stream  from  the  server   using  RTSP  protocol   Client   NETWORK   CLIENT   SOFTWARE   DECODE  AUDIO   Input   devices   DECODE   !  Sound  stream  is  decoded   using  soVware  audio  codec   and  sent  to  audio  hardware   UI   Audio  device   Radeon  GPU   15   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   !  The  client  sends  the  stream   to  Radeon  GPU  which   performs  H264  hardware   decoding  to  the  frame   buffer   FRAME  BUFFER  
  • 16. RAPIDFIRE  TECHNOLOGY   CLIENT  SIDE  DATA  FLOW   !  Client  receives  H264   stream  from  the  server   using  RTSP  protocol   Client   NETWORK   CLIENT   SOFTWARE   DECODE  AUDIO   Radeon  GPU   DECODE   !  The  client  sends  the  stream   to  Radeon  GPU  which   performs  H264  hardware   decoding  to  the  frame   buffer   !  Sound  stream  is  decoded   using  soVware  audio  codec   and  sent  to  audio  hardware   UI   !  UI  events  are  collected  by   the  client  and  sent  over  the   network  to  the  server   Audio  device   16   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   Input   devices   FRAME  BUFFER  
  • 17. THE  RAPIDFIRE  API   COMPONENTS   "  Server  component   The  server  component  provides  funcHons  for  the:   ‒  Encoding  of  video  and  audio  data   ‒  Color  space  conversion   ‒  Capturing  of  the  desktop   ‒  Handling  of  mulHple  render  targets   ‒  Interoperability  with  OpenGL,  D3D9  and  D3D11     "  Network  component   The  Network  component  is  a  sample  implementaHon   of  video  and  audio  streaming  based  on  the  LIVE555   Media  Server.       "  User  Interface   The  UI  component  provide  funcHons  to:   ‒  Capture  user  events  on  the  client   ‒  Send  the  events  to  the  server  for  processing   "  Client  component   The  client  component  provides  funcHons  for:   ‒  Decoding  of  video  and  audio  streams   ‒  Color  space  conversion   ‒  Interoperability  with  OpenGL,  D3D9  and  D3D11     17   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL    
  • 18. THE  RAPIDFIRE  API   THE  SERVER  COMPONENT   IniHalizaHon   Render  Loop   Create  RenderTarget   Draw  to  free   RenderTarget   rfCreateEncodeSession   rfRegisterRenderTarget   rfCreateEncoder   rfEncodeFrame   rfGetEncodedFrame   rfRtspServerSendFrame   Done?   18   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 19. THE  RAPIDFIRE  API   THE  SERVER  COMPONENT     IniHalizaHon   Create  RenderTarget   rfCreateEncodeSession   rfRegisterRenderTarget   rfCreateEncoder   "  rfCreateEncodeSession   ‒  Creates  an  encoding  session  on  the  server.  The  sessions  encapsulates  the  following   components:   ‒  Rendering  context/device   ‒  Compute  context  that  is  used  for  the  color  space  conversion   ‒  Render  targets   ‒  Desktop   ‒  The  encoder:  SW,  VCE  or  IDENTITY     ‒  The  following  session  types  are  supported   ‒  OpenGL   ‒  DX9  /  DX9Ex   ‒  DX11   ‒  Desktop  capturing   19   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 20. THE  RAPIDFIRE  API   THE  SERVER  COMPONENT     IniHalizaHon   Create  RenderTarget   rfCreateEncodeSession   rfRegisterRenderTarget   rfCreateEncoder   "  rfCreateEncodeSession   ‒  CreaHng  an  OpenGL  session  that  uses  the  VCE  HW  encoding          RFProperties  props[]  =  {  RF_GL_GRAPHICS_CTX,  (RFProperties)hGLRC,                                                            RF_GL_DEVICE_CTX,      (RFProperties)hDC,                                                            RF_ENCODER,                  (RFProperties)RF_VCE,                                                            0  };            //  Create  RapidFire  encoding  session          RFEncodeSession  session  =  rfCreateEncodeSession(props);     "  rfRegisterRenderTargt            for  (unsigned  int  i  =  0;  i  <  NUM_RENDER_TARGETS;  i++)          {                rfRegisterRenderTarget(session,  RF_RT_GL_TEXTURE,  uiTexName[i],  uiWidth,  uiHeight,  &renderTargetIdx[i]));          }         ‒  Input:  Name  of  the  OpenGL  Texture,  dimension  of  the  texture   ‒  Output:  The  index  used  by  RF  to  idenHfy  this  render  target   20   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 21. THE  RAPIDFIRE  API   THE  SERVER  COMPONENT     IniHalizaHon   "  rfCreateEncoder   ‒  CreaHng  an  Encoder  using  a  preset  configuraHon   rfCreateEncoder(session,  uiWidth,  uiHeight,  RF_ENCODE_FAST)     Create  RenderTarget   ‒  The  following  presets  are  supported:   rfCreateEncodeSession   rfRegisterRenderTarget   ‒  RF_ENCODE_FAST   ‒  RF_ENCODE_BALANCED   ‒  RF_ENCODE_QUALITY   "  rfCreateEncoder2   ‒  CreaHng  an  encoder  using  properHes   rfCreateEncoder   //  Create  encoder  using  properties   RFProperties  props[]  =  {  RF_ENCODER_PROFILE,  (RFProperties)RF_MAIN,                                                    RF_ENCODER_LEVEL,      (RFProperties)41,                                                    RF_ENCODER_BITRATE,  (RFProperties)6000000,                                                    RF_ENCODER_FPS,          (RFProperties)30,                                                    0  };     rfCreateEncoder2(session,  uiWidth,  uiHeight,  props));     21   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 22. THE  RAPIDFIRE  API   THE  SERVER  COMPONENT     Render  Loop   "  rfEncodeFrame   rfEncodeFrame(session,  renderTargetIdx[uiCurrentRT]));   Draw  to  free   RenderTarget   rfEncodeFrame   rfGetEncodedFrame   rfRtspServerSendFrame   Done?   ‒  Non-­‐blocking  call  to  submit  a  frame  for  encoding   "  rfGetEncodedFrame   //  Check  if  encoded  frame  is  ready   if  (rfIsEncodedFrameReady(session))   {        if  (rfGetEncodedFrame(session,  &uiBitStreamSize,  (void**)&pBitStreamdata)  ==  RF_STATUS_OK)        {              if  (uiBitStreamSize  >  0)              {                    //  Send  encoded  frame  to  Network                    rtspStatus  =  rfRtspServerSendFrame(rtsp_sn,  pBitStreamdata,  uiBitStreamSize,  tv.tv_sec,  tv.tv_usec,  1);              }        }                                       }   ‒  Check  first  if  a  frame  is  ready   ‒  If  a  frame  is  available  get  the  data  to  system  memory   ‒  Send  the  frame  over  the  network  to  the  client   22   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 23. THE  RAPIDFIRE  API   THE  CLIENT  COMPONENT     IniHalizaHon   Render  Loop   Create  Target  Textures   Wait  to  receive  frame   rfCreateDecodeSession   rfDecodeFrame   rfRegisterTargetTexture   Display  frame  using   Target  Texture   rfCreateVideoDecoder   23   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL   Done?  
  • 24. THE  RAPIDFIRE  API   THE  CLIENT  COMPONENT     IniHalizaHon   "  rfCreateDecodeSession   ‒  Creates  a  decoding  session  on  the  client.  The  sessions  encapsulates  the  following   components:   Create  Target  Textures   rfCreateDecodeSession   rfRegisterTargetTexture   rfCreateVideoDecoder   ‒  Rendering  context/device   ‒  Compute  context  that  is  used  for  the  color  space  conversion   ‒  Target  Textures   ‒  Decoder:  SW  or  UVD     ‒  The  following  session  are  supported   ‒  OpenGL   ‒  DX9  /  DX9Ex   ‒  DX11   24   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 25. THE  RAPIDFIRE  API   THE  CLIENT  COMPONENT     IniHalizaHon   Create  Target  Textures   rfCreateDecodeSession   rfRegisterTargetTexture   rfCreateVideoDecoder   "  rfCreateDecodeSession   RFProperties  props[]  =  {  RF_GL_GRAPHICS_CTX,  (RFProperties)hGLRC,                                                    RF_GL_DEVICE_CTX,      (RFProperties)hDC,                                                    RF_DECODER,                  (RFProperties)RF_UVD,                                                    0  };     //  Create  RapidFire  decoding  session   RFDecSession  session  =  rfCreateDecodeSession(props);     ‒  Creates  an  OpenGL  session  that  uses  the  UVD  decoder   "  rfRegisterTargetTexture   rfRegisterTargetTexture(session,  uiTextureName);     ‒  Registers  an  OpenGL  texture     ‒  The  texture  will  be  used  to  store  the  decoded  frame   25   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 26. THE  RAPIDFIRE  API   THE  CLIENT  COMPONENT     IniHalizaHon   "  rfCreateVideoDecoder   rfCreateVideoDecoder(session,  uiWidth,  uiHeight);     Create  Target  Textures   ‒  Create  the  actual  decoder   rfCreateDecodeSession   rfRegisterTargetTexture   rfCreateVideoDecoder   26   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 27. THE  RAPIDFIRE  API   THE  CLIENT  COMPONENT     Render  Loop   "  rfDecodeFrame   rfDecodeFrame(session);     Wait  to  receive  frame   rfDecodeFrame   ‒  Decodes  a  frame   ‒  The  decoded  frame  is  stored  in  the  registered  texture   ‒  Now  the  applicaHon  can  use  the  texture  to  display  the  frame   Display  frame  using   Target  Texture   Done?   27   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL  
  • 28. DISCLAIMER  &  ATTRIBUTION   The  informaHon  presented  in  this  document  is  for  informaHonal  purposes  only  and  may  contain  technical  inaccuracies,  omissions  and  typographical  errors.     The  informaHon  contained  herein  is  subject  to  change  and  may  be  rendered  inaccurate  for  many  reasons,  including  but  not  limited  to  product  and  roadmap   changes,  component  and  motherboard  version  changes,  new  model  and/or  product  releases,  product  differences  between  differing  manufacturers,  soVware   changes,  BIOS  flashes,  firmware  upgrades,  or  the  like.  AMD  assumes  no  obligaHon  to  update  or  otherwise  correct  or  revise  this  informaHon.  However,  AMD   reserves  the  right  to  revise  this  informaHon  and  to  make  changes  from  Hme  to  Hme  to  the  content  hereof  without  obligaHon  of  AMD  to  noHfy  any  person  of   such  revisions  or  changes.     AMD  MAKES  NO  REPRESENTATIONS  OR  WARRANTIES  WITH  RESPECT  TO  THE  CONTENTS  HEREOF  AND  ASSUMES  NO  RESPONSIBILITY  FOR  ANY   INACCURACIES,  ERRORS  OR  OMISSIONS  THAT  MAY  APPEAR  IN  THIS  INFORMATION.     AMD  SPECIFICALLY  DISCLAIMS  ANY  IMPLIED  WARRANTIES  OF  MERCHANTABILITY  OR  FITNESS  FOR  ANY  PARTICULAR  PURPOSE.  IN  NO  EVENT  WILL  AMD  BE   LIABLE  TO  ANY  PERSON  FOR  ANY  DIRECT,  INDIRECT,  SPECIAL  OR  OTHER  CONSEQUENTIAL  DAMAGES  ARISING  FROM  THE  USE  OF  ANY  INFORMATION   CONTAINED  HEREIN,  EVEN  IF  AMD  IS  EXPRESSLY  ADVISED  OF  THE  POSSIBILITY  OF  SUCH  DAMAGES.     ATTRIBUTION   ©  2013  Advanced  Micro  Devices,  Inc.  All  rights  reserved.  AMD,  the  AMD  Arrow  logo  and  combinaHons  thereof  are  trademarks  of  Advanced  Micro  Devices,   Inc.  in  the  United  States  and/or  other  jurisdicHons.    SPEC    is  a  registered  trademark  of  the  Standard  Performance  EvaluaHon  CorporaHon  (SPEC).  Other   names  are  for  informaHonal  purposes  only  and  may  be  trademarks  of  their  respecHve  owners.   28   |      PRESENTATION  TITLE      |      DECEMBER  4,  2013      |      CONFIDENTIAL