From 4775c90145da7ec8a5a87ce5b8b88dc4fc8c1925 Mon Sep 17 00:00:00 2001 From: Robert Goulet Date: Mon, 26 Jan 2015 14:16:42 -0500 Subject: [PATCH] VS: Add source file property to set extra hlsl shader flags Create a VS_SHADER_FLAGS source file property so that we can set all other Visual Studio .hlsl shader file compilation flags. --- Help/manual/cmake-properties.7.rst | 1 + Help/prop_sf/VS_SHADER_FLAGS.rst | 4 ++++ Help/release/dev/vs-shader-flags.rst | 5 +++++ Source/cmVisualStudio10TargetGenerator.cxx | 13 +++++++++++++ Tests/VSWinStorePhone/CMakeLists.txt | 2 ++ .../Direct3DApp1/SimplePixelShader.hlsl | 4 ++++ .../Direct3DApp1/SimpleVertexShader.hlsl | 4 ++++ 7 files changed, 33 insertions(+) create mode 100644 Help/prop_sf/VS_SHADER_FLAGS.rst create mode 100644 Help/release/dev/vs-shader-flags.rst diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst index 68954c512..25f989f18 100644 --- a/Help/manual/cmake-properties.7.rst +++ b/Help/manual/cmake-properties.7.rst @@ -294,6 +294,7 @@ Properties on Source Files /prop_sf/VS_DEPLOYMENT_CONTENT /prop_sf/VS_DEPLOYMENT_LOCATION /prop_sf/VS_SHADER_ENTRYPOINT + /prop_sf/VS_SHADER_FLAGS /prop_sf/VS_SHADER_MODEL /prop_sf/VS_SHADER_TYPE /prop_sf/WRAP_EXCLUDE diff --git a/Help/prop_sf/VS_SHADER_FLAGS.rst b/Help/prop_sf/VS_SHADER_FLAGS.rst new file mode 100644 index 000000000..09011231b --- /dev/null +++ b/Help/prop_sf/VS_SHADER_FLAGS.rst @@ -0,0 +1,4 @@ +VS_SHADER_FLAGS +--------------- + +Set additional VS shader flags of a ``.hlsl`` source file. diff --git a/Help/release/dev/vs-shader-flags.rst b/Help/release/dev/vs-shader-flags.rst new file mode 100644 index 000000000..0d3f6cc3f --- /dev/null +++ b/Help/release/dev/vs-shader-flags.rst @@ -0,0 +1,5 @@ +vs-shader-flags +--------------- + +* A :prop_sf:`VS_SHADER_FLAGS` source file property was added to specify + additional shader flags to ``.hlsl`` files, for the Visual Studio generators. diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index b265c0ed9..d2f6ffd88 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -1211,6 +1211,7 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf) std::string shaderType; std::string shaderEntryPoint; std::string shaderModel; + std::string shaderAdditionalFlags; std::string ext = cmSystemTools::LowerCase(sf->GetExtension()); if(ext == "hlsl") { @@ -1233,6 +1234,12 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf) shaderModel = sm; toolHasSettings = true; } + // Figure out if there's any additional flags to use + if (const char* saf = sf->GetProperty("VS_SHADER_FLAGS")) + { + shaderAdditionalFlags = saf; + toolHasSettings = true; + } } else if(ext == "jpg" || ext == "png") @@ -1342,6 +1349,12 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf) (*this->BuildFileStream) << cmVS10EscapeXML(shaderModel) << "\n"; } + if(!shaderAdditionalFlags.empty()) + { + this->WriteString("", 3); + (*this->BuildFileStream) << cmVS10EscapeXML(shaderAdditionalFlags) + << "\n"; + } this->WriteString("BuildFileStream) << tool << ">\n"; } diff --git a/Tests/VSWinStorePhone/CMakeLists.txt b/Tests/VSWinStorePhone/CMakeLists.txt index 7227fcc03..8357d5f47 100644 --- a/Tests/VSWinStorePhone/CMakeLists.txt +++ b/Tests/VSWinStorePhone/CMakeLists.txt @@ -110,10 +110,12 @@ set_property(SOURCE ${RELEASE_CONTENT_FILES} PROPERTY set_property(SOURCE ${PIXELSHADER_FILES} PROPERTY VS_SHADER_TYPE Pixel) set_property(SOURCE ${PIXELSHADER_FILES} PROPERTY VS_SHADER_ENTRYPOINT mainPS) set_property(SOURCE ${PIXELSHADER_FILES} PROPERTY VS_SHADER_MODEL 4.0_level_9_3) +set_property(SOURCE ${PIXELSHADER_FILES} PROPERTY VS_SHADER_FLAGS "/DFLAGS_ADDED /Fh \"$(OutDir)%(Filename).h\"") set_property(SOURCE ${VERTEXSHADER_FILES} PROPERTY VS_SHADER_TYPE Vertex) set_property(SOURCE ${VERTEXSHADER_FILES} PROPERTY VS_SHADER_ENTRYPOINT mainVS) set_property(SOURCE ${VERTEXSHADER_FILES} PROPERTY VS_SHADER_MODEL 4.0_level_9_3) +set_property(SOURCE ${VERTEXSHADER_FILES} PROPERTY VS_SHADER_FLAGS "/DFLAGS_ADDED /Fh \"$(OutDir)%(Filename).h\"") source_group("Source Files" FILES ${SOURCE_FILES}) diff --git a/Tests/VSWinStorePhone/Direct3DApp1/SimplePixelShader.hlsl b/Tests/VSWinStorePhone/Direct3DApp1/SimplePixelShader.hlsl index 6796da1c1..b2fe7bef0 100644 --- a/Tests/VSWinStorePhone/Direct3DApp1/SimplePixelShader.hlsl +++ b/Tests/VSWinStorePhone/Direct3DApp1/SimplePixelShader.hlsl @@ -1,3 +1,7 @@ +#if !defined(FLAGS_ADDED) +# error FLAGS_ADDED not defined +#endif + struct PixelShaderInput { float4 pos : SV_POSITION; diff --git a/Tests/VSWinStorePhone/Direct3DApp1/SimpleVertexShader.hlsl b/Tests/VSWinStorePhone/Direct3DApp1/SimpleVertexShader.hlsl index 096306018..3f9a4ebbb 100644 --- a/Tests/VSWinStorePhone/Direct3DApp1/SimpleVertexShader.hlsl +++ b/Tests/VSWinStorePhone/Direct3DApp1/SimpleVertexShader.hlsl @@ -1,3 +1,7 @@ +#if !defined(FLAGS_ADDED) +# error FLAGS_ADDED not defined +#endif + cbuffer ModelViewProjectionConstantBuffer : register(b0) { matrix model;