yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Ellie Hermaszewskaformatf65d756bf

master
1.5 KiB66 linesraw
1// d3d12-texture.cpp
2#include "d3d12-texture.h"
3
4namespace gfx
5{
6namespace d3d12
7{
8
9using namespace Slang;
10
11TextureResourceImpl::TextureResourceImpl(const Desc& desc)
12    : Parent(desc), m_defaultState(D3DUtil::getResourceState(desc.defaultState))
13{
14}
15
16TextureResourceImpl::~TextureResourceImpl()
17{
18    if (sharedHandle.handleValue != 0)
19    {
20        CloseHandle((HANDLE)sharedHandle.handleValue);
21    }
22}
23
24Result TextureResourceImpl::getNativeResourceHandle(InteropHandle* outHandle)
25{
26    outHandle->handleValue = (uint64_t)m_resource.getResource();
27    outHandle->api = InteropHandleAPI::D3D12;
28    return SLANG_OK;
29}
30
31Result TextureResourceImpl::getSharedHandle(InteropHandle* outHandle)
32{
33#if !SLANG_WINDOWS_FAMILY
34    return SLANG_E_NOT_IMPLEMENTED;
35#else
36    // Check if a shared handle already exists for this resource.
37    if (sharedHandle.handleValue != 0)
38    {
39        *outHandle = sharedHandle;
40        return SLANG_OK;
41    }
42
43    // If a shared handle doesn't exist, create one and store it.
44    ComPtr<ID3D12Device> pDevice;
45    auto pResource = m_resource.getResource();
46    pResource->GetDevice(IID_PPV_ARGS(pDevice.writeRef()));
47    SLANG_RETURN_ON_FAIL(pDevice->CreateSharedHandle(
48        pResource,
49        NULL,
50        GENERIC_ALL,
51        nullptr,
52        (HANDLE*)&outHandle->handleValue));
53    outHandle->api = InteropHandleAPI::D3D12;
54    return SLANG_OK;
55#endif
56}
57
58Result TextureResourceImpl::setDebugName(const char* name)
59{
60    Parent::setDebugName(name);
61    m_resource.setDebugName(name);
62    return SLANG_OK;
63}
64
65} // namespace d3d12
66} // namespace gfx