Embodiments of the present invention relate to performance and debugging analysis of graphics applications. More specifically, embodiments of the present invention relate to a generic console interface capable of accessing a graphics application that is implementable on a modular platform that provides varying functionality through a plurality of dynamically loadable modules.
Most current graphics applications employ some form of a console interface. The console interface typically provides debugging and performance analysis of the graphics application. For instance, the console interface can be used for loading a new map in a gaming environment, loading a new level, displaying diagnostic information, etc. Typically, the console interface is tightly integrated with the corresponding graphics application. That is, the console interface is unique to the graphics application and provides a window into the internal operations of the graphics application.
However, because of the tight integration between the console interface and the corresponding graphics application, implementation and development of these console interfaces is limited. Usually, the console interface functions are provided as an afterthought. This is because graphics application developers do not have the time to develop a sophisticated console interface due to time and budget constraints.
In addition, because the console interface is integrated tightly with the graphics application code, it becomes difficult to extend the functionality of the console interface for that particular graphics application. Moreover, porting the functionality of a particular console interface from one graphics application to another is difficult because of the tight integration to a particular graphics application.
Also, console interfaces are typically proprietary to the application developer. As a result, console interface functions that are developed for one graphics application may not be licensable to other graphics applications, thereby limiting its use throughout the graphics application community.
As a result, graphics application developers are unable to efficiently improve the overall performance of their graphics application since the console interfaces are limited in their scope and functionality due to time and budget constraints.
Accordingly, the present invention provides, in various embodiments, a method and system for application development, wherein a generic console interface is provided that is capable of interacting with various graphics applications. The console interface is extensible, open, and sharable using function call interceptions to access the graphics application. Specifically, embodiments of the present invention provide a modular platform for a console interface to a graphics application that provides varying functionality through a plurality of dynamically loadable modules. Additionally, embodiments of the present invention provide for an open and extensible console interface in which various functions can be developed by third parties.
Specifically, in one embodiment, a method is disclosed for application development. In the method, a generic console interface is provided that is capable of interacting with various graphics application. The console interface is capable of accessing a graphics application by detouring at least one predefined system call made by the graphics application. Additionally, user input is intercepted that is related to the predefined system call that is detoured. The user input is communicated through the console interface. An operation is performed as implemented by the user input through a dynamically loadable module.
In another embodiment, a console interface is disclosed that is capable of providing a generic console interface that is extensible, open, and sharable using system calls interceptions to access the underlying graphics application. The console interface is implemented through a wrapper that surrounds the graphics application and includes a detour module for detouring predefined system calls made by the graphics application. The wrapper provides access to the graphics application. A basic interface is provided for providing a communication avenue for user input. A function call module provides for additional functionality to be provided to the console interface through the use of dynamically loadable modules. The console interface includes an open application program interface that allows third parties to create dynamically loadable modules implementable by the console interface.
The accompanying drawings, which are incorporated in and form a part of this specification, illustrate embodiments of the present invention and, together with the description, serve to explain the principles of the invention:
Reference will now be made in detail to the preferred embodiments of the present invention, examples of which are illustrated in the accompanying drawings. While the invention will be described in conjunction with the preferred embodiments, it will be understood that they are not intended to limit the invention to these embodiments. On the contrary, the invention is intended to cover alternatives, modifications and equivalents, which may be included within the spirit and scope of the invention as defined by the appended claims. Furthermore, in the following detailed description of embodiments of the present invention, numerous specific details are set forth in order to provide a thorough understanding of the present invention. However, it will be recognized by one of ordinary skill in the art that the present invention may be practiced without these specific details. In other instances, well-known methods, procedures, components, and circuits have not been described in detail as not to unnecessarily obscure aspects of the embodiments of the present invention.
Notation and Nomenclature:
Some portions of the detailed descriptions, which follow, are presented in terms of procedures, steps, logic blocks, processing, and other symbolic representations of operations on data bits within a computer memory. These descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. A procedure, computer executed step, logic block, process, etc., is here, and generally, conceived to be a self-consistent sequence of steps or instructions leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated in a computer system. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like.
It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussions, it is appreciated that throughout the present invention, discussions utilizing terms such as “accessing,” or “determining,” or “addressing,” or “mapping,” or “processing,” or the like, refer to the action and processes of a computer system (e.g., computer system 100 of
Computer System Platform:
With reference now to
Computer system 100 includes several buses for communicatively coupling the components of computer system 100. Communication bus 191 (e.g., a front side bus) couples north bridge 109 of chipset 103 to central processor unit 101. Communication bus 193 couples north bridge of chipset 103 to video or graphics subsystem 110. Communication buses 194-197 (e.g., PCI bus) couple south bridge 105 of chip set 103 to removable data storage device 104, input device 107, signal communications port 108, respectively. In addition, the main memory 102 is coupled to the north bridge 109 via a point to point connection 192 between the memory controller on the north bridge 109 and the dynamic random access memory (DRAM).
The components of computer system 100 cooperatively operate to provide versatile functionality and performance. The operating characteristics of functional components included in computer system 100 can change dynamically. In one exemplary implementation, the components of computer system 100 cooperatively operate to provide predetermined types of functionality, even though some of the functional components included in computer system 100 may be defective. Communications bus 191, 193, 194, 195 and 197 communicate information. Central processor 101 processes information. Main memory 102 stores information and instructions for the central processor 101. Removable data storage device 104 also stores information and instructions (e.g., functioning as a large information reservoir). Input device 107 provides a mechanism for inputting information and/or for pointing to or highlighting information on display 120. Signal communication port 108 provides a communication interface to exterior devices (e.g., an interface with a network). Display device 120 displays information in accordance with data stored in frame buffer 115. Video or graphics processor 111 processes video or graphics commands from central processor 101 and provides the resulting data to frame buffers 115 for storage and retrieval by display monitor 120.
The operational configurations of the functional components included in computer system 100 are flexibly adaptable to meet a variety of objectives. For example, operational configurations of the functional components included in computer system 100 are configurable to maintain execution of a type of function even if some of the functional components are disabled. In one exemplary implementation, central processor 101 and graphics processor 111 are still capable of executing the same type of processing functions and main memory 102 stores information even though some of the functional components (e.g., floating point component, pixel shader component, memory cell component, etc) are disabled. In one embodiment, the processors include a plurality of functional components for performing processing operations. The operational characteristics of the functional components can be altered. In one embodiment, the processors include a plurality of functional components for performing processing operations, wherein defective functional components included in the plurality of functional components are disabled. The processors also include a workflow control component for dispensing workflow to enabled processing components and preventing distribution of workflow to the disabled defective components. In one exemplary implementation, computer system 100 can continue to provide full functionality even though the functionality may be provided at a reduced performance level (e.g., slower).
Method and System for Providing a Generic Console Interface for a Graphics Application:
As shown in
Also shown in
More particularly, the wrapper 210 uses a detours library to detour a number of system calls made to and from the graphics application 220, in accordance with one embodiment. For instance, the wrapper intercepts keyboard handlers and graphics application program interface (API) calls. As such, the present embodiment is able to intercept system calls made by the graphics application 220 and performs operations within the graphics application as provided for in the console interface. Additionally, the wrapper 210 adds functionality to interact with the user and over resulting information over the existing graphics application 220, as will be described in
System calls by the graphics application 220 are filtered through the wrapper 210 and are passed down to the graphics pipeline for further processing. The graphics pipeline of
The traditional graphics pipeline architecture is typically optimized for high-speed rending operations (e.g., texturing, lighting, shading, etc.) using a widely implemented graphics programming APIs, such as, for example, the OpenGL™ graphics language, Direct3D™, and the like. The graphics API 230 implements the graphics programming API utilized by the graphics application 220.
Additionally, a software driver 240 is provided to provide an interface between the graphics API 230 and the graphics processing unit (GPU) hardware 250. The driver 240 provides the software implementation to create the images displayed on the monitor, for example.
The GPU hardware 250 includes the multi-stage, functional units of the graphics pipeline architecture to implement fast, high quality rendering of complex scenes. The functional units operate in parallel, and can be viewed as separate special purpose processors. For brevity and clarity, a full discussion of the graphics pipeline is not provided, but it is understood that embodiments of the present invention are capable of providing a console interface for use with graphics applications that render images through a graphics pipeline.
The functional units in the GPU hardware 250 are specialized integrated circuit devices that are commonly used in graphics systems to accelerate the performance of a 3-D rendering application, as an example. The GPU hardware 250 is commonly used in conjunction with a central processing unit (CPU) to generate three-dimensional images for one or more applications executing on a computer system. The GPU hardware 250 encompasses the graphics pipeline for processing data. Functional components listed below in part for the GPU hardware 250 include vertex and index fetching, vertex shading (transform and lighting), pixel shading, texture loading, raster operations (ROP), etc.
The console interface 300 includes a detour module 310 that detours system calls made by a graphics application to provide access to the graphics application. For brevity and clarity of understanding a brief discussion of the operations of the detour module 310 is provided below. The detours module 310 is a library capable of intercepting arbitrary, and predefined functions on a computer system.
In addition, embodiments of the present invention provide for a generic interface 320 that is capable of accessing the graphics application by detouring the predefined system calls made by the graphics application. That is, the present embodiment is capable of gathering information regarding the operation of the graphics application through the system 300. In one embodiment, the interface 320 is displayed over the graphics application.
In one embodiment, the interface 320 includes the core functionality of the console interface. Specifically, the core functionality includes closed DLLs that implemented the core functions of the console interface. For instance, some core functions are listed below, but are not intended to be exhaustive: snoop key-presses for enabling the console interface; echo and parse typed keystrokes for commands for the console interface; a help system; loading and unloading of DLLs functionality; an API that allows third parties to create new DLLs that are implementable by the system 300. In essence, the core functionality includes loading and unloading of DLLs, forwarding user input as appropriate, parse and understand commands (e.g., help, list DLLs, etc.). Additional functionalities include performance utilization and debug operations.
In one embodiment, the interface 320 is capable of communicating with any graphics application. That is, the interface 320 through the wrapper functionality of the system 300 is able to access any graphics application through the intercepted system calls. As such, the interface 320 provides for core functionality of a console interface for interacting with the underlying graphics application.
The console interface 300 also includes an interceptor 330 for intercepting user input related to the predefined system call that is detoured. In one embodiment, the interceptor 330 is a command line interface for accepting instructions from a user to be implemented by the console interface 300. The interceptor 330 is able to parse and understand commands issued for example through the command line interface, such as loading and unloading of a DLL.
The interceptor 330 provides for the intercepting and forwarding of user input as appropriate. The interceptor provides the communication means for a user to interface with the console interface 300.
As shown in
In one embodiment, the function call module includes a pre-call function module for calling all pre-call functions related to the predefined system call that is detoured. That is, before the predefined system call is performed, the console interface 300 implements all related pre-call functions. In one embodiment, the function call module 340 calls all pre-calls defined in all the third-party loaded DLLs (e.g., in load order).
In another embodiment, the function call module includes a post-call function module for calling all post-call functions related to the predefined system call that is detoured. That is, after the predefined system call is performed, for example, the console interface calls all post-calls for the API function defines in all third-party loaded DLLs (e.g., in reverse order).
In addition, the function call module is able to call the system call (e.g., graphics API call) depending on what is dictated by the pre-call operations. That is, the pre-call operations may dictate that the console interface 300 skip the predefined system call that is detoured. In that case, only the pre and post-call operations are performed.
As shown in
At 410, the present embodiment provides a console interface that is capable of accessing a graphics application by detouring at least one predefined system call made by the graphics application. This is accomplished by wrapping the graphics application with the console interface, such that all instructions, calls, etc. going into or out of the graphics application is intercepted by the console interface. In this way, the console interface is able to access the graphics application by performing additional, detour functionality in place of the calls that were intercepted.
In one embodiment, the present embodiment performs pre and post functions for graphics calls. For instance, the present embodiment intercepts the predefined system call. Thereafter, the present embodiment performs pre-call operations by calling all pre-calls defined in third party DLLs in load order. The present embodiment then makes the graphics API call, or skips the graphics API call if the pre-call functionality sets skip conditions). Afterwards, the present embodiment calls all post-calls for the graphics API call that are defined in the user-loadable DLLs, in reverse load order.
In one embodiment, the console interface is displayed over the graphics application in a heads up display (HUD) format. That is, the information requested by the user through the console interface is dynamically displayed on the console interface over the graphics application.
At 420, the present embodiment intercepts user input related to the predefined system call that is detoured. The user input is communicated through the console interface. As such, the present embodiment provides for the user to provide additional input as to the operations being performed as a result of intercepting the predefined system call that is detoured.
At 430, the present embodiment performs an operation as implemented by the user input through a corresponding dynamically loadable module. As such, the present embodiment is able to extend the functionality of the console interface through the use of varying dynamically loadable modules.
In one embodiment, the dynamically loadable modules are created through an open API that defines additional and extensible functionality for the console interface. These dynamically loadable modules can be created by third parties that create new and extendable features to the console interface that can be implementable on any graphics application.
In addition to defining a number of pre and post detour calls, the created DLLs also expose their available functionality, in accordance with one embodiment of the present invention. For instance, each DLL exports the name, syntax, and help information of their corresponding commands, so that the console interface's parser and help system can fully integrate these third party DLLs into the workflow.
In addition, another embodiment of the present invention provides a mechanism by which application developers are capable of communicating application dependent information. For example, various debug-visualization techniques find it useful to alter the current camera position (e.g., to visualize the current view frustum from another viewpoint). As such, the present embodiment can make “SetInfo( )” and “GetInfo( )” calls to track application specific information.
Accordingly, the present invention provides, in various embodiments, a method and system for application development, wherein a generic console interface is provided that is capable of interacting with various graphics applications. The console interface is extensible, open, and sharable using function call interceptions to access the graphics application. Specifically, embodiments of the present invention provide a modular platform for a console interface to a graphics application that provides varying functionality through a plurality of dynamically loadable modules. Additionally, embodiments of the present invention provide for an open and extensible console interface in which various functions can be developed by third parties.
The foregoing descriptions of specific embodiments of the present invention have been presented for purposes of illustration and description. They are not intended to be exhaustive or to limit the invention to the precise forms disclosed, and obviously many modifications and variations are possible in light of the above teaching. The embodiments were chosen and described in order to best explain the principles of the invention and its practical application, to thereby enable others skilled in the art to best utilize the invention and various embodiments with various modifications are suited to the particular use contemplated. It is intended that the scope of the invention be defined by the claims appended hereto and their equivalents.
| Number | Name | Date | Kind |
|---|---|---|---|
| 5072412 | Henderson et al. | Dec 1991 | A |
| 5596702 | Stucka et al. | Jan 1997 | A |
| 5643086 | Alcorn et al. | Jul 1997 | A |
| 5745115 | Purple et al. | Apr 1998 | A |
| 5752062 | Gover et al. | May 1998 | A |
| 5757919 | Herbert et al. | May 1998 | A |
| 5815154 | Hirschtick et al. | Sep 1998 | A |
| 5892904 | Atkinson et al. | Apr 1999 | A |
| 5920725 | Ma et al. | Jul 1999 | A |
| 5970147 | Davis | Oct 1999 | A |
| 5978484 | Apperson et al. | Nov 1999 | A |
| 5999737 | Srivastava | Dec 1999 | A |
| 6016474 | Kim et al. | Jan 2000 | A |
| 6157618 | Boss et al. | Dec 2000 | A |
| 6222533 | Notani et al. | Apr 2001 | B1 |
| 6222537 | Smith et al. | Apr 2001 | B1 |
| 6266416 | Sigbjørnsen et al. | Jul 2001 | B1 |
| 6330008 | Razdow et al. | Dec 2001 | B1 |
| 6362825 | Johnson | Mar 2002 | B1 |
| 6412039 | Chang | Jun 2002 | B1 |
| 6412106 | Leask et al. | Jun 2002 | B1 |
| 6501491 | Brown et al. | Dec 2002 | B1 |
| 6668325 | Collberg et al. | Dec 2003 | B1 |
| 6684389 | Tanaka et al. | Jan 2004 | B1 |
| 6732060 | Lee | May 2004 | B1 |
| 6760903 | Morshed et al. | Jul 2004 | B1 |
| 6901582 | Harrison | May 2005 | B1 |
| 6943800 | Taylor et al. | Sep 2005 | B2 |
| 6957191 | Belcsak et al. | Oct 2005 | B1 |
| 6965994 | Brownell et al. | Nov 2005 | B1 |
| 7016972 | Bertram et al. | Mar 2006 | B2 |
| 7047519 | Bates et al. | May 2006 | B2 |
| 7076740 | Santori et al. | Jul 2006 | B2 |
| 7086006 | Subramanian et al. | Aug 2006 | B2 |
| 7095416 | Johns et al. | Aug 2006 | B1 |
| 7107484 | Yamazaki et al. | Sep 2006 | B2 |
| 7173635 | Amann et al. | Feb 2007 | B2 |
| 7237151 | Swoboda et al. | Jun 2007 | B2 |
| 7260066 | Wang et al. | Aug 2007 | B2 |
| 7277826 | Castelli et al. | Oct 2007 | B2 |
| 7383205 | Peinado et al. | Jun 2008 | B1 |
| 7395426 | Lee et al. | Jul 2008 | B2 |
| 7401116 | Chalfin et al. | Jul 2008 | B1 |
| 7401242 | Abernathy et al. | Jul 2008 | B2 |
| 7420563 | Wakabayashi | Sep 2008 | B2 |
| 7505953 | Doshi | Mar 2009 | B2 |
| 7555499 | Shah et al. | Jun 2009 | B2 |
| 7765500 | Hakura et al. | Jul 2010 | B2 |
| 7778800 | Aguaviva et al. | Aug 2010 | B2 |
| 7891012 | Kiel et al. | Feb 2011 | B1 |
| 20010034835 | Smith | Oct 2001 | A1 |
| 20010044928 | Akaike et al. | Nov 2001 | A1 |
| 20020157086 | Lewis et al. | Oct 2002 | A1 |
| 20020175839 | Frey | Nov 2002 | A1 |
| 20030043022 | Burgan et al. | Mar 2003 | A1 |
| 20030120935 | Teal et al. | Jun 2003 | A1 |
| 20030177476 | Sarma et al. | Sep 2003 | A1 |
| 20030214660 | Plass et al. | Nov 2003 | A1 |
| 20040085894 | Wang et al. | May 2004 | A1 |
| 20040088719 | Gazdik et al. | May 2004 | A1 |
| 20040130552 | Duluk, Jr. et al. | Jul 2004 | A1 |
| 20040158824 | Gennip et al. | Aug 2004 | A1 |
| 20040162989 | Kirovski | Aug 2004 | A1 |
| 20040268311 | Pizzoli et al. | Dec 2004 | A1 |
| 20050198051 | Marr et al. | Sep 2005 | A1 |
| 20050222881 | Booker | Oct 2005 | A1 |
| 20050243094 | Patel et al. | Nov 2005 | A1 |
| 20050268288 | Nattinger | Dec 2005 | A1 |
| 20050273652 | Okawa et al. | Dec 2005 | A1 |
| 20050278684 | Hamilton et al. | Dec 2005 | A1 |
| 20060047958 | Morais | Mar 2006 | A1 |
| 20060079333 | Morrow et al. | Apr 2006 | A1 |
| 20060080625 | Bose et al. | Apr 2006 | A1 |
| 20060109846 | Lioy et al. | May 2006 | A1 |
| 20060161761 | Schwartz et al. | Jul 2006 | A1 |
| 20060185017 | Challener et al. | Aug 2006 | A1 |
| 20070115292 | Brothers et al. | May 2007 | A1 |
| 20070274284 | Dendukuri et al. | Nov 2007 | A1 |
| 20080007563 | Aronson et al. | Jan 2008 | A1 |
| 20080095090 | Lee et al. | Apr 2008 | A1 |
| Entry |
|---|
| Duca et al.; A Relational Debugging Engine for the Graphics Pipeline; International Conference on Computer Graphics and Interactive Techniques; ACM SIGGRAPH 2005; pp. 453-463; ISSN:0730-0301. |
| “maxVUE Graphic Editor”, Metso Automation, 2005, pp. 1-6, http://www.metsoautomation.com/automation/indes.nsf/FR?Readform&ATL=autom- ation/ed.sub.--prod.nsf/WebWID/WTB-041110-22256F-2445A; eHB. |
| “Ati Radeon X800, 3D Architecture White Paper”, ATI, 2005, pp. 1-13, with proof of seniority (4pages), according to ACM bibliography regarding the document: “The Direct3D 10 system”, ACM TOG, vol. 25, Iss.3 (Jul. 2006), Reference 1; eHG. |
| N. Tatarchuk, “New RenderMonkey Features for DirectX and OpenGL Shader Development”, Game Developers Conference, Mar. 2004. |
| C. Cebenoyan and M. Wloka, “optimizing the graphics pipeline”, 2003, Nvidia GDC Presentation Slide. |
| gDEBugger, graphicREMEDY, http://www.gremedy.com/, Jul. 29, 2005. |
| gDEBugger, graphicRemedy, http://www.gremedy.com, Aug. 8, 2006. |
| Josh Lessard, “Profiling Concurrent Programs Using Hardware Counters”, May 2005, University of Waterloo, Thesis. |
| Dror G. Feitelson and Larry Rudolph, “Toward Convergence in Job Scheduling for Parallel Supercomputers”, Aug. 1996, Springer, Job Scheduling Strategies for Parallel Processing: IPPS '96 Workshop Hololulu, Hawaii, Apr. 16, 1996 Proceedings. |
| Jeffrey K. Hollingsworth and Barton P. Miller, “Dynamic Control of Performance Monitoring on Large Scale Parallel Systems”, Jul. 23, 1993, ACM, International Conference on Supercomputing: Proceedings of the 7th International Conference on Supercomputing, pp. 185-194. |