renderMetal: device/vendor name and API version
This commit is contained in:
parent
c64a0f51c4
commit
18334b2018
|
@ -24,7 +24,8 @@ struct FurnaceGUIRenderMetalPrivate;
|
||||||
class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
||||||
SDL_Renderer* sdlRend;
|
SDL_Renderer* sdlRend;
|
||||||
FurnaceGUIRenderMetalPrivate* priv;
|
FurnaceGUIRenderMetalPrivate* priv;
|
||||||
bool swapIntervalSet;
|
bool swapIntervalSet, bigTextures;
|
||||||
|
String vendorName, deviceName, apiVersion;
|
||||||
public:
|
public:
|
||||||
ImTextureID getTextureID(FurnaceGUITexture* which);
|
ImTextureID getTextureID(FurnaceGUITexture* which);
|
||||||
bool lockTexture(FurnaceGUITexture* which, void** data, int* pitch);
|
bool lockTexture(FurnaceGUITexture* which, void** data, int* pitch);
|
||||||
|
@ -44,6 +45,12 @@ class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
||||||
void present();
|
void present();
|
||||||
bool getOutputSize(int& w, int& h);
|
bool getOutputSize(int& w, int& h);
|
||||||
int getWindowFlags();
|
int getWindowFlags();
|
||||||
|
int getMaxTextureWidth();
|
||||||
|
int getMaxTextureHeight();
|
||||||
|
const char* getBackendName();
|
||||||
|
const char* getVendorName();
|
||||||
|
const char* getDeviceName();
|
||||||
|
const char* getAPIVersion();
|
||||||
void setSwapInterval(int swapInterval);
|
void setSwapInterval(int swapInterval);
|
||||||
void preInit();
|
void preInit();
|
||||||
bool init(SDL_Window* win, int swapInterval);
|
bool init(SDL_Window* win, int swapInterval);
|
||||||
|
@ -53,5 +60,9 @@ class FurnaceGUIRenderMetal: public FurnaceGUIRender {
|
||||||
FurnaceGUIRenderMetal():
|
FurnaceGUIRenderMetal():
|
||||||
sdlRend(NULL),
|
sdlRend(NULL),
|
||||||
priv(NULL),
|
priv(NULL),
|
||||||
swapIntervalSet(false) {}
|
swapIntervalSet(false),
|
||||||
|
bigTextures(false),
|
||||||
|
vendorName("Unknown"),
|
||||||
|
deviceName("Unknown Graphics Device"),
|
||||||
|
apiVersion("???") {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -185,6 +185,30 @@ int FurnaceGUIRenderMetal::getWindowFlags() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderMetal::getMaxTextureWidth() {
|
||||||
|
return bigTextures?16384:8192;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FurnaceGUIRenderMetal::getMaxTextureHeight() {
|
||||||
|
return bigTextures?16384:8192;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderMetal::getBackendName() {
|
||||||
|
return "Metal";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderMetal::getVendorName() {
|
||||||
|
return vendorName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderMetal::getDeviceName() {
|
||||||
|
return deviceName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* FurnaceGUIRenderMetal::getAPIVersion() {
|
||||||
|
return apiVersion.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUIRenderMetal::setSwapInterval(int swapInterval) {
|
void FurnaceGUIRenderMetal::setSwapInterval(int swapInterval) {
|
||||||
if (SDL_RenderSetVSync(sdlRend,(swapInterval>=0)?1:0)!=0) {
|
if (SDL_RenderSetVSync(sdlRend,(swapInterval>=0)?1:0)!=0) {
|
||||||
swapIntervalSet=false;
|
swapIntervalSet=false;
|
||||||
|
@ -199,6 +223,33 @@ void FurnaceGUIRenderMetal::preInit() {
|
||||||
priv=new FurnaceGUIRenderMetalPrivate;
|
priv=new FurnaceGUIRenderMetalPrivate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* metalFamilyNames[]={
|
||||||
|
"Apple1",
|
||||||
|
"Apple2",
|
||||||
|
"Apple3",
|
||||||
|
"Apple4",
|
||||||
|
"Apple5",
|
||||||
|
"Apple6",
|
||||||
|
"Apple7",
|
||||||
|
"Apple8",
|
||||||
|
"Apple9",
|
||||||
|
"Mac1",
|
||||||
|
"Mac2",
|
||||||
|
"Common1",
|
||||||
|
"Common2",
|
||||||
|
"Common3",
|
||||||
|
"Metal3",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static const NSInteger metalFamilies[]={
|
||||||
|
1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, // Apple
|
||||||
|
2001, 2002, // Mac
|
||||||
|
3001, 3002, 3003, // Common
|
||||||
|
5001, // Metal3
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
bool FurnaceGUIRenderMetal::init(SDL_Window* win, int swapInterval) {
|
bool FurnaceGUIRenderMetal::init(SDL_Window* win, int swapInterval) {
|
||||||
SDL_SetHint(SDL_HINT_RENDER_DRIVER,"metal");
|
SDL_SetHint(SDL_HINT_RENDER_DRIVER,"metal");
|
||||||
|
|
||||||
|
@ -222,6 +273,24 @@ bool FurnaceGUIRenderMetal::init(SDL_Window* win, int swapInterval) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vendorName=[priv->context.device.architecture.name UTF8String];
|
||||||
|
deviceName=[priv->context.device.name UTF8String];
|
||||||
|
apiVersion="";
|
||||||
|
|
||||||
|
bool comma=false;
|
||||||
|
for (int i=0; metalFamilies[i]; i++) {
|
||||||
|
const char* familyName=metalFamilyNames[i];
|
||||||
|
MTLGPUFamily family=(MTLGPUFamily)metalFamilies[i];
|
||||||
|
|
||||||
|
if ([priv->context.device supportsFamily:family]) {
|
||||||
|
if (comma) {
|
||||||
|
apiVersion+=", ";
|
||||||
|
}
|
||||||
|
apiVersion+=familyName;
|
||||||
|
comma=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
priv->context.pixelFormat=MTLPixelFormatBGRA8Unorm;
|
priv->context.pixelFormat=MTLPixelFormatBGRA8Unorm;
|
||||||
|
|
||||||
priv->cmdQueue=[priv->context.device newCommandQueue];
|
priv->cmdQueue=[priv->context.device newCommandQueue];
|
||||||
|
|
Loading…
Reference in a new issue