Fix bindless path in d3d12 that i broke in earlier commit (did not affect any users, thats a debug thing)
Fix guest code profiler, it previously only worked with function precomp + all code you were about to execute already discovered Allow AndNot if type is V128
This commit is contained in:
parent
b41e5060da
commit
d8b7b3ecec
|
@ -405,9 +405,10 @@ void X64Emitter::EmitProfilerEpilogue() {
|
||||||
if (cvars::instrument_call_times) {
|
if (cvars::instrument_call_times) {
|
||||||
uint64_t* profiler_entry =
|
uint64_t* profiler_entry =
|
||||||
backend()->GetProfilerRecordForFunction(current_guest_function_);
|
backend()->GetProfilerRecordForFunction(current_guest_function_);
|
||||||
|
|
||||||
mov(ecx, 0x7ffe0014);
|
mov(ecx, 0x7ffe0014);
|
||||||
mov(rdx, qword[rcx]);
|
mov(rdx, qword[rcx]);
|
||||||
mov(rbx, (uintptr_t)profiler_entry);
|
mov(r10, (uintptr_t)profiler_entry);
|
||||||
sub(rdx, qword[rsp + StackLayout::GUEST_PROFILER_START]);
|
sub(rdx, qword[rsp + StackLayout::GUEST_PROFILER_START]);
|
||||||
|
|
||||||
// atomic add our time to the profiler entry
|
// atomic add our time to the profiler entry
|
||||||
|
@ -416,7 +417,8 @@ void X64Emitter::EmitProfilerEpilogue() {
|
||||||
// this a few cycles less intrusive, but its good enough for now
|
// this a few cycles less intrusive, but its good enough for now
|
||||||
// actually... lets just try without atomics lol
|
// actually... lets just try without atomics lol
|
||||||
// lock();
|
// lock();
|
||||||
add(qword[rbx], rdx);
|
add(qword[r10], rdx);
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -1872,26 +1872,24 @@ Value* HIRBuilder::AndNot(Value* value1, Value* value2) {
|
||||||
ASSERT_NON_FLOAT_TYPE(value1);
|
ASSERT_NON_FLOAT_TYPE(value1);
|
||||||
ASSERT_NON_FLOAT_TYPE(value2);
|
ASSERT_NON_FLOAT_TYPE(value2);
|
||||||
ASSERT_TYPES_EQUAL(value1, value2);
|
ASSERT_TYPES_EQUAL(value1, value2);
|
||||||
// e.andn(i.dest.reg().cvt64(), i.src2.reg().cvt64(), temp.cvt64());
|
//only other type it can be used with is INT64_TYPE (andc)
|
||||||
#if 1
|
if (value1->type != VEC128_TYPE) {
|
||||||
|
return this->And(this->Not(value2), value1);
|
||||||
|
} else {
|
||||||
|
if (value1 == value2) {
|
||||||
|
return LoadZero(value1->type);
|
||||||
|
} else if (value1->IsConstantZero()) {
|
||||||
|
return value1;
|
||||||
|
} else if (value2->IsConstantZero()) {
|
||||||
|
return value1;
|
||||||
|
}
|
||||||
|
|
||||||
return this->And(this->Not(value2), value1);
|
Instr* i = AppendInstr(OPCODE_AND_NOT_info, 0, AllocValue(value1->type));
|
||||||
|
i->set_src1(value1);
|
||||||
#else
|
i->set_src2(value2);
|
||||||
if (value1 == value2) {
|
i->src3.value = NULL;
|
||||||
return LoadZero(value1->type);
|
return i->dest;
|
||||||
} else if (value1->IsConstantZero()) {
|
|
||||||
return value1;
|
|
||||||
} else if (value2->IsConstantZero()) {
|
|
||||||
return value1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Instr* i = AppendInstr(OPCODE_AND_NOT_info, 0, AllocValue(value1->type));
|
|
||||||
i->set_src1(value1);
|
|
||||||
i->set_src2(value2);
|
|
||||||
i->src3.value = NULL;
|
|
||||||
return i->dest;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Value* HIRBuilder::Or(Value* value1, Value* value2) {
|
Value* HIRBuilder::Or(Value* value1, Value* value2) {
|
||||||
|
|
|
@ -4877,7 +4877,7 @@ bool D3D12CommandProcessor::UpdateBindings_BindfulPath(
|
||||||
bool& retflag) {
|
bool& retflag) {
|
||||||
retflag = true;
|
retflag = true;
|
||||||
auto& provider = this->GetD3D12Provider();
|
auto& provider = this->GetD3D12Provider();
|
||||||
size_t texture_count_pixel = textures_pixel->size();
|
size_t texture_count_pixel = textures_pixel ? textures_pixel->size() : 0;
|
||||||
size_t texture_count_vertex = textures_vertex.size();
|
size_t texture_count_vertex = textures_vertex.size();
|
||||||
//
|
//
|
||||||
// Bindful descriptors path.
|
// Bindful descriptors path.
|
||||||
|
|
Loading…
Reference in New Issue