<?xml version="1.0" encoding="UTF-8"?>
<outer-root xsi:noNamespaceSchemaLocation="DeviceResourceHierarchy.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <device-root name="PlatformWindowsCuda" uuid="{4AF89A25-22EB-43c6-8419-302BD1C05DB7}">
        <references>
            <reference name="UUID_CudaDeviceControl" value="{543aa4fe-e964-4366-8ff4-e74d00d0c561}"/>

            <!-- Memory resources -->
            <reference name="UUID_CudaArrayControlResource" value="{A8C8FA85-C1B3-4E83-9566-7021EC0338B1}"/>
            <reference name="UUID_CudaMemoryControlResource" value="{f0749573-2879-4f89-a365-13f52c038915}"/>
            <reference name="UUID_MockMemoryControlResource" value="{7B1BF654-B3A2-48d2-9AB4-E4A99FB13DCC}"/>
            <reference name="UUID_CudaBlockMemoryControlResource" value="{e752f7d9-fd8f-4696-a0f2-19eb363c0541}"/>
            <reference name="UUID_CudaThreadMemoryControlResource" value="{aa70e259-0e15-4c4a-b80f-d7425e09eec0}"/>
            <reference name="UUID_CudaSurfaceControlResource" value="{3E42761A-9963-4383-A722-BD4FBB6557C3}"/>
            <reference name="UUID_CudaTextureControlResource" value="{7F4F7347-531A-44D8-A51A-C9C08A5C1E68}"/>

            <!-- Module resources -->
            <reference name="UUID_CudaModuleMapResource" value="{FB69BB4F-16CE-4C74-BAA2-2731D72DBF06}"/>
            <reference name="UUID_CudaModuleResource" value="{6bfab454-e42a-41eb-92b3-56a2c0e77b5b}"/>
            <reference name="UUID_CudaSymbolicsResource" value="{3FA71C6C-7EA3-46EF-9163-BD3746AB8516}"/>
            <reference name="UUID_CudaDisassemblerResource" value="{10F01DDF-3CF0-4445-A7B0-A387A723618E}"/>

            <!-- Context resources -->
            <reference name="UUID_CudaContextMapResource" value="{5aeb9b1b-c528-4ce1-af69-6ab44dc7e35f}"/>
            <reference name="UUID_CudaContextResource" value="{8204f6e6-d22e-491a-9e2e-257dc6196bc2}"/>

            <!-- Breakpoint resources -->
            <reference name="UUID_CudaBreakpointControlResource" value="{0ffa2caa-74b1-4c49-9aa1-4c8e563ce771}"/>

            <!-- Registers resources -->
            <reference name="UUID_CudaRegistersResource" value="{0950573c-b322-4a27-88d3-932727a55e27}"/>
            
            <!-- Run control resources -->
            <reference name="UUID_CudaRunControlResource" value="{79e5d568-f76a-4451-a0e7-5d94b8536032}"/>

            <!-- Grid resources -->
            <reference name="UUID_CudaGridMapResource" value="{b0b70b93-3ac1-484f-9608-562724b1ba18}"/>
            <reference name="UUID_CudaGridResource" value="{c90e3575-b373-42b9-9f06-03ad66e67878}"/>
            <reference name="UUID_CudaGridMemoryControlResource" value="{be10788f-e148-4cb8-9e0e-574ada5cbf7d}"/>
            <reference name="UUID_CudaThreadResource" value="{26563649-1c90-4899-8736-78b329ffb6cb}"/>
            <reference name="UUID_CudaBlockResource" value="{d5cf8ceb-9a81-4a68-945c-8a694eb7fc10}"/>
            <reference name="UUID_CudaWarpResource" value="{344EC2A4-C8D7-4B32-8A54-378F0EE0174A}"/>

            <reference name="UUID_CudaSystemConfigurationResource" value="{d3968865-2980-4ddc-a0de-019de5c52704}"/>
            <reference name="UUID_CudaProcessConfigurationResource" value="{dcb6b7c0-f626-43c7-9329-f0482b8e19af}"/>

            <reference name="UUID_CudaStackFrameMap" value="{30ef8986-a269-4a95-b1b7-059b4ed393a4}"/>

            <!-- possibly this should be "locals" -->
            <reference name="UUID_CudaVariables" value="{b4f3fbee-5646-47c9-a082-eafb030524cc}"/>

            <reference name="UUID_ExpressionEvaluator" value="{b2b86a1d-1959-48c9-962a-51f0248dfcb6}"/>
            <reference name="UUID_CudaStackFrame" value="{211aa4ab-1f06-4279-8030-a55a5b491872}"/>

            <reference name="UUID_CudaStackFrameMemoryResource" value="{b7025bb5-851e-4ef3-9162-09eaf03e79e5}"/>
            
            <!-- process info -->
            <reference name="UUID_CudaProcessManager" value="{54266e12-290a-4634-bde9-0cea5db87cdd}"/>

        </references>
        
        <namespace name="Win32">
            <type name="root">
                <members>
                    <!-- Access via /Mock -->
                    <member type="MockResource" name="Mock"/>
                    
                    <!-- this is the NEW location for this, but to avoid versioning issues for preview, it
                    is also in the Device hierarchy. See the Device namespace below. -->
                    <member name="CudaSystemConfiguration" type="Cuda.CudaSystemConfigurationResource" service="true"/>
                </members>
            </type>
            <!-- This is explicitly named in the Platform.Windows.nvdevice. If this string changes, it must change EVERYWHERE! -->
            <type name="WindowsProcess">
                <members>
                    <member type="Cuda.PerProcessRoot" name="Cuda"/>
                </members>
            </type>

            <type name="ProcessManagerResource">
                <members>
                    <member type="Cuda.CudaProcessManager" name="CudaProcessManager" service="true"/>
                </members>
            </type>

            <type name="MockResource">
                <members>
                    <!-- Access via /Mock/Memory -->
                    <member type="Cuda.MockMemoryResource" name="Memory" service="true"/>
                </members>
            </type>
        </namespace>

        <namespace name="Cuda">
            <!-- Maps into /Process/Pid/Cuda -->
            <type name="PerProcessRoot" remote-resource-ref="UUID_CudaDeviceControl">
                <members>
                    <member type="ContextMapResource" name="Context" auto-create="false"/>
                    
                    <!-- /Process/Pid/Cuda/Configuration-->
                    <member type="CudaProcessConfigurationResource" name="Configuration" auto-create="false"/>
                    <member type="ExpressionEvaluatorResource" name="ExpressionEvaluator"/>
                </members>
            </type>
            
            <type name="ContextMapResource" remote-resource-ref="UUID_CudaContextMapResource">
                <members>
                    <!-- /Process/{}/Cuda/Context/{}/RunControl -->
                    <member type="RunControlResource" name="RunControl"/>
                </members>
                <default-member-map type="ContextResource" />
            </type>

            <type name="ContextResource" remote-resource-ref="UUID_CudaContextResource">
                <members>
                    <member type="ArrayResource" name="Array"/>
                    <member type="TextureResource" name="Texture"/>
                    <member type="SurfaceResource" name="Surface"/>
                    <member type="GridMapResource" name="Grid"/>
                    <member type="ModuleMapResource" name="Module"/>
                    <member type="MemoryResource" name="Memory"/>
                    <member type="BreakpointControlResource" name="BreakpointControl"/>
                </members>
            </type>

            <type name="GridMapResource" remote-resource-ref="UUID_CudaGridMapResource">
                <default-member-map type="GridResource"/>
            </type>

            <type name="ModuleMapResource" remote-resource-ref="UUID_CudaModuleMapResource">
                <default-member-map type="ModuleResource"/>
            </type>

            <type name="ModuleResource" remote-resource-ref="UUID_CudaModuleResource">
                <members>
                    <member type="SymbolicsResource" name="Symbolics"/>
                    <member type="DisassemblerResource" name="Disassembler"/>
                </members>
            </type>

            <type name="GridResource" remote-resource-ref="UUID_CudaGridResource">
                <members>
                    <!-- <member type="RunControlResource" name="RunControl"/> -->
                    <member type="BlockMapResource" name="Block"/>
                    <member type="GridMemoryResource" name="Memory"/>
                </members>
            </type>
            
            <type name="BlockMapResource">
                <!-- go all the way back up to context for validation -->
                <default-member-map type="BlockResource"/>
            </type>
            
            <type name="BlockResource" remote-resource-ref="UUID_CudaBlockResource">
                <members>
                    <member type="BlockMemoryResource" name="Memory"/>
                    <member type="WarpMapResource" name="Warp"/>
                </members>
            </type>
            
            <type name="WarpMapResource">
                <default-member-map type="WarpResource"/>
            </type>
            
            <type name="WarpResource" remote-resource-ref="UUID_CudaWarpResource">
                <members>
                    <member type="ThreadMapResource" name="Thread"/>
                </members>
            </type>

            <type name="ThreadMapResource">
                <default-member-map type="ThreadResource"/>
            </type>

            <type name="ThreadResource" remote-resource-ref="UUID_CudaThreadResource">
                <members>
                    <member type="ThreadMemoryResource" name="Memory"/>
                    <member type="StackFrameMapResource" name="Frame"/>
                </members>
            </type>

            <type name="StackFrameMapResource" remote-resource-ref="UUID_CudaStackFrameMap">
                <default-member-map type="StackFrameResource"/>
            </type>
            
            <type name="StackFrameResource" remote-resource-ref="UUID_CudaStackFrame">
                <members>
                    <member type="StackFrameMemoryResource" name="Memory"/>
                    <member type="RegistersResource" name="Registers"/>
                    <member type="VariablesResource" name="Locals"/>
                </members>
            </type>

            <type name="ArrayResource" remote-resource-ref="UUID_CudaArrayControlResource"/>
            <type name="CudaProcessManager" remote-resource-ref="UUID_CudaProcessManager"/>
            <type name="MockMemoryResource" remote-resource-ref="UUID_MockMemoryControlResource"/>
            <type name="StackFrameMemoryResource" remote-resource-ref="UUID_CudaStackFrameMemoryResource"/>
            <type name="ThreadMemoryResource" remote-resource-ref="UUID_CudaThreadMemoryControlResource"/>
            <type name="BlockMemoryResource" remote-resource-ref="UUID_CudaBlockMemoryControlResource"/>
            <type name="GridMemoryResource" remote-resource-ref="UUID_CudaGridMemoryControlResource"/>
            <type name="MemoryResource" remote-resource-ref="UUID_CudaMemoryControlResource"/>
            <type name="RegistersResource" remote-resource-ref="UUID_CudaRegistersResource"/>
            <type name="RunControlResource" remote-resource-ref="UUID_CudaRunControlResource"/>
            <type name="BreakpointControlResource"  remote-resource-ref="UUID_CudaBreakpointControlResource"/>
            <type name="SymbolicsResource" remote-resource-ref="UUID_CudaSymbolicsResource"/>
            <type name="DisassemblerResource" remote-resource-ref="UUID_CudaDisassemblerResource"/>
            <type name="VariablesResource" remote-resource-ref="UUID_CudaVariables"/>
            <type name="CudaProcessConfigurationResource" remote-resource-ref="UUID_CudaProcessConfigurationResource" />
            <type name="ExpressionEvaluatorResource" remote-resource-ref="UUID_ExpressionEvaluator" />
            <type name="CudaSystemConfigurationResource" remote-resource-ref="UUID_CudaSystemConfigurationResource"/>
            <type name="TextureResource" remote-resource-ref="UUID_CudaTextureControlResource"/>
            <type name="SurfaceResource" remote-resource-ref="UUID_CudaSurfaceControlResource"/>
        </namespace>

        <namespace name="DeviceManager">
            <type name="root">
                <members>
                    <!-- access with /CudaSystemConfiguration in device manager hierarchy...-->
                    <member name="CudaSystemConfiguration" type="CudaSystemConfigurationResource" service="true"/>
                </members>
            </type>

            <type name="CudaSystemConfigurationResource" remote-resource-ref="UUID_CudaSystemConfigurationResource"/>
        </namespace>
    </device-root>
</outer-root>
