@@ -62,16 +62,45 @@ int RenderAPI_D3D11::createShaderResource(
62
62
" before." );
63
63
return -1 ;
64
64
}
65
+ ID3D11Texture2D *texUnityDX11 = (ID3D11Texture2D *)resource;
66
+ D3D11_TEXTURE2D_DESC texDesc;
67
+ texUnityDX11->GetDesc (&texDesc);
68
+ // see #6 https://github.com/davidAlgis/InteropUnityCUDA/issues/6
69
+ if (((texDesc.BindFlags & D3D11_BIND_RENDER_TARGET) == false ||
70
+ (texDesc.BindFlags & D3D11_BIND_SHADER_RESOURCE) == false ) &&
71
+ (texDesc.MiscFlags & D3D11_RESOURCE_MISC_GENERATE_MIPS) == false )
72
+ {
73
+ // see remarks
74
+ // https://learn.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-id3d11devicecontext-generatemips
75
+ Log::log ().debugLogError (
76
+ " The texture wasn't created with the correct bind or misc flags. "
77
+ " Mips cannot be generated. You may have this error, because with "
78
+ " DX11, Texture2D mips cannot be generated" );
79
+ return -2 ;
80
+ }
81
+
82
+ D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc{};
83
+ srvDesc.Format = texDesc.Format ;
84
+ srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
85
+ srvDesc.Texture2D .MipLevels = -1 ;
86
+
87
+ HRESULT hr =
88
+ _device->CreateShaderResourceView (resource, &srvDesc, shaderResource);
89
+ if (SUCCEEDED (hr) == false )
90
+ {
91
+ Log::log ().debugLogError (
92
+ " There has been an error " + std::to_string ((int )(hr)) +
93
+ " when creating shader resource view associated to the resource." );
94
+ return -3 ;
95
+ }
65
96
66
- _device->CreateShaderResourceView (resource, NULL , shaderResource);
67
97
return 0 ;
68
98
}
69
99
70
100
void RenderAPI_D3D11::copyTextures2D (ID3D11Texture2D *dest,
71
101
ID3D11Texture2D *src)
72
102
{
73
- _device->GetImmediateContext (&_context);
74
- _context->CopyResource (dest, src);
103
+ getCurrentContext ()->CopyResource (dest, src);
75
104
}
76
105
77
106
ID3D11DeviceContext *RenderAPI_D3D11::getCurrentContext ()
@@ -80,7 +109,6 @@ ID3D11DeviceContext *RenderAPI_D3D11::getCurrentContext()
80
109
return _context;
81
110
}
82
111
83
-
84
112
void RenderAPI_D3D11::ProcessDeviceEvent (UnityGfxDeviceEventType type,
85
113
IUnityInterfaces *interfaces)
86
114
{
0 commit comments