IP Library Granted Patent US 8,203,566
Granted Patent B2
US 8,203,566 · App. 12/475,287 · Granted Jun 19, 2012

Fixed function pipeline application remoting through a shader pipeline conversion layer

Assignee: Microsoft Corporation
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,203,566
App. No.
12/475,287
Granted
Jun 19, 2012
Kind
B2
Abstract

Systems, methods and computer readable media are disclosed for sending a client graphics data across a remote session for an application, where the application makes fixed function pipeline API calls and the client and server support shader pipeline API calls for the remote session. fixed function pipeline graphics calls from sent from the application are intercepted, wrapped, converted into their fixed function pipeline equivalent graphics call or calls and then sent across the communications network to the client according to a protocol of the remote session.

Claims (70)

1. A method for sending graphics calls for an application that uses a fixed function pipeline application programming interface (API) to a client via a remote session that supports sending shader pipeline API calls, comprising:

intercepting a fixed function pipeline API call of the application;

wrapping the fixed function pipeline call;

mapping the wrapped call to a shader pipeline API call;

sending the shader pipeline API call to the client;

intercepting a second fixed function pipeline API call of the application;

wrapping the second fixed function pipeline API call; and

in response to determining that a name, argument, and return value of the second fixed function pipeline call is the same as a name, argument, and return value of a second shader pipeline API call, sending the wrapped fixed function pipeline API call to the client the client processing the second fixed function pipeline API call as the second shader pipeline API call.

2. The method of claim 1 , wherein mapping the wrapped call to a shader pipeline API call comprises:

determining that the wrapped call has an equivalent shader pipeline call; and

mapping the wrapped call to the equivalent shader pipeline call.

3. The method of claim 2 , wherein the wrapped call has the equivalent shader pipeline call because the two calls have the same return value and the wrapped call's arguments comprise a subset of equivalent shader pipeline call's arguments; and

wherein mapping the wrapped call to the equivalent shader pipeline call comprises:

identifying the shader pipeline call with the wrapped call's arguments, and a default value for an argument of the shader pipeline call that does not have a corresponding argument in the fixed function pipeline call.

4. The method of claim 1 , wherein mapping the wrapped call to the shader pipeline API call comprises:

determining a shader pipeline API call that is influenced by the wrapped call.

5. The method of claim 4 , wherein an API call is influenced by a wrapped call when the shader pipeline call corresponds to a shader program that produces the same graphical output as the wrapped call.

6. The method of claim 1 , further comprising:

intercepting a plurality of fixed function pipeline API calls;

wrapping each of the plurality of fixed function pipeline API calls;

mapping each wrapped call to a shader pipeline API call;

optimizing the shader pipeline API calls; and

sending the optimized shader pipeline API calls to the client.

7. The method of claim 6 , wherein optimizing the shader pipeline calls comprises:

converting at least one of the wrapped calls from a 64-bit format to a corresponding 32-bit format.

8. The method of claim 6 , wherein optimizing the shader pipeline calls comprises:

in response to determining that a mesh corresponding to the shader pipeline calls has changed, but a vertex buffer corresponding to the mesh has not changed, sending the mesh to the client without sending the vertex buffer to the client.

9. The method of claim 6 , wherein optimizing the shader pipeline calls comprises:

determining at least one second shader pipeline call that results in the same output as the shader pipeline calls; and

substituting every second shader pipeline call for the shader pipeline calls.

10. The method of claim 6 , wherein optimizing the shader pipeline calls comprises:

in response to determining that a vertex buffer corresponding to the shader pipeline calls has changed, but a mesh corresponding to the vertex buffer has not changed, sending the vertex buffer to the client without sending the mesh to the client.

11. The method of claim 1 , wherein intercepting a fixed function pipeline API call of the application comprises:

when the application attempts to load a fixed function pipeline API library corresponding to the fixed function pipeline API call, loading an interceptor library.

12. A system for sending graphics calls for an application that uses a fixed function pipeline application programming interface (API) to a client via a remote session that supports sending shader pipeline API calls, comprising:

a processor; and

a memory communicatively coupled to the processor when the system is operational, the memory bearing processor-executable instructions that, when executed on the processor, cause the system to at least:

intercept a fixed function pipeline API call of the application;

wrap the fixed function pipeline call;

map the wrapped call to a shader pipeline API call;

send the shared pipeline API call to the client;

intercept a second fixed function pipeline API call of the application;

wrap the second fixed function pipeline API call; and

in response to determining that a name, argument, and return value of the second fixed function pipeline call is the same as a name, argument, and return value of a second shader pipeline API call, send the wrapped fixed function pipeline API call to the client, the client processing the second fixed function pipeline API call as the second shader pipeline API call.

13. The system of claim 12 , wherein processor-executable instructions that, when executed on the processor, cause the system to at least map the wrapped call to a shader pipeline API call further cause the system to at least:

determine that the wrapped call has an equivalent shader pipeline call.

14. The system of claim 13 , wherein the wrapped call has the equivalent shader pipeline call because the two calls have the same return value and the wrapped call's arguments comprise a subset of equivalent shader pipeline call's arguments; and

wherein the instructions that, when executed on the processor, cause the system to at least map the wrapped call to the equivalent shader pipeline call further cause the system to at least:

identify the shader pipeline call with the wrapped call's arguments, and a default value for an argument of the shader pipeline call that does not have a corresponding argument in the fixed function pipeline call.

15. The system of claim 12 , wherein the processor-executable instructions that, when executed on the processor, cause the system to at least map the wrapped call to the shader pipeline API call further cause the system to at least:

determine a shader pipeline API call that is influenced by the wrapped call.

16. The system of claim 15 , wherein a shader pipeline call is influenced by a wrapped call when the shader pipeline call corresponds to a shader program that produces the same graphical output as the wrapped call.

17. The system of claim 12 , wherein the memory further bears processor-executable instructions that, when executed on the processor, cause the system to at least:

intercept a plurality of fixed function pipeline API calls;

wrap each of the plurality of fixed function pipeline API calls;

map each wrapped call to a shader pipeline API call;

optimize the shader pipeline API calls; and

send the optimized shader pipeline API calls to the client.

18. The system of claim 17 , wherein the processor-executable instructions that, when executed on the processor, cause the system to at least optimize the shader pipeline calls comprises:

convert at least one of the wrapped calls from a 64-bit format to a corresponding 32-bit format.

19. The system of claim 17 , wherein the processor-executable instructions that, when executed on the processor, cause the system to at least optimize the shader pipeline calls further cause the system to at least:

in response to determining that a vertex buffer corresponding to the shader pipeline calls has changed, but a mesh corresponding to the vertex buffer has not changed, send the vertex buffer to the client without sending the mesh to the client.

20. A computer-readable storage medium excluding signals comprising computer-readable instructions, that when executed on a computer, cause the computer to perform operations comprising:

intercepting a fixed function pipeline API call of the application;

wrapping the fixed function pipeline call;

mapping the wrapped call to a shader pipeline API call;

sending the shader pipeline API call to the client;

intercepting a second fixed function pipeline API call of the application;

wrapping the second fixed function pipeline API call; and

in response to determining that a name, argument, and return value of the second fixed function pipeline call is the same as a name, argument, and return value of a second shader pipeline API call, sending the wrapped fixed function pipeline API call to the client, the client processing the second fixed function pipeline API call as the second shader pipeline API call.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 9, 2014
From: MICROSOFT CORPORATION
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 034564/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 16, 2009
From: ABDO, NADIM Y; MCMULLEN, MAX ALAN
To: MICROSOFT CORPORATION
Reel/Frame 022967/0907 →
Continuity (1)
Related Publication 20100302261A1 · Dec 2, 2010