किताब के प्रैक्टिस रेंडरिंग एंड कम्प्यूटेशन में डायरेक्ट 3 डी 11 (पेज 325, 326) के खंड 6.4 कॉन्स्टेंट बफ़र्स में इसका उल्लेख है:
डिफ़ॉल्ट रूप से, एचएलएसएल कंपाइलर स्थिरांक को संरेखित करने का प्रयास करेगा, ताकि वे कई फ्लोट 4 रजिस्टरों को न पाएं। [...] HLSL निरंतर बफर के लिए पैकिंग को भी मैन्युअल रूप से packoffset कीवर्ड के माध्यम से निर्दिष्ट किया जा सकता है।
मुझे लगता है कि एक समान नियम OpenGL के समतुल्य, यूनिफ़ॉर्म बफ़र ऑब्जेक्ट्स पर लागू होगा, क्योंकि वे एक ही हार्डवेयर फीचर में मैप करते हैं।
हालांकि वेनिला वर्दी के बारे में क्या? वर्दी घोषित करते समय कौन से नियम लागू होते हैं?
uniform vec2 xy; // Can we expect the compiler to pack xy
uniform vec2 zw; // into a same four component register?
uniform vec2 rg;
uniform float foo; // Will this prevent from packing rg and ba?
uniform vec2 ba; // If so, will foo eat up a full four components register?
यदि कंपाइलर ऐसी अनुकूलन कर सकता है, तो वे कितने अच्छे हैं? क्या हम संकलक को स्पष्ट रूप से बता सकते हैं कि पैक करना है या नहीं और हमें कब करना चाहिए?
s_buffer_load_dword
निर्देश है - जो इनपुट वर्दी पढ़ रहे हैं, और हेक्स में अंतिम संख्या से पढ़ने के लिए ऑफसेट है। यह पहले मामलेxy
में ऑफसेट 0 पर औरzw
ऑफसेट 16 पर दिखाता है। दूसरे मामले में आपके पासxy
ऑफसेट 0 पर,z
ऑफसेट 16zw
पर और ऑफसेट 32 पर है। ऐसा प्रतीत होता है कि सभी वर्दी व्यक्तिगत रूप से 16-बाइट-संरेखित हैं, और पैक नहीं किए गए हैं एक साथ या पुन: व्यवस्थित।