LIBGL_ALWAYS_INDIRECT = 1 আসলে কী করে?


22

মাই সহ কিছু ভিডিও কার্ড নিয়ে কেডিএ এসসি 4.5.৪.০ এর কিছু সমস্যা রয়েছে। রিলিজ হওয়ার পরে আর্কে বেশ কয়েকটি কর্মক্ষেত্রের প্রস্তাব দেওয়া হয়েছিল । যার মধ্যে একটি ছিল

কেডিএ শুরু করার আগে "LIBGL_ALWAYS_INDIRECT = 1" রফতানি করুন

আমি সিদ্ধান্ত নিয়েছি যে এটি ছিল সবচেয়ে সহজ, সর্বোত্তম পদ্ধতি। তবে আমি জানি না এটি কী করে বা এটি আমার সিস্টেমে কীভাবে প্রভাব ফেলে। এটি কি ডিফল্টের চেয়ে ধীর? সমস্যাটি লক্ষ্য করা এবং এটি ঠিক করার পরে এটি অক্ষম করার জন্য আমার কি মনে রাখা উচিত?

উত্তর:


13

অপ্রত্যক্ষ রেন্ডারিং এর অর্থ হ'ল জিএলএক্স প্রোটোকলটি ওপেনএল কমান্ড প্রেরণ করতে ব্যবহৃত হবে এবং এক্স.আর.জিও আসল অঙ্কন করবে।

ডাইরেক্ট রেন্ডারিংয়ের অর্থ হল অ্যাপ্লিকেশনটি প্রথমে ম্যাসার মাধ্যমে এক্স.আর.এস এর সাথে যোগাযোগ না করে সরাসরি হার্ডওয়্যার অ্যাক্সেস করতে পারে।

এক্সট্রাকশন প্রক্রিয়ায় প্রসঙ্গের পরিবর্তনের প্রয়োজন হয় না বলে সরাসরি রেন্ডারিং দ্রুত হয়।

স্পষ্টকরণ: উভয় ক্ষেত্রে রেন্ডারিং জিপিইউ দ্বারা সম্পন্ন হয় (বা প্রযুক্তিগতভাবে - জিপিইউ দ্বারা সম্পন্ন হতে পারে)। তবে অপ্রত্যক্ষভাবে রেন্ডারিংয়ের সময় প্রক্রিয়াটি দেখতে দেখতে দেখতে:

  1. প্রোগ্রাম একটি কমান্ড (গুলি) কল করে
  2. কমান্ড (গুলি) GLX প্রোটোকল দ্বারা X.org- এ প্রেরণ করা হয়
  3. এক্স.আর.জি হার্ডওয়ারকে (অর্থাৎ জিপিইউ) আঁকতে কল করে

সরাসরি উপস্থাপনে

  1. প্রোগ্রাম একটি কমান্ড (গুলি) কল করে
  2. কমান্ড (গুলি) জিপিইউতে / প্রেরণ করা হয়

দয়া করে মনে রাখবেন যে ওপেনজিএল এমনভাবে ডিজাইন করা হয়েছিল যা নেটওয়ার্কের মাধ্যমে অপ্রত্যক্ষ রেন্ডারিং দ্রুত চালিত হতে পারে তবে আর্কিটেকচারের নির্বিকার প্রয়োগ হতে পারে অর্থাত্ একবারে কমান্ডের একগুচ্ছ পাঠাতে দেয়। কনটেক্সট সুইচ এবং হ্যান্ডলিং প্রোটোকলের জন্য সিপিইউ সময় ব্যয় করার ক্ষেত্রে কিছু ওভারহেড রয়েছে।


এর অর্থ কি আমার সিপিইউ আমার ভিডিও চিপের পরিবর্তে রেন্ডারিং এটিএম করছে?
xenoterracide

3
না। উভয় ক্ষেত্রে আপনার ত্বরণ থাকলে জিপিইউ অঙ্কনটি করে - তবে অতিরিক্ত ওভারহেড রয়েছে। ত্বরান্বিত অঙ্কনটি বহির্মুখীভাবে ধীর নয় এবং কোনও প্রভাব যা LIBGL_ALWAYS_INDIRECT=1এটির সাথে কাজ করবে (যেমন অপ্রত্যক্ষ রেন্ডারিং ওয়ার্কআরাউন্ড সাধারণত ওপেনজিএল যেমন যৌগিক ডাব্লুএম এর উন্নত ব্যবহারের জন্য প্রয়োজন)।
ম্যাকিয়েজ পাইচোটকা

14

প্রথমত, 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) বা অন্য কিছু বাগ এড়ানো।

অন্তর্নিহিত সমস্যাটি স্থির হয়ে গেলে অবশ্যই আপনি এই পতাকাটি সরাতে চান।


দ্রষ্টব্য হিসাবে: অন্যান্য ব্যবহারকারীরা এনভিডিয়া দিয়ে এটি করতে সক্ষম হতে পারেন: __GL_ALLOW_UNOFFICIAL_PROTOCOL ... আমি জিনোম-সেশন-ওয়েল্যান্ডল্যান্ড (3.18) ধারণার প্রত্যন্ত অ্যাপ্লিকেশন প্রমাণের জন্য এটি ব্যবহার করছি।
এলিকা কোহেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.