mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-22 03:51:16 +00:00
Merge branch 'maint2.4' of https://github.com/coelckers/gzdoom
This commit is contained in:
commit
87a38f73a3
7 changed files with 42 additions and 12 deletions
|
@ -173,7 +173,9 @@ static void I_DetectOS()
|
|||
"Unknown";
|
||||
#endif
|
||||
|
||||
Printf("OS: %s %d.%d.%d (%s) %s\n", name, majorVersion, minorVersion, bugFixVersion, release, architecture);
|
||||
Printf("OS: %s %d.%d.%d (%s) %s\n", name,
|
||||
int(majorVersion), int(minorVersion), int(bugFixVersion),
|
||||
release, architecture);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8815,7 +8815,8 @@ ExpEmit FxVMFunctionCall::Emit(VMFunctionBuilder *build)
|
|||
if (outerside == FScopeBarrier::Side_Virtual)
|
||||
outerside = FScopeBarrier::SideFromObjectFlags(CallingFunction->OwningClass->ObjectFlags);
|
||||
|
||||
if (selfside != outerside && (selfside == FScopeBarrier::Side_Play || selfside == FScopeBarrier::Side_UI)) // if the self pointer and the calling functions have the same scope the check here is not needed.
|
||||
// [ZZ] only emit if target side cannot be checked at compile time.
|
||||
if (selfside == FScopeBarrier::Side_PlainData)
|
||||
{
|
||||
// Check the self object against the calling function's flags at run time
|
||||
build->Emit(OP_SCOPE, selfemit.RegNum, outerside + 1, build->GetConstantAddress(vmfunc, ATAG_OBJECT));
|
||||
|
|
|
@ -97,6 +97,13 @@ PClassActor *DecoDerivedClass(const FScriptPosition &sc, PClassActor *parent, FN
|
|||
sc.Message(MSG_FATAL, "Tried to define class '%s' more than twice in the same file.", typeName.GetChars());
|
||||
}
|
||||
}
|
||||
|
||||
if (type != nullptr)
|
||||
{
|
||||
// [ZZ] DECORATE classes are always play
|
||||
type->ObjectFlags = FScopeBarrier::ChangeSideInObjectFlags(type->ObjectFlags, FScopeBarrier::Side_Play);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
|
|
|
@ -648,10 +648,10 @@ begin:
|
|||
reg.a[a] = p->Virtuals[C];
|
||||
}
|
||||
NEXTOP;
|
||||
OP(SCOPE) :
|
||||
{
|
||||
ASSERTA(a); ASSERTA(C);
|
||||
FScopeBarrier::ValidateCall(((DObject*)konsta[a].v)->GetClass(), (VMFunction*)konsta[C].v, B - 1);
|
||||
OP(SCOPE):
|
||||
{
|
||||
ASSERTA(a); ASSERTKA(C);
|
||||
FScopeBarrier::ValidateCall(((DObject*)reg.a[a])->GetClass(), (VMFunction*)konsta[C].v, B - 1);
|
||||
}
|
||||
NEXTOP;
|
||||
|
||||
|
|
|
@ -658,12 +658,12 @@ void ZCCCompiler::CreateClassTypes()
|
|||
{
|
||||
Error(c->cls, "Can't change class scope in class %s", c->NodeName().GetChars());
|
||||
}
|
||||
c->Type()->ObjectFlags = (c->Type()->ObjectFlags & ~(OF_UI | OF_Play)) | (parent->ObjectFlags & (OF_UI | OF_Play));
|
||||
c->Type()->ObjectFlags = FScopeBarrier::ChangeSideInObjectFlags(c->Type()->ObjectFlags, FScopeBarrier::SideFromObjectFlags(parent->ObjectFlags));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
c->Type()->ObjectFlags = (c->Type()->ObjectFlags&~OF_UI) | OF_Play;
|
||||
c->Type()->ObjectFlags = FScopeBarrier::ChangeSideInObjectFlags(c->Type()->ObjectFlags, FScopeBarrier::Side_Play);
|
||||
}
|
||||
|
||||
c->Type()->bExported = true; // this class is accessible to script side type casts. (The reason for this flag is that types like PInt need to be skipped.)
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
{ \
|
||||
DPrintf(DMSG_ERROR, \
|
||||
"Failed with error 0x%08X at " __FILE__ ":%d:\n> %s", \
|
||||
result, __LINE__, #CALL); \
|
||||
int(result), __LINE__, #CALL); \
|
||||
return __VA_ARGS__; \
|
||||
} \
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ int AudioToolboxMIDIDevice::Open(void (*callback)(unsigned int, void *, DWORD, D
|
|||
return 1;
|
||||
}
|
||||
|
||||
CFRunLoopAddTimer(CFRunLoopGetMain(), m_timer, kCFRunLoopDefaultMode);
|
||||
CFRunLoopAddTimer(CFRunLoopGetCurrent(), m_timer, kCFRunLoopDefaultMode);
|
||||
|
||||
m_callback = callback;
|
||||
m_userData = userData;
|
||||
|
@ -73,7 +73,7 @@ void AudioToolboxMIDIDevice::Close()
|
|||
|
||||
if (nullptr != m_timer)
|
||||
{
|
||||
CFRunLoopRemoveTimer(CFRunLoopGetMain(), m_timer, kCFRunLoopDefaultMode);
|
||||
CFRunLoopRemoveTimer(CFRunLoopGetCurrent(), m_timer, kCFRunLoopDefaultMode);
|
||||
|
||||
CFRelease(m_timer);
|
||||
m_timer = nullptr;
|
||||
|
@ -142,9 +142,16 @@ int AudioToolboxMIDIDevice::Resume()
|
|||
AUNode node;
|
||||
AT_MIDI_CHECK_ERROR(AUGraphGetIndNode(graph, i, &node), false);
|
||||
|
||||
AudioComponentDescription desc = {};
|
||||
AudioUnit audioUnit = nullptr;
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1050
|
||||
ComponentDescription desc = {};
|
||||
UInt32 classdatasize = 0;
|
||||
void *classdata = nullptr;
|
||||
AT_MIDI_CHECK_ERROR(AUGraphGetNodeInfo(graph, node, &desc, &classdatasize, &classdata, &audioUnit), false);
|
||||
#else // 10.5 and above
|
||||
AudioComponentDescription desc = {};
|
||||
AT_MIDI_CHECK_ERROR(AUGraphNodeInfo(graph, node, &desc, &audioUnit), false);
|
||||
#endif // prior to 10.5
|
||||
|
||||
if ( kAudioUnitType_Output != desc.componentType
|
||||
|| kAudioUnitSubType_DefaultOutput != desc.componentSubType)
|
||||
|
@ -260,7 +267,11 @@ bool AudioToolboxMIDIDevice::Preprocess(MIDIStreamer* song, bool looping)
|
|||
return false;
|
||||
}
|
||||
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1050
|
||||
AT_MIDI_CHECK_ERROR(MusicSequenceLoadSMFDataWithFlags(m_sequence, data, 0), false);
|
||||
#else // 10.5 and above
|
||||
AT_MIDI_CHECK_ERROR(MusicSequenceFileLoadData(m_sequence, data, kMusicSequenceFile_MIDIType, 0), CFRelease(data), false);
|
||||
#endif // prior to 10.5
|
||||
|
||||
CFRelease(data);
|
||||
|
||||
|
|
|
@ -130,6 +130,15 @@ inline unsigned long long rdtsc()
|
|||
unsigned long long tsc;
|
||||
asm volatile ("rdtsc; shlq $32, %%rdx; orq %%rdx, %%rax" : "=a" (tsc) :: "%rdx");
|
||||
return tsc;
|
||||
#elif defined __ppc__
|
||||
unsigned int lower, upper, temp;
|
||||
do
|
||||
{
|
||||
asm volatile ("mftbu %0 \n mftb %1 \n mftbu %2 \n"
|
||||
: "=r"(upper), "=r"(lower), "=r"(temp));
|
||||
}
|
||||
while (upper != temp);
|
||||
return (static_cast<unsigned long long>(upper) << 32) | lower;
|
||||
#else // i386
|
||||
if (CPU.bRDTSC)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue