প্রথমত, LIBGL_ALWAYS_INDIRECT
মেসা 3 ডি ক্লায়েন্ট-সাইড ওপেনএল বাস্তবায়ন (libGL.so) সম্পর্কিত একটি পতাকা। এটি অন্যান্য বিক্রেতাদের (যেমন এনভিআইডিআইএ) বাইনারি ড্রাইভারদের সাথে কাজ করবে না।
দ্বিতীয়ত, আপনার প্রশ্নের সরাসরি উত্তর দিতে, সর্বশেষে আমি মেসা কোডটির দিকে তাকিয়েছিলাম পতাকাটি এইভাবে কাজ করে:
২০০~ এর প্রাকের আগে যখন মেসা একটি অপ্রত্যক্ষ এক্স সার্ভারের সাথে কাজ করছিল (যেমন আপনি কোনও ssh -X
স্থানীয়-স্থানীয় সার্ভারে প্রদর্শন করেছেন বা প্রকাশ করেছেন) এটি আপনার জিএলএক্স অ্যাপ্লিকেশনে রিমোট এক্স সার্ভারের সরবরাহিত জিএলএক্স ভিজ্যুয়ালগুলির তালিকা তৈরি করবে। অ্যাপ্লিকেশন কলগুলি যেমন glXChooseVisual () এবং মেসার সাথে মিলের কিছু যুক্তিসঙ্গত মনে glFoo()
হবে এবং পরবর্তী কলগুলি রিমোট এক্স সার্ভারে প্রেরণ করা হত যেখানে রিমোট এক্স সার্ভারটি আপলোড করা হয়েছিল (সম্ভবত আপনার জিপিইউ) যা কিছু libGL দ্বারা সম্পাদিত হয়েছিল।
২০০৮ এর শেষের দিকে মেসাকে এমনভাবে পরিবর্তন করা হয়েছিল যে এটি দূরবর্তী এক্স সংযোগের জন্য তার অভ্যন্তরীণ সফ্টওয়্যার ওপেনজিএল রেন্ডারার ( এক্স্লিব ড্রাইভার ) ব্যবহার করতে চেয়েছিল । (সুসির মতো কিছু বিতরণ পুরানো আচরণে ফিরে যাওয়ার জন্য এটি বিশেষভাবে প্যাচ করে)) দূরবর্তী এক্স সার্ভারটি কোনও জিএলএক্স ভিজ্যুয়াল সরবরাহ করে যা অভ্যন্তরীণ সফ্টওয়্যার রেন্ডারারের মধ্যে একটির সাথে মিলে যায় This (অন্যথায় আপনি সাধারণটি পেয়ে যাবেন, " ত্রুটি: কোনও আরজিবি, ডাবল-বাফার ভিজ্যুয়াল পাওয়া যায়নি")) যদি এইরকম ভিজ্যুয়ালটি পাওয়া যায় তবে মেসা glFoo()
স্থানীয় (অ্যাপ্লিকেশন) সিপিইউতে সমস্ত কমান্ড সরবরাহ করে এবং চাপটি চাপিয়ে দেয় would রাস্টার ইমেজগুলির মাধ্যমে দূরবর্তী এক্স সার্ভারে ফলাফল ( XPutImage()
); সেট করা LIBGL_ALWAYS_INDIRECT=1
(17.3 মেসার পূর্বে কোনও মান কার্যকর হবে, তারপরে আপনাকে অবশ্যই 1 বা সত্য ব্যবহার করতে হবে) মেসাকে সাধারণ প্রত্যক্ষ উপস্থাপনা বা অভ্যন্তরীণ সফ্টওয়্যার রেন্ডারারকে উপেক্ষা করতে এবং আগের মতো পরোক্ষ রেন্ডারিং ব্যবহার করতে বলে।
অপ্রত্যক্ষ রেন্ডারিং বা সরাসরি সফ্টওয়্যার রেন্ডারিং নির্বাচন করা দুটি জিনিসকে প্রভাবিত করবে:
ওপেনজিএল সংস্করণ
- অপ্রত্যক্ষ রেন্ডারিং সাধারণত ওপেনগেল 1.4 এ সীমাবদ্ধ।
- ডাইরেক্ট সফ্টওয়্যার রেন্ডারিং মেসা সফটওয়্যার রাস্টারাইজার যা সমর্থন করে, সমর্থন করবে, সম্ভবত ওপেনএল 2.1+
কর্মক্ষমতা
- যদি আপনার অ্যাপ্লিকেশনটি পরোক্ষ সংযোগের জন্য ডিজাইন করা হয় (এটি প্রদর্শন তালিকাগুলি ব্যবহার করে, রাউন্ড-ট্রিপ কোয়েরিগুলি ছোট করে) তবে আপনি যুক্তিসঙ্গত পারফরম্যান্স পেতে পারেন।
- যদি আপনার অ্যাপ্লিকেশনটি
glGetInteger()
ফ্রেম প্রতি 100 বারের মতো বোকামি করে তোলে তবে দ্রুত লেনেও এই প্রশ্নগুলির প্রতিটি সহজেই 1 মিমি বা 100 মিমি মোট ফ্রেম প্রতি গ্রহণ করতে পারে যার অর্থ আপনি কখনই আপনার অ্যাপ্লিকেশনটিতে 10 টিরও বেশি এফপিএস পেতে পারেন না।
- সেই একই অ্যাপ্লিকেশন, যদি রেন্ডারিং লোড খুব বেশি ভারী না হয় তবে সরাসরি সফটওয়্যার রেন্ডারিংয়ের সাথে খুব ভাল সম্পাদন করতে পারে, যেহেতু এই সমস্ত
glGetInteger()
কলগুলির সরাসরি মাইক্রো বা ন্যানোসেকেন্ডের ক্ষেত্রে জবাব দেওয়া হয়।
- যদি আপনার অ্যাপ্লিকেশনটি মিলিয়ন-ভার্টেক্স প্রদর্শনের তালিকা তৈরি করে এবং প্রচুর ঘোরাফেরা করে তবে অন্য প্রান্তে সত্যিকারের জিপিইউ দিয়ে অপ্রত্যক্ষ রেন্ডারিং আরও ভাল পারফরম্যান্স দেবে।
- অ্যাপ্লিকেশন এছাড়াও অন্য কোনও কোডের পথে ফিরে যেতে পারে যখন এতে কেবল ওপেনজিএল 1.4 বনাম 2.x পাওয়া যায়, যা কার্য সম্পাদনকেও প্রভাবিত করতে পারে।
সুতরাং, আপনি আপনার অ্যাপ্লিকেশন এবং আপনার নেটওয়ার্ক বৈশিষ্ট্যগুলির সঠিক বিবরণ ছাড়াই দেখতে পাচ্ছেন যে কোনও নির্দিষ্ট অবস্থার জন্য সরাসরি সফ্টওয়্যার রেন্ডারিং বা অপ্রত্যক্ষ রেন্ডারিং ভাল কিনা তা বলা অসম্ভব।
আপনার ক্ষেত্রে মনে হচ্ছে আপনি একটি স্থানীয় কেভিন ইনস্ট্যান্স চালাচ্ছেন, সুতরাং এর প্রভাবটি LIBGL_ALWAYS_INDIRECT
আপনার স্থানীয় এক্স সার্ভারে অপ্রত্যক্ষভাবে রেন্ডারিংয়ে বাধ্য করা। এটি দৃশ্যত হয় হয় kwin
আচরণের পরিবর্তন (শুধুমাত্র ওপেনজিএল 1.4) বা অন্য কিছু বাগ এড়ানো।
অন্তর্নিহিত সমস্যাটি স্থির হয়ে গেলে অবশ্যই আপনি এই পতাকাটি সরাতে চান।