Example #1
0
 /// <summary>
 /// Create a new upload buffer
 /// </summary>
 /// <param name="device">The device to create the buffer on</param>
 /// <param name="resourceDesc">The resource to create</param>
 /// <param name="state">The initial state of the buffer</param>
 /// <param name="flags">Any other heap flags</param>
 public UploadBuffer(
     ID3D12Device *device,
     D3D12_RESOURCE_DESC resourceDesc,
     D3D12_RESOURCE_STATES state,
     D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE)
     : base(device, resourceDesc, state, D3D12_HEAP_TYPE.D3D12_HEAP_TYPE_UPLOAD, flags)
 {
 }
Example #2
0
 /// <summary>
 /// Create a new default buffer
 /// </summary>
 /// <param name="device">The device to create the buffer on</param>
 /// <param name="resourceDesc">The resource to create</param>
 /// <param name="state">The initial state of the buffer</param>
 /// <param name="flags">Any other heap flags</param>
 /// <param name="optimizedClearValue">If not <code>null</code>, the optimized clear value for the buffer</param>
 public DefaultResource(
     ID3D12Device *device,
     D3D12_RESOURCE_DESC resourceDesc,
     D3D12_RESOURCE_STATES state,
     D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE,
     D3D12_CLEAR_VALUE?optimizedClearValue = null
     )
     : base(device, resourceDesc, state, D3D12_HEAP_TYPE.D3D12_HEAP_TYPE_DEFAULT, flags, optimizedClearValue)
 {
 }
Example #3
0
    public static D3D12_RESOURCE_BARRIER InitTransition(ID3D12Resource *pResource, D3D12_RESOURCE_STATES stateBefore, D3D12_RESOURCE_STATES stateAfter, uint subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES, D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE)
    {
        D3D12_RESOURCE_BARRIER result = default;

        result.Type  = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
        result.Flags = flags;
        result.Anonymous.Transition.pResource   = pResource;
        result.Anonymous.Transition.StateBefore = stateBefore;
        result.Anonymous.Transition.StateAfter  = stateAfter;
        result.Anonymous.Transition.Subresource = subresource;
        return(result);
    }
Example #4
0
 /// <summary>
 /// Creates a new <see cref="GpuResourceDesc"/>
 /// </summary>
 /// <param name="resourceFormat">The <see cref="GpuResourceFormat"/> describing the resource format and dimensions</param>
 /// <param name="gpuMemoryType">The type of GPU memory this resource will be on</param>
 /// <param name="initialState">The initial state of the resource</param>
 /// <param name="allocFlags">Any additional allocation flags passed to the allocator</param>
 /// <param name="clearValue">If this resource is a texture, the clear value for which it is optimised</param>
 /// <param name="heapFlags">Any additional flags used for creating or selecting the allocation heap</param>
 public GpuResourceDesc(
     GpuResourceFormat resourceFormat,
     GpuMemoryType gpuMemoryType,
     D3D12_RESOURCE_STATES initialState,
     GpuAllocFlags allocFlags     = GpuAllocFlags.None,
     D3D12_CLEAR_VALUE?clearValue = null,
     D3D12_HEAP_FLAGS heapFlags   = D3D12_HEAP_FLAGS.D3D12_HEAP_FLAG_NONE
     )
 {
     ResourceFormat = resourceFormat;
     GpuMemoryType  = gpuMemoryType;
     InitialState   = initialState;
     AllocFlags     = allocFlags;
     ClearValue     = clearValue;
     HeapFlags      = heapFlags;
 }
Example #5
0
        public virtual int CreateReservedResource(
            ref D3D12_RESOURCE_DESC pDesc,
            D3D12_RESOURCE_STATES InitialState,
            ref D3D12_CLEAR_VALUE pOptimizedClearValue,
            ref Guid riid,
            out IntPtr ppvResource
            )
        {
            var fp = GetFunctionPointer(30);

            if (m_CreateReservedResourceFunc == null)
            {
                m_CreateReservedResourceFunc = (CreateReservedResourceFunc)Marshal.GetDelegateForFunctionPointer(fp, typeof(CreateReservedResourceFunc));
            }

            return(m_CreateReservedResourceFunc(m_ptr, ref pDesc, InitialState, ref pOptimizedClearValue, ref riid, out ppvResource));
        }
Example #6
0
        public virtual int CreateReservedResource1(
            ref D3D12_RESOURCE_DESC pDesc,
            D3D12_RESOURCE_STATES InitialState,
            ref D3D12_CLEAR_VALUE pOptimizedClearValue,
            ID3D12ProtectedResourceSession pProtectedSession,
            ref Guid riid,
            out IntPtr ppvResource
            )
        {
            var fp = GetFunctionPointer(55);

            if (m_CreateReservedResource1Func == null)
            {
                m_CreateReservedResource1Func = (CreateReservedResource1Func)Marshal.GetDelegateForFunctionPointer(fp, typeof(CreateReservedResource1Func));
            }

            return(m_CreateReservedResource1Func(m_ptr, ref pDesc, InitialState, ref pOptimizedClearValue, pProtectedSession != null ? pProtectedSession.Ptr : IntPtr.Zero, ref riid, out ppvResource));
        }
Example #7
0
        public virtual int CreatePlacedResource(
            ID3D12Heap pHeap,
            ulong HeapOffset,
            ref D3D12_RESOURCE_DESC pDesc,
            D3D12_RESOURCE_STATES InitialState,
            ref D3D12_CLEAR_VALUE pOptimizedClearValue,
            ref Guid riid,
            out IntPtr ppvResource
            )
        {
            var fp = GetFunctionPointer(29);

            if (m_CreatePlacedResourceFunc == null)
            {
                m_CreatePlacedResourceFunc = (CreatePlacedResourceFunc)Marshal.GetDelegateForFunctionPointer(fp, typeof(CreatePlacedResourceFunc));
            }

            return(m_CreatePlacedResourceFunc(m_ptr, pHeap != null ? pHeap.Ptr : IntPtr.Zero, HeapOffset, ref pDesc, InitialState, ref pOptimizedClearValue, ref riid, out ppvResource));
        }
Example #8
0
        public virtual int CreateCommittedResource(
            ref D3D12_HEAP_PROPERTIES pHeapProperties,
            D3D12_HEAP_FLAGS HeapFlags,
            ref D3D12_RESOURCE_DESC pDesc,
            D3D12_RESOURCE_STATES InitialResourceState,
            ref D3D12_CLEAR_VALUE pOptimizedClearValue,
            ref Guid riidResource,
            out IntPtr ppvResource
            )
        {
            var fp = GetFunctionPointer(27);

            if (m_CreateCommittedResourceFunc == null)
            {
                m_CreateCommittedResourceFunc = (CreateCommittedResourceFunc)Marshal.GetDelegateForFunctionPointer(fp, typeof(CreateCommittedResourceFunc));
            }

            return(m_CreateCommittedResourceFunc(m_ptr, ref pHeapProperties, HeapFlags, ref pDesc, InitialResourceState, ref pOptimizedClearValue, ref riidResource, out ppvResource));
        }
Example #9
0
 public int CreateCommittedResource([NativeTypeName("const D3D12_HEAP_PROPERTIES *")] D3D12_HEAP_PROPERTIES *pHeapProperties, D3D12_HEAP_FLAGS HeapFlags, [NativeTypeName("const D3D12_RESOURCE_DESC *")] D3D12_RESOURCE_DESC *pDesc, D3D12_RESOURCE_STATES InitialResourceState, [NativeTypeName("const D3D12_CLEAR_VALUE *")] D3D12_CLEAR_VALUE *pOptimizedClearValue, [NativeTypeName("const IID &")] Guid *riidResource, [NativeTypeName("void **")] void **ppvResource)
 {
     return(((delegate * unmanaged <ID3D12Device *, D3D12_HEAP_PROPERTIES *, D3D12_HEAP_FLAGS, D3D12_RESOURCE_DESC *, D3D12_RESOURCE_STATES, D3D12_CLEAR_VALUE *, Guid *, void **, int>)(lpVtbl[27]))((ID3D12Device *)Unsafe.AsPointer(ref this), pHeapProperties, HeapFlags, pDesc, InitialResourceState, pOptimizedClearValue, riidResource, ppvResource));
 }
 public int CreateWrappedResource([NativeTypeName("IUnknown *")] IUnknown *pResource12, [NativeTypeName("const D3D11_RESOURCE_FLAGS *")] D3D11_RESOURCE_FLAGS *pFlags11, D3D12_RESOURCE_STATES InState, D3D12_RESOURCE_STATES OutState, [NativeTypeName("const IID &")] Guid *riid, [NativeTypeName("void **")] void **ppResource11)
 {
     return(((delegate * stdcall <ID3D11On12Device1 *, IUnknown *, D3D11_RESOURCE_FLAGS *, D3D12_RESOURCE_STATES, D3D12_RESOURCE_STATES, Guid *, void **, int>)(lpVtbl[3]))((ID3D11On12Device1 *)Unsafe.AsPointer(ref this), pResource12, pFlags11, InState, OutState, riid, ppResource11));
 }
 public int ReleaseResource([NativeTypeName("ID3D11On12On7Resource *")] void *pResource, D3D12_RESOURCE_STATES state)
 {
     return(((delegate * unmanaged <ID3D11On12On7Device *, void *, D3D12_RESOURCE_STATES, int>)(lpVtbl[1]))((ID3D11On12On7Device *)Unsafe.AsPointer(ref this), pResource, state));
 }
        public int CreateResource([NativeTypeName("const ALLOCATION_DESC*")] D3D12MA_ALLOCATION_DESC *pAllocDesc, [NativeTypeName("const D3D12_RESOURCE_DESC*")] D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, [NativeTypeName("const D3D12_CLEAR_VALUE*")] D3D12_CLEAR_VALUE *pOptimizedClearValue, D3D12MA_Allocation **ppAllocation, [NativeTypeName("REFIID")] Guid *riidResource, void **ppvResource)
        {
            if ((pAllocDesc == null) || (pResourceDesc == null) || (ppAllocation == null))
            {
                D3D12MA_ASSERT(false); // "Invalid arguments passed to Allocator::CreateResource."
                return(E_INVALIDARG);
            }

            using var debugGlobalMutexLock = D3D12MA_DEBUG_GLOBAL_MUTEX_LOCK();

            return(m_Pimpl->CreateResource(pAllocDesc, pResourceDesc, InitialResourceState, pOptimizedClearValue, ppAllocation, riidResource, ppvResource));
        }
Example #13
0
        public int CreateResource2([NativeTypeName("UINT64")] ulong size, [NativeTypeName("UINT64")] ulong alignment, [NativeTypeName("const D3D12MA_ALLOCATION_DESC&")] D3D12MA_ALLOCATION_DESC *allocDesc, [NativeTypeName("const D3D12_RESOURCE_DESC1&")] D3D12_RESOURCE_DESC1 *resourceDesc, D3D12_RESOURCE_STATES InitialResourceState, [NativeTypeName("const D3D12_CLEAR_VALUE&")] D3D12_CLEAR_VALUE *pOptimizedClearValue, ID3D12ProtectedResourceSession *pProtectedSession, D3D12MA_Allocation **ppAllocation, [NativeTypeName("REFIID")] Guid *riidResource, void **ppvResource)
        {
            D3D12MA_ASSERT((D3D12MA_DEBUG_LEVEL > 0) && (pProtectedSession == null)); // "Should never get here. pProtectedSession != NULL currently requires committed resources."

            ID3D12Device8 *device8 = m_hAllocator->GetDevice8();

            if (device8 == null)
            {
                return(E_NOINTERFACE);
            }

            HRESULT hr = Allocate(size, alignment, allocDesc, 1, ppAllocation);

            if (SUCCEEDED(hr))
            {
                ID3D12Resource *res = null;
                hr = device8->CreatePlacedResource1(
                    (*ppAllocation)->m_Placed.block->GetHeap(),
                    (*ppAllocation)->GetOffset(),
                    resourceDesc,
                    InitialResourceState,
                    pOptimizedClearValue,
                    __uuidof <ID3D12Resource>(), (void **)&res
                    );

                if (SUCCEEDED(hr))
                {
                    if (ppvResource != null)
                    {
                        hr = res->QueryInterface(riidResource, ppvResource);
                    }

                    if (SUCCEEDED(hr))
                    {
                        (*ppAllocation)->SetResource(res, resourceDesc);
                    }
                    else
                    {
                        res->Release();
                        SAFE_RELEASE(ref *ppAllocation);
                    }
                }
                else
                {
                    SAFE_RELEASE(ref *ppAllocation);
                }
            }

            return(hr);
        }
Example #14
0
        public int CreateResource([NativeTypeName("UINT64")] ulong size, [NativeTypeName("UINT64")] ulong alignment, [NativeTypeName("const D3D12MA_ALLOCATION_DESC&")] D3D12MA_ALLOCATION_DESC *allocDesc, [NativeTypeName("const D3D12_RESOURCE_DESC&")] D3D12_RESOURCE_DESC *resourceDesc, D3D12_RESOURCE_STATES InitialResourceState, [NativeTypeName("const D3D12_CLEAR_VALUE&")] D3D12_CLEAR_VALUE *pOptimizedClearValue, D3D12MA_Allocation **ppAllocation, [NativeTypeName("REFIID")] Guid *riidResource, void **ppvResource)
        {
            HRESULT hr = Allocate(size, alignment, allocDesc, 1, ppAllocation);

            if (SUCCEEDED(hr))
            {
                ID3D12Resource *res = null;
                hr = m_hAllocator->GetDevice()->CreatePlacedResource(
                    (*ppAllocation)->m_Placed.block->GetHeap(),
                    (*ppAllocation)->GetOffset(),
                    resourceDesc,
                    InitialResourceState,
                    pOptimizedClearValue,
                    __uuidof <ID3D12Resource>(), (void **)&res
                    );

                if (SUCCEEDED(hr))
                {
                    if (ppvResource != null)
                    {
                        hr = res->QueryInterface(riidResource, ppvResource);
                    }

                    if (SUCCEEDED(hr))
                    {
                        (*ppAllocation)->SetResource(res, resourceDesc);
                    }
                    else
                    {
                        res->Release();
                        SAFE_RELEASE(ref *ppAllocation);
                    }
                }
                else
                {
                    SAFE_RELEASE(ref *ppAllocation);
                }
            }

            return(hr);
        }
Example #15
0
 /// <summary>
 /// Creates a new instance of <see cref="ResourceTransition"/>
 /// </summary>
 public ResourceTransition(D3D12_RESOURCE_STATES newState, uint subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES)
 {
     NewState    = newState;
     Subresource = subresource;
 }
Example #16
0
 public int CreatePlacedResource([NativeTypeName("ID3D12Heap *")] ID3D12Heap *pHeap, [NativeTypeName("UINT64")] ulong HeapOffset, [NativeTypeName("const D3D12_RESOURCE_DESC *")] D3D12_RESOURCE_DESC *pDesc, D3D12_RESOURCE_STATES InitialState, [NativeTypeName("const D3D12_CLEAR_VALUE *")] D3D12_CLEAR_VALUE *pOptimizedClearValue, [NativeTypeName("const IID &")] Guid *riid, [NativeTypeName("void **")] void **ppvResource)
 {
     return(((delegate * unmanaged <ID3D12Device *, ID3D12Heap *, ulong, D3D12_RESOURCE_DESC *, D3D12_RESOURCE_STATES, D3D12_CLEAR_VALUE *, Guid *, void **, int>)(lpVtbl[29]))((ID3D12Device *)Unsafe.AsPointer(ref this), pHeap, HeapOffset, pDesc, InitialState, pOptimizedClearValue, riid, ppvResource));
 }
Example #17
0
 public int CreateReservedResource([NativeTypeName("const D3D12_RESOURCE_DESC *")] D3D12_RESOURCE_DESC *pDesc, D3D12_RESOURCE_STATES InitialState, [NativeTypeName("const D3D12_CLEAR_VALUE *")] D3D12_CLEAR_VALUE *pOptimizedClearValue, [NativeTypeName("const IID &")] Guid *riid, [NativeTypeName("void **")] void **ppvResource)
 {
     return(((delegate * unmanaged <ID3D12Device *, D3D12_RESOURCE_DESC *, D3D12_RESOURCE_STATES, D3D12_CLEAR_VALUE *, Guid *, void **, int>)(lpVtbl[30]))((ID3D12Device *)Unsafe.AsPointer(ref this), pDesc, InitialState, pOptimizedClearValue, riid, ppvResource));
 }
Example #18
0
 public int CreateReservedResource1([NativeTypeName("const D3D12_RESOURCE_DESC *")] D3D12_RESOURCE_DESC *pDesc, D3D12_RESOURCE_STATES InitialState, [NativeTypeName("const D3D12_CLEAR_VALUE *")] D3D12_CLEAR_VALUE *pOptimizedClearValue, [NativeTypeName("ID3D12ProtectedResourceSession *")] ID3D12ProtectedResourceSession *pProtectedSession, [NativeTypeName("const IID &")] Guid *riid, [NativeTypeName("void **")] void **ppvResource)
 {
     return(((delegate * stdcall <ID3D12Device8 *, D3D12_RESOURCE_DESC *, D3D12_RESOURCE_STATES, D3D12_CLEAR_VALUE *, ID3D12ProtectedResourceSession *, Guid *, void **, int>)(lpVtbl[55]))((ID3D12Device8 *)Unsafe.AsPointer(ref this), pDesc, InitialState, pOptimizedClearValue, pProtectedSession, riid, ppvResource));
 }
Example #19
0
 public HRESULT ReleaseResource(void *pResource, D3D12_RESOURCE_STATES state)
 {
     return(((delegate * unmanaged <ID3D11On12On7Device *, void *, D3D12_RESOURCE_STATES, int>)(lpVtbl[1]))((ID3D11On12On7Device *)Unsafe.AsPointer(ref this), pResource, state));
 }
Example #20
0
 public int CreateCommittedResource2([NativeTypeName("const D3D12_HEAP_PROPERTIES *")] D3D12_HEAP_PROPERTIES *pHeapProperties, D3D12_HEAP_FLAGS HeapFlags, [NativeTypeName("const D3D12_RESOURCE_DESC1 *")] D3D12_RESOURCE_DESC1 *pDesc, D3D12_RESOURCE_STATES InitialResourceState, [NativeTypeName("const D3D12_CLEAR_VALUE *")] D3D12_CLEAR_VALUE *pOptimizedClearValue, [NativeTypeName("ID3D12ProtectedResourceSession *")] ID3D12ProtectedResourceSession *pProtectedSession, [NativeTypeName("const IID &")] Guid *riidResource, [NativeTypeName("void **")] void **ppvResource)
 {
     return(((delegate * stdcall <ID3D12Device8 *, D3D12_HEAP_PROPERTIES *, D3D12_HEAP_FLAGS, D3D12_RESOURCE_DESC1 *, D3D12_RESOURCE_STATES, D3D12_CLEAR_VALUE *, ID3D12ProtectedResourceSession *, Guid *, void **, int>)(lpVtbl[69]))((ID3D12Device8 *)Unsafe.AsPointer(ref this), pHeapProperties, HeapFlags, pDesc, InitialResourceState, pOptimizedClearValue, pProtectedSession, riidResource, ppvResource));
 }