Parcourir la source

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.
Robert Goulet il y a 11 ans
Parent
commit
4775c90145

+ 1 - 0
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

+ 4 - 0
Help/prop_sf/VS_SHADER_FLAGS.rst

@@ -0,0 +1,4 @@
+VS_SHADER_FLAGS
+---------------
+
+Set additional VS shader flags of a ``.hlsl`` source file.

+ 5 - 0
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.

+ 13 - 0
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)
                                << "</ShaderModel>\n";
       }
+    if(!shaderAdditionalFlags.empty())
+      {
+      this->WriteString("<AdditionalOptions>", 3);
+      (*this->BuildFileStream) << cmVS10EscapeXML(shaderAdditionalFlags)
+                               << "</AdditionalOptions>\n";
+      }
     this->WriteString("</", 2);
     (*this->BuildFileStream) << tool << ">\n";
     }

+ 2 - 0
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})

+ 4 - 0
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;

+ 4 - 0
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;