diff --git a/GlitchyEngine/src/Application.bf b/GlitchyEngine/src/Application.bf index 6e81a1e..55cecca 100644 --- a/GlitchyEngine/src/Application.bf +++ b/GlitchyEngine/src/Application.bf @@ -88,6 +88,8 @@ namespace GlitchyEngine { _vertexShader = Shader.FromFile!(_window.Context, "content\\basicShader.hlsl", "VS"); + _vertexShader.Buffers[0].SetData(Matrix.Identity); + // Create Input Layout _vertexLayout = new VertexLayout(_window.Context, new .( diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf index 9b96b4f..97990c6 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf @@ -169,7 +169,8 @@ namespace GlitchyEngine.Renderer public override void SetVertexShader(VertexShader vertexShader) { //Todo: nativeContext.VertexShader.SetSamplers(); - //Todo: nativeContext.VertexShader.SetConstantBuffers(); + vertexShader.Buffers.PlatformFetchNativeBuffers(); + nativeContext.VertexShader.SetConstantBuffers(0, vertexShader.Buffers.nativeBuffers.Count, &vertexShader.Buffers.nativeBuffers); //Todo: nativeContext.VertexShader.SetShaderResources(); nativeContext.VertexShader.SetShader(vertexShader.nativeShader); } diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11PixelShader.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11PixelShader.bf index 80eb19e..ad66f7b 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11PixelShader.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11PixelShader.bf @@ -1,9 +1,6 @@ using System; using DirectX.D3D11; using DirectX.D3DCompiler; -using DirectX.D3D11Shader; -using DirectX.Common; -using System.Diagnostics; using internal GlitchyEngine.Renderer; @@ -15,15 +12,7 @@ namespace GlitchyEngine.Renderer public override void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null) { - ShaderCompileFlags flags = .Default; - -#if DEBUG - flags |= .Debug; -#else - flags |= .OptimizationLevel3; -#endif - - Shader.PlattformCompileShaderFromSource(code, macros, entryPoint, "ps_5_0", flags, let shaderBlob); + Shader.PlattformCompileShaderFromSource(code, macros, entryPoint, "ps_5_0", DefaultCompileFlags, let shaderBlob); var result = _context.nativeDevice.CreatePixelShader(shaderBlob.GetBufferPointer(), shaderBlob.GetBufferSize(), null, &nativeShader); if(result.Failed) @@ -35,36 +24,5 @@ namespace GlitchyEngine.Renderer shaderBlob?.Release(); } - - internal void Reflect(ID3DBlob* shaderCode) - { - ID3D11ShaderReflection* reflection = null; - var result = D3DCompiler.D3DReflect(shaderCode.GetBufferPointer(), shaderCode.GetBufferSize(), &reflection); - if(result.Failed) - { - Log.EngineLogger.Error($"Failed to reflect pixel shader: Message ({(int)result}): {result}"); - } - - reflection.GetDescription(let desc); - uint32 cBufferCount = desc.ConstantBuffers; - - for(uint32 i < cBufferCount) - { - reflection.GetResourceBindingDescription(i, let bindDesc); - - var bufferReflection = reflection.GetConstantBufferByIndex(i); - - bufferReflection.GetDescription(let bufferDesc); - - // ConstantBuffer - if(bufferDesc.Type == .D3D11_CT_CBUFFER) - { - GlitchyEngine.Renderer.BufferDescription cBufferDesc = .(bufferDesc.Size, .Constant, .Dynamic, .Write); - - _buffers.Add(bindDesc.BindPoint, StringView(bufferDesc.Name), new Buffer(_context, cBufferDesc), true); - } - } - reflection.Release(); - } } } diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11Shader.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11Shader.bf index 9e8d38f..2e4c5bc 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11Shader.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11Shader.bf @@ -3,6 +3,7 @@ using GlitchyEngine.Renderer; using DirectX.Common; using DirectX.D3D11; using DirectX.D3DCompiler; +using DirectX.D3D11Shader; using internal GlitchyEngine.Renderer; @@ -10,6 +11,13 @@ namespace GlitchyEngine.Renderer { extension Shader { + protected const ShaderCompileFlags DefaultCompileFlags = +#if DEBUG + .Debug; +#else + .OptimizationLevel3; +#endif + internal static void PlattformCompileShaderFromSource(String code, ShaderDefine[] macros, String entryPoint, String target, ShaderCompileFlags compileFlags, out ID3DBlob* shaderBlob) { ShaderMacro* nativeMacros = macros == null ? null : new:ScopedAlloc! ShaderMacro[macros.Count]*; @@ -33,5 +41,36 @@ namespace GlitchyEngine.Renderer Log.EngineLogger.Error($"Failed to compile Shader: Error Code({(int)result}): {result} | Error Message: {str}"); } } + + protected internal void Reflect(ID3DBlob* shaderCode) + { + ID3D11ShaderReflection* reflection = null; + var result = D3DCompiler.D3DReflect(shaderCode.GetBufferPointer(), shaderCode.GetBufferSize(), &reflection); + if(result.Failed) + { + Log.EngineLogger.Error($"Failed to reflect shader: Message ({(int)result}): {result}"); + } + + reflection.GetDescription(let desc); + uint32 cBufferCount = desc.ConstantBuffers; + + for(uint32 i < cBufferCount) + { + reflection.GetResourceBindingDescription(i, let bindDesc); + + var bufferReflection = reflection.GetConstantBufferByIndex(i); + + bufferReflection.GetDescription(let bufferDesc); + + // ConstantBuffer + if(bufferDesc.Type == .D3D11_CT_CBUFFER) + { + GlitchyEngine.Renderer.BufferDescription cBufferDesc = .(bufferDesc.Size, .Constant, .Dynamic, .Write); + + _buffers.Add(bindDesc.BindPoint, StringView(bufferDesc.Name), new Buffer(_context, cBufferDesc), true); + } + } + reflection.Release(); + } } } diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11VertexShader.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11VertexShader.bf index 403399b..611f622 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11VertexShader.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11VertexShader.bf @@ -16,15 +16,7 @@ namespace GlitchyEngine.Renderer public override void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null) { - ShaderCompileFlags flags = .Default; - -#if DEBUG - flags |= .Debug; -#else - flags |= .OptimizationLevel3; -#endif - - Shader.PlattformCompileShaderFromSource(code, macros, entryPoint, "vs_5_0", flags, out nativeCode); + Shader.PlattformCompileShaderFromSource(code, macros, entryPoint, "vs_5_0", DefaultCompileFlags, out nativeCode); var result = _context.nativeDevice.CreateVertexShader(nativeCode.GetBufferPointer(), nativeCode.GetBufferSize(), null, &nativeShader); if(result.Failed) @@ -32,7 +24,7 @@ namespace GlitchyEngine.Renderer Log.EngineLogger.Error($"Failed to create vertex shader: Message ({(int)result}): {result}"); } - //int i = nativeCode?.Release() ?? (uint32)-1; + Reflect(nativeCode); } } } diff --git a/Sandbox/content/basicShader.hlsl b/Sandbox/content/basicShader.hlsl index 5ece317..332338e 100644 --- a/Sandbox/content/basicShader.hlsl +++ b/Sandbox/content/basicShader.hlsl @@ -1,4 +1,12 @@ -cbuffer Constants +cbuffer Constants : register(b0) +{ + float4x4 Transform = float4x4(1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); +} + +cbuffer Constants : register(b1) { float4 BaseColor; } @@ -18,7 +26,7 @@ struct PS_IN PS_IN VS(VS_IN input) { PS_IN output; - output.Position = float4(input.Position, 1); + output.Position = mul(Transform, float4(input.Position, 1)); output.Color = input.Color; return output;