|
@@ -1,110 +1,158 @@
|
|
|
-using SharpDX;
|
|
|
|
|
-using SharpDX.D3DCompiler;
|
|
|
|
|
-using SharpDX.Direct3D;
|
|
|
|
|
-
|
|
|
|
|
-using System;
|
|
|
|
|
-using System.Linq;
|
|
|
|
|
-using System.Threading.Tasks;
|
|
|
|
|
-using SharpDX.Direct2D1;
|
|
|
|
|
-using SharpDX.Direct3D11;
|
|
|
|
|
-using SharpDX.DXGI;
|
|
|
|
|
-using SharpDX.Mathematics.Interop;
|
|
|
|
|
-using Buffer = SharpDX.Direct3D11.Buffer;
|
|
|
|
|
-using DeviceContext = SharpDX.Direct2D1.DeviceContext;
|
|
|
|
|
-using DxgiFactory1 = SharpDX.DXGI.Factory1;
|
|
|
|
|
-using Matrix = SharpDX.Matrix;
|
|
|
|
|
-using D3DDevice = SharpDX.Direct3D11.Device;
|
|
|
|
|
-using DxgiResource = SharpDX.DXGI.Resource;
|
|
|
|
|
-using FeatureLevel = SharpDX.Direct3D.FeatureLevel;
|
|
|
|
|
-using InputElement = SharpDX.Direct3D11.InputElement;
|
|
|
|
|
-
|
|
|
|
|
|
|
+using System.Numerics;
|
|
|
|
|
+using Silk.NET.Core.Native;
|
|
|
|
|
+using Silk.NET.Direct3D.Compilers;
|
|
|
|
|
+using Silk.NET.Direct3D11;
|
|
|
|
|
+using Silk.NET.DXGI;
|
|
|
|
|
+using static Silk.NET.Core.Native.SilkMarshal;
|
|
|
|
|
|
|
|
namespace GpuInterop.D3DDemo;
|
|
namespace GpuInterop.D3DDemo;
|
|
|
|
|
|
|
|
-public class D3DContent
|
|
|
|
|
|
|
+public static class D3DContent
|
|
|
{
|
|
{
|
|
|
|
|
+ private static D3DCompiler s_compiler = D3DCompiler.GetApi();
|
|
|
|
|
|
|
|
- public static Buffer CreateMesh(D3DDevice device)
|
|
|
|
|
|
|
+ public static unsafe ComPtr<ID3D11Buffer> CreateMesh(ComPtr<ID3D11Device> device)
|
|
|
{
|
|
{
|
|
|
// Compile Vertex and Pixel shaders
|
|
// Compile Vertex and Pixel shaders
|
|
|
- var vertexShaderByteCode = ShaderBytecode.CompileFromFile("D3DDemo\\MiniCube.fx", "VS", "vs_4_0");
|
|
|
|
|
- var vertexShader = new VertexShader(device, vertexShaderByteCode);
|
|
|
|
|
|
|
+ using var vertexShaderByteCode = CompileShader("D3DDemo\\MiniCube.fx", "VS", "vs_4_0");
|
|
|
|
|
+ using ComPtr<ID3D11VertexShader> vertexShader = default;
|
|
|
|
|
+ ThrowHResult(device.CreateVertexShader(
|
|
|
|
|
+ vertexShaderByteCode.GetBufferPointer(),
|
|
|
|
|
+ vertexShaderByteCode.GetBufferSize(),
|
|
|
|
|
+ (ID3D11ClassLinkage*)null,
|
|
|
|
|
+ vertexShader.GetAddressOf()));
|
|
|
|
|
|
|
|
- var pixelShaderByteCode = ShaderBytecode.CompileFromFile("D3DDemo\\MiniCube.fx", "PS", "ps_4_0");
|
|
|
|
|
- var pixelShader = new PixelShader(device, pixelShaderByteCode);
|
|
|
|
|
|
|
+ using var pixelShaderByteCode = CompileShader("D3DDemo\\MiniCube.fx", "PS", "ps_4_0");
|
|
|
|
|
+ using ComPtr<ID3D11PixelShader> pixelShader = default;
|
|
|
|
|
+ ThrowHResult(device.CreatePixelShader(
|
|
|
|
|
+ pixelShaderByteCode.GetBufferPointer(),
|
|
|
|
|
+ pixelShaderByteCode.GetBufferSize(),
|
|
|
|
|
+ (ID3D11ClassLinkage*)null,
|
|
|
|
|
+ pixelShader.GetAddressOf()));
|
|
|
|
|
|
|
|
- var signature = ShaderSignature.GetInputSignature(vertexShaderByteCode);
|
|
|
|
|
|
|
+ using ComPtr<ID3D10Blob> vertexShaderSignature = default;
|
|
|
|
|
+ ThrowHResult(s_compiler.GetInputSignatureBlob(
|
|
|
|
|
+ vertexShaderByteCode.GetBufferPointer(),
|
|
|
|
|
+ vertexShaderByteCode.GetBufferSize(),
|
|
|
|
|
+ vertexShaderSignature.GetAddressOf()));
|
|
|
|
|
|
|
|
- var inputElements = new[]
|
|
|
|
|
|
|
+ // Layout from VertexShader input signature
|
|
|
|
|
+ using ComPtr<ID3D11InputLayout> inputLayout = default;
|
|
|
|
|
+ var positionNamePtr = StringToPtr("POSITION", NativeStringEncoding.LPStr);
|
|
|
|
|
+ var colorNamePtr = StringToPtr("COLOR", NativeStringEncoding.LPStr);
|
|
|
|
|
+ try
|
|
|
{
|
|
{
|
|
|
- new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0),
|
|
|
|
|
- new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 16, 0)
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ const int inputCount = 2;
|
|
|
|
|
+ var inputs = stackalloc InputElementDesc[inputCount]
|
|
|
|
|
+ {
|
|
|
|
|
+ new InputElementDesc((byte*)positionNamePtr, 0, Format.FormatR32G32B32A32Float, 0, 0),
|
|
|
|
|
+ new InputElementDesc((byte*)colorNamePtr, 0, Format.FormatR32G32B32A32Float, 0, 16)
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
- // Layout from VertexShader input signature
|
|
|
|
|
- var layout = new InputLayout(
|
|
|
|
|
- device,
|
|
|
|
|
- signature,
|
|
|
|
|
- inputElements);
|
|
|
|
|
|
|
+ ThrowHResult(device.CreateInputLayout(
|
|
|
|
|
+ inputs,
|
|
|
|
|
+ inputCount,
|
|
|
|
|
+ vertexShaderSignature.GetBufferPointer(),
|
|
|
|
|
+ vertexShaderSignature.GetBufferSize(),
|
|
|
|
|
+ inputLayout.GetAddressOf()));
|
|
|
|
|
+ }
|
|
|
|
|
+ finally
|
|
|
|
|
+ {
|
|
|
|
|
+ FreeString(positionNamePtr, NativeStringEncoding.LPStr);
|
|
|
|
|
+ FreeString(colorNamePtr, NativeStringEncoding.LPStr);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// Instantiate Vertex buffer from vertex data
|
|
// Instantiate Vertex buffer from vertex data
|
|
|
- using var vertices = Buffer.Create(
|
|
|
|
|
- device,
|
|
|
|
|
- BindFlags.VertexBuffer,
|
|
|
|
|
- new[]
|
|
|
|
|
|
|
+ var vertices = new[]
|
|
|
|
|
+ {
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), // Front
|
|
|
|
|
+ new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), // BACK
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), // Top
|
|
|
|
|
+ new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f), // Bottom
|
|
|
|
|
+ new Vector4(1.0f, -1.0f, 1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, -1.0f, 1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f), // Left
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, -1.0f, -1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f), // Right
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, -1.0f, -1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
+ new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ using ComPtr<ID3D11Buffer> vertexBuffer = default;
|
|
|
|
|
+
|
|
|
|
|
+ fixed (Vector4* verticesPtr = vertices)
|
|
|
|
|
+ {
|
|
|
|
|
+ var vertexBufferDesc = new BufferDesc
|
|
|
{
|
|
{
|
|
|
- new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), // Front
|
|
|
|
|
- new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), // BACK
|
|
|
|
|
- new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f), // Top
|
|
|
|
|
- new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f), // Bottom
|
|
|
|
|
- new Vector4(1.0f, -1.0f, 1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, -1.0f, 1.0f, 1.0f), new Vector4(1.0f, 1.0f, 0.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f), // Left
|
|
|
|
|
- new Vector4(-1.0f, -1.0f, 1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, -1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, 1.0f, 1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(-1.0f, 1.0f, -1.0f, 1.0f), new Vector4(1.0f, 0.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, -1.0f, -1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f), // Right
|
|
|
|
|
- new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, -1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, -1.0f, -1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, 1.0f, -1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
- new Vector4(1.0f, 1.0f, 1.0f, 1.0f), new Vector4(0.0f, 1.0f, 1.0f, 1.0f),
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ ByteWidth = (uint)(sizeof(Vector4) * vertices.Length),
|
|
|
|
|
+ Usage = Usage.Default,
|
|
|
|
|
+ BindFlags = (uint)BindFlag.VertexBuffer,
|
|
|
|
|
+ CPUAccessFlags = (uint)CpuAccessFlag.None,
|
|
|
|
|
+ MiscFlags = (uint)ResourceMiscFlag.None,
|
|
|
|
|
+ StructureByteStride = 0
|
|
|
|
|
+ };
|
|
|
|
|
+ var subresourceData = new SubresourceData(verticesPtr);
|
|
|
|
|
+ ThrowHResult(device.CreateBuffer(&vertexBufferDesc, &subresourceData, vertexBuffer.GetAddressOf()));
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// Create Constant Buffer
|
|
// Create Constant Buffer
|
|
|
- var constantBuffer = new Buffer(device, Utilities.SizeOf<Matrix>(), ResourceUsage.Default,
|
|
|
|
|
- BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0);
|
|
|
|
|
-
|
|
|
|
|
- var context = device.ImmediateContext;
|
|
|
|
|
|
|
+ ComPtr<ID3D11Buffer> constantBuffer = default;
|
|
|
|
|
+ var constantBufferDesc = new BufferDesc
|
|
|
|
|
+ {
|
|
|
|
|
+ ByteWidth = (uint)sizeof(Matrix4x4),
|
|
|
|
|
+ Usage = Usage.Default,
|
|
|
|
|
+ BindFlags = (uint)BindFlag.ConstantBuffer,
|
|
|
|
|
+ CPUAccessFlags = (uint)CpuAccessFlag.None,
|
|
|
|
|
+ MiscFlags = (uint)ResourceMiscFlag.None,
|
|
|
|
|
+ StructureByteStride = 0
|
|
|
|
|
+ };
|
|
|
|
|
+ ThrowHResult(device.CreateBuffer(&constantBufferDesc, (SubresourceData*)null, constantBuffer.GetAddressOf()));
|
|
|
|
|
|
|
|
// Prepare All the stages
|
|
// Prepare All the stages
|
|
|
- context.InputAssembler.InputLayout = layout;
|
|
|
|
|
- context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
|
|
|
|
|
- context.InputAssembler.SetVertexBuffers(0,
|
|
|
|
|
- new VertexBufferBinding(vertices, Utilities.SizeOf<Vector4>() * 2, 0));
|
|
|
|
|
- context.VertexShader.SetConstantBuffer(0, constantBuffer);
|
|
|
|
|
- context.VertexShader.Set(vertexShader);
|
|
|
|
|
- context.PixelShader.Set(pixelShader);
|
|
|
|
|
|
|
+ using ComPtr<ID3D11DeviceContext> context = default;
|
|
|
|
|
+ device.GetImmediateContext(context.GetAddressOf());
|
|
|
|
|
+
|
|
|
|
|
+ context.IASetInputLayout(inputLayout);
|
|
|
|
|
+ context.IASetPrimitiveTopology(D3DPrimitiveTopology.D3D10PrimitiveTopologyTrianglelist);
|
|
|
|
|
+ var stride = (uint)(sizeof(Vector4) * 2);
|
|
|
|
|
+ var offset = 0u;
|
|
|
|
|
+ context.IASetVertexBuffers(0, 1, &vertexBuffer.Handle, &stride, &offset);
|
|
|
|
|
+ context.VSSetConstantBuffers(0, 1, &constantBuffer.Handle);
|
|
|
|
|
+ context.VSSetShader(vertexShader, (ID3D11ClassInstance**)null, 0);
|
|
|
|
|
+ context.PSSetShader(pixelShader, (ID3D11ClassInstance**)null, 0);
|
|
|
|
|
+
|
|
|
return constantBuffer;
|
|
return constantBuffer;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private static unsafe ComPtr<ID3D10Blob> CompileShader(string fileName, string entryPoint, string profile)
|
|
|
|
|
+ {
|
|
|
|
|
+ ComPtr<ID3D10Blob> blob = default;
|
|
|
|
|
+ ThrowHResult(s_compiler.CompileFromFile(fileName, null, null, entryPoint, profile, 0u, 0u, blob.GetAddressOf(), null));
|
|
|
|
|
+ return blob;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|