From 5cb65a6c19049f7f48c0833e0c694c0641015be9 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 9 Apr 2018 22:52:59 +0200 Subject: [PATCH] [dxbc] Fix sampleinfo_uint instruction --- src/dxbc/dxbc_compiler.cpp | 5 ++--- src/dxbc/dxbc_decoder.cpp | 2 ++ src/dxbc/dxbc_decoder.h | 29 +++++++++++++++-------------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/dxbc/dxbc_compiler.cpp b/src/dxbc/dxbc_compiler.cpp index d7dd79538..1bd7f36d9 100644 --- a/src/dxbc/dxbc_compiler.cpp +++ b/src/dxbc/dxbc_compiler.cpp @@ -2709,9 +2709,8 @@ namespace dxvk { // TODO Check if resource is bound DxbcRegisterValue sampleCount = emitQueryTextureSamples(ins.src[0]); - if (ins.controls.resinfoType != DxbcResinfoType::Uint) { - sampleCount.type.ctype = DxbcScalarType::Float32; - sampleCount.type.ccount = 1; + if (ins.controls.returnType != DxbcInstructionReturnType::Uint) { + sampleCount.type = { DxbcScalarType::Float32, 1 }; sampleCount.id = m_module.opConvertUtoF( getVectorTypeId(sampleCount.type), sampleCount.id); diff --git a/src/dxbc/dxbc_decoder.cpp b/src/dxbc/dxbc_decoder.cpp index 918dce2c1..e1fcf6a3b 100644 --- a/src/dxbc/dxbc_decoder.cpp +++ b/src/dxbc/dxbc_decoder.cpp @@ -108,6 +108,8 @@ namespace dxvk { // Opcode controls. It will depend on the // opcode itself which ones are valid. // TODO refactor this nonsense + m_instruction.controls.returnType = + static_cast(bit::extract(token, 11, 11)); m_instruction.controls.globalFlags = static_cast(bit::extract(token, 11, 14)); m_instruction.controls.zeroTest = diff --git a/src/dxbc/dxbc_decoder.h b/src/dxbc/dxbc_decoder.h index 2c6a8ad9f..dd9cc9dd7 100644 --- a/src/dxbc/dxbc_decoder.h +++ b/src/dxbc/dxbc_decoder.h @@ -240,20 +240,21 @@ namespace dxvk { * only one of the members will be valid. */ struct DxbcShaderOpcodeControls { - DxbcGlobalFlags globalFlags; - DxbcZeroTest zeroTest; - DxbcSyncFlags syncFlags; - DxbcResourceDim resourceDim; - DxbcResinfoType resinfoType; - DxbcInterpolationMode interpolation; - DxbcSamplerMode samplerMode; - DxbcPrimitiveTopology primitiveTopology; - DxbcPrimitive primitive; - DxbcTessDomain tessDomain; - DxbcTessOutputPrimitive tessOutputPrimitive; - DxbcTessPartitioning tessPartitioning; - DxbcUavFlags uavFlags; - uint32_t controlPointCount; + DxbcInstructionReturnType returnType; + DxbcGlobalFlags globalFlags; + DxbcZeroTest zeroTest; + DxbcSyncFlags syncFlags; + DxbcResourceDim resourceDim; + DxbcResinfoType resinfoType; + DxbcInterpolationMode interpolation; + DxbcSamplerMode samplerMode; + DxbcPrimitiveTopology primitiveTopology; + DxbcPrimitive primitive; + DxbcTessDomain tessDomain; + DxbcTessOutputPrimitive tessOutputPrimitive; + DxbcTessPartitioning tessPartitioning; + DxbcUavFlags uavFlags; + uint32_t controlPointCount; };