mirror of https://github.com/AxioDL/boo.git
Update fmtlib
This commit is contained in:
parent
de85119690
commit
c36895a109
|
@ -24,7 +24,6 @@ static inline ComPtr<T>* ReferenceComPtr(ComPtr<T>& ptr) {
|
||||||
|
|
||||||
#define FMT_STRING_ALIAS 1
|
#define FMT_STRING_ALIAS 1
|
||||||
#define FMT_ENFORCE_COMPILE_STRING 1
|
#define FMT_ENFORCE_COMPILE_STRING 1
|
||||||
#define FMT_USE_GRISU 0
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
||||||
#ifndef ENABLE_BITWISE_ENUM
|
#ifndef ENABLE_BITWISE_ENUM
|
||||||
|
|
|
@ -73,7 +73,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
argSize = sizeof(devId);
|
argSize = sizeof(devId);
|
||||||
if (AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, sizeof(devName), &devName, &argSize,
|
if (AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, sizeof(devName), &devName, &argSize,
|
||||||
&devId) != noErr) {
|
&devId) != noErr) {
|
||||||
Log.report(logvisor::Error, fmt("unable to resolve audio device UID {}, using default"),
|
Log.report(logvisor::Error, FMT_STRING("unable to resolve audio device UID {}, using default"),
|
||||||
CFStringGetCStringPtr(devName, kCFStringEncodingUTF8));
|
CFStringGetCStringPtr(devName, kCFStringEncodingUTF8));
|
||||||
argSize = sizeof(devId);
|
argSize = sizeof(devId);
|
||||||
propertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
|
propertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
|
||||||
|
@ -83,7 +83,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
deviceAddress.mSelector = kAudioDevicePropertyDeviceUID;
|
deviceAddress.mSelector = kAudioDevicePropertyDeviceUID;
|
||||||
AudioObjectGetPropertyData(devId, &deviceAddress, 0, nullptr, &argSize, &m_devName);
|
AudioObjectGetPropertyData(devId, &deviceAddress, 0, nullptr, &argSize, &m_devName);
|
||||||
} else {
|
} else {
|
||||||
Log.report(logvisor::Fatal, fmt("unable determine default audio device"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable determine default audio device"));
|
||||||
return {AudioChannelSet::Unknown, 48000.0};
|
return {AudioChannelSet::Unknown, 48000.0};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,7 +249,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
if (!(nameCstr = CFStringGetCStringPtr(namestr.get(), kCFStringEncodingUTF8)))
|
if (!(nameCstr = CFStringGetCStringPtr(namestr.get(), kCFStringEncodingUTF8)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret.push_back(std::make_pair(fmt::format(fmt("{:08X}"), idNum), std::string(nameCstr)));
|
ret.push_back(std::make_pair(fmt::format(FMT_STRING("{:08X}"), idNum), std::string(nameCstr)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -268,7 +268,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
if (MIDIObjectGetIntegerProperty(dev, kMIDIPropertyUniqueID, &idNum))
|
if (MIDIObjectGetIntegerProperty(dev, kMIDIPropertyUniqueID, &idNum))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (fmt::format(fmt("{:08X}"), idNum) != name)
|
if (fmt::format(FMT_STRING("{:08X}"), idNum) != name)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
return dev;
|
return dev;
|
||||||
|
@ -462,9 +462,9 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
std::string name;
|
std::string name;
|
||||||
auto appName = APP->getFriendlyName();
|
auto appName = APP->getFriendlyName();
|
||||||
if (!m_midiInCounter)
|
if (!m_midiInCounter)
|
||||||
name = fmt::format(fmt("{} MIDI-In"), appName);
|
name = fmt::format(FMT_STRING("{} MIDI-In"), appName);
|
||||||
else
|
else
|
||||||
name = fmt::format(fmt("{} MIDI-In {}"), appName, m_midiInCounter);
|
name = fmt::format(FMT_STRING("{} MIDI-In {}"), appName, m_midiInCounter);
|
||||||
m_midiInCounter++;
|
m_midiInCounter++;
|
||||||
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
||||||
CFStringCreateWithCStringNoCopy(nullptr, name.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
CFStringCreateWithCStringNoCopy(nullptr, name.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
||||||
|
@ -487,9 +487,9 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
std::string name;
|
std::string name;
|
||||||
auto appName = APP->getFriendlyName();
|
auto appName = APP->getFriendlyName();
|
||||||
if (!m_midiOutCounter)
|
if (!m_midiOutCounter)
|
||||||
name = fmt::format(fmt("{} MIDI-Out"), appName);
|
name = fmt::format(FMT_STRING("{} MIDI-Out"), appName);
|
||||||
else
|
else
|
||||||
name = fmt::format(fmt("{} MIDI-Out {}"), appName, m_midiOutCounter);
|
name = fmt::format(FMT_STRING("{} MIDI-Out {}"), appName, m_midiOutCounter);
|
||||||
m_midiOutCounter++;
|
m_midiOutCounter++;
|
||||||
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
||||||
CFStringCreateWithCStringNoCopy(nullptr, name.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
CFStringCreateWithCStringNoCopy(nullptr, name.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
||||||
|
@ -510,9 +510,9 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
std::string name;
|
std::string name;
|
||||||
auto appName = APP->getFriendlyName();
|
auto appName = APP->getFriendlyName();
|
||||||
if (!m_midiInCounter)
|
if (!m_midiInCounter)
|
||||||
name = fmt::format(fmt("{} MIDI-In"), appName);
|
name = fmt::format(FMT_STRING("{} MIDI-In"), appName);
|
||||||
else
|
else
|
||||||
name = fmt::format(fmt("{} MIDI-In {}"), appName, m_midiInCounter);
|
name = fmt::format(FMT_STRING("{} MIDI-In {}"), appName, m_midiInCounter);
|
||||||
m_midiInCounter++;
|
m_midiInCounter++;
|
||||||
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
||||||
CFStringCreateWithCStringNoCopy(nullptr, name.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
CFStringCreateWithCStringNoCopy(nullptr, name.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
||||||
|
@ -524,9 +524,9 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
if (!m_midiOutCounter)
|
if (!m_midiOutCounter)
|
||||||
name = fmt::format(fmt("{} MIDI-Out"), appName);
|
name = fmt::format(FMT_STRING("{} MIDI-Out"), appName);
|
||||||
else
|
else
|
||||||
name = fmt::format(fmt("{} MIDI-Out {}"), appName, m_midiOutCounter);
|
name = fmt::format(FMT_STRING("{} MIDI-Out {}"), appName, m_midiOutCounter);
|
||||||
m_midiOutCounter++;
|
m_midiOutCounter++;
|
||||||
midiName = CFPointer<CFStringRef>::adopt(
|
midiName = CFPointer<CFStringRef>::adopt(
|
||||||
CFStringCreateWithCStringNoCopy(nullptr, name.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
CFStringCreateWithCStringNoCopy(nullptr, name.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
||||||
|
@ -548,7 +548,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
std::string mname = fmt::format(fmt("Boo MIDI Real In {}"), m_midiInCounter++);
|
std::string mname = fmt::format(FMT_STRING("Boo MIDI Real In {}"), m_midiInCounter++);
|
||||||
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
||||||
CFStringCreateWithCStringNoCopy(nullptr, mname.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
CFStringCreateWithCStringNoCopy(nullptr, mname.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
||||||
if (MIDIInputPortCreate(m_midiClient, midiName.get(), MIDIReadProc(MIDIReceiveProc),
|
if (MIDIInputPortCreate(m_midiClient, midiName.get(), MIDIReadProc(MIDIReceiveProc),
|
||||||
|
@ -572,7 +572,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
std::string mname = fmt::format(fmt("Boo MIDI Real Out {}"), m_midiOutCounter++);
|
std::string mname = fmt::format(FMT_STRING("Boo MIDI Real Out {}"), m_midiOutCounter++);
|
||||||
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
||||||
CFStringCreateWithCStringNoCopy(nullptr, mname.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
CFStringCreateWithCStringNoCopy(nullptr, mname.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
||||||
if (MIDIOutputPortCreate(m_midiClient, midiName.get(), &static_cast<MIDIOut&>(*ret).m_midiPort))
|
if (MIDIOutputPortCreate(m_midiClient, midiName.get(), &static_cast<MIDIOut&>(*ret).m_midiPort))
|
||||||
|
@ -599,7 +599,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
std::string mname = fmt::format(fmt("Boo MIDI Real In {}"), m_midiInCounter++);
|
std::string mname = fmt::format(FMT_STRING("Boo MIDI Real In {}"), m_midiInCounter++);
|
||||||
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
CFPointer<CFStringRef> midiName = CFPointer<CFStringRef>::adopt(
|
||||||
CFStringCreateWithCStringNoCopy(nullptr, mname.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
CFStringCreateWithCStringNoCopy(nullptr, mname.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
||||||
if (MIDIInputPortCreate(m_midiClient, midiName.get(), MIDIReadProc(MIDIReceiveProc),
|
if (MIDIInputPortCreate(m_midiClient, midiName.get(), MIDIReadProc(MIDIReceiveProc),
|
||||||
|
@ -611,7 +611,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
mname = fmt::format(fmt("Boo MIDI Real Out {}"), m_midiOutCounter++);
|
mname = fmt::format(FMT_STRING("Boo MIDI Real Out {}"), m_midiOutCounter++);
|
||||||
midiName = CFPointer<CFStringRef>::adopt(
|
midiName = CFPointer<CFStringRef>::adopt(
|
||||||
CFStringCreateWithCStringNoCopy(nullptr, mname.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
CFStringCreateWithCStringNoCopy(nullptr, mname.c_str(), kCFStringEncodingUTF8, kCFAllocatorNull));
|
||||||
if (MIDIOutputPortCreate(m_midiClient, midiName.get(), &static_cast<MIDIInOut&>(*ret).m_midiPortOut))
|
if (MIDIOutputPortCreate(m_midiClient, midiName.get(), &static_cast<MIDIInOut&>(*ret).m_midiPortOut))
|
||||||
|
@ -653,13 +653,13 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
OSStatus err;
|
OSStatus err;
|
||||||
if ((err = AudioQueueNewOutput(&desc, AudioQueueOutputCallback(Callback), this, CFRunLoopGetCurrent(),
|
if ((err = AudioQueueNewOutput(&desc, AudioQueueOutputCallback(Callback), this, CFRunLoopGetCurrent(),
|
||||||
m_runLoopMode.get(), 0, &m_queue))) {
|
m_runLoopMode.get(), 0, &m_queue))) {
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create output audio queue"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create output audio queue"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFStringRef devName = m_devName.get();
|
CFStringRef devName = m_devName.get();
|
||||||
if ((err = AudioQueueSetProperty(m_queue, kAudioQueueProperty_CurrentDevice, &devName, sizeof(devName)))) {
|
if ((err = AudioQueueSetProperty(m_queue, kAudioQueueProperty_CurrentDevice, &devName, sizeof(devName)))) {
|
||||||
Log.report(logvisor::Fatal, fmt("unable to set current device into audio queue"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to set current device into audio queue"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -677,7 +677,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
AudioChannelLayout layout;
|
AudioChannelLayout layout;
|
||||||
UInt32 layoutSz = sizeof(layout);
|
UInt32 layoutSz = sizeof(layout);
|
||||||
if (AudioQueueGetProperty(m_queue, kAudioQueueProperty_ChannelLayout, &layout, &layoutSz)) {
|
if (AudioQueueGetProperty(m_queue, kAudioQueueProperty_ChannelLayout, &layout, &layoutSz)) {
|
||||||
Log.report(logvisor::Warning, fmt("unable to get channel layout from audio queue; using count's default"));
|
Log.report(logvisor::Warning, FMT_STRING("unable to get channel layout from audio queue; using count's default"));
|
||||||
switch (m_mixInfo.m_channels) {
|
switch (m_mixInfo.m_channels) {
|
||||||
case AudioChannelSet::Stereo:
|
case AudioChannelSet::Stereo:
|
||||||
default:
|
default:
|
||||||
|
@ -758,7 +758,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
chMapOut.m_channels[4] = AudioChannel::FrontCenter;
|
chMapOut.m_channels[4] = AudioChannel::FrontCenter;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Warning, fmt("unknown channel layout {}; using stereo"), layout.mChannelLayoutTag);
|
Log.report(logvisor::Warning, FMT_STRING("unknown channel layout {}; using stereo"), layout.mChannelLayoutTag);
|
||||||
chMapOut.m_channelCount = 2;
|
chMapOut.m_channelCount = 2;
|
||||||
chMapOut.m_channels[0] = AudioChannel::FrontLeft;
|
chMapOut.m_channels[0] = AudioChannel::FrontLeft;
|
||||||
chMapOut.m_channels[1] = AudioChannel::FrontRight;
|
chMapOut.m_channels[1] = AudioChannel::FrontRight;
|
||||||
|
@ -776,7 +776,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
m_mixInfo.m_periodFrames = m_5msFrames;
|
m_mixInfo.m_periodFrames = m_5msFrames;
|
||||||
for (int i = 0; i < AQS_NUM_BUFFERS; ++i)
|
for (int i = 0; i < AQS_NUM_BUFFERS; ++i)
|
||||||
if (AudioQueueAllocateBuffer(m_queue, m_mixInfo.m_periodFrames * chCount * 4, &m_buffers[i])) {
|
if (AudioQueueAllocateBuffer(m_queue, m_mixInfo.m_periodFrames * chCount * 4, &m_buffers[i])) {
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create audio queue buffer"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create audio queue buffer"));
|
||||||
AudioQueueDispose(m_queue, false);
|
AudioQueueDispose(m_queue, false);
|
||||||
m_queue = nullptr;
|
m_queue = nullptr;
|
||||||
return;
|
return;
|
||||||
|
@ -826,7 +826,7 @@ struct AQSAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
deviceAddress.mSelector = kAudioDevicePropertyDeviceUID;
|
deviceAddress.mSelector = kAudioDevicePropertyDeviceUID;
|
||||||
AudioObjectGetPropertyData(defaultDeviceId, &deviceAddress, 0, nullptr, &argSize, &m_devName);
|
AudioObjectGetPropertyData(defaultDeviceId, &deviceAddress, 0, nullptr, &argSize, &m_devName);
|
||||||
} else {
|
} else {
|
||||||
Log.report(logvisor::Fatal, fmt("unable determine default audio device"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable determine default audio device"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ void AudioVoice::_setPitchRatio(double ratio, bool slew) {
|
||||||
m_sampleRatio = ratio * m_sampleRateIn / m_sampleRateOut;
|
m_sampleRatio = ratio * m_sampleRateIn / m_sampleRateOut;
|
||||||
soxr_error_t err = soxr_set_io_ratio(m_src, m_sampleRatio, slew ? m_head->m_5msFrames : 0);
|
soxr_error_t err = soxr_set_io_ratio(m_src, m_sampleRatio, slew ? m_head->m_5msFrames : 0);
|
||||||
if (err) {
|
if (err) {
|
||||||
Log.report(logvisor::Fatal, fmt("unable to set resampler rate: {}"), soxr_strerror(err));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to set resampler rate: {}"), soxr_strerror(err));
|
||||||
m_setPitchRatio = false;
|
m_setPitchRatio = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ void AudioVoiceMono::_resetSampleRate(double sampleRate) {
|
||||||
m_src = soxr_create(sampleRate, rateOut, 1, &err, &ioSpec, &qSpec, nullptr);
|
m_src = soxr_create(sampleRate, rateOut, 1, &err, &ioSpec, &qSpec, nullptr);
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create soxr resampler: {}"), soxr_strerror(err));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create soxr resampler: {}"), soxr_strerror(err));
|
||||||
m_resetSampleRate = false;
|
m_resetSampleRate = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -192,7 +192,7 @@ void AudioVoiceStereo::_resetSampleRate(double sampleRate) {
|
||||||
m_src = soxr_create(sampleRate, rateOut, 2, &err, &ioSpec, &qSpec, nullptr);
|
m_src = soxr_create(sampleRate, rateOut, 2, &err, &ioSpec, &qSpec, nullptr);
|
||||||
|
|
||||||
if (!m_src) {
|
if (!m_src) {
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create soxr resampler: {}"), soxr_strerror(err));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create soxr resampler: {}"), soxr_strerror(err));
|
||||||
m_resetSampleRate = false;
|
m_resetSampleRate = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ struct LinuxMidi : BaseAudioVoiceEngine {
|
||||||
snd_ctl_t* ctl;
|
snd_ctl_t* ctl;
|
||||||
int device = -1;
|
int device = -1;
|
||||||
int status;
|
int status;
|
||||||
std::string name = fmt::format(fmt("hw:{}"), card);
|
std::string name = fmt::format(FMT_STRING("hw:{}"), card);
|
||||||
if ((status = snd_ctl_open(&ctl, name.c_str(), 0)) < 0)
|
if ((status = snd_ctl_open(&ctl, name.c_str(), 0)) < 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ struct LinuxMidi : BaseAudioVoiceEngine {
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
break;
|
break;
|
||||||
if (device >= 0) {
|
if (device >= 0) {
|
||||||
name += fmt::format(fmt(",{}"), device);
|
name += fmt::format(FMT_STRING(",{}"), device);
|
||||||
auto search = m_openHandles.find(name);
|
auto search = m_openHandles.find(name);
|
||||||
if (search != m_openHandles.cend()) {
|
if (search != m_openHandles.cend()) {
|
||||||
ret.push_back(std::make_pair(name, search->second->description()));
|
ret.push_back(std::make_pair(name, search->second->description()));
|
||||||
|
@ -103,7 +103,7 @@ struct LinuxMidi : BaseAudioVoiceEngine {
|
||||||
int rdBytes = snd_rawmidi_read(midi, buf, 512);
|
int rdBytes = snd_rawmidi_read(midi, buf, 512);
|
||||||
if (rdBytes < 0) {
|
if (rdBytes < 0) {
|
||||||
if (rdBytes != -EINTR) {
|
if (rdBytes != -EINTR) {
|
||||||
ALSALog.report(logvisor::Error, fmt("MIDI connection lost"));
|
ALSALog.report(logvisor::Error, FMT_STRING("MIDI connection lost"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -69,7 +69,7 @@ struct PulseAudioVoiceEngine : LinuxMidi {
|
||||||
pa_operation_unref(op);
|
pa_operation_unref(op);
|
||||||
|
|
||||||
if (m_sampleSpec.format == PA_SAMPLE_INVALID) {
|
if (m_sampleSpec.format == PA_SAMPLE_INVALID) {
|
||||||
Log.report(logvisor::Error, fmt("Unable to setup audio stream"));
|
Log.report(logvisor::Error, FMT_STRING("Unable to setup audio stream"));
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ struct PulseAudioVoiceEngine : LinuxMidi {
|
||||||
m_mixInfo.m_bitsPerSample = 32;
|
m_mixInfo.m_bitsPerSample = 32;
|
||||||
m_mixInfo.m_periodFrames = m_5msFrames;
|
m_mixInfo.m_periodFrames = m_5msFrames;
|
||||||
if (!(m_stream = pa_stream_new(m_ctx, "master", &m_sampleSpec, &m_chanMap))) {
|
if (!(m_stream = pa_stream_new(m_ctx, "master", &m_sampleSpec, &m_chanMap))) {
|
||||||
Log.report(logvisor::Error, fmt("Unable to pa_stream_new(): {}"), pa_strerror(pa_context_errno(m_ctx)));
|
Log.report(logvisor::Error, FMT_STRING("Unable to pa_stream_new(): {}"), pa_strerror(pa_context_errno(m_ctx)));
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ struct PulseAudioVoiceEngine : LinuxMidi {
|
||||||
if (pa_stream_connect_playback(m_stream, m_sinkName.c_str(), &bufAttr,
|
if (pa_stream_connect_playback(m_stream, m_sinkName.c_str(), &bufAttr,
|
||||||
pa_stream_flags_t(PA_STREAM_START_UNMUTED | PA_STREAM_EARLY_REQUESTS), nullptr,
|
pa_stream_flags_t(PA_STREAM_START_UNMUTED | PA_STREAM_EARLY_REQUESTS), nullptr,
|
||||||
nullptr)) {
|
nullptr)) {
|
||||||
Log.report(logvisor::Error, fmt("Unable to pa_stream_connect_playback()"));
|
Log.report(logvisor::Error, FMT_STRING("Unable to pa_stream_connect_playback()"));
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,16 +115,16 @@ struct PulseAudioVoiceEngine : LinuxMidi {
|
||||||
|
|
||||||
PulseAudioVoiceEngine() {
|
PulseAudioVoiceEngine() {
|
||||||
if (!(m_mainloop = pa_mainloop_new())) {
|
if (!(m_mainloop = pa_mainloop_new())) {
|
||||||
Log.report(logvisor::Error, fmt("Unable to pa_mainloop_new()"));
|
Log.report(logvisor::Error, FMT_STRING("Unable to pa_mainloop_new()"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pa_mainloop_api* mlApi = pa_mainloop_get_api(m_mainloop);
|
pa_mainloop_api* mlApi = pa_mainloop_get_api(m_mainloop);
|
||||||
pa_proplist* propList = pa_proplist_new();
|
pa_proplist* propList = pa_proplist_new();
|
||||||
pa_proplist_sets(propList, PA_PROP_APPLICATION_ICON_NAME, APP->getUniqueName().data());
|
pa_proplist_sets(propList, PA_PROP_APPLICATION_ICON_NAME, APP->getUniqueName().data());
|
||||||
pa_proplist_sets(propList, PA_PROP_APPLICATION_PROCESS_ID, fmt::format(fmt("{}"), int(getpid())).c_str());
|
pa_proplist_sets(propList, PA_PROP_APPLICATION_PROCESS_ID, fmt::format(FMT_STRING("{}"), int(getpid())).c_str());
|
||||||
if (!(m_ctx = pa_context_new_with_proplist(mlApi, APP->getFriendlyName().data(), propList))) {
|
if (!(m_ctx = pa_context_new_with_proplist(mlApi, APP->getFriendlyName().data(), propList))) {
|
||||||
Log.report(logvisor::Error, fmt("Unable to pa_context_new_with_proplist()"));
|
Log.report(logvisor::Error, FMT_STRING("Unable to pa_context_new_with_proplist()"));
|
||||||
pa_mainloop_free(m_mainloop);
|
pa_mainloop_free(m_mainloop);
|
||||||
m_mainloop = nullptr;
|
m_mainloop = nullptr;
|
||||||
return;
|
return;
|
||||||
|
@ -133,7 +133,7 @@ struct PulseAudioVoiceEngine : LinuxMidi {
|
||||||
pa_operation* op;
|
pa_operation* op;
|
||||||
|
|
||||||
if (pa_context_connect(m_ctx, nullptr, PA_CONTEXT_NOFLAGS, nullptr)) {
|
if (pa_context_connect(m_ctx, nullptr, PA_CONTEXT_NOFLAGS, nullptr)) {
|
||||||
Log.report(logvisor::Error, fmt("Unable to pa_context_connect()"));
|
Log.report(logvisor::Error, FMT_STRING("Unable to pa_context_connect()"));
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -340,7 +340,7 @@ struct PulseAudioVoiceEngine : LinuxMidi {
|
||||||
size_t nbytes = writablePeriods * periodSz;
|
size_t nbytes = writablePeriods * periodSz;
|
||||||
if (pa_stream_begin_write(m_stream, &data, &nbytes)) {
|
if (pa_stream_begin_write(m_stream, &data, &nbytes)) {
|
||||||
pa_stream_state_t st = pa_stream_get_state(m_stream);
|
pa_stream_state_t st = pa_stream_get_state(m_stream);
|
||||||
Log.report(logvisor::Error, fmt("Unable to pa_stream_begin_write(): {} {}"), pa_strerror(pa_context_errno(m_ctx)), st);
|
Log.report(logvisor::Error, FMT_STRING("Unable to pa_stream_begin_write(): {} {}"), pa_strerror(pa_context_errno(m_ctx)), st);
|
||||||
_doIterate();
|
_doIterate();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -349,7 +349,7 @@ struct PulseAudioVoiceEngine : LinuxMidi {
|
||||||
_pumpAndMixVoices(m_mixInfo.m_periodFrames * writablePeriods, reinterpret_cast<float*>(data));
|
_pumpAndMixVoices(m_mixInfo.m_periodFrames * writablePeriods, reinterpret_cast<float*>(data));
|
||||||
|
|
||||||
if (pa_stream_write(m_stream, data, nbytes, nullptr, 0, PA_SEEK_RELATIVE))
|
if (pa_stream_write(m_stream, data, nbytes, nullptr, 0, PA_SEEK_RELATIVE))
|
||||||
Log.report(logvisor::Error, fmt("Unable to pa_stream_write()"));
|
Log.report(logvisor::Error, FMT_STRING("Unable to pa_stream_write()"));
|
||||||
|
|
||||||
_doIterate();
|
_doIterate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,14 +121,14 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
#if !WINDOWS_STORE
|
#if !WINDOWS_STORE
|
||||||
if (!m_device) {
|
if (!m_device) {
|
||||||
if (FAILED(m_enumerator->GetDevice(MBSTWCS(m_sinkName.c_str()).c_str(), &m_device))) {
|
if (FAILED(m_enumerator->GetDevice(MBSTWCS(m_sinkName.c_str()).c_str(), &m_device))) {
|
||||||
Log.report(logvisor::Error, fmt("unable to obtain audio device {}"), m_sinkName);
|
Log.report(logvisor::Error, FMT_STRING("unable to obtain audio device {}"), m_sinkName);
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(m_device->Activate(IID_IAudioClient, CLSCTX_ALL, nullptr, &m_audClient))) {
|
if (FAILED(m_device->Activate(IID_IAudioClient, CLSCTX_ALL, nullptr, &m_audClient))) {
|
||||||
Log.report(logvisor::Error, fmt(L"unable to create audio client from device"));
|
Log.report(logvisor::Error, FMT_STRING(L"unable to create audio client from device"));
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
|
|
||||||
WAVEFORMATEXTENSIBLE* pwfx;
|
WAVEFORMATEXTENSIBLE* pwfx;
|
||||||
if (FAILED(m_audClient->GetMixFormat((WAVEFORMATEX**)&pwfx))) {
|
if (FAILED(m_audClient->GetMixFormat((WAVEFORMATEX**)&pwfx))) {
|
||||||
Log.report(logvisor::Error, fmt(L"unable to obtain audio mix format from device"));
|
Log.report(logvisor::Error, FMT_STRING(L"unable to obtain audio mix format from device"));
|
||||||
#if !WINDOWS_STORE
|
#if !WINDOWS_STORE
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
#endif
|
#endif
|
||||||
|
@ -204,7 +204,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
chMapOut.m_channels[7] = AudioChannel::SideRight;
|
chMapOut.m_channels[7] = AudioChannel::SideRight;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Warning, fmt("unknown channel layout {}; using stereo"), pwfx->Format.nChannels);
|
Log.report(logvisor::Warning, FMT_STRING("unknown channel layout {}; using stereo"), pwfx->Format.nChannels);
|
||||||
chMapOut.m_channelCount = 2;
|
chMapOut.m_channelCount = 2;
|
||||||
chMapOut.m_channels[0] = AudioChannel::FrontLeft;
|
chMapOut.m_channels[0] = AudioChannel::FrontLeft;
|
||||||
chMapOut.m_channels[1] = AudioChannel::FrontRight;
|
chMapOut.m_channels[1] = AudioChannel::FrontRight;
|
||||||
|
@ -214,7 +214,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
/* Initialize audio client */
|
/* Initialize audio client */
|
||||||
if (FAILED(m_audClient->Initialize(AUDCLNT_SHAREMODE_SHARED, 0, 450000, /* 45ms */
|
if (FAILED(m_audClient->Initialize(AUDCLNT_SHAREMODE_SHARED, 0, 450000, /* 45ms */
|
||||||
0, (WAVEFORMATEX*)pwfx, nullptr))) {
|
0, (WAVEFORMATEX*)pwfx, nullptr))) {
|
||||||
Log.report(logvisor::Error, fmt(L"unable to initialize audio client"));
|
Log.report(logvisor::Error, FMT_STRING(L"unable to initialize audio client"));
|
||||||
#if !WINDOWS_STORE
|
#if !WINDOWS_STORE
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
#endif
|
#endif
|
||||||
|
@ -235,7 +235,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
m_mixInfo.m_sampleFormat = SOXR_INT32_I;
|
m_mixInfo.m_sampleFormat = SOXR_INT32_I;
|
||||||
m_mixInfo.m_bitsPerSample = 32;
|
m_mixInfo.m_bitsPerSample = 32;
|
||||||
} else {
|
} else {
|
||||||
Log.report(logvisor::Fatal, fmt(L"unsupported bits-per-sample {}"), pwfx->Format.wBitsPerSample);
|
Log.report(logvisor::Fatal, FMT_STRING(L"unsupported bits-per-sample {}"), pwfx->Format.wBitsPerSample);
|
||||||
#if !WINDOWS_STORE
|
#if !WINDOWS_STORE
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
#endif
|
#endif
|
||||||
|
@ -248,7 +248,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
m_mixInfo.m_sampleFormat = SOXR_FLOAT32_I;
|
m_mixInfo.m_sampleFormat = SOXR_FLOAT32_I;
|
||||||
m_mixInfo.m_bitsPerSample = 32;
|
m_mixInfo.m_bitsPerSample = 32;
|
||||||
} else {
|
} else {
|
||||||
Log.report(logvisor::Error, fmt(L"unsupported floating-point bits-per-sample {}"), pwfx->Format.wBitsPerSample);
|
Log.report(logvisor::Error, FMT_STRING(L"unsupported floating-point bits-per-sample {}"), pwfx->Format.wBitsPerSample);
|
||||||
#if !WINDOWS_STORE
|
#if !WINDOWS_STORE
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
#endif
|
#endif
|
||||||
|
@ -260,7 +260,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
|
|
||||||
UINT32 bufferFrameCount;
|
UINT32 bufferFrameCount;
|
||||||
if (FAILED(m_audClient->GetBufferSize(&bufferFrameCount))) {
|
if (FAILED(m_audClient->GetBufferSize(&bufferFrameCount))) {
|
||||||
Log.report(logvisor::Error, fmt(L"unable to get audio buffer frame count"));
|
Log.report(logvisor::Error, FMT_STRING(L"unable to get audio buffer frame count"));
|
||||||
#if !WINDOWS_STORE
|
#if !WINDOWS_STORE
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
#endif
|
#endif
|
||||||
|
@ -269,7 +269,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
m_mixInfo.m_periodFrames = bufferFrameCount;
|
m_mixInfo.m_periodFrames = bufferFrameCount;
|
||||||
|
|
||||||
if (FAILED(m_audClient->GetService(IID_IAudioRenderClient, &m_renderClient))) {
|
if (FAILED(m_audClient->GetService(IID_IAudioRenderClient, &m_renderClient))) {
|
||||||
Log.report(logvisor::Error, fmt(L"unable to create audio render client"));
|
Log.report(logvisor::Error, FMT_STRING(L"unable to create audio render client"));
|
||||||
#if !WINDOWS_STORE
|
#if !WINDOWS_STORE
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
#endif
|
#endif
|
||||||
|
@ -346,18 +346,18 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
/* Enumerate default audio device */
|
/* Enumerate default audio device */
|
||||||
if (FAILED(
|
if (FAILED(
|
||||||
CoCreateInstance(CLSID_MMDeviceEnumerator, nullptr, CLSCTX_ALL, IID_IMMDeviceEnumerator, &m_enumerator))) {
|
CoCreateInstance(CLSID_MMDeviceEnumerator, nullptr, CLSCTX_ALL, IID_IMMDeviceEnumerator, &m_enumerator))) {
|
||||||
Log.report(logvisor::Error, fmt(L"unable to create MMDeviceEnumerator instance"));
|
Log.report(logvisor::Error, FMT_STRING(L"unable to create MMDeviceEnumerator instance"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(m_enumerator->RegisterEndpointNotificationCallback(&m_notificationClient))) {
|
if (FAILED(m_enumerator->RegisterEndpointNotificationCallback(&m_notificationClient))) {
|
||||||
Log.report(logvisor::Error, fmt(L"unable to register multimedia event callback"));
|
Log.report(logvisor::Error, FMT_STRING(L"unable to register multimedia event callback"));
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(m_enumerator->GetDefaultAudioEndpoint(eRender, eConsole, &m_device))) {
|
if (FAILED(m_enumerator->GetDefaultAudioEndpoint(eRender, eConsole, &m_device))) {
|
||||||
Log.report(logvisor::Error, fmt(L"unable to obtain default audio device"));
|
Log.report(logvisor::Error, FMT_STRING(L"unable to obtain default audio device"));
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -385,7 +385,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
m_started = false;
|
m_started = false;
|
||||||
|
|
||||||
if (m_mixInfo.m_sampleFormat != oldFmt)
|
if (m_mixInfo.m_sampleFormat != oldFmt)
|
||||||
Log.report(logvisor::Fatal, fmt(L"audio device sample format changed, boo doesn't support this!!"));
|
Log.report(logvisor::Fatal, FMT_STRING(L"audio device sample format changed, boo doesn't support this!!"));
|
||||||
|
|
||||||
_resetSampleRate();
|
_resetSampleRate();
|
||||||
}
|
}
|
||||||
|
@ -402,7 +402,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
int attempt = 0;
|
int attempt = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
if (attempt >= 10)
|
if (attempt >= 10)
|
||||||
Log.report(logvisor::Fatal, fmt(L"unable to setup AudioRenderClient"));
|
Log.report(logvisor::Fatal, FMT_STRING(L"unable to setup AudioRenderClient"));
|
||||||
|
|
||||||
if (m_rebuild) {
|
if (m_rebuild) {
|
||||||
m_device.Reset();
|
m_device.Reset();
|
||||||
|
@ -472,7 +472,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
bool setCurrentAudioOutput(const char* name) override {
|
bool setCurrentAudioOutput(const char* name) override {
|
||||||
ComPtr<IMMDevice> newDevice;
|
ComPtr<IMMDevice> newDevice;
|
||||||
if (FAILED(m_enumerator->GetDevice(MBSTWCS(name).c_str(), &newDevice))) {
|
if (FAILED(m_enumerator->GetDevice(MBSTWCS(name).c_str(), &newDevice))) {
|
||||||
Log.report(logvisor::Error, fmt("unable to obtain audio device {}"), name);
|
Log.report(logvisor::Error, FMT_STRING("unable to obtain audio device {}"), name);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
m_device = newDevice;
|
m_device = newDevice;
|
||||||
|
@ -486,7 +486,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
|
|
||||||
ComPtr<IMMDeviceCollection> collection;
|
ComPtr<IMMDeviceCollection> collection;
|
||||||
if (FAILED(m_enumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &collection))) {
|
if (FAILED(m_enumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &collection))) {
|
||||||
Log.report(logvisor::Error, fmt(L"unable to enumerate audio outputs"));
|
Log.report(logvisor::Error, FMT_STRING(L"unable to enumerate audio outputs"));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -518,7 +518,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
ret.reserve(numInDevices);
|
ret.reserve(numInDevices);
|
||||||
|
|
||||||
for (UINT i = 0; i < numInDevices; ++i) {
|
for (UINT i = 0; i < numInDevices; ++i) {
|
||||||
std::string name = fmt::format(fmt("in{}"), i);
|
std::string name = fmt::format(FMT_STRING("in{}"), i);
|
||||||
|
|
||||||
MIDIINCAPS caps;
|
MIDIINCAPS caps;
|
||||||
if (FAILED(midiInGetDevCaps(i, &caps, sizeof(caps))))
|
if (FAILED(midiInGetDevCaps(i, &caps, sizeof(caps))))
|
||||||
|
@ -534,7 +534,7 @@ struct WASAPIAudioVoiceEngine : BaseAudioVoiceEngine {
|
||||||
#if 0
|
#if 0
|
||||||
for (UINT i=0 ; i<numOutDevices ; ++i)
|
for (UINT i=0 ; i<numOutDevices ; ++i)
|
||||||
{
|
{
|
||||||
std::string name = fmt::format(fmt("out{}"), i);
|
std::string name = fmt::format(FMT_STRING("out{}"), i);
|
||||||
|
|
||||||
MIDIOUTCAPS caps;
|
MIDIOUTCAPS caps;
|
||||||
if (FAILED(midiOutGetDevCaps(i, &caps, sizeof(caps))))
|
if (FAILED(midiOutGetDevCaps(i, &caps, sizeof(caps))))
|
||||||
|
|
|
@ -77,7 +77,7 @@ static inline void ThrowIfFailed(HRESULT hr) {
|
||||||
_com_error err(hr, L"D3D11 fail");
|
_com_error err(hr, L"D3D11 fail");
|
||||||
#endif
|
#endif
|
||||||
LPCTSTR errMsg = err.ErrorMessage();
|
LPCTSTR errMsg = err.ErrorMessage();
|
||||||
Log.report(logvisor::Fatal, fmt(_SYS_STR("{}")), errMsg);
|
Log.report(logvisor::Fatal, FMT_STRING(_SYS_STR("{}")), errMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ class D3D11TextureS : public GraphicsDataNode<ITextureS> {
|
||||||
pxTilePitch = 4;
|
pxTilePitch = 4;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
|
|
||||||
const CD3D11_TEXTURE2D_DESC desc(pfmt, width, height, 1, mips, D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE_IMMUTABLE);
|
const CD3D11_TEXTURE2D_DESC desc(pfmt, width, height, 1, mips, D3D11_BIND_SHADER_RESOURCE, D3D11_USAGE_IMMUTABLE);
|
||||||
|
@ -250,7 +250,7 @@ class D3D11TextureSA : public GraphicsDataNode<ITextureSA> {
|
||||||
pixelFmt = DXGI_FORMAT_R16_UNORM;
|
pixelFmt = DXGI_FORMAT_R16_UNORM;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
|
|
||||||
CD3D11_TEXTURE2D_DESC desc(pixelFmt, width, height, layers, mips, D3D11_BIND_SHADER_RESOURCE,
|
CD3D11_TEXTURE2D_DESC desc(pixelFmt, width, height, layers, mips, D3D11_BIND_SHADER_RESOURCE,
|
||||||
|
@ -312,7 +312,7 @@ class D3D11TextureD : public GraphicsDataNode<ITextureD> {
|
||||||
m_pxPitch = 2;
|
m_pxPitch = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_cpuSz = width * height * m_pxPitch;
|
m_cpuSz = width * height * m_pxPitch;
|
||||||
|
@ -400,10 +400,10 @@ class D3D11TextureR : public GraphicsDataNode<ITextureR> {
|
||||||
, m_colorBindCount(colorBindCount)
|
, m_colorBindCount(colorBindCount)
|
||||||
, m_depthBindCount(depthBindCount) {
|
, m_depthBindCount(depthBindCount) {
|
||||||
if (colorBindCount > m_colorBindTex.size()) {
|
if (colorBindCount > m_colorBindTex.size()) {
|
||||||
Log.report(logvisor::Fatal, fmt("too many color bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many color bindings for render texture"));
|
||||||
}
|
}
|
||||||
if (depthBindCount > m_depthBindTex.size()) {
|
if (depthBindCount > m_depthBindTex.size()) {
|
||||||
Log.report(logvisor::Fatal, fmt("too many depth bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many depth bindings for render texture"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (samples == 0) {
|
if (samples == 0) {
|
||||||
|
@ -790,7 +790,7 @@ struct D3D11ShaderDataBinding : public GraphicsDataNode<IShaderDataBinding> {
|
||||||
for (size_t i = 0; i < ubufCount; ++i) {
|
for (size_t i = 0; i < ubufCount; ++i) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (ubufOffs[i] % 256) {
|
if (ubufOffs[i] % 256) {
|
||||||
Log.report(logvisor::Fatal, fmt("non-256-byte-aligned uniform-offset {} provided to newShaderDataBinding"),
|
Log.report(logvisor::Fatal, FMT_STRING("non-256-byte-aligned uniform-offset {} provided to newShaderDataBinding"),
|
||||||
i);
|
i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -801,7 +801,7 @@ struct D3D11ShaderDataBinding : public GraphicsDataNode<IShaderDataBinding> {
|
||||||
for (size_t i = 0; i < ubufCount; ++i) {
|
for (size_t i = 0; i < ubufCount; ++i) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!ubufs[i]) {
|
if (!ubufs[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("null uniform-buffer {} provided to newShaderDataBinding"), i);
|
Log.report(logvisor::Fatal, FMT_STRING("null uniform-buffer {} provided to newShaderDataBinding"), i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
m_ubufs.push_back(ubufs[i]);
|
m_ubufs.push_back(ubufs[i]);
|
||||||
|
@ -1535,7 +1535,7 @@ void D3D11CommandQueue::RenderingWorker(D3D11CommandQueue* self) {
|
||||||
if (D3D11TextureR* csource = CmdList.workDoPresent.cast<D3D11TextureR>()) {
|
if (D3D11TextureR* csource = CmdList.workDoPresent.cast<D3D11TextureR>()) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!csource->m_colorBindCount)
|
if (!csource->m_colorBindCount)
|
||||||
Log.report(logvisor::Fatal, fmt("texture provided to resolveDisplay() must have at least 1 color binding"));
|
Log.report(logvisor::Fatal, FMT_STRING("texture provided to resolveDisplay() must have at least 1 color binding"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (dataFactory->m_gamma != 1.f) {
|
if (dataFactory->m_gamma != 1.f) {
|
||||||
|
@ -1654,8 +1654,8 @@ std::vector<uint8_t> D3D11DataFactory::CompileHLSL(const char* source, PipelineS
|
||||||
ComPtr<ID3DBlob> blobOut;
|
ComPtr<ID3DBlob> blobOut;
|
||||||
if (FAILED(D3DCompilePROC(source, strlen(source), "Boo HLSL Source", nullptr, nullptr, "main",
|
if (FAILED(D3DCompilePROC(source, strlen(source), "Boo HLSL Source", nullptr, nullptr, "main",
|
||||||
D3DShaderTypes[int(stage)], BOO_D3DCOMPILE_FLAG, 0, &blobOut, &errBlob))) {
|
D3DShaderTypes[int(stage)], BOO_D3DCOMPILE_FLAG, 0, &blobOut, &errBlob))) {
|
||||||
fmt::print(fmt("{}\n"), source);
|
fmt::print(FMT_STRING("{}\n"), source);
|
||||||
Log.report(logvisor::Fatal, fmt("error compiling shader: {}"), errBlob->GetBufferPointer());
|
Log.report(logvisor::Fatal, FMT_STRING("error compiling shader: {}"), errBlob->GetBufferPointer());
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
std::vector<uint8_t> ret(blobOut->GetBufferSize());
|
std::vector<uint8_t> ret(blobOut->GetBufferSize());
|
||||||
|
|
|
@ -79,7 +79,7 @@ class GLDataFactoryImpl final : public GLDataFactory, public GraphicsDataFactory
|
||||||
void SetupGammaResources() {
|
void SetupGammaResources() {
|
||||||
/* Good enough place for this */
|
/* Good enough place for this */
|
||||||
if (!glslang::InitializeProcess())
|
if (!glslang::InitializeProcess())
|
||||||
Log.report(logvisor::Error, fmt("unable to initialize glslang"));
|
Log.report(logvisor::Error, FMT_STRING("unable to initialize glslang"));
|
||||||
|
|
||||||
if (GLEW_ARB_tessellation_shader) {
|
if (GLEW_ARB_tessellation_shader) {
|
||||||
m_hasTessellation = true;
|
m_hasTessellation = true;
|
||||||
|
@ -346,7 +346,7 @@ class GLTextureS : public GraphicsDataNode<ITextureS> {
|
||||||
pxPitch = 1;
|
pxPitch = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (compressed) {
|
if (compressed) {
|
||||||
|
@ -430,7 +430,7 @@ class GLTextureSA : public GraphicsDataNode<ITextureSA> {
|
||||||
pxPitch = 2;
|
pxPitch = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
|
|
||||||
GLenum compType = intFormat == GL_R16 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE;
|
GLenum compType = intFormat == GL_R16 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE;
|
||||||
|
@ -493,7 +493,7 @@ class GLTextureD : public GraphicsDataNode<ITextureD> {
|
||||||
pxPitch = 2;
|
pxPitch = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
m_cpuSz = width * height * pxPitch;
|
m_cpuSz = width * height * pxPitch;
|
||||||
m_cpuBuf.reset(new uint8_t[m_cpuSz]);
|
m_cpuBuf.reset(new uint8_t[m_cpuSz]);
|
||||||
|
@ -752,15 +752,15 @@ class GLShaderStage : public GraphicsDataNode<IShaderStage> {
|
||||||
glslang::TShader shader(lang);
|
glslang::TShader shader(lang);
|
||||||
shader.setStrings(&source, 1);
|
shader.setStrings(&source, 1);
|
||||||
if (!shader.parse(&glslang::DefaultTBuiltInResource, 110, false, messages)) {
|
if (!shader.parse(&glslang::DefaultTBuiltInResource, 110, false, messages)) {
|
||||||
fmt::print(fmt("{}\n"), source);
|
fmt::print(FMT_STRING("{}\n"), source);
|
||||||
Log.report(logvisor::Fatal, fmt("unable to compile shader\n{}"), shader.getInfoLog());
|
Log.report(logvisor::Fatal, FMT_STRING("unable to compile shader\n{}"), shader.getInfoLog());
|
||||||
}
|
}
|
||||||
|
|
||||||
glslang::TProgram prog;
|
glslang::TProgram prog;
|
||||||
prog.addShader(&shader);
|
prog.addShader(&shader);
|
||||||
if (!prog.link(messages)) {
|
if (!prog.link(messages)) {
|
||||||
fmt::print(fmt("{}\n"), source);
|
fmt::print(FMT_STRING("{}\n"), source);
|
||||||
Log.report(logvisor::Fatal, fmt("unable to link shader program\n{}"), prog.getInfoLog());
|
Log.report(logvisor::Fatal, FMT_STRING("unable to link shader program\n{}"), prog.getInfoLog());
|
||||||
}
|
}
|
||||||
|
|
||||||
prog.buildReflection();
|
prog.buildReflection();
|
||||||
|
@ -771,7 +771,7 @@ class GLShaderStage : public GraphicsDataNode<IShaderStage> {
|
||||||
continue;
|
continue;
|
||||||
const auto& qual = tp->getQualifier();
|
const auto& qual = tp->getQualifier();
|
||||||
if (!qual.hasBinding())
|
if (!qual.hasBinding())
|
||||||
Log.report(logvisor::Fatal, fmt("shader uniform {} does not have layout binding"), prog.getUniformName(i));
|
Log.report(logvisor::Fatal, FMT_STRING("shader uniform {} does not have layout binding"), prog.getUniformName(i));
|
||||||
m_texNames.emplace_back(std::make_pair(prog.getUniformName(i), qual.layoutBinding - BOO_GLSL_MAX_UNIFORM_COUNT));
|
m_texNames.emplace_back(std::make_pair(prog.getUniformName(i), qual.layoutBinding - BOO_GLSL_MAX_UNIFORM_COUNT));
|
||||||
}
|
}
|
||||||
count = prog.getNumLiveUniformBlocks();
|
count = prog.getNumLiveUniformBlocks();
|
||||||
|
@ -780,7 +780,7 @@ class GLShaderStage : public GraphicsDataNode<IShaderStage> {
|
||||||
const glslang::TType* tp = prog.getUniformBlockTType(i);
|
const glslang::TType* tp = prog.getUniformBlockTType(i);
|
||||||
const auto& qual = tp->getQualifier();
|
const auto& qual = tp->getQualifier();
|
||||||
if (!qual.hasBinding())
|
if (!qual.hasBinding())
|
||||||
Log.report(logvisor::Fatal, fmt("shader uniform {} does not have layout binding"), prog.getUniformBlockName(i));
|
Log.report(logvisor::Fatal, FMT_STRING("shader uniform {} does not have layout binding"), prog.getUniformBlockName(i));
|
||||||
m_blockNames.emplace_back(std::make_pair(prog.getUniformBlockName(i), qual.layoutBinding));
|
m_blockNames.emplace_back(std::make_pair(prog.getUniformBlockName(i), qual.layoutBinding));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -791,7 +791,7 @@ class GLShaderStage : public GraphicsDataNode<IShaderStage> {
|
||||||
|
|
||||||
m_shad = glCreateShader(SHADER_STAGE_TABLE[int(stage)]);
|
m_shad = glCreateShader(SHADER_STAGE_TABLE[int(stage)]);
|
||||||
if (!m_shad) {
|
if (!m_shad) {
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create shader"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create shader"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -804,7 +804,7 @@ class GLShaderStage : public GraphicsDataNode<IShaderStage> {
|
||||||
glGetShaderiv(m_shad, GL_INFO_LOG_LENGTH, &logLen);
|
glGetShaderiv(m_shad, GL_INFO_LOG_LENGTH, &logLen);
|
||||||
std::unique_ptr<char[]> log(new char[logLen]);
|
std::unique_ptr<char[]> log(new char[logLen]);
|
||||||
glGetShaderInfoLog(m_shad, logLen, nullptr, log.get());
|
glGetShaderInfoLog(m_shad, logLen, nullptr, log.get());
|
||||||
Log.report(logvisor::Fatal, fmt("unable to compile source\n{}\n{}\n"), log.get(), source);
|
Log.report(logvisor::Fatal, FMT_STRING("unable to compile source\n{}\n{}\n"), log.get(), source);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -895,7 +895,7 @@ public:
|
||||||
if (!m_prog) {
|
if (!m_prog) {
|
||||||
m_prog = glCreateProgram();
|
m_prog = glCreateProgram();
|
||||||
if (!m_prog) {
|
if (!m_prog) {
|
||||||
Log.report(logvisor::Error, fmt("unable to create shader program"));
|
Log.report(logvisor::Error, FMT_STRING("unable to create shader program"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -930,7 +930,7 @@ public:
|
||||||
glGetProgramiv(m_prog, GL_INFO_LOG_LENGTH, &logLen);
|
glGetProgramiv(m_prog, GL_INFO_LOG_LENGTH, &logLen);
|
||||||
std::unique_ptr<char[]> log(new char[logLen]);
|
std::unique_ptr<char[]> log(new char[logLen]);
|
||||||
glGetProgramInfoLog(m_prog, logLen, nullptr, log.get());
|
glGetProgramInfoLog(m_prog, logLen, nullptr, log.get());
|
||||||
Log.report(logvisor::Fatal, fmt("unable to link shader program\n{}\n"), log.get());
|
Log.report(logvisor::Fatal, FMT_STRING("unable to link shader program\n{}\n"), log.get());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -941,14 +941,14 @@ public:
|
||||||
for (const auto& name : stage->getBlockNames()) {
|
for (const auto& name : stage->getBlockNames()) {
|
||||||
GLint uniLoc = glGetUniformBlockIndex(m_prog, name.first.c_str());
|
GLint uniLoc = glGetUniformBlockIndex(m_prog, name.first.c_str());
|
||||||
// if (uniLoc < 0) {
|
// if (uniLoc < 0) {
|
||||||
// Log.report(logvisor::Warning, fmt("unable to find uniform block '{}'"), uniformBlockNames[i]);
|
// Log.report(logvisor::Warning, FMT_STRING("unable to find uniform block '{}'"), uniformBlockNames[i]);
|
||||||
// }
|
// }
|
||||||
m_uniLocs[name.second] = uniLoc;
|
m_uniLocs[name.second] = uniLoc;
|
||||||
}
|
}
|
||||||
for (const auto& name : stage->getTexNames()) {
|
for (const auto& name : stage->getTexNames()) {
|
||||||
GLint texLoc = glGetUniformLocation(m_prog, name.first.c_str());
|
GLint texLoc = glGetUniformLocation(m_prog, name.first.c_str());
|
||||||
if (texLoc < 0) {
|
if (texLoc < 0) {
|
||||||
// Log.report(logvisor::Warning, fmt("unable to find sampler variable '{}'"), texNames[i]);
|
// Log.report(logvisor::Warning, FMT_STRING("unable to find sampler variable '{}'"), texNames[i]);
|
||||||
} else {
|
} else {
|
||||||
glUniform1i(texLoc, name.second);
|
glUniform1i(texLoc, name.second);
|
||||||
}
|
}
|
||||||
|
@ -1020,7 +1020,7 @@ ObjToken<IShaderStage> GLDataFactory::Context::newShaderStage(const uint8_t* dat
|
||||||
|
|
||||||
if (stage == PipelineStage::Control || stage == PipelineStage::Evaluation) {
|
if (stage == PipelineStage::Control || stage == PipelineStage::Evaluation) {
|
||||||
if (!factory.m_hasTessellation)
|
if (!factory.m_hasTessellation)
|
||||||
Log.report(logvisor::Fatal, fmt("Device does not support tessellation shaders"));
|
Log.report(logvisor::Fatal, FMT_STRING("Device does not support tessellation shaders"));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOO_MSAN_NO_INTERCEPT
|
BOO_MSAN_NO_INTERCEPT
|
||||||
|
@ -1035,9 +1035,9 @@ ObjToken<IShaderPipeline> GLDataFactory::Context::newShaderPipeline(
|
||||||
|
|
||||||
if (control || evaluation) {
|
if (control || evaluation) {
|
||||||
if (!factory.m_hasTessellation)
|
if (!factory.m_hasTessellation)
|
||||||
Log.report(logvisor::Fatal, fmt("Device does not support tessellation shaders"));
|
Log.report(logvisor::Fatal, FMT_STRING("Device does not support tessellation shaders"));
|
||||||
if (additionalInfo.patchSize > factory.m_maxPatchSize)
|
if (additionalInfo.patchSize > factory.m_maxPatchSize)
|
||||||
Log.report(logvisor::Fatal, fmt("Device supports {} patch vertices, {} requested"), int(factory.m_maxPatchSize),
|
Log.report(logvisor::Fatal, FMT_STRING("Device supports {} patch vertices, {} requested"), int(factory.m_maxPatchSize),
|
||||||
int(additionalInfo.patchSize));
|
int(additionalInfo.patchSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1367,7 +1367,7 @@ struct GLCommandQueue final : IGraphicsCommandQueue {
|
||||||
std::unique_lock<std::mutex> lk(self->m_initmt);
|
std::unique_lock<std::mutex> lk(self->m_initmt);
|
||||||
self->m_parent->makeCurrent();
|
self->m_parent->makeCurrent();
|
||||||
const GLubyte* version = glGetString(GL_VERSION);
|
const GLubyte* version = glGetString(GL_VERSION);
|
||||||
Log.report(logvisor::Info, fmt("OpenGL Version: {}"), version);
|
Log.report(logvisor::Info, FMT_STRING("OpenGL Version: {}"), version);
|
||||||
self->m_parent->postInit();
|
self->m_parent->postInit();
|
||||||
glClearColor(0.f, 0.f, 0.f, 0.f);
|
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||||
if (GLEW_EXT_texture_filter_anisotropic) {
|
if (GLEW_EXT_texture_filter_anisotropic) {
|
||||||
|
@ -1561,7 +1561,7 @@ struct GLCommandQueue final : IGraphicsCommandQueue {
|
||||||
if (const GLTextureR* tex = cmd.source.cast<GLTextureR>()) {
|
if (const GLTextureR* tex = cmd.source.cast<GLTextureR>()) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!tex->m_colorBindCount)
|
if (!tex->m_colorBindCount)
|
||||||
Log.report(logvisor::Fatal, fmt("texture provided to resolveDisplay() must have at least 1 color binding"));
|
Log.report(logvisor::Fatal, FMT_STRING("texture provided to resolveDisplay() must have at least 1 color binding"));
|
||||||
#endif
|
#endif
|
||||||
if (dataFactory->m_gamma != 1.f) {
|
if (dataFactory->m_gamma != 1.f) {
|
||||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, tex->m_fbo);
|
glBindFramebuffer(GL_READ_FRAMEBUFFER, tex->m_fbo);
|
||||||
|
@ -1897,13 +1897,13 @@ GLTextureR::GLTextureR(const ObjToken<BaseGraphicsData>& parent, GLCommandQueue*
|
||||||
glGenTextures(GLsizei(m_texs.size()), m_texs.data());
|
glGenTextures(GLsizei(m_texs.size()), m_texs.data());
|
||||||
if (colorBindingCount) {
|
if (colorBindingCount) {
|
||||||
if (colorBindingCount > MAX_BIND_TEXS) {
|
if (colorBindingCount > MAX_BIND_TEXS) {
|
||||||
Log.report(logvisor::Fatal, fmt("too many color bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many color bindings for render texture"));
|
||||||
}
|
}
|
||||||
glGenTextures(colorBindingCount, m_bindTexs[0].data());
|
glGenTextures(colorBindingCount, m_bindTexs[0].data());
|
||||||
}
|
}
|
||||||
if (depthBindingCount) {
|
if (depthBindingCount) {
|
||||||
if (depthBindingCount > MAX_BIND_TEXS) {
|
if (depthBindingCount > MAX_BIND_TEXS) {
|
||||||
Log.report(logvisor::Fatal, fmt("too many depth bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many depth bindings for render texture"));
|
||||||
}
|
}
|
||||||
glGenTextures(depthBindingCount, m_bindTexs[1].data());
|
glGenTextures(depthBindingCount, m_bindTexs[1].data());
|
||||||
}
|
}
|
||||||
|
@ -2018,7 +2018,7 @@ GLShaderDataBinding(const ObjToken<BaseGraphicsData>& d, const ObjToken<IShaderP
|
||||||
for (size_t i = 0; i < ubufCount; ++i) {
|
for (size_t i = 0; i < ubufCount; ++i) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (ubufOffs[i] % 256) {
|
if (ubufOffs[i] % 256) {
|
||||||
Log.report(logvisor::Fatal, fmt("non-256-byte-aligned uniform-offset {} provided to newShaderDataBinding"), i);
|
Log.report(logvisor::Fatal, FMT_STRING("non-256-byte-aligned uniform-offset {} provided to newShaderDataBinding"), i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
m_ubufOffs.emplace_back(ubufOffs[i], (ubufSizes[i] + 255) & ~255);
|
m_ubufOffs.emplace_back(ubufOffs[i], (ubufSizes[i] + 255) & ~255);
|
||||||
|
@ -2028,7 +2028,7 @@ GLShaderDataBinding(const ObjToken<BaseGraphicsData>& d, const ObjToken<IShaderP
|
||||||
for (size_t i = 0; i < ubufCount; ++i) {
|
for (size_t i = 0; i < ubufCount; ++i) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!ubufs[i]) {
|
if (!ubufs[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("null uniform-buffer {} provided to newShaderDataBinding"), i);
|
Log.report(logvisor::Fatal, FMT_STRING("null uniform-buffer {} provided to newShaderDataBinding"), i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
m_ubufs.push_back(ubufs[i]);
|
m_ubufs.push_back(ubufs[i]);
|
||||||
|
|
|
@ -6,9 +6,9 @@ static logvisor::Module Log("boo::GLX");
|
||||||
|
|
||||||
void GLXExtensionCheck() {
|
void GLXExtensionCheck() {
|
||||||
if (!GLXEW_SGI_video_sync)
|
if (!GLXEW_SGI_video_sync)
|
||||||
Log.report(logvisor::Fatal, fmt("GLX_SGI_video_sync not available"));
|
Log.report(logvisor::Fatal, FMT_STRING("GLX_SGI_video_sync not available"));
|
||||||
if (!GLXEW_EXT_swap_control && !GLXEW_MESA_swap_control && !GLXEW_SGI_swap_control)
|
if (!GLXEW_EXT_swap_control && !GLXEW_MESA_swap_control && !GLXEW_SGI_swap_control)
|
||||||
Log.report(logvisor::Fatal, fmt("swap_control not available"));
|
Log.report(logvisor::Fatal, FMT_STRING("swap_control not available"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLXEnableVSync(Display* disp, GLXWindow drawable) {
|
void GLXEnableVSync(Display* disp, GLXWindow drawable) {
|
||||||
|
|
|
@ -366,7 +366,7 @@ class MetalTextureD : public GraphicsDataNode<ITextureD> {
|
||||||
m_pxPitch = 2;
|
m_pxPitch = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,9 +430,9 @@ class MetalTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
|
|
||||||
void Setup(MetalContext* ctx) {
|
void Setup(MetalContext* ctx) {
|
||||||
if (m_colorBindCount > MAX_BIND_TEXS)
|
if (m_colorBindCount > MAX_BIND_TEXS)
|
||||||
Log.report(logvisor::Fatal, fmt("too many color bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many color bindings for render texture"));
|
||||||
if (m_depthBindCount > MAX_BIND_TEXS)
|
if (m_depthBindCount > MAX_BIND_TEXS)
|
||||||
Log.report(logvisor::Fatal, fmt("too many depth bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many depth bindings for render texture"));
|
||||||
|
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
MTLTextureDescriptor* desc =
|
MTLTextureDescriptor* desc =
|
||||||
|
@ -862,11 +862,11 @@ class MetalShaderStage : public GraphicsDataNode<IShaderStage> {
|
||||||
options:compOpts
|
options:compOpts
|
||||||
error:&err];
|
error:&err];
|
||||||
if (!shaderLib) {
|
if (!shaderLib) {
|
||||||
fmt::print(fmt("{}\n"), data + 1);
|
fmt::print(FMT_STRING("{}\n"), data + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!shaderLib) {
|
if (!shaderLib) {
|
||||||
Log.report(logvisor::Fatal, fmt("error creating library: {}"), [[err localizedDescription] UTF8String]);
|
Log.report(logvisor::Fatal, FMT_STRING("error creating library: {}"), [[err localizedDescription] UTF8String]);
|
||||||
}
|
}
|
||||||
|
|
||||||
NSString* funcName;
|
NSString* funcName;
|
||||||
|
@ -985,7 +985,7 @@ protected:
|
||||||
NSError* err = nullptr;
|
NSError* err = nullptr;
|
||||||
m_state = [ctx->m_dev newRenderPipelineStateWithDescriptor:desc error:&err];
|
m_state = [ctx->m_dev newRenderPipelineStateWithDescriptor:desc error:&err];
|
||||||
if (err) {
|
if (err) {
|
||||||
Log.report(logvisor::Fatal, fmt("error making shader pipeline: {}"),
|
Log.report(logvisor::Fatal, FMT_STRING("error making shader pipeline: {}"),
|
||||||
[[err localizedDescription] UTF8String]);
|
[[err localizedDescription] UTF8String]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1060,7 +1060,7 @@ class MetalTessellationShaderPipeline : public MetalShaderPipeline {
|
||||||
m_computeState = [ctx->m_dev newComputePipelineStateWithDescriptor:compDesc options:MTLPipelineOptionNone
|
m_computeState = [ctx->m_dev newComputePipelineStateWithDescriptor:compDesc options:MTLPipelineOptionNone
|
||||||
reflection:nil error:&err];
|
reflection:nil error:&err];
|
||||||
if (err) {
|
if (err) {
|
||||||
Log.report(logvisor::Fatal, fmt("error making compute pipeline: {}"),
|
Log.report(logvisor::Fatal, FMT_STRING("error making compute pipeline: {}"),
|
||||||
[[err localizedDescription] UTF8String]);
|
[[err localizedDescription] UTF8String]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1165,7 +1165,7 @@ struct MetalShaderDataBinding : GraphicsDataNode<IShaderDataBinding> {
|
||||||
for (size_t i = 0; i < ubufCount; ++i) {
|
for (size_t i = 0; i < ubufCount; ++i) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (ubufOffs[i] % 256) {
|
if (ubufOffs[i] % 256) {
|
||||||
Log.report(logvisor::Fatal, fmt("non-256-byte-aligned uniform-offset {} provided to newShaderDataBinding"),
|
Log.report(logvisor::Fatal, FMT_STRING("non-256-byte-aligned uniform-offset {} provided to newShaderDataBinding"),
|
||||||
i);
|
i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1176,7 +1176,7 @@ struct MetalShaderDataBinding : GraphicsDataNode<IShaderDataBinding> {
|
||||||
for (size_t i = 0; i < ubufCount; ++i) {
|
for (size_t i = 0; i < ubufCount; ++i) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!ubufs[i]) {
|
if (!ubufs[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("null uniform-buffer {} provided to newShaderDataBinding"), i);
|
Log.report(logvisor::Fatal, FMT_STRING("null uniform-buffer {} provided to newShaderDataBinding"), i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
m_ubufs.push_back(ubufs[i]);
|
m_ubufs.push_back(ubufs[i]);
|
||||||
|
|
|
@ -158,22 +158,22 @@ public:
|
||||||
|
|
||||||
static void ThrowIfFailed(VkResult res) {
|
static void ThrowIfFailed(VkResult res) {
|
||||||
if (res != VK_SUCCESS)
|
if (res != VK_SUCCESS)
|
||||||
Log.report(logvisor::Fatal, fmt("{}\n"), res);
|
Log.report(logvisor::Fatal, FMT_STRING("{}\n"), res);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VKAPI_ATTR VkBool32 VKAPI_CALL dbgFunc(VkDebugReportFlagsEXT msgFlags, VkDebugReportObjectTypeEXT objType,
|
static VKAPI_ATTR VkBool32 VKAPI_CALL dbgFunc(VkDebugReportFlagsEXT msgFlags, VkDebugReportObjectTypeEXT objType,
|
||||||
uint64_t srcObject, size_t location, int32_t msgCode,
|
uint64_t srcObject, size_t location, int32_t msgCode,
|
||||||
const char* pLayerPrefix, const char* pMsg, void* pUserData) {
|
const char* pLayerPrefix, const char* pMsg, void* pUserData) {
|
||||||
if (msgFlags & VK_DEBUG_REPORT_ERROR_BIT_EXT) {
|
if (msgFlags & VK_DEBUG_REPORT_ERROR_BIT_EXT) {
|
||||||
Log.report(logvisor::Error, fmt("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
Log.report(logvisor::Error, FMT_STRING("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
||||||
} else if (msgFlags & VK_DEBUG_REPORT_WARNING_BIT_EXT) {
|
} else if (msgFlags & VK_DEBUG_REPORT_WARNING_BIT_EXT) {
|
||||||
Log.report(logvisor::Warning, fmt("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
Log.report(logvisor::Warning, FMT_STRING("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
||||||
} else if (msgFlags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT) {
|
} else if (msgFlags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT) {
|
||||||
Log.report(logvisor::Warning, fmt("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
Log.report(logvisor::Warning, FMT_STRING("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
||||||
} else if (msgFlags & VK_DEBUG_REPORT_INFORMATION_BIT_EXT) {
|
} else if (msgFlags & VK_DEBUG_REPORT_INFORMATION_BIT_EXT) {
|
||||||
Log.report(logvisor::Info, fmt("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
Log.report(logvisor::Info, FMT_STRING("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
||||||
} else if (msgFlags & VK_DEBUG_REPORT_DEBUG_BIT_EXT) {
|
} else if (msgFlags & VK_DEBUG_REPORT_DEBUG_BIT_EXT) {
|
||||||
Log.report(logvisor::Info, fmt("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
Log.report(logvisor::Info, FMT_STRING("[{}] Code {} : {}"), pLayerPrefix, msgCode, pMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -308,7 +308,7 @@ static void demo_check_layers(const std::vector<VulkanContext::LayerProperties>&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
Log.report(logvisor::Fatal, fmt("Cannot find layer: {}"), layerNames[i]);
|
Log.report(logvisor::Fatal, FMT_STRING("Cannot find layer: {}"), layerNames[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -317,7 +317,7 @@ bool VulkanContext::initVulkan(std::string_view appName, PFN_vkGetInstanceProcAd
|
||||||
vk::init_dispatch_table_top(getVkProc);
|
vk::init_dispatch_table_top(getVkProc);
|
||||||
|
|
||||||
if (!glslang::InitializeProcess()) {
|
if (!glslang::InitializeProcess()) {
|
||||||
Log.report(logvisor::Error, fmt("unable to initialize glslang"));
|
Log.report(logvisor::Error, FMT_STRING("unable to initialize glslang"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -418,7 +418,7 @@ bool VulkanContext::initVulkan(std::string_view appName, PFN_vkGetInstanceProcAd
|
||||||
VkResult instRes = vk::CreateInstance(&instInfo, nullptr, &m_instance);
|
VkResult instRes = vk::CreateInstance(&instInfo, nullptr, &m_instance);
|
||||||
if (instRes != VK_SUCCESS) {
|
if (instRes != VK_SUCCESS) {
|
||||||
Log.report(logvisor::Error,
|
Log.report(logvisor::Error,
|
||||||
fmt("The Vulkan runtime is installed, but there are no supported "
|
FMT_STRING("The Vulkan runtime is installed, but there are no supported "
|
||||||
"hardware vendor interfaces present"));
|
"hardware vendor interfaces present"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -427,12 +427,12 @@ bool VulkanContext::initVulkan(std::string_view appName, PFN_vkGetInstanceProcAd
|
||||||
PFN_vkCreateDebugReportCallbackEXT createDebugReportCallback =
|
PFN_vkCreateDebugReportCallbackEXT createDebugReportCallback =
|
||||||
(PFN_vkCreateDebugReportCallbackEXT)vk::GetInstanceProcAddr(m_instance, "vkCreateDebugReportCallbackEXT");
|
(PFN_vkCreateDebugReportCallbackEXT)vk::GetInstanceProcAddr(m_instance, "vkCreateDebugReportCallbackEXT");
|
||||||
if (!createDebugReportCallback)
|
if (!createDebugReportCallback)
|
||||||
Log.report(logvisor::Fatal, fmt("GetInstanceProcAddr: Unable to find vkCreateDebugReportCallbackEXT function."));
|
Log.report(logvisor::Fatal, FMT_STRING("GetInstanceProcAddr: Unable to find vkCreateDebugReportCallbackEXT function."));
|
||||||
|
|
||||||
m_destroyDebugReportCallback =
|
m_destroyDebugReportCallback =
|
||||||
(PFN_vkDestroyDebugReportCallbackEXT)vk::GetInstanceProcAddr(m_instance, "vkDestroyDebugReportCallbackEXT");
|
(PFN_vkDestroyDebugReportCallbackEXT)vk::GetInstanceProcAddr(m_instance, "vkDestroyDebugReportCallbackEXT");
|
||||||
if (!m_destroyDebugReportCallback)
|
if (!m_destroyDebugReportCallback)
|
||||||
Log.report(logvisor::Fatal, fmt("GetInstanceProcAddr: Unable to find vkDestroyDebugReportCallbackEXT function."));
|
Log.report(logvisor::Fatal, FMT_STRING("GetInstanceProcAddr: Unable to find vkDestroyDebugReportCallbackEXT function."));
|
||||||
|
|
||||||
VkDebugReportCallbackCreateInfoEXT debugCreateInfo = {};
|
VkDebugReportCallbackCreateInfoEXT debugCreateInfo = {};
|
||||||
debugCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
|
debugCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
|
||||||
|
@ -477,7 +477,7 @@ bool VulkanContext::enumerateDevices() {
|
||||||
|
|
||||||
void VulkanContext::initDevice() {
|
void VulkanContext::initDevice() {
|
||||||
if (m_graphicsQueueFamilyIndex == UINT32_MAX)
|
if (m_graphicsQueueFamilyIndex == UINT32_MAX)
|
||||||
Log.report(logvisor::Fatal, fmt("VulkanContext::m_graphicsQueueFamilyIndex hasn't been initialized"));
|
Log.report(logvisor::Fatal, FMT_STRING("VulkanContext::m_graphicsQueueFamilyIndex hasn't been initialized"));
|
||||||
|
|
||||||
/* create the device and queues */
|
/* create the device and queues */
|
||||||
VkDeviceQueueCreateInfo queueInfo = {};
|
VkDeviceQueueCreateInfo queueInfo = {};
|
||||||
|
@ -493,7 +493,7 @@ void VulkanContext::initDevice() {
|
||||||
if (m_features.samplerAnisotropy)
|
if (m_features.samplerAnisotropy)
|
||||||
features.samplerAnisotropy = VK_TRUE;
|
features.samplerAnisotropy = VK_TRUE;
|
||||||
if (!m_features.textureCompressionBC)
|
if (!m_features.textureCompressionBC)
|
||||||
Log.report(logvisor::Fatal, fmt("Vulkan device does not support DXT-format textures"));
|
Log.report(logvisor::Fatal, FMT_STRING("Vulkan device does not support DXT-format textures"));
|
||||||
features.textureCompressionBC = VK_TRUE;
|
features.textureCompressionBC = VK_TRUE;
|
||||||
VkShaderStageFlagBits tessellationDescriptorBit = VkShaderStageFlagBits(0);
|
VkShaderStageFlagBits tessellationDescriptorBit = VkShaderStageFlagBits(0);
|
||||||
if (m_features.tessellationShader) {
|
if (m_features.tessellationShader) {
|
||||||
|
@ -501,7 +501,7 @@ void VulkanContext::initDevice() {
|
||||||
features.tessellationShader = VK_TRUE;
|
features.tessellationShader = VK_TRUE;
|
||||||
}
|
}
|
||||||
if (!m_features.dualSrcBlend)
|
if (!m_features.dualSrcBlend)
|
||||||
Log.report(logvisor::Fatal, fmt("Vulkan device does not support dual-source blending"));
|
Log.report(logvisor::Fatal, FMT_STRING("Vulkan device does not support dual-source blending"));
|
||||||
features.dualSrcBlend = VK_TRUE;
|
features.dualSrcBlend = VK_TRUE;
|
||||||
|
|
||||||
uint32_t extCount = 0;
|
uint32_t extCount = 0;
|
||||||
|
@ -524,7 +524,7 @@ void VulkanContext::initDevice() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasSwapchain)
|
if (!hasSwapchain)
|
||||||
Log.report(logvisor::Fatal, fmt("Vulkan device does not support swapchains"));
|
Log.report(logvisor::Fatal, FMT_STRING("Vulkan device does not support swapchains"));
|
||||||
|
|
||||||
/* need swapchain device extension */
|
/* need swapchain device extension */
|
||||||
m_deviceExtensionNames.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
m_deviceExtensionNames.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
||||||
|
@ -654,10 +654,10 @@ void VulkanContext::initDevice() {
|
||||||
ThrowIfFailed(vk::CreatePipelineLayout(m_dev, &pipelineLayout, nullptr, &m_pipelinelayout));
|
ThrowIfFailed(vk::CreatePipelineLayout(m_dev, &pipelineLayout, nullptr, &m_pipelinelayout));
|
||||||
|
|
||||||
std::string gpuName = m_gpuProps.deviceName;
|
std::string gpuName = m_gpuProps.deviceName;
|
||||||
Log.report(logvisor::Info, fmt("Initialized {}"), gpuName);
|
Log.report(logvisor::Info, FMT_STRING("Initialized {}"), gpuName);
|
||||||
Log.report(logvisor::Info, fmt("Vulkan version {}.{}.{}"), m_gpuProps.apiVersion >> 22,
|
Log.report(logvisor::Info, FMT_STRING("Vulkan version {}.{}.{}"), m_gpuProps.apiVersion >> 22,
|
||||||
(m_gpuProps.apiVersion >> 12) & 0b1111111111, m_gpuProps.apiVersion & 0b111111111111);
|
(m_gpuProps.apiVersion >> 12) & 0b1111111111, m_gpuProps.apiVersion & 0b111111111111);
|
||||||
Log.report(logvisor::Info, fmt("Driver version {}.{}.{}"), m_gpuProps.driverVersion >> 22,
|
Log.report(logvisor::Info, FMT_STRING("Driver version {}.{}.{}"), m_gpuProps.driverVersion >> 22,
|
||||||
(m_gpuProps.driverVersion >> 12) & 0b1111111111, m_gpuProps.driverVersion & 0b111111111111);
|
(m_gpuProps.driverVersion >> 12) & 0b1111111111, m_gpuProps.driverVersion & 0b111111111111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1394,7 +1394,7 @@ class VulkanTextureS : public GraphicsDataNode<ITextureS> {
|
||||||
m_pixelPitchDenom = 1;
|
m_pixelPitchDenom = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
m_vkFmt = pfmt;
|
m_vkFmt = pfmt;
|
||||||
|
|
||||||
|
@ -1553,7 +1553,7 @@ class VulkanTextureSA : public GraphicsDataNode<ITextureSA> {
|
||||||
m_pixelPitchNum = 2;
|
m_pixelPitchNum = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
m_vkFmt = pfmt;
|
m_vkFmt = pfmt;
|
||||||
|
|
||||||
|
@ -1707,7 +1707,7 @@ class VulkanTextureD : public GraphicsDataNode<ITextureD> {
|
||||||
m_cpuSz = width * height * 2;
|
m_cpuSz = width * height * 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
m_vkFmt = pfmt;
|
m_vkFmt = pfmt;
|
||||||
m_stagingBuf.reset(new uint8_t[m_cpuSz]);
|
m_stagingBuf.reset(new uint8_t[m_cpuSz]);
|
||||||
|
@ -2679,7 +2679,7 @@ struct VulkanShaderDataBinding : GraphicsDataNode<IShaderDataBinding> {
|
||||||
for (size_t i = 0; i < ubufCount; ++i) {
|
for (size_t i = 0; i < ubufCount; ++i) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (ubufOffs[i] % 256) {
|
if (ubufOffs[i] % 256) {
|
||||||
Log.report(logvisor::Fatal, fmt("non-256-byte-aligned uniform-offset {} provided to newShaderDataBinding"),
|
Log.report(logvisor::Fatal, FMT_STRING("non-256-byte-aligned uniform-offset {} provided to newShaderDataBinding"),
|
||||||
i);
|
i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -2692,7 +2692,7 @@ struct VulkanShaderDataBinding : GraphicsDataNode<IShaderDataBinding> {
|
||||||
for (size_t i = 0; i < ubufCount; ++i) {
|
for (size_t i = 0; i < ubufCount; ++i) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!ubufs[i]) {
|
if (!ubufs[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("null uniform-buffer {} provided to newShaderDataBinding"), i);
|
Log.report(logvisor::Fatal, FMT_STRING("null uniform-buffer {} provided to newShaderDataBinding"), i);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
m_ubufs.push_back(ubufs[i]);
|
m_ubufs.push_back(ubufs[i]);
|
||||||
|
@ -2794,7 +2794,7 @@ struct VulkanShaderDataBinding : GraphicsDataNode<IShaderDataBinding> {
|
||||||
void bind(VkCommandBuffer cmdBuf, int b, VkRenderPass rPass = 0) {
|
void bind(VkCommandBuffer cmdBuf, int b, VkRenderPass rPass = 0) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!m_committed)
|
if (!m_committed)
|
||||||
Log.report(logvisor::Fatal, fmt("attempted to use uncommitted VulkanShaderDataBinding"));
|
Log.report(logvisor::Fatal, FMT_STRING("attempted to use uncommitted VulkanShaderDataBinding"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Ensure resized texture bindings are re-bound */
|
/* Ensure resized texture bindings are re-bound */
|
||||||
|
@ -3178,7 +3178,7 @@ struct VulkanCommandQueue final : IGraphicsCommandQueue {
|
||||||
VulkanTextureR* csource = m_resolveDispSource.cast<VulkanTextureR>();
|
VulkanTextureR* csource = m_resolveDispSource.cast<VulkanTextureR>();
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!csource->m_colorBindCount)
|
if (!csource->m_colorBindCount)
|
||||||
Log.report(logvisor::Fatal, fmt("texture provided to resolveDisplay() must have at least 1 color binding"));
|
Log.report(logvisor::Fatal, FMT_STRING("texture provided to resolveDisplay() must have at least 1 color binding"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ThrowIfFailed(
|
ThrowIfFailed(
|
||||||
|
@ -3493,9 +3493,9 @@ VulkanTextureR::VulkanTextureR(const boo::ObjToken<BaseGraphicsData>& parent, Vu
|
||||||
, m_colorBindCount(colorBindCount)
|
, m_colorBindCount(colorBindCount)
|
||||||
, m_depthBindCount(depthBindCount) {
|
, m_depthBindCount(depthBindCount) {
|
||||||
if (colorBindCount > MAX_BIND_TEXS)
|
if (colorBindCount > MAX_BIND_TEXS)
|
||||||
Log.report(logvisor::Fatal, fmt("too many color bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many color bindings for render texture"));
|
||||||
if (depthBindCount > MAX_BIND_TEXS)
|
if (depthBindCount > MAX_BIND_TEXS)
|
||||||
Log.report(logvisor::Fatal, fmt("too many depth bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many depth bindings for render texture"));
|
||||||
|
|
||||||
if (m_samplesColor == 0)
|
if (m_samplesColor == 0)
|
||||||
m_samplesColor = 1;
|
m_samplesColor = 1;
|
||||||
|
@ -3724,7 +3724,7 @@ ObjToken<IShaderStage> VulkanDataFactory::Context::newShaderStage(const uint8_t*
|
||||||
|
|
||||||
if (stage == PipelineStage::Control || stage == PipelineStage::Evaluation) {
|
if (stage == PipelineStage::Control || stage == PipelineStage::Evaluation) {
|
||||||
if (!factory.m_ctx->m_features.tessellationShader)
|
if (!factory.m_ctx->m_features.tessellationShader)
|
||||||
Log.report(logvisor::Fatal, fmt("Device does not support tessellation shaders"));
|
Log.report(logvisor::Fatal, FMT_STRING("Device does not support tessellation shaders"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {new VulkanShaderStage(m_data, factory.m_ctx, data, size, stage)};
|
return {new VulkanShaderStage(m_data, factory.m_ctx, data, size, stage)};
|
||||||
|
@ -3738,9 +3738,9 @@ ObjToken<IShaderPipeline> VulkanDataFactory::Context::newShaderPipeline(
|
||||||
|
|
||||||
if (control || evaluation) {
|
if (control || evaluation) {
|
||||||
if (!factory.m_ctx->m_features.tessellationShader)
|
if (!factory.m_ctx->m_features.tessellationShader)
|
||||||
Log.report(logvisor::Fatal, fmt("Device does not support tessellation shaders"));
|
Log.report(logvisor::Fatal, FMT_STRING("Device does not support tessellation shaders"));
|
||||||
if (additionalInfo.patchSize > factory.m_ctx->m_gpuProps.limits.maxTessellationPatchSize)
|
if (additionalInfo.patchSize > factory.m_ctx->m_gpuProps.limits.maxTessellationPatchSize)
|
||||||
Log.report(logvisor::Fatal, fmt("Device supports {} patch vertices, {} requested"),
|
Log.report(logvisor::Fatal, FMT_STRING("Device supports {} patch vertices, {} requested"),
|
||||||
int(factory.m_ctx->m_gpuProps.limits.maxTessellationPatchSize), int(additionalInfo.patchSize));
|
int(factory.m_ctx->m_gpuProps.limits.maxTessellationPatchSize), int(additionalInfo.patchSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4104,14 +4104,14 @@ std::vector<uint8_t> VulkanDataFactory::CompileGLSL(const char* source, Pipeline
|
||||||
glslang::TShader shader(lang);
|
glslang::TShader shader(lang);
|
||||||
shader.setStrings(&source, 1);
|
shader.setStrings(&source, 1);
|
||||||
if (!shader.parse(&glslang::DefaultTBuiltInResource, 110, false, messages)) {
|
if (!shader.parse(&glslang::DefaultTBuiltInResource, 110, false, messages)) {
|
||||||
fmt::print(fmt("{}\n"), source);
|
fmt::print(FMT_STRING("{}\n"), source);
|
||||||
Log.report(logvisor::Fatal, fmt("unable to compile shader\n{}"), shader.getInfoLog());
|
Log.report(logvisor::Fatal, FMT_STRING("unable to compile shader\n{}"), shader.getInfoLog());
|
||||||
}
|
}
|
||||||
|
|
||||||
glslang::TProgram prog;
|
glslang::TProgram prog;
|
||||||
prog.addShader(&shader);
|
prog.addShader(&shader);
|
||||||
if (!prog.link(messages)) {
|
if (!prog.link(messages)) {
|
||||||
Log.report(logvisor::Fatal, fmt("unable to link shader program\n{}"), prog.getInfoLog());
|
Log.report(logvisor::Fatal, FMT_STRING("unable to link shader program\n{}"), prog.getInfoLog());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<unsigned int> out;
|
std::vector<unsigned int> out;
|
||||||
|
|
|
@ -319,7 +319,7 @@ class NXTextureS : public GraphicsDataNode<ITextureS> {
|
||||||
m_pixelPitchDenom = 2;
|
m_pixelPitchDenom = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
m_nxFmt = pfmt;
|
m_nxFmt = pfmt;
|
||||||
|
|
||||||
|
@ -334,7 +334,7 @@ class NXTextureS : public GraphicsDataNode<ITextureS> {
|
||||||
texTempl.bind = PIPE_BIND_SAMPLER_VIEW;
|
texTempl.bind = PIPE_BIND_SAMPLER_VIEW;
|
||||||
m_gpuTex = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
m_gpuTex = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
||||||
if (!m_gpuTex) {
|
if (!m_gpuTex) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create texture"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -421,7 +421,7 @@ class NXTextureSA : public GraphicsDataNode<ITextureSA> {
|
||||||
m_pixelPitchNum = 2;
|
m_pixelPitchNum = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
m_nxFmt = pfmt;
|
m_nxFmt = pfmt;
|
||||||
|
|
||||||
|
@ -436,7 +436,7 @@ class NXTextureSA : public GraphicsDataNode<ITextureSA> {
|
||||||
texTempl.bind = PIPE_BIND_SAMPLER_VIEW;
|
texTempl.bind = PIPE_BIND_SAMPLER_VIEW;
|
||||||
m_gpuTex = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
m_gpuTex = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
||||||
if (!m_gpuTex) {
|
if (!m_gpuTex) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create texture"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -559,7 +559,7 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
texTempl.bind = PIPE_BIND_RENDER_TARGET;
|
texTempl.bind = PIPE_BIND_RENDER_TARGET;
|
||||||
m_colorTex = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
m_colorTex = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
||||||
if (!m_colorTex) {
|
if (!m_colorTex) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create color target texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create color target texture"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,7 +569,7 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
texTempl.bind = PIPE_BIND_DEPTH_STENCIL;
|
texTempl.bind = PIPE_BIND_DEPTH_STENCIL;
|
||||||
m_depthTex = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
m_depthTex = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
||||||
if (!m_depthTex) {
|
if (!m_depthTex) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create depth target texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create depth target texture"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,7 +580,7 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
texTempl.bind = PIPE_BIND_SAMPLER_VIEW;
|
texTempl.bind = PIPE_BIND_SAMPLER_VIEW;
|
||||||
m_colorBindTex[i] = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
m_colorBindTex[i] = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
||||||
if (!m_colorBindTex[i]) {
|
if (!m_colorBindTex[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create color bind texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create color bind texture"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -590,7 +590,7 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
texTempl.bind = PIPE_BIND_SAMPLER_VIEW;
|
texTempl.bind = PIPE_BIND_SAMPLER_VIEW;
|
||||||
m_depthBindTex[i] = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
m_depthBindTex[i] = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
||||||
if (!m_depthBindTex[i]) {
|
if (!m_depthBindTex[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create depth bind texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create depth bind texture"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -605,7 +605,7 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
svTempl.texture = m_colorTex;
|
svTempl.texture = m_colorTex;
|
||||||
m_colorView = ctx->m_pctx->create_sampler_view(ctx->m_pctx, m_colorTex, &svTempl);
|
m_colorView = ctx->m_pctx->create_sampler_view(ctx->m_pctx, m_colorTex, &svTempl);
|
||||||
if (!m_colorView) {
|
if (!m_colorView) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create color sampler view"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create color sampler view"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -613,7 +613,7 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
svTempl.texture = m_depthTex;
|
svTempl.texture = m_depthTex;
|
||||||
m_depthView = ctx->m_pctx->create_sampler_view(ctx->m_pctx, m_depthTex, &svTempl);
|
m_depthView = ctx->m_pctx->create_sampler_view(ctx->m_pctx, m_depthTex, &svTempl);
|
||||||
if (!m_depthView) {
|
if (!m_depthView) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create depth sampler view"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create depth sampler view"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -622,7 +622,7 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
svTempl.texture = m_colorBindTex[i];
|
svTempl.texture = m_colorBindTex[i];
|
||||||
m_colorBindView[i] = ctx->m_pctx->create_sampler_view(ctx->m_pctx, m_colorBindTex[i], &svTempl);
|
m_colorBindView[i] = ctx->m_pctx->create_sampler_view(ctx->m_pctx, m_colorBindTex[i], &svTempl);
|
||||||
if (!m_colorBindView[i]) {
|
if (!m_colorBindView[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create color bind sampler view"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create color bind sampler view"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -632,7 +632,7 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
svTempl.texture = m_depthBindTex[i];
|
svTempl.texture = m_depthBindTex[i];
|
||||||
m_depthBindView[i] = ctx->m_pctx->create_sampler_view(ctx->m_pctx, m_depthBindTex[i], &svTempl);
|
m_depthBindView[i] = ctx->m_pctx->create_sampler_view(ctx->m_pctx, m_depthBindTex[i], &svTempl);
|
||||||
if (!m_depthBindView[i]) {
|
if (!m_depthBindView[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create depth bind sampler view"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create depth bind sampler view"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -642,14 +642,14 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
surfTempl.format = ColorFormat;
|
surfTempl.format = ColorFormat;
|
||||||
m_colorSurface = ctx->m_pctx->create_surface(ctx->m_pctx, m_colorTex, &surfTempl);
|
m_colorSurface = ctx->m_pctx->create_surface(ctx->m_pctx, m_colorTex, &surfTempl);
|
||||||
if (!m_colorSurface) {
|
if (!m_colorSurface) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create color surface"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create color surface"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
surfTempl.format = DepthFormat;
|
surfTempl.format = DepthFormat;
|
||||||
m_depthSurface = ctx->m_pctx->create_surface(ctx->m_pctx, m_depthTex, &surfTempl);
|
m_depthSurface = ctx->m_pctx->create_surface(ctx->m_pctx, m_depthTex, &surfTempl);
|
||||||
if (!m_depthSurface) {
|
if (!m_depthSurface) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create depth surface"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create depth surface"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -665,9 +665,9 @@ class NXTextureR : public GraphicsDataNode<ITextureR> {
|
||||||
TextureClampMode clampMode, size_t colorBindCount, size_t depthBindCount)
|
TextureClampMode clampMode, size_t colorBindCount, size_t depthBindCount)
|
||||||
: GraphicsDataNode<ITextureR>(parent), m_ctx(ctx) {
|
: GraphicsDataNode<ITextureR>(parent), m_ctx(ctx) {
|
||||||
if (colorBindCount > MAX_BIND_TEXS)
|
if (colorBindCount > MAX_BIND_TEXS)
|
||||||
Log.report(logvisor::Fatal, fmt("too many color bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many color bindings for render texture"));
|
||||||
if (depthBindCount > MAX_BIND_TEXS)
|
if (depthBindCount > MAX_BIND_TEXS)
|
||||||
Log.report(logvisor::Fatal, fmt("too many depth bindings for render texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("too many depth bindings for render texture"));
|
||||||
|
|
||||||
if (m_samplesColor == 0)
|
if (m_samplesColor == 0)
|
||||||
m_samplesColor = 1;
|
m_samplesColor = 1;
|
||||||
|
@ -795,7 +795,7 @@ class NXShaderStage : public GraphicsDataNode<IShaderStage> {
|
||||||
PipelineStage stage)
|
PipelineStage stage)
|
||||||
: GraphicsDataNode<IShaderStage>(parent), m_obj(ctx->m_compiler.compile(SHADER_TYPE_TABLE[int(stage)], (char*)data)) {
|
: GraphicsDataNode<IShaderStage>(parent), m_obj(ctx->m_compiler.compile(SHADER_TYPE_TABLE[int(stage)], (char*)data)) {
|
||||||
if (!m_obj)
|
if (!m_obj)
|
||||||
Log.report(logvisor::Fatal, fmt("Shader compile fail:\n%s\n"), m_obj.info_log());
|
Log.report(logvisor::Fatal, FMT_STRING("Shader compile fail:\n%s\n"), m_obj.info_log());
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -960,7 +960,7 @@ protected:
|
||||||
std::string infoLog;
|
std::string infoLog;
|
||||||
m_shader = ctx->m_compiler.link(numStages, stages, &infoLog);
|
m_shader = ctx->m_compiler.link(numStages, stages, &infoLog);
|
||||||
if (!m_shader)
|
if (!m_shader)
|
||||||
Log.report(logvisor::Fatal, fmt("Unable to link shader:\n%s\n"), infoLog.c_str());
|
Log.report(logvisor::Fatal, FMT_STRING("Unable to link shader:\n%s\n"), infoLog.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -1083,7 +1083,7 @@ struct NXShaderDataBinding : GraphicsDataNode<IShaderDataBinding> {
|
||||||
for (size_t i = 0; i < ubufCount; ++i) {
|
for (size_t i = 0; i < ubufCount; ++i) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!ubufs[i])
|
if (!ubufs[i])
|
||||||
Log.report(logvisor::Fatal, fmt("null uniform-buffer %d provided to newShaderDataBinding"), int(i));
|
Log.report(logvisor::Fatal, FMT_STRING("null uniform-buffer %d provided to newShaderDataBinding"), int(i));
|
||||||
#endif
|
#endif
|
||||||
m_ubufs.push_back(ubufs[i]);
|
m_ubufs.push_back(ubufs[i]);
|
||||||
if (ubufOffs && ubufSizes)
|
if (ubufOffs && ubufSizes)
|
||||||
|
@ -1141,7 +1141,7 @@ struct NXShaderDataBinding : GraphicsDataNode<IShaderDataBinding> {
|
||||||
void bind(int b) {
|
void bind(int b) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!m_committed)
|
if (!m_committed)
|
||||||
Log.report(logvisor::Fatal, fmt("attempted to use uncommitted NXShaderDataBinding"));
|
Log.report(logvisor::Fatal, FMT_STRING("attempted to use uncommitted NXShaderDataBinding"));
|
||||||
#endif
|
#endif
|
||||||
struct pipe_context* pctx = m_ctx->m_pctx;
|
struct pipe_context* pctx = m_ctx->m_pctx;
|
||||||
|
|
||||||
|
@ -1362,7 +1362,7 @@ struct NXCommandQueue : IGraphicsCommandQueue {
|
||||||
NXTextureR* csource = m_resolveDispSource.cast<NXTextureR>();
|
NXTextureR* csource = m_resolveDispSource.cast<NXTextureR>();
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
if (!csource->m_colorBindCount)
|
if (!csource->m_colorBindCount)
|
||||||
Log.report(logvisor::Fatal, fmt("texture provided to resolveDisplay() must have at least 1 color binding"));
|
Log.report(logvisor::Fatal, FMT_STRING("texture provided to resolveDisplay() must have at least 1 color binding"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct pipe_surface* backBuf = m_ctx->m_windowSurfaces[ST_ATTACHMENT_BACK_LEFT];
|
struct pipe_surface* backBuf = m_ctx->m_windowSurfaces[ST_ATTACHMENT_BACK_LEFT];
|
||||||
|
@ -1538,7 +1538,7 @@ NXTextureD::NXTextureD(const boo::ObjToken<BaseGraphicsData>& parent, NXCommandQ
|
||||||
m_cpuSz = width * height * 2;
|
m_cpuSz = width * height * 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.report(logvisor::Fatal, fmt("unsupported tex format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unsupported tex format"));
|
||||||
}
|
}
|
||||||
m_nxFmt = pfmt;
|
m_nxFmt = pfmt;
|
||||||
m_stagingBuf.reset(new uint8_t[m_cpuSz]);
|
m_stagingBuf.reset(new uint8_t[m_cpuSz]);
|
||||||
|
@ -1554,7 +1554,7 @@ NXTextureD::NXTextureD(const boo::ObjToken<BaseGraphicsData>& parent, NXCommandQ
|
||||||
for (int i = 0; i < 2; ++i) {
|
for (int i = 0; i < 2; ++i) {
|
||||||
m_gpuTex[i] = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
m_gpuTex[i] = ctx->m_screen->resource_create(ctx->m_screen, &texTempl);
|
||||||
if (!m_gpuTex[i]) {
|
if (!m_gpuTex[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create texture"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1812,7 +1812,7 @@ bool NXContext::initialize() {
|
||||||
printf("Activated console\n\n");
|
printf("Activated console\n\n");
|
||||||
m_screen = nouveau_switch_screen_create();
|
m_screen = nouveau_switch_screen_create();
|
||||||
if (!m_screen) {
|
if (!m_screen) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create nouveau screen"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create nouveau screen"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
printf("nouveau_switch_screen_create done\n");
|
printf("nouveau_switch_screen_create done\n");
|
||||||
|
@ -1820,7 +1820,7 @@ bool NXContext::initialize() {
|
||||||
|
|
||||||
m_pctx = m_screen->context_create(m_screen, nullptr, 0);
|
m_pctx = m_screen->context_create(m_screen, nullptr, 0);
|
||||||
if (!m_pctx) {
|
if (!m_pctx) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create pipe context"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create pipe context"));
|
||||||
m_screen->destroy(m_screen);
|
m_screen->destroy(m_screen);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1829,7 +1829,7 @@ bool NXContext::initialize() {
|
||||||
st_config_options opts = {};
|
st_config_options opts = {};
|
||||||
m_st = st_create_context(API_OPENGL_CORE, m_pctx, nullptr, nullptr, &opts, false);
|
m_st = st_create_context(API_OPENGL_CORE, m_pctx, nullptr, nullptr, &opts, false);
|
||||||
if (!m_st) {
|
if (!m_st) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create st context"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create st context"));
|
||||||
m_screen->destroy(m_screen);
|
m_screen->destroy(m_screen);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1856,7 +1856,7 @@ bool NXContext::initialize() {
|
||||||
whandle.stride = gfxGetFramebufferPitch();
|
whandle.stride = gfxGetFramebufferPitch();
|
||||||
struct pipe_resource* tex = m_screen->resource_from_handle(m_screen, &texTempl, &whandle, 0);
|
struct pipe_resource* tex = m_screen->resource_from_handle(m_screen, &texTempl, &whandle, 0);
|
||||||
if (!tex) {
|
if (!tex) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create color target texture"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create color target texture"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1865,7 +1865,7 @@ bool NXContext::initialize() {
|
||||||
surfTempl.format = ColorFormat;
|
surfTempl.format = ColorFormat;
|
||||||
m_windowSurfaces[i] = m_pctx->create_surface(m_pctx, tex, &surfTempl);
|
m_windowSurfaces[i] = m_pctx->create_surface(m_pctx, tex, &surfTempl);
|
||||||
if (!m_windowSurfaces[i]) {
|
if (!m_windowSurfaces[i]) {
|
||||||
Log.report(logvisor::Fatal, fmt("Failed to create color surface"));
|
Log.report(logvisor::Fatal, FMT_STRING("Failed to create color surface"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ DeviceFinder* DeviceFinder::skDevFinder = nullptr;
|
||||||
|
|
||||||
DeviceFinder::DeviceFinder(std::unordered_set<uint64_t> types) {
|
DeviceFinder::DeviceFinder(std::unordered_set<uint64_t> types) {
|
||||||
if (skDevFinder) {
|
if (skDevFinder) {
|
||||||
fmt::print(stderr, fmt("only one instance of CDeviceFinder may be constructed"));
|
fmt::print(stderr, FMT_STRING("only one instance of CDeviceFinder may be constructed"));
|
||||||
std::abort();
|
std::abort();
|
||||||
}
|
}
|
||||||
skDevFinder = this;
|
skDevFinder = this;
|
||||||
|
|
|
@ -79,7 +79,7 @@ class HIDDeviceIOKit : public IHIDDevice {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _threadProcUSBLL(std::shared_ptr<HIDDeviceIOKit> device) {
|
static void _threadProcUSBLL(std::shared_ptr<HIDDeviceIOKit> device) {
|
||||||
pthread_setname_np(fmt::format(fmt("{} Transfer Thread"), device->m_token.getProductName()).c_str());
|
pthread_setname_np(fmt::format(FMT_STRING("{} Transfer Thread"), device->m_token.getProductName()).c_str());
|
||||||
std::unique_lock<std::mutex> lk(device->m_initMutex);
|
std::unique_lock<std::mutex> lk(device->m_initMutex);
|
||||||
|
|
||||||
/* Get the HID element's parent (USB interrupt transfer-interface) */
|
/* Get the HID element's parent (USB interrupt transfer-interface) */
|
||||||
|
@ -95,7 +95,7 @@ class HIDDeviceIOKit : public IHIDDevice {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!interfaceEntry) {
|
if (!interfaceEntry) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to find interface for {}@{}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to find interface for {}@{}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath);
|
device->m_token.getProductName(), device->m_devPath);
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -109,7 +109,7 @@ class HIDDeviceIOKit : public IHIDDevice {
|
||||||
err = IOCreatePlugInInterfaceForService(interfaceEntry.get(), kIOUSBInterfaceUserClientTypeID,
|
err = IOCreatePlugInInterfaceForService(interfaceEntry.get(), kIOUSBInterfaceUserClientTypeID,
|
||||||
kIOCFPlugInInterfaceID, &iodev, &score);
|
kIOCFPlugInInterfaceID, &iodev, &score);
|
||||||
if (err) {
|
if (err) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath);
|
device->m_token.getProductName(), device->m_devPath);
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -120,7 +120,7 @@ class HIDDeviceIOKit : public IHIDDevice {
|
||||||
IUnknownPointer<IOUSBInterfaceInterface> intf;
|
IUnknownPointer<IOUSBInterfaceInterface> intf;
|
||||||
err = iodev.As(&intf, kIOUSBInterfaceInterfaceID);
|
err = iodev.As(&intf, kIOUSBInterfaceInterfaceID);
|
||||||
if (err) {
|
if (err) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath);
|
device->m_token.getProductName(), device->m_devPath);
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -132,10 +132,10 @@ class HIDDeviceIOKit : public IHIDDevice {
|
||||||
err = intf->USBInterfaceOpen(intf.storage());
|
err = intf->USBInterfaceOpen(intf.storage());
|
||||||
if (err != kIOReturnSuccess) {
|
if (err != kIOReturnSuccess) {
|
||||||
if (err == kIOReturnExclusiveAccess) {
|
if (err == kIOReturnExclusiveAccess) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}: someone else using it\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}: someone else using it\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath);
|
device->m_token.getProductName(), device->m_devPath);
|
||||||
} else {
|
} else {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath);
|
device->m_token.getProductName(), device->m_devPath);
|
||||||
}
|
}
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
|
@ -199,14 +199,14 @@ class HIDDeviceIOKit : public IHIDDevice {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _threadProcHID(std::shared_ptr<HIDDeviceIOKit> device) {
|
static void _threadProcHID(std::shared_ptr<HIDDeviceIOKit> device) {
|
||||||
pthread_setname_np(fmt::format(fmt("{} Transfer Thread"), device->m_token.getProductName()).c_str());
|
pthread_setname_np(fmt::format(FMT_STRING("{} Transfer Thread"), device->m_token.getProductName()).c_str());
|
||||||
std::unique_lock<std::mutex> lk(device->m_initMutex);
|
std::unique_lock<std::mutex> lk(device->m_initMutex);
|
||||||
|
|
||||||
/* Get the HID element's object (HID device interface) */
|
/* Get the HID element's object (HID device interface) */
|
||||||
IOObjectPointer<io_service_t> interfaceEntry =
|
IOObjectPointer<io_service_t> interfaceEntry =
|
||||||
IORegistryEntryFromPath(kIOMasterPortDefault, device->m_devPath.data());
|
IORegistryEntryFromPath(kIOMasterPortDefault, device->m_devPath.data());
|
||||||
if (!IOObjectConformsTo(interfaceEntry.get(), "IOHIDDevice")) {
|
if (!IOObjectConformsTo(interfaceEntry.get(), "IOHIDDevice")) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to find interface for {}@{}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to find interface for {}@{}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath);
|
device->m_token.getProductName(), device->m_devPath);
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -215,7 +215,7 @@ class HIDDeviceIOKit : public IHIDDevice {
|
||||||
|
|
||||||
device->m_hidIntf = IOHIDDeviceCreate(nullptr, interfaceEntry.get());
|
device->m_hidIntf = IOHIDDeviceCreate(nullptr, interfaceEntry.get());
|
||||||
if (!device->m_hidIntf) {
|
if (!device->m_hidIntf) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath);
|
device->m_token.getProductName(), device->m_devPath);
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -226,10 +226,10 @@ class HIDDeviceIOKit : public IHIDDevice {
|
||||||
IOReturn err = IOHIDDeviceOpen(device->m_hidIntf.get(), kIOHIDOptionsTypeNone);
|
IOReturn err = IOHIDDeviceOpen(device->m_hidIntf.get(), kIOHIDOptionsTypeNone);
|
||||||
if (err != kIOReturnSuccess) {
|
if (err != kIOReturnSuccess) {
|
||||||
if (err == kIOReturnExclusiveAccess) {
|
if (err == kIOReturnExclusiveAccess) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}: someone else using it\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}: someone else using it\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath);
|
device->m_token.getProductName(), device->m_devPath);
|
||||||
} else {
|
} else {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath);
|
device->m_token.getProductName(), device->m_devPath);
|
||||||
}
|
}
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
|
@ -292,7 +292,7 @@ public:
|
||||||
else if (dType == DeviceType::HID)
|
else if (dType == DeviceType::HID)
|
||||||
m_thread = std::thread(_threadProcHID, std::static_pointer_cast<HIDDeviceIOKit>(shared_from_this()));
|
m_thread = std::thread(_threadProcHID, std::static_pointer_cast<HIDDeviceIOKit>(shared_from_this()));
|
||||||
else {
|
else {
|
||||||
fmt::print(stderr, fmt("invalid token supplied to device constructor\n"));
|
fmt::print(stderr, FMT_STRING("invalid token supplied to device constructor\n"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_initCond.wait(lk);
|
m_initCond.wait(lk);
|
||||||
|
|
|
@ -69,7 +69,7 @@ class HIDDeviceUdev final : public IHIDDevice {
|
||||||
const char* dp = udev_device_get_devnode(udevDev);
|
const char* dp = udev_device_get_devnode(udevDev);
|
||||||
int fd = open(dp, O_RDWR);
|
int fd = open(dp, O_RDWR);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}: {}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}: {}\n"),
|
||||||
device->m_token.getProductName(), dp, strerror(errno));
|
device->m_token.getProductName(), dp, strerror(errno));
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -149,7 +149,7 @@ class HIDDeviceUdev final : public IHIDDevice {
|
||||||
const char* dp = udev_device_get_devnode(udevDev);
|
const char* dp = udev_device_get_devnode(udevDev);
|
||||||
int fd = open(dp, O_RDWR | O_NONBLOCK);
|
int fd = open(dp, O_RDWR | O_NONBLOCK);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}: {}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}: {}\n"),
|
||||||
device->m_token.getProductName(), dp, strerror(errno));
|
device->m_token.getProductName(), dp, strerror(errno));
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -166,7 +166,7 @@ class HIDDeviceUdev final : public IHIDDevice {
|
||||||
/* Report descriptor size */
|
/* Report descriptor size */
|
||||||
int reportDescSize;
|
int reportDescSize;
|
||||||
if (ioctl(fd, HIDIOCGRDESCSIZE, &reportDescSize) == -1) {
|
if (ioctl(fd, HIDIOCGRDESCSIZE, &reportDescSize) == -1) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to ioctl(HIDIOCGRDESCSIZE) {}@{}: {}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to ioctl(HIDIOCGRDESCSIZE) {}@{}: {}\n"),
|
||||||
device->m_token.getProductName(), dp, strerror(errno));
|
device->m_token.getProductName(), dp, strerror(errno));
|
||||||
close(fd);
|
close(fd);
|
||||||
return;
|
return;
|
||||||
|
@ -176,7 +176,7 @@ class HIDDeviceUdev final : public IHIDDevice {
|
||||||
hidraw_report_descriptor reportDesc;
|
hidraw_report_descriptor reportDesc;
|
||||||
reportDesc.size = reportDescSize;
|
reportDesc.size = reportDescSize;
|
||||||
if (ioctl(fd, HIDIOCGRDESC, &reportDesc) == -1) {
|
if (ioctl(fd, HIDIOCGRDESC, &reportDesc) == -1) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to ioctl(HIDIOCGRDESC) {}@{}: {}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to ioctl(HIDIOCGRDESC) {}@{}: {}\n"),
|
||||||
device->m_token.getProductName(), dp, strerror(errno));
|
device->m_token.getProductName(), dp, strerror(errno));
|
||||||
close(fd);
|
close(fd);
|
||||||
return;
|
return;
|
||||||
|
@ -272,7 +272,7 @@ public:
|
||||||
else if (dType == DeviceType::HID)
|
else if (dType == DeviceType::HID)
|
||||||
m_thread = std::thread(_threadProcHID, std::static_pointer_cast<HIDDeviceUdev>(shared_from_this()));
|
m_thread = std::thread(_threadProcHID, std::static_pointer_cast<HIDDeviceUdev>(shared_from_this()));
|
||||||
else {
|
else {
|
||||||
fmt::print(stderr, fmt("invalid token supplied to device constructor"));
|
fmt::print(stderr, FMT_STRING("invalid token supplied to device constructor"));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
m_initCond.wait(lk);
|
m_initCond.wait(lk);
|
||||||
|
|
|
@ -72,7 +72,7 @@ class HIDDeviceWinUSB final : public IHIDDevice {
|
||||||
CreateFileA(device->m_devPath.data(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, nullptr,
|
CreateFileA(device->m_devPath.data(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, nullptr,
|
||||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, nullptr);
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, nullptr);
|
||||||
if (INVALID_HANDLE_VALUE == device->m_devHandle) {
|
if (INVALID_HANDLE_VALUE == device->m_devHandle) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}: {}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}: {}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -80,7 +80,7 @@ class HIDDeviceWinUSB final : public IHIDDevice {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!WinUsb_Initialize(device->m_devHandle, &device->m_usbHandle)) {
|
if (!WinUsb_Initialize(device->m_devHandle, &device->m_usbHandle)) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}: {}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}: {}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -91,7 +91,7 @@ class HIDDeviceWinUSB final : public IHIDDevice {
|
||||||
/* Enumerate device pipes */
|
/* Enumerate device pipes */
|
||||||
USB_INTERFACE_DESCRIPTOR ifDesc = {0};
|
USB_INTERFACE_DESCRIPTOR ifDesc = {0};
|
||||||
if (!WinUsb_QueryInterfaceSettings(device->m_usbHandle, 0, &ifDesc)) {
|
if (!WinUsb_QueryInterfaceSettings(device->m_usbHandle, 0, &ifDesc)) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}: {}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}: {}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -156,7 +156,7 @@ class HIDDeviceWinUSB final : public IHIDDevice {
|
||||||
CreateFileA(device->m_devPath.data(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, nullptr,
|
CreateFileA(device->m_devPath.data(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, nullptr,
|
||||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, nullptr);
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, nullptr);
|
||||||
if (INVALID_HANDLE_VALUE == device->m_hidHandle) {
|
if (INVALID_HANDLE_VALUE == device->m_hidHandle) {
|
||||||
device->m_devImp->deviceError(fmt("Unable to open {}@{}: {}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable to open {}@{}: {}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -164,7 +164,7 @@ class HIDDeviceWinUSB final : public IHIDDevice {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!HidD_GetPreparsedData(device->m_hidHandle, &device->m_preparsedData)) {
|
if (!HidD_GetPreparsedData(device->m_hidHandle, &device->m_preparsedData)) {
|
||||||
device->m_devImp->deviceError(fmt("Unable get preparsed data of {}@{}: {}\n"),
|
device->m_devImp->deviceError(FMT_STRING("Unable get preparsed data of {}@{}: {}\n"),
|
||||||
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
device->m_token.getProductName(), device->m_devPath, GetLastError());
|
||||||
lk.unlock();
|
lk.unlock();
|
||||||
device->m_initCond.notify_one();
|
device->m_initCond.notify_one();
|
||||||
|
@ -233,14 +233,14 @@ class HIDDeviceWinUSB final : public IHIDDevice {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Error != ERROR_IO_PENDING) {
|
if (Error != ERROR_IO_PENDING) {
|
||||||
fmt::print(stderr, fmt("Write Failed {:08X}\n"), int(Error));
|
fmt::print(stderr, FMT_STRING("Write Failed {:08X}\n"), int(Error));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!GetOverlappedResult(m_hidHandle, &Overlapped, &BytesWritten, TRUE)) {
|
if (!GetOverlappedResult(m_hidHandle, &Overlapped, &BytesWritten, TRUE)) {
|
||||||
DWORD Error = GetLastError();
|
DWORD Error = GetLastError();
|
||||||
fmt::print(stderr, fmt("Write Failed {:08X}\n"), int(Error));
|
fmt::print(stderr, FMT_STRING("Write Failed {:08X}\n"), int(Error));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (tp == HIDReportType::Feature) {
|
} else if (tp == HIDReportType::Feature) {
|
||||||
|
@ -309,7 +309,7 @@ public:
|
||||||
m_runningTransferLoop = false;
|
m_runningTransferLoop = false;
|
||||||
return;
|
return;
|
||||||
} else if (Error != ERROR_IO_PENDING) {
|
} else if (Error != ERROR_IO_PENDING) {
|
||||||
fmt::print(stderr, fmt("Read Failed: {:08X}\n"), int(Error));
|
fmt::print(stderr, FMT_STRING("Read Failed: {:08X}\n"), int(Error));
|
||||||
return;
|
return;
|
||||||
} else if (!GetOverlappedResultEx(m_hidHandle, &m_overlapped, &BytesRead, 10, TRUE)) {
|
} else if (!GetOverlappedResultEx(m_hidHandle, &m_overlapped, &BytesRead, 10, TRUE)) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -84,14 +84,14 @@ class HIDListenerIOKit : public IHIDListener {
|
||||||
err = IOCreatePlugInInterfaceForService(obj.get(), kIOUSBDeviceUserClientTypeID, kIOCFPlugInInterfaceID,
|
err = IOCreatePlugInInterfaceForService(obj.get(), kIOUSBDeviceUserClientTypeID, kIOCFPlugInInterfaceID,
|
||||||
&devServ, &score);
|
&devServ, &score);
|
||||||
if (err != kIOReturnSuccess) {
|
if (err != kIOReturnSuccess) {
|
||||||
fmt::print(stderr, fmt("unable to open IOKit plugin interface\n"));
|
fmt::print(stderr, FMT_STRING("unable to open IOKit plugin interface\n"));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
IUnknownPointer<IOUSBDeviceInterface182> dev;
|
IUnknownPointer<IOUSBDeviceInterface182> dev;
|
||||||
err = devServ.As(&dev, kIOUSBDeviceInterfaceID182);
|
err = devServ.As(&dev, kIOUSBDeviceInterfaceID182);
|
||||||
if (err != kIOReturnSuccess) {
|
if (err != kIOReturnSuccess) {
|
||||||
fmt::print(stderr, fmt("unable to open IOKit device interface\n"));
|
fmt::print(stderr, FMT_STRING("unable to open IOKit device interface\n"));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ class HIDListenerIOKit : public IHIDListener {
|
||||||
|
|
||||||
listener->m_finder._insertToken(std::make_unique<DeviceToken>(DeviceType::USB, vid, pid, vstr, pstr, devPath));
|
listener->m_finder._insertToken(std::make_unique<DeviceToken>(DeviceType::USB, vid, pid, vstr, pstr, devPath));
|
||||||
|
|
||||||
// fmt::print(fmt("ADDED {:08X} {}\n"), obj.get(), devPath);
|
// fmt::print(FMT_STRING("ADDED {:08X} {}\n"), obj.get(), devPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ class HIDListenerIOKit : public IHIDListener {
|
||||||
if (IORegistryEntryGetPath(obj.get(), kIOServicePlane, devPath) != 0)
|
if (IORegistryEntryGetPath(obj.get(), kIOServicePlane, devPath) != 0)
|
||||||
continue;
|
continue;
|
||||||
listener->m_finder._removeToken(devPath);
|
listener->m_finder._removeToken(devPath);
|
||||||
// fmt::print(fmt("REMOVED {:08X} {}\n"), obj.get(), devPath);
|
// fmt::print(FMT_STRING("REMOVED {:08X} {}\n"), obj.get(), devPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,14 +147,14 @@ class HIDListenerIOKit : public IHIDListener {
|
||||||
err =
|
err =
|
||||||
IOCreatePlugInInterfaceForService(obj.get(), kIOHIDDeviceTypeID, kIOCFPlugInInterfaceID, &devServ, &score);
|
IOCreatePlugInInterfaceForService(obj.get(), kIOHIDDeviceTypeID, kIOCFPlugInInterfaceID, &devServ, &score);
|
||||||
if (err != kIOReturnSuccess) {
|
if (err != kIOReturnSuccess) {
|
||||||
fmt::print(stderr, fmt("unable to open IOKit plugin interface\n"));
|
fmt::print(stderr, FMT_STRING("unable to open IOKit plugin interface\n"));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
IUnknownPointer<IOHIDDeviceDeviceInterface> dev;
|
IUnknownPointer<IOHIDDeviceDeviceInterface> dev;
|
||||||
err = devServ.As(&dev, kIOHIDDeviceDeviceInterfaceID);
|
err = devServ.As(&dev, kIOHIDDeviceDeviceInterfaceID);
|
||||||
if (err != kIOReturnSuccess) {
|
if (err != kIOReturnSuccess) {
|
||||||
fmt::print(stderr, fmt("unable to open IOKit device interface\n"));
|
fmt::print(stderr, FMT_STRING("unable to open IOKit device interface\n"));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ class HIDListenerIOKit : public IHIDListener {
|
||||||
|
|
||||||
listener->m_finder._insertToken(std::make_unique<DeviceToken>(DeviceType::HID, vidv, pidv, vstr, pstr, devPath));
|
listener->m_finder._insertToken(std::make_unique<DeviceToken>(DeviceType::HID, vidv, pidv, vstr, pstr, devPath));
|
||||||
|
|
||||||
// fmt::print(fmt("ADDED {:08X} {}\n"), obj, devPath);
|
// fmt::print(FMT_STRING("ADDED {:08X} {}\n"), obj, devPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ class HIDListenerIOKit : public IHIDListener {
|
||||||
if (IORegistryEntryGetPath(obj.get(), kIOServicePlane, devPath) != 0)
|
if (IORegistryEntryGetPath(obj.get(), kIOServicePlane, devPath) != 0)
|
||||||
continue;
|
continue;
|
||||||
listener->m_finder._removeToken(devPath);
|
listener->m_finder._removeToken(devPath);
|
||||||
// fmt::print(fmt("REMOVED {:08X} {}\n"), obj, devPath);
|
// fmt::print(FMT_STRING("REMOVED {:08X} {}\n"), obj, devPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,7 @@ class HIDListenerUdev final : public IHIDListener {
|
||||||
{
|
{
|
||||||
const char* name = udev_list_entry_get_name(att);
|
const char* name = udev_list_entry_get_name(att);
|
||||||
const char* val = udev_list_entry_get_value(att);
|
const char* val = udev_list_entry_get_value(att);
|
||||||
fmt::print(stderr, fmt("{} {}\n"), name, val);
|
fmt::print(stderr, FMT_STRING("{} {}\n"), name, val);
|
||||||
}
|
}
|
||||||
std::fputs("\n\n", stderr);
|
std::fputs("\n\n", stderr);
|
||||||
#endif
|
#endif
|
||||||
|
@ -170,7 +170,7 @@ public:
|
||||||
/* Setup hotplug events */
|
/* Setup hotplug events */
|
||||||
m_udevMon = udev_monitor_new_from_netlink(GetUdev(), "udev");
|
m_udevMon = udev_monitor_new_from_netlink(GetUdev(), "udev");
|
||||||
if (!m_udevMon) {
|
if (!m_udevMon) {
|
||||||
fmt::print(stderr, fmt("unable to init udev_monitor"));
|
fmt::print(stderr, FMT_STRING("unable to init udev_monitor"));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
udev_monitor_filter_add_match_subsystem_devtype(m_udevMon, "usb", "usb_device");
|
udev_monitor_filter_add_match_subsystem_devtype(m_udevMon, "usb", "usb_device");
|
||||||
|
|
|
@ -104,11 +104,11 @@ public:
|
||||||
|
|
||||||
m_metalCtx.m_dev = MTLCreateSystemDefaultDevice();
|
m_metalCtx.m_dev = MTLCreateSystemDefaultDevice();
|
||||||
if (!m_metalCtx.m_dev)
|
if (!m_metalCtx.m_dev)
|
||||||
Log.report(logvisor::Fatal, fmt("Unable to create metal device"));
|
Log.report(logvisor::Fatal, FMT_STRING("Unable to create metal device"));
|
||||||
m_metalCtx.m_q = [m_metalCtx.m_dev newCommandQueue];
|
m_metalCtx.m_q = [m_metalCtx.m_dev newCommandQueue];
|
||||||
while (![m_metalCtx.m_dev supportsTextureSampleCount:m_metalCtx.m_sampleCount])
|
while (![m_metalCtx.m_dev supportsTextureSampleCount:m_metalCtx.m_sampleCount])
|
||||||
m_metalCtx.m_sampleCount = flp2(m_metalCtx.m_sampleCount - 1);
|
m_metalCtx.m_sampleCount = flp2(m_metalCtx.m_sampleCount - 1);
|
||||||
Log.report(logvisor::Info, fmt("using Metal renderer"));
|
Log.report(logvisor::Info, FMT_STRING("using Metal renderer"));
|
||||||
}
|
}
|
||||||
|
|
||||||
EPlatformType getPlatformType() const override {
|
EPlatformType getPlatformType() const override {
|
||||||
|
|
|
@ -233,7 +233,7 @@ public:
|
||||||
~GraphicsContextCocoaGL() override
|
~GraphicsContextCocoaGL() override
|
||||||
{
|
{
|
||||||
m_commandQueue->stopRenderer();
|
m_commandQueue->stopRenderer();
|
||||||
fmt::print(fmt("CONTEXT DESTROYED\n"));
|
fmt::print(FMT_STRING("CONTEXT DESTROYED\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _setCallback(IWindowCallback* cb) override
|
void _setCallback(IWindowCallback* cb) override
|
||||||
|
@ -263,7 +263,7 @@ public:
|
||||||
{
|
{
|
||||||
m_nsContext = [[GraphicsContextCocoaGLInternal alloc] initWithBooContext:this];
|
m_nsContext = [[GraphicsContextCocoaGLInternal alloc] initWithBooContext:this];
|
||||||
if (!m_nsContext)
|
if (!m_nsContext)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make new NSOpenGLView"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make new NSOpenGLView"));
|
||||||
[(__bridge NSWindow*)(void*)m_parentWindow->getPlatformHandle() setContentView:m_nsContext];
|
[(__bridge NSWindow*)(void*)m_parentWindow->getPlatformHandle() setContentView:m_nsContext];
|
||||||
CVDisplayLinkCreateWithActiveCGDisplays(&m_dispLink);
|
CVDisplayLinkCreateWithActiveCGDisplays(&m_dispLink);
|
||||||
CVDisplayLinkSetOutputCallback(m_dispLink, (CVDisplayLinkOutputCallback)DLCallback, this);
|
CVDisplayLinkSetOutputCallback(m_dispLink, (CVDisplayLinkOutputCallback)DLCallback, this);
|
||||||
|
@ -299,7 +299,7 @@ public:
|
||||||
NSOpenGLPixelFormat* nspf = [[NSOpenGLPixelFormat alloc] initWithAttributes:PF_TABLE[int(m_pf)]];
|
NSOpenGLPixelFormat* nspf = [[NSOpenGLPixelFormat alloc] initWithAttributes:PF_TABLE[int(m_pf)]];
|
||||||
m_mainCtx = [[NSOpenGLContext alloc] initWithFormat:nspf shareContext:[m_nsContext openGLContext]];
|
m_mainCtx = [[NSOpenGLContext alloc] initWithFormat:nspf shareContext:[m_nsContext openGLContext]];
|
||||||
if (!m_mainCtx)
|
if (!m_mainCtx)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make main NSOpenGLContext"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make main NSOpenGLContext"));
|
||||||
}
|
}
|
||||||
[m_mainCtx makeCurrentContext];
|
[m_mainCtx makeCurrentContext];
|
||||||
return m_dataFactory.get();
|
return m_dataFactory.get();
|
||||||
|
@ -312,7 +312,7 @@ public:
|
||||||
NSOpenGLPixelFormat* nspf = [[NSOpenGLPixelFormat alloc] initWithAttributes:PF_TABLE[int(m_pf)]];
|
NSOpenGLPixelFormat* nspf = [[NSOpenGLPixelFormat alloc] initWithAttributes:PF_TABLE[int(m_pf)]];
|
||||||
m_loadCtx = [[NSOpenGLContext alloc] initWithFormat:nspf shareContext:[m_nsContext openGLContext]];
|
m_loadCtx = [[NSOpenGLContext alloc] initWithFormat:nspf shareContext:[m_nsContext openGLContext]];
|
||||||
if (!m_loadCtx)
|
if (!m_loadCtx)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make load NSOpenGLContext"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make load NSOpenGLContext"));
|
||||||
}
|
}
|
||||||
[m_loadCtx makeCurrentContext];
|
[m_loadCtx makeCurrentContext];
|
||||||
return m_dataFactory.get();
|
return m_dataFactory.get();
|
||||||
|
@ -356,7 +356,7 @@ IGraphicsContext* _GraphicsContextCocoaGLNew(IGraphicsContext::EGraphicsAPI api,
|
||||||
minor = glVersion[2] - '0';
|
minor = glVersion[2] - '0';
|
||||||
}
|
}
|
||||||
if (glewInit() != GLEW_OK)
|
if (glewInit() != GLEW_OK)
|
||||||
Log.report(logvisor::Fatal, fmt("glewInit failed"));
|
Log.report(logvisor::Fatal, FMT_STRING("glewInit failed"));
|
||||||
[NSOpenGLContext clearCurrentContext];
|
[NSOpenGLContext clearCurrentContext];
|
||||||
if (!glVersion)
|
if (!glVersion)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -419,7 +419,7 @@ public:
|
||||||
MetalContext::Window& w = m_metalCtx->m_windows[m_parentWindow];
|
MetalContext::Window& w = m_metalCtx->m_windows[m_parentWindow];
|
||||||
m_nsContext = [[GraphicsContextCocoaMetalInternal alloc] initWithBooContext:this];
|
m_nsContext = [[GraphicsContextCocoaMetalInternal alloc] initWithBooContext:this];
|
||||||
if (!m_nsContext)
|
if (!m_nsContext)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make new NSView for Metal"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make new NSView for Metal"));
|
||||||
w.m_metalLayer = (CAMetalLayer*) m_nsContext.layer;
|
w.m_metalLayer = (CAMetalLayer*) m_nsContext.layer;
|
||||||
[(__bridge NSWindow*) (void*) m_parentWindow->getPlatformHandle() setContentView:m_nsContext];
|
[(__bridge NSWindow*) (void*) m_parentWindow->getPlatformHandle() setContentView:m_nsContext];
|
||||||
CVDisplayLinkCreateWithActiveCGDisplays(&m_dispLink);
|
CVDisplayLinkCreateWithActiveCGDisplays(&m_dispLink);
|
||||||
|
|
|
@ -78,7 +78,7 @@ public:
|
||||||
std::shared_ptr<IWindow> m_window;
|
std::shared_ptr<IWindow> m_window;
|
||||||
std::shared_ptr<IWindow> newWindow(std::string_view title) override {
|
std::shared_ptr<IWindow> newWindow(std::string_view title) override {
|
||||||
if (m_window)
|
if (m_window)
|
||||||
Log.report(logvisor::Fatal, fmt("Only 1 window allowed on NX"));
|
Log.report(logvisor::Fatal, FMT_STRING("Only 1 window allowed on NX"));
|
||||||
m_window = _WindowNXNew(title, &m_nxCtx);
|
m_window = _WindowNXNew(title, &m_nxCtx);
|
||||||
return m_window;
|
return m_window;
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ public:
|
||||||
#if _WIN32_WINNT_WIN10
|
#if _WIN32_WINNT_WIN10
|
||||||
if (!no12) {
|
if (!no12) {
|
||||||
if (!FindBestD3DCompile())
|
if (!FindBestD3DCompile())
|
||||||
Log.report(logvisor::Fatal, fmt("unable to find D3DCompile_[43-47].dll"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to find D3DCompile_[43-47].dll"));
|
||||||
|
|
||||||
D3D12SerializeRootSignaturePROC = D3D12SerializeRootSignature;
|
D3D12SerializeRootSignaturePROC = D3D12SerializeRootSignature;
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ public:
|
||||||
/* Obtain DXGI Factory */
|
/* Obtain DXGI Factory */
|
||||||
HRESULT hr = MyCreateDXGIFactory1(__uuidof(IDXGIFactory2), &m_3dCtx.m_ctx12.m_dxFactory);
|
HRESULT hr = MyCreateDXGIFactory1(__uuidof(IDXGIFactory2), &m_3dCtx.m_ctx12.m_dxFactory);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create DXGI factory"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create DXGI factory"));
|
||||||
|
|
||||||
/* Adapter */
|
/* Adapter */
|
||||||
ComPtr<IDXGIAdapter1> ppAdapter;
|
ComPtr<IDXGIAdapter1> ppAdapter;
|
||||||
|
@ -109,26 +109,26 @@ public:
|
||||||
/* Establish loader objects */
|
/* Establish loader objects */
|
||||||
if (FAILED(m_3dCtx.m_ctx12.m_dev->CreateCommandAllocator(
|
if (FAILED(m_3dCtx.m_ctx12.m_dev->CreateCommandAllocator(
|
||||||
D3D12_COMMAND_LIST_TYPE_DIRECT, __uuidof(ID3D12CommandAllocator), &m_3dCtx.m_ctx12.m_loadqalloc)))
|
D3D12_COMMAND_LIST_TYPE_DIRECT, __uuidof(ID3D12CommandAllocator), &m_3dCtx.m_ctx12.m_loadqalloc)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create loader allocator"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create loader allocator"));
|
||||||
|
|
||||||
D3D12_COMMAND_QUEUE_DESC desc = {D3D12_COMMAND_LIST_TYPE_DIRECT, D3D12_COMMAND_QUEUE_PRIORITY_NORMAL,
|
D3D12_COMMAND_QUEUE_DESC desc = {D3D12_COMMAND_LIST_TYPE_DIRECT, D3D12_COMMAND_QUEUE_PRIORITY_NORMAL,
|
||||||
D3D12_COMMAND_QUEUE_FLAG_NONE};
|
D3D12_COMMAND_QUEUE_FLAG_NONE};
|
||||||
if (FAILED(m_3dCtx.m_ctx12.m_dev->CreateCommandQueue(&desc, __uuidof(ID3D12CommandQueue),
|
if (FAILED(m_3dCtx.m_ctx12.m_dev->CreateCommandQueue(&desc, __uuidof(ID3D12CommandQueue),
|
||||||
&m_3dCtx.m_ctx12.m_loadq)))
|
&m_3dCtx.m_ctx12.m_loadq)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create loader queue"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create loader queue"));
|
||||||
|
|
||||||
if (FAILED(m_3dCtx.m_ctx12.m_dev->CreateFence(0, D3D12_FENCE_FLAG_NONE, __uuidof(ID3D12Fence),
|
if (FAILED(m_3dCtx.m_ctx12.m_dev->CreateFence(0, D3D12_FENCE_FLAG_NONE, __uuidof(ID3D12Fence),
|
||||||
&m_3dCtx.m_ctx12.m_loadfence)))
|
&m_3dCtx.m_ctx12.m_loadfence)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create loader fence"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create loader fence"));
|
||||||
|
|
||||||
m_3dCtx.m_ctx12.m_loadfencehandle = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
m_3dCtx.m_ctx12.m_loadfencehandle = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
||||||
|
|
||||||
if (FAILED(m_3dCtx.m_ctx12.m_dev->CreateCommandList(
|
if (FAILED(m_3dCtx.m_ctx12.m_dev->CreateCommandList(
|
||||||
0, D3D12_COMMAND_LIST_TYPE_DIRECT, m_3dCtx.m_ctx12.m_loadqalloc.Get(), nullptr,
|
0, D3D12_COMMAND_LIST_TYPE_DIRECT, m_3dCtx.m_ctx12.m_loadqalloc.Get(), nullptr,
|
||||||
__uuidof(ID3D12GraphicsCommandList), &m_3dCtx.m_ctx12.m_loadlist)))
|
__uuidof(ID3D12GraphicsCommandList), &m_3dCtx.m_ctx12.m_loadlist)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create loader list"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create loader list"));
|
||||||
|
|
||||||
Log.report(logvisor::Info, fmt("initialized D3D12 renderer"));
|
Log.report(logvisor::Info, FMT_STRING("initialized D3D12 renderer"));
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
/* Some Win10 client HW doesn't support D3D12 (despite being supposedly HW-agnostic) */
|
/* Some Win10 client HW doesn't support D3D12 (despite being supposedly HW-agnostic) */
|
||||||
|
@ -139,7 +139,7 @@ public:
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (!FindBestD3DCompile())
|
if (!FindBestD3DCompile())
|
||||||
Log.report(logvisor::Fatal, fmt("unable to find D3DCompile_[43-47].dll"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to find D3DCompile_[43-47].dll"));
|
||||||
|
|
||||||
/* Create device proc */
|
/* Create device proc */
|
||||||
PFN_D3D11_CREATE_DEVICE MyD3D11CreateDevice = D3D11CreateDevice;
|
PFN_D3D11_CREATE_DEVICE MyD3D11CreateDevice = D3D11CreateDevice;
|
||||||
|
@ -150,7 +150,7 @@ public:
|
||||||
ComPtr<ID3D11DeviceContext> tempCtx;
|
ComPtr<ID3D11DeviceContext> tempCtx;
|
||||||
if (FAILED(MyD3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, D3D11_CREATE_DEVICE_FLAGS, &level, 1,
|
if (FAILED(MyD3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, D3D11_CREATE_DEVICE_FLAGS, &level, 1,
|
||||||
D3D11_SDK_VERSION, &tempDev, nullptr, &tempCtx)))
|
D3D11_SDK_VERSION, &tempDev, nullptr, &tempCtx)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create D3D11 device"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create D3D11 device"));
|
||||||
|
|
||||||
ComPtr<IDXGIDevice2> device;
|
ComPtr<IDXGIDevice2> device;
|
||||||
if (FAILED(tempDev.As<ID3D11Device1>(&m_3dCtx.m_ctx11.m_dev)) || !m_3dCtx.m_ctx11.m_dev ||
|
if (FAILED(tempDev.As<ID3D11Device1>(&m_3dCtx.m_ctx11.m_dev)) || !m_3dCtx.m_ctx11.m_dev ||
|
||||||
|
@ -176,11 +176,11 @@ public:
|
||||||
sampDesc.AddressW = D3D11_TEXTURE_ADDRESS_BORDER;
|
sampDesc.AddressW = D3D11_TEXTURE_ADDRESS_BORDER;
|
||||||
m_3dCtx.m_ctx11.m_dev->CreateSamplerState(&sampDesc, &m_3dCtx.m_ctx11.m_ss[1]);
|
m_3dCtx.m_ctx11.m_dev->CreateSamplerState(&sampDesc, &m_3dCtx.m_ctx11.m_ss[1]);
|
||||||
|
|
||||||
Log.report(logvisor::Info, fmt("initialized D3D11 renderer"));
|
Log.report(logvisor::Info, FMT_STRING("initialized D3D11 renderer"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.report(logvisor::Fatal, fmt("system doesn't support D3D11 or D3D12"));
|
Log.report(logvisor::Fatal, FMT_STRING("system doesn't support D3D11 or D3D12"));
|
||||||
}
|
}
|
||||||
|
|
||||||
EPlatformType getPlatformType() const override { return EPlatformType::UWP; }
|
EPlatformType getPlatformType() const override { return EPlatformType::UWP; }
|
||||||
|
|
|
@ -114,12 +114,12 @@ public:
|
||||||
|
|
||||||
HMODULE dxgilib = LoadLibraryW(L"dxgi.dll");
|
HMODULE dxgilib = LoadLibraryW(L"dxgi.dll");
|
||||||
if (!dxgilib)
|
if (!dxgilib)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to load dxgi.dll"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to load dxgi.dll"));
|
||||||
|
|
||||||
using CreateDXGIFactory1PROC = HRESULT(WINAPI*)(REFIID riid, _COM_Outptr_ void** ppFactory);
|
using CreateDXGIFactory1PROC = HRESULT(WINAPI*)(REFIID riid, _COM_Outptr_ void** ppFactory);
|
||||||
auto MyCreateDXGIFactory1 = (CreateDXGIFactory1PROC)GetProcAddress(dxgilib, "CreateDXGIFactory1");
|
auto MyCreateDXGIFactory1 = (CreateDXGIFactory1PROC)GetProcAddress(dxgilib, "CreateDXGIFactory1");
|
||||||
if (!MyCreateDXGIFactory1)
|
if (!MyCreateDXGIFactory1)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to find CreateDXGIFactory1 in DXGI.dll\n"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to find CreateDXGIFactory1 in DXGI.dll\n"));
|
||||||
|
|
||||||
bool noD3d = false;
|
bool noD3d = false;
|
||||||
#if BOO_HAS_VULKAN
|
#if BOO_HAS_VULKAN
|
||||||
|
@ -167,15 +167,15 @@ public:
|
||||||
d3d11lib = LoadLibraryW(L"D3D11.dll");
|
d3d11lib = LoadLibraryW(L"D3D11.dll");
|
||||||
if (d3d11lib) {
|
if (d3d11lib) {
|
||||||
if (!FindBestD3DCompile())
|
if (!FindBestD3DCompile())
|
||||||
Log.report(logvisor::Fatal, fmt("unable to find D3DCompile_[43-47].dll"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to find D3DCompile_[43-47].dll"));
|
||||||
if (!FindD3DPERF())
|
if (!FindD3DPERF())
|
||||||
Log.report(logvisor::Fatal, fmt("unable to find d3d9.dll"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to find d3d9.dll"));
|
||||||
|
|
||||||
/* Create device proc */
|
/* Create device proc */
|
||||||
PFN_D3D11_CREATE_DEVICE MyD3D11CreateDevice =
|
PFN_D3D11_CREATE_DEVICE MyD3D11CreateDevice =
|
||||||
(PFN_D3D11_CREATE_DEVICE)GetProcAddress(d3d11lib, "D3D11CreateDevice");
|
(PFN_D3D11_CREATE_DEVICE)GetProcAddress(d3d11lib, "D3D11CreateDevice");
|
||||||
if (!MyD3D11CreateDevice)
|
if (!MyD3D11CreateDevice)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to find D3D11CreateDevice in D3D11.dll"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to find D3D11CreateDevice in D3D11.dll"));
|
||||||
|
|
||||||
/* Create device */
|
/* Create device */
|
||||||
D3D_FEATURE_LEVEL level = D3D_FEATURE_LEVEL_11_0;
|
D3D_FEATURE_LEVEL level = D3D_FEATURE_LEVEL_11_0;
|
||||||
|
@ -183,7 +183,7 @@ public:
|
||||||
ComPtr<ID3D11DeviceContext> tempCtx;
|
ComPtr<ID3D11DeviceContext> tempCtx;
|
||||||
if (FAILED(MyD3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, D3D11_CREATE_DEVICE_FLAGS, &level, 1,
|
if (FAILED(MyD3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, D3D11_CREATE_DEVICE_FLAGS, &level, 1,
|
||||||
D3D11_SDK_VERSION, &tempDev, nullptr, &tempCtx)))
|
D3D11_SDK_VERSION, &tempDev, nullptr, &tempCtx)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create D3D11 device"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create D3D11 device"));
|
||||||
|
|
||||||
ComPtr<IDXGIDevice2> device;
|
ComPtr<IDXGIDevice2> device;
|
||||||
if (FAILED(tempDev.As<ID3D11Device1>(&m_3dCtx.m_ctx11.m_dev)) || !m_3dCtx.m_ctx11.m_dev ||
|
if (FAILED(tempDev.As<ID3D11Device1>(&m_3dCtx.m_ctx11.m_dev)) || !m_3dCtx.m_ctx11.m_dev ||
|
||||||
|
@ -234,7 +234,7 @@ public:
|
||||||
sampDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT;
|
sampDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT;
|
||||||
m_3dCtx.m_ctx11.m_dev->CreateSamplerState(&sampDesc, &m_3dCtx.m_ctx11.m_ss[4]);
|
m_3dCtx.m_ctx11.m_dev->CreateSamplerState(&sampDesc, &m_3dCtx.m_ctx11.m_ss[4]);
|
||||||
|
|
||||||
Log.report(logvisor::Info, fmt("initialized D3D11 renderer"));
|
Log.report(logvisor::Info, FMT_STRING("initialized D3D11 renderer"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,9 +252,9 @@ public:
|
||||||
/* Obtain DXGI Factory */
|
/* Obtain DXGI Factory */
|
||||||
HRESULT hr = MyCreateDXGIFactory1(__uuidof(IDXGIFactory1), &m_3dCtx.m_vulkanDxFactory);
|
HRESULT hr = MyCreateDXGIFactory1(__uuidof(IDXGIFactory1), &m_3dCtx.m_vulkanDxFactory);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create DXGI factory"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create DXGI factory"));
|
||||||
|
|
||||||
Log.report(logvisor::Info, fmt("initialized Vulkan renderer"));
|
Log.report(logvisor::Info, FMT_STRING("initialized Vulkan renderer"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,13 +269,13 @@ public:
|
||||||
/* Obtain DXGI Factory */
|
/* Obtain DXGI Factory */
|
||||||
HRESULT hr = MyCreateDXGIFactory1(__uuidof(IDXGIFactory1), &m_3dCtx.m_ctxOgl.m_dxFactory);
|
HRESULT hr = MyCreateDXGIFactory1(__uuidof(IDXGIFactory1), &m_3dCtx.m_ctxOgl.m_dxFactory);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create DXGI factory"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create DXGI factory"));
|
||||||
|
|
||||||
Log.report(logvisor::Info, fmt("initialized OpenGL renderer"));
|
Log.report(logvisor::Info, FMT_STRING("initialized OpenGL renderer"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.report(logvisor::Fatal, fmt("system doesn't support Vulkan, D3D11, or OpenGL"));
|
Log.report(logvisor::Fatal, FMT_STRING("system doesn't support Vulkan, D3D11, or OpenGL"));
|
||||||
}
|
}
|
||||||
|
|
||||||
EPlatformType getPlatformType() const override { return EPlatformType::Win32; }
|
EPlatformType getPlatformType() const override { return EPlatformType::Win32; }
|
||||||
|
@ -450,7 +450,7 @@ public:
|
||||||
if (GetCurrentThreadId() != g_mainThreadId) {
|
if (GetCurrentThreadId() != g_mainThreadId) {
|
||||||
std::unique_lock<std::mutex> lk(g_nwmt);
|
std::unique_lock<std::mutex> lk(g_nwmt);
|
||||||
if (!PostThreadMessageW(g_mainThreadId, WM_USER, WPARAM(&title), 0))
|
if (!PostThreadMessageW(g_mainThreadId, WM_USER, WPARAM(&title), 0))
|
||||||
Log.report(logvisor::Fatal, fmt("PostThreadMessage error"));
|
Log.report(logvisor::Fatal, FMT_STRING("PostThreadMessage error"));
|
||||||
g_nwcv.wait(lk);
|
g_nwcv.wait(lk);
|
||||||
std::shared_ptr<IWindow> ret = std::move(m_mwret);
|
std::shared_ptr<IWindow> ret = std::move(m_mwret);
|
||||||
m_mwret.reset();
|
m_mwret.reset();
|
||||||
|
|
|
@ -81,7 +81,7 @@ public:
|
||||||
HRESULT hr =
|
HRESULT hr =
|
||||||
b3dCtx.m_ctx12.m_dxFactory->CreateSwapChainForCoreWindow(cmdQueue, cw, &scDesc, nullptr, &m_swapChain);
|
b3dCtx.m_ctx12.m_dxFactory->CreateSwapChainForCoreWindow(cmdQueue, cw, &scDesc, nullptr, &m_swapChain);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create swap chain"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create swap chain"));
|
||||||
|
|
||||||
m_swapChain.As<IDXGISwapChain3>(&w.m_swapChain);
|
m_swapChain.As<IDXGISwapChain3>(&w.m_swapChain);
|
||||||
ComPtr<ID3D12Resource> fb;
|
ComPtr<ID3D12Resource> fb;
|
||||||
|
@ -92,13 +92,13 @@ public:
|
||||||
w.height = resDesc.Height;
|
w.height = resDesc.Height;
|
||||||
|
|
||||||
if (FAILED(m_swapChain->GetContainingOutput(&m_output)))
|
if (FAILED(m_swapChain->GetContainingOutput(&m_output)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to get DXGI output"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to get DXGI output"));
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (FAILED(b3dCtx.m_ctx11.m_dxFactory->CreateSwapChainForCoreWindow(b3dCtx.m_ctx11.m_dev.Get(), cw, &scDesc,
|
if (FAILED(b3dCtx.m_ctx11.m_dxFactory->CreateSwapChainForCoreWindow(b3dCtx.m_ctx11.m_dev.Get(), cw, &scDesc,
|
||||||
nullptr, &m_swapChain)))
|
nullptr, &m_swapChain)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create swap chain"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create swap chain"));
|
||||||
|
|
||||||
auto insIt = b3dCtx.m_ctx11.m_windows.emplace(std::make_pair(parentWindow, D3D11Context::Window()));
|
auto insIt = b3dCtx.m_ctx11.m_windows.emplace(std::make_pair(parentWindow, D3D11Context::Window()));
|
||||||
D3D11Context::Window& w = insIt.first->second;
|
D3D11Context::Window& w = insIt.first->second;
|
||||||
|
@ -114,7 +114,7 @@ public:
|
||||||
m_commandQueue = _NewD3D11CommandQueue(&b3dCtx.m_ctx11, &insIt.first->second, this);
|
m_commandQueue = _NewD3D11CommandQueue(&b3dCtx.m_ctx11, &insIt.first->second, this);
|
||||||
|
|
||||||
if (FAILED(m_swapChain->GetContainingOutput(&m_output)))
|
if (FAILED(m_swapChain->GetContainingOutput(&m_output)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to get DXGI output"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to get DXGI output"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ public:
|
||||||
scDesc.Format = b3dCtx.m_ctx11.m_fbFormat;
|
scDesc.Format = b3dCtx.m_ctx11.m_fbFormat;
|
||||||
if (FAILED(b3dCtx.m_ctx11.m_dxFactory->CreateSwapChainForHwnd(b3dCtx.m_ctx11.m_dev.Get(), hwnd, &scDesc, nullptr,
|
if (FAILED(b3dCtx.m_ctx11.m_dxFactory->CreateSwapChainForHwnd(b3dCtx.m_ctx11.m_dev.Get(), hwnd, &scDesc, nullptr,
|
||||||
nullptr, &m_swapChain)))
|
nullptr, &m_swapChain)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create swap chain"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create swap chain"));
|
||||||
b3dCtx.m_ctx11.m_dxFactory->MakeWindowAssociation(hwnd, DXGI_MWA_NO_ALT_ENTER);
|
b3dCtx.m_ctx11.m_dxFactory->MakeWindowAssociation(hwnd, DXGI_MWA_NO_ALT_ENTER);
|
||||||
|
|
||||||
auto insIt = b3dCtx.m_ctx11.m_windows.emplace(std::make_pair(parentWindow, D3D11Context::Window()));
|
auto insIt = b3dCtx.m_ctx11.m_windows.emplace(std::make_pair(parentWindow, D3D11Context::Window()));
|
||||||
|
@ -88,7 +88,7 @@ public:
|
||||||
m_commandQueue->startRenderer();
|
m_commandQueue->startRenderer();
|
||||||
|
|
||||||
if (FAILED(m_swapChain->GetContainingOutput(&m_output)))
|
if (FAILED(m_swapChain->GetContainingOutput(&m_output)))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to get DXGI output"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to get DXGI output"));
|
||||||
}
|
}
|
||||||
|
|
||||||
~GraphicsContextWin32D3D() override { m_3dCtx.m_ctx11.m_windows.erase(m_parentWindow); }
|
~GraphicsContextWin32D3D() override { m_3dCtx.m_ctx11.m_windows.erase(m_parentWindow); }
|
||||||
|
@ -154,14 +154,14 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_output)
|
if (!m_output)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to find window's IDXGIOutput"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to find window's IDXGIOutput"));
|
||||||
|
|
||||||
auto insIt = b3dCtx.m_ctxOgl.m_windows.emplace(std::make_pair(parentWindow, OGLContext::Window()));
|
auto insIt = b3dCtx.m_ctxOgl.m_windows.emplace(std::make_pair(parentWindow, OGLContext::Window()));
|
||||||
OGLContext::Window& w = insIt.first->second;
|
OGLContext::Window& w = insIt.first->second;
|
||||||
w.m_hwnd = hwnd;
|
w.m_hwnd = hwnd;
|
||||||
w.m_deviceContext = GetDC(hwnd);
|
w.m_deviceContext = GetDC(hwnd);
|
||||||
if (!w.m_deviceContext)
|
if (!w.m_deviceContext)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create window's device context"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create window's device context"));
|
||||||
|
|
||||||
if (!m_3dCtx.m_ctxOgl.m_lastContext) {
|
if (!m_3dCtx.m_ctxOgl.m_lastContext) {
|
||||||
PIXELFORMATDESCRIPTOR pfd = {sizeof(PIXELFORMATDESCRIPTOR),
|
PIXELFORMATDESCRIPTOR pfd = {sizeof(PIXELFORMATDESCRIPTOR),
|
||||||
|
@ -198,7 +198,7 @@ public:
|
||||||
HGLRC tmpCtx = wglCreateContext(w.m_deviceContext);
|
HGLRC tmpCtx = wglCreateContext(w.m_deviceContext);
|
||||||
wglMakeCurrent(w.m_deviceContext, tmpCtx);
|
wglMakeCurrent(w.m_deviceContext, tmpCtx);
|
||||||
if (glewInit() != GLEW_OK)
|
if (glewInit() != GLEW_OK)
|
||||||
Log.report(logvisor::Fatal, fmt("glewInit failed"));
|
Log.report(logvisor::Fatal, FMT_STRING("glewInit failed"));
|
||||||
wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB");
|
wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB");
|
||||||
wglChoosePixelFormatARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress("wglChoosePixelFormatARB");
|
wglChoosePixelFormatARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress("wglChoosePixelFormatARB");
|
||||||
wglMakeCurrent(w.m_deviceContext, nullptr);
|
wglMakeCurrent(w.m_deviceContext, nullptr);
|
||||||
|
@ -241,10 +241,10 @@ public:
|
||||||
// w.m_mainContext = wglCreateContext(w.m_deviceContext);
|
// w.m_mainContext = wglCreateContext(w.m_deviceContext);
|
||||||
w.m_mainContext = wglCreateContextAttribsARB(w.m_deviceContext, 0, ContextAttribs);
|
w.m_mainContext = wglCreateContextAttribsARB(w.m_deviceContext, 0, ContextAttribs);
|
||||||
if (!w.m_mainContext)
|
if (!w.m_mainContext)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to create window's main context"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to create window's main context"));
|
||||||
if (m_3dCtx.m_ctxOgl.m_lastContext)
|
if (m_3dCtx.m_ctxOgl.m_lastContext)
|
||||||
if (!wglShareLists(w.m_mainContext, m_3dCtx.m_ctxOgl.m_lastContext))
|
if (!wglShareLists(w.m_mainContext, m_3dCtx.m_ctxOgl.m_lastContext))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to share contexts"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to share contexts"));
|
||||||
m_3dCtx.m_ctxOgl.m_lastContext = w.m_mainContext;
|
m_3dCtx.m_ctxOgl.m_lastContext = w.m_mainContext;
|
||||||
|
|
||||||
m_dataFactory = _NewGLDataFactory(this, &b3dCtx.m_ctxOgl.m_glCtx);
|
m_dataFactory = _NewGLDataFactory(this, &b3dCtx.m_ctxOgl.m_glCtx);
|
||||||
|
@ -271,13 +271,13 @@ public:
|
||||||
void makeCurrent() override {
|
void makeCurrent() override {
|
||||||
OGLContext::Window& w = m_3dCtx.m_ctxOgl.m_windows[m_parentWindow];
|
OGLContext::Window& w = m_3dCtx.m_ctxOgl.m_windows[m_parentWindow];
|
||||||
// if (!wglMakeCurrent(w.m_deviceContext, w.m_mainContext))
|
// if (!wglMakeCurrent(w.m_deviceContext, w.m_mainContext))
|
||||||
// Log.report(logvisor::Fatal, fmt("unable to make WGL context current"));
|
// Log.report(logvisor::Fatal, FMT_STRING("unable to make WGL context current"));
|
||||||
|
|
||||||
w.m_renderContext = wglCreateContextAttribsARB(w.m_deviceContext, w.m_mainContext, ContextAttribs);
|
w.m_renderContext = wglCreateContextAttribsARB(w.m_deviceContext, w.m_mainContext, ContextAttribs);
|
||||||
if (!w.m_renderContext)
|
if (!w.m_renderContext)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make new WGL context"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make new WGL context"));
|
||||||
if (!wglMakeCurrent(w.m_deviceContext, w.m_renderContext))
|
if (!wglMakeCurrent(w.m_deviceContext, w.m_renderContext))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make WGL context current"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make WGL context current"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void postInit() override {
|
void postInit() override {
|
||||||
|
@ -287,12 +287,12 @@ public:
|
||||||
// wglGetProcAddress("wglCreateContextAttribsARB");
|
// wglGetProcAddress("wglCreateContextAttribsARB");
|
||||||
// w.m_renderContext = wglCreateContextAttribsARB(w.m_deviceContext, w.m_mainContext, ContextAttribs);
|
// w.m_renderContext = wglCreateContextAttribsARB(w.m_deviceContext, w.m_mainContext, ContextAttribs);
|
||||||
// if (!w.m_renderContext)
|
// if (!w.m_renderContext)
|
||||||
// Log.report(logvisor::Fatal, fmt("unable to make new WGL context"));
|
// Log.report(logvisor::Fatal, FMT_STRING("unable to make new WGL context"));
|
||||||
// if (!wglMakeCurrent(w.m_deviceContext, w.m_renderContext))
|
// if (!wglMakeCurrent(w.m_deviceContext, w.m_renderContext))
|
||||||
// Log.report(logvisor::Fatal, fmt("unable to make WGL context current"));
|
// Log.report(logvisor::Fatal, FMT_STRING("unable to make WGL context current"));
|
||||||
|
|
||||||
if (!WGLEW_EXT_swap_control)
|
if (!WGLEW_EXT_swap_control)
|
||||||
Log.report(logvisor::Fatal, fmt("WGL_EXT_swap_control not available"));
|
Log.report(logvisor::Fatal, FMT_STRING("WGL_EXT_swap_control not available"));
|
||||||
wglSwapIntervalEXT(1);
|
wglSwapIntervalEXT(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,10 +312,10 @@ public:
|
||||||
if (!m_mainCtx) {
|
if (!m_mainCtx) {
|
||||||
m_mainCtx = wglCreateContextAttribsARB(w.m_deviceContext, w.m_mainContext, ContextAttribs);
|
m_mainCtx = wglCreateContextAttribsARB(w.m_deviceContext, w.m_mainContext, ContextAttribs);
|
||||||
if (!m_mainCtx)
|
if (!m_mainCtx)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make main WGL context"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make main WGL context"));
|
||||||
}
|
}
|
||||||
if (!wglMakeCurrent(w.m_deviceContext, m_mainCtx))
|
if (!wglMakeCurrent(w.m_deviceContext, m_mainCtx))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make main WGL context current"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make main WGL context current"));
|
||||||
return m_dataFactory.get();
|
return m_dataFactory.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -326,10 +326,10 @@ public:
|
||||||
if (!m_loadCtx) {
|
if (!m_loadCtx) {
|
||||||
m_loadCtx = wglCreateContextAttribsARB(w.m_deviceContext, w.m_mainContext, ContextAttribs);
|
m_loadCtx = wglCreateContextAttribsARB(w.m_deviceContext, w.m_mainContext, ContextAttribs);
|
||||||
if (!m_loadCtx)
|
if (!m_loadCtx)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make load WGL context"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make load WGL context"));
|
||||||
}
|
}
|
||||||
if (!wglMakeCurrent(w.m_deviceContext, m_loadCtx))
|
if (!wglMakeCurrent(w.m_deviceContext, m_loadCtx))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make load WGL context current"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make load WGL context current"));
|
||||||
return m_dataFactory.get();
|
return m_dataFactory.get();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -354,7 +354,7 @@ struct GraphicsContextWin32Vulkan : GraphicsContextWin32 {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.report(logvisor::Fatal, fmt("{}\n"), res);
|
Log.report(logvisor::Fatal, FMT_STRING("{}\n"), res);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -388,7 +388,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_output)
|
if (!m_output)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to find window's IDXGIOutput"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to find window's IDXGIOutput"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroy() {
|
void destroy() {
|
||||||
|
@ -458,18 +458,18 @@ public:
|
||||||
/* Generate error if could not find a queue that supports both a graphics
|
/* Generate error if could not find a queue that supports both a graphics
|
||||||
* and present */
|
* and present */
|
||||||
if (m_ctx->m_graphicsQueueFamilyIndex == UINT32_MAX)
|
if (m_ctx->m_graphicsQueueFamilyIndex == UINT32_MAX)
|
||||||
Log.report(logvisor::Fatal, fmt("Could not find a queue that supports both graphics and present"));
|
Log.report(logvisor::Fatal, FMT_STRING("Could not find a queue that supports both graphics and present"));
|
||||||
|
|
||||||
m_ctx->initDevice();
|
m_ctx->initDevice();
|
||||||
} else {
|
} else {
|
||||||
/* Subsequent window, verify present */
|
/* Subsequent window, verify present */
|
||||||
if (supportsPresent[m_ctx->m_graphicsQueueFamilyIndex] == VK_FALSE)
|
if (supportsPresent[m_ctx->m_graphicsQueueFamilyIndex] == VK_FALSE)
|
||||||
Log.report(logvisor::Fatal, fmt("subsequent surface doesn't support present"));
|
Log.report(logvisor::Fatal, FMT_STRING("subsequent surface doesn't support present"));
|
||||||
}
|
}
|
||||||
free(supportsPresent);
|
free(supportsPresent);
|
||||||
|
|
||||||
if (!vk::GetPhysicalDeviceWin32PresentationSupportKHR(m_ctx->m_gpus[0], m_ctx->m_graphicsQueueFamilyIndex)) {
|
if (!vk::GetPhysicalDeviceWin32PresentationSupportKHR(m_ctx->m_gpus[0], m_ctx->m_graphicsQueueFamilyIndex)) {
|
||||||
Log.report(logvisor::Fatal, fmt("Win32 doesn't support vulkan present"));
|
Log.report(logvisor::Fatal, FMT_STRING("Win32 doesn't support vulkan present"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,10 +502,10 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
Log.report(logvisor::Fatal, fmt("no surface formats available for Vulkan swapchain"));
|
Log.report(logvisor::Fatal, FMT_STRING("no surface formats available for Vulkan swapchain"));
|
||||||
|
|
||||||
if (m_format == VK_FORMAT_UNDEFINED)
|
if (m_format == VK_FORMAT_UNDEFINED)
|
||||||
Log.report(logvisor::Fatal, fmt("no UNORM formats available for Vulkan swapchain"));
|
Log.report(logvisor::Fatal, FMT_STRING("no UNORM formats available for Vulkan swapchain"));
|
||||||
|
|
||||||
m_ctx->initSwapChain(*m_windowCtx, m_surface, m_format, m_colorspace);
|
m_ctx->initSwapChain(*m_windowCtx, m_surface, m_format, m_colorspace);
|
||||||
|
|
||||||
|
@ -730,7 +730,7 @@ static HGLOBAL MakeUnicodeCRLF(const char* data, size_t sz) {
|
||||||
int32_t ch;
|
int32_t ch;
|
||||||
int chSz = utf8proc_iterate(reinterpret_cast<const uint8_t*>(data + i), -1, &ch);
|
int chSz = utf8proc_iterate(reinterpret_cast<const uint8_t*>(data + i), -1, &ch);
|
||||||
if (chSz < 0)
|
if (chSz < 0)
|
||||||
Log.report(logvisor::Fatal, fmt("invalid UTF-8 char"));
|
Log.report(logvisor::Fatal, FMT_STRING("invalid UTF-8 char"));
|
||||||
if (ch <= 0xffff) {
|
if (ch <= 0xffff) {
|
||||||
if (ch == '\n' && lastCh != '\r')
|
if (ch == '\n' && lastCh != '\r')
|
||||||
retSz += 4;
|
retSz += 4;
|
||||||
|
@ -989,7 +989,7 @@ public:
|
||||||
void _immSetOpenStatus(bool open) {
|
void _immSetOpenStatus(bool open) {
|
||||||
if (GetCurrentThreadId() != g_mainThreadId) {
|
if (GetCurrentThreadId() != g_mainThreadId) {
|
||||||
if (!PostThreadMessageW(g_mainThreadId, WM_USER + 3, WPARAM(m_imc), LPARAM(open)))
|
if (!PostThreadMessageW(g_mainThreadId, WM_USER + 3, WPARAM(m_imc), LPARAM(open)))
|
||||||
Log.report(logvisor::Fatal, fmt("PostThreadMessage error"));
|
Log.report(logvisor::Fatal, FMT_STRING("PostThreadMessage error"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ImmSetOpenStatus(m_imc, open);
|
ImmSetOpenStatus(m_imc, open);
|
||||||
|
@ -1004,7 +1004,7 @@ public:
|
||||||
|
|
||||||
if (GetCurrentThreadId() != g_mainThreadId) {
|
if (GetCurrentThreadId() != g_mainThreadId) {
|
||||||
if (!PostThreadMessageW(g_mainThreadId, WM_USER + 4, WPARAM(m_imc), LPARAM(&m_cForm)))
|
if (!PostThreadMessageW(g_mainThreadId, WM_USER + 4, WPARAM(m_imc), LPARAM(&m_cForm)))
|
||||||
Log.report(logvisor::Fatal, fmt("PostThreadMessage error"));
|
Log.report(logvisor::Fatal, FMT_STRING("PostThreadMessage error"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ImmSetCompositionWindow(m_imc, &m_cForm);
|
ImmSetCompositionWindow(m_imc, &m_cForm);
|
||||||
|
|
|
@ -32,13 +32,13 @@ class ScreenSaverInhibitor {
|
||||||
DBusError err = DBUS_ERROR_INIT;
|
DBusError err = DBUS_ERROR_INIT;
|
||||||
if ((msg = dbus_pending_call_steal_reply(m_pending)) &&
|
if ((msg = dbus_pending_call_steal_reply(m_pending)) &&
|
||||||
dbus_message_get_args(msg, &err, DBUS_TYPE_UINT32, &m_cookie, DBUS_TYPE_INVALID)) {
|
dbus_message_get_args(msg, &err, DBUS_TYPE_UINT32, &m_cookie, DBUS_TYPE_INVALID)) {
|
||||||
Log.report(logvisor::Info, fmt("Screen saver inhibited"));
|
Log.report(logvisor::Info, FMT_STRING("Screen saver inhibited"));
|
||||||
} else {
|
} else {
|
||||||
/* Fallback to xdg-screensaver */
|
/* Fallback to xdg-screensaver */
|
||||||
dbus_error_free(&err);
|
dbus_error_free(&err);
|
||||||
Log.report(logvisor::Info, fmt("Falling back to xdg-screensaver inhibit"));
|
Log.report(logvisor::Info, FMT_STRING("Falling back to xdg-screensaver inhibit"));
|
||||||
if (!fork()) {
|
if (!fork()) {
|
||||||
execlp("xdg-screensaver", "xdg-screensaver", "suspend", fmt::format(fmt("0x{:X}"), m_wid).c_str(), nullptr);
|
execlp("xdg-screensaver", "xdg-screensaver", "suspend", fmt::format(FMT_STRING("0x{:X}"), m_wid).c_str(), nullptr);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,17 +99,17 @@ DBusConnection* RegisterDBus(const char* appName, bool& isFirst) {
|
||||||
/* connect to the bus and check for errors */
|
/* connect to the bus and check for errors */
|
||||||
DBusConnection* conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
|
DBusConnection* conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
|
||||||
if (dbus_error_is_set(&err)) {
|
if (dbus_error_is_set(&err)) {
|
||||||
fmt::print(stderr, fmt("DBus Connection Error ({})\n"), err.message);
|
fmt::print(stderr, FMT_STRING("DBus Connection Error ({})\n"), err.message);
|
||||||
dbus_error_free(&err);
|
dbus_error_free(&err);
|
||||||
}
|
}
|
||||||
if (conn == nullptr)
|
if (conn == nullptr)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
/* request our name on the bus and check for errors */
|
/* request our name on the bus and check for errors */
|
||||||
int ret = dbus_bus_request_name(conn, fmt::format(fmt("boo.{}.unique"), appName).c_str(),
|
int ret = dbus_bus_request_name(conn, fmt::format(FMT_STRING("boo.{}.unique"), appName).c_str(),
|
||||||
DBUS_NAME_FLAG_DO_NOT_QUEUE, &err);
|
DBUS_NAME_FLAG_DO_NOT_QUEUE, &err);
|
||||||
if (dbus_error_is_set(&err)) {
|
if (dbus_error_is_set(&err)) {
|
||||||
fmt::print(stderr, fmt("DBus Name Error ({})\n"), err.message);
|
fmt::print(stderr, FMT_STRING("DBus Name Error ({})\n"), err.message);
|
||||||
dbus_error_free(&err);
|
dbus_error_free(&err);
|
||||||
dbus_connection_close(conn);
|
dbus_connection_close(conn);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
|
@ -237,10 +237,10 @@ public:
|
||||||
loadVk();
|
loadVk();
|
||||||
|
|
||||||
if (m_getVkProc)
|
if (m_getVkProc)
|
||||||
Log.report(logvisor::Info, fmt("using Vulkan renderer"));
|
Log.report(logvisor::Info, FMT_STRING("using Vulkan renderer"));
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
Log.report(logvisor::Info, fmt("using OpenGL renderer"));
|
Log.report(logvisor::Info, FMT_STRING("using OpenGL renderer"));
|
||||||
|
|
||||||
#ifndef BOO_MSAN
|
#ifndef BOO_MSAN
|
||||||
/* DBus single instance registration */
|
/* DBus single instance registration */
|
||||||
|
@ -280,7 +280,7 @@ public:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!XInitThreads()) {
|
if (!XInitThreads()) {
|
||||||
Log.report(logvisor::Fatal, fmt("X doesn't support multithreading"));
|
Log.report(logvisor::Fatal, FMT_STRING("X doesn't support multithreading"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +290,7 @@ public:
|
||||||
/* Open Xlib Display */
|
/* Open Xlib Display */
|
||||||
m_xDisp = XOpenDisplay(0);
|
m_xDisp = XOpenDisplay(0);
|
||||||
if (!m_xDisp) {
|
if (!m_xDisp) {
|
||||||
Log.report(logvisor::Fatal, fmt("Can't open X display"));
|
Log.report(logvisor::Fatal, FMT_STRING("Can't open X display"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -298,18 +298,18 @@ public:
|
||||||
/* Cast Display to XCB connection for vulkan */
|
/* Cast Display to XCB connection for vulkan */
|
||||||
m_xcbConn = XGetXCBConnection(m_xDisp);
|
m_xcbConn = XGetXCBConnection(m_xDisp);
|
||||||
if (!m_xcbConn) {
|
if (!m_xcbConn) {
|
||||||
Log.report(logvisor::Fatal, fmt("Can't cast Display to XCB connection for Vulkan"));
|
Log.report(logvisor::Fatal, FMT_STRING("Can't cast Display to XCB connection for Vulkan"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Configure locale */
|
/* Configure locale */
|
||||||
if (!XSupportsLocale()) {
|
if (!XSupportsLocale()) {
|
||||||
Log.report(logvisor::Fatal, fmt("X does not support locale {}."), setlocale(LC_ALL, nullptr));
|
Log.report(logvisor::Fatal, FMT_STRING("X does not support locale {}."), setlocale(LC_ALL, nullptr));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (XSetLocaleModifiers("") == nullptr)
|
if (XSetLocaleModifiers("") == nullptr)
|
||||||
Log.report(logvisor::Warning, fmt("Cannot set locale modifiers."));
|
Log.report(logvisor::Warning, FMT_STRING("Cannot set locale modifiers."));
|
||||||
|
|
||||||
if ((m_xIM = XOpenIM(m_xDisp, nullptr, nullptr, nullptr))) {
|
if ((m_xIM = XOpenIM(m_xDisp, nullptr, nullptr, nullptr))) {
|
||||||
char** missing_charsets;
|
char** missing_charsets;
|
||||||
|
@ -338,7 +338,7 @@ public:
|
||||||
}
|
}
|
||||||
/* if we couldn't support any of them, print an error and exit */
|
/* if we couldn't support any of them, print an error and exit */
|
||||||
if (m_bestStyle == 0) {
|
if (m_bestStyle == 0) {
|
||||||
Log.report(logvisor::Fatal, fmt("interaction style not supported."));
|
Log.report(logvisor::Fatal, FMT_STRING("interaction style not supported."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
XFree(im_supported_styles);
|
XFree(im_supported_styles);
|
||||||
|
|
|
@ -305,7 +305,7 @@ public:
|
||||||
int numFBConfigs = 0;
|
int numFBConfigs = 0;
|
||||||
fbConfigs = glXGetFBConfigs(display, defaultScreen, &numFBConfigs);
|
fbConfigs = glXGetFBConfigs(display, defaultScreen, &numFBConfigs);
|
||||||
if (!fbConfigs || numFBConfigs == 0) {
|
if (!fbConfigs || numFBConfigs == 0) {
|
||||||
Log.report(logvisor::Fatal, fmt("glXGetFBConfigs failed"));
|
Log.report(logvisor::Fatal, FMT_STRING("glXGetFBConfigs failed"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,7 +351,7 @@ public:
|
||||||
XFree(fbConfigs);
|
XFree(fbConfigs);
|
||||||
|
|
||||||
if (!m_fbconfig) {
|
if (!m_fbconfig) {
|
||||||
Log.report(logvisor::Fatal, fmt("unable to find suitable pixel format"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to find suitable pixel format"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -394,7 +394,7 @@ public:
|
||||||
glXCreateContextAttribsARB =
|
glXCreateContextAttribsARB =
|
||||||
(glXCreateContextAttribsARBProc)glXGetProcAddressARB((const GLubyte*)"glXCreateContextAttribsARB");
|
(glXCreateContextAttribsARBProc)glXGetProcAddressARB((const GLubyte*)"glXCreateContextAttribsARB");
|
||||||
if (!glXCreateContextAttribsARB)
|
if (!glXCreateContextAttribsARB)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to resolve glXCreateContextAttribsARB"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to resolve glXCreateContextAttribsARB"));
|
||||||
}
|
}
|
||||||
|
|
||||||
s_glxError = false;
|
s_glxError = false;
|
||||||
|
@ -406,16 +406,16 @@ public:
|
||||||
}
|
}
|
||||||
XSetErrorHandler(oldHandler);
|
XSetErrorHandler(oldHandler);
|
||||||
if (!m_glxCtx)
|
if (!m_glxCtx)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make new GLX context"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make new GLX context"));
|
||||||
m_glxWindow = glXCreateWindow(m_xDisp, m_fbconfig, m_parentWindow->getPlatformHandle(), nullptr);
|
m_glxWindow = glXCreateWindow(m_xDisp, m_fbconfig, m_parentWindow->getPlatformHandle(), nullptr);
|
||||||
if (!m_glxWindow)
|
if (!m_glxWindow)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make new GLX window"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make new GLX window"));
|
||||||
_XlibUpdateLastGlxCtx(m_glxCtx);
|
_XlibUpdateLastGlxCtx(m_glxCtx);
|
||||||
|
|
||||||
if (!glXMakeCurrent(m_xDisp, DefaultRootWindow(m_xDisp), m_glxCtx))
|
if (!glXMakeCurrent(m_xDisp, DefaultRootWindow(m_xDisp), m_glxCtx))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make GLX context current"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make GLX context current"));
|
||||||
if (glewInit() != GLEW_OK)
|
if (glewInit() != GLEW_OK)
|
||||||
Log.report(logvisor::Fatal, fmt("glewInit failed"));
|
Log.report(logvisor::Fatal, FMT_STRING("glewInit failed"));
|
||||||
glXMakeCurrent(m_xDisp, 0, 0);
|
glXMakeCurrent(m_xDisp, 0, 0);
|
||||||
|
|
||||||
XUnlockDisplay(m_xDisp);
|
XUnlockDisplay(m_xDisp);
|
||||||
|
@ -429,7 +429,7 @@ public:
|
||||||
void makeCurrent() override {
|
void makeCurrent() override {
|
||||||
XLockDisplay(m_xDisp);
|
XLockDisplay(m_xDisp);
|
||||||
if (!glXMakeContextCurrent(m_xDisp, m_glxWindow, m_glxWindow, m_glxCtx))
|
if (!glXMakeContextCurrent(m_xDisp, m_glxWindow, m_glxWindow, m_glxCtx))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make GLX context current"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make GLX context current"));
|
||||||
XUnlockDisplay(m_xDisp);
|
XUnlockDisplay(m_xDisp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -452,10 +452,10 @@ public:
|
||||||
m_mainCtx = glXCreateContextAttribsARB(m_xDisp, m_fbconfig, m_glxCtx, true, ContextAttribList[m_attribIdx]);
|
m_mainCtx = glXCreateContextAttribsARB(m_xDisp, m_fbconfig, m_glxCtx, true, ContextAttribList[m_attribIdx]);
|
||||||
XSetErrorHandler(oldHandler);
|
XSetErrorHandler(oldHandler);
|
||||||
if (!m_mainCtx)
|
if (!m_mainCtx)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make main GLX context"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make main GLX context"));
|
||||||
}
|
}
|
||||||
if (!glXMakeContextCurrent(m_xDisp, m_glxWindow, m_glxWindow, m_mainCtx))
|
if (!glXMakeContextCurrent(m_xDisp, m_glxWindow, m_glxWindow, m_mainCtx))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make main GLX context current"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make main GLX context current"));
|
||||||
XUnlockDisplay(m_xDisp);
|
XUnlockDisplay(m_xDisp);
|
||||||
return getDataFactory();
|
return getDataFactory();
|
||||||
}
|
}
|
||||||
|
@ -468,10 +468,10 @@ public:
|
||||||
m_loadCtx = glXCreateContextAttribsARB(m_xDisp, m_fbconfig, m_glxCtx, true, ContextAttribList[m_attribIdx]);
|
m_loadCtx = glXCreateContextAttribsARB(m_xDisp, m_fbconfig, m_glxCtx, true, ContextAttribList[m_attribIdx]);
|
||||||
XSetErrorHandler(oldHandler);
|
XSetErrorHandler(oldHandler);
|
||||||
if (!m_loadCtx)
|
if (!m_loadCtx)
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make load GLX context"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make load GLX context"));
|
||||||
}
|
}
|
||||||
if (!glXMakeContextCurrent(m_xDisp, m_glxWindow, m_glxWindow, m_loadCtx))
|
if (!glXMakeContextCurrent(m_xDisp, m_glxWindow, m_glxWindow, m_loadCtx))
|
||||||
Log.report(logvisor::Fatal, fmt("unable to make load GLX context current"));
|
Log.report(logvisor::Fatal, FMT_STRING("unable to make load GLX context current"));
|
||||||
XUnlockDisplay(m_xDisp);
|
XUnlockDisplay(m_xDisp);
|
||||||
return getDataFactory();
|
return getDataFactory();
|
||||||
}
|
}
|
||||||
|
@ -495,7 +495,7 @@ struct GraphicsContextXlibVulkan : GraphicsContextXlib {
|
||||||
|
|
||||||
static void ThrowIfFailed(VkResult res) {
|
static void ThrowIfFailed(VkResult res) {
|
||||||
if (res != VK_SUCCESS)
|
if (res != VK_SUCCESS)
|
||||||
Log.report(logvisor::Fatal, fmt("{}\n"), res);
|
Log.report(logvisor::Fatal, FMT_STRING("{}\n"), res);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -579,19 +579,19 @@ public:
|
||||||
/* Generate error if could not find a queue that supports both a graphics
|
/* Generate error if could not find a queue that supports both a graphics
|
||||||
* and present */
|
* and present */
|
||||||
if (m_ctx->m_graphicsQueueFamilyIndex == UINT32_MAX)
|
if (m_ctx->m_graphicsQueueFamilyIndex == UINT32_MAX)
|
||||||
Log.report(logvisor::Fatal, fmt("Could not find a queue that supports both graphics and present"));
|
Log.report(logvisor::Fatal, FMT_STRING("Could not find a queue that supports both graphics and present"));
|
||||||
|
|
||||||
m_ctx->initDevice();
|
m_ctx->initDevice();
|
||||||
} else {
|
} else {
|
||||||
/* Subsequent window, verify present */
|
/* Subsequent window, verify present */
|
||||||
if (supportsPresent[m_ctx->m_graphicsQueueFamilyIndex] == VK_FALSE)
|
if (supportsPresent[m_ctx->m_graphicsQueueFamilyIndex] == VK_FALSE)
|
||||||
Log.report(logvisor::Fatal, fmt("subsequent surface doesn't support present"));
|
Log.report(logvisor::Fatal, FMT_STRING("subsequent surface doesn't support present"));
|
||||||
}
|
}
|
||||||
free(supportsPresent);
|
free(supportsPresent);
|
||||||
|
|
||||||
if (!vk::GetPhysicalDeviceXcbPresentationSupportKHR(m_ctx->m_gpus[0], m_ctx->m_graphicsQueueFamilyIndex, m_xcbConn,
|
if (!vk::GetPhysicalDeviceXcbPresentationSupportKHR(m_ctx->m_gpus[0], m_ctx->m_graphicsQueueFamilyIndex, m_xcbConn,
|
||||||
m_visualid)) {
|
m_visualid)) {
|
||||||
Log.report(logvisor::Fatal, fmt("XCB visual doesn't support vulkan present"));
|
Log.report(logvisor::Fatal, FMT_STRING("XCB visual doesn't support vulkan present"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -625,10 +625,10 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
Log.report(logvisor::Fatal, fmt("no surface formats available for Vulkan swapchain"));
|
Log.report(logvisor::Fatal, FMT_STRING("no surface formats available for Vulkan swapchain"));
|
||||||
|
|
||||||
if (m_format == VK_FORMAT_UNDEFINED)
|
if (m_format == VK_FORMAT_UNDEFINED)
|
||||||
Log.report(logvisor::Fatal, fmt("no UNORM formats available for Vulkan swapchain"));
|
Log.report(logvisor::Fatal, FMT_STRING("no UNORM formats available for Vulkan swapchain"));
|
||||||
|
|
||||||
m_ctx->initSwapChain(*m_windowCtx, m_surface, m_format, m_colorspace);
|
m_ctx->initSwapChain(*m_windowCtx, m_surface, m_format, m_colorspace);
|
||||||
|
|
||||||
|
@ -734,7 +734,7 @@ public:
|
||||||
m_gfxCtx.reset(new GraphicsContextXlibGLX(IGraphicsContext::EGraphicsAPI::OpenGL3_3, this, display,
|
m_gfxCtx.reset(new GraphicsContextXlibGLX(IGraphicsContext::EGraphicsAPI::OpenGL3_3, this, display,
|
||||||
defaultScreen, lastCtx, m_visualId, glCtx));
|
defaultScreen, lastCtx, m_visualId, glCtx));
|
||||||
m_openGL = true;
|
m_openGL = true;
|
||||||
Log.report(logvisor::Warning, fmt("OPENGL HAS BEEN DEPRECATED, IT IS HIGHLY RECOMMENDED TO BUILD AND USE VULKAN INSTEAD"));
|
Log.report(logvisor::Warning, FMT_STRING("OPENGL HAS BEEN DEPRECATED, IT IS HIGHLY RECOMMENDED TO BUILD AND USE VULKAN INSTEAD"));
|
||||||
}
|
}
|
||||||
|
|
||||||
XVisualInfo visTemplate;
|
XVisualInfo visTemplate;
|
||||||
|
@ -1182,13 +1182,13 @@ public:
|
||||||
|
|
||||||
if (XGetWindowProperty(m_xDisp, m_windowId, S_ATOMS->m_clipdata, 0, 32, false, AnyPropertyType, &type,
|
if (XGetWindowProperty(m_xDisp, m_windowId, S_ATOMS->m_clipdata, 0, 32, false, AnyPropertyType, &type,
|
||||||
&format, &nitems, &rem, &data)) {
|
&format, &nitems, &rem, &data)) {
|
||||||
Log.report(logvisor::Fatal, fmt("Clipboard allocation failed"));
|
Log.report(logvisor::Fatal, FMT_STRING("Clipboard allocation failed"));
|
||||||
XUnlockDisplay(m_xDisp);
|
XUnlockDisplay(m_xDisp);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rem != 0) {
|
if (rem != 0) {
|
||||||
Log.report(logvisor::Fatal, fmt("partial clipboard read"));
|
Log.report(logvisor::Fatal, FMT_STRING("partial clipboard read"));
|
||||||
XUnlockDisplay(m_xDisp);
|
XUnlockDisplay(m_xDisp);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
@ -1606,7 +1606,7 @@ public:
|
||||||
getWindowFrame(m_wrect.location[0], m_wrect.location[1], m_wrect.size[0], m_wrect.size[1]);
|
getWindowFrame(m_wrect.location[0], m_wrect.location[1], m_wrect.size[0], m_wrect.size[1]);
|
||||||
switch (event->xgeneric.evtype) {
|
switch (event->xgeneric.evtype) {
|
||||||
case XI_Motion: {
|
case XI_Motion: {
|
||||||
fmt::print(stderr, fmt("motion\n"));
|
fmt::print(stderr, FMT_STRING("motion\n"));
|
||||||
|
|
||||||
XIDeviceEvent* ev = (XIDeviceEvent*)event;
|
XIDeviceEvent* ev = (XIDeviceEvent*)event;
|
||||||
if (m_lastInputID != ev->deviceid)
|
if (m_lastInputID != ev->deviceid)
|
||||||
|
|
2
logvisor
2
logvisor
|
@ -1 +1 @@
|
||||||
Subproject commit 27814c527622538d384336c4d43cf5b4b6869859
|
Subproject commit d62b4ce26e4eb7f70126173a10a58bc858fecc02
|
Loading…
Reference in New Issue