1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-27 22:54:16 +01:00

[dxbc] Parse OSG5 chunk for Shader Model 5 geometry shaders

This commit is contained in:
Philip Rebohle 2018-05-31 22:13:08 +02:00
parent 102591369e
commit 07ef25fec5
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
3 changed files with 8 additions and 10 deletions

View File

@ -2,7 +2,7 @@
namespace dxvk { namespace dxvk {
DxbcIsgn::DxbcIsgn(DxbcReader reader) { DxbcIsgn::DxbcIsgn(DxbcReader reader, DxbcTag tag) {
uint32_t elementCount = reader.readu32(); uint32_t elementCount = reader.readu32();
reader.skip(sizeof(uint32_t)); reader.skip(sizeof(uint32_t));
@ -13,6 +13,7 @@ namespace dxvk {
for (uint32_t i = 0; i < elementCount; i++) { for (uint32_t i = 0; i < elementCount; i++) {
DxbcSgnEntry entry; DxbcSgnEntry entry;
entry.streamId = tag == "OSG5" ? reader.readu32() : 0;
entry.semanticName = reader.clone(reader.readu32()).readString(); entry.semanticName = reader.clone(reader.readu32()).readString();
entry.semanticIndex = reader.readu32(); entry.semanticIndex = reader.readu32();
entry.systemValue = static_cast<DxbcSystemValue>(reader.readu32()); entry.systemValue = static_cast<DxbcSystemValue>(reader.readu32());

View File

@ -22,6 +22,7 @@ namespace dxvk {
DxbcRegMask componentMask; DxbcRegMask componentMask;
DxbcScalarType componentType; DxbcScalarType componentType;
DxbcSystemValue systemValue; DxbcSystemValue systemValue;
uint32_t streamId;
}; };
/** /**
@ -34,7 +35,7 @@ namespace dxvk {
public: public:
DxbcIsgn(DxbcReader reader); DxbcIsgn(DxbcReader reader, DxbcTag tag);
~DxbcIsgn(); ~DxbcIsgn();
auto begin() const { return m_entries.cbegin(); } auto begin() const { return m_entries.cbegin(); }

View File

@ -24,14 +24,10 @@ namespace dxvk {
m_shexChunk = new DxbcShex(chunkReader); m_shexChunk = new DxbcShex(chunkReader);
if ((tag == "ISGN")) if ((tag == "ISGN"))
m_isgnChunk = new DxbcIsgn(chunkReader); m_isgnChunk = new DxbcIsgn(chunkReader, tag);
if ((tag == "OSGN"))
m_osgnChunk = new DxbcIsgn(chunkReader);
// if ((tag == "OSG5"))
// m_osgnChunk = new DxbcIsgn(chunkReader);
if ((tag == "OSGN") || (tag == "OSG5"))
m_osgnChunk = new DxbcIsgn(chunkReader, tag);
} }
} }