mirror of https://github.com/bkaradzic/bgfx
Cleanup.
This commit is contained in:
parent
e501923756
commit
5edeea64a9
|
@ -573,16 +573,23 @@ namespace bgfx { namespace spirv
|
|||
const char* ptr = found.getPtr() + found.getLength();
|
||||
const char* start = NULL;
|
||||
const char* end = NULL;
|
||||
while (*ptr != ')' && ptr < _strLine.c_str() + _strLine.size())
|
||||
|
||||
while (*ptr != ')'
|
||||
&& ptr < _strLine.c_str() + _strLine.size() )
|
||||
{
|
||||
if (*ptr >= '0' && *ptr <= '9')
|
||||
{
|
||||
if (start == NULL)
|
||||
{
|
||||
start = ptr;
|
||||
}
|
||||
|
||||
end = ptr;
|
||||
}
|
||||
|
||||
ptr++;
|
||||
}
|
||||
|
||||
BX_CHECK(start != NULL && end != NULL, "cannot find register number");
|
||||
|
||||
bx::StringView numberString(start, end - start + 1);
|
||||
|
@ -814,9 +821,16 @@ namespace bgfx { namespace spirv
|
|||
!bx::findIdentifierMatch(strLine.c_str(), "SamplerComparisonState").isEmpty())
|
||||
{
|
||||
int32_t regNumber = extractStageNumber(strLine);
|
||||
|
||||
bx::StringView found = bx::findIdentifierMatch(strLine.c_str(), "SamplerState");
|
||||
if (found.isEmpty())
|
||||
found = bx::findIdentifierMatch(strLine.c_str(), "SamplerComparisonState");
|
||||
|
||||
if (found.isEmpty() )
|
||||
{
|
||||
found = bx::findIdentifierMatch(
|
||||
strLine.c_str()
|
||||
, "SamplerComparisonState"
|
||||
);
|
||||
}
|
||||
|
||||
const char* ptr = found.getPtr() + found.getLength();
|
||||
const char* start = NULL;
|
||||
|
@ -826,49 +840,62 @@ namespace bgfx { namespace spirv
|
|||
if (*ptr != ' ')
|
||||
{
|
||||
if (start == NULL)
|
||||
{
|
||||
start = ptr;
|
||||
}
|
||||
|
||||
end = ptr;
|
||||
}
|
||||
else if (start != NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
ptr++;
|
||||
}
|
||||
|
||||
BX_CHECK(start != NULL && end != NULL, "sampler name cannot be found");
|
||||
|
||||
std::string samplerName(start, end - start + 1);
|
||||
stageMap[samplerName] = regNumber;
|
||||
}
|
||||
}
|
||||
else if (!bx::findIdentifierMatch(strLine.c_str(), "StructuredBuffer").isEmpty() ||
|
||||
!bx::findIdentifierMatch(strLine.c_str(), "RWStructuredBuffer").isEmpty())
|
||||
else if (!bx::findIdentifierMatch(strLine.c_str(), "StructuredBuffer").isEmpty()
|
||||
|| !bx::findIdentifierMatch(strLine.c_str(), "RWStructuredBuffer").isEmpty() )
|
||||
{
|
||||
int32_t regNumber = extractStageNumber(strLine);
|
||||
|
||||
const char* ptr = strLine.c_str();
|
||||
const char* ptr = strLine.c_str();
|
||||
const char* start = NULL;
|
||||
const char* end = NULL;
|
||||
const char* end = NULL;
|
||||
while (ptr < strLine.c_str() + strLine.size())
|
||||
{
|
||||
if (*ptr == '>')
|
||||
{
|
||||
start = ptr + 1;
|
||||
while (*start == ' ')
|
||||
{
|
||||
start++;
|
||||
}
|
||||
}
|
||||
|
||||
if (*ptr == ':')
|
||||
{
|
||||
end = ptr - 1;
|
||||
while (*end == ' ')
|
||||
{
|
||||
end--;
|
||||
}
|
||||
}
|
||||
|
||||
if (start != NULL && end != NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
ptr++;
|
||||
}
|
||||
|
||||
BX_CHECK(start != NULL && end != NULL, "sampler name cannot be found");
|
||||
|
||||
std::string bufferName(start, end - start + 1);
|
||||
|
@ -898,17 +925,21 @@ namespace bgfx { namespace spirv
|
|||
case 0x1404: // GL_INT:
|
||||
un.type = UniformType::Sampler;
|
||||
break;
|
||||
|
||||
case 0x8B52: // GL_FLOAT_VEC4:
|
||||
un.type = UniformType::Vec4;
|
||||
break;
|
||||
|
||||
case 0x8B5B: // GL_FLOAT_MAT3:
|
||||
un.type = UniformType::Mat3;
|
||||
un.regCount *= 3;
|
||||
break;
|
||||
|
||||
case 0x8B5C: // GL_FLOAT_MAT4:
|
||||
un.type = UniformType::Mat4;
|
||||
un.regCount *= 4;
|
||||
break;
|
||||
|
||||
default:
|
||||
un.type = UniformType::End;
|
||||
break;
|
||||
|
@ -917,6 +948,7 @@ namespace bgfx { namespace spirv
|
|||
uniforms.push_back(un);
|
||||
}
|
||||
}
|
||||
|
||||
if (g_verbose)
|
||||
{
|
||||
program->dumpReflection();
|
||||
|
@ -947,7 +979,8 @@ namespace bgfx { namespace spirv
|
|||
opt.SetMessageConsumer(print_msg_to_stderr);
|
||||
|
||||
opt.RegisterLegalizationPasses();
|
||||
if (!opt.Run(spirv.data(), spirv.size(), &spirv))
|
||||
|
||||
if (!opt.Run(spirv.data(), spirv.size(), &spirv) )
|
||||
{
|
||||
compiled = false;
|
||||
}
|
||||
|
@ -965,7 +998,8 @@ namespace bgfx { namespace spirv
|
|||
for (auto &resource : resourcesrefl.separate_images)
|
||||
{
|
||||
std::string name = refl.get_name(resource.id);
|
||||
if (name.size() > 7 && 0 == bx::strCmp(name.c_str() + name.length() - 7, "Texture") )
|
||||
if (name.size() > 7
|
||||
&& 0 == bx::strCmp(name.c_str() + name.length() - 7, "Texture") )
|
||||
{
|
||||
auto uniform_name = name.substr(0, name.length() - 7);
|
||||
|
||||
|
@ -975,14 +1009,16 @@ namespace bgfx { namespace spirv
|
|||
|
||||
uint32_t texture_binding_index = refl.get_decoration(resource.id, spv::Decoration::DecorationBinding);
|
||||
uint32_t sampler_binding_index = 0;
|
||||
std::string sampler_name;
|
||||
std::string sampler_name;
|
||||
|
||||
for (auto& sampler_resource : resourcesrefl.separate_samplers)
|
||||
{
|
||||
sampler_name = refl.get_name(sampler_resource.id);
|
||||
if (sampler_name.size() > 7 &&
|
||||
!bx::strFind(sampler_name.c_str(), uniform_name.c_str()).isEmpty() &&
|
||||
(0 == bx::strCmp(sampler_name.c_str() + name.length() - 7, "Sampler") ||
|
||||
0 == bx::strCmp(sampler_name.c_str() + name.length() - 7, "SamplerComparison")))
|
||||
if (sampler_name.size() > 7
|
||||
&& !bx::strFind(sampler_name.c_str(), uniform_name.c_str()).isEmpty()
|
||||
&& (0 == bx::strCmp(sampler_name.c_str() + name.length() - 7, "Sampler") ||
|
||||
0 == bx::strCmp(sampler_name.c_str() + name.length() - 7, "SamplerComparison")
|
||||
) )
|
||||
{
|
||||
sampler_binding_index = refl.get_decoration(sampler_resource.id, spv::Decoration::DecorationBinding);
|
||||
break;
|
||||
|
@ -1001,7 +1037,9 @@ namespace bgfx { namespace spirv
|
|||
for (auto &resource : resourcesrefl.storage_images)
|
||||
{
|
||||
std::string name = refl.get_name(resource.id);
|
||||
if (name.size() > 7 && 0 == bx::strCmp(name.c_str() + name.length() - 7, "Texture") )
|
||||
|
||||
if (name.size() > 7
|
||||
&& 0 == bx::strCmp(name.c_str() + name.length() - 7, "Texture") )
|
||||
{
|
||||
auto uniform_name = name.substr(0, name.length() - 7);
|
||||
uint32_t binding_index = refl.get_decoration(resource.id, spv::Decoration::DecorationBinding);
|
||||
|
@ -1022,6 +1060,7 @@ namespace bgfx { namespace spirv
|
|||
for (auto& resource : resourcesrefl.storage_buffers)
|
||||
{
|
||||
std::string name = refl.get_name(resource.id);
|
||||
|
||||
for (auto& uniform : uniforms)
|
||||
{
|
||||
if (!bx::strFind(uniform.name.c_str(), name.c_str()).isEmpty())
|
||||
|
@ -1039,7 +1078,7 @@ namespace bgfx { namespace spirv
|
|||
|
||||
uint16_t size = writeUniformArray( _writer, uniforms, _options.shaderType == 'f');
|
||||
|
||||
if (_version == BX_MAKEFOURCC('M', 'T', 'L', 0))
|
||||
if (_version == BX_MAKEFOURCC('M', 'T', 'L', 0) )
|
||||
{
|
||||
if (g_verbose)
|
||||
{
|
||||
|
@ -1051,8 +1090,14 @@ namespace bgfx { namespace spirv
|
|||
spirv_cross::ShaderResources resources = msl.get_shader_resources();
|
||||
|
||||
spirv_cross::SmallVector<spirv_cross::EntryPoint> entryPoints = msl.get_entry_points_and_stages();
|
||||
if (!entryPoints.empty())
|
||||
msl.rename_entry_point(entryPoints[0].name, "xlatMtlMain", entryPoints[0].execution_model);
|
||||
if (!entryPoints.empty() )
|
||||
{
|
||||
msl.rename_entry_point(
|
||||
entryPoints[0].name
|
||||
, "xlatMtlMain"
|
||||
, entryPoints[0].execution_model
|
||||
);
|
||||
}
|
||||
|
||||
for (auto &resource : resources.uniform_buffers)
|
||||
{
|
||||
|
@ -1068,9 +1113,13 @@ namespace bgfx { namespace spirv
|
|||
for (auto &resource : resources.separate_images)
|
||||
{
|
||||
std::string name = msl.get_name(resource.id);
|
||||
if (name.size() > 7 && 0 == bx::strCmp(name.c_str() + name.length() - 7, "Texture") )
|
||||
if (name.size() > 7
|
||||
&& 0 == bx::strCmp(name.c_str() + name.length() - 7, "Texture") )
|
||||
{
|
||||
msl.set_name(resource.id, name.substr(0, name.length() - 7));
|
||||
}
|
||||
}
|
||||
|
||||
std::string source = msl.compile();
|
||||
|
||||
if ('c' == _options.shaderType)
|
||||
|
@ -1096,7 +1145,7 @@ namespace bgfx { namespace spirv
|
|||
uint8_t nul = 0;
|
||||
bx::write(_writer, nul);
|
||||
}
|
||||
//
|
||||
|
||||
const uint8_t numAttr = (uint8_t)program->getNumLiveAttributes();
|
||||
bx::write(_writer, numAttr);
|
||||
|
||||
|
|
Loading…
Reference in New Issue