VS: Add source file properties to set the hlsl shader entry point and model

Create properties VS_SHADER_ENTRYPOINT and VS_SHADER_MODEL.  Without
these many .hlsl source files may not be possible to use.  Extend the
VSWinStorePhone test project to cover them.
This commit is contained in:
Cedric Perthuis 2014-12-02 01:41:10 -08:00 committed by Brad King
parent 433c6d4689
commit 2a224b4ce3
8 changed files with 50 additions and 5 deletions

View File

@ -291,6 +291,8 @@ Properties on Source Files
/prop_sf/OBJECT_OUTPUTS
/prop_sf/SYMBOLIC
/prop_sf/VS_DEPLOYMENT_CONTENT
/prop_sf/VS_SHADER_ENTRYPOINT
/prop_sf/VS_SHADER_MODEL
/prop_sf/VS_SHADER_TYPE
/prop_sf/WRAP_EXCLUDE
/prop_sf/XCODE_EXPLICIT_FILE_TYPE

View File

@ -0,0 +1,5 @@
VS_SHADER_ENTRYPOINT
--------------------
Specifies the name of the entry point for the shader of a ``.hlsl`` source
file.

View File

@ -0,0 +1,5 @@
VS_SHADER_MODEL
---------------
Specifies the shader model of a ``.hlsl`` source file. Some shader types can
only be used with recent shader models

View File

@ -310,8 +310,10 @@ Other
* The Visual Studio generators learned to treat ``.hlsl`` source
files as High Level Shading Language sources (using ``FXCompile``
in ``.vcxproj`` files). A :prop_sf:`VS_SHADER_TYPE` source file
property was added to specify the Shader Type.
in ``.vcxproj`` files). Source file properties
:prop_sf:`VS_SHADER_TYPE`, :prop_sf:`VS_SHADER_MODEL`, and
:prop_sf:`VS_SHADER_ENTRYPOINT` were added added to specify the
shader type, model, and entry point name.
New Diagnostics
===============

View File

@ -1203,6 +1203,8 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
bool toolHasSettings = false;
std::string tool = "None";
std::string shaderType;
std::string shaderEntryPoint;
std::string shaderModel;
std::string ext = cmSystemTools::LowerCase(sf->GetExtension());
if(ext == "hlsl")
{
@ -1213,6 +1215,18 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
shaderType = st;
toolHasSettings = true;
}
// Figure out which entry point to use if any
if (const char* se = sf->GetProperty("VS_SHADER_ENTRYPOINT"))
{
shaderEntryPoint = se;
toolHasSettings = true;
}
// Figure out which entry point to use if any
if (const char* sm = sf->GetProperty("VS_SHADER_MODEL"))
{
shaderModel = sm;
toolHasSettings = true;
}
}
else if(ext == "jpg" ||
ext == "png")
@ -1295,7 +1309,18 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
(*this->BuildFileStream) << cmVS10EscapeXML(shaderType)
<< "</ShaderType>\n";
}
if(!shaderEntryPoint.empty())
{
this->WriteString("<EntryPointName>", 3);
(*this->BuildFileStream) << cmVS10EscapeXML(shaderEntryPoint)
<< "</EntryPointName>\n";
}
if(!shaderModel.empty())
{
this->WriteString("<ShaderModel>", 3);
(*this->BuildFileStream) << cmVS10EscapeXML(shaderModel)
<< "</ShaderModel>\n";
}
this->WriteString("</", 2);
(*this->BuildFileStream) << tool << ">\n";
}

View File

@ -103,7 +103,13 @@ set_property(SOURCE ${RELEASE_CONTENT_FILES} PROPERTY
VS_DEPLOYMENT_CONTENT $<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>,$<CONFIG:MinSizeRel>>)
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 ${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)
source_group("Source Files" FILES ${SOURCE_FILES})
source_group("Header Files" FILES ${HEADER_FILES})

View File

@ -4,7 +4,7 @@ struct PixelShaderInput
float3 color : COLOR0;
};
float4 main(PixelShaderInput input) : SV_TARGET
float4 mainPS(PixelShaderInput input) : SV_TARGET
{
return float4(input.color,1.0f);
}

View File

@ -17,7 +17,7 @@ struct VertexShaderOutput
float3 color : COLOR0;
};
VertexShaderOutput main(VertexShaderInput input)
VertexShaderOutput mainVS(VertexShaderInput input)
{
VertexShaderOutput output;
float4 pos = float4(input.pos, 1.0f);