[D3D12] Don't add .xyzw swizzle to stores

This commit is contained in:
Triang3l 2018-08-01 16:17:48 +03:00
parent 2b482352d0
commit 1ae30e5775
1 changed files with 21 additions and 13 deletions

View File

@ -742,16 +742,21 @@ void HlslShaderTranslator::EmitStoreResult(const InstructionResult& result,
}
} else {
bool has_const_writes = false;
uint32_t component_write_count = 0;
EmitSource(".");
for (uint32_t i = 0; i < 4; ++i) {
if (result.write_mask[i]) {
if (result.components[i] == SwizzleSource::k0 ||
result.components[i] == SwizzleSource::k1) {
has_const_writes = true;
uint32_t component_write_count;
if (result.is_standard_swizzle()) {
component_write_count = 4;
} else {
component_write_count = 0;
EmitSource(".");
for (uint32_t i = 0; i < 4; ++i) {
if (result.write_mask[i]) {
if (result.components[i] == SwizzleSource::k0 ||
result.components[i] == SwizzleSource::k1) {
has_const_writes = true;
}
++component_write_count;
EmitSource("%c", GetCharForSwizzle(GetSwizzleFromComponentIndex(i)));
}
++component_write_count;
EmitSource("%c", GetCharForSwizzle(GetSwizzleFromComponentIndex(i)));
}
}
EmitSource(" = ");
@ -802,10 +807,13 @@ void HlslShaderTranslator::EmitStoreResult(const InstructionResult& result,
}
}
} else {
EmitSource("xe_pv.");
for (uint32_t i = 0; i < 4; ++i) {
if (result.write_mask[i]) {
EmitSource("%c", GetCharForSwizzle(result.components[i]));
EmitSource("xe_pv");
if (!result.is_standard_swizzle()) {
EmitSource(".");
for (uint32_t i = 0; i < 4; ++i) {
if (result.write_mask[i]) {
EmitSource("%c", GetCharForSwizzle(result.components[i]));
}
}
}
}