summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTriang3l <triang3l@yandex.ru>2020-02-02 21:05:00 +0300
committerTriang3l <triang3l@yandex.ru>2020-02-02 21:05:00 +0300
commit4061445087c06904dfeed307a18cebd8ee3ae6d2 (patch)
tree5023141660d6eb2eefb017b91cfc3d6614cb2ce4
parent38bf6c88221fa724efe2accea3d61033a7ccab37 (diff)
[GPU] Remove unused kConstantInt/Bool shader operands
-rw-r--r--src/xenia/gpu/d3d12/d3d12_command_processor.cc22
-rw-r--r--src/xenia/gpu/dxbc_shader_translator.cc207
-rw-r--r--src/xenia/gpu/dxbc_shader_translator.h7
-rw-r--r--src/xenia/gpu/shader.h10
-rw-r--r--src/xenia/gpu/shader_translator.cc6
-rw-r--r--src/xenia/gpu/shader_translator_disasm.cc6
-rw-r--r--src/xenia/gpu/vulkan/buffer_cache.cc2
7 files changed, 34 insertions, 226 deletions
diff --git a/src/xenia/gpu/d3d12/d3d12_command_processor.cc b/src/xenia/gpu/d3d12/d3d12_command_processor.cc
index 484b48739..0be3e5b5d 100644
--- a/src/xenia/gpu/d3d12/d3d12_command_processor.cc
+++ b/src/xenia/gpu/d3d12/d3d12_command_processor.cc
@@ -3053,23 +3053,15 @@ bool D3D12CommandProcessor::UpdateBindings(
write_float_constant_view_pixel = true;
}
if (!cbuffer_bindings_bool_loop_.up_to_date) {
- uint32_t* bool_loop_constants =
- reinterpret_cast<uint32_t*>(constant_buffer_pool_->Request(
- frame_current_, 768, nullptr, nullptr,
- &cbuffer_bindings_bool_loop_.buffer_address));
+ uint8_t* bool_loop_constants = constant_buffer_pool_->Request(
+ frame_current_, 256, nullptr, nullptr,
+ &cbuffer_bindings_bool_loop_.buffer_address);
if (bool_loop_constants == nullptr) {
return false;
}
- // Bool and loop constants are quadrupled to allow dynamic indexing.
- for (uint32_t i = 0; i < 40; ++i) {
- uint32_t bool_loop_constant =
- regs[XE_GPU_REG_SHADER_CONSTANT_BOOL_000_031 + i].u32;
- uint32_t* bool_loop_constant_vector = bool_loop_constants + (i << 2);
- bool_loop_constant_vector[0] = bool_loop_constant;
- bool_loop_constant_vector[1] = bool_loop_constant;
- bool_loop_constant_vector[2] = bool_loop_constant;
- bool_loop_constant_vector[3] = bool_loop_constant;
- }
+ std::memcpy(bool_loop_constants,
+ &regs[XE_GPU_REG_SHADER_CONSTANT_BOOL_000_031].u32,
+ (8 + 32) * sizeof(uint32_t));
cbuffer_bindings_bool_loop_.up_to_date = true;
write_bool_loop_constant_view = true;
}
@@ -3226,7 +3218,7 @@ bool D3D12CommandProcessor::UpdateBindings(
gpu_handle_bool_loop_constants_ = view_gpu_handle;
constant_buffer_desc.BufferLocation =
cbuffer_bindings_bool_loop_.buffer_address;
- constant_buffer_desc.SizeInBytes = 768;
+ constant_buffer_desc.SizeInBytes = 256;
device->CreateConstantBufferView(&constant_buffer_desc, view_cpu_handle);
view_cpu_handle.ptr += descriptor_size_view;
view_gpu_handle.ptr += descriptor_size_view;
diff --git a/src/xenia/gpu/dxbc_shader_translator.cc b/src/xenia/gpu/dxbc_shader_translator.cc
index f1de01c3d..927477516 100644
--- a/src/xenia/gpu/dxbc_shader_translator.cc
+++ b/src/xenia/gpu/dxbc_shader_translator.cc
@@ -162,7 +162,6 @@ void DxbcShaderTranslator::Reset() {
system_constants_used_ = 0;
float_constants_dynamic_indexed_ = false;
- bool_loop_constants_dynamic_indexed_ = false;
float_constant_index_offsets_.clear();
system_temp_count_current_ = 0;
@@ -2039,173 +2038,6 @@ void DxbcShaderTranslator::LoadDxbcSourceOperand(
}
break;
- case InstructionStorageSource::kConstantInt: {
- // ***********************************************************************
- // Loop constant
- // ***********************************************************************
- if (cbuffer_index_bool_loop_constants_ == kCbufferIndexUnallocated) {
- cbuffer_index_bool_loop_constants_ = cbuffer_count_++;
- }
- // Convert to float and store in the intermediate register.
- // The constant buffer contains each integer replicated in XYZW so dynamic
- // indexing is possible.
- dxbc_operand.type = DxbcSourceOperand::Type::kIntermediateRegister;
- if (dxbc_operand.intermediate_register ==
- DxbcSourceOperand::kIntermediateRegisterNone) {
- dxbc_operand.intermediate_register = PushSystemTemp();
- }
- bool is_static = operand.storage_addressing_mode ==
- InstructionStorageAddressingMode::kStatic;
- shader_code_.push_back(
- ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_ITOF) |
- ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(is_static ? 7 : 9));
- shader_code_.push_back(
- EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1));
- shader_code_.push_back(dxbc_operand.intermediate_register);
- shader_code_.push_back(EncodeVectorReplicatedOperand(
- D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, 0, 3,
- D3D10_SB_OPERAND_INDEX_IMMEDIATE32,
- D3D10_SB_OPERAND_INDEX_IMMEDIATE32,
- is_static ? D3D10_SB_OPERAND_INDEX_IMMEDIATE32
- : D3D10_SB_OPERAND_INDEX_IMMEDIATE32_PLUS_RELATIVE));
- shader_code_.push_back(cbuffer_index_bool_loop_constants_);
- shader_code_.push_back(uint32_t(CbufferRegister::kBoolLoopConstants));
- // 8 to skip bool constants.
- shader_code_.push_back(8 + uint32_t(operand.storage_index));
- if (!is_static) {
- shader_code_.push_back(EncodeVectorSelectOperand(
- D3D10_SB_OPERAND_TYPE_TEMP, dynamic_address_component, 1));
- shader_code_.push_back(dynamic_address_register);
- bool_loop_constants_dynamic_indexed_ = true;
- }
- ++stat_.instruction_count;
- ++stat_.conversion_instruction_count;
- } break;
-
- case InstructionStorageSource::kConstantBool: {
- // ***********************************************************************
- // Boolean constant
- // ***********************************************************************
- if (cbuffer_index_bool_loop_constants_ == kCbufferIndexUnallocated) {
- cbuffer_index_bool_loop_constants_ = cbuffer_count_++;
- }
- // Extract, convert to float and store in the intermediate register.
- // The constant buffer contains each 32-bit vector replicated in XYZW so
- // dynamic indexing is possible.
- dxbc_operand.type = DxbcSourceOperand::Type::kIntermediateRegister;
- if (dxbc_operand.intermediate_register ==
- DxbcSourceOperand::kIntermediateRegisterNone) {
- dxbc_operand.intermediate_register = PushSystemTemp();
- }
- if (operand.storage_addressing_mode ==
- InstructionStorageAddressingMode::kStatic) {
- // Extract the bit directly.
- shader_code_.push_back(
- ENCODE_D3D10_SB_OPCODE_TYPE(D3D11_SB_OPCODE_UBFE) |
- ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(11));
- shader_code_.push_back(
- EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0001, 1));
- shader_code_.push_back(dxbc_operand.intermediate_register);
- shader_code_.push_back(
- EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0));
- shader_code_.push_back(1);
- shader_code_.push_back(
- EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0));
- shader_code_.push_back(uint32_t(operand.storage_index) & 31);
- shader_code_.push_back(EncodeVectorSelectOperand(
- D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, 0, 3));
- shader_code_.push_back(cbuffer_index_bool_loop_constants_);
- shader_code_.push_back(uint32_t(CbufferRegister::kBoolLoopConstants));
- shader_code_.push_back(uint32_t(operand.storage_index) >> 5);
- ++stat_.instruction_count;
- ++stat_.uint_instruction_count;
- } else {
- bool_loop_constants_dynamic_indexed_ = true;
- uint32_t constant_address_register = dynamic_address_register;
- uint32_t constant_address_component = dynamic_address_component;
- if (operand.storage_index != 0) {
- // Has an offset - add it.
- shader_code_.push_back(
- ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_IADD) |
- ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(7));
- shader_code_.push_back(
- EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0001, 1));
- shader_code_.push_back(dxbc_operand.intermediate_register);
- shader_code_.push_back(EncodeVectorSelectOperand(
- D3D10_SB_OPERAND_TYPE_TEMP, constant_address_component, 1));
- shader_code_.push_back(constant_address_register);
- shader_code_.push_back(
- EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0));
- shader_code_.push_back(uint32_t(operand.storage_index));
- ++stat_.instruction_count;
- ++stat_.int_instruction_count;
- constant_address_register = dxbc_operand.intermediate_register;
- constant_address_component = 0;
- }
- // Split the index into constant index and bit offset and store them in
- // the intermediate register.
- shader_code_.push_back(
- ENCODE_D3D10_SB_OPCODE_TYPE(D3D11_SB_OPCODE_UBFE) |
- ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(15));
- shader_code_.push_back(
- EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0011, 1));
- shader_code_.push_back(dxbc_operand.intermediate_register);
- shader_code_.push_back(EncodeVectorSwizzledOperand(
- D3D10_SB_OPERAND_TYPE_IMMEDIATE32, kSwizzleXYZW, 0));
- shader_code_.push_back(5);
- shader_code_.push_back(3);
- shader_code_.push_back(0);
- shader_code_.push_back(0);
- shader_code_.push_back(EncodeVectorSwizzledOperand(
- D3D10_SB_OPERAND_TYPE_IMMEDIATE32, kSwizzleXYZW, 0));
- shader_code_.push_back(0);
- shader_code_.push_back(5);
- shader_code_.push_back(0);
- shader_code_.push_back(0);
- shader_code_.push_back(EncodeVectorReplicatedOperand(
- D3D10_SB_OPERAND_TYPE_TEMP, constant_address_component, 1));
- shader_code_.push_back(constant_address_register);
- ++stat_.instruction_count;
- ++stat_.uint_instruction_count;
- // Extract the bits.
- shader_code_.push_back(
- ENCODE_D3D10_SB_OPCODE_TYPE(D3D11_SB_OPCODE_UBFE) |
- ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(12));
- shader_code_.push_back(
- EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0001, 1));
- shader_code_.push_back(dxbc_operand.intermediate_register);
- shader_code_.push_back(
- EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0));
- shader_code_.push_back(1);
- shader_code_.push_back(
- EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_TEMP, 1, 1));
- shader_code_.push_back(dxbc_operand.intermediate_register);
- shader_code_.push_back(
- EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, 0,
- 3, D3D10_SB_OPERAND_INDEX_IMMEDIATE32,
- D3D10_SB_OPERAND_INDEX_IMMEDIATE32,
- D3D10_SB_OPERAND_INDEX_RELATIVE));
- shader_code_.push_back(cbuffer_index_bool_loop_constants_);
- shader_code_.push_back(uint32_t(CbufferRegister::kBoolLoopConstants));
- shader_code_.push_back(
- EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0, 1));
- shader_code_.push_back(dxbc_operand.intermediate_register);
- ++stat_.instruction_count;
- ++stat_.uint_instruction_count;
- }
- // Convert the bit to float and replicate it.
- shader_code_.push_back(ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_UTOF) |
- ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(5));
- shader_code_.push_back(
- EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b1111, 1));
- shader_code_.push_back(dxbc_operand.intermediate_register);
- shader_code_.push_back(
- EncodeVectorReplicatedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0, 1));
- shader_code_.push_back(dxbc_operand.intermediate_register);
- ++stat_.instruction_count;
- ++stat_.conversion_instruction_count;
- } break;
-
default:
// Fall back to constant zeros for invalid types.
dxbc_operand.index = constant_component_values;
@@ -2819,10 +2651,11 @@ void DxbcShaderTranslator::UpdateExecConditionals(
EncodeVectorMaskedOperand(D3D10_SB_OPERAND_TYPE_TEMP, 0b0001, 1));
shader_code_.push_back(bool_constant_test_register);
shader_code_.push_back(
- EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, 0, 3));
+ EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER,
+ (bool_constant_index >> 5) & 3, 3));
shader_code_.push_back(cbuffer_index_bool_loop_constants_);
shader_code_.push_back(uint32_t(CbufferRegister::kBoolLoopConstants));
- shader_code_.push_back(bool_constant_index >> 5);
+ shader_code_.push_back(bool_constant_index >> 7);
shader_code_.push_back(
EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0));
shader_code_.push_back(1u << (bool_constant_index & 31));
@@ -3109,11 +2942,11 @@ void DxbcShaderTranslator::ProcessLoopStartInstruction(
shader_code_.push_back(0);
shader_code_.push_back(0);
shader_code_.push_back(EncodeVectorReplicatedOperand(
- D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, 0, 3));
+ D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, instr.loop_constant_index & 3, 3));
shader_code_.push_back(cbuffer_index_bool_loop_constants_);
shader_code_.push_back(uint32_t(CbufferRegister::kBoolLoopConstants));
- // 8 because of bool constants.
- shader_code_.push_back(8 + instr.loop_constant_index);
+ // 2 because of bool constants.
+ shader_code_.push_back(2 + (instr.loop_constant_index >> 2));
++stat_.instruction_count;
++stat_.uint_instruction_count;
@@ -3312,12 +3145,12 @@ void DxbcShaderTranslator::ProcessLoopEndInstruction(
shader_code_.push_back(
EncodeScalarOperand(D3D10_SB_OPERAND_TYPE_IMMEDIATE32, 0));
shader_code_.push_back(16);
- shader_code_.push_back(
- EncodeVectorSelectOperand(D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, 0, 3));
+ shader_code_.push_back(EncodeVectorSelectOperand(
+ D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, instr.loop_constant_index & 3, 3));
shader_code_.push_back(cbuffer_index_bool_loop_constants_);
shader_code_.push_back(uint32_t(CbufferRegister::kBoolLoopConstants));
- // 8 because of bool constants.
- shader_code_.push_back(8 + instr.loop_constant_index);
+ // 2 because of bool constants.
+ shader_code_.push_back(2 + (instr.loop_constant_index >> 2));
++stat_.instruction_count;
++stat_.uint_instruction_count;
@@ -3431,8 +3264,6 @@ const DxbcShaderTranslator::RdefType DxbcShaderTranslator::rdef_types_[size_t(
{nullptr, 1, 19, 1, 4, 2, 0, RdefTypeIndex::kUint4, nullptr},
// kUint4Array8
{nullptr, 1, 19, 1, 4, 8, 0, RdefTypeIndex::kUint4, nullptr},
- // kUint4Array32
- {nullptr, 1, 19, 1, 4, 32, 0, RdefTypeIndex::kUint4, nullptr},
// kUint4Array48
{nullptr, 1, 19, 1, 4, 48, 0, RdefTypeIndex::kUint4, nullptr},
};
@@ -3720,10 +3551,10 @@ void DxbcShaderTranslator::WriteResourceDefinitions() {
if (cbuffer_index_bool_loop_constants_ != kCbufferIndexUnallocated) {
shader_object_.push_back(constant_name_offset_bool);
shader_object_.push_back(0);
- shader_object_.push_back(8 * 4 * sizeof(uint32_t));
+ shader_object_.push_back(2 * 4 * sizeof(uint32_t));
shader_object_.push_back(0x2);
shader_object_.push_back(types_offset +
- uint32_t(RdefTypeIndex::kUint4Array8) * type_size);
+ uint32_t(RdefTypeIndex::kUint4Array2) * type_size);
shader_object_.push_back(0);
shader_object_.push_back(0xFFFFFFFFu);
shader_object_.push_back(0);
@@ -3731,11 +3562,11 @@ void DxbcShaderTranslator::WriteResourceDefinitions() {
shader_object_.push_back(0);
new_offset += constant_size;
shader_object_.push_back(constant_name_offset_loop);
+ shader_object_.push_back(2 * 4 * sizeof(uint32_t));
shader_object_.push_back(8 * 4 * sizeof(uint32_t));
- shader_object_.push_back(32 * 4 * sizeof(uint32_t));
shader_object_.push_back(0x2);
- shader_object_.push_back(
- types_offset + uint32_t(RdefTypeIndex::kUint4Array32) * type_size);
+ shader_object_.push_back(types_offset +
+ uint32_t(RdefTypeIndex::kUint4Array8) * type_size);
shader_object_.push_back(0);
shader_object_.push_back(0xFFFFFFFFu);
shader_object_.push_back(0);
@@ -3813,7 +3644,7 @@ void DxbcShaderTranslator::WriteResourceDefinitions() {
// Bool constants and loop constants are separate for easier debugging.
shader_object_.push_back(2);
shader_object_.push_back(constant_offset_bool_loop);
- shader_object_.push_back((8 + 32) * 4 * sizeof(uint32_t));
+ shader_object_.push_back((2 + 8) * 4 * sizeof(uint32_t));
shader_object_.push_back(0);
shader_object_.push_back(0);
} else if (i == cbuffer_index_fetch_constants_) {
@@ -4493,16 +4324,14 @@ void DxbcShaderTranslator::WriteShaderCode() {
shader_object_.push_back(
ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_DCL_CONSTANT_BUFFER) |
ENCODE_D3D10_SB_D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN(
- bool_loop_constants_dynamic_indexed_
- ? D3D10_SB_CONSTANT_BUFFER_DYNAMIC_INDEXED
- : D3D10_SB_CONSTANT_BUFFER_IMMEDIATE_INDEXED) |
+ D3D10_SB_CONSTANT_BUFFER_IMMEDIATE_INDEXED) |
ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(7));
shader_object_.push_back(EncodeVectorSwizzledOperand(
D3D10_SB_OPERAND_TYPE_CONSTANT_BUFFER, kSwizzleXYZW, 3));
shader_object_.push_back(cbuffer_index_bool_loop_constants_);
shader_object_.push_back(uint32_t(CbufferRegister::kBoolLoopConstants));
shader_object_.push_back(uint32_t(CbufferRegister::kBoolLoopConstants));
- shader_object_.push_back(40);
+ shader_object_.push_back(10);
shader_object_.push_back(0);
}
diff --git a/src/xenia/gpu/dxbc_shader_translator.h b/src/xenia/gpu/dxbc_shader_translator.h
index 28db647bc..9aa962cab 100644
--- a/src/xenia/gpu/dxbc_shader_translator.h
+++ b/src/xenia/gpu/dxbc_shader_translator.h
@@ -919,12 +919,10 @@ class DxbcShaderTranslator : public ShaderTranslator {
kFloat4Array6,
// Float constants - size written dynamically.
kFloat4ConstantArray,
- // Front/back stencil, render target keep masks.
+ // Bool constants constants, front/back stencil, render target keep masks.
kUint4Array2,
- // Bool constants.
- kUint4Array8,
// Loop constants.
- kUint4Array32,
+ kUint4Array8,
// Fetch constants.
kUint4Array48,
@@ -978,7 +976,6 @@ class DxbcShaderTranslator : public ShaderTranslator {
// Whether constants are dynamically indexed and need to be marked as such in
// dcl_constantBuffer.
bool float_constants_dynamic_indexed_;
- bool bool_loop_constants_dynamic_indexed_;
// Offsets of float constant indices in shader_code_, for remapping in
// CompleteTranslation (initially, at these offsets, guest float constant
diff --git a/src/xenia/gpu/shader.h b/src/xenia/gpu/shader.h
index 3bffa5d0e..3ec54fa8c 100644
--- a/src/xenia/gpu/shader.h
+++ b/src/xenia/gpu/shader.h
@@ -139,10 +139,6 @@ enum class InstructionStorageSource {
kRegister,
// Source is stored in a float constant indexed by storage_index [0-511].
kConstantFloat,
- // Source is stored in a float constant indexed by storage_index [0-31].
- kConstantInt,
- // Source is stored in a float constant indexed by storage_index [0-255].
- kConstantBool,
// Source is stored in a vertex fetch constant indexed by storage_index
// [0-95].
kVertexFetchConstant,
@@ -568,10 +564,10 @@ class Shader {
// base, so bit 0 in a vertex shader is register 0, and bit 0 in a fragment
// shader is register 256.
uint64_t float_bitmap[256 / 64];
- // Bitmap of all kConstantInt registers read by the shader.
+ // Bitmap of all loop constants read by the shader.
// Each bit corresponds to a storage index [0-31].
- uint32_t int_bitmap;
- // Bitmap of all kConstantBool registers read by the shader.
+ uint32_t loop_bitmap;
+ // Bitmap of all bool constants read by the shader.
// Each bit corresponds to a storage index [0-255].
uint32_t bool_bitmap[256 / 32];
diff --git a/src/xenia/gpu/shader_translator.cc b/src/xenia/gpu/shader_translator.cc
index 0a10ef5a2..d2c6bb77b 100644
--- a/src/xenia/gpu/shader_translator.cc
+++ b/src/xenia/gpu/shader_translator.cc
@@ -183,7 +183,7 @@ bool ShaderTranslator::TranslateInternal(Shader* shader,
4 * 4 * constant_register_map_.float_count;
// Each bit indicates a single word.
constant_register_map_.packed_byte_length +=
- 4 * xe::bit_count(constant_register_map_.int_bitmap);
+ 4 * xe::bit_count(constant_register_map_.loop_bitmap);
// Direct map between words and words we upload.
for (int i = 0; i < 8; ++i) {
if (constant_register_map_.bool_bitmap[i]) {
@@ -714,7 +714,7 @@ void ShaderTranslator::TranslateControlFlowLoopStart(
ParsedLoopStartInstruction i;
i.dword_index = cf_index_;
i.loop_constant_index = cf.loop_id();
- constant_register_map_.int_bitmap |= 1 << i.loop_constant_index;
+ constant_register_map_.loop_bitmap |= 1 << i.loop_constant_index;
i.is_repeat = cf.is_repeat();
i.loop_skip_address = cf.address();
@@ -730,7 +730,7 @@ void ShaderTranslator::TranslateControlFlowLoopEnd(
i.is_predicated_break = cf.is_predicated_break();
i.predicate_condition = cf.condition();
i.loop_constant_index = cf.loop_id();
- constant_register_map_.int_bitmap |= 1 << i.loop_constant_index;
+ constant_register_map_.loop_bitmap |= 1 << i.loop_constant_index;
i.loop_body_address = cf.address();
i.Disassemble(&ucode_disasm_buffer_);
diff --git a/src/xenia/gpu/shader_translator_disasm.cc b/src/xenia/gpu/shader_translator_disasm.cc
index 65d87be06..3667fe3b2 100644
--- a/src/xenia/gpu/shader_translator_disasm.cc
+++ b/src/xenia/gpu/shader_translator_disasm.cc
@@ -93,12 +93,6 @@ void DisassembleSourceOperand(const InstructionOperand& op, StringBuffer* out) {
case InstructionStorageSource::kConstantFloat:
out->Append('c');
break;
- case InstructionStorageSource::kConstantInt:
- out->Append('i');
- break;
- case InstructionStorageSource::kConstantBool:
- out->Append('b');
- break;
case InstructionStorageSource::kTextureFetchConstant:
case InstructionStorageSource::kVertexFetchConstant:
assert_always();
diff --git a/src/xenia/gpu/vulkan/buffer_cache.cc b/src/xenia/gpu/vulkan/buffer_cache.cc
index ae30a5dd8..d0e128e1c 100644
--- a/src/xenia/gpu/vulkan/buffer_cache.cc
+++ b/src/xenia/gpu/vulkan/buffer_cache.cc
@@ -400,7 +400,7 @@ std::pair<VkDeviceSize, VkDeviceSize> BufferCache::UploadConstantRegisters(
}
}
for (int i = 0; i < 32; ++i) {
- if (constant_register_map.int_bitmap & (1 << i)) {
+ if (constant_register_map.loop_bitmap & (1 << i)) {
xe::store<uint32_t>(dest_ptr,
values[XE_GPU_REG_SHADER_CONSTANT_LOOP_00 + i].u32);
dest_ptr += 4;