예제 #1
0
파일: GLX_dummy.c 프로젝트: zgchi/libglvnd
static GLboolean dummyInitiatePatch(int type,
                                    int stubSize,
                                    DispatchPatchLookupStubOffset lookupStubOffset)
{
    void *writeAddr;
    const void *execAddr;

    if (!dummyCheckPatchSupported(type, stubSize))
    {
        return GL_FALSE;
    }

    if (lookupStubOffset("Vertex3fv", &writeAddr, &execAddr)) {
        switch (type) {
            case __GLDISPATCH_STUB_X86_64_TLS:
            case __GLDISPATCH_STUB_X86_64_TSD:
                patch_x86_64_tls(writeAddr, execAddr, stubSize);
                break;
            case __GLDISPATCH_STUB_X86_TLS:
                patch_x86_tls(writeAddr, execAddr, stubSize);
                break;
            case __GLDISPATCH_STUB_ARMV7_THUMB_TSD:
                patch_armv7_thumb_tsd(writeAddr, execAddr, stubSize);
                break;
            default:
                assert(0);
        }
    }

    return GL_TRUE;
}
예제 #2
0
GLboolean commonInitiatePatch(int type, int stubSize,
        DispatchPatchLookupStubOffset lookupStubOffset,
        int *incrementPtr)
{
    void *writeAddr;
    const void *execAddr;

    if (!dummyCheckPatchSupported(type, stubSize)) {
        return GL_FALSE;
    }

    if (lookupStubOffset("Vertex3fv", &writeAddr, &execAddr)) {
        switch (type) {
            case __GLDISPATCH_STUB_X86_64:
                patch_x86_64(writeAddr, execAddr, stubSize, incrementPtr);
                break;
            case __GLDISPATCH_STUB_X86:
                patch_x86(writeAddr, execAddr, stubSize, incrementPtr);
                break;
            case __GLDISPATCH_STUB_ARMV7_THUMB:
                patch_armv7_thumb(writeAddr, execAddr, stubSize, incrementPtr);
                break;
            case __GLDISPATCH_STUB_AARCH64:
                patch_aarch64(writeAddr, execAddr, stubSize, incrementPtr);
                break;
            default:
                assert(0);
        }
    }

    return GL_TRUE;
}