1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-11-30 22:24:15 +01:00

[dxbc] Implemented stream instructions for single-stream GS

This commit is contained in:
Philip Rebohle 2018-02-04 22:59:15 +01:00
parent b8a540d4ef
commit 8c64a81e27
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
3 changed files with 25 additions and 5 deletions

View File

@ -215,6 +215,9 @@ namespace dxvk {
case DxbcOpcode::DclSampler:
return this->emitDclSampler(ins);
case DxbcOpcode::DclStream:
return this->emitDclStream(ins);
case DxbcOpcode::DclUavTyped:
case DxbcOpcode::DclResource:
return this->emitDclResourceTyped(ins);
@ -631,6 +634,12 @@ namespace dxvk {
}
void DxbcCompiler::emitDclStream(const DxbcShaderInstruction& ins) {
if (ins.dst[0].idx[0].offset != 0)
Logger::err("Dxbc: Multiple streams not supported");
}
void DxbcCompiler::emitDclResourceTyped(const DxbcShaderInstruction& ins) {
// dclResource takes two operands:
// (dst0) The resource register ID
@ -1727,12 +1736,14 @@ namespace dxvk {
void DxbcCompiler::emitGeometryEmit(const DxbcShaderInstruction& ins) {
switch (ins.op) {
case DxbcOpcode::Emit: {
case DxbcOpcode::Emit:
case DxbcOpcode::EmitStream: {
emitOutputSetup();
m_module.opEmitVertex();
} break;
case DxbcOpcode::Cut: {
case DxbcOpcode::Cut:
case DxbcOpcode::CutStream: {
m_module.opEndPrimitive();
} break;

View File

@ -430,6 +430,9 @@ namespace dxvk {
void emitDclSampler(
const DxbcShaderInstruction& ins);
void emitDclStream(
const DxbcShaderInstruction& ins);
void emitDclResourceTyped(
const DxbcShaderInstruction& ins);

View File

@ -567,9 +567,13 @@ namespace dxvk {
/* HsJoinPhase */
{ },
/* EmitStream */
{ },
{ 1, DxbcInstClass::GeometryEmit, {
{ DxbcOperandKind::DstReg, DxbcScalarType::Uint32 },
} },
/* CutStream */
{ },
{ 1, DxbcInstClass::GeometryEmit, {
{ DxbcOperandKind::DstReg, DxbcScalarType::Uint32 },
} },
/* EmitThenCutStream */
{ },
/* InterfaceCall */
@ -696,7 +700,9 @@ namespace dxvk {
{ DxbcOperandKind::SrcReg, DxbcScalarType::Float32 },
} },
/* DclStream */
{ },
{ 1, DxbcInstClass::Declaration, {
{ DxbcOperandKind::DstReg, DxbcScalarType::Uint32 },
} },
/* DclFunctionBody */
{ },
/* DclFunctionTable */