From 5e42bc1033a7a825c0a03f2379a30c45decef92f Mon Sep 17 00:00:00 2001
From: Robert Goulet <robert.goulet@autodesk.com>
Date: Tue, 27 Jan 2015 12:40:11 -0500
Subject: [PATCH] Add documentation and test case.

---
 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 ++
 5 files changed, 19 insertions(+), 6 deletions(-)
 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 68954c5..ef6ce41 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -296,6 +296,7 @@ Properties on Source Files
    /prop_sf/VS_SHADER_ENTRYPOINT
    /prop_sf/VS_SHADER_MODEL
    /prop_sf/VS_SHADER_TYPE
+   /prop_sf/VS_SHADER_FLAGS
    /prop_sf/WRAP_EXCLUDE
    /prop_sf/XCODE_EXPLICIT_FILE_TYPE
    /prop_sf/XCODE_LAST_KNOWN_FILE_TYPE
diff --git a/Help/prop_sf/VS_SHADER_FLAGS.rst b/Help/prop_sf/VS_SHADER_FLAGS.rst
new file mode 100644
index 0000000..938fc72
--- /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 0000000..0d3f6cc
--- /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 2ce1c38..d2f6ffd 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -1234,11 +1234,12 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
       shaderModel = sm;
       toolHasSettings = true;
       }
-	if (const char* saf = sf->GetProperty("VS_SHADER_FLAGS"))
-	  {
-	  shaderAdditionalFlags = saf;
-	  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")
@@ -1348,7 +1349,7 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
       (*this->BuildFileStream) << cmVS10EscapeXML(shaderModel)
                                << "</ShaderModel>\n";
       }
-	if(!shaderAdditionalFlags.empty())
+    if(!shaderAdditionalFlags.empty())
       {
       this->WriteString("<AdditionalOptions>", 3);
       (*this->BuildFileStream) << cmVS10EscapeXML(shaderAdditionalFlags)
diff --git a/Tests/VSWinStorePhone/CMakeLists.txt b/Tests/VSWinStorePhone/CMakeLists.txt
index 7227fcc..719a594 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 "/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 "/Fh $(OutDir)%(Filename).h")
 
 
 source_group("Source Files" FILES ${SOURCE_FILES})
-- 
1.9.4.msysgit.0

From 329b1ef82275acc164d17675c44b5e810b32afc6 Mon Sep 17 00:00:00 2001
From: Robert Goulet <robert.goulet@autodesk.com>
Date: Mon, 26 Jan 2015 14:16:42 -0500
Subject: [PATCH] Add VS_SHADER_FLAGS source file property so that we can set
 all other Visual Studio .hlsl shader file compilation flags.

---
 Source/cmVisualStudio10TargetGenerator.cxx | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index b265c0e..2ce1c38 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,11 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
       shaderModel = sm;
       toolHasSettings = true;
       }
+	if (const char* saf = sf->GetProperty("VS_SHADER_FLAGS"))
+	  {
+	  shaderAdditionalFlags = saf;
+	  toolHasSettings = true;
+	  }
     }
   else if(ext == "jpg" ||
           ext == "png")
@@ -1342,6 +1348,12 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
       (*this->BuildFileStream) << cmVS10EscapeXML(shaderModel)
                                << "</ShaderModel>\n";
       }
+	if(!shaderAdditionalFlags.empty())
+      {
+      this->WriteString("<AdditionalOptions>", 3);
+      (*this->BuildFileStream) << cmVS10EscapeXML(shaderAdditionalFlags)
+                               << "</AdditionalOptions>\n";
+      }
     this->WriteString("</", 2);
     (*this->BuildFileStream) << tool << ">\n";
     }
-- 
1.9.4.msysgit.0

