[D3D12] DXBC: Use the same code for dp4/dp3 as add/mul/max/min
This commit is contained in:
parent
b91866fa49
commit
b56ff6e325
|
@ -2311,6 +2311,9 @@ void DxbcShaderTranslator::ProcessVectorAluInstruction(
|
||||||
// max is commonly used as mov, but probably better not to convert it to
|
// max is commonly used as mov, but probably better not to convert it to
|
||||||
// make sure things like flusing denormals aren't affected.
|
// make sure things like flusing denormals aren't affected.
|
||||||
case AluVectorOpcode::kMin:
|
case AluVectorOpcode::kMin:
|
||||||
|
case AluVectorOpcode::kDp4:
|
||||||
|
case AluVectorOpcode::kDp3:
|
||||||
|
// dp4 and dp3 replicate the result implicitly.
|
||||||
shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(
|
shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(
|
||||||
kCoreOpcodes[uint32_t(instr.vector_opcode)]) |
|
kCoreOpcodes[uint32_t(instr.vector_opcode)]) |
|
||||||
ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(
|
ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(
|
||||||
|
@ -2438,34 +2441,6 @@ void DxbcShaderTranslator::ProcessVectorAluInstruction(
|
||||||
++stat_.movc_instruction_count;
|
++stat_.movc_instruction_count;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AluVectorOpcode::kDp4:
|
|
||||||
// Replicated implicitly.
|
|
||||||
shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_DP4) |
|
|
||||||
ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(
|
|
||||||
3 + operand_length_sums[1]));
|
|
||||||
shader_code_.push_back(
|
|
||||||
EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1));
|
|
||||||
shader_code_.push_back(system_temp_pv_);
|
|
||||||
UseDxbcSourceOperand(dxbc_operands[0]);
|
|
||||||
UseDxbcSourceOperand(dxbc_operands[1]);
|
|
||||||
++stat_.instruction_count;
|
|
||||||
++stat_.float_instruction_count;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AluVectorOpcode::kDp3:
|
|
||||||
// Replicated implicitly.
|
|
||||||
shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_DP3) |
|
|
||||||
ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(
|
|
||||||
3 + operand_length_sums[1]));
|
|
||||||
shader_code_.push_back(
|
|
||||||
EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1));
|
|
||||||
shader_code_.push_back(system_temp_pv_);
|
|
||||||
UseDxbcSourceOperand(dxbc_operands[0]);
|
|
||||||
UseDxbcSourceOperand(dxbc_operands[1]);
|
|
||||||
++stat_.instruction_count;
|
|
||||||
++stat_.float_instruction_count;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AluVectorOpcode::kDp2Add:
|
case AluVectorOpcode::kDp2Add:
|
||||||
// (dot(src0.xy, src1.xy) + src2.x).xxxx
|
// (dot(src0.xy, src1.xy) + src2.x).xxxx
|
||||||
replicate_result = true;
|
replicate_result = true;
|
||||||
|
|
Loading…
Reference in New Issue