summaryrefslogtreecommitdiffstats
path: root/Projects
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-10-19 21:31:56 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-10-19 21:31:56 +0000
commitaf5a3688c57f0f0a9406fb1ea488e093d5822aea (patch)
tree3780348ac277ab1df447c0b5d2bed6eef3b074f4 /Projects
parentFixed UWP build error (diff)
downloadDiligentEngine-af5a3688c57f0f0a9406fb1ea488e093d5822aea.tar.gz
DiligentEngine-af5a3688c57f0f0a9406fb1ea488e093d5822aea.zip
Updated submodules (API version 240033);
Enabled bindless mode in Asteroid demo
Diffstat (limited to 'Projects')
-rw-r--r--Projects/Asteroids/CMakeLists.txt1
-rw-r--r--Projects/Asteroids/src/asteroid_ps.hlsl8
-rw-r--r--Projects/Asteroids/src/asteroid_ps_d3d11.hlsl3
-rw-r--r--Projects/Asteroids/src/asteroid_ps_diligent.hlsl9
-rw-r--r--Projects/Asteroids/src/asteroid_vs.hlsl47
-rw-r--r--Projects/Asteroids/src/asteroids_DE.cpp139
-rw-r--r--Projects/Asteroids/src/asteroids_DE.h2
-rw-r--r--Projects/Asteroids/src/shader_common.h25
8 files changed, 162 insertions, 72 deletions
diff --git a/Projects/Asteroids/CMakeLists.txt b/Projects/Asteroids/CMakeLists.txt
index 4bb80c3..d932a61 100644
--- a/Projects/Asteroids/CMakeLists.txt
+++ b/Projects/Asteroids/CMakeLists.txt
@@ -87,6 +87,7 @@ if(WIN32)
${MEDIA}
SDK/Include/d3dx12.h
src/common_defines.h
+ src/shader_common.h
readme.md
)
set_target_properties(Asteroids PROPERTIES
diff --git a/Projects/Asteroids/src/asteroid_ps.hlsl b/Projects/Asteroids/src/asteroid_ps.hlsl
index c645486..5c5bfd3 100644
--- a/Projects/Asteroids/src/asteroid_ps.hlsl
+++ b/Projects/Asteroids/src/asteroid_ps.hlsl
@@ -1,5 +1,5 @@
-#include "asteroid_vs.hlsl"
#include "common_defines.h"
+#include "shader_common.h"
// Apparently tools don't like unbounded/bindless texture arrays, so use the real constant for now
Texture2DArray<float4> Tex[NUM_UNIQUE_TEXTURES] : register(t0);
@@ -31,9 +31,9 @@ float4 asteroid_ps(in float4 position : SV_Position,
// and forward substituting the above and then refusing to compile "divergent"
// coordinates...
float3 detailTex = 0.0f;
- detailTex += blendWeights.x * Tex[mTextureIndex].Sample(Sampler, coords1).xyz;
- detailTex += blendWeights.y * Tex[mTextureIndex].Sample(Sampler, coords2).xyz;
- detailTex += blendWeights.z * Tex[mTextureIndex].Sample(Sampler, coords3).xyz;
+ detailTex += blendWeights.x * Tex[vs_output.textureId].Sample(Sampler, coords1).xyz;
+ detailTex += blendWeights.y * Tex[vs_output.textureId].Sample(Sampler, coords2).xyz;
+ detailTex += blendWeights.z * Tex[vs_output.textureId].Sample(Sampler, coords3).xyz;
float wrap = 0.0f;
float wrap_diffuse = saturate((dot(normal, normalize(lightPos)) + wrap) / (1.0f + wrap));
diff --git a/Projects/Asteroids/src/asteroid_ps_d3d11.hlsl b/Projects/Asteroids/src/asteroid_ps_d3d11.hlsl
index f4987c9..8b58d09 100644
--- a/Projects/Asteroids/src/asteroid_ps_d3d11.hlsl
+++ b/Projects/Asteroids/src/asteroid_ps_d3d11.hlsl
@@ -1,5 +1,4 @@
-#include "asteroid_vs.hlsl"
-#include "common_defines.h"
+#include "shader_common.h"
Texture2DArray<float4> Tex : register(t0);
sampler Sampler : register(s0);
diff --git a/Projects/Asteroids/src/asteroid_ps_diligent.hlsl b/Projects/Asteroids/src/asteroid_ps_diligent.hlsl
index c2f6f0b..bd1ee1d 100644
--- a/Projects/Asteroids/src/asteroid_ps_diligent.hlsl
+++ b/Projects/Asteroids/src/asteroid_ps_diligent.hlsl
@@ -1,12 +1,5 @@
#include "common_defines.h"
-
-struct VSOut
-{
- float3 positionModel : POSITIONMODEL;
- float3 normalWorld : NORMAL;
- float3 albedo : ALBEDO; // Alternatively, can pass just "ao" to PS and read cbuffer in PS
- uint textureId : TEXTURE_ID;
-};
+#include "shader_common.h"
#ifdef BINDLESS
diff --git a/Projects/Asteroids/src/asteroid_vs.hlsl b/Projects/Asteroids/src/asteroid_vs.hlsl
index f19fe2c..3498d33 100644
--- a/Projects/Asteroids/src/asteroid_vs.hlsl
+++ b/Projects/Asteroids/src/asteroid_vs.hlsl
@@ -1,39 +1,46 @@
-cbuffer DrawConstantBuffer// : register(b0)
-{
- float4x4 mWorld;
- float4x4 mViewProjection;
- float4 mSurfaceColor;
- float4 mDeepColor;
- uint mTextureIndex;
-};
+#include "shader_common.h"
+
+#ifdef BINDLESS
+
+StructuredBuffer<AsteroidData> g_Data;
-struct VSOut
+#else
+
+cbuffer DrawConstantBuffer
{
- float3 positionModel : POSITIONMODEL;
- float3 normalWorld : NORMAL;
- float3 albedo : ALBEDO; // Alternatively, can pass just "ao" to PS and read cbuffer in PS
- uint textureId : TEXTURE_ID;
+ AsteroidData g_Data;
};
+#endif
+
float linstep(float min, float max, float s)
{
return saturate((s - min) / (max - min));
}
-void asteroid_vs(in float3 in_pos : ATTRIB0,
+void asteroid_vs(in float3 in_pos : ATTRIB0,
in float3 in_normal : ATTRIB1,
- out float4 position : SV_Position,
+#ifdef BINDLESS
+ in uint AsteroidId : ATTRIB2, // SV_InstanceId is not affected by BaseInstance
+#endif
+ out float4 position : SV_Position,
out VSOut vs_output)
{
- float3 positionWorld = mul(mWorld, float4(in_pos, 1.0f)).xyz;
- position = mul(mViewProjection, float4(positionWorld, 1.0f));
+#ifdef BINDLESS
+ AsteroidData Data = g_Data[AsteroidId];
+#else
+ AsteroidData Data = g_Data;
+#endif
+
+ float3 positionWorld = mul(Data.World, float4(in_pos, 1.0f)).xyz;
+ position = mul(Data.ViewProjection, float4(positionWorld, 1.0f));
vs_output.positionModel = in_pos;
- vs_output.normalWorld = mul(mWorld, float4(in_normal, 0.0f)).xyz; // No non-uniform scaling
+ vs_output.normalWorld = mul(Data.World, float4(in_normal, 0.0f)).xyz; // No non-uniform scaling
float depth = linstep(0.5f, 0.7f, length(in_pos.xyz));
- vs_output.albedo = lerp(mDeepColor.xyz, mSurfaceColor.xyz, depth);
+ vs_output.albedo = lerp(Data.DeepColor.xyz, Data.SurfaceColor.xyz, depth);
- vs_output.textureId = mTextureIndex;
+ vs_output.textureId = Data.TextureIndex;
}
diff --git a/Projects/Asteroids/src/asteroids_DE.cpp b/Projects/Asteroids/src/asteroids_DE.cpp
index 3cafba9..0b8408d 100644
--- a/Projects/Asteroids/src/asteroids_DE.cpp
+++ b/Projects/Asteroids/src/asteroids_DE.cpp
@@ -237,14 +237,47 @@ Asteroids::Asteroids(const Settings &settings, AsteroidsSimulation* asteroids, G
std::vector<StateTransitionDesc> Barriers;
mBackBufferWidth = mSwapChain->GetDesc().Width;
mBackBufferHeight = mSwapChain->GetDesc().Height;
- // Create draw constant buffer
+ const auto MaxAsteroidsInSubset = (NUM_ASTEROIDS + mNumSubsets - 1) / mNumSubsets;
+
+ if (m_BindingMode == BindingMode::Bindless)
+ {
+ {
+ BufferDesc desc;
+ desc.Name = "Instance ID buffer";
+ desc.Usage = USAGE_STATIC;
+ desc.BindFlags = BIND_VERTEX_BUFFER;
+ desc.uiSizeInBytes = static_cast<Uint32>(sizeof(Uint32)) * MaxAsteroidsInSubset;
+ std::vector<Uint32> Ids(MaxAsteroidsInSubset);
+ for (Uint32 i=0; i < Ids.size(); ++i)
+ Ids[i] = i;
+ BufferData Data(Ids.data(), desc.uiSizeInBytes);
+ mDevice->CreateBuffer(desc, &Data, &mInstanceIDBuffer);
+ Barriers.emplace_back(mInstanceIDBuffer, RESOURCE_STATE_UNKNOWN, RESOURCE_STATE_VERTEX_BUFFER, true);
+ }
+ {
+ BufferDesc desc;
+ desc.Name = "Asteroids data buffer";
+ desc.Usage = USAGE_DYNAMIC;
+ desc.BindFlags = BIND_SHADER_RESOURCE;
+ desc.Mode = BUFFER_MODE_STRUCTURED;
+ desc.CPUAccessFlags = CPU_ACCESS_WRITE;
+ desc.ElementByteStride = static_cast<Uint32>(sizeof(DrawConstantBuffer));
+ desc.uiSizeInBytes = desc.ElementByteStride * MaxAsteroidsInSubset;
+ mAsteroidsDataBuffers.resize(mNumSubsets);
+ for(Uint32 i=0; i < mNumSubsets; ++i)
+ {
+ mDevice->CreateBuffer(desc, nullptr, &mAsteroidsDataBuffers[i]);
+ }
+ }
+ }
+ else
{
BufferDesc desc;
- desc.Name = "draw constant buffer (dynamic)";
- desc.Usage = USAGE_DYNAMIC;
- desc.uiSizeInBytes = (Uint32) sizeof(DrawConstantBuffer);
- desc.BindFlags = BIND_UNIFORM_BUFFER;
+ desc.Name = "Asteroids constant buffer";
+ desc.Usage = USAGE_DYNAMIC;
desc.CPUAccessFlags = CPU_ACCESS_WRITE;
+ desc.BindFlags = BIND_UNIFORM_BUFFER;
+ desc.uiSizeInBytes = (Uint32) sizeof(DrawConstantBuffer);
mDevice->CreateBuffer(desc, nullptr, &mDrawConstantBuffer);
Barriers.emplace_back(mDrawConstantBuffer, RESOURCE_STATE_UNKNOWN, RESOURCE_STATE_CONSTANT_BUFFER, true);
}
@@ -255,11 +288,12 @@ Asteroids::Asteroids(const Settings &settings, AsteroidsSimulation* asteroids, G
LayoutElement inputDesc[] =
{
LayoutElement{ 0, 0, 3, VT_FLOAT32, false, 0, sizeof(Vertex)},
- LayoutElement{ 1, 0, 3, VT_FLOAT32}
+ LayoutElement{ 1, 0, 3, VT_FLOAT32},
+ LayoutElement{ 2, 1, 1, VT_UINT32, False, LayoutElement::FREQUENCY_PER_INSTANCE}
};
PSODesc.GraphicsPipeline.InputLayout.LayoutElements = inputDesc;
- PSODesc.GraphicsPipeline.InputLayout.NumElements = _countof(inputDesc);
+ PSODesc.GraphicsPipeline.InputLayout.NumElements = (m_BindingMode == BindingMode::Bindless) ? 3 : 2;
PSODesc.GraphicsPipeline.DepthStencilDesc.DepthFunc = COMPARISON_FUNC_GREATER_EQUAL;
@@ -273,6 +307,11 @@ Asteroids::Asteroids(const Settings &settings, AsteroidsSimulation* asteroids, G
attribs.SourceLanguage = SHADER_SOURCE_LANGUAGE_HLSL;
attribs.pShaderSourceStreamFactory = pShaderSourceFactory;
attribs.UseCombinedTextureSamplers = true;
+
+ ShaderMacro Macros[] = {{"BINDLESS", "1"}, {}};
+ if (m_BindingMode == BindingMode::Bindless)
+ attribs.Macros = Macros;
+
mDevice->CreateShader(attribs, &vs);
}
@@ -286,17 +325,11 @@ Asteroids::Asteroids(const Settings &settings, AsteroidsSimulation* asteroids, G
attribs.UseCombinedTextureSamplers = true;
attribs.SourceLanguage = SHADER_SOURCE_LANGUAGE_HLSL;
- if(m_BindingMode == BindingMode::Bindless)
- {
- ShaderMacro Macros[] = {{"BINDLESS", "1"}, {}};
+ ShaderMacro Macros[] = {{"BINDLESS", "1"}, {}};
+ if (m_BindingMode == BindingMode::Bindless)
attribs.Macros = Macros;
- mDevice->CreateShader(attribs, &ps);
- attribs.Macros = nullptr;
- }
- else
- {
- mDevice->CreateShader(attribs, &ps);
- }
+
+ mDevice->CreateShader(attribs, &ps);
}
StaticSamplerDesc samDesc;
@@ -317,13 +350,16 @@ Asteroids::Asteroids(const Settings &settings, AsteroidsSimulation* asteroids, G
PSODesc.ResourceLayout.StaticSamplers = &samDesc;
PSODesc.ResourceLayout.NumStaticSamplers = 1;
- ShaderResourceVariableDesc Variables[] =
+ std::vector<ShaderResourceVariableDesc> Variables =
{
{SHADER_TYPE_PIXEL, "Tex", m_BindingMode == BindingMode::Dynamic ? SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC : SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}
};
+ if (m_BindingMode == BindingMode::Bindless)
+ Variables.emplace_back(SHADER_TYPE_VERTEX, "g_Data", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE);
+
PSODesc.ResourceLayout.DefaultVariableType = SHADER_RESOURCE_VARIABLE_TYPE_STATIC;
- PSODesc.ResourceLayout.Variables = Variables;
- PSODesc.ResourceLayout.NumVariables = _countof(Variables);
+ PSODesc.ResourceLayout.Variables = Variables.data();
+ PSODesc.ResourceLayout.NumVariables = static_cast<Uint32>(Variables.size());
PSODesc.GraphicsPipeline.RTVFormats[0] = mSwapChain->GetDesc().ColorBufferFormat;
PSODesc.GraphicsPipeline.NumRenderTargets = 1;
@@ -350,10 +386,11 @@ Asteroids::Asteroids(const Settings &settings, AsteroidsSimulation* asteroids, G
}
else if(m_BindingMode == BindingMode::Bindless)
{
- NumSRBs = 1;
+ NumSRBs = mNumSubsets;
}
mDevice->CreatePipelineState(PSODesc, &mAsteroidsPSO);
- mAsteroidsPSO->GetStaticVariableByName(SHADER_TYPE_VERTEX, "DrawConstantBuffer")->Set(mDrawConstantBuffer);
+ if (m_BindingMode != BindingMode::Bindless)
+ mAsteroidsPSO->GetStaticVariableByName(SHADER_TYPE_VERTEX, "DrawConstantBuffer")->Set(mDrawConstantBuffer);
mAsteroidsSRBs.resize(NumSRBs);
for(size_t srb = 0; srb < mAsteroidsSRBs.size(); ++srb)
@@ -564,7 +601,11 @@ Asteroids::Asteroids(const Settings &settings, AsteroidsSimulation* asteroids, G
IDeviceObject* SRVArray[NUM_UNIQUE_TEXTURES];
for(Uint32 t = 0; t < NUM_UNIQUE_TEXTURES; ++t)
SRVArray[t] = mTextureSRVs[t];
- mAsteroidsSRBs[0]->GetVariableByName(SHADER_TYPE_PIXEL, "Tex")->SetArray(SRVArray, 0, NUM_UNIQUE_TEXTURES);
+ for(Uint32 i = 0; i < mNumSubsets; ++i)
+ {
+ mAsteroidsSRBs[i]->GetVariableByName(SHADER_TYPE_PIXEL, "Tex")->SetArray(SRVArray, 0, NUM_UNIQUE_TEXTURES);
+ mAsteroidsSRBs[i]->GetVariableByName(SHADER_TYPE_VERTEX, "g_Data")->Set(mAsteroidsDataBuffers[i]->GetDefaultView(BUFFER_VIEW_SHADER_RESOURCE));
+ }
}
mDeviceCtxt->TransitionResourceStates(static_cast<Uint32>(Barriers.size()), Barriers.data());
}
@@ -790,24 +831,41 @@ void Asteroids::RenderSubset(Diligent::Uint32 SubsetNum,
pCtx->SetPipelineState(mAsteroidsPSO);
{
- IBuffer* ia_buffers[] = { mVertexBuffer };
- Uint32 ia_offsets[] = { 0 };
- pCtx->SetVertexBuffers(0, 1, ia_buffers, ia_offsets, RESOURCE_STATE_TRANSITION_MODE_VERIFY, SET_VERTEX_BUFFERS_FLAG_NONE);
+ IBuffer* ia_buffers[] = { mVertexBuffer, mInstanceIDBuffer };
+ Uint32 ia_offsets[_countof(ia_buffers)] = {};
+ pCtx->SetVertexBuffers(0, (m_BindingMode == BindingMode::Bindless) ? 2 : 1, ia_buffers, ia_offsets, RESOURCE_STATE_TRANSITION_MODE_VERIFY, SET_VERTEX_BUFFERS_FLAG_NONE);
pCtx->SetIndexBuffer(mIndexBuffer, 0, RESOURCE_STATE_TRANSITION_MODE_VERIFY);
}
- auto pVar = m_BindingMode == BindingMode::Dynamic ? mAsteroidsSRBs[SubsetNum]->GetVariableByName(SHADER_TYPE_PIXEL, "Tex") : nullptr;
- if( m_BindingMode == BindingMode::Bindless)
+ auto viewProjection = camera.ViewProjection();
+
+ if (m_BindingMode == BindingMode::Bindless)
{
- pCtx->CommitShaderResources(mAsteroidsSRBs[0], RESOURCE_STATE_TRANSITION_MODE_VERIFY);
+ {
+ MapHelper<DrawConstantBuffer> drawConstants(pCtx, mAsteroidsDataBuffers[SubsetNum], MAP_WRITE, MAP_FLAG_DISCARD);
+ UINT i=0;
+ for (UINT drawIdx = startIdx; drawIdx < startIdx+numAsteroids; ++drawIdx, ++i)
+ {
+ const auto staticData = &staticAsteroidData[drawIdx];
+ const auto dynamicData = &dynamicAsteroidData[drawIdx];
+
+ XMStoreFloat4x4(&drawConstants[i].mWorld, dynamicData->world);
+ XMStoreFloat4x4(&drawConstants[i].mViewProjection, viewProjection);
+ drawConstants[i].mSurfaceColor = staticData->surfaceColor;
+ drawConstants[i].mDeepColor = staticData->deepColor;
+ drawConstants[i].mTextureIndex = staticData->textureIndex;
+ }
+ }
+ pCtx->CommitShaderResources(mAsteroidsSRBs[SubsetNum], RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
}
-
- auto viewProjection = camera.ViewProjection();
+
+ auto pVar = m_BindingMode == BindingMode::Dynamic ? mAsteroidsSRBs[SubsetNum]->GetVariableByName(SHADER_TYPE_PIXEL, "Tex") : nullptr;
for (UINT drawIdx = startIdx; drawIdx < startIdx+numAsteroids; ++drawIdx)
{
- auto staticData = &staticAsteroidData[drawIdx];
- auto dynamicData = &dynamicAsteroidData[drawIdx];
+ const auto staticData = &staticAsteroidData[drawIdx];
+ const auto dynamicData = &dynamicAsteroidData[drawIdx];
+ if( m_BindingMode != BindingMode::Bindless )
{
MapHelper<DrawConstantBuffer> drawConstants(pCtx, mDrawConstantBuffer, MAP_WRITE, MAP_FLAG_DISCARD);
XMStoreFloat4x4(&drawConstants->mWorld, dynamicData->world);
@@ -816,6 +874,7 @@ void Asteroids::RenderSubset(Diligent::Uint32 SubsetNum,
drawConstants->mDeepColor = staticData->deepColor;
drawConstants->mTextureIndex = staticData->textureIndex;
}
+
if( m_BindingMode == BindingMode::Dynamic )
{
pVar->Set(mTextureSRVs[staticData->textureIndex]);
@@ -830,10 +889,11 @@ void Asteroids::RenderSubset(Diligent::Uint32 SubsetNum,
pCtx->CommitShaderResources(mAsteroidsSRBs[staticData->textureIndex], RESOURCE_STATE_TRANSITION_MODE_VERIFY);
}
- DrawAttribs attribs(dynamicData->indexCount, VT_UINT16, DRAW_FLAG_VERIFY_ALL);
+ DrawIndexedAttribs attribs(dynamicData->indexCount, VT_UINT16, DRAW_FLAG_VERIFY_ALL);
attribs.FirstIndexLocation = dynamicData->indexStart;
attribs.BaseVertex = staticData->vertexStart;
- pCtx->Draw(attribs);
+ attribs.FirstInstanceLocation = drawIdx - startIdx;
+ pCtx->DrawIndexed(attribs);
}
}
@@ -853,7 +913,7 @@ void Asteroids::Render(float frameTime, const OrbitCamera& camera, const Setting
QueryPerformanceCounter((LARGE_INTEGER*)&currCounter);
mUpdateTicks = currCounter;
- auto SubsetSize = NUM_ASTEROIDS / (settings.multithreadedRendering ? mNumSubsets : 1);
+ auto SubsetSize = NUM_ASTEROIDS / mNumSubsets;
if (settings.multithreadedRendering)
{
@@ -861,7 +921,9 @@ void Asteroids::Render(float frameTime, const OrbitCamera& camera, const Setting
mUpdateSubsetsSignal.Trigger(true);
}
- mAsteroids->Update(frameTime, camera.Eye(), settings, 0, SubsetSize);
+
+ for(Uint32 i=0; i < (!settings.multithreadedRendering ? mNumSubsets : 1); ++i)
+ mAsteroids->Update(frameTime, camera.Eye(), settings, SubsetSize * i, SubsetSize);
if (settings.multithreadedRendering)
{
@@ -885,7 +947,8 @@ void Asteroids::Render(float frameTime, const OrbitCamera& camera, const Setting
mRenderSubsetsSignal.Trigger(true);
}
- RenderSubset(0, mDeviceCtxt, camera, 0, SubsetSize);
+ for(Uint32 i=0; i < (!settings.multithreadedRendering ? mNumSubsets : 1); ++i)
+ RenderSubset(i, mDeviceCtxt, camera, SubsetSize * i, SubsetSize);
if (settings.multithreadedRendering)
{
diff --git a/Projects/Asteroids/src/asteroids_DE.h b/Projects/Asteroids/src/asteroids_DE.h
index 60a56cc..2857ac0 100644
--- a/Projects/Asteroids/src/asteroids_DE.h
+++ b/Projects/Asteroids/src/asteroids_DE.h
@@ -83,6 +83,8 @@ private:
Diligent::RefCntAutoPtr<Diligent::IBuffer> mIndexBuffer;
Diligent::RefCntAutoPtr<Diligent::IBuffer> mVertexBuffer;
+ Diligent::RefCntAutoPtr<Diligent::IBuffer> mInstanceIDBuffer;
+ std::vector<Diligent::RefCntAutoPtr<Diligent::IBuffer>> mAsteroidsDataBuffers;
Diligent::RefCntAutoPtr<Diligent::IBuffer> mDrawConstantBuffer;
Diligent::RefCntAutoPtr<Diligent::IBuffer> mSpriteVertexBuffer;
Diligent::RefCntAutoPtr<Diligent::IBuffer> mSkyboxConstantBuffer;
diff --git a/Projects/Asteroids/src/shader_common.h b/Projects/Asteroids/src/shader_common.h
new file mode 100644
index 0000000..ced6a70
--- /dev/null
+++ b/Projects/Asteroids/src/shader_common.h
@@ -0,0 +1,25 @@
+#ifndef SHADER_COMMON_H
+#define SHADER_COMMON_H
+
+struct VSOut
+{
+ float3 positionModel : POSITIONMODEL;
+ float3 normalWorld : NORMAL;
+ float3 albedo : ALBEDO;
+ uint textureId : TEXTURE_ID;
+};
+
+struct AsteroidData
+{
+ float4x4 World;
+ float4x4 ViewProjection;
+ float4 SurfaceColor;
+ float4 DeepColor;
+
+ uint TextureIndex;
+ uint Padding0;
+ uint Padding1;
+ uint Padding2;
+};
+
+#endif