Skip to content

Commit

Permalink
Add a project for Vulkan port.
Browse files Browse the repository at this point in the history
  • Loading branch information
vlj committed Jun 13, 2016
1 parent 957102a commit ed16a35
Show file tree
Hide file tree
Showing 51 changed files with 53,358 additions and 840 deletions.
94 changes: 94 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlinesLeft: false
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Allman
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 90
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '$'
IndentCaseLabels: false
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments: true
SortIncludes: true
SpaceAfterCStyleCast: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 8
UseTab: Never
JavaScriptQuotes: Leave
...

1 change: 1 addition & 0 deletions amd_lib/build/AMD_LIB_Minimal_2015.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@
<ItemGroup>
<ClInclude Include="..\inc\AMD_LIB.h" />
<ClInclude Include="..\inc\AMD_Types.h" />
<ClInclude Include="..\inc\AMD_Vectors.h" />
<ClInclude Include="..\src\AMD_Buffer.h" />
<ClInclude Include="..\src\AMD_Common.h" />
<ClInclude Include="..\src\AMD_FullscreenPass.h" />
Expand Down
5 changes: 4 additions & 1 deletion amd_lib/build/AMD_LIB_Minimal_2015.vcxproj.filters
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="inc">
Expand Down Expand Up @@ -77,6 +77,9 @@
<ClInclude Include="..\src\DirectXTex\ScreenGrab.h">
<Filter>src\DirectXTex</Filter>
</ClInclude>
<ClInclude Include="..\inc\AMD_Vectors.h">
<Filter>inc</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\AMD_Buffer.cpp">
Expand Down
4 changes: 4 additions & 0 deletions amd_lib/inc/AMD_Types.h
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,11 @@ namespace AMD
#define AMD_SAFE_DELETE_ARRAY(p) { delete [] (p); (p) = nullptr; }
#endif
#ifndef AMD_SAFE_RELEASE
#ifndef VULKAN
#define AMD_SAFE_RELEASE(p) { if (p) { (p)->Release(); } (p) = nullptr; }
#else
#define AMD_SAFE_RELEASE(object, releaseFunction, device) if (object != nullptr) releaseFunction(device, object, nullptr);
#endif
#endif

#define AMD_FUNCTION_WIDEN2(x) L ## x
Expand Down
8 changes: 8 additions & 0 deletions amd_lib/inc/AMD_Vectors.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#pragma once
#include <d3d11.h>
#include <DirectXMath.h>

typedef DirectX::XMFLOAT3 V_FLOAT3;
typedef DirectX::XMFLOAT4 V_FLOAT4;
typedef DirectX::XMVECTOR V_UNTYPED4;
typedef DirectX::XMMATRIX M_FLOAT4X4;
114 changes: 94 additions & 20 deletions amd_tressfx/inc/AMD_TressFX.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,13 @@
#ifndef AMD_TRESSFX_H
#define AMD_TRESSFX_H

#ifndef VULKAN
#include <d3d11.h>
#include <DirectXMath.h>
#else
#include <vulkan\vulkan.h>
#endif

#include "AMD_Vectors.h"

#define AMD_TRESSFX_VERSION_MAJOR 3
#define AMD_TRESSFX_VERSION_MINOR 1
Expand Down Expand Up @@ -75,6 +80,19 @@
#define IDSRV_HAIR_FRAGMENT_COLORS 14
#define IDSRV_HAIR_ACCUM_INV_ALPHA 15

#define IDSRV_CONSTANTS_BUFFER 16
#define IDSRV_ATOMIC_COUNTER_BUFFER 17
#define IDSRV_NOISE_SAMPLER 18
#define IDSRV_SHADOW_SAMPLER 19

#define IDSRV_HAIR_PREVIOUS_VERTEX_POSITIONS 20
#define IDSRV_HAIR_VERTEX_INITIAL_POSITIONS 21
#define IDSRV_HAIR_STRAND_TYPE 22
#define IDSRV_HAIR_GLOBAL_ROTATION 23
#define IDSRV_HAIR_LOCAL_REF_VEC 24
#define IDSRV_HAIR_ROOT_OFFSET 25
#define IDSRV_HAIR_LENGTH 26
#define IDSRV_HEAD_TRANSFORM 27

#if defined(DEBUG) || defined(_DEBUG)
#define AMD_TRESSFX_DEBUG 1
Expand Down Expand Up @@ -113,15 +131,15 @@ struct TressFX_HairParams
int strandCopies; // number of strands to duplicate
float duplicateStrandSpacing; // distance between hairs duplicated hairs
bool bThinTip; // if true, the end of the hair is tapered
DirectX::XMFLOAT3 color; // hair color
V_FLOAT3 color; // hair color
int shadowTechnique; // hair self shadowing technique
float shadowMapAlpha; // shadow map transparency value
bool bSimulation; // enable/disable simulation
float targetFrameRateForSimulation; // i.e 1/60
bool bAntialias; // enable/disable antialiasing
int maxFragments; // maximum number of overlapping fragments to render per pixel
DirectX::XMFLOAT4 ambientLightColor; // ambient light color
DirectX::XMFLOAT4 pointLightColor; // color of the point light
V_FLOAT4 ambientLightColor; // ambient light color
V_FLOAT4 pointLightColor; // color of the point light
};

struct TressFX_ShapeParams
Expand All @@ -137,7 +155,7 @@ struct TressFX_SimulationParams
float gravityMagnitude;
bool bCollision;
bool bGuideFollowSimulation;
DirectX::XMFLOAT3 windDir;
V_FLOAT3 windDir;
float windMag;
int numLengthConstraintIterations;
int numLocalShapeMatchingIterations;
Expand All @@ -149,12 +167,12 @@ struct TressFX_SimulationParams

struct TressFX_CollisionCapsule
{
DirectX::XMFLOAT4 cc0_center1AndRadius;
DirectX::XMFLOAT4 cc0_center2AndRadiusSquared;
DirectX::XMFLOAT4 cc1_center1AndRadius;
DirectX::XMFLOAT4 cc1_center2AndRadiusSquared;
DirectX::XMFLOAT4 cc2_center1AndRadius;
DirectX::XMFLOAT4 cc2_center2AndRadiusSquared;
V_FLOAT4 cc0_center1AndRadius;
V_FLOAT4 cc0_center2AndRadiusSquared;
V_FLOAT4 cc1_center1AndRadius;
V_FLOAT4 cc1_center2AndRadiusSquared;
V_FLOAT4 cc2_center1AndRadius;
V_FLOAT4 cc2_center2AndRadiusSquared;
};

struct TressFX_HairBlob
Expand All @@ -167,10 +185,18 @@ struct TressFX_HairBlob

struct TressFX_SceneMesh
{
#ifndef VULKAN
ID3D11ShaderResourceView* pMeshVertices; // untransformed vertices
#else
VkBufferView pMeshVertices; // untransformed vertices
#endif
unsigned numMeshes; // number of meshes
unsigned* meshOffsets; // offset to the start of each mesh
#ifndef VULKAN
ID3D11ShaderResourceView* pTransformedVerts; // transformed vertices
#else
VkBufferView pTransformedVerts; // untransformed vertices
#endif
};

struct TressFX_HairTransform
Expand Down Expand Up @@ -207,16 +233,16 @@ struct TressFX_Desc
void * pTressFXMesh;
unsigned groupID;

DirectX::XMMATRIX mWorld;
DirectX::XMMATRIX mViewProj;
DirectX::XMMATRIX mInvViewProj;
M_FLOAT4X4 mWorld;
M_FLOAT4X4 mViewProj;
M_FLOAT4X4 mInvViewProj;

// this gets initialized by the library in AMD_TressFXBegin
DirectX::XMMATRIX mViewProjLightFromLibrary;
M_FLOAT4X4 mViewProjLightFromLibrary;

DirectX::XMVECTOR eyePoint;
DirectX::XMVECTOR lightPosition;
DirectX::XMMATRIX modelTransformForHead;
V_UNTYPED4 eyePoint;
V_UNTYPED4 lightPosition;
M_FLOAT4X4 modelTransformForHead;
bool bWarp;
float targetFrameRate;
int numTotalHairStrands;
Expand All @@ -228,32 +254,80 @@ struct TressFX_Desc
// Buffer of transformations (one transform per strand) for hair skinning
// This UAV is used as a structured buffer where each element is a TressFX_HairTransform.
// The number of elements in the buffer is numTotalHairStrands.
#ifndef VULKAN
ID3D11UnorderedAccessView* pSkinningTransformationsUAV;
#else
VkBufferView pSkinningTransformationsUAV;
#endif

// hair shadow map
#ifndef VULKAN
ID3D11ShaderResourceView* pHairShadowMapSRV;
#else
VkImageView pHairShadowMapSRV;
#endif

#ifndef VULKAN
ID3D11Device* pd3dDevice;
ID3D11DeviceContext* pd3dDeviceContext;
ID3D11ShaderResourceView* pd3dDepthSRV;
ID3D11RenderTargetView* pd3dOutputRTV;
#else
VkDevice pvkDevice;
uint32_t memoryIndexDeviceLocal;
uint32_t memoryIndexHostVisible;
VkImageView pvkDepthSRV;
uint32_t maxConstantBuffers;
VkFormat depthStencilFormat;
VkFormat colorFormat;
#endif // !VULKAN
};

extern "C"
{
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_GetVersion(uint* major, uint* minor, uint* patch);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Initialize(TressFX_Desc & desc);
#ifdef VULKAN
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Initialize(
TressFX_Desc &desc, VkImageView depthTexture, VkImageView colorTexture,
VkCommandBuffer commandBuffer, VkDeviceMemory scratchMemory,
VkBuffer scratchBuffer, size_t &offsetInScratchBuffer);
#else
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Initialize(TressFX_Desc &desc);
#endif
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_LoadRawAsset(TressFX_Desc & desc, const TressFX_GuideFollowParams& guideFollowParams, TressFX_HairBlob *pRawHairBlob);
#ifndef VULKAN
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_LoadProcessedAsset(TressFX_Desc & desc, TressFX_HairBlob *pHairBlob, TressFX_SceneMesh *sceneMesh, ID3D11ShaderResourceView *pTextureSRV);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_CreateProcessedAsset(TressFX_Desc & desc, TressFX_HairBlob **ppHairBlob, TressFX_SceneMesh *sceneMesh, ID3D11ShaderResourceView *pTextureSRV);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Begin(TressFX_Desc & desc);
#else
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_LoadProcessedAsset(
TressFX_Desc &desc, TressFX_HairBlob *pHairBlob,
TressFX_SceneMesh *sceneMesh, VkImageView pTextureSRV,
VkCommandBuffer uploadCmdBuffer,
VkBuffer scratchBuffer, VkDeviceMemory scratchMemory);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_CreateProcessedAsset(
TressFX_Desc &desc, TressFX_HairBlob **ppHairBlob,
TressFX_SceneMesh *sceneMesh, VkImageView pTextureSRV,
VkCommandBuffer uploadCmdBuffer,
VkBuffer scratchBuffer, VkDeviceMemory scratchMemory);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Begin(TressFX_Desc & desc, uint32_t uniformBufferIndex);
#endif
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_End(TressFX_Desc & desc);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_GenerateTransforms(TressFX_Desc & desc, TressFX_SceneMesh &sceneMesh);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_ApplyRigidTransforms(TressFX_Desc & desc);
#ifndef VULKAN
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Simulate(TressFX_Desc & desc, float elapsedTime);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_RenderShadowMap(TressFX_Desc & desc);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Render(TressFX_Desc & desc);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Resize(TressFX_Desc & desc);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Resize(TressFX_Desc &desc);
#else
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Simulate(TressFX_Desc & desc, VkCommandBuffer commandBuffer, float elapsedTime, uint32_t uniformBufferIndex);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_RenderShadowMap(TressFX_Desc & desc, VkCommandBuffer commandBuffer, uint32_t uniformBufferIndex);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE
TressFX_Render(TressFX_Desc &desc, VkCommandBuffer commandBuffer, uint32_t uniformBufferIndex);
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE
TressFX_Resize(TressFX_Desc &desc, uint32_t texture_memory_index);
#endif
AMD_TRESSFX_DLL_API TRESSFX_RETURN_CODE TressFX_Release(TressFX_Desc & desc);
}

Expand Down
Loading

0 comments on commit ed16a35

Please sign in to comment.